Bluetooth®|基礎編
ATTプロトコルのPUD
2017.08.17
この記事のポイント
・ATTプロトコルでは、Attributeのアクセスに関する6種の方法が提供されている。
・各Attributeの値を読み書きするためにFind、Read、Writeの3つの機能が提供されている。
・これらによりATTプロトコルのPDUが構成され利用される。
今回は、前回説明した「Attribute Protocol(ATTプロトコル)」の続きになります。ATTプロトコルはBluetooth low energyの特徴の一つなので、理解を深めたいと思います。
ATTプロトコルのPUD
前回、ATTプロトコルにはAttributeへのアクセスには6種の方法があることを説明しました。以下は、前回と同じ表と図です。
これらは、ATTプロトコルのPUD(Protocol Data Unit)のやり取りの方法です。クライアントはサーバにRequestし、サーバはResponseするといった関係は前述の通りです。
ここからが、今回の話になります。ATTプロトコルでは、各Attributeの値を読み書きするために、基本的に以下の3つの機能が提供されています。
- ・Find:AttributeのHandleなどの取得
- ・Read:Attribute値の読み取り
- ・Write:Attribute値の書き込み
これらの機能とアクセス方法を組み合わせたものがPUDになります。例えば、クライアントがRead Request(Attributeの読み取り要求)をサーバに送ると、サーバはRead Response(読み取りの応答)を返します。
クライアントはFind xx Request、Read xx Request、xx Write Request、Write CommandのATTプロトコルを利用できます。「xx」は、例えばFindの中にもいくつか異なる操作があることを意味しています(下記表参照)。
サーバは、それぞれのRequestに対してResponseを利用して応答します。Write Commandに対しては応答が要求されないので対応するPDUはありません。
また、サーバからの通知はIdentificationかNotificationを利用します。クライアントは、Identificationに対してConfirmationを送りますが、Notificationに対しては受け取りの確認が要求されないので対応するPDUはありません。
以下に、ATTプロトコルのPUDと概略を示します。
カテゴリ | プロトコル名 | OpCode |
---|---|---|
Error Handling:エラー処理 任意の要求に対してエラーが発生した場合の応答でサーバが用いる。 |
Error Response 要求に対しサーバでエラーが生じた際に、本来の応答の代わり送信される。 |
0x01 |
Server Configuration:サーバ構成 ATTプロトコルそのものを設定する。 |
Exchange MTC Request/Response クライアントとサーバ間でMTU(最大転送単位)交換する。 |
0x02/0x03 |
Find Information:情報検索 クライアントが、指定条件に一致するサーバのAttribute Handleを取得するのに利用。 |
Find Information Request/Response 特定のHandle範囲を指定して、その範囲のHandleとTypeを取得する。 |
0x04/0x05 |
Find by Type Value Request/Response Find Informationと同じだが、AttributeのTypeとValueを指定できる。 |
0x06/0x07 | |
Read Operations:読み出し クライアントが、1つ以上のAttribute Valueを読み出すために利用。 |
Read By Type Request/Response UUIDを使いTypeを指定してValueを読み出す。 |
0x08/0x09 |
Read Request/Response Handleを使いValueを読み出す。 |
0x0A/0x0B | |
Read Blob Request/Response Handleを使い長さがATT_MTU-1を超えるValueを読み出す。 |
0x0C/0x0D | |
Read Multiple Request/Response 複数のHandleを使いValueを読み出す。 |
0x0E/0x0F | |
Read By Group Type Request/Response UUIDを使いTypeを指定してValueを読み出す。Group Type指定に限る。 |
0x10/0x11 | |
Write Operations:書き込み クライアントが、Attribute Valueを設定するために利用。 |
Write Request/Response 1つのValueを書き込み、サーバの応答を待つ。 |
0x12/0x03 |
Write Command 応答を要せず1つのValueを書き込む。 |
0x52 | |
Signed Write Command セキュリティマネージャの署名を利用するWrite Command。 |
0xD2 | |
Queued Writes:キューイング書き込み 1個のパケット(ATT_MTU-1)より長いAttribute Valueの書き込みに利用。 |
Prepare Write Request/Response 特定のHandleに対する書き込み操作をサーバにキューイングする。Responseはキューイングの成功の通知。 |
0x16/0x17 |
Execute Write Request/Response キューイングされ実行待ちの書き込み操作を実行され、結果が応答される。 |
0x18/0x19 | |
Server Initiated:サーバ主導操作 サーバが、Attribute Valueをクライアントに非同期に通知するために利用。 |
Handle Value Notification Handleによって特定されたValueの非同期の更新。クライアントからの応答は要しない。 |
0x1B |
Handle Value Indication/Confirmation Handleによって特定されたValueの非同期の更新。クライアントからの確認であるConfirmationを 待つ。 |
0x1D/0x1E |
一番右に、「OpCode」という列がありますが、ATTプロトコルのPDUを示すコードで、このコードによって操作を行います。次回は、アトリビュートのPDUフォーマットに関して説明を予定しています。