738|1

136

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

【ST NUCLEO-WB09KE测评】-6-BLE例程 p2p_server代码分析 [复制链接]

下图是来自ST中文官网下载的GATT介绍,比较多直观,分享一下。

 

 

 

主程序开始先进行各种外设初始化:

  MX_GPIO_Init();
  MX_RADIO_Init();
  MX_RADIO_TIMER_Init();
  MX_PKA_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Init code for STM32_BLE */
  MX_APPE_Init(NULL);

初始化BLE STACK, 还有UTIL SEQUENCER,之前有大佬分享过文章: [ST NUCLEO-WBA52CG] 3 - BLE中的sequencer -- UTIL_SEQ_RegTask()函数的作用 https://bbs.eeworld.com.cn/thread-1253252-1-1.html

 

例程提供了LED1状态的读,写;BUTTON1的NOTIFY。

 

 

 

通过USB DONGLE连接WB09-KE开发板,可以看到小灯与按键对应的CHARACTERISTIC。

 

下面来分析一下按键状态上报NOTIFY的工作大致流程。首先,GATT CLIENT会点击enable notify,这样WB09-KE的BLE STACK会经由如下处理。

ble_evt.c中的void BLE_STACK_Event(hci_pckt *hci_pckt, uint16_t length)函数会对BLE STACK传递过来的事件做检查。如下:

 

接着调用:

 

上面的BLE EVT SvcHandler其实是在P2P_SERVER_Init()函数进行初始化的时候注册的专门的回调函数。

 

如果解析HCI PDU发现是禁止NOTIFICATION,那么会

notification.EvtOpcode = P2P_SERVER_SWITCH_C_NOTIFY_DISABLED_EVT;

 

 

接着 P2P_SERVER_APP_Context.Switch_c_Notification_Status = Switch_c_NOTIFICATION_OFF;

 

这个status标志位会影响按键按下后,是否通知GATT Client。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在上面使能了NOTIFY后,WB09-KE开发板这边,如果有SW1按下,

 

 

 

 

 

 

  

 

 

 

如下图L259,会根据P2P_SERVER_APP_Context.Switch_c_Notification_Status来决定是否调用:

P2P_SERVER_NotifyValue(P2P_SERVER_SWITCH_C, &p2p_server_notification_data, P2P_SERVER_APP_Context.ConnectionHandle);

 

 

 

最终会调用aci_gatt_srv_notify来把最新的BUTTON status发送出去。

 

 

 

pm0274-bluetooth-low-energy-stack-v4x-programming-guidelines-stmicroelectronics.pdf (3.88 MB, 下载次数: 2)

 

此帖出自无线连接论坛

最新回复

不错,楼主的 p2p_server代码分析过程整的好详细   详情 回复 发表于 2024-9-15 08:45
点赞(1) 关注
 

回复
举报

6809

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

不错,楼主的 p2p_server代码分析过程整的好详细

此帖出自无线连接论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表