ANT

BCA_Libとは?

"BCA_Lib"は、BC-ANT-USBを使用するためのライブラリです。ANTデバイスの通信を簡単に行うことができます。
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つになります。

リファレンス

共有チャンネル

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

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

CENTER,一般的なチャンネル

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

center,共有チャンネル1

送信例

center,共有チャンネル2


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

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

center,共有チャンネル3

設定例

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バーションがあります。

C++ サンプル

Python サンプル

更新履歴

2012/12/04 初稿掲載


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