Skip to content

Commit

Permalink
#45
Browse files Browse the repository at this point in the history
  • Loading branch information
moononournation committed Oct 5, 2022
1 parent cb8286e commit d505a2a
Show file tree
Hide file tree
Showing 42 changed files with 2,295 additions and 2,290 deletions.
18 changes: 9 additions & 9 deletions src/Arduino_DataBus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ void Arduino_DataBus::sendData16(uint16_t d)
endWrite();
}

void Arduino_DataBus::batchOperation(uint8_t batch[], size_t len)
void Arduino_DataBus::batchOperation(const uint8_t *operations, size_t len)
{
for (size_t i = 0; i < len; ++i)
{
uint8_t l = 0;
switch (batch[i])
switch (operations[i])
{
case BEGIN_WRITE:
beginWrite();
Expand All @@ -76,14 +76,14 @@ void Arduino_DataBus::batchOperation(uint8_t batch[], size_t len)
l++;
/* fall through */
case WRITE_COMMAND_8:
writeCommand(batch[++i]);
writeCommand(operations[++i]);
break;
case WRITE_C16_D16:
l = 2;
/* fall through */
case WRITE_COMMAND_16:
_data16.msb = batch[++i];
_data16.lsb = batch[++i];
_data16.msb = operations[++i];
_data16.lsb = operations[++i];
writeCommand16(_data16.value);
break;
case WRITE_DATA_8:
Expand All @@ -93,21 +93,21 @@ void Arduino_DataBus::batchOperation(uint8_t batch[], size_t len)
l = 2;
break;
case WRITE_BYTES:
l = batch[++i];
l = operations[++i];
break;
case END_WRITE:
endWrite();
break;
case DELAY:
delay(batch[++i]);
delay(operations[++i]);
break;
default:
printf("Unknown operation id at %d: %d", i, batch[i]);
printf("Unknown operation id at %d: %d", i, operations[i]);
break;
}
while (l--)
{
write(batch[++i]);
write(operations[++i]);
}
}
}
Expand Down
127 changes: 64 additions & 63 deletions src/Arduino_DataBus.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@ typedef uint32_t ARDUINOGFX_PORT_t;
#elif defined(__arm__)
#if defined(ARDUINO_ARCH_SAMD)
// Adafruit M0, M4
#define USE_FAST_PINIO ///< Use direct PORT register access
#define HAS_PORT_SET_CLR ///< PORTs have set & clear registers
#define USE_FAST_PINIO ///< Use direct PORT register access
#define HAS_PORT_SET_CLR ///< PORTs have set & clear registers
typedef uint32_t ARDUINOGFX_PORT_t;
#elif defined(CONFIG_ARCH_CHIP_CXD56XX) // Sony Spresense
#define USE_FAST_PINIO ///< Use direct PORT register access
#define USE_FAST_PINIO ///< Use direct PORT register access
typedef uint8_t ARDUINOGFX_PORT_t;
#elif defined(RTL8722DM)
#define USE_FAST_PINIO ///< Use direct PORT register access
Expand Down Expand Up @@ -100,24 +100,25 @@ typedef volatile ARDUINOGFX_PORT_t *PORTreg_t;
#endif

#define UNUSED(x) (void)(x)
#define ATTR_UNUSED __attribute__((unused))

#define MSB_16_SET(var, val) \
{ \
(var) = (((val)&0xFF00) >> 8) | (((val)&0xFF) << 8); \
}
#define MSB_32_SET(var, val) \
{ \
uint8_t *v = (uint8_t *)&(val); \
(var) = v[3] | (v[2] << 8) | (v[1] << 16) | (v[0] << 24); \
}
#define MSB_32_16_16_SET(var, v1, v2) \
{ \
(var) = (((uint32_t)v2 & 0xff00) << 8) | (((uint32_t)v2 & 0xff) << 24) | ((v1 & 0xff00) >> 8) | ((v1 & 0xff) << 8); \
}
#define MSB_32_8_ARRAY_SET(var, a) \
{ \
(var) = ((uint32_t)a[0] << 8 | a[1] | a[2] << 24 | a[3] << 16); \
}
#define MSB_16_SET(var, val) \
{ \
(var) = (((val)&0xFF00) >> 8) | (((val)&0xFF) << 8); \
}
#define MSB_32_SET(var, val) \
{ \
uint8_t *v = (uint8_t *)&(val); \
(var) = v[3] | (v[2] << 8) | (v[1] << 16) | (v[0] << 24); \
}
#define MSB_32_16_16_SET(var, v1, v2) \
{ \
(var) = (((uint32_t)v2 & 0xff00) << 8) | (((uint32_t)v2 & 0xff) << 24) | ((v1 & 0xff00) >> 8) | ((v1 & 0xff) << 8); \
}
#define MSB_32_8_ARRAY_SET(var, a) \
{ \
(var) = ((uint32_t)a[0] << 8 | a[1] | a[2] << 24 | a[3] << 16); \
}

