BCA_Lib

- Main Page
- Classes
- Files

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

# はじめに

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

# 機能

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

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

APIは

- コールバックI/F
- C++クラスI/F
  があり、どちらかを使用して利用することができます。

# ファイル

- 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つになります。

# リファレンス

- 関数リファレンス(C++ I/F)
- 関数リファレンス(callback I/F)

# 共有チャンネル

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

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