工具/软件:TI-RTOS
大家好、我正在处理多角色项目和 SPP_ble_server。
堆栈:2.2.1
我在 SPP_ble_server 中具有以下属性表
gattAttribute_t SerialPortServiceAttrTbl[SERVAPP_NUM_ATTR_SUPPORTED ]=
{
//串行端口配置文件服务
{
{ATT_BT_UUUART_SIZE、primServiceUUID}、/*类型*/
GATT_permit_read、 /*权限*/
0、 /*句柄*/
(uint8 *)&SerialPortService /* pValue */
}、
//特征数据声明
{
{ATT_BT_UUUART_SIZE、characterUUID}、
GATT_permit_read、
0、
&SerialPortServiceDataProps
}、
//特征数据值
{
{ ATT_UUUUUUUAR_SIZE、SerialPortServiceDataUUID }、
GATT_permit_read | GATT_permit_write、
0、
SerialPortServiceData
}、
//特征数据配置
{
{ATT_BT_UUID_SIZE、clientCharCfgUUID}、
GATT_permit_read | GATT_permit_write、
0、
(uint8 *)&SerialPortServiceDataConfig
}、
//特征数据用户描述
{
{ATT_BT_UUUART_SIZE、charUserDescUUID}、
GATT_permit_read、
0、
SerialPortServiceDataUserDesp
}、
//特征状态声明
{
{ATT_BT_UUUART_SIZE、characterUUID}、
GATT_permit_read、
0、
&SerialPortServiceStatusProps
}、
//特征状态值
{
{ ATT_UUUUUUUI_SIZE、SerialPortServiceStatusUUID }、
GATT_permit_read、
0、
// SerialPortServiceChar3
SerialPortServiceStatus
}、
//特征状态配置
{
{ATT_BT_UUID_SIZE、clientCharCfgUUID}、
GATT_permit_read | GATT_permit_write、
0、
(uint8 *)&SerialPortServiceStatusConfig
}、
//特征状态用户说明
{
{ATT_BT_UUUART_SIZE、charUserDescUUID}、
GATT_permit_read、
0、
SerialPortServiceStatusUserDesp
}
};
在多角色端、我发现串行端口配置文件特征句柄、如下所示
if (discInfo[connIndex].svcStartHdl!= 0)
{
attReadByTypeReq_t req;
//发现特征
discInfo[connIndex].discState= BLE_DISC_State_char;
REQ.startHandle = discInfo[connIndex].svcStartHdl;
REQ.endHandle = discInfo[connIndex].svcEndHdl;
REQ.TYPE.len = ATT_UUUUI_SIZE;
//查找特征描述符
GATT_DiscAllCharDescs (pMsg->connHandle、
REQ.startHandle + 1、
REQ.endHandle、
自实体);
}
//如果我们发现特征
否则、如果(discInfo[connIndex].discState =BLE_DISC_State_char)
{
//找到特征描述符
if (pMsg->method =ATT_find_info_RSP &&)
pMsg->msg.findInfoRsp.numInfo >0)
{
uint8_t i;
//对于每个句柄/uuid 对
for (i = 0;i < pMsg->msg.findInfoRsp.numInfo;i++)
{
if (pMsg->msg.findInfoRsp.format = ATT_Handle_BT_UUID_TYPE)
{
if (((ATT_BT_PAIR_UUID (pMsg->msg.findInfoRsp.pInfo、i)=
GATT_Character_UUID))
{
display_print0 (dispHandle、0、0、"GATT 字符已找到");
Display_Print1 (dispHandle、0、0、"GATT 字符句柄为%d"、ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i));
//StructHandle[connindexNum].charDeclHdl[charDeclIndex++]= ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i);
中断;
}
//查找 CCCD
if (((ATT_BT_PAIR_UUID (pMsg->msg.findInfoRsp.pInfo、i)=
GATT_CLIENT_CHAR_CFG_UUID))
{
//清除标志
//flags &=~data_char;
Display_print0 (dispHandle、0、0、"CFG 已找到");
Display_Print1 (dispHandle、0、0、"CFG handle is %d"、ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、I));
StructHandles[connindexNum].charCCCDHdl[charCCCDindex++]= ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i);
中断;
}
}
否则、if (pMsg->msg.findInfoRsp.format = ATT_Handle_UUUID_TYPE)
{
if (memcmp (&(pMsg->msg.findInfoRsp.pInfo[ATT_PAIR_UUID_IDX(i)])、uuidDataChar、ATT_UUUID_SIZE)==0)
{
Display_print0 (dispHandle、0、0、"发现特性1");
charDataHdl[connindexNum1++]= ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i);
StructHandles[connindexNum].charDeclHdl[charDeclIndex++]= ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i)- 1;
//设置标志
//flags |= data_char;
中断;
}
if (memcmp (&(pMsg->msg.findInfoRsp.pInfo[ATT_PAIR_UUID_IDX(i)])、uuidDataCharStatus、ATT_UUUID_SIZE = 0)
{
Display_print0 (dispHandle、0、0、"发现特性2 ");
charDataHdl[connindexNum1++]= ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i);
StructHandles[connindexNum].charDeclHdl[charDeclIndex++]= ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i)- 1;
//设置标志
//flags |= data_char;
中断;
}
}
}
}
仅为第一个特征发现 GATT_character_UUID。 我是否在上述发现方法中犯了任何错误
手柄。
输出:
找到 GATT 字符
GATT 字符句柄为29
找到字符1
找到 CFG
CFG 句柄为31
到这里一切都很好。
之后是我的预期
找到 GATT 字符
GATT 字符句柄为33
后跟
找到字符2
找到 CFG
CFG 句柄为35
但软件未发现 GATT_Character_UUID。 那么、输出是
找到字符2
找到 CFG
CFG 句柄为35