Linux UWB Stack实现——FiRa会话状态机

news2024/12/28 20:54:35

在FiRa标准中,很重要的一个概念就是FiRa会话以及会话的管理,本文主要介绍了在Linux UWB Stack实现中,FiRa会话状态机管理的实现。

在FiRa中,会话分为INIT、DEINIT、ACTIVE、IDLE四种状态,其定义如下。

enum fira_session_state_id {
	FIRA_SESSION_STATE_ID_INIT,
	FIRA_SESSION_STATE_ID_DEINIT,
	FIRA_SESSION_STATE_ID_ACTIVE,
	FIRA_SESSION_STATE_ID_IDLE,
};

其中:
● INIT,初始化状态,会话还未准备好;
● DEINIT,会话注销,不存在;
● ACTIVE,会话活跃状态;
● IDLE,会话已经准备好开始,但并未激活。

1.相关结构体的定义

在实现中,通过定义了一个struct fira_session_fsm_state结构体来进行每种状态的管理,该结构体包含一系列回调函数,用于处理从当前状态转换的事件,结构体定义如下:
在这里插入图片描述
包含了fira会话状态id,以及一系列的回调函数:

  • enter/leave,跳转和离开此状态时调用;
  • check_parameters,处理参数检查;
  • parameters_updated,处理参数更新事件;
  • controlee_list_updated,对于控制器,处理受控端列表更新事件;
  • start/stop,处理开始与结束;
  • get_demand,根据时间信息,处理获取需求;需求结合,struct fira_localstruct fira_session相关指针信息;
  • get_access,获取mcps802154_access对象指针;
  • access_done,访问结束后处理;
  • check_missed_ranging,处理丢失的测距的检查。

基于该状态结构体,以及fira会话中的四种状态,根据实际应用中的需求,定义了以下三个实例:

  • fira_session_fsm_init,INIT状态处理实例;
  • fira_session_fsm_idle,IDLE状态处理实例;
  • fira_session_fsm_active,ACTIVE状态处理实例。

DEINIT状态,会话已经不存在,所以在具体状态的实现中,直接没有进行定义。

1.1 fira_session_fsm_init

请添加图片描述从实现来看,INIT状态,主要处理进入、参数更新、受控端列表更新以及参数检查四种回调函数。

  • enter,当会话准备好,将fira_session的状态切换为IDLE状态;
	if (fira_session_is_ready(local, session)) {
		fira_session_fsm_change_state(local, session,
					      &fira_session_fsm_idle);
	}
  • 其他回调也主要是将状态更改到IDLE。

1.2 fira_session_fsm_idle

请添加图片描述对于IDLE状态而言,实现了参数更新处理、受控端列表更新、开始以及参数检查处理。

  • 参数更新、受控端列表更新事件,都将状态切换到INIT状态。
  • 参数检查回调,用于检查FIRA会话的参数。
  • start回调中,将更新会话、设置无线设备参数等操作,状态切换为ACTIVE,触发调度器重新调度 mcps802154_reschedule(local->llhw);

1.3 fira_session_fsm_active

请添加图片描述相对其他状态而言,ACTIVE状态为FiRa会话管理的核心,相应实现的对应状态下的回调函数而言相对较为全面,从enter/leave,参数更新与检查,启动/停止,获取访问等等都进行了完整的实现。

2. 会话管理相关函数接口

相关接口在fira_session_fsm.c/h中定义与实现,相关接口如下:
在这里插入图片描述其中,

  • fira_session_fsm_change_state,用于改变FiRa会话有限状态机的状态,实现状态跳转。
  • fira_session_is_active,用于判断对应会话是否为ACTIVE状态;
  • fsm_initialise,初始化状态机;
  • fsm_uninit,注销FSM;
  • fsm_check_parameters,检查上层请求的参数是否有变化;
  • fsm_parameters_updated,上层参数更新;
  • fsm_controlee_list_updated,上层更新受控端列表;
  • fsm_start/stop,上层开始/停止请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1144895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年上半年上午易错题(软件设计师考试)

计算机中,系统总线用于 (1) 连接。 A. 接口和外设 B. 运算器、控制器和寄存器 C. CPU、主存及外设部件 D. DMA控制器和中断控制器 在由高速缓存、主存和硬盘构成的三级存储体系中,CPU执行指令时需要读取数据,那…

常用JQuery插件汇总

Jquery插件,数字动画特效,从n到m数字跳动JJ​​​​​​​CountUp.jsA javascript class that animates a numerical value by counting to it.http://inorganik.github.io/countUp.js/

pycharm 2023.2.3设置conda虚拟环境

分两步: (1)设置Virtualenv Environment (2)设值Conda Executable 加载conda环境,然后选择conda环境

系列二十三、bean的创建顺序是由什么决定的

一、bean的创建顺序是由什么决定的 bean的创建顺序是由bean的注册顺序决定的。 # 第一步: AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(MySpringConfig.class);# 第二步: refresh();# 第三步: fi…

绿色先行——建行江门市分行支助力补齐“三农”金融服务短板

