わふうの人が書いてます。

iOSアプリケーション開発、BLEのファームウェアとハードウェア試作のフリーランスエンジニア。

Apple Bluetooth Accessory Design Guideline , Bluetooth Low Energy部分の日本語訳

これは、Apple社のBluetooth Accessory Design Guidelines for Apple Products (R6)
https://developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdfのうち、Bluetooth Low Eneryに関連する部分を日本語訳したものです。17ページ目から20ページ目までを訳しています。

Bluetooth Low Energy

Bluetooth4.0仕様は、バッテリーリソースが限られたアクセサリをターゲットにした新しい無線通信技術、Bluetooth Low Energyを含みます。
もしBluetooth LEがサポートされていれば、アクセサリーはこの章のガイドラインに従うべきです。

Role

Bluetoothアクセサリーは、Bluetooth4.0仕様 Volume3, Part C, Section 2.2.2.3 に定義されているPeripheral role 、
もしくはSection 2.2.2.1に定義されているBroadcaster roleの、いずれかを実装すべきです。

Advertising Channels

Bluetoothアクセサリーは、アドバタイズのイベントの都度、すべての3つのアドバタイジング・チャネル(37, 38, および39)でアドバタイズすべきです。
Bluetooth 4.0 仕様, Volume 6, Part B, Section 4.4.2.1 を参照。

Advertising PDU

Bluetoothアクセサリーは、次のうちいずれか1つのアドバタイジングPDUを使うべきです:

  • ADV_IND
  • ADV_NOCONN_IND
  • ADV_SCAN_IND

ADV_DIRECT_IND は使うべきではありません。
Bluetooth 4.0 仕様, Volume 6, Part B, Section 2.3.1 を参照。

Advertising Data

Bluetoothアクセサリに送信されたアドバタイジング・データは、
Bluetooth 4.0 仕様, Volume 3, Part C, Section 11 に記述されているように、
次の情報の少なくとも1つを含むべきです:

  • Flags
  • TX Power Level
  • Local Name
  • Services

例えば、もしも電力消費量を低減する必要がある、あるいはすべてのアドバタイズメント・データがアドバタイジングPDUに収まりきらなかったならば、
アクセサリは、Local Name およびTX Power levelデータをSCAN_RSP PDUに置くかもしれません。
Apple製品は、その状態によっては、常にアクティブスキャンをするとは限らないことに、注意してください。

Primary servicesは常にアドバタイジングPDUでアドバタイズされるべきです。
Secondary servicesはアドバタイズされるべきではありません。
アクセサリの主たる利用方法で重要ではないサービスは、もしもアドバタイジングPDUの領域が限られているならば、無視されるかもしれません。

アドバタイジング・データおよびSCAN_RSP PDUのスキャン・レスポンス・データは、
Bluetooth 4.0 仕様, Volume 3, Part C, Section 18 のフォーマットガイドラインに従うべきです:
長さフィールドの次に、AD TypeおよびAD Dataが続きます。

Advertising Interval

Bluetoothアクセサリのアドバタイジング間隔は、
それがアクセサリの発見にかかる時間と接続パフォーマンスに影響するため、
注意深く考慮されるべきです。
電源がバッテリーのアクセサリでは、そのバッテリーリソースもまた考慮すべきでしょう。

Apple製品に発見されるには、Bluetoothアクセサリは、まず最初に、すくなくとも30秒は推奨される20ミリ秒のアドバタイジング間隔を使うべきです。
もしもアクセサリが最初の30秒以内に発見されなければ、アクセサリはバッテリー電力を節約することを選択して、アドバタイジング間隔を長くするかもしれません。
Apple製品が発見する確率を上げるために、Appleはより以下のより長い間隔のいずれかを使うことを推奨します。

  • 645 ミリ秒
  • 768 ミリ秒
  • 961 ミリ秒
  • 1065 ミリ秒
  • 1294 ミリ秒

注意: より長いアドバタイジング間隔は、通常、より長い発見時間と接続時間をもたらします。

Connection Parameters

Bluetoothアクセサリは、LE接続に使われた接続パラメータに責任があります。
アクセサリーは、
適切な時間にL2CAPコネクション・パラメータ・アップデート・リクエストを送信して、
その利用方法にとて適切な接続パラメータを要求すべきです。
詳細は、Bluetooth 4.0 仕様, Volume 3, Part A, Section 4.20 を参照してください。

