微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 为什么GATT的notify要多定义一个gattCharCfg_t 类型的变量?

为什么GATT的notify要多定义一个gattCharCfg_t 类型的变量?

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

GATT的notify方式比read、write方式的配置多一条语句:

static gattCharCfg_t simpleProfileChar4Config[GATT_MAX_NUM_CONN];

我不明白这个配置是做什么用的,望指教!

notification需要打开一个开关才开始发送 这个可以理解成开关

WBJ

请问是不是这样理解:

BLE 1.40里有两个发送notify的函数:GATT_Notification和GATTServApp_ProcessCharCfg。

1)GATT_Notification:从机主动通知,不需要开关,所以不需要定义“simpleProfileChar4Config ”

2)GATTServApp_ProcessCharCfg:要向属性表中0x2F写入0x01进行开通知,写入0x00进行关通知。

0x2F就是指向

// Characteristic 4 configuration
{
{ ATT_BT_UUID_SIZE, clientCharCfgUUID },
GATT_PERMIT_READ | GATT_PERMIT_WRITE,
0,
(uint8 *)simpleProfileChar4Config
},

也就是说,simpleProfileChar4Config 的值为1就是开,0就是关。

那又为什么是1是开,0是关?是不是TI不公开从机判断接收到的simpleProfileChar4Config 值的代码?

对的

// Allocate Client Characteristic Configuration table
simpleProfileChar4Config = (gattCharCfg_t *)ICall_malloc( sizeof(gattCharCfg_t) *
linkDBNumConns );

开关定义应该是遵循协议的

WBJ

那请问这一句又是做什么用呢?

在SimpleProfile_AddService函数中:

// Initialize Client Characteristic Configuration attributes
GATTServApp_InitCharCfg( INVALID_CONNHANDLE, simpleProfileChar4Config );

意思是初始化simpleProfileChar4Config 的handle值为INVALID_CONNHANDLE嘛?

如果我char6也是notification方式,那是否需要再加一句:GATTServApp_InitCharCfg( INVALID_CONNHANDLE2, simpleProfileChar6Config );

写成GATTServApp_InitCharCfg( INVALID_CONNHANDLE, simpleProfileChar6Config );就行了

好,谢谢您,WBJ

hello,WBJ

我看software_developer's guide 里面这里面说明每个客户端连接都对应一个simpleProfileChar4Config这个配置。

Simple Profile Characteristic 4 Configuration Each client has its own instantiation of the Client Characteristic Configuration.
Reads of the Client Characteristic Configuration only shows the configuration for that client and writes only affect the configuration of that client.
里面还有关于SimpleProfile_AddService()函数介绍里面提到Allocate space for CCC arrarys.那部分有你上面这段codes。
可是我在simpleBLEPeripheral.c例程里面没有找到这段codes, 却找到是static gattCharCfg_t simpleProfileChar4Config[GATT_MAX_NUM_CONN];

继续跟踪:
       // GATT Maximum number of connections (including loopback)
       #define GATT_MAX_NUM_CONN ( MAX_NUM_LL_CONN + 1 )

#if !defined ( MAX_NUM_LL_CONN )
       #if ( CTRL_CONFIG & INIT_CFG )
             #define MAX_NUM_LL_CONN 3
       #elif ( !( CTRL_CONFIG & INIT_CFG ) && ( CTRL_CONFIG & ADV_CONN_CFG ) )
             #define MAX_NUM_LL_CONN 1
       #else // no connection needed
             #define MAX_NUM_LL_CONN 0
       #endif // CTRL_CONFIG=INIT_CFG
#endif // !MAX_NUM_LL_CONN

那么这个意思是 最大只能允许4个客户端可以使用这个通知?改变通知的状态?
我们要支持更多的话,改变这个GATT_MAX_NUM_CONN ? 还是协议栈里面,有一种机制,当客户端大于GATT_MAX_NUM_CONN 这个,会Allocate space for CCC arrarys?

什么鬼?我明明把要发的分好段了,可是发表之后怎么都连在一起了呀?

支持多设备连接,然后分别对应一个控制变量

hi,cedar!

          如你所说,如果要支持更多的设备的话,就要把GATT_MAX_NUM_CONN宏定义的更大,来达到要求对吗?

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

网站地图

Top