BLE的Peripheral例程,如何使用gattCharCfg_t simpleProfileChar4Config[4];

1. 如题,为什么数组元素个数为4?试过把它定义为[1],APP也能定时收到88。

2. 是每个服务对应一个gattCharCfg_t,还是一个外围设备对应一个gattCharCfg_t?

3. 如果在Peripheral例程中再增加1个特性为通知,如何实现这个通知,即一个服务下有2个特性具有CCCD?

? ? 是不是需要在simpleProfile_WriteAttrCB()中区分connHanle?

4. 在APP上点击”接收通知数据“,Peripheral例程会有什么事件吗?


  1. 可以下载最新的例程,在peripheral例程中数组的元素个数就是PERIPHERAL_MAX_CONNECTION,也就是1。

  2. gattCharCfg_t只是一个结构体,不同的服务也都可以用。

  3. 在peripheral例程中新增一个notify通道,需要给你需要添加的char添加一个notify属性:

    static uint8_t simpleProfileChar1Props = GATT_PROP_READ | GATT_PROP_WRITE | GATT_PROP_NOTIFY;

    然后照着char4去写就可以了。

  4. 在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的即可,已经连接上了,给它们一起初始化,更新一下连接句柄。


只有登录才能回复,可以选择微信账号登录