[[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);:ペアリング(受信)サンプル

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   新規 一覧 単語検索 最終更新   最終更新のRSS