微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > notify使能,发生not mapped的错误

notify使能,发生not mapped的错误

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

我使能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!
}


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

网站地图

Top