CC2640R2F BLE5.0 蓝牙协议栈GATTServApp模块

leconiot docs taobao

GATTServApp模块

GATT服务器应用程序(GATTServApp)存储和管理应用程序范围的属性表。各种配置文件使用此模块将其特性添加到属性表。蓝牙低功耗协议栈使用此模块来响应GATT客户端的发现请求。例如,GATT客户端可以发送Discover all Primary Characteristics消息。GATT服务器端的蓝牙低功耗协议栈接收到该消息,并使用GATTServApp查找并发送存储在属性表中的所有主要特性。这种类型的功能超出了本文档的范围,它们是在库代码中实现。可以从gattservapp_util.c中定义配置文件以及BLE Stack API Reference(GATTServApp部分)中描述的API来查看GATTServApp函数。这些功能包括查找特定属性和阅读或修改客户端特征配置。有关GATTServApp在应用程序中的功能的示例,请参见图46 .

下图示意了属性表的初始化,这幅图其实完全对应了GATT Services和Profile中的属性表。该流程图是程序上下文的具体实现过程。图中可以看出在程序中分别使用前面涉及的GGS_Addservice();GATTServApp_AddService();DevInfo_AddService();SimpleProfile_AddService();就这样一步一步在GATT Server中构建了属性表。

构建属性表

上电或重置时,应用程序使用GATTServApp来创建GATT表来添加服务。每个服务都包含具有UUID,值,权限以及读取和写入回调的属性列表。正如图46所示,所有的这些信息是通过GATTServApp传递到GATT和存储在堆栈中。
属性表初始化必须在应用程序初始化函数中出现,也就是simple_peripheral_init()。

	//初始化GATT属性
	GGS_AddService (GATT_ALL_SERVICES );          // GAP 
	GATTServApp_AddService (GATT_ALL_SERVICES );  // GATT属性

在属性表中实现配置文件

属性表的定义

GATT属性的每个服务或组必须定义一个固定大小的属性表,该表被传递到GATT中。simple_gatt_profile.c中的此表定义如下。

	static  gattAttribute_t  simpleProfileAttrTbl [ SERVAPP_NUM_ATTR_SUPPORTED ]

此表中的每个属性都是以下类型。

	typedef struct attAttribute_t
	{
	   gattAttrType_t type; //!< 属性类型(2或16个八位字节UUID)
	   uint8 permissions;   //!< 属性权限
	
	   uint16 handle;        //!< 属性句柄-由属性服务器内部分配
	
	   uint8* const pValue; //!< 属性值 -属性值的最大长度为512 octets。
	} gattAttribute_t;
  • gattAttrType_t类型
    type是与放置在表中的属性相关联的UUID。gattAttrType_t本身定义为:
	typedef  struct 
	{ 
	   uint8  len ;          //!<UUID的长度(2或16)
	   const  uint8  * uuid ;  //!<指向UUID的指针
	}  gattAttrType_t ;

其中长度可以是ATT_BT_UUID_SIZE(2字节)或 ATT_UUID_SIZE(16字节)。*uuid是指向蓝牙SIG(定义在gatt_uuid.c中)或在配置文件中定义的自定义UUID保留的数字的指针。

  • uint8权限
    强制GATT客户端设备如何以及如何访问该属性的值。可能的权限在gatt.h中定义如下:

    宏定义 16进制数
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值