KIT-RX65Nラップタイマー(その1)

デジタルストレージオシロスコープは、部品が揃って無いので、保留状態となっており、新たにラップタイマーの実装を行っている、ゆくゆくはデータロガー的な物にしようと思う。
本当は「もて耐」で使う予定だったが、本業が忙しく間に合わなかった・・・

RX65N Envision Kit で何かを作る場合、ケースはどうするか?
ピッタリ収まるような汎用品を探したが、見つからない・・
※かなり大きく厚くなってしまう・・・
そうなると、作るしか無い、以前に「フォーレックス」と言う発砲プラスチックでケースを作った事がある、カッターで切れて軽くて作りやすいものの、意外と柔軟性が無く、簡単に割れたりもする。
そこで、専用ケースを作る為、とりあえず、一番安い3Dプリンターを買ってみた。
まだ組み立て中で調整も試運転もできていないが、前から欲しかった事もあり、ついついポチってしまったw
※比較的安い物を買ったので、安物買いのナントカにならないか不安ではあるのだが・・・

ラップタイマー的な物は、昔にAVRで作った事がある、液晶は128×64のモノクロで、今でも動作するのだが、かなり大きく(厚みがある)、バイクに付けるには少し大きすぎる・・
ラップタイマーだけなら、P-LAP などで十分だが、それなりの値段でもあるし、GPS を使った区間タイム表示、インジェクターパルスを収集して正確な燃費計など、やりたい事は色々あり、性懲りも無くまた作る事にした。
※今までに、何回もやり直してきたが、中途半端な状態でストールする苦い過去がある。
とりあえず、以前のリソースを元に液晶のGUIデザインなどをカットアンドトライで行っているのだが、解像度が高いので GUI のビットマップなどを作り直す必要がある、また、タッチパネルなので、それに合った操作性にする必要がある。

その前に、カラー画像を表示する為、BMPファイルのローダーをポーティングした。
BMPなら、比較的フォーマットが単純なので、メモリーを多く消費せず、また以前にアプリ用に実装したソースコードがほぼそのまま使える。
※少し前に JPEG のローダーをポーティングしたのだが、libjpeg では、構造上、一時メモリが必要で、メモリ不足で動作しなかった、libjpeg の API 操作だけで、一時メモリを必要としない方法もありそうだが、それに関連する情報が少なく、ライブラリソースを研究する時間的余裕が無く保留にしてある。
BMP でも、通常は、デコードした画像情報を一旦メモリーに蓄えて、フレームバッファにコピーする手法を取るのだが、余分なメモリーは無いので、デコードしながら直接フレームバッファに描画する。
BMP では、フルカラーは無圧縮、インデックスカラーはランレングス圧縮なので、ワーク用メモリを殆ど消費しない。
この為、BMP ローダーをテンプレート・クラスとして、描画クラスを参照で渡す仕組みに変更した。

template<class RENDER>
class bmp_in {
    RENDER&    render_;
...
    bmp_in(RENDER& render) : render_(render) ... { }
};

コンストラクターで、RENDER クラスの参照を渡す、BMP デコード時、このクラスを使ってフレームバッファに直接描画する。
※テストで使った BMP ファイルは24ビットカラーだけど、液晶は RGB565 なので、マッハバンドが気になる、またこの液晶は、視野角がかなり狭いのが痛い(低価格だから仕方無いのか・・)
※BMP 形式では、24、32、ビットフォーマットは圧縮されないので、やはりPNGなどもサポートする必要がありそうだー、その場合、Zライブラリーもポーティングする必要性がある。

GUI の部品は、bmc (ビットマップコンバーター)で変換した bitmap ストリームとして持っていて、他に、オブジェクトの横幅、高さ情報も保持している。
液晶が 128×64 くらいでは、この方法でも部品が小さいので問題無いが、480×272くらいだと、オブジェクトが大きく、速度の面でも、メモリーの面でも効率が悪い。
そこで、今後の事を考えて bmc に機能を追加して、簡単な圧縮フォーマットを実装する必要がありそうだー
とりあえず、カラーは考えないで、モノクロで、そこそこ、描画が効率良く行えるように、シンプルなフォーマットを考える必要がある。
※本来、モノカラーでも、「黒」、「白」の他に「透過」のアトリビュートが欲しいところではあるが、部品の描画を行うアプリ側で、細かく実装を行い、何とか見た目の問題を回避している、より複雑な GUI が沢山あると、これではマズイと思うのだが、その時考える事にしておく・・・

また、GPSから出てくるテキストのパースなどを実装する必要があり、実験したいのだが、部屋の中では、電波が弱くて受信出来ない、そこで外部アンテナを取り付けて、アンテナだけ外に出すようにした、実験してみると、窓枠に置いておけば、(窓が閉まっていても)ギリギリ受信出来る事を確認して、出てくる「経度、緯度」から、自宅の位置を確認した。
※以前にSUP500、GPSレシーバーを使っていたが、販売されていないので、10Hz出力が可能な物「GTPA013」を再度購入した、外部アンテナと、接続コネクターは秋月で入手出来た。
GPS関係では、データをロギングした後に軌跡を表示したりするアプリも作る必要があり、まだまだ調べたり実験する事が沢山あるので、これからの研究が必要な分野なので、まだまだ時間がかかりそうと思う。