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