2015/11/27

[nrf51]WRITEの戻り値は考慮が必要?

Characteristicへの書き込みの時、アプリで戻り値を決めようとしている。
nRF51822 S110のシーケンスだと、これだ。
GATTS Write Request with Authorization

エラーにするだけだからなんでもいいだろうと思っていたのだけど、ものによってはsd_ble_gatts_rw_authorize_reply()でNRF_ERROR_INVALID_PARAMを返しているようだ。

「ようだ」というのは、同じ操作をしても値によってはエラーにならなかったからだ。
別の要因で発生した可能性もあるんだけど、そこまでは調べ切れてない。

まず、仕様としてそういうことがありうるのかどうかを見ていこう。


Core_v4.2.pdf [Vol 3, Part G 4.9.3 Write Characteristic Value]でも、シンプルなシーケンスだ。
image

戻り値のError Codeは、Attribute Protocolで規定してあるとのこと。
[Vol 3, Part F 3.4.1.1 Error Response]に表があった。
ここを見る限りでは、WRITEのときはこの値を返してはいけない、ということはないように見える。

ただ、変えそうとしていたのがBLE_GATT_STATUS_ATTERR_INVALIDとかBLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTEDだから、あまり行儀がよくない値という気もする。

前者の場合、値が「0x0100」となっている。
PDFの値を見ると、0x01~となっているし、nRF51のエラー値はその値に0x0100をORしたような値なので、返してはいけない値だったのかも。
後者の場合は、別にClientにエラーを返してもよい気はする。


表を見てて気付いたけど、アプリ側でエラーにするときは0x80~0x9Fにすべきなのかも。
いやー、でもなぁ。。。

答えが出ないまま終わってしまった。

0 件のコメント:

コメントを投稿

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