notify使能,发生not mapped的错误
我使能notify的代码如下所示
bStatus_t send_custom2_notify_enable(uint16 connHandle,uint8 taskId ) { bStatus_t req_res = SUCCESS; attWriteReq_t req; req.handle = SNM_CUSTOM2_NOTIFY_HANDLE;//18 req.len = 2; //data length req.pValue[0] = LO_UINT16(PRF_CLI_START_NTF);//0x0001 req.pValue[1] = HI_UINT16(PRF_CLI_START_NTF); req.sig = 0; //not included req.cmd = 0; req_res = GATT_WriteCharValue(connHandle,&req,taskId); return req_res; }
抓包工具抓到信息如下,显示not Mapped,请问这个是怎么造成的?
下面这个是我用手机app连接抓的包,我想正常应该是这种
一般是句柄没写对的问题。
必须要获取的方式获得特征值句柄,如果你写死为一个具体数值,就容易出问题。
这个固定值是我用抓包工具抓到的,而且比我读到的值大1,应该没错啊?
你这就是写死句柄,会出问题,明白吗?
要代码中获取,看我个性签名档的博客地址,《CC2541之发现服务与特征值》,用这种方式去获取句柄。
我现在修改了,写入用的handle是我读出来的数值+1,虽然返回值是写入成功,但是从机的数据还是没发过来.对比用手机上的app去重复这个过程.再用抓包工具抓包,抓上来的包是不一样的.我代码发送出去的UUID提示not mapped 但是手机发送的命令,抓包上来UUID是Client characteristic configure.
不太清楚是怎么回事?是不是我的write request函数调用错了?
大哥帮忙分析一下这个是怎么回事
再看一篇我博客,《CC2541之主机端获取notify数据》
就是参考你这个改的,但是就是有这个问题
对于这个问题,我也有疑问,
req.handle = SNM_CUSTOM2_NOTIFY_HANDLE;//18
这个句柄到底是如何获取?通过Server端Client Config的UUID获取,
UUID是指configuration的UUID吗?
CCC一般在server端都没有预先分配Handle。
还是就是GATT_CLIENT_CHAR_CFG_UUID (0x2902)?
在OAD Target的工程里面代码如下:
if (pAttr->type.len == ATT_BT_UUID_SIZE)
{
// 16-bit UUID
uint16_t uuid = BUILD_UINT16(pAttr->type.uuid[0], pAttr->type.uuid[1]);
if (uuid == GATT_CLIENT_CHAR_CFG_UUID)
{
// Process a CCC write request.主机打开从机通知
status = GATTServApp_ProcessCCCWriteReq(connHandle, pAttr, pValue, len,
offset, GATT_CLIENT_CFG_NOTIFY);
}
else
{
status = ATT_ERR_ATTR_NOT_FOUND; // Should never get here!
}