Armadillo-640+
BT/THオプションモジュール「OP-A600-BTTHMOD-00」+pc-ble-driverで
アドバタイジングパケットのPDUを表示する方法です。
備考)BT機能を使用する方法としては、bluezとpc-ble-driverがあります。
bluezを使う方法は、下記マニュアルを参照ください。
Armadillo-640 製品マニュアル「18.7. Armadillo-600シリーズ BT/THオプションモジュール」「18.7.8. 動作確認」
ここでは、下記Howtoで紹介されているpc-ble-driverを使います。
Armadillo-640 + BT/THオプションモジュール + pc-ble-driver スキャンサンプル
1. Armadillo-640+BT/THオプションモジュール(OP-A600-BTTHMOD-00)の準備
Armadillo-640:BT/THオプションモジュール(OP-A600-BTTHMOD-00)を使用する準備(手順まとめ)の手順を実施します。
2. pc-ble-driver用ファームウェアの書き込み
上記手順1で準備した Armadillo-640+BT/THオプションモジュール(OP-A600-BTTHMOD-00)を
インターネットに接続可能なネットワークに接続して起動します。
下記コマンドで、pc-ble-driver用ファームウェアを書き込みます。
root@armadillo:~# wget https://download.atmark-techno.com/sample/a640-ble-longrange-howto/firmware.tar.gz root@armadillo:~# tar xf firmware.tar.gz root@armadillo:~# cd firmware root@armadillo:~/firmware# openocd -f interface/imx6-armadillo-640-con9.cfg -c \ "transport select swd; set WORKAREASIZE 10; adapter_nsrst_delay 100; \ adapter_nsrst_assert_width 100; source [find target/nrf52.cfg]" -c \ "init; targets; halt;" -c "nrf51 mass_erase" -c "flash write_image \ connectivity_1.0.0_usb_with_s140_6.1.1.hex 0; reset halt; targets; verify_image \ connectivity_1.0.0_usb_with_s140_6.1.1.hex 0; reset run; targets; exit" root@armadillo:~/firmware# cd
3. pc-ble-driverの準備
ATDEにpc-ble-driverをビルドする環境を構築します。
注)pc-ble-driverのビルドは、Armadilloではなく、ATDE上で行います。以下、手順3,手順4はATDE上で実施します。
atmark@atde8:~$ sudo dpkg --add-architecture armhf atmark@atde8:~$ sudo apt update && sudo apt upgrade -y atmark@atde8:~$ sudo apt install -y g++-arm-linux-gnueabihf libasio-dev libudev-dev libudev-dev:armhf atmark@atde8:~$ git clone https://github.com/atmark-techno/pc-ble-driver.git -b armadillo
4. pc-ble-driverのスキャンサンプル(scan_sample)の改変
スキャンサンプル(scan_sample)のソースコード(pc-ble-driver/examples/scan_sample/main.c)の
on_adv_reportに、下記コメントで挟んだ行を追加します。
/**** print advdata: begin ****/
/**** print advdata: end ****/
改変したpc-ble-driver/examples/scan_sample/main.cのon_adv_reportの抜粋
static void on_adv_report(const ble_gap_evt_t * const p_ble_gap_evt) { int8_t rssi_value = 0; uint32_t err_code; uint8_t str[STRING_BUFFER_SIZE] = {0}; char name[STRING_BUFFER_SIZE] = {0}; data_t dev_name; // Log the Bluetooth device address of advertisement packet received. ble_address_to_string_convert(p_ble_gap_evt->params.adv_report.peer_addr, str); memcpy(peer_addr, str, STRING_BUFFER_SIZE); rssi_value = p_ble_gap_evt->params.adv_report.rssi; if(find_adv_name(&p_ble_gap_evt->params.adv_report, &dev_name)) { strncpy(name, (char *)dev_name.p_data, dev_name.data_len); name[dev_name.data_len] = '\0'; } else { strcpy(name, "unknown"); } printf("device address: 0x%s, RSSI: %d device name: %s\n", str, rssi_value, name); /**** print advdata: begin ****/ printf("PDU: "); for (int i = 0; i < p_ble_gap_evt->params.adv_report.data.len; i++) { printf("%02X", p_ble_gap_evt->params.adv_report.data.p_data[i]); printf(" "); } printf("\n\n"); /**** print advdata: end ****/ err_code = sd_ble_gap_scan_start(m_adapter, NULL, &m_adv_report_buffer); if (err_code != NRF_SUCCESS) { printf("Scan start failed with error code: %d\n", err_code); fflush(stdout); } }
ビルドします。
atmark@atde8:~$ cd pc-ble-driver/at_build atmark@atde8:~/pc-ble-driver/at_build$ make dist-clean && make CROSS_COMPILE=arm-linux-gnueabihf-
ビルドにより、pc-ble-driver/at_buildディレクトリにscan_sampleという実行ファイルが生成されます。
このscan_sampleをArmadillo-640に置きます。
5. pc-ble-driverのスキャンサンプル(scan_sample)の実行
5.1 scan_sampleに実行権限を付ける
Armadillo-640に置いたscan_sampleに実行権限を付けます。
root@armadillo:~# chmod +x scan_sample
5.2 scan_sampleを実行
scan_sampleを実行する際、1M PHYか、Coded PHYを指定できます。
(下記コマンド例は、scan_sampleが/rootディレクトリにある場合です。)
1M PHYの場合のコマンド例
root@armadillo:~# stdbuf -oL /root/scan_sample -p 1m -s /dev/ttyACM0
Coded PHYの場合のコマンド例
root@armadillo:~# stdbuf -oL /root/scan_sample -p coded -s /dev/ttyACM0
補足)上記例の"stdbuf -oL"は、標準出力のバッファを行単位にするためのものです。
このscan_sampleを実行すると、下記のコマンド実行例のようにスキャンされたデバイス情報(device address: ...)に続いて、
"PDU: "の後ろに、PDUが表示されます。
コマンド実行例(1M PHYを指定した場合)
root@armadillo:~# stdbuf -oL /root/scan_sample -p 1m -s /dev/ttyACM0 phy: 1M_PHY Serial port used: /dev/ttyACM0 Baud rate used: 1000000 Info: Successfully opened /dev/ttyACM0. Baud rate: 1000000. Flow control: none. Parity: none. device address: 0x3222113F7B77, RSSI: -55 device name: BLECAST_BL PDU: 02 01 05 07 FF 99 99 20 00 0D 00 0C 09 42 4C 45 43 41 53 54 5F 42 4C 00
備考)BT/THオプションモジュールのファームウェアを、標準のBT用ファームウェアに戻す場合
BT/THオプションモジュールのファームウェアを、上記手順で書き込んだpc-ble-driver用ファームウェアから
標準のBT用ファームウェアに戻す場合、以下のコマンドを実行します。
root@armadillo:~# apt reinstall firmware-at-bt