2015/10/23

[nrf51]Bluetooth Developer Studio 1.0

朝方、Bluetooth Developerからメールが来ていた。
Bluetooth Developer Studioの1.0がリリースされたというメールだった。

ダウンロードには、フォームへの入力が必要だ。
入力すると、メールが送られてきて、ダウンロードできるようになる。
きっと一度ダウンロードした人は同じURLからダウンロードできるんだろう、と前のメールを残しておいたのだが、捨ててよいようだ。

なお、以前試したときの記事はこちら。


nRF51用のプラグインも更新されていたので、差分を見ておこう。

 

image

componentsの変更ファイルは、ble_srv_common.cとhくらい。
BDS版には、SoftDeviceのバイナリは入っていない。
app_util_bds.hは・・・空行だけの違い。
なんでそういう変な差分を残すのかねぇ。nRF SDKは変更が多くてただでさえ困ってるんだから、こういう局所的な変更のときくらいは最小限に済ませればよいのに。

 

image

こちらはexamples。
グレーになっているのは、BDS版にだけ存在するファイルだ。
main.cが変更になっているので見てみたが、serviceの初期化がbluetooth_init()というのを呼ぶだけで済むようになっている。
それに伴い、サービスへのハンドラがbluetooth_on_ble_evt()に移動し、サービス構造体も消えた。

と、service_if.cのbluetooth_init()を見てみたが、空実装だった。。。
い、いや、これはきっとpluginが自動生成するところだからに決まっている。

では、新しいBluetooth Developer Studioで試してみよう。


使い方は、以前とそれほど変わらないようだ。
気付いた点をいくつか。

  • アプリを起動したときに、UACが働いていたのが普通になった
  • PREFERENCESがついた。
    Check for Updateがあるから、これからは自動更新できるのかな?
  • Generate Codeに、レポートの出力機能が追加された。
    Level1~3で、以下のようなものが出力できた。
    1. Proflieの内容と、ServiceおよびCharacteristicのUUID
    2. Proflieの内容と、ServiceおよびCharacteristicの詳細
    3. Proflieの内容と、ServiceおよびCharacteristicとそのフィールドの詳細
  • GAPボタンが付いた(前からあったっけ?)。
    Advertisingするデータの編集ができそう。

image

GAPは、まだNordicのプラグインでは出力してくれないようだ。
今のところ、プラグインではServiceの出力だけになっている。
これだけやってくれるだけでも非常に助かるのだが。

気にしていたbluetooth_init()は、ちゃんと生成してくれていた。
よかったよかった。
ただ、イベントハンドラも生成しているので、「触らないでね」というタイプの自動生成ではなく、「作ったからあとはよろしく」というタイプのようだ。
間違って上書きしてしまうのさえ避ければ、よいだろう。

 

以前issueにあげた不具合は直っているようだった。
クローズしようとしたが、特にそういう欄はないようだったので、放置しておこう。


プラグインで生成したServiceを見たところ、UUIDの設定方法が変更になっていた。

以前

    ble_uuid128_t bds_base_uuid = {{0xEF, 0xE8, 0xC7, 0x87, 0xF7, 0x70, 0x43, 0x92, 0x1E, 0x47, 0xD1, 0x7C, 0x00, 0x00, 0x40, 0x40}};
    uint8_t       uuid_type;
    err_code = sd_ble_uuid_vs_add(&bds_base_uuid, &uuid_type);
    if (err_code != NRF_SUCCESS)
    {
        return err_code;
    }
    ble_uuid.type = uuid_type;
    ble_uuid.uuid = 0xE9EB;

今回

    BLE_UUID_BLE_ASSIGN(ble_uuid, 0x4040E9EB7CD1471E924370F787C7E8EF);

こんなに大きい数字を直接扱えるの?

#define BLE_UUID_BLE_ASSIGN(instance, value) do {\
            instance.type = BLE_UUID_TYPE_BLE; \
            instance.uuid = value;} while(0)

nRF51 SDKのドキュメントを見ると、BLE_UUID_TYPE_BLEは16bitを意味しているらしい。
念のためInfocenterも見てみたが、同じだ。

../../../services/ble_adconvert_service.c:135:69: error: integer constant is too large for its type [-Werror]
     BLE_UUID_BLE_ASSIGN(ble_uuid, 0x4040E9EB7CD1471E924370F787C7E8EF);

だよねぇ・・・。
UUIDをshortの状態でプロジェクトを保存せんといかんのか?

うん、そうみたいだ。
前のプロジェクトそのままだったせいかもしれないが、一度128bitにして、また16bitにしてやるとうまくいった。
あせったわぁ。

0 件のコメント:

コメントを投稿

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