diff --git a/st7567/st7567-common.h b/st7567/st7567-common.h index c6afca5..e9d3af5 100644 --- a/st7567/st7567-common.h +++ b/st7567/st7567-common.h @@ -27,6 +27,18 @@ #define ST7567_CMD_STATIC_INDICATOR_OFF 0xAC #define ST7567_CMD_NOP 0xE3 +// Display dimensions +#define ST7567_WIDTH 128 +#define ST7567_HEIGHT 64 +#define ST7567_PAGES (ST7567_HEIGHT / 8) + + +typedef struct { + void* bus; + gpio_num_t dc_gpio; + uint8_t framebuffer[ST7567_WIDTH * ST7567_PAGES]; +} st7567_device_t; + /** * @brief Send a single command byte to the ST7567 * diff --git a/st7567/st7567-i2c.h b/st7567/st7567-i2c.h index 85e95ea..5989dfe 100644 --- a/st7567/st7567-i2c.h +++ b/st7567/st7567-i2c.h @@ -17,12 +17,6 @@ typedef struct { uint8_t contrast; // 0-63, 0 = use a sane default (0x20) } st7567_i2c_config_t; -// Handle for ST7567 device -typedef struct { - i2c_master_dev_handle_t i2c_dev; - uint8_t framebuffer[ST7567_WIDTH * ST7567_PAGES]; -} st7567_device_t; - /** * @brief Initialize ST7567 display * diff --git a/st7567/st7567-spi.h b/st7567/st7567-spi.h index 6a3c8a0..1952e44 100644 --- a/st7567/st7567-spi.h +++ b/st7567/st7567-spi.h @@ -5,11 +5,6 @@ #include "driver/spi_master.h" #include "driver/gpio.h" -// Display dimensions -#define ST7567_WIDTH 128 -#define ST7567_HEIGHT 64 -#define ST7567_PAGES (ST7567_HEIGHT / 8) - // Configuration structure typedef struct { spi_host_device_t spi_host; // already-initialized SPI bus (spi_bus_initialize called by caller) @@ -20,12 +15,6 @@ typedef struct { uint8_t contrast; // 0-63, 0 = use a sane default (0x20) } st7567_spi_config_t; -// Handle for ST7567 device -typedef struct { - spi_device_handle_t spi_dev; - gpio_num_t dc_gpio; - uint8_t framebuffer[ST7567_WIDTH * ST7567_PAGES]; -} st7567_device_t; /** * @brief Initialize ST7567 display diff --git a/st7567/st7567.c b/st7567/st7567.c index 4dc6984..48ea96f 100644 --- a/st7567/st7567.c +++ b/st7567/st7567.c @@ -22,15 +22,15 @@ static esp_err_t st7567_write(const st7567_device_t *dev, uint8_t ctrl, const ui buf[0] = ctrl; memcpy(&buf[1], data, len); - return i2c_master_transmit(dev->i2c_dev, buf, len + 1, ST7567_I2C_TIMEOUT_MS); + return i2c_master_transmit(dev->bus, buf, len + 1, ST7567_I2C_TIMEOUT_MS); } esp_err_t st7567_send_cmd(const st7567_device_t *dev, const uint8_t cmd) { - return st7567_i2c_write(dev, ST7567_I2C_CTRL_CMD, &cmd, 1); + return st7567_write(dev, ST7567_I2C_CTRL_CMD, &cmd, 1); } esp_err_t st7567_send_data(const st7567_device_t *dev, const uint8_t *data, size_t len) { - return st7567_i2c_write(dev, ST7567_I2C_CTRL_DATA, data, len); + return st7567_write(dev, ST7567_I2C_CTRL_DATA, data, len); } @@ -95,16 +95,16 @@ static esp_err_t st7567_write(const st7567_device_t *dev, int dc_level, const ui // blocking polling transmit: this driver is only ever called from one task // (ui_task), so there's no need for the queued/async SPI API here - return spi_device_polling_transmit(dev->spi_dev, &t); + return spi_device_polling_transmit(dev->bus, &t); } esp_err_t st7567_send_cmd(const st7567_device_t *dev, const uint8_t cmd) { - return st7567_spi_write(dev, ST7567_DC_CMD, &cmd, 1); + return st7567_write(dev, ST7567_DC_CMD, &cmd, 1); } esp_err_t st7567_send_data(const st7567_device_t *dev, const uint8_t *data, size_t len) { - return st7567_spi_write(dev, ST7567_DC_DATA, data, len); + return st7567_write(dev, ST7567_DC_DATA, data, len); }