前に書いたが、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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。