当前位置: 首页 > article >正文

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

在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.kler.cn/news/107612.html

相关文章:

  • jmeter疑难杂症
  • 数据库数据恢复—Oracle数据库报错ORA-01110错误的数据恢复案例
  • Hive 常用DML操作
  • 前端移动web高级详细解析二
  • 安装虚拟机(VMware)保姆级教程及配置虚拟网络编辑器和安装WindowsServer以及宿主机访问虚拟机和配置服务器环境
  • 实体店做商城小程序如何
  • 模数转换器-ADC基础
  • 深入探究深度学习、神经网络与卷积神经网络以及它们在多个领域中的应用
  • Android-宝宝相册(第四次作业)
  • 【计算机网络】(谢希仁第八版)第一章课后习题答案
  • 软考 系统架构设计师系列知识点之设计模式(9)
  • ES6之Set集合(通俗易懂,含实践)
  • 外卖霸王餐系统 支持小程序,分站合作
  • 关于pycharm中句号变成点的问题
  • Redis 与 MySQL 一致性 实现方案
  • RSA:基于小加密指数的攻击方式与思维技巧
  • SpringCore完整学习教程5,入门级别
  • 单元测试Testng
  • vue中如何获取当时时间时分秒
  • “第五十三天”
  • 数据库批处理
  • C++学习笔记之四(标准库、标准模板库、vector类)
  • slice()和splice()用法
  • 【笔录】TVP技术沙龙:寻宝AI时代
  • dd命令用法学习,是一个功能强大的工具
  • 走进人工智能的大门:打造职业梦想的契机
  • Vue+ElementUI项目打包部署到Ubuntu服务器中
  • C# 图解教程 第5版 —— 第11章 结构
  • Vue3问题:如何实现密码加密登录?前后端!
  • 查询和下载国自然科学基金