微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 关于蓝牙4.0的特征值属性的问题,请各位指点一下、

关于蓝牙4.0的特征值属性的问题,请各位指点一下、

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

我用协议栈自带的SimpleBLEPeripheral工程,修改了特征值2的权限,把它从原来的只读改为了可读可写,然后烧进板子之后,用手机连接板子,然后对特征值2进行写操作,操作结果失败,返回错误代码10。请问可能的原因有哪些?

相关代码如下:

// Characteristic 2 Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ ,
0,
&simpleProfileChar2Props //读写
},

// Characteristic Value 2
{
{ ATT_BT_UUID_SIZE, simpleProfilechar2UUID },
GATT_PERMIT_READ | GATT_PERMIT_WRITE,
0,
&simpleProfileChar2
},

// Characteristic 2 User Description
{
{ ATT_BT_UUID_SIZE, charUserDescUUID },
GATT_PERMIT_READ,
0,
simpleProfileChar2UserDesp
},

相关变量内容如下:

// Simple Profile Characteristic 2 Properties
static uint8 simpleProfileChar2Props = GATT_PROP_READ | GATT_PROP_WRITE;

// Characteristic 2 Value
static uint8 simpleProfileChar2 = 0;

// Simple Profile Characteristic 2 User Description
static uint8 simpleProfileChar2UserDesp[17] = "Characteristic 2\0";

请大神解答一下,谢谢。

simpleGATTprofile.c

// Simple Profile Characteristic 2 Properties
static uint8 simpleProfileChar2Props = GATT_PROP_READ;  

是否修改对GATT_PROP_READ | GATT_PROP_WRITE;

你说的那里我修改了。

找到问题了。。。原来是读写属性的回调函数里没有做相应的修改,所以导致写入不成功。

不过现在又有一个问题 了,那就是假如一个属性的权限是只写的,我用开发板做主机就不能发现这个属性,不知道是怎么回事。。。再加一个读的属性(也就是修改为可读可写的)就能被发现(这里是根据UUID来进行发现的)、请问这是怎么回事?

书上有部分内容提到,具有只读属性的特性值只能通过该特性的UUID来获取其句柄,但是我就是这样操作的,然而。。。。还是来看看代码吧:

simpleBLEDiscState = BLE_DISC_STATE_CHAR;
req.startHandle = simpleBLESvcStartHdl;
req.endHandle = simpleBLESvcEndHdl;
req.type.len = ATT_BT_UUID_SIZE;
req.type.uuid[0] = LO_UINT16(Charac_UUID[charr]);
req.type.uuid[1] = HI_UINT16(Charac_UUID[charr]);

GATT_ReadUsingCharUUID(simpleBLEConnHandle, &req, simpleBLETaskId);//通过发送某个特性的UUID来获得这个特性值的句柄

这就是我的特性发现代码,这里我是想对各个特性单独进行发现,所以我将特性的UUID放到数组里了,用一个charr变量控制。

请高手指点。

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

网站地图

Top