Bluetooth Developer Studio v1.0向けに、Nordic Pluginsが更新されていた。
「nRF5」ということで、nRF51もnRF52も使えるようだ。
というわけで、BDS v1.0になったあとのスクリーンショットもなかったから、記録しておこう。
バージョンは、これ。
BDSを起動すると、こういう画面が出てくる。
”RECENT PROJECTS”には、開いたことのあるプロジェクトが表示されるようだ。
なお、丸数字は、日・月が表示されている。
“FILE > NEW”とすると、こういうダイアログが表示される。
ここでは”BdsTest01”というプロジェクト名にした。
NAMESPACEは、事前に設定しておくこともできるし、ここで入力することもできる。
入力しても、特にソースファイルに出てくるわけではないようだ。
BASE UUIDは自動で作ってくれるので、今回はそのまま使った。
プロジェクト作成直後は、こうなる。
自作のサービスを作るのでなければ、右側からドラッグ&ドロップして持ってくることもできるようだが、まだ使ったことがない。
まず、プロファイルを作る。
最初は”New Profile”となっているので、適当に名前を作る。
デフォルトのままでもいいような気はする。
入力例。
SAVEして、次はサービスを作る。
右側の”CUSTOM SERVICE”を押すと、こうなる。
ここでは”BdsSrv”というサービス名にした。
名前はファイル名に反映される。
DISCLAIMER、SUMMARY、ABSTRACTみたいなところはメモとして使えるようだ。
設計書の提出を求められたときにいいかもしれん。
下の方にチェックボックスがあるが、BLEだからといって”LOW ENERGY”にチェックを入れたりしなくても、少なくともNordic Pluginsを使っているのであれば関係なさそうだ。
SAVEすると、こうなる。
次はキャラクタリスティック。
サービス名の下にある”+”ボタンを押すと、キャラクタリスティックが追加される。
まず、”BdsChar1”というキャラクタリスティック名にした。
16it UUIDはランダムっぽく決めてくれたので、そのまま使った(表示は切り替えられる)。
同じ画面の下には、アクセス方法というのか、READとかWRITEとかが出てくる。
種類はあまり試していないが、今のNordic Pluginsバージョンでは”RELIABLE WRITE”はコンパイルが通らなかった。
うまいこと通るようにテンプレートを修正してみようと思ったが、テンプレートで使っているAPIでは対応できなかったので、やめた。
今回は、READとWRITEだけ対応することにした。
キャラクタリスティックがあれば、最後に値の容器を作る。
下にある”ADD FIELDS”を押すと、こういうダイアログが出てくる。
左下の”ADD”を押すと、フィールドが追加される。
ただ、このフィールドはnRFが処理するためのもので、相手から見たときにはプロトコルのレベルでは出てこない。
なので、私としてはなんとなくフィールドは1つにしてしまっている。
ちなみに、ここで”FORMAT”を”FORMATLESS”にしているが、これはあとでコンパイルエラーになる。
1つだと寂しいので、もう1つキャラクタリスティックを作ることにした。
”BdsChar2”だ。
アクセス方法は”WRITE WITHOUT RESPONSE”のみMANDATORYにしている。
フィールドは2つにしてみる。
最終的に、こうなる。
キャラクタリスティックはサービス名の下にずらずらと並ぶ。
これだけだとアトリビュートテーブルを作っただけなのだが、Bluetooth Developer Studioのよいところはソースを自動生成するためのプラグインが追加できるところだ。
ここでは”NORDIC SEMICONDUCTOR NRF5X V.1.2.2”を追加している。
それ以外に5つあるが、これはインストール時にデフォルトで入っているものだ。
この構成でソース生成すると、こういうファイルができる。
service_if.c, hは共通で、ble_bdssrv.c, hはサービス名によって作られた名前だ。
”BdsSrv”が”ble_bdssrv”になっているので、プレフィクスで”ble_”がついて、あとはそのまま名前が付いているようだ。
これを、Keilでビルドしたのだが、コンパイルエラーになった。
1つめのキャラクタリスティックの”FORMAT”で”FORMATLESS”にしていたが、UNDEFINED_TYPE_tという型になっていたのだ。
単に、型のないバイト列を表したいだけだったので、”UINT8_ARRAY”に変更した。
Keilでのプロジェクトは、こういう感じになった。
ここでは、nRF5_SDK_11.0.0-2.alpha_bc3f6a0のexamples\ble_peripheral\experimental_bluetoothds_templateを使っている。
ターゲットは、PCA10036という、nRF52832のプレビュー版が載ったボードだ。
定義したフィールドは、こう反映される。
/**@brief BdsChar1 structure. */
typedef struct
{
uint8_array_t field001;
} ble_bdssrv_bdschar1_t;
/**@brief BdsChar2 structure. */
typedef struct
{
uint8_array_t fld_a;
uint8_t fld_b;
} ble_bdssrv_bdschar2_t;
これを焼いて動かし、AndroidのnRF Master Controlアプリで見ると、こうなる。
接続。
当然ながら、外から見ると、どのキャラクタリスティックに何バイトとか、何バイト目にどうとかとかいうフィールドの情報は出てこない。
「ここはLong Writeしか受け付けない!」みたいなのも情報としてほしい気もするのだが、まあ、普通は相互にわかってないといけないはずだから、いいのだろう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。