Sabotenboy's *sigh*
今年こそ本業を変えたいなぁ...^^;




ツイッターのTLのおかげで安価に3本買えたので細長液晶遊び祭りに参加^^

...ただフレキから0.1 inchへの変換基板が某ショップで本体の2倍近くな価格だったのでついいつものようにaliさんに発注(0.5mm22pフレキ、変換基板、フレキコネクタ)
なので暫くハード方面はおいておいてデータの抽出関係を進めます

既に本体だけで寿司化された方がいらっしゃって、これを追試すれば...と思ったらWindowsな.NETのコンバーターのソースが共有されています^^;

...説明とコードを読んでポイントは分かったような気がしたのでLinux(Debian系)のshellscriptだけでなんとか個別画像のbmpファイルを作成出来ないか試したのが以下の内容です(出来ました)

マジョカアイリスを分解(難易度高)し、運良くmicro SDカードが接着剤で固められてるリビジョンの基板を手にしたらまずバックアップを取ります
ツイッターでは他のカードにコピーしても問題無く動くとの報告もあり、カードのシリアルとかで紐づけ等はしていないと...

取り敢えず今回扱うのはカードのルートにいる AB565.bin というファイルです
前述のひろみつさんの解析で内容は以下の通り判明しています

+--------------------+
| rgb565 640x48 #000 | ファイルの先頭
+--------------------+
| rgb565 640x48 #001 |
+--------------------+
|        ....        |
+--------------------+
| rgb565 640x48 #079 |
+--------------------+
| rgb565 128x128#000 |
+--------------------+
| rgb565 128x128#001 |
+--------------------+
|        ....        |
+--------------------+
| rgb565 128x128#281 |
+--------------------+

640x48 の個別の画像サイズは、640x48x2(byte) = 61440(byte)
128x128 の個別の画像サイズは、128x128x2(byte) = 32768(byte)

rgb565フォーマットではrとbに5 bit、gに6bitを割り当てるので合計16bit = 2byte が1 pixelあたりのデータになります

2種類のデータがあるのでまず640x48の塊と128x128の塊に分けます

dd if=AB565.bin bs=4915200 count=1 > F640x48x80.bin
dd if=AB565.bin bs=1 skip=4915200 > F128x128x282.bin

ddを使ってまずファイルの頭から 61440 byte x 80 個 = 4915200 byte を切り分け(F640x48x80.bin)、次に同じくddを使い 4915200 byte をスキップした残りをファイルに吐いています(F128x128x282.bin)

個別画像のファイルサイズは既に計算してあるので、このサイズで塊を等分します

split -b 61440 -a 3 -d F640x48x80.bin a
split -b 32768 -a 3 -d F128x128x282.bin b

split を使います、-b でbyte単位で分割サイズを指定、-d は自動的に追加される接尾辞に数字を選択(デフォルトはアルファベット)、-a は3桁幅を指定(これを指定しないと分割数が90を超えると期待した結果にならなくなる)、最後のアルファベット ”a" と "b" は接頭辞(ファイル名の先頭)の指定
結果、a000, a001, ... , a079, b000, b001, ... , b281 という名前のファイルが作成される

分割された個別のファイルはrgb565なrawデータなのでそれなりのソフトなら表示は可能、でも扱いにくいのでbmp化します

コンバーターには ffmpeg を使います...というかこういう使いかたが出来るんだぁという発見でした^^

for FILE in $(find . -type f -name 'a*' -print | sed 's/^\.\///')
do
 ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb565 -s 640x48 -i $FILE -vcodec bmp A$FILE.bmp
done

for FILE in $(find . -type f -name 'b*' -print | sed 's/^\.\///')
do
 ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb565 -s 128x128 -i $FILE -vcodec bmp B$FILE.bmp
done

find を使って a* に該当するファイル(640x48)の一覧をカレントディレクトリで作成します、パイプで sed に渡してるのは ファイルの先頭のパス"./"をむしってファイル名だけにする処理です
for ループで見つかったファイルをそれぞれ処理します
ループの中で ffmpeg を呼び、rgb565 な raw ファイルを rgb565 のままbmpに変換してくれます
b* なファイルら(128x128)も同様に処理します

出来た bmpファイルを data2 サブディレクトリへ移動し、中間ファイルを削除して完了

全体を再掲すると以下の通り

dd if=AB565.bin bs=4915200 count=1 > F640x48x80.bin
dd if=AB565.bin bs=1 skip=4915200 > F128x128x282.bin
split -b 61440 -a 3 -d F640x48x80.bin a
split -b 32768 -a 3 -d F128x128x282.bin b
for FILE in $(find . -type f -name 'a*' -print | sed 's/^\.\///')
do
 ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb565 -s 640x48 -i $FILE -vcodec bmp A$FILE.bmp
done
for FILE in $(find . -type f -name 'b*' -print | sed 's/^\.\///')
do
 ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb565 -s 128x128 -i $FILE -vcodec bmp B$FILE.bmp
done
mv *.bmp data2/
rm a* b* F*

次回は画像を差し換えて本体でカスタムアニメーション(寿司ビームとも言う)を試します



コメント ( 0 ) | Trackback ( )


« 2021年元旦 マジョカアイ... »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。