Update with epdiy last version support

This commit is contained in:
martinberlin 2023-08-24 12:45:30 +02:00
parent d738aaa84f
commit 87bf29d676
56 changed files with 1844 additions and 859 deletions

View file

@ -13,9 +13,10 @@
/*********************
* INCLUDES
*********************/
#include "driver/i2c.h"
#include "assert.h"
#include "lvgl_i2c/i2c_manager.h"
#include "lvgl_i2c_conf.h"
#include "ssd1306.h"
@ -24,7 +25,6 @@
*********************/
#define TAG "SSD1306"
#define OLED_I2C_PORT (CONFIG_LV_I2C_DISPLAY_PORT)
// SLA (0x3C) + WRITE_MODE (0x00) = 0x78 (0b01111000)
#define OLED_I2C_ADDRESS 0x3C
#define OLED_WIDTH 128
@ -70,6 +70,8 @@
// Charge Pump (pg.62)
#define OLED_CMD_SET_CHARGE_PUMP 0x8D // follow with 0x14
#define OLED_IIC_FREQ_HZ 400000 // I2C colock frequency
/**********************
* TYPEDEFS
**********************/
@ -99,10 +101,10 @@ void ssd1306_init(void)
uint8_t orientation_1 = 0;
uint8_t orientation_2 = 0;
#if defined (CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE)
#if defined (CONFIG_DISPLAY_ORIENTATION_LANDSCAPE)
orientation_1 = OLED_CMD_SET_SEGMENT_REMAP;
orientation_2 = OLED_CMD_SET_COM_SCAN_MODE_REMAP;
#elif defined (CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED)
#elif defined (CONFIG_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED)
orientation_1 = 0xA0;
orientation_2 = OLED_CMD_SET_COM_SCAN_MODE_NORMAL;
#else
@ -211,15 +213,44 @@ void ssd1306_sleep_out(void)
static uint8_t send_data(lv_disp_drv_t *disp_drv, void *bytes, size_t bytes_len)
{
(void) disp_drv;
esp_err_t err;
uint8_t *data = (uint8_t *) bytes;
return lvgl_i2c_write(OLED_I2C_PORT, OLED_I2C_ADDRESS, data[0], data + 1, bytes_len - 1 );
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true);
for (size_t idx = 0; idx < bytes_len; idx++) {
i2c_master_write_byte(cmd, data[idx], true);
}
i2c_master_stop(cmd);
/* Send queued commands */
err = i2c_master_cmd_begin(DISP_I2C_PORT, cmd, 10 / portTICK_PERIOD_MS);
i2c_cmd_link_delete(cmd);
return ESP_OK == err ? 0 : 1;
}
static uint8_t send_pixels(lv_disp_drv_t *disp_drv, void *color_buffer, size_t buffer_len)
{
(void) disp_drv;
esp_err_t err;
return lvgl_i2c_write(OLED_I2C_PORT, OLED_I2C_ADDRESS, OLED_CONTROL_BYTE_DATA_STREAM, color_buffer, buffer_len);
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true);
i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_DATA_STREAM, true);
i2c_master_write(cmd, (uint8_t *) color_buffer, buffer_len, true);
i2c_master_stop(cmd);
/* Send queued commands */
err = i2c_master_cmd_begin(DISP_I2C_PORT, cmd, 10 / portTICK_PERIOD_MS);
i2c_cmd_link_delete(cmd);
return ESP_OK == err ? 0 : 1;
}