微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 使用GATT_DiscAllChars后,为什么只找到3个特征值;能否解释一下dataList?

使用GATT_DiscAllChars后,为什么只找到3个特征值;能否解释一下dataList?

时间:10-02 整理:3721RD 点击:

 attReadByTypeRsp_t readByTypeRsp;   

typedef struct
{
uint8 numPairs; //!< Number of attribute handle-UUID pairs found
uint8 len; //!< Size of each attribute handle-value pair
uint8 dataList[ATT_MTU_SIZE-2]; //!< List of 1 or more attribute handle-value pairs
} attReadByTypeRsp_t;

numPairs=3;

len=7;

dataList:

24 00 0A 25 00 F1 FF 27 00 02 28 00 F2 FF 2A 00 08 2B 00 F3 FF

红色部分是3个特征值的句柄和UUID。

问题是:

1、为什么从机中定义了6个特征值只找到3个?

2、特征值1前面的 24 00 0A代表什么

3、dataList最多只有21个字节,第6特征值怎么找到?

老兄怎么没人回你啊,我也同问啊。。。@@@@@@@@@@@@@Yan大神你去度假了吗

老兄根据你的疑问我可以回答一部分,首先从机定义了6个特征值呢,不是说有都有读写功能的,必须是有读写功能的你才能获得它的句柄。。。

1 和 3 应该是一个问题,6个特征值需要dataList空间不小于6*7=42

    看看Maximim PDU size是不是只有27,应该不够。

2  “24 00 "是特征1  Declaration 句柄,0A:表示特征1可读可写。

首先我不知道你的代码是怎么写的,你第一次获取到3个句柄值的时候,你是不是直接复制discState = BLE_DISC_STATE_IDLE;

if(charHdl_0==0||charHdl_1==0||charHdl_2==0)
   {
    charHdl_0 = BUILD_UINT16(pMsg->msg.readByTypeRsp.pDataList[0],pMsg->msg.readByTypeRsp.pDataList[1]);
  charHdl_1 = BUILD_UINT16(pMsg->msg.readByTypeRsp.pDataList[7],pMsg->msg.readByTypeRsp.pDataList[8]);
  charHdl_2 = BUILD_UINT16(pMsg->msg.readByTypeRsp.pDataList[14],pMsg->msg.readByTypeRsp.pDataList[15]);
  LCD_WRITE_STRING_VALUE("handle_0",charHdl_0,16, LCD_PAGE3);
  LCD_WRITE_STRING_VALUE("handle_1",charHdl_1,16, LCD_PAGE4);
  LCD_WRITE_STRING_VALUE("handle_2",charHdl_2,16, LCD_PAGE5);
   }
   else
   {
    charHdl_3 = BUILD_UINT16(pMsg->msg.readByTypeRsp.pDataList[0],pMsg->msg.readByTypeRsp.pDataList[1]);
  charHdl_4 = BUILD_UINT16(pMsg->msg.readByTypeRsp.pDataList[7],pMsg->msg.readByTypeRsp.pDataList[8]);
  LCD_WRITE_STRING_VALUE("handle_3",charHdl_3,16, LCD_PAGE6);
  LCD_WRITE_STRING_VALUE("handle_4",charHdl_4,16, LCD_PAGE7);
    discState = BLE_DISC_STATE_IDLE;
   }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top