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特征值怎么找到?
CQ JiMi:
老兄怎么没人回你啊,我也同问啊。。。@@@@@@@@@@@@@Yan大神你去度假了吗
CQ JiMi:
老兄根据你的疑问我可以回答一部分,首先从机定义了6个特征值呢,不是说有都有读写功能的,必须是有读写功能的你才能获得它的句柄。。。
Jansen:
1 和 3 应该是一个问题,6个特征值需要dataList空间不小于6*7=42
看看Maximim PDU size是不是只有27,应该不够。
2 “24 00 "是特征1 Declaration 句柄,0A:表示特征1可读可写。
haibin deng:
回复 Jansen:
首先我不知道你的代码是怎么写的,你第一次获取到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; }