7月的台山,稻谷飘香。在大耕户李胜业的农田里,金灿灿的稻谷翻起层层稻浪,收割机在稻浪里来回穿梭,割稻、脱粒、装车等工序一气呵成。空气中弥漫着丰收的喜悦。 夏粮迎丰收的背后,是中国建设银行江门市分行(…

【计算机网络】(谢希仁第八版)第一章课后习题答案

1.计算机网络可以向用户提供哪些服务? 答:例如音频,视频,游戏等,但本质是提供连通性和共享这两个功能。 连通性:计算机网络使上网用户之间可以交换信息,好像这些用户的计算机都可以彼此直接连…

【机器学习可解释性】4.SHAP 值

机器学习可解释性 1.模型洞察的价值2.特征重要性排列3.部分依赖图4.SHAP 值5.SHAP 值 高级使用 正文 理解各自特征的预测结果? 介绍 您已经看到(并使用)了从机器学习模型中提取一般解释技术。但是,如果你想要打破模型对单个预测的工作原理? SHAP 值…

第三章 SysML入门|系统建模语言SysML实用指南学习

仅供个人学习记录 UML与SysML的联系 可以稍微参考UML与SysML的联系 UML(统一建模语言)和SysML(系统建模语言)是两种与建模相关的语言,它们之间存在联系和区别。 SysML的图分类如下图所示。 SysML 图概述 这里只…

GZ035 5G组网与运维赛题第3套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项(高职组) 赛题第3套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通(35分) 子任务1:5G公共网络部署与调试(15分) 子…

锐捷smartWeb管理系统存在逻辑缺陷漏洞

通过弱口令进行登录 guest/guest 通过低权限用户构造payload: /web/xml/webuser-auth.xml访问漏洞url,直接获得所有账户的等级标志和base64加密的账号密码,解秘后即可登录后台 解密管理员的账号密码 成功登录 文笔生疏,措辞浅…

C++快餐——C++11(1)

文章目录 背景简介统一列表初始化{}初始化initializer_lists初始化 关键字autodecltypenullptr 范围for右值引用和移动语义左值和右值左值引用和右值引用完美转发 默认成员函数总结 背景简介 C11,也被称为C0x(在它被正式标准化之前的名字)&a…

JVM调优(10)JVM的运行时数据区

一、概述 对于 C C 来说,在内存管理领域,JVM既拥有最高的权利,但是同时他们又是从事最基础工作的劳动人员,因为他们担负着每一个对象从开始到结束的维护责任。而对于Java来说,再虚拟机自动内存管理的帮助下&#xff0…

Proteus仿真--花样流水灯(仿真文件+程序)

本文主要介绍基于51单片机的花样流水灯仿真(完整仿真源文件及代码见文末链接) 仿真运行视频 Proteus仿真--花样流水灯(仿真文件程序) 附完整Proteus仿真资料代码资料 链接: https://pan.baidu.com/s/1coEEBQcTQSzWQiSH_nNiUQ?pw…

vm虚拟机保护技术简介EzMachine例题-vm逆向分析

文章目录 前言0x1 虚拟机保护技术原理0x1A 关于调用约定0x1B Handler0x1C 指令 0x2 vm虚拟机逆向 实战[GKCTF 2020]EzMachine题目分析,花指令去除Handler分析脚本编写 前言 关于虚拟机逆向的知识网上很少,我看了几篇感觉都看不太明白,最后还…

如何设置3D模型的凹凸贴图?

1、凹凸贴图的原理? 凹凸贴图(bump mapping)是一种计算机图形技术,用于增强表面的视觉效果,使其看起来具有凹凸感,而实际上并没有改变模型的几何形状。 凹凸贴图的原理基于光照模型。通常,我们…

分布式理论和分布式锁知识点总结

文章目录 (一) 分布式理论算法和协议1)CAP理论总结 2)BASE理论BASE 理论的核心思想基本可用软状态最终一致性 3)Paxos算法Basic Paxos 算法4) Raft算法1 拜占庭将军 5)Gossip协议 (二) 分布式锁分布式锁应该具备哪些条…

U盘RAW格式怎么恢复 U盘RAW格式怎么改过来

当我们遇到U盘变成raw格式时,首先需要了解的是,U盘的raw格式通常是由于文件系统损坏或病毒感染引起的。当U盘变成raw格式时,将导致无法正常访问其中数据。因此,需要我们手动恢复U盘中的相关数据,那么下面就来为大家介绍…

亚信科技:发挥自我优势深入AIGC,并购整合高瞻远瞩致力未来路

【科技明说 | 重磅专题】 亚信科技在IT提供商领域中是一个低调的前行者,在全球通信及大型企业市场中扮演着重要的角色。对于近年来如火如荼AI方面的投入与研究,亚信科技是否也很重视呢? 事实上,是肯定的回答。 在我看…

C++ stack queue 的模拟实现

1.为什么选择 deque 作为 stack 和 queue 的默认容器呢? stack 是一种后进先出的特殊线性数据结构,因此只要具有 push_back() 和 pop_back() 操作的线性结构,都可 以作为 stack 的底层容器,比如 vector 和 list 都可以&#xff1b…

常用字符串函数拓展

文章目录 字符串拓展函数strncpystrncatstrncmpstrstrstrtokstrerrormemcpymemmovememcmpmemset 库函数模拟实现memmoveqsort 我们在学习C语言时已经学习了一些常见的字符串函数,但这还不能满足我们的需求,为此我们拓展了几个常用的字符串函数。 字符串拓…