2015/08/31

[nrf52]NFCペアリングサンプルがまだうまくいかない

nRF52832のPreview DKはNFCアンテナが付いているのだが、それを使ったペアリングのサンプルがある。
動かしてみたのだが、前回はうまくペアリングできなかった。
hiro99ma blog: [nrf52][nfc]NFC Pairingサンプルを動かす (1)

NFCのせいかと思い、軽く仕様を確認したのだが、NFCの役割はAndroidに「ペアリングしますか?」の情報を伝えるまでで、ペアリング自体はBLEだけしか関係していないようだった。
hiro99ma blog: [nrf52][nfc]NFC Pairingサンプルを動かす (2)

このときは、シーケンスを見るしかないのかなぁ、と思っていたのだが、私はそんなに詳しくないし、そもそもダメだったとしてもやれることがほとんどない。
それよりも「やり方が悪いだけでは?」という調べ方の方がよかろう、ということで、やり方を見直すことにした。

ぐだぐだ書いたが、「説明を見ながらちゃんとやってみよう」というだけのことだ。


nRF52832のNFCペアリングサンプルは、これだ。
http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk52.v0.9.1%2Fble_sdk_app_hrs_pairing_nfc.html&cp=4_0_0_4_6_0

  1. 起動してもAdvertisingはせずに、NFCタグとして立ち上がる
  2. NFCリーダ(Initiator側ね)で読むと、ペアリングに必要なデータをNFCで送る
  3. タグを読まれるとAdvertisingし始めるので、相手はペアリングできる。
  4. Connectingした後は、普通のHRSサンプルと同じ動きをする
  5. コネクションが切れても自動的にAdvertisingはせず、またNFCタグを読んでもらうことになる

これだけのようだ。

よく読むと、下の方にテスト手順が書かれていた。
読むべきはこちらだったか・・・。

  1. サンプルアプリをコンパイルして、焼く。
  2. NFCアンテナにスマホをタッチして、LED1(BSP_INDICATE_ADVERTISING)が2秒周期のDuty比10%・・・200msec点灯の1800msec消灯になる。NFCタグが搬送波を検知すると、LED4が点灯する。
  3. 'Nordic_HRM'とペアリングするかどうかのポップアップがスマホに表示され、LED1(BSP_INDICATE_CONNECTED)が点灯する。
  4. スマホのnRF ToolboxアプリでHeart Rate Applicationをテストする

つまり、ペアリングはアプリじゃなくてスマホ自体がやるということですな。
やってみると、やはりうまくいかない。

  • LED1は点滅するが、LED4は変化しなかった(光るのが一瞬ぽい感じもする)。まあ、これはよい。
  • LED1の点滅開始と同時に、スマホに「Bluetoothデバイスをペアに設定してもよろしいですか?」が表示される
  • 「はい」にすると、LED1が消えてしまう

うーむ、やっぱりだめか。
BLEモニタを見ると、Connect Update Reqのあと、SMがPairing Reqして待ち状態になっているようなのだ。
Reqを投げているのは、おそらくMaster。
なんで「おそらく」なのかというと、BLEモニタの"Direction"が?になっているからだ。
パケットが壊れているわけじゃないから、そういうものなのか?

 

わからんが、今日はここまでだ。
一応いっておくと、この記事を書く前まではだいたいペアリングができていたのだ。
なので「よくわからないけど、うまくいった」という記事を書くつもりだったのだ。
それが、書きながら順番にやっていくと、できなかったという・・・。

まあ、よくあることだ。

2015/08/30

[nrf]Advertising開始のAPI

nRF51822でAdvertisingするのにsd_ble_gap_adv_start()を使っていたのだけど、最近はble_advertising_start()が流行りなのかね。
nRF52のサンプルを見ていて気付いた。

なんとなく、過去との互換のためだけに残されている気がする。
するのだけど、examplesにはsd_ble_gap_adv_start()を使ったソースもある。

うーん、気にはなるのだが、なんだろうね?

 

ble_advertising_start()を読んでわかったが、これはラッパだ。
中でsd_ble_gap_adv_start()を呼び出している。
単にAdvertisingしたいだけなら、これを呼ぶようにした方がコードを書く量が減らせるということだな。

Advertisingするチャネルを制限して、モニタでつかみやすくしたかったのだけど、sd_ble_gap_adv_start()してるところがなくて困っていたのだ。
そういうのをしたいときは自分でsd_ble_gap_adv_start()を呼ぶようにするか、手抜きしてble_advertising_start()の中身を書き換えるか、だな。


関係ないけど、Keilでソースを開くとこんな警告が出る。

image

コンパイルは通るから、エディタの解析だけなんだろうと思うけど、気持ちが悪いな。

[nrf51]nRF51 SDK v9.0はv8.1の資産がほぼ使える

久しぶりに、nRF51 SDKのバージョンを上げることにした。
最近はBLE自体をやる時間が取れてないのだが、まずは形から入ろう。

nRF51の開発をされた方はおわかりかと思うが、SDKのバージョンアップは頻繁に行われている。
そして、そのたびに苦汁をなめることになっている。

私がnRF51822を入手して、最初にビルドしたのがこのへん(2014/06/28)。
SoftDeviceのバージョンはv7が出始めたくらいなので、安定版はv5とかv6とか。
SDKはv5.2.0なのかな?
hiro99ma blog: [ble]BVMCN5102-BKにビルドして焼く

