怎么总是暴露服务的是GATT服务器?

How come it is always the GATT server that exposes services?

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

那么,对于从 phone 获取当前时间的监视器,它应该是 GATT 客户端还是服务器?是否应该在与 phone 时间同步时设置为客户端,否则设置为服务器?是否应该实施自定义配置文件,以便在客户端公开 CTS?

谢谢

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

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

Client—This is the device that initiates commands and requests towards the server and can receive responses, indications and notifications sent by the server. Server—This is the device that accepts incoming commands and requests from the client and sends responses, indications and notifications to a client.

回到你的问题:

The Time profile enables the device to get the date, time, time zone, and DST information and control the functions related the time.

在您的情况下,当监视器从 phone 中花费时间时,它将成为 GATT 客户端。但是,它可以是一个服务器同时为另一个程序(操作、请求等)加上phone。

简而言之,客户端和服务器角色并不是固定在设备上的。当您的 phone 公开当前时间时,它将是服务器。同样,当它从监视器获取当前时间时,它将是客户端。无需自定义配置文件。如果您希望 phone 从设备获取当前时间并将其公开给另一台设备,只需为您的 phone.

实现相同的客户端和服务器角色配置文件

编辑:
根据TIP profile spec,要获取当前时间信息,GATT Read Characteristic Value 子过程应与Current Time Characteristic的句柄一起使用。 Monitor 作为客户端将从服务器的 GATT Table 中读取 Current Time Characteristic(在本例中为 phone)。一旦监视器从 phone 检索到值,它就可以更新其 当前时间特征值 ,并通过三种方式将其暴露给其环境:

  1. 通知它订阅的客户端(BLE 通知)。如果以这种方式进行,您将自定义蓝牙 TIP 配置文件,因为该过程未在此处定义(我快速查看了文档但没有看到)。
  2. 在广告包中广播(不需要BLE连接)
  3. 另一个 BLE 设备连接到监视器并读取当前时间特性值。如果您想使用蓝牙 SIG 定义的 TIP 配置文件作为服务器,这是推荐的方法。