我用协议栈自带的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";
请大神解答一下,谢谢。
change tsai:
simpleGATTprofile.c
// Simple Profile Characteristic 2 Propertiesstatic uint8 simpleProfileChar2Props = GATT_PROP_READ;
是否修改对GATT_PROP_READ | GATT_PROP_WRITE;
Kai Xiang xu:
回复 change tsai:
你说的那里我修改了。
找到问题了。。。原来是读写属性的回调函数里没有做相应的修改,所以导致写入不成功。
不过现在又有一个问题 了,那就是假如一个属性的权限是只写的,我用开发板做主机就不能发现这个属性,不知道是怎么回事。。。再加一个读的属性(也就是修改为可读可写的)就能被发现(这里是根据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变量控制。
请高手指点。