BGAPIはcommand,response,eventという3種類の処理によって動作する、
イベントドリブンな軽量APIです。実体は適切なフォーマットの16進数を送受信しているだけであり、
さまざまなプログラミング言語に簡単に移植することが可能です。
(参考:Python, C#, Arduino向けの実装例)
本文章では、BlueGiga社の提供するBLESDKに同梱されているbglibの使用方法について、 簡単に解説していきたいと思います。
BLE機器との接続,キャラクタリスティックの読み書き等の基本的な処理はもちろん、
複雑なシステムコマンドまで、全てが関数として実装されています。
ユーザはそれらを呼び出すだけで、BGAPIの全ての機能にアクセスすることが可能です。
(実装ファイル:anytypes.h, cmd_def.h, cmd_def.h)
PCから使用する場合、BlueGiga社のBLEドングル,BLED112に仮想COMドライバからアクセスし、 BGAPIのcommandを送信します。commandは受理された場合、必ずresponseを返してきます。 これを仮想COMから読み込み解析することで、ユーザはcommandの実行結果等の詳細な情報を得ることができます。
また、いくつかの処理は結果をeventとして、不定期に返却してきます。 なので、そうした処理に対しては実行後、複数回の仮想COMからの読み出しが必要となります。
こうしたresponseとeventは、イベントハンドラで処理することを想定しています。
なので、ユーザはその実装を適宜書き換えることで任意の動作を実現します。
(実装ファイル:commands.c)
BLED112の製品ページから、 ドライバをダウンロードします。(ダウンロードには会員登録が必要です。)
BGAPIを使用するにあたって、コマンド送信処理とメッセージループを独自に実装する必要があります。 scan_example内のoutput関数,read_message関数がそれぞれ参考になるかと思います。
注意点として、おそらく仮想COMのドライバは全二重通信に対応していません。 そのため、仮想COMの読み書きは排他制御される必要があります。
簡単のため、一部のcommandの引数の解説や、responseの発生タイミングについては記述しません。
ble_cmd_gap_end_procedure()
現在のGAP接続および、BLE機器の検索を終了します。
ble_cmd_connection_disconnect(uint8 handle)
handleに指定した接続を破棄し、その接続を利用可能な状態にします。
ble_cmd_gap_discover(args...)
アドバタイズ状態のBLE機器を検索します。
検索結果はble_evt_connection_status()として発生し、
そのイベントハンドラ内で参照することが可能です。
ble_cmd_gap_connect_direct(bd_addr address, args...)
addressに6byteのmacアドレスを指定することで、そのBLE機器へ接続します。