#if defined(ESP32)
#define INLINE __attribute__((always_inline)) inline
Expand Down Expand Up @@ -215,67 +216,67 @@ struct lcd_panel_io_i80_t

typedef enum
{
BEGIN_WRITE,
WRITE_COMMAND_8,
WRITE_COMMAND_16,
WRITE_DATA_8,
WRITE_DATA_16,
WRITE_BYTES,
WRITE_C8_D8,
WRITE_C8_D16,
WRITE_C16_D16,
END_WRITE,
DELAY,
BEGIN_WRITE,
WRITE_COMMAND_8,
WRITE_COMMAND_16,
WRITE_DATA_8,
WRITE_DATA_16,
WRITE_BYTES,
WRITE_C8_D8,
WRITE_C8_D16,
WRITE_C16_D16,
END_WRITE,
DELAY,
} spi_operation_type_t;

union
{
uint16_t value;
struct
{
uint8_t lsb;
uint8_t msb;
};
uint16_t value;
struct
{
uint8_t lsb;
uint8_t msb;
};
} _data16;

class Arduino_DataBus
{
public:
Arduino_DataBus();
Arduino_DataBus();

void unused() { UNUSED(_data16); } // avoid compiler warning
void unused() { UNUSED(_data16); } // avoid compiler warning

virtual void begin(int32_t speed = SPI_DEFAULT_FREQ, int8_t dataMode = GFX_NOT_DEFINED) = 0;
virtual void beginWrite() = 0;
virtual void endWrite() = 0;
virtual void writeCommand(uint8_t c) = 0;
virtual void writeCommand16(uint16_t c) = 0;
virtual void write(uint8_t) = 0;
virtual void write16(uint16_t) = 0;
virtual void writeC8D8(uint8_t c, uint8_t d);
virtual void writeC16D16(uint16_t c, uint16_t d);
virtual void writeC8D16(uint8_t c, uint16_t d);
virtual void writeC8D16D16(uint8_t c, uint16_t d1, uint16_t d2);
virtual void writeRepeat(uint16_t p, uint32_t len) = 0;
virtual void writePixels(uint16_t *data, uint32_t len) = 0;
virtual void begin(int32_t speed = SPI_DEFAULT_FREQ, int8_t dataMode = GFX_NOT_DEFINED) = 0;
virtual void beginWrite() = 0;
virtual void endWrite() = 0;
virtual void writeCommand(uint8_t c) = 0;
virtual void writeCommand16(uint16_t c) = 0;
virtual void write(uint8_t) = 0;
virtual void write16(uint16_t) = 0;
virtual void writeC8D8(uint8_t c, uint8_t d);
virtual void writeC16D16(uint16_t c, uint16_t d);
virtual void writeC8D16(uint8_t c, uint16_t d);
virtual void writeC8D16D16(uint8_t c, uint16_t d1, uint16_t d2);
virtual void writeRepeat(uint16_t p, uint32_t len) = 0;
virtual void writePixels(uint16_t *data, uint32_t len) = 0;

void sendCommand(uint8_t c);
void sendCommand16(uint16_t c);
void sendData(uint8_t d);
void sendData16(uint16_t d);
void sendCommand(uint8_t c);
void sendCommand16(uint16_t c);
void sendData(uint8_t d);
void sendData16(uint16_t d);

void batchOperation(uint8_t batch[], size_t len);
void batchOperation(const uint8_t *operations, size_t len);

#if !defined(LITTLE_FOOT_PRINT)
virtual void writeBytes(uint8_t *data, uint32_t len) = 0;
virtual void writePattern(uint8_t *data, uint8_t len, uint32_t repeat) = 0;
virtual void writeIndexedPixels(uint8_t *data, uint16_t *idx, uint32_t len);
virtual void writeIndexedPixelsDouble(uint8_t *data, uint16_t *idx, uint32_t len);
virtual void writeBytes(uint8_t *data, uint32_t len) = 0;
virtual void writePattern(uint8_t *data, uint8_t len, uint32_t repeat) = 0;
virtual void writeIndexedPixels(uint8_t *data, uint16_t *idx, uint32_t len);
virtual void writeIndexedPixelsDouble(uint8_t *data, uint16_t *idx, uint32_t len);
#endif // !defined(LITTLE_FOOT_PRINT)

protected:
int32_t _speed;
int8_t _dataMode;
int32_t _speed;
int8_t _dataMode;
};

#endif // _ARDUINO_DATABUS_H_
50 changes: 0 additions & 50 deletions src/display/Arduino_GC9106.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,56 +95,6 @@ void Arduino_GC9106::tftInit()
// Software Rest
}

