2015/02/14

[ble]long attributeのNotification

前に書いたが、NotificationやIndicationはデータサイズがATT_MTU-3までしか通知できない。
ATTの仕様としては、Core_v4.2 Vol.3 Part F 3.2の「3.2.9 Long Attribute Values」あたりに記載があり、1回のパケットではATT_MTU-1が最大だけど、それより大きいサイズのAttributeを定義することもできて、それは"long attribute"と呼ぶそうだ。その最大長は512byte(octだけど、面倒なのでbyteって書く)。

S110のGATT Serverではこうなってた。

/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths
 * @{ */
#define BLE_GATTS_FIX_ATTR_LEN_MAX (510)  /**< Maximum length for fixed length Attribute Values. */
#define BLE_GATTS_VAR_ATTR_LEN_MAX (512)  /**< Maximum length for variable length Attribute Values. */ 
/** @} */

 

ATT_MTU-3くらいのAttributeにしておくと設計とかはやりやすいし、データの取得なんかも楽になるんだけど、まあそうも言っていられない場合がある。
今回みたいに、NDEFのデータを読ませたい、とかなると、256byteくらいは確保しておきたい。

そうなると、Attributeのデータ長と、Notificationできるデータ長が異なることになる。
こういう非対称な場合、どうしたらいいんだろうか?
nRF51 SDKのAPIはNotificationするデータを設定できるようになっているので、必ずしもAttributeのデータを送らなくてもよいのだ。

よいけど、お作法としては同じデータの先頭から渡せる分だけを載せるのがよいのだろう。
だからこそ、「3.4.7.1 Handle Value Notification」の注意書きに、「long attributeが取得したいならこのnotificationの後でRead Blob Requestを使いなさい」ということが書いてあるのだろう。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。