そして、数日後の07/02にはSDK v6.0.0がリリースされている。
まあ、v5.2.0のリリース日がわかっていないから、これは仕方なかろう。
hiro99ma blog: [ble][nrf51]S110をひもとこうとしているのに・・・
ここで、初めてSDKバージョンアップの苦しみを味わっている。
hiro99ma blog: [ble][nrf51]開発環境アップデート(そして失敗)
hiro99ma blog: [ble][nrf51]nRF51 SDK変わりすぎ・・・

そして、2015/01/20にはSDKv7が出たようだ。
つらかったらしい。
hiro99ma blog: [nrf51]nRF51 SDKがv6からv7になってつらいこと

さらに2015/03/30には、SDKv8.0.0に。
その間に、v7.1.0とv7.2.0が出ていたらしい。
hiro99ma blog: [nrf51]SDK v8.0になって、また仕様が変わる

zipのファイルから、バージョンアップ間隔を見てみよう。

  • v6.1.0 : 2014/08/29
  • v7.1.0 : 2014/11/26
  • v7.2.0 : 2015/01/15
  • v8.0.0 : 2015/03/06
  • v8.1.0 : 2015/05/07
  • v9.0.0 : 2015/07/10

だいたい2ヶ月周期のようだ。


そして今の最新版であるv9.0.0。
v8.1.0との差分を取ったのだが、あまり変わりがない!
過去、フォルダ構成のみならず、APIやマクロの引数仕様すら変わっていたことを考えると、驚くほど変わっていない。
手持ちのソースをビルドしたが、pstorageが変わっていたのでconfigファイルの入替が必要だったが、その程度だ。
まあ、私が作ったソースなんて大したことはしてないからかもしれないのだが、うれしい誤算だ。

とはいえ、まったく変更がないわけではないので、自分で比較された方がよいだろうな。

2015/08/29

[git]注釈付きタグをGit Extensionsで見たい

外と家で仕事するということは、家でお遊びの開発をしていた時間がなくなるということだなー、と改めて思う。
あと1ヶ月の辛抱だ・・・。

というわけで、家でやってるお仕事の内容は書けないが、git運用は書いてもよかろう。


しばらくは、GitFlowを使ってやっていた。
SourceTreeだと統合されているし、GitExtensionsでもデフォルトのプラグインに入っている。
まあ、GitExtensionsの方は準備をしないと使えなかったので、多少敷居が高いな。

いまはgitのサーバとしてBitbucketを使っているのだが、注釈付きtagをやっても、その注釈が見えない気がする。
「git tag -n」と打つと出てくるので打ち込んではいるのだけど、もしかしたらpushしたtagには注釈が入らないのだろうか?
しかし、gitのタグ説明でも、ちゃんと記録されるようなことが書いてある。
うーむ。

「注釈付きタグ」は、英語だとannotated tagらしい。
それで検索すると、出てきた
なんだ、こういう選択があるのか、と思って探したが出てこない。
うちのGit ExtensionsはVersion 2.48.05で、今(2015/08/29)の最新っぽいのだが。。。

上記のリンクは、私がよくわかってない「プルリクエスト」のもののようだ。
私のイメージでは、プルリクエストは「すてきなソースを公開してくれてありがとう! こんな機能を付けてみた/バグっぽいので直してみたので、よかったらマージしてね」だ。

2ヶ月くらい前のものだから、そのうち最新版に取り込まれるかもしれないけど、今のところその機能はないということだな。

2015/08/25

[win10]T61でうまく動かないところ

デスクトップPCへのインストールは当面見送ったものの、ノートPCのThinkPad T61にはインストールしたままだ。
また数ヶ月後にはデスクトップへインストールしてみることになるので、現状を書いておこう。

  • キーボードが106として認識してくれないときがある。
    これは、Win8をインストールしたときもそうだった記憶がある。
    英語配列になってしまうのだ。
    毎回というわけではないのだが、起動時に決定するようだ。
  • 指紋認証を受け付けてくれないことがある。
    これも起動時に決定しているようだ。
    キーボードが106じゃないときに同時に発生するのかと思っていたけど、そうでもなかった。
  • タスクバーの文字が黒かった。
    これはデスクトップにインストールしたときのことだが、タスクバーに表示されているアプリ名の文字色が黒色で、見づらかった。
    でも、ノートの方は白色だったのであれこれやったところ、テーマを変更すると白くなった。
    なので、これは困ってないけど、忘れたときのために記録しておこう。
  • 電源OFF時、ちょっとだけスリープLEDが点滅する。
    困っているというか、そういうものなのか判断できてない。
    T61はスリープ中を示すLEDがあり、スリープ状態に遷移するときや休止状態に遷移するときは点滅するようなのだ(休止状態の場合は、休止したら消灯する)。
    ハイブリッドスリープはOFFにしたのに・・・と調べていたら、もう1つ「高速スタートアップ」もあった。
    これがよろしくなかったのか?

というわけで、キーボード周りが片付けば、そこまで困らない気がする。
あとは、作業用に使い始めたらどうなるか、というところか。

ああ、困っているわけではないが、ちょっとうっとうしいときもあるのが、Alt+Tabを押したときのアプリ一覧表示かな。
ウィンドウのスクリーンショットも表示されるので、わかりやすいといえばわかりやすいのだが、目がどこを探していいのか追いつかない(加齢の問題か?)。
Win+Tabだとタスクビューが動くので、以下でレジストリをいじって旧タイプにしておこうかな。
http://winaero.com/blog/how-to-get-the-old-alt-tab-dialog-in-windows-10/