ATT
Attribute Protocol (ATT) とは
ATT とは、デバイス間で属性値を探索し、読み書きさせるためのプロトコル。サーバー/クライアントモデルで動作する。サーバー/クライアントは各々 Attribute を保持しており、それをお互いにやりとりするためのプロトコルが ATT となる。サーバーは属性群を公開し、クライアントは ATT を利用してそれを探索、アクセス、読み書きする。
飽くまで 属性の確認 を行うだけで、実際に Bluetooth を通してデータのやり取りを行うのは上位のプロトコル (GATT) になる。
Bluetooth 4.0 から追加された。
This specification defines the Attribute Protocol; a protocol for discovering, reading, and writing attributes on a peer device
BLUETOOTH SPECIFICATION Version 5.0 | Vol 3, Part F
Attribute の表現
Attribute は、以下から構成される。
Attribute Handle
サーバー上で属性を一意に識別するための値
クライアントは、Handler の値を参照して Attribute の Value に対し読み書きを要求する
サーバーに付与される 16 bit の値
0x0001 - 0xffff (2 octets)
サーバ/クライアント間でATT ベアラが存続する限り、同じ値を再利用することはできない
Attribute が削除されたとしても、ほかの Attribute に利用していた Handler を割り当てることはできない
Attribute Type
Attribute が何を表現しているかを表す
128 bit
値の解釈もその定義も上位のレイヤーで行われる
Attribute Value
Attribute の値
512 byte までの可変長
唯一の可変長
ATT では、Value の中身は気にしない
そのエンコーディング方法は、Type により決まる
Permissions
Attribute への読み書きの権限を定義する
長さは実装による
値の解釈もその定義も上位のレイヤーで行われる
code:text
+--------------+-----------------+-----------------+-----------------+
| Handle (2) | Type (2 or 6) | Value (0-512) | Permissions (x) |
+--------------+-----------------+-----------------+-----------------+
Attribute PDU
ATT は、Attribute の探索、読み書きのためのプロトコルである。その対象である Attribute 自体の構成は上述の通りだが、クライアント/サーバ間でその情報をやり取りする必要がある。このときのやり取りの種別がいくつか存在する。
table:属性へのアクセス方式
種別 送信元 送信先 概要
Requests クライアント サーバー レスポンスを発生させる
Responses サーバー クライアント Requests への応答
Indications サーバー クライアント Confirmation を発生させる
Confirmations クライアント サーバー Indication を受け取った確認
Commands クライアント サーバー レスポンスを発生させない
Notifications サーバー クライアント Confirmation を発生させない
上記のやり取りは全てサーバ/クライアント間で PDU (Protocol Data Unit) を伝送し合うことで行われる。その構成は以下のようになっている。
https://gyazo.com/2cfbeae43db55fccb9fcba039189f307
Attribute Opcode でそのパケットの種別を指定し、パケットの種別に応じ付加される Attribute Parametersが変化する。
table:PDU
名前 オクテット 概要
Attribute Opcode 1 オペレーションコード。後述
Attribute Parameters 0 - (ATT_MTU - X) Authentication Signature Flag が 0 なら X=1、1 なら X=13
Authentication Signature 0 or 12
Attribute Opcode は 1 octets であり、各 bit が以下を表す。
table:Attribute Opcode
bit 名前 概要
7 Authentication Signature Flag
6 Command Flag Command かどうかのフラグ
5-0 Method 後述
Attribute Opcode と対応する Attribute Parameters の対応の一部は以下。
table:メソッドの例
Attribute PDU 名 Opcode 付属する Attribute Parameters
Error Response 0x01 Request Opcode in Error, Attribute Handle In Error, Error Code
Exchange MTU Request 0x02 Client Rx MTU
Exchange MTU Response 0x03 Server Rx MTU
Find Information Request 0x04 Starting Handle, Ending Handle
Find Information Response 0x05 Format, Information Data
Read Request 0x0A Attribute Handle
Read Response 0x0B Attribute Value
Write Request 0x12 Attribute Handle, Attribute Value
Write Response 0x13 -
Write Command 0x52 Attribute Handle, Attribute Value
Signed Write Command 0xD2 Attribute Handle, Attribute Value, Authentication Signature
その他はコア仕様に書かれている。
BLUETOOTH SPECIFICATION Version 5.0 | Vol 3, Part F | 3.4.8
Exchange MTU Request
ATT_MTU
サーバ/クライアント間で送信されるパケットの最大サイズ
上位レイヤーの仕様でデフォルト値が定義されている
ATT_MTU の交換は通信上必須ではない。Client がデフォルトより大きいパケットサイズを利用したい場合には、それが利用可能かどうかを Server に問い合わせる。Client から Server へ Client Rx MTU が送信され、サーバーは Server Rx MTU を返す。それらのうち小さい方が ATT_MTU として採用される。ATT_MTU は ATT ベアラ毎に定まり、そのやりとりは一度のみ行われる。
Client Rx MTU
Clience Receive MTU size
クライアントが受信できる MTU サイズ
Server Rx MTU
Server Receive MTU size
サーバーが受信できる MTU サイズ
Attribute PDU のトランザクション
基本的には、サーバ/クライアント間でリクエスト/レスポンスをやり取りするのみ。