Linux UWB Stack实现——MCPS通道访问

news2025/7/21 0:59:46

在前文MCPS相关介绍的基础之上,对UWB协议栈中实现访问控制相关数据结构进行介绍,并介绍了其载体struct mcps802154_local,保存了MCPS的私有数据。

1.关于MCPS802154_CA

关于IEEE 802.15.4 MAC公共部分子层(MAC common part sublayer,MCPS)通道访问,Channel Access, 简写为CA。

ca.h定义通道访问内部相关定义。
struct mcps802154_ca定义了通道访问的私有数据。

struct mcps802154_ca {
	/**
	 * @schedule: 当前MCPS调度计划
	 */
	struct mcps802154_schedule schedule;
	/**
	 * @scheduler: 维护调度计划schedule的调度器,若未选择为NULL
	 */
	struct mcps802154_scheduler *scheduler;
	/**
	 * @regions: 当前调度计划中可用的区域列表
	 */
	struct list_head regions;
	/**
	 * @n_regions: 当前打开的区域数量
	 */
	int n_regions;
	/**
	 * @held: 当前访问是否被持有且无法更改.
	 */
	bool held;
	/**
	 * @reset: 当前调度计划是否无效且需要更改
	 */
	bool reset;
	/**
	 * @idle_access: 当没有任务时用于等待的idle访问。
	 */
	struct mcps802154_access idle_access;
};

CA初始化与去初始化,需要包含MCPS私有数据(struct mcps802154_local *local)。

  • mcps802154_ca_init
  • mcps802154_ca_uninit

以下CA相关操作需要FSM互斥锁加锁。包括CA的开始、停止、通知停止以及关闭,即对于执行通道访问相关操作时,都需要有限状态机(FSM)互斥锁加锁。

  • mcps802154_ca_start
  • mcps802154_ca_stop
  • mcps802154_ca_notify_stop
  • mcps802154_ca_close

另外,CA的调度器的管理(调度器设置、参数设置以及调用);区域的设置、参数设置与调用也需要FSM加锁。

  • mcps802154_ca_set_scheduler
  • mcps802154_ca_scheduler_set_parameters
  • mcps802154_ca_scheduler_call
  • mcps802154_ca_set_region
  • mcps802154_ca_set_region_parameters
  • mcps802154_ca_call_region

此外,mcps802154_ca_xmit_skb实现将缓冲区的内容通过接受它的第一个域发送。
具体实现上,通过遍历ca.regions,若域支持skb发送,则调用发送。

int mcps802154_ca_xmit_skb(struct mcps802154_local *local, struct sk_buff *skb)
{
	struct mcps802154_region *region;
	int r = -EOPNOTSUPP;

	list_for_each_entry (region, &local->ca.regions, ca_entry) {
		if (region->ops->xmit_skb) {
			if (region->ops->xmit_skb(region, skb)) {
				r = 0;
				break;
			}
		}
	}
	return r;
}

通过下次访问机会的时间以及当前MCPS私有数据,获得访问。
获得访问的函数原型如下:

struct mcps802154_access *
mcps802154_ca_get_access(struct mcps802154_local *local,
			 u32 next_timestamp_dtu);

当发生了可能影响当前访问的更改时,可以调用以下函数来评估并通知FProc。例如,当队列中新增一帧数据时,应执行此操作,FProc收到通知后,更改访问。

void mcps802154_ca_may_reschedule(struct mcps802154_local *local);

当有些访问比较重要时,不允许其他访问抢占,直到当前的访问完成,此时需要将held字段置位,通过以下函数实现:

void mcps802154_ca_access_hold(struct mcps802154_local *local);

当某些变化会影响当前的调度表时,可以通过调用以下函数来使调度表无效并强制更新。更新会在当前访问结束之后进行,由于会涉及到访问,因此fsm_lock应加锁。使用场景:当域参数发生变化时,整个调度表都将无效,因此需要调用此API,无效当前调度表,并进行更新,函数原型如下:

void mcps802154_ca_invalidate_schedule(struct mcps802154_local *local);

2. 关于MCPS802154_LOCAL

从CA相关的介绍以及相关原型定义上,可以看到在mcps802154的实现上,很多地方都出现了struct mcps802154_local的引用。其构成如下:
在这里插入图片描述定义了MCPS的私有数据,其中包括:

  • llhw,底层硬件实例;
  • hw,指向Linux标准IEEE802154硬件实例的指针;
  • ops,底层驱动回调函数的指针;
  • cur_cmd_info,当前网络连接命令信息;
  • ca,定义了通道访问上下文的实例;
  • fproc,帧处理上下文;
  • fsm_lock,状态机锁,避免多重访问;
  • pib,用于存储PAN中的基础信息,包括网络配置信息、设备身份信息等,供协议栈和应用程序使用。在IEEE 802.15.4的网络中,PAN ID作为某个网络的唯一标识,进行网络相关操作。

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

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

相关文章

【k8s总结】

资源下载:http://www.ziyuanwang.online/912.html Kubernetes(K8s) 一、Openstack&VM 1、认识虚拟化 1.1、什么是虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的…

GB/T 41510-2022 起重机械安全评估规范 通用要求 摘要

在线预览|GB/T 41510-2022http://c.gb688.cn/bzgk/gb/showGb?typeonline&hcno696806EC48F4105CEF7479EB32C80C9E 知识点: 安全等级定义,设计寿命,剩余寿命,使用寿命。 标准附录有应力的具体解算演示。

剧本杀公众号系统开发在线组队开团多玩法

