- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
NORDIC蓝牙BLE40方案SDK例子ANCS代码分析
?NORDIC蓝牙BLE4.0方案SDK例子ANCS代码分析参考:SDK11.0.0nRF5_SDK_11.0.0_89a8197\examples\ble_peripheral\ble_app_ancs_c1.? ???主函数下面结合上面的函数慢慢展开讲解。2.? ???宏定义3.? ???定时器timers_init如下图3.1.? ?APP_TIMER_APPSH_INT宏Nordic的定时器是通过RTC1模拟出了一个定时器时钟队列,所以在初始化时需要传入的参数有两个:APP_TIMER_PRESCALER:时钟分频APP_TIMER_OP_QUEUE_SIZE:timer的队列第3个参数是是否启动调度,这里true表示启用任务调度。也就是说会调用app_timer_evt_schedule函数进行时间任务调度,后面会讲解。上面的初始化时使用的宏,那么真正的初始化函数是:上面又是一个宏进行封装的,实体如下:不继续向下分析了,到这定时器就初始化完毕了。截取SDK说明文档中的说明吧!3.2.? ?定时器创建app_timer_create定时器创建函数如下:这里定时器句柄是通过宏进行定义的:这个宏的函数原型是:上面的“##” 表示连接前后的字符,也就是上面的宏表示static app_timer_t? ?m_sec_req_timer_id_data= { {0} };? ?? ?? ?? ?? ?? ?\static const??app_timer_id_t? ?timer_id = m_sec_req_timer_id_data;实际上这个宏就是定义个两个变量。3.3.? ?回调函数sec_req_timeout_handler回 调函数的作用,从名字上看的话,这个回调函数应该与安全管理有关,那么到底什么关系呢?我们知道ANCS服务必须是在配对绑定启动加密之后才能进行服务 的,也就是必须进行配对绑定,然而配对就必须通过安全管理进行,所以这个回调函数是从机启动加密请求,然而为啥又通过定时器进行控制呢?这里只有当连接建 立之后进行一次调用,所以在创建定时器时使用的APP_TIMER_MODE_SINGLE_SHOT参数,为什么需要用定时器,因为刚刚建立连接时需要 给双方一定的缓冲时间,在后面启动定时器时会传入定时时间的。看看这个函数吧:这个回调函数有个入口参数,void * p_context。这个参数是在启动定时器时传进来的,当然看有没有用了,如果没有用,就传入NULL。在ANCS应用中是在设备进行连接之后进行发起的,因为需要绑定,所以需要用到nordic的SDK中的设备管理文件,所以这个启动定时器是在设备管理事件回调函数中调用。4.? ???协议栈初始化ble_stack_init()协议栈初始化ble_stack_init()函数原型如下:第710函数设置低频时钟源,并初始化协议栈,第2个参数是在使用调度或者RTOS时传入的回调函数句柄,例如如果带有freertos时,会传入一个回调函数,这个回调函数会发出一个二值信号量,这个信号量发给协议栈。第713行其实就是初始化结构体ble_enable_params,这个结构体如下:第721行是根据程序所需的内存大小来动态的进行设置起始地址和ram大小。在mdk中有一个可以设置RAM大小的地方:但是程序并不是一定是从这个地方开始,所以这个函数进行重新调整,具体怎么调整可以自己看源码,如果需要调整会打印:4.1.? ?协议栈事件有哪些第728和第732行是向协议栈和系统注册事件对应的处理函数。52832的整个协议都是通过事件进行驱动的,协议栈和事件可以向应用层发送许多的事件,应用层更具得到的事件在进行相应的处理,例如那么这些怎么知道协议栈和系统到底能发送那些事件给应用层呢?可以查看一下注册函数传入的参数是什么:也就只有知道ble_evt_t这个结构体中有哪些事件即可:从上面可以了解到evt_id都是以BLE_module_EVT定义的枚举,然而有哪些模块可以上传事件呢?在上图的191行的联合体中定义了5个模块可以向应用发送事件。在ble_ranges.h的头文件中有如下宏:这个宏就是各个事件枚举的起始值和结束值,根据这些宏可查找到这5个事件的所有枚举。分别为:l??公共事件l??GAP事件l??L2CAP事件l??GATT客户端事件l??GATT服务器事件4.2.? ?系统事件有哪些先看看系统分发事件函数中到底分发了哪些东西:追溯到函数里面去的话可以发现,上面两个函数用到的事件ID只用到两个:NRF_EVT_FLASH_OPERATION_SUCCESS? ?//flash操作成功NRF_EVT_FLASH_OPERATION_ERROR? ???//flash操作失败ble_
您可能关注的文档
最近下载
- DL_T 267-2023 油浸式全密封卷铁心配电变压器使用技术条件.pdf VIP
- 一种新型的化纤打包机.pdf VIP
- 山东黄金集团招聘考试题库.pdf
- 贵州省黔西南州2024-2025学年七年级下学期期末语文试题(含答案).pdf VIP
- 环形混凝土电杆标准.pdf VIP
- 专项施工方案.docx VIP
- NB∕T 47018.4-2022 承压设备用焊接材料订货技术条件 第4部分:埋弧焊钢焊丝和焊剂.pdf
- 山西博大集团寿阳京鲁煤业有限责任公司兼并重组整合矿井地质报告.doc
- 贵州省黔西南州2024-2025学年七年级下学期期末考试语文试题(含答案).docx VIP
- 烟气脱硫废水处理系统培训课件.pptx VIP
文档评论(0)