もしも次の全てのルールに従っていない場合は、その接続パラメータ要求は却下されるかもしれません:

  • IntervalMax *(Slve Latency +1) <= 2 秒
  • Interval Min >= 20 ミリ秒
  • Interval Min + 20ミリ 秒 <= Interval Max
  • Slave Latency <= 4
  • connSupervisionTimeout <= 6 秒
  • Interval Max (Slave Latency +1) 3 < connSupervisionTimeout

Apple製品は、Peripheral Preferred Connection Parameters characteristic のパラメータを読んだり、利用したりしません。
Bluetooth 4.0 仕様, Volume 3, Part C, Section 12.5 を参照。

Privacy

Bluetoothアクセサリーは、すべての状況で、Resolvable Private Addressを解決できるべきです。
プライバシーへの懸念のため、Apple製品は
Bluetooth 4.0 仕様, Volume 3, Part C, Section 10.8
に定義されたランダムデバイスアドレスを使うでしょう。

Permissions

Bluetoothアクセサリーは、serviceとcharacteristicsを発見するために、
ペアリング、認証、または暗号化といった特別な許可を求めるべきではありません。
characteristicの値 または descriptorの値にアクセスするときに限り、それは特別な許可を求めるかもしれません。
Bluetooth 4.0 仕様, Volume 3, Part G, Section 8.1, 5節を参照。

Pairing

Bluetoothアクセサリーはペアリングを要求すべきではありません。
セキュリティの理由で、アクセサリーがCentralとbonded relationship を必要とするならば、
適切であるように、
PeripheralはATTリクエストをInsufficient Authenticaion error codeで却下するでしょう。
Bluetooth 4.0 仕様, Volume 3, Part F, Section 4 を参照。

結果として、Apple製品は必要なセキュリティ手順を進めるでしょう。

ペアリングは、Apple製品次第で、ユーザの認証を要求するでしょう。

Services

Generic Access Profile Service

BluetoothアクセサリーはDevice Name characteristic、
Bluetooth 4.0 仕様, Volume 3, Part C, Section 12.1、
を実装すべきです。Device Name Characteristicは書き込み可能であるべきです。

Generic Attribute Profile Service

Bluetoothアクセサリーは、もしもそのアクセサリーが製品寿命の間にサービスを変更する能力がある場合に限り、Service Changed Characteristicを実装すべきです。

Apple製品は、
アクセサリーから前回読み込み(キャッシュされている)情報に頼ることができるかを決めるために、
Service Changed characteristicsを使います。
Bluetooth 4.0 仕様, Volume 3, Part G, Section 7.1 を参照してください。

Device Information Service

Bluetoothアクセサリーは、Device Information Serviceを実装すべきです。このサービスのサービスUUIDは、
アドバタイジング・データでアドバタイズされるべきではありません。
次のcharacteristicsがサポートされるべきです:

  • Manufacturer Name String
  • Model Number String
  • Firmware Revision String
  • Software Revision String

GATT Server

iOS6では、
iOSデバイスがBluetoothアクセサリーとして使えるように、
アプリケーションがGATTサーバにserviceやcharacteristicsを提供するかもしれません。
この章の推奨は、そのような場合のアクセサリーに適用します。

iOSデバイスは、
データベースの内容は任意の時点で変更できるので、
GAP Service Changed characteristicsを実装します。
したがって、Bluetoothアクセサリーは、
このcharacteristicsの
Characteristic Value Indication
をサポートして、indicationを受信したときは、そのデータベースの対応するキャッシュを無効にします。
Bluetooth 4.0 仕様, Volume 3, Part G, Section 7.1 を参照してください。

Bluetoothアクセサリーは、ATT/GATTリクエストとコマンドの利用を最小に、そして必要な物だけを送信すべきです。
例えば、
アクセサリが特定のサービスを探している時に、
GATT Discover All Services は使ってはなりません。
より少ない送信時間は、より少ない電力消費と等価であり、したがって、アクセサリーとApple製品の両方にとって、よりよいパフォーマンスをもたらします。

Bluetoothアクセサリーは、いかなるエラーも扱えるように十分に頑強であるべきです。
もしも、あるサービスをもつアプリケーションがフォアグラウンドになく、かつ、バックグラウンドで実行されるように明記されていないならば、
ペアリングとCharacteristicの値の読み込み/書き込みは、失敗するかもしれません。

もしも ATT Prepare Write Request が使われたら、
全てのキューイングされた属性は同じ
GATT Service に含まれます。