SRA Board Components
ESP-IDF component for SRA Board
lvgl_helpers.h
Go to the documentation of this file.
1
22#ifndef LVGL_HELPERS_H
23#define LVGL_HELPERS_H
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
29/*********************
30 * INCLUDES
31 *********************/
32#include <stdbool.h>
33#include "i2cdev.h"
34#include "driver/i2c.h"
35#include "assert.h"
36#include "lvgl.h"
37#include "pin_defs.h"
38
39/*********************
40 * DEFINES
41 *********************/
42
43#define OLED_I2C_ADDRESS 0x3C
44#define OLED_WIDTH 128
45#define OLED_HEIGHT 64
46#define OLED_COLUMNS 128
47#define OLED_PAGES 8
48#define OLED_PIXEL_PER_PAGE 8
49
50// Control byte
51#define OLED_CONTROL_BYTE_CMD_SINGLE 0x80
52#define OLED_CONTROL_BYTE_CMD_STREAM 0x00
53#define OLED_CONTROL_BYTE_DATA_STREAM 0x40
54
55// Fundamental commands (pg.28)
56#define OLED_CMD_SET_CONTRAST 0x81 // follow with 0x7F
57#define OLED_CMD_DISPLAY_RAM 0xA4
58#define OLED_CMD_DISPLAY_ALLON 0xA5
59#define OLED_CMD_DISPLAY_NORMAL 0xA6
60#define OLED_CMD_DISPLAY_INVERTED 0xA7
61#define OLED_CMD_DISPLAY_OFF 0xAE
62#define OLED_CMD_DISPLAY_ON 0xAF
63
64// Addressing Command Table (pg.30)
65#define OLED_CMD_SET_MEMORY_ADDR_MODE 0x20 // follow with 0x00 = HORZ mode
66#define OLED_CMD_SET_COLUMN_RANGE 0x21 // can be used only in HORZ/VERT mode - follow with 0x00 and 0x7F = COL127
67#define OLED_CMD_SET_PAGE_RANGE 0x22 // can be used only in HORZ/VERT mode - follow with 0x00 and 0x07 = PAGE7
68
69// Hardware Config (pg.31)
70#define OLED_CMD_SET_DISPLAY_START_LINE 0x40
71#define OLED_CMD_SET_SEGMENT_REMAP 0xA1
72#define OLED_CMD_SET_MUX_RATIO 0xA8 // follow with 0x3F = 64 MUX
73#define OLED_CMD_SET_COM_SCAN_MODE_NORMAL 0xC0
74#define OLED_CMD_SET_COM_SCAN_MODE_REMAP 0xC8
75#define OLED_CMD_SET_DISPLAY_OFFSET 0xD3 // follow with 0x00
76#define OLED_CMD_SET_COM_PIN_MAP 0xDA // follow with 0x12
77#define OLED_CMD_NOP 0xE3 // NOP
78
79// Timing and Driving Scheme (pg.32)
80#define OLED_CMD_SET_DISPLAY_CLK_DIV 0xD5 // follow with 0x80
81#define OLED_CMD_SET_PRECHARGE 0xD9 // follow with 0xF1
82#define OLED_CMD_SET_VCOMH_DESELCT 0xDB // follow with 0x30
83
84// Charge Pump (pg.62)
85#define OLED_CMD_SET_CHARGE_PUMP 0x8D // follow with 0x14
86
87#define OLED_IIC_FREQ_HZ 400000 // I2C clock frequency
88
89/* DISP_BUF_SIZE value doesn't have an special meaning, but it's the size
90 * of the buffer(s) passed to LVGL as display buffers. The default values used
91 * were the values working for the contributor of the display controller.
92 *
93 * As LVGL supports partial display updates the DISP_BUF_SIZE doesn't
94 * necessarily need to be equal to the display size.
95 *
96 * When using RGB displays the display buffer size will also depends on the
97 * color format being used, for RGB565 each pixel needs 2 bytes.
98 * When using the mono theme, the display pixels can be represented in one bit,
99 * so the buffer size can be divided by 8, e.g. see SSD1306 display size. */
100
101#define DISP_BUF_SIZE 1024
102
110bool lvgl_i2c_driver_init(int sda_pin, int scl_pin, int speed_hz);
111
117void ssd1306_init(void);
118
125void ssd1306_flush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map);
126
132void ssd1306_rounder(lv_disp_drv_t *disp_drv, lv_area_t *area);
133
144void ssd1306_set_px_cb(lv_disp_drv_t *disp_drv, uint8_t *buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y, lv_color_t color, lv_opa_t opa);
145
149void ssd1306_sleep_in(void);
150
154void ssd1306_sleep_out(void);
155
156/**********************
157 * MACROS
158 **********************/
159#ifdef __cplusplus
160} /* extern "C" */
161#endif
162
163#endif /* LVGL_HELPERS_H */
164
165
bool lvgl_i2c_driver_init(int sda_pin, int scl_pin, int speed_hz)
Initialize LVGL I2C Master.
Definition: lvgl_helpers.c:148
void ssd1306_sleep_in(void)
Turn off the display.
Definition: lvgl_helpers.c:127
void ssd1306_sleep_out(void)
Turn on the display.
Definition: lvgl_helpers.c:137
void ssd1306_flush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map)
Flush the buffer on the screen.
Definition: lvgl_helpers.c:90
void ssd1306_init(void)
Initialize ssd1306 device.
Definition: lvgl_helpers.c:47
void ssd1306_set_px_cb(lv_disp_drv_t *disp_drv, uint8_t *buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y, lv_color_t color, lv_opa_t opa)
Draw a pixel into the buffer.
Definition: lvgl_helpers.c:74
void ssd1306_rounder(lv_disp_drv_t *disp_drv, lv_area_t *area)
Round the area that needs to be updated.
Definition: lvgl_helpers.c:116
lv_disp_drv_t disp_drv
Definition: oled.c:245