ANT

BCA_Libとは?

"BCA_Lib"は、BC-ANT-USBを使用するためのライブラリです。ANTデバイスの通信を簡単に行うことができます。
ANTについての詳細は、ANT/ANTの基礎をご覧ください。また、BC-ANT-USBの詳細はANT/BC-ANT-USBをご覧下さい。
"BCA_Lib"の詳しい説明は、こちらをご覧下さい。

注意
BCA_LibはBC-ANT-USBなどのANTデバイス用です。ANT+デバイスでの使用はできません。

機能

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

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

APIは

ファイル

ライブラリを使うには、以下の5つのファイルとBC-ANT-USB用のドライバが必要です。

  • fileBCANT_Driver.zip:BC-ANT-USB用のドライバ
  • AntCallbackInterface.h : コールバックI/F ヘッダファイル
  • AntDevice.h : C++クラスI/F ヘッダファイル
  • BCA_Lib.dll : ライブラリ本体
  • BCA_Lib.lib : インポートライブラリ
  • bc_abstract.dll : ビート・クラフト社製のサポートライブラリ
  • fileBCA_Lib.zip:HTMLドキュメントのBCA_Libの詳細、BC-ANT-USBドライバ、サンプルなど全てのものが、以下のフォルダに入っています(アップデートしました)
    • bin:上記のbc_abstract.dll、BCA_Lib.dll、BCA_Lib.lib
    • driver: BC-ANT-USBドライバ
    • html:BCA_Libの詳細が書かれたHTMLフォーマットのドキュメント(index.htmlをクリックして下さい)
    • include:ANTCallbackInterface.h、AntDevice.h、BCA_Lib.h
    • python_sample:Python用の送信、受信、ペアリング(受信)用のサンプル
    • sample:C++用の送信、受信、ペアリング(受信)用のサンプル

定義

  • チャンネルタイプ(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かもしくはブロードキャストでの接続です。
マスターが複数のスレーブと通信するにはブロードキャストを除いてそれぞれのスレーブとチャンネルを独立して接続する必要があります。

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 サンプル

全てのファイルやBCA_Libに関するHTMLドキュメント

更新履歴

2012/12/04 初稿掲載
2012/12/05 全ての必要なファイルやHTMLドキュメントが入ったzipファイルをアップロード
2013/01/09 リンクの追加と修正
2013/03/01 BCA_Libをアップデートしました。


添付ファイル: fileBCA_Lib.zip 1545件 [詳細] fileBCANT_Driver.zip 1062件 [詳細] filebin.zip 534件 [詳細] fileBCA_send.py 932件 [詳細] fileBCA_recv.py 944件 [詳細] fileBCA_pairing.py 956件 [詳細] filePairingCB.zip 802件 [詳細] fileRecvCB.zip 909件 [詳細] fileSendCB.zip 880件 [詳細] filedriver.zip 576件 [詳細] fileBCA_Lib.lib 559件 [詳細] fileBCA_Lib.dll 604件 [詳細] filebc_abstract.dll 494件 [詳細] fileAntDevice.h 595件 [詳細] fileAntCallbackInterface.h 593件 [詳細] file004.png 1017件 [詳細] file003.png 1143件 [詳細] file002.png 1042件 [詳細] file001.png 1110件 [詳細]

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2013-03-01 (金) 19:28:03 (1746d)