一款针对剧本杀行业开发的公众号系统,配置到公众号里即可轻松简单运营起来。 核心功能: 1、在线开本是特色,直接线上玩起。 2、支持多商户入驻哦、后台会同步进行控制。 3、前台剧本的控制。 4、多玩法模式,满足剧本杀爱好者…

AR智能眼镜主板设计方案_AR眼镜PCB板设计

AR智能眼镜是一种采用先进技术的创新产品,具备强大的功能和性能。它采用了MTK8788八核 12nm低功耗硬件平台,搭载IMG GE830063OMhz或以上的GPU,并运行Android 11.0或以上的操作系统。该眼镜支持光波导1080P显示和LVDS接口自由曲面显示&#xf…

SW2303 Type-C 口/Type-A 口快充协议芯片 支持多种快充协议

SW2303 是一款高集成度的 Type-C 口/Type-A 口快充协议芯片,支持 PD、QC、FCP、高低压 SCP、AFC、SFCP 以及 PE 等主流快充协议,支持光反馈和 FB 反馈两种工作模式SW2303 集成了 CV/CC 控制环路,Type-C 接口逻辑,快充协议控制器&a…

独家分析:安卓“Janus”漏洞的产生原理及利用过程

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。 近日,Google在12月发布的安卓系统安全公告中披露了一个名为“Janus”安卓漏洞(漏洞编号&#…

红黑树与AVL树

文章目录 前言一、AVL是什么?二、AVL的插入与删除插入删除 三、红黑树是什么四、红黑树的插入与删除插入删除 五、红黑树与AVL树的对比 前言 红黑树与AVL树是数据结构中避不开的话题,也是面试中常问的问题。今天就把他们总结在一起。 一、AVL是什么&am…

基于ChatGPT的智能客服助手

导读1.应用场景与系统框图2.搭建基于ChatGPT的智能客服助手 2.1 ChatGPT原理2.2 Prompt设计3.智能客服系统二期优化之用户问题分类 3.1 Bert简介3.2 用户问题分类网络训练数据3.3训练分类模型4.智能客服系统三期优化之商详和质检项相关知识筛选5.总结6.参考文献 导读 传统客服…

Web自动化测试:测试用例断言!

运行测试用例时,需要判断用例是否执行成功,此时需要有一个我们期望的结果来进行验证。这里unittest中,如果一个case执行的过程中报错,或者我们判断结果不符合期望,就会判定此条用例执行失败,判断的条件主要…

leetcode3. 无重复字符的最长子串 [滑动窗口]

题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释:…

蓝桥杯每日一题2023.10.17

迷宫 - 蓝桥云课 (lanqiao.cn) 题目描述 样例: 01010101001011001001010110010110100100001000101010 00001000100000101010010000100000001001100110100101 01111011010010001000001101001011100011000000010000 0100000000101010001101000010100000101010101100…

视频批量添加背景图片教程,详细步骤一看就会

你是否曾经需要为多个视频添加相同的背景图片?或者你需要为一些视频添加自定义的背景来增强视觉效果?如果你遇到了这样的问题,那么有一个软件可以帮助你解决,那就是固乔剪辑助手。下面是一个简单的步骤指南,教你如何使…

如何快速定位BUG?BUG定位技巧及测试人员定位的N板斧

很多测试人员可能会说,我的职责就是找到bug,至于找原因并修复,那是开发的事情,关我什么事? 好,我的回答是,如果您只想做一个测试人员最基本最本分的事情,那么可以这么想。但是&#…

基于边缘网关构建水污染监测治理方案

绿水青山就是金山银山,生态环境才是人类最宝贵的财富。但是在日常生活生产中,总是免不了各种污水的生产、排放。针对生产生活与环境保护的均衡,可以借助边缘网关打造环境污水监测治理体系,保障生活与环境的可持续性均衡发展。 水污…

数据结构-----红黑树(全)

目录 前言 一、什么是红黑树? 二、为什么需要红黑树?(与AVL树对比) 三、红黑树的特性 四、红黑树的储存结构 五、节点旋转操作 左旋(Left Rotation) 右旋(Right Rotation) 六、…

警惕!又2本Hindawi期刊被剔除,Scopus期刊目录更新!(附下载)

【SciencePub学术】 01Scopus目录更新概况 此次Scopus期刊目录更新后,有5本期刊不再被收录(Discontinued titles September 2023),同上次更新时相比,此次又新增93本期刊(Accepted titles)进入Scopus数据库。目前Scop…

Intelijj中报java版本错误

这次编译一个半年没动过的老项目,报了几次版本错误,通过多次尝试最终解决掉了该问题 错误一:Diamond types are not supported at language level 6 错误背景 该错误出现在intelijj中,打开项目后,下面的代码的后一个…

红海云签约COMMUNE,新兴餐饮行业加速人力资源数字化转型

COMMUNE是一家连锁餐酒吧品牌,将酒水自选区、超级吧台与经典就餐区三大功能板块有机融合,创建“复合商超零售经典西式餐饮”模式,是面向新中产阶层消费客群的全时段餐酒吧。 近日,连锁餐酒吧品牌COMMUNE母公司极物思维集团与红海…

C++ Builder 将运行时需要的库打进运行的程序包

一、打开【工程】–【选项】–【Linker】-- 设置【Use dynamic RTL】为 False 二、打开【工程】–【选项】–【组件包】-- 设置【和运行时组件包一起编译】为 False

Apipost使用介绍

相信无论是前端,还是后端的测试和开发人员,都遇到过这样的困难。不同工具之间数据一致性非常困难、低效。多个系统之间数据不一致,导致协作低效、频繁出问题,开发测试人员痛苦不堪。 API管理的难点在哪? 开发人员在 …