マイコン工作実験日記

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

HIDとA2DP/AVRCPの同時サポート

2024-10-30 17:12:18 | DoomPlayer

前記事で書いたように、これまでのBluetoothサポートはBTStackのhid_host_demoとa2dp_sink_demoをベースにしたものを個別に使用していたために、HIDプロファイルとA2DP/AVRCPプロファイルを同時にサポートすることができず、その結果としてBluetooth Player機能においては音楽再生時にHIDプロファイルを使用してのゲームパッドからの操作が行えませんでした。この制限を撤廃するために、両者を同時に動かせるように修正を加えました。それに合わせて、設定画面も若干修正。

接続、動作中のプロファイル名を示すボタンを新たに追加しました。これらのボタンを押すことで、それぞれのプロファイルとの接続を切断することができます。

A2DPプロファイルが動くのはアプリケーションとしてBluetooth Playerを選択した時だけとしていますが、HIDプロファイルは起動後アプリケーションの選択画面が表示されている状態でも動作するようにしたので、選択操作もゲームパッドを使って行えるようになりました。

 

 


音量、画面輝度設定画面を追加

2024-10-16 14:03:57 | DoomPlayer

Doom Player改め、LVGL Playerに音量と画面輝度の設定画面を追加しました。STM32H7B3I-DKのDoom Playerでは、Music, Sound, Gameの選択画面において、音量調節のスライダーを用意していたのですが、DoomPlayer, Blueotth Player, Oscilloscope Musicの3つの機能を有するLVGL Playerでは、それぞれの機能毎に設定画面を設けていたのでは不便です。どの機能を使った場合でも、同じように操作できる設定画面が必要となります。

そこでスマホでコントロールパネル/コントロールセンターを引き出す操作に似せて、画面を上から下にスワイプすることで設定画面を表示するようにしてみました。具体的には、LVGLのジェスチャー検出機能を使ってスワイプ操作を検出し、下方向へのジェスチャーだった場合に、次のような設定画面に表示を切り替えています。アクティブなスクリーンオブジェクトに対してイベントコールバックを設定することで、画面上のどの箇所でスワイプを行なっても、ジェスチャー操作を検出することができます。

設定画面から戻るには、もちろん下から上へのスワイプ操作を検出して、元の画面に戻します。

Bluetoothのアイコン表示は、Bluetoothの接続状態を示すものであり、接続された場合にはアイコンが青く変化します。

青い状態でアイコンをタッチすると、接続を切断します。

ジェスチャーの検出は ほぼどんな画面を表示している時でも動作するのですが、例外としてスクロール可能な画面範囲では、スワイプ操作とスクロール操作の区別がつかないので、スクロール操作のイベントとして検出され、ジェスチャー操作としては認識されません。Music Playerの画面では、画面を下から上にスワイプすることで曲名リストの表示が行えますが、この機能はスクロール操作によって実現されているので、この画面ではジェスチャーの検出は行えません。そこで、スクロールイベントの検出処理部分で、下方向スクロールのイベントを検出して、設定画面への切り替えを行うこととしています。

Bluetoothの接続については、Doom PlayerとOscilloscope MusicではHIDプロファイルを使っており、現状ではBluetooth PlayerではA2DP/AVRCPプロファイルを使っていますが、HIDプロファイルはサポートできていません。そのため、Bluetooth Playerではゲームパッドを使っての画面操作が行えないという制限があります。HIDプロファイルとA2DP/AVRCPプロファイルを同時に並行して動くようにしたいところで、それに合わせて状態表示も改善したいところです。

 


Oscilloscope Music -- 画面表示 その2

2024-10-06 10:56:39 | DoomPlayer

前記事では、サウンドデータを36ms毎に区切って画面表示をしていると説明しましたが、その後メモリをやりくりした結果 256x256画素で深さ1ビットのバッファをもうひとつ確保することができたので、このふたつのバッファにプロットデータを蓄え、36ms間隔で交互に表示することができるようになりました。結果として、画面上には72ms分のサウンドサンプルに相当するデータが表示されていることになります。

10月末にリリース予定の新しいアルバム(N-SPHERES)が先行予約可能になっているので、予約購入してプレリリースされている Function.wav を早速再生してみました。この曲は7分もあるのですが、他の曲も3分から6分かかるので、Play/Pause の制御と、Next/Prev の操作ボタンを作りました。画面の中央部分にPlay/Pauseボタンが用意されているのですが、再生中は非表示状態になっているもののボタン押下の検出ができるようにしています。ボタンが押されると曲の再生が休止され、次の画像のように Play, Next, Prevボタンが表示されます。

再生を再開したり前後の曲を選択すれば、これらのボタンは非表示状態に戻ります。また、曲名表示部分をクリックするとMusic Playerデモと同じように曲名リストを表示する機能も付け足しました。

コードの大半は Music Playerデモからの流用ですし、アイコンデータもデモから拝借利用させてもらっています。