初始状态是不可读写的,当在收到某个标志后,需要修改为可读可写。
GATTServApp_RegisterService( simpleProfileAttrTbl, GATT_NUM_ATTRS( simpleProfileAttrTbl ),
&simpleProfileCBs );
我试过把simpleProfileAttrTbl里的参数修改了以后再调用GATTServApp_RegisterService,但这样行不通。
Barbara Wu:
动态修改不确定是不是可行,可不可以软件在回调函数里面根据判断标志位的不同状态来做出不同的处理?
Weichao Fang:
回复 Barbara Wu:
我的需求是在connected的时候修改读写权限,问题就在调用什么函数去实现。直接调用GATTServApp_RegisterService注册行不通,后来我想先调GATTServApp_DeregisterService取消注册,再调GATTServApp_RegisterService注册,但是GATTServApp_DeregisterService( uint16 handle, gattAttribute_t **p2pAttrs )这个函数的参数不知道怎么填。
不知道我这个思路对不对,你知道怎么修改权限吗?
Barbara Wu:
回复 Weichao Fang:
这个思路看起来可行
使用GATT_DeregisterService这个的例子在HostTestAll里面有,去hci_ext_app.c里面找
另外对你有帮助的请看:http://e2e.ti.com/support/wireless_connectivity/f/538/p/345262/1208075#1208075
Weichao Fang:
回复 Barbara Wu:
我参照了你发的那个连接里的方法,使用了GATTServApp_DeregisterService和GATTServApp_RegisterService两个函数修改了特征值的属性,但这样做以后手机去读特征值的时候由于手机里的列表是旧的,仍然无法读取到,我试过只要重启手机就能读取到了。
后来我加了一个通知的函数GATT_ServiceChangedInd,但加了这个以后又有问题了。有两个问题:1、有时候能成功,有时候会失败(失败返回0x16,也不知道0x16是什么)。2、成功的情况下,确实可以从不可读写变为可读写,但是修改完后要隔好长一段时间,至少5s才能读。我感觉是GATT_ServiceChangedInd这个函数没用对,能帮忙解决下这个问题吗?
这是我的程序,调用完修改属性的函数后就调这个函数了。第一个参数是connectHandle,第二个参数是taskId。不知道是参数传错了,还是别的问题。
uint8 ret;
ret = GATT_ServiceChangedInd(0, simpleBLEPeripheral_TaskID);