diff --git a/src/lgfx/v1/panel/Panel_GC9A01.hpp b/src/lgfx/v1/panel/Panel_GC9A01.hpp index a2b44450..7b137ae7 100644 --- a/src/lgfx/v1/panel/Panel_GC9A01.hpp +++ b/src/lgfx/v1/panel/Panel_GC9A01.hpp @@ -83,28 +83,12 @@ namespace lgfx _cfg.panel_height = _cfg.memory_height = 240; _cfg.dummy_read_pixel = 16; - } - public: - void endTransaction(void) - { - end_transaction(); + // GC9A01 malfunctions when sending NOP. + // Therefore, the function to send a NOP at the end of communication should be disabled. + _nop_closing = false; } - void end_transaction(void) - { - if (!_in_transaction) return; - _in_transaction = false; - if (_has_align_data) - { - _has_align_data = false; - _bus->writeData(0, 8); - } - - _bus->endTransaction(); - cs_control(true); - } - protected: const uint8_t* getInitCommands(uint8_t listno) const override diff --git a/src/lgfx/v1/panel/Panel_LCD.cpp b/src/lgfx/v1/panel/Panel_LCD.cpp index d5a4437e..2d9fe907 100644 --- a/src/lgfx/v1/panel/Panel_LCD.cpp +++ b/src/lgfx/v1/panel/Panel_LCD.cpp @@ -33,6 +33,14 @@ namespace lgfx return false; } + // pin_csが設定されておらずバスタイプがi2cでない場合は、 + // トランザクション終了時にnopを送信する。 + // これによってSPIバスをSDカード等と共有が可能となる。 + // ※ _nop_closingがtrueであることをチェックしている理由は、 + // 派生クラス側でこの機能を無効化できるようにするため。 + // 具体的には、GC9A01はNOPを受信すると誤動作を起こすため無効化する必要がある。 + _nop_closing = _nop_closing && (_cfg.pin_cs < 0) && (_bus->busType() != bus_type_t::bus_i2c); + startWrite(true); for (uint8_t i = 0; auto cmds = getInitCommands(i); i++) @@ -72,7 +80,7 @@ namespace lgfx _bus->writeData(0, 8); } - if (_cfg.pin_cs < 0 && _bus->busType() != bus_type_t::bus_i2c) + if (_nop_closing) { write_command(_cmd_nop); // NOP command } diff --git a/src/lgfx/v1/panel/Panel_LCD.hpp b/src/lgfx/v1/panel/Panel_LCD.hpp index cb3febca..1a6724c3 100644 --- a/src/lgfx/v1/panel/Panel_LCD.hpp +++ b/src/lgfx/v1/panel/Panel_LCD.hpp @@ -62,6 +62,7 @@ namespace lgfx bool _in_transaction = false; uint8_t _cmd_nop = CMD_NOP; uint8_t _cmd_ramrd = CMD_RAMRD; + bool _nop_closing = true; // トランザクション終了時にnopを送るか否か enum mad_t { MAD_MY = 0x80