709|1

118

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

【ST NUCLEO-WB09KE测评】-7-基于p2p_server例程实现读取特征值 [复制链接]

本帖最后由 慕容雪花 于 2024-9-16 13:10 编辑

根据自己对手册的理解,如果CHARACTERISTIC使用了value buffer,那么GATT CLIENT在读取该CHAR 值的时候,BLE STACK直接从value buffer里面取走数据。不会通过事件“aci_gatt_srv_read_event”上报到应用层。

还有一种情况,动态变化的数据不宜使用value buffer。

 

 

 

 

所以,接下来的实验会禁掉value buffer,然后再EVENT处理分支中提供CHARACTERISTIC值。在CubeIde图形化配置界面中,选择MiddleWare->ST BLE

 

点击保存后,CUBEIDE自动生成代码。

接着在p2p_server.c文件中,P2P_SERVER_EventHandler()里面:

先定义几个变量:

  uint8_t mgc_val_len;
  static uint8_t mgc_val_buff[2]={0};;
  uint8_t attr_error_code = BLE_ATT_ERR_NONE;
  APP_DBG_MSG("--IN File p2p_server.c. P2P_SERVER_EventHandler\n");

然后调用aci_gatt_srv_resp()返回数据给GATT CLIENT。

    case ACI_GATT_SRV_READ_VSEVT_CODE :
    {
      /* USER CODE BEGIN EVT_BLUE_GATT_SRV_READ_BEGIN */

      /* USER CODE END EVT_BLUE_GATT_SRV_READ_BEGIN */
      p_read = (aci_gatt_srv_read_event_rp0*)p_evt->data;
	  if(p_read->Attribute_Handle == (P2P_SERVER_Context.Led_CCharHdle + CHARACTERISTIC_VALUE_ATTRIBUTE_OFFSET))
	  {
		return_value = BLEEVT_Ack;
		/*USER CODE BEGIN Service1_Char_1_ACI_GATT_SRV_READ_VSEVT_CODE_1 */
		APP_DBG_MSG("--MGCSH IN File p2p_server.c. ACI_GATT_SRV_READ_VSEVT_CODE  GATT : READ LED STATUS COMMAND RECEIVED\n");
		notification.EvtOpcode = P2P_SERVER_LED_C_READ_EVT;
		P2P_SERVER_Notification(¬ification);

		mgc_val_len = 2;
		mgc_val_buff[0] = mgc_val_buff[0] + 1;
		mgc_val_buff[1] = mgc_val_buff[1] + 2;
		aci_gatt_srv_resp(p_read->Connection_Handle,BLE_GATT_UNENHANCED_ATT_L2CAP_CID,p_read->Attribute_Handle,attr_error_code,mgc_val_len,mgc_val_buff);
		/*USER CODE END Service1_Char_1_ACI_GATT_SRV_READ_VSEVT_CODE_1 */

		/*USER CODE BEGIN Service1_Char_1_ACI_GATT_SRV_READ_VSEVT_CODE_2 */

		  /*USER CODE END Service1_Char_1_ACI_GATT_SRV_READ_VSEVT_CODE_2 */
	  } /* if(p_read->Attribute_Handle == (P2P_SERVER_Context.Led_CCharHdle + CHARACTERISTIC_VALUE_ATTRIBUTE_OFFSET))*/

上面准备的数据第一个字节每次加1,第二个字节每次加2,实验现象:

Untitled Project

 

后面加入OLED显示,可以显示Attribute Handle,以及发送出去的数据。后续可以把这些数据替换为比如ADC数据,更有实际意义。

 

 

改进了一下界面:可以显示按键状态以及GATT client请求读取特征值的数据和句柄。

 

 

此帖出自RF/无线论坛

最新回复

赞。 学习了: 如果想触发ACI_GATT_SRV_READ_VSEVT_CODE,需要将Characteristic type设为Non-buffered。   详情 回复 发表于 2024-10-8 13:17
点赞 关注
 

回复
举报

13

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

赞。

学习了:

如果想触发ACI_GATT_SRV_READ_VSEVT_CODE,需要将Characteristic type设为Non-buffered。

此帖出自RF/无线论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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