Kick Out the World

技術的なメモとかポエムを書きます。

M5Stack×Moddable入門その2.5~ディスプレイが色反転していた件について [20200901追記]解決した

そろそろPiuでUIで書くかー、とdocumentを見ながら動かしていたら、指定した色通りに表示されていないことがわかった。

今までLabelに1行の文字列だけ表示させていたので、白黒が判定したことさえ気づいていなかった。 意味分かんないな、とググっていたところ、M5StackのディスプレイはILI9341 から ILI9342Cに変わっていた。

www.mgo-tec.com

と ILI9342C のデータシートを見てみると、色反転に関するレジスタコマンドは、 Display Inversion OFF ( 0x20 ) Display Inversion ON ( 0x21 ) です。

とあり、どうも0x21に対してコマンドを送ってやる必要がありそう。 また、新旧のディスプレイに対してうまくやっているというコードもM5stack本家のドライバに見つかり、初期化処理でコマンドを叩くという解決策で合っていそう。

https://github.com/m5stack/M5Stack/blob/master/src/utility/In_eSPI.cpp

#ifdef M5STACK
  if (lcd_version) writecommand(TFT_INVON); // TFT_INVONが0x21
#endif

肝心のModdable対応については、$(MODULES)/drivers/ili9341/modIli9341.c のドライバにて初期化処理っぽいところに色反転のコマンドを追加した。

void ili9341Init(spiDisplay sd)
{
        // (省略...)

        ili9341Command(sd, 0x21, NULL, 0); // この行を追加
        sd->firstFrame = true;
}

解決策合ってるか分からんが解決はした。

manifest.jsonに書くii9341のdefines当たりで切り替えるか、本家みたいに動的に切り替えれるとよさそうが、現状の力では及ばずhot-fixです。

Moddalbe始めてからC言語ばっかり読んでるな。。。

(2020/07/09 追記) PiuでUIを書き始めて気づいたのだが、どうもシミュレータで表示される色と実機ディスプレイで見える色がだいぶ違う。 下記はorange(#ffa500)で塗りつぶした結果。

全般的に明るく表示されている気がする。

Mobbableのディスプレイドライバの問題が切り分けるためにArudionoIDEでM5stack公式のライブラリを使ってみたが結果は同じだった。

[20200901追記] ModdableのGithubでissuesを挙げたところ、m5stack用のディスプレイクラスのラッパーとディスプレイクラスにコマンドを送れるように拡張してもらったので、修正なしにうまく表示されるようになりました。

github.com