uint8_t GC9106_init_operations[] = {
BEGIN_WRITE,

WRITE_COMMAND_8, GC9106_INTERRE1,
WRITE_COMMAND_8, GC9106_INTERRE1,
WRITE_COMMAND_8, GC9106_INTERRE1,
WRITE_COMMAND_8, GC9106_INTERRE2,

WRITE_C8_D8, GC9106_FRMCTR3, 0x03,

WRITE_C8_D8, GC9106_MADCTL, 0xD8,

WRITE_C8_D8, GC9106_COLMOD, 0x05,

WRITE_C8_D8, 0xB6, 0x11,
WRITE_C8_D8, 0xAC, 0x0B,

WRITE_C8_D8, GC9106_INVCTR, 0x21,

WRITE_C8_D8, GC9106_FRMCTR1, 0xC0,

WRITE_C8_D16, GC9106_VREG1CTL, 0x50, 0x43,
WRITE_C8_D16, GC9106_VREG2CTL, 0x56, 0x43,

WRITE_COMMAND_8, GC9106_GAMMA1,
WRITE_BYTES, 14, 0x1F, 0x41, 0x1B, 0x55, 0x36, 0x3D, 0x3E,
0x00, 0x16, 0x08, 0x09, 0x15, 0x14, 0x0F,

WRITE_COMMAND_8, GC9106_GAMMA2,
WRITE_BYTES, 14, 0x1F, 0x41, 0x1B, 0x55, 0x36, 0x3D, 0x3E,
0x00, 0x16, 0x08, 0x09, 0x15, 0x14, 0x0F,

WRITE_COMMAND_8, GC9106_INTERRE1,
WRITE_COMMAND_8, 0xFF,

WRITE_C8_D8, GC9106_TELON, 0x00,
WRITE_C8_D8, GC9106_SCANLSET, 0x00,

WRITE_COMMAND_8, GC9106_SLPOUT,
END_WRITE,

DELAY, GC9106_SLPOUT_DELAY,

BEGIN_WRITE,
WRITE_COMMAND_8, GC9106_DISPON, // Display on
END_WRITE,

DELAY, 20
};

_bus->batchOperation(GC9106_init_operations, sizeof(GC9106_init_operations));

if (_ips)
Expand Down
48 changes: 48 additions & 0 deletions src/display/Arduino_GC9106.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,54 @@
#define GC9106_MADCTL_MH 0x04
#define GC9106_MADCTL_RGB 0x00

static const uint8_t GC9106_init_operations[] = {
BEGIN_WRITE,

WRITE_COMMAND_8, GC9106_INTERRE1,
WRITE_COMMAND_8, GC9106_INTERRE1,
WRITE_COMMAND_8, GC9106_INTERRE1,
WRITE_COMMAND_8, GC9106_INTERRE2,

WRITE_C8_D8, GC9106_FRMCTR3, 0x03,

WRITE_C8_D8, GC9106_MADCTL, 0xD8,

WRITE_C8_D8, GC9106_COLMOD, 0x05,

WRITE_C8_D8, 0xB6, 0x11,
WRITE_C8_D8, 0xAC, 0x0B,

WRITE_C8_D8, GC9106_INVCTR, 0x21,

WRITE_C8_D8, GC9106_FRMCTR1, 0xC0,

WRITE_C8_D16, GC9106_VREG1CTL, 0x50, 0x43,
WRITE_C8_D16, GC9106_VREG2CTL, 0x56, 0x43,

WRITE_COMMAND_8, GC9106_GAMMA1,
WRITE_BYTES, 14, 0x1F, 0x41, 0x1B, 0x55, 0x36, 0x3D, 0x3E,
0x00, 0x16, 0x08, 0x09, 0x15, 0x14, 0x0F,

WRITE_COMMAND_8, GC9106_GAMMA2,
WRITE_BYTES, 14, 0x1F, 0x41, 0x1B, 0x55, 0x36, 0x3D, 0x3E,
0x00, 0x16, 0x08, 0x09, 0x15, 0x14, 0x0F,

WRITE_COMMAND_8, GC9106_INTERRE1,
WRITE_COMMAND_8, 0xFF,

WRITE_C8_D8, GC9106_TELON, 0x00,
WRITE_C8_D8, GC9106_SCANLSET, 0x00,

WRITE_COMMAND_8, GC9106_SLPOUT,
END_WRITE,

DELAY, GC9106_SLPOUT_DELAY,

BEGIN_WRITE,
WRITE_COMMAND_8, GC9106_DISPON, // Display on
END_WRITE,

DELAY, 20};

class Arduino_GC9106 : public Arduino_TFT
{
Expand Down
Loading

0 comments on commit d505a2a

Please sign in to comment.