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種の方法があることを説明しました。以下は、前回と同じ表と図です。

graf_170711_04

これらは、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はありません。

graf_20170817_03

また、サーバからの通知は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フォーマットに関して説明を予定しています。