BCA_Lib
 All Classes Files Functions Pages
BCA_Lib ドキュメント

はじめに

"BCA_Lib" は BC-ANT-USB を使用するためのライブラリです。
ANTデバイスの通信を簡単に行うことができます。
ANTについての詳細はこちら

機能

主な機能は以下の通りです。

  • ANTデバイスのオープン/クローズ
  • データ/イベント受信
  • データ送信
  • ペアリング処理
  • 送信/受信データは8バイト

APIは

ファイル

  • AntCallbackInterface.h : コールバックI/F ヘッダファイル
  • AntDevice.h : C++クラスI/F ヘッダファイル
  • BCA_LIB.dll : ライブラリ本体
  • BCA_LIB.lib : インポートライブラリ
  • bc_abstruct.dll : 弊社提供のサポートライブラリ
  • driver : BC-ANT-USBドライバ

サンプル

  • ANTTestSender 送信サンプル
  • ANTTestPairing 受信サンプル
  • ANTTestPairing ペアリング(受信)サンプル

定義

  • チャンネルタイプ(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

通信について

  • 送信側と受信側でチャンネルID(デバイスNo、デバイスタイプ、トランスミッションタイプ)、周波数が一致しない限り通信を確立することができません(チャンネルIDはワイルドカードを指定している場合を除く)。
  • ワイルドカードを指定している場合、受信チャンネルは最初に受信したデバイスのデータのみ受信します。
  • (例)
    [送信側]
    チャンネル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つになります。

リファレンス

共有チャンネル

  • 共有チャンネル(shared channel)について

ANTネットワークは通常、1対1かもしくはブロードキャストでの接続です。
マスターが複数のスレーブと通信するにはブロードキャストを除いてそれぞれのスレーブとチャンネルを独立して接続する必要があります。

001.png



共有チャンネルはマスターのチャンネル1つで複数のスレーブと通信する方法です。
制限としてはスレーブ側に共有チャンネルアドレスの設定する処理が必要になるのと、送信データに共有チャンネルアドレス(2バイト)を含める必要があるので送信時に利用できるデータのサイズが6バイトになります。


002.png


送信例
003.png


マスター側から共有チャンネルアドレスを含めたデータを送信した場合、各スレーブが送信した該当する共有チャンネルアドレスのNodeがデータを受信します。

スレーブ側の各Nodeは、受信開始時に自身の共有チャンネルアドレスを送信データの先頭2バイトに含めてブロードキャストする必要があります。

共有チャンネルアドレス通知
004.png


[例] 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バイトに共有チャンネルアドレスを含めて送信すること。
含めない場合は設定された共有チャンネルアドレスを喪失します。