[[ANT]] * BCA_Libとは? [#h6e6376b] "BCA_Lib"は、BC-ANT-USBを使用するためのライブラリです。ANTデバイスの通信を簡単に行うことができます。~ ANTについての詳細は、こちらのページをご覧ください。また、BC-ANT-USBの詳細はこちらをご覧下さい。~ "BCA_Lib"の詳しい説明は、[[こちら>http://labs.beatcraft.com/ja/BCA_Lib/html/index.html]]をご覧下さい。~ ** 機能 [#k242e13f] 主な機能は以下の通りです。 -ANTデバイスオープン/クローズ -データ/イベント受信 -データ送信 -ペアリング処理 -送信/受信データは8バイト APIは -[[コールバックI/F>http://labs.beatcraft.com/ja/BCA_Lib/html/_ant_callback_interface_8h.html]] -[[C++クラスI/F>http://labs.beatcraft.com/ja/BCA_Lib/html/class_ant_device.html]]~ があり、どちらかを使用して利用することができます。 *ファイル [#h2d128a1] -&ref(AntCallbackInterface.h); : コールバックI/F ヘッダファイル -&ref(AntDevice.h); : C++クラスI/F ヘッダファイル -&ref(BCA_Lib.dll); : ライブラリ本体 -&ref(BCA_Lib.lib); : インポートライブラリ -&ref(bc_abstract.dll); : BC製のサポートライブラリ -&ref(driver.zip);: BC-ANT-USBドライバ *定義 [#o10b9ecd] -チャンネルタイプ(channel type):~ 送信(MASTER),受信(SLAVE)を指定します。 -チャンネルNo(channel no):~ ANTデバイスでは8つのチャンネル(0〜7)が使用できます。 -共有チャンネル(shared channl):~ 共有チャンネルとして使用の有無(0/1)~ 詳細は後述の「共有チャンネル」を参照して下さい。 -デバイスNo(device no):~ 各ANTデバイス固有の値です(シリアル番号など)。0はワイルドカードとして使用しますが、送信(MASTER)では不可。 -デバイスタイプ(device type):~ デバイスのタイプを示しています。1〜127の値が設定できます。0はワイルドカードとして使用できますが、送信(MASTER)では不可。 -トランスミッションタイプ(transmission type):~ デバイスの通信特性を示しています。1〜255の値が設定できます。0はワイルドカードとして使用できますが、送信(MASTER)では不可。 -周波数(frequency):~ 2.4Ghz帯を使用します。~ APIで指定するのは 2400 + 指定する値(HZ)です -送受信間隔(channel period):~ データの送信/受信間隔 0.5Hz〜32768Hz * 通信について [#g89d807e] -送信側と受信側でチャンネルID(デバイスNo、デバイスタイプ、トランスミッションタイプ)、周波数が一致しない限り通信を確立することができません(チャンネルIDはワイルドカードを指定している場合を除く)。 -ワイルドカードを指定している場合、受信チャンネルは最初に受信したデバイスのデータのみ受信します。~ **設定例 [#j225b16f] > ''[送信側]''~ チャンネル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]); } * ペアリングについて [#j04d4a21] -ペアリングは特定のデバイスとの通信を確立する為の手段です。~ **設定例 [#s1477024] > ''[送信側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つになります。~ **リファレンス [#tce5cb5a] -[[関数リファレンス (C++ I/F)>http://labs.beatcraft.com/ja/BCA_Lib/html/class_ant_device.html]] -[[関数リファレンス (callback I/F)>http://labs.beatcraft.com/ja/BCA_Lib/html/_ant_callback_interface_8h.html]] * 共有チャンネル [#g18a3c34] **共有チャンネル (shared channel) について [#rb2c111f] ANTネットワークは通常、1対1かもしくはブロードキャストでの接続です。~ マスターが複数のスレーブと通信するにはブロードキャストを除いてそれぞれのスレーブとチャンネルを独立して接続する必要があります。~ #ref(001.png,,CENTER,一般的なチャンネル);~ 共有チャンネルはマスターのチャンネル1つで複数のスレーブと通信する方法です。~ 制限としてはスレーブ側に共有チャンネルアドレスの設定する処理が必要になるのと、送信データに共有チャンネルアドレス(2バイト)を含める必要があるので送信時に利用できるデータのサイズが6バイトになります。~ #ref(002.png,,center,共有チャンネル1);~ 送信例 #ref(003.png,,center,共有チャンネル2 );~ ~ マスター側から共有チャンネルアドレスを含めたデータを送信した場合、各スレーブが送信した該当する共有チャンネルアドレスのNodeがデータを受信します。~ ~ スレーブ側の各Nodeは、受信開始時に自身の共有チャンネルアドレスを送信データの先頭2バイトに含めてブロードキャストする必要があります。~ 共有チャンネルアドレス通知~ #ref(004.png,,center,共有チャンネル3);~ **設定例 [#pcdc1195] > ''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バイトに共有チャンネルアドレスを含めて送信すること。~ 含めない場合は設定された共有チャンネルアドレスを喪失します。~ *サンプル [#a6f96567] **C++ サンプル [#z04ca0e1] -&ref(SendCB.zip);:送信サンプル -&ref(RecvCB.zip);:受信サンプル -&ref(PairingCB.zip);:ペアリング(受信)サンプル **Python サンプル [#y89fa839] -&ref(BCA_send.py);:送信サンプル -&ref(BCA_recv.py);:受信サンプル -&ref(BCA_pairing.py);:ペアリング(受信)サンプル