menuconfigの続き。
menuconfigでSaveすると、ファイルはbuildの下に.configとして保存されるようだ。
このファイルは、—prestineすると消えてしまうようである。
なので、これをprj.confとして保存してしまえばいいや、と思ったが、CONFIGがずらずら並んでいると気が滅入る。
どうやって減らそうかと思ったら、advancedということでminimal configをSaveするメニューがあった。
# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib) CONFIG_GPIO=y CONFIG_SOC_SERIES_NRF51X=y CONFIG_ARM=y CONFIG_SERIAL=y CONFIG_UART_0_NRF_UART=y CONFIG_ENTROPY_NRF5_THR_THRESHOLD=4 CONFIG_ENTROPY_NRF5_ISR_THRESHOLD=12 CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_250PPM=y CONFIG_BT=y
今の設定で出力させたのだが、THRESHOLDの設定を変更したかどうか記憶にない。。まあいいや。
samples/bluetooth/peripheral_hrと比べて、いくつか追加した。
# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib) CONFIG_GPIO=y CONFIG_SOC_SERIES_NRF51X=y CONFIG_ARM=y CONFIG_SERIAL=y CONFIG_UART_0_NRF_UART=y CONFIG_ENTROPY_NRF5_THR_THRESHOLD=4 CONFIG_ENTROPY_NRF5_ISR_THRESHOLD=12 CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_250PPM=y CONFIG_BT=y CONFIG_BT_PERIPHERAL=y CONFIG_BT_GATT_DIS=y CONFIG_BT_GATT_DIS_MODEL="LED control" CONFIG_BT_GATT_DIS_MANUF="hiro99ma" CONFIG_BT_SMP=y CONFIG_BT_DEVICE_NAME="BLE Test"
標準の項目については大半がCONFIGの設定だけで済ませられそうだ。
こりゃ、便利だわ。
Memory region Used Size Region Size %age Used
FLASH: 76267 B 256 KB 29.09%
SRAM: 12988 B 16 KB 79.27%
IDT_LIST: 136 B 2 KB 6.64%
まだまだ大丈夫だ。
Device Information Serviceを組み込んだので、これだけでも何か動いていいはずだ。
samples/bluetooth/peripheral_hrからBASとHRSを削除すればいいだろう。
main.cを見て気付いたが、BASとHRSっぽいのって、ほぼnotify()だけではないか。。。
こんなにコードが少なくて済むのか。
まあ、自分でserviceを作ってないからだとはいえ、助かるな。
Advertisingする設定が気になる。
peripheral_hrではこんな設定になっていた。
static const struct bt_data ad[] = { BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)), BT_DATA_BYTES(BT_DATA_UUID16_ALL, 0x0d, 0x18, 0x0f, 0x18, 0x05, 0x18), };
UUIDはいつも128bitだったような気がするが、ここは16bitなのか。
じゃあ、16bitの設定はどこで? 128bitはどうやって??
やはりコードだけじゃ無理だな。
https://docs.zephyrproject.org/latest/guides/bluetooth/bluetooth-dev.html#initialization
説明はないが、ここではadが2byte分しかないのでわかりやすい。
0xaa, 0xfeはGoogleだろう。
https://www.bluetooth.com/ja-jp/specifications/assigned-numbers/16-bit-uuids-for-members/
BT_DATA_UUID16_ALLは、ALLとついているから列挙しているのだろう。
serviceなんかで、こういう値があった気がするのだが。。。
https://www.bluetooth.com/ja-jp/specifications/gatt/services/
そういえば、GenericだかGeneralだかがあったな。Device Information Serviceもそうだし。
Core仕様書が出てきた。
ここではv4.2を見ている。たぶんv5.1でも同じ章番号だろう。
Vol 3 – Part B – 2.5.1 UUID
https://www.bluetooth.com/specifications/assigned-numbers/service-discovery/
Serviceはここから探せそうだ。
0x18があるのでGenericなServiceの番号かと思ったのだけど、なんか違う気がする。
Current Time Serviceは使って無さそうだから。
あまり深く考えず、AdvertisingだからAdvertisingのところを調べるべきだろう。
Advertisingは、GAP(Generic Access Profile)だ。
GAPは、Vol.3 – Part Cだ。
https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile/
BT_DATA_UUID16_ALLは0x03なので、«Complete List of 16-bit Service Class UUIDs»を表しているのだろう。
0x09の«Complete Local Name»はBT_DATA_NAME_COMPLETEだから、COMPLETEを使ってくれれば悩まなかったのに。。。
ともかく、Service Classの16bit UUIDを列挙しているということだろう。
あれ、じゃあさっきの考えは間違ってなかったのか?
0x180d = Heart Rate
0x180f = Battery
0x1805 = Current Time
普通はこういう情報に現在時刻が必要よね?ということで付けたのだろうか。
じゃあ、最初に「Googleだろう」って書いたのは間違っているのかな。
まあいい。
今回は、Device Information Serviceだけだから、0x180Aでよかろう。
ビルドして焼いてみる。
むう、あっさり動いた。
さて、ここで出てきたUUIDのF1:76:C0:98:07:47はなんだろう?
MACなんだろうけど、どうやって指定するんだっけ。
6 byte mac address oft nrf52832 - Nordic DevZone
https://devzone.nordicsemi.com/f/nordic-q-a/31062/6-byte-mac-address-oft-nrf52832
ああ、FICRか。
nRF52832のデータだけど、こんな感じでDEVICEADDR[]が入っているようだ。
nRF51822だと少し違うのかな?
nRF51822 - ID - Nordic DevZone
https://devzone.nordicsemi.com/f/nordic-q-a/6452/nrf51822---id
たぶん書き換えられないんだろう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。