为什么GATT服务器总是暴露服务?

时间:2015-12-18 18:16:31

标签: bluetooth gatt bluetooth-lowenergy

查看各种GATT-based profiles,似乎服务总是在GATT服务器而不是GATT客户端中公开。例如,时间配置文件(TIP)使服务器公开当前时间服务(CTS)。因此,如果手机要使用TIP以当前时间更新心率监测器,则手机将成为服务器,而监护仪将成为客户端。但是,作为心率监测器,Heart Rate Profile希望监护仪成为GATT服务器。

那么,对于从手机获取当前时间的显示器,它应该是GATT客户端还是服务器?是否应将其设置为客户端,同时与手机同步并设置为服务器?是否应该实现自定义配置文件,以便CTS在客户端中公开?

由于

1 个答案:

答案 0 :(得分:4)

通用属性配置文件(GATT)定义服务器和客户端如何通信 彼此使用属性协议来传输数据。客户 在过程结束时启动和释放过程时确定和服务器角色。因此,设备可以同时扮演两种角色。

我建议你阅读Bluetooth Spec。在G部分2.2中,它解释了角色和配置。

  

客户端 - 这是启动命令和请求的设备   服务器,并可以接收由...发送的响应,指示和通知   服务器。   服务器 - 这是接受传入命令和请求的设备   来自客户端并向客户发送响应,指示和通知。

回到你的问题:

  

时间配置文件使设备可以获取日期,时间,时区,   和DST信息并控制与时间相关的功能。

在您的情况下,当手机需要时间时,显示器将成为GATT客户端。但是,它可以与电话同时用于另一个程序(操作,请求等)。

简而言之,客户端和服务器角色不会固定到设备上。当您的手机公开当前时间时,它将是服务器。同样,当它从监视器获取当前时间时,它将是客户端。无需自定义配置文件。如果您希望手机从设备获取当前时间并将其暴露给其他设备,只需为客户端和服务器角色实施相同的配置文件即可。

修改
根据{{​​3}},要获取当前时间信息,GATT读取特征值子过程应与当前时间特性的句柄一起使用。作为客户端监控将从服务器的GATT表中读取当前时间特征(在这种情况下,它是电话)。一旦监视器从手机中检索值,它就可以更新其当前时间特征值,并以三种方式将其暴露给它的环境:

  1. 通知其订阅的客户端(BLE通知)。如果你这样做,你将自定义蓝牙TIP配置文件,因为那里没有定义这个过程(我快速查看了文档并且没有看到它)。
  2. 在广告包中广播(不需要BLE连接)
  3. 另一个BLE设备连接到显示器并读取当前时间特征值。如果要将Bluetooth SIG定义的TIP配置文件用作服务器,建议使用此方法。