[OSAL]
Operating System Abstraction Layer, 整個BLE 都是基於 OSAL 來做的, OSAL 不是一個完整的 OS, 但是他依然提供了不少 OS 會有的東西例如 Task, Event, Timer, Message Service...
[HAL]
HAL 為 Hardware Abstraction Layer, 他算是一個 HW/SW 中間的介面
[BLE Protocol Stack]
<Generic Access Profile (GAP)>
主要是處理 device access mode 和一些重要的 procedures 如
- device discovery
- link establishment
- link termination
- initiation of security features
- device configuration.
- Broadcaster: 負責廣播資料, 無法被建立連線 (non-connectable)
- Observer: 掃描並讀取其他裝置的廣播資訊 (advertisement), 但不能起始一個連線 (non-connectable)
- Peripheral: 可以接受連線的 advertiser, 屬於一個 link layer slave 的角色
- Central: 掃描 advertisement 並且可以起始和 peripheral 的連線, 是 link layer connection master 的角色. 目前的 TI BLE central stack 支援三個同時的連線.
<Generic Attribute Profile (GATT)>
- GATT Client: 對 GATT Server 做 Read/Write data 的動作
- GATT Server: 本身含有資料, 可以提供給 GATT Client 做 Read/Write 的動作
特別注意, GATT Role 和 GAP Role 是不相關的, GAP master/slave 都可以是 GATT Client/Server, GATT Role 是以資料放在誰那邊做區分, GAP Role 則是以誰發起連線需求做區分 (這邊非常容易搞混)
GATT Server 會包含多個 GATT Services, 也就是提供資料的服務集合, 那其中有兩個 Services 是 Mandatory (必要) 的:
- Mandatory GAP Service: 裝置跟存取相關的資訊, 例如裝置名稱, 提供者, 產品ID 等等, 每個 BLE 裝置一定要有這個 GAP Service, TI BLE Lib 內建此 GAP Service, 不提供 source code.
- Mandatory GATT Service: GAT Server 的資訊, 每個 GATT Server 一定要有這個 Service,TI BLE Lib 內建此 GAP Service, 不提供 source code.
Service 下面會有 Characteristics, 也就是此 Service 的 Value, GATT Server 的 Characteristics value 和其 properties/configurations (descriptors) 會放在 attribute table 內, 由很多 attribute 所組成, 除了資料本身外, 每個 attribute 包含了以下三個欄位:
- Handle: 可以看成是此 attribute 的 address (unique)
- Type: 哪一種資料型態, 通常會是一個 "UUID" (universal unique identifier), 對應到一個 predefined type (Bluetooth SIG 定義的), 但也可以是 custom type
- Permissions: 說明 GATT client 如何存取資料
- Read Characteristic Value: 讀取某 handle 的資料
- Read Using Characteristic UUID: 一次讀取某特定 Type (UUID) 的所有 Characteristics 資料, 會取得多組 handle/value, GATT client 不用知道 handle 就可以讀
- Read Multiple Characteristic Values: 一次讀取多個 handles 的資料
- Read Characteristic Descriptor: 由 handle 去讀取 characteristic descriptor 的資料
- Discover Characteristic by UUID: GATT client 由 type 去取得 GATT server characteristic 的 handle
- Write Characteristic Value: 寫入某個 handle 的資料值
- Write Characteristic Descriptor: 寫入某個 characteristic descriptor 值, 藉由 handle
[Profile]
沒有留言:
張貼留言