我使能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;//18req.len = 2; //data lengthreq.pValue[0] = LO_UINT16(PRF_CLI_START_NTF);//0x0001req.pValue[1] = HI_UINT16(PRF_CLI_START_NTF);req.sig = 0; //not includedreq.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! }