1. 如题,为什么数组元素个数为4?试过把它定义为[1],APP也能定时收到88。
2. 是每个服务对应一个gattCharCfg_t,还是一个外围设备对应一个gattCharCfg_t?
3. 如果在Peripheral例程中再增加1个特性为通知,如何实现这个通知,即一个服务下有2个特性具有CCCD?
? ? 是不是需要在simpleProfile_WriteAttrCB()中区分connHanle?
4. 在APP上点击”接收通知数据“,Peripheral例程会有什么事件吗?
1. 如题,为什么数组元素个数为4?试过把它定义为[1],APP也能定时收到88。
2. 是每个服务对应一个gattCharCfg_t,还是一个外围设备对应一个gattCharCfg_t?
3. 如果在Peripheral例程中再增加1个特性为通知,如何实现这个通知,即一个服务下有2个特性具有CCCD?
? ? 是不是需要在simpleProfile_WriteAttrCB()中区分connHanle?
4. 在APP上点击”接收通知数据“,Peripheral例程会有什么事件吗?
可以下载最新的例程,在peripheral例程中数组的元素个数就是PERIPHERAL_MAX_CONNECTION,也就是1。
gattCharCfg_t只是一个结构体,不同的服务也都可以用。
在peripheral例程中新增一个notify通道,需要给你需要添加的char添加一个notify属性:
static uint8_t simpleProfileChar1Props = GATT_PROP_READ | GATT_PROP_WRITE | GATT_PROP_NOTIFY;
然后照着char4去写就可以了。
在APP上点击"接收数据通知",会进入写回调,就是就是写1使能通知。
我照着char4写,但写到下面是,还要定义simpleProfileChar1Config[]吗?
// Characteristic 1 configuration
{
? ?{ ATT_BT_UUID_SIZE, clientCharCfgUUID },//2902
? ?GATT_PERMIT_READ | GATT_PERMIT_WRITE,
? ? 0,
? ? (uint8 *)simpleProfileChar4Config,
},
还需要对simpleProfileChar1Config做下面的操作吗?还有其他操作吗?
a. GATTServApp_InitCharCfg( INVALID_CONNHANDLE, simpleProfileChar4Config );
b. GATTServApp_InitCharCfg( connHandle, simpleProfileChar4Config );
其实就是没有明白simpleProfileCharXConfig怎么用。
当执行下面回调函数时,如何区分simpleProfileChar1Config[]和simpleProfileChar4Config[]?这个simpleProfile服务只有1个这样的回调函数。
static void simpleProfile_HandleConnStatusCB( uint16 connHandle, uint8 changeType )
{?
? // Make sure this is not loopback connection
? if ( connHandle != LOOPBACK_CONNHANDLE )
? {
? // Reset Client Char Config if connection has dropped
? ? if ( ( changeType == LINKDB_STATUS_UPDATE_REMOVED )? ? ? ||
? ? ? ? ?( ( changeType == LINKDB_STATUS_UPDATE_STATEFLAGS ) &&?
? ? ? ? ? ?( !linkDB_Up( connHandle ) ) ) )
? ? {?
? ? ? GATTServApp_InitCharCfg( connHandle, simpleProfileChar4Config );//QQ connHandle是什么?
? ? }
? }
}
simpleProfileChar4Config就是一个存放通知开关的地方,所以对于Char1来说,你也需要再定义一个,总不能两个通道共用一个吧,所以说char4对它的这些初始化操作,char1也都需要添加,最后的回调函数中,直接加上Char1的即可,已经连接上了,给它们一起初始化,更新一下连接句柄。