"BCA_Lib"は、BC-ANT-USBを使用するためのライブラリです。ANTデバイスの通信を簡単に行うことができます。
ANTについての詳細は、ANT/ANTの基礎をご覧ください。また、BC-ANT-USBの詳細はANT/BC-ANT-USBをご覧下さい。
"BCA_Lib"の詳しい説明は、こちらをご覧下さい。
主な機能は以下の通りです。
APIは
ライブラリを使うには、以下の5つのファイルとBC-ANT-USB用のドライバが必要です。
[送信側]
チャンネルNo:0
チャンネルタイプ:0 (MASTER)
共有チャンネル:0
デバイスNo:33
デバイスタイプ:1
トランスミッションタイプ:1
周波数:66 (2466Mhz)
送受信間隔:4Hz
コールバックI/Fを使用したサンプルコードmain() { // ANTデバイスのオープン dev = BCA_OpenDevice(0); // ANTデバイスの初期化 res = BCA_Init(dev); // 送信コールバック関数の登録 BCA_RegisterSendFunc(dev, SendFunc, NULL); // チャンネルのオープン res = BCA_OpenChannel(dev, // device context 0, // channel no(0) BCA_CHANNEL_TYPE_MASTER, // channel type(Master) BCA_CHANNEL_NOSHARED, // shared channel 33, // device no 1, // device type 1, // trans typs 66, // freq 2466Hz = 2400 + 66 4); // hz // // 送信中... // // チャンネルのクローズ BCA_CloseChannel(dev, 0); // デバイスのクローズ BCA_CloseDevice(dev); } ///////////////////////////////////////////////////////////////// // 送信コールバック関数 ///////////////////////////////////////////////////////////////// void SendFunc(void* cookie, int channel, void* cookie) { static unsigned char val = 0; unsigned char dat[8]; memset(dat, val,8); val++; // 送信処理 // データは8バイト固定 BCA_SendData(dev, channel, dat, 8); }
[受信側]
チャンネルNo:0
チャンネルタイプ:1 (SLAVE)
共有チャンネル:0
デバイスNo:0(ワイルドカード)
デバイスタイプ:0(ワイルドカード)
トランスミッションタイプ:0(ワイルドカード)
周波数:66 (2466Mhz)
送受信間隔:4Hz
サンプルコードmain() { // ANTデバイスのオープン dev = BCA_OpenDevice(); // ANTデバイスの初期化 res = BCA_Init(dev); // 受信コールバック関数の登録 BCA_RegisterReceiveFunc(dev,ReceiveFunc, NULL); // チャンネルのオープン res = BCA_OpenChannel(dev, 0, // channel BCA_CHANNEL_TYPE_SLAVE, // slave BCA_CHANNEL_NOSHARED, // shared channel 0, // device no 0, // device type 0, // tarans type 66, // freq 4); // Hz // // 受信中... // // チャンネルのクローズ BCA_CloseChannel(dev, 0); // デバイスのクローズ BCA_CloseDevice(dev); } ///////////////////////////////////////////////////////////////// // 受信コールバック関数 ///////////////////////////////////////////////////////////////// void ReceiveFunc(void* cookie, int channel, unsigned char evnt, void* data, unsigned int length, void* cookie) { unsigned char* dat = (unsigned char*)data; printf("DATA[%x][%d][%02x][%02x][%02x][%02x][%02x][%02x][%02x][%02x]\n", evnt, channel, dat[0], dat[1], dat[2], dat[3], dat[4], dat[5], dat[6], dat[7]); }
[送信側1]
チャンネルNo:0
チャンネルタイプ:0 (MASTER)
デバイスNo:1234
周波数:66 (2466Mhz)
送受信間隔:4Hz
[送信側2]
チャンネルNo:0
チャンネルタイプ:0 (MASTER)
デバイスNo:5678
周波数:66 (2466Mhz)
送受信間隔:4Hz
[受信側]
チャンネルNo:0
チャンネルタイプ:1 (SLAVE)
デバイスNo:0
周波数:66 (2466Mhz)
送受信間隔:4Hz
サンプルコードmain() { // ANTデバイスのオープン dev = BCA_OpenDevice(0); // ANTデバイスの初期化 res = BCA_Init(dev); // ペアリングコールバック関数の登録 BCA_RegisterPairingFunc(dev,PairingFunc, NULL); // 受信コールバック関数の登録 BCA_RegisterReceiveFunc(dev,ReceiveFunc, NULL); // ペアリング処理開始 res = BCA_StartPairing(dev, 66, // freq 4, // Hz 10);// ペアリングの検索時間(秒) // // 処理中... // // チャンネルのクローズ BCA_CloseChannel(dev, 0); // デバイスのクローズ BCA_CloseDevice(dev); } ///////////////////////////////////////////////////////////////// // ペアリング コールバック関数 ///////////////////////////////////////////////////////////////// void PairingFunc(void* cookie, int* device, unsigned char count, void* cookie) { if (count <= 0) { // デバイスは見つからなかった return; } int device_no = 0; int device_type = 0; int trans_type = 0; int res = 0; // 最初のデバイスに接続する // デバイス情報を取得 res = BCA_GetPairingDeviceInfo(dev, 0, &device_no, &device_type, &trans_type); // チャンネルのオープン res = BCA_OpenChannel(dev, 0, // channel no BCA_CHANNEL_TYPE_SLAVE, // SLAVE BCA_CHANNEL_NOSHARED, // no shared device_no, // device no device_type, // device type trans_type, // trans type 66, // 2466MHz 4); // 4Hz }
ペアリング処理(BCA_StartPairing())を実行すると指定した時間が経過後、登録(BCA_RegisterPairingFunc())されたコールバック関数が実行されます。
関数には見つかったデバイスのチャンネル情報(デバイスID)が渡されます。
アプリケーションのUIで接続するデバイスを選択し、チャンネルをオープン(BCA_OpenChannel())します。
8チャンネルを使用してデバイスの検索を行いますので、検出できるデバイス数は最大8つになります。
ANTネットワークは通常、1対1かもしくはブロードキャストでの接続です。
マスターが複数のスレーブと通信するにはブロードキャストを除いてそれぞれのスレーブとチャンネルを独立して接続する必要があります。
共有チャンネルはマスターのチャンネル1つで複数のスレーブと通信する方法です。
制限としてはスレーブ側に共有チャンネルアドレスの設定する処理が必要になるのと、送信データに共有チャンネルアドレス(2バイト)を含める必要があるので送信時に利用できるデータのサイズが6バイトになります。
送信例
マスター側から共有チャンネルアドレスを含めたデータを送信した場合、各スレーブが送信した該当する共有チャンネルアドレスのNodeがデータを受信します。
スレーブ側の各Nodeは、受信開始時に自身の共有チャンネルアドレスを送信データの先頭2バイトに含めてブロードキャストする必要があります。
共有チャンネルアドレス通知
Node A 設定
Channel No:0
Channel Type:BCA_CHANNEL_TYPE_MASTER (共有チャンネルを使用した送信チャンネル)
Shared:BCA_CHANNEL_SHARED(共有チャンネル)
Device Number:33 (ノードAのシリアル番号)
Device Type:3 (ノードAのデバイスタイプ)
Transmission Type:3 (2バイトの共有チャンネルアドレス)
RF Frequency:66 (使用周波数 2466Mhz)
Period:4Hz
Node B,C,D設定
Channel No:0
Channel Type:BCA_CHANNEL_TYPE_SLAVE (共有チャンネルを使用した受信チャンネル)
Shared:BCA_CHANNEL_SHARED(共有チャンネル)
Device Number:33 (ノードAのシリアル番号)
Device Type:3 (ノードAのデバイスタイプ)
Transmission Type:3 (2バイトの共有チャンネルアドレス)
RF Frequency:66 (使用周波数 2466Mhz)
Period:4Hz
スレーブ側(Node B,C,D)はチャンネルのオープンが完了したら自身の共有チャンネルアドレスを先頭2バイトに含めたデータを送信(ブロードキャスト)すること。
以降、データを送信する際には常に先頭2バイトに共有チャンネルアドレスを含めて送信すること。
含めない場合は設定された共有チャンネルアドレスを喪失します。
送信、受信、ペアリング(受信用)のサンプル・コードです。C++とPythonバーションがあります。
2012/12/04 初稿掲載
2012/12/05 全ての必要なファイルやHTMLドキュメントが入ったzipファイルをアップロード
2013/01/09 リンクの追加と修正