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用のドライバが必要です。
- BCANT_Driver.zip:BC-ANT-USB用のドライバ
- AntCallbackInterface.h : コールバックI/F ヘッダファイル
- AntDevice.h : C++クラスI/F ヘッダファイル
- BCA_Lib.dll : ライブラリ本体
- BCA_Lib.lib : インポートライブラリ
- bc_abstract.dll : ビート・クラフト社製のサポートライブラリ
- BCA_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かもしくはブロードキャストでの接続です。
マスターが複数のスレーブと通信するにはブロードキャストを除いてそれぞれのスレーブとチャンネルを独立して接続する必要があります。
共有チャンネルはマスターのチャンネル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バイトに共有チャンネルアドレスを含めて送信すること。
含めない場合は設定された共有チャンネルアドレスを喪失します。
サンプル・コード †
送信、受信、ペアリング(受信用)のサンプル・コードです。C++とPythonバーションがあります。
C++ サンプル †
Python サンプル †
全てのファイルやBCA_Libに関するHTMLドキュメント †
更新履歴 †
2012/12/04 初稿掲載
2012/12/05 全ての必要なファイルやHTMLドキュメントが入ったzipファイルをアップロード
2013/01/09 リンクの追加と修正
2013/03/01 BCA_Libをアップデートしました。