マイコン工作実験日記

Microcontroller を用いての工作、実験記録

停滞中

2015-08-29 17:54:48 | Weblog
BTstackを使ったHFPの実験作業ですが、ここのところ停滞中です。HFPの実装自体がまだ開発中のために、時折コードが新しくなるとHFPのAPIが変化しています。その影響かもしれませんが、先日はスマホからの操作でHFP接続ができたものが、いつのまにかできなくなってしまいました。SDPがちゃんと動いていないのかもしれません。

そしてもうひとつの問題がプログラムの大きさ、先日まではテキストが96KBくらいだったのですが、いつの間にやら100KB越え。


DEBUG用のメッセージを出しているのと、それにprintfが使われているのがここまでサイズが大きくなっている要因だと思われますがこの調子だともうすぐ MKL26の128KBでは足りなくなりそうです。これから、音声入出力のコードとか追加していかなきゃならないのに、ちょっと余裕がなさすぎます。もうちょっとFlash/RAMに余裕のあるターゲットに乗り換えようかと思います。


BTstackのHFPを動かしてみる

2015-08-12 16:09:23 | FRDM
しばらく実験の時間がとれなかったので、間が空いてしまいました。

前回の記事までで、BTstackのSPP counterをFRDM-KL25で動かしてみました。その後、BTstack用のHFP/HSPのコードもgithubで公開されていることに気がつきました。どうやらまだ開発途中のようなのですが、SPP用に用意したUSB Transport層のコードをそのまま流用して HFPを動かしてみることができるはずですので、試してみました。音声を通すためには アイソクロナス転送のコードを追加する必要がありますが、その部分は後回しにすることにします。

HFPのコード本体はsrcディレクトリの下に含まれていましたが、サンプルのプログラムはexampleの下には無く、test/ptsの下に入っていました。PTSというのはプロファイルチューニングスイートのことですね。この試験ツールを使ってBTstackの検証を進めているのでしょう。

http_hf_test.cは、そのままではアドバタイズしないので、ちょっとコードに手を加えてスマホからデバイスを見つけられるようにしました。



それらしいCOD (Class of Device)も設定されているようで、ヘッドセットマークが表示されています。



ペアリングを開始すると、ちょっと時間がかかりはするのですが.....



メデタく接続成功!! なんかあっさりと動いてくれました。しかし、ためしに端末側から切断してみたところ、どういうわけか切断ができませんでした。端末側のBluetoothを落とすとちゃんと切れるのですが、HFP切断の手順が走ってくれていないようです。

接続時のログを採ってみると。



HFPのチャネル(#1)で RFCOMMが開いた後に、SLC (Service Level Connection)を確立するためのATコマンドが送受されている様子がわかります。AG側から受信したコマンドはデコードの様子として表示されています。

試しに着信を入れて、応答してみます。


応答にともなって SCO (Synchronous Connection)が開かれ、切断すると閉じられていることがわかります。このイベントを捕まえて、USBのアイソクロナス転送をおこなってやれてば、通話音声がひろえるはずです。着信の際のログが気になって調べてみましたが、相手側の発信者番号が通知されていないようです。SLCを開いたあとで、AT+CLIPを送っていないのが原因のようです。おそらく、HFPのスタックは最小限の機能になっているのでしょう。CLIPについてはアプリ側で実装してやる必要があるようです。