Initial Demo OS
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
#ifndef OS_FONT_3X5_H
|
||||
#define OS_FONT_3X5_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
static const uint8_t font_3x5[][3] = {
|
||||
{0x00, 0x00, 0x00}, // ' ' (32)
|
||||
{0x00, 0x17, 0x00}, // '!'
|
||||
{0x03, 0x00, 0x03}, // '"'
|
||||
{0x1F, 0x0A, 0x1F}, // '#'
|
||||
{0x12, 0x1F, 0x09}, // '$'
|
||||
{0x19, 0x04, 0x13}, // '%'
|
||||
{0x1A, 0x15, 0x0A}, // '&'
|
||||
{0x00, 0x03, 0x00}, // '''
|
||||
{0x00, 0x0E, 0x11}, // '('
|
||||
{0x11, 0x0E, 0x00}, // ')'
|
||||
{0x0A, 0x04, 0x0A}, // '*'
|
||||
{0x04, 0x0E, 0x04}, // '+'
|
||||
{0x10, 0x08, 0x00}, // ','
|
||||
{0x04, 0x04, 0x04}, // '-'
|
||||
{0x10, 0x00, 0x00}, // '.'
|
||||
{0x10, 0x08, 0x06}, // '/'
|
||||
{0x1F, 0x11, 0x1F}, // '0'
|
||||
{0x12, 0x1F, 0x10}, // '1'
|
||||
{0x1D, 0x15, 0x17}, // '2'
|
||||
{0x15, 0x15, 0x1F}, // '3'
|
||||
{0x07, 0x04, 0x1F}, // '4'
|
||||
{0x17, 0x15, 0x1D}, // '5'
|
||||
{0x1F, 0x15, 0x1D}, // '6'
|
||||
{0x01, 0x01, 0x1F}, // '7'
|
||||
{0x1F, 0x15, 0x1F}, // '8'
|
||||
{0x17, 0x15, 0x1F}, // '9'
|
||||
{0x00, 0x0A, 0x00}, // ':'
|
||||
{0x10, 0x0A, 0x00}, // ';'
|
||||
{0x04, 0x0A, 0x11}, // '<'
|
||||
{0x0A, 0x0A, 0x0A}, // '='
|
||||
{0x11, 0x0A, 0x04}, // '>'
|
||||
{0x01, 0x15, 0x02}, // '?'
|
||||
{0x0E, 0x15, 0x16}, // '@'
|
||||
{0x1E, 0x05, 0x1E}, // 'A'
|
||||
{0x1F, 0x15, 0x0A}, // 'B'
|
||||
{0x0E, 0x11, 0x11}, // 'C'
|
||||
{0x1F, 0x11, 0x0E}, // 'D'
|
||||
{0x1F, 0x15, 0x11}, // 'E'
|
||||
{0x1F, 0x05, 0x01}, // 'F'
|
||||
{0x0E, 0x11, 0x1D}, // 'G'
|
||||
{0x1F, 0x04, 0x1F}, // 'H'
|
||||
{0x11, 0x1F, 0x11}, // 'I'
|
||||
{0x08, 0x10, 0x0F}, // 'J'
|
||||
{0x1F, 0x04, 0x1B}, // 'K'
|
||||
{0x1F, 0x10, 0x10}, // 'L'
|
||||
{0x1F, 0x02, 0x1F}, // 'M'
|
||||
{0x1F, 0x02, 0x1F}, // 'N'
|
||||
{0x0E, 0x11, 0x0E}, // 'O'
|
||||
{0x1F, 0x05, 0x02}, // 'P'
|
||||
{0x0E, 0x11, 0x1E}, // 'Q'
|
||||
{0x1F, 0x05, 0x1A}, // 'R'
|
||||
{0x12, 0x15, 0x09}, // 'S'
|
||||
{0x01, 0x1F, 0x01}, // 'T'
|
||||
{0x0F, 0x10, 0x0F}, // 'U'
|
||||
{0x07, 0x18, 0x07}, // 'V'
|
||||
{0x1F, 0x08, 0x1F}, // 'W'
|
||||
{0x1B, 0x04, 0x1B}, // 'X'
|
||||
{0x03, 0x1C, 0x03}, // 'Y'
|
||||
{0x19, 0x15, 0x13}, // 'Z'
|
||||
{0x00, 0x1F, 0x11}, // '['
|
||||
{0x03, 0x04, 0x18}, // '\'
|
||||
{0x11, 0x1F, 0x00}, // ']'
|
||||
{0x02, 0x01, 0x02}, // '^'
|
||||
{0x10, 0x10, 0x10}, // '_'
|
||||
{0x00, 0x01, 0x02}, // '`'
|
||||
{0x0C, 0x14, 0x1C}, // 'a'
|
||||
{0x1F, 0x14, 0x08}, // 'b'
|
||||
{0x0C, 0x14, 0x14}, // 'c'
|
||||
{0x08, 0x14, 0x1F}, // 'd'
|
||||
{0x0C, 0x16, 0x14}, // 'e'
|
||||
{0x04, 0x1F, 0x05}, // 'f'
|
||||
{0x18, 0x14, 0x1E}, // 'g'
|
||||
{0x1F, 0x04, 0x18}, // 'h'
|
||||
{0x00, 0x17, 0x00}, // 'i'
|
||||
{0x10, 0x17, 0x00}, // 'j'
|
||||
{0x1F, 0x08, 0x14}, // 'k'
|
||||
{0x00, 0x1F, 0x00}, // 'l'
|
||||
{0x1C, 0x08, 0x1C}, // 'm'
|
||||
{0x1C, 0x04, 0x18}, // 'n'
|
||||
{0x0C, 0x12, 0x0C}, // 'o'
|
||||
{0x1C, 0x0A, 0x04}, // 'p'
|
||||
{0x04, 0x0A, 0x1C}, // 'q'
|
||||
{0x1C, 0x04, 0x08}, // 'r'
|
||||
{0x12, 0x16, 0x0C}, // 's'
|
||||
{0x04, 0x1E, 0x04}, // 't'
|
||||
{0x0E, 0x10, 0x0E}, // 'u'
|
||||
{0x06, 0x18, 0x06}, // 'v'
|
||||
{0x1E, 0x08, 0x1E}, // 'w'
|
||||
{0x12, 0x0C, 0x12}, // 'x'
|
||||
{0x16, 0x10, 0x0E}, // 'y'
|
||||
{0x12, 0x16, 0x1A}, // 'z'
|
||||
{0x04, 0x1B, 0x11}, // '{'
|
||||
{0x00, 0x1F, 0x00}, // '|'
|
||||
{0x11, 0x1B, 0x04}, // '}'
|
||||
{0x08, 0x04, 0x08} // '~'
|
||||
};
|
||||
|
||||
#endif // OS_FONT_3X5_H
|
||||
@@ -0,0 +1,104 @@
|
||||
#ifndef OS_FONT_5X7_H
|
||||
#define OS_FONT_5X7_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
static const uint8_t font_5x7[][5] = {
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00}, // ' ' (32)
|
||||
{0x00, 0x00, 0x5F, 0x00, 0x00}, // '!'
|
||||
{0x00, 0x07, 0x00, 0x07, 0x00}, // '"'
|
||||
{0x14, 0x7F, 0x14, 0x7F, 0x14}, // '#'
|
||||
{0x24, 0x2A, 0x7F, 0x2A, 0x12}, // '$'
|
||||
{0x23, 0x13, 0x08, 0x64, 0x62}, // '%'
|
||||
{0x36, 0x49, 0x55, 0x22, 0x50}, // '&'
|
||||
{0x00, 0x05, 0x03, 0x00, 0x00}, // '''
|
||||
{0x00, 0x1C, 0x22, 0x41, 0x00}, // '('
|
||||
{0x00, 0x41, 0x22, 0x1C, 0x00}, // ')'
|
||||
{0x14, 0x08, 0x3E, 0x08, 0x14}, // '*'
|
||||
{0x08, 0x08, 0x3E, 0x08, 0x08}, // '+'
|
||||
{0x00, 0x50, 0x30, 0x00, 0x00}, // ','
|
||||
{0x08, 0x08, 0x08, 0x08, 0x08}, // '-'
|
||||
{0x00, 0x60, 0x60, 0x00, 0x00}, // '.'
|
||||
{0x20, 0x10, 0x08, 0x04, 0x02}, // '/'
|
||||
{0x3E, 0x51, 0x49, 0x45, 0x3E}, // '0'
|
||||
{0x00, 0x42, 0x7F, 0x40, 0x00}, // '1'
|
||||
{0x42, 0x61, 0x51, 0x49, 0x46}, // '2'
|
||||
{0x21, 0x41, 0x45, 0x4B, 0x31}, // '3'
|
||||
{0x18, 0x14, 0x12, 0x7F, 0x10}, // '4'
|
||||
{0x27, 0x45, 0x45, 0x45, 0x39}, // '5'
|
||||
{0x3C, 0x4A, 0x49, 0x49, 0x30}, // '6'
|
||||
{0x01, 0x71, 0x09, 0x05, 0x03}, // '7'
|
||||
{0x36, 0x49, 0x49, 0x49, 0x36}, // '8'
|
||||
{0x06, 0x49, 0x49, 0x29, 0x1E}, // '9'
|
||||
{0x00, 0x36, 0x36, 0x00, 0x00}, // ':'
|
||||
{0x00, 0x56, 0x36, 0x00, 0x00}, // ';'
|
||||
{0x08, 0x14, 0x22, 0x41, 0x00}, // '<'
|
||||
{0x14, 0x14, 0x14, 0x14, 0x14}, // '='
|
||||
{0x00, 0x41, 0x22, 0x14, 0x08}, // '>'
|
||||
{0x02, 0x01, 0x51, 0x09, 0x06}, // '?'
|
||||
{0x32, 0x49, 0x79, 0x41, 0x3E}, // '@'
|
||||
{0x7E, 0x11, 0x11, 0x11, 0x7E}, // 'A'
|
||||
{0x7F, 0x49, 0x49, 0x49, 0x36}, // 'B'
|
||||
{0x3E, 0x41, 0x41, 0x41, 0x22}, // 'C'
|
||||
{0x7F, 0x41, 0x41, 0x22, 0x1C}, // 'D'
|
||||
{0x7F, 0x49, 0x49, 0x49, 0x41}, // 'E'
|
||||
{0x7F, 0x09, 0x09, 0x09, 0x01}, // 'F'
|
||||
{0x3E, 0x41, 0x49, 0x49, 0x7A}, // 'G'
|
||||
{0x7F, 0x08, 0x08, 0x08, 0x7F}, // 'H'
|
||||
{0x00, 0x41, 0x7F, 0x41, 0x00}, // 'I'
|
||||
{0x20, 0x40, 0x41, 0x3F, 0x01}, // 'J'
|
||||
{0x7F, 0x08, 0x14, 0x22, 0x41}, // 'K'
|
||||
{0x7F, 0x40, 0x40, 0x40, 0x40}, // 'L'
|
||||
{0x7F, 0x02, 0x0C, 0x02, 0x7F}, // 'M'
|
||||
{0x7F, 0x04, 0x08, 0x10, 0x7F}, // 'N'
|
||||
{0x3E, 0x41, 0x41, 0x41, 0x3E}, // 'O'
|
||||
{0x7F, 0x09, 0x09, 0x09, 0x06}, // 'P'
|
||||
{0x3E, 0x41, 0x51, 0x21, 0x5E}, // 'Q'
|
||||
{0x7F, 0x09, 0x19, 0x29, 0x46}, // 'R'
|
||||
{0x46, 0x49, 0x49, 0x49, 0x31}, // 'S'
|
||||
{0x01, 0x01, 0x7F, 0x01, 0x01}, // 'T'
|
||||
{0x3F, 0x40, 0x40, 0x40, 0x3F}, // 'U'
|
||||
{0x1F, 0x20, 0x40, 0x20, 0x1F}, // 'V'
|
||||
{0x3F, 0x40, 0x38, 0x40, 0x3F}, // 'W'
|
||||
{0x63, 0x14, 0x08, 0x14, 0x63}, // 'X'
|
||||
{0x07, 0x08, 0x70, 0x08, 0x07}, // 'Y'
|
||||
{0x61, 0x51, 0x49, 0x45, 0x43}, // 'Z'
|
||||
{0x00, 0x7F, 0x41, 0x41, 0x00}, // '['
|
||||
{0x02, 0x04, 0x08, 0x10, 0x20}, // '\'
|
||||
{0x00, 0x41, 0x41, 0x7F, 0x00}, // ']'
|
||||
{0x04, 0x02, 0x01, 0x02, 0x04}, // '^'
|
||||
{0x40, 0x40, 0x40, 0x40, 0x40}, // '_'
|
||||
{0x00, 0x01, 0x02, 0x04, 0x00}, // '`'
|
||||
{0x20, 0x54, 0x54, 0x54, 0x78}, // 'a'
|
||||
{0x7F, 0x48, 0x44, 0x44, 0x38}, // 'b'
|
||||
{0x38, 0x44, 0x44, 0x44, 0x20}, // 'c'
|
||||
{0x38, 0x44, 0x44, 0x48, 0x7F}, // 'd'
|
||||
{0x38, 0x54, 0x54, 0x54, 0x18}, // 'e'
|
||||
{0x08, 0x7E, 0x09, 0x01, 0x02}, // 'f'
|
||||
{0x0C, 0x52, 0x52, 0x52, 0x3E}, // 'g'
|
||||
{0x7F, 0x08, 0x04, 0x04, 0x78}, // 'h'
|
||||
{0x00, 0x44, 0x7D, 0x40, 0x00}, // 'i'
|
||||
{0x20, 0x40, 0x44, 0x3D, 0x00}, // 'j'
|
||||
{0x7F, 0x10, 0x28, 0x44, 0x00}, // 'k'
|
||||
{0x00, 0x41, 0x7F, 0x40, 0x00}, // 'l'
|
||||
{0x7C, 0x04, 0x18, 0x04, 0x78}, // 'm'
|
||||
{0x7C, 0x08, 0x04, 0x04, 0x78}, // 'n'
|
||||
{0x38, 0x44, 0x44, 0x44, 0x38}, // 'o'
|
||||
{0x7C, 0x14, 0x14, 0x14, 0x08}, // 'p'
|
||||
{0x08, 0x14, 0x14, 0x18, 0x7C}, // 'q'
|
||||
{0x7C, 0x08, 0x04, 0x04, 0x08}, // 'r'
|
||||
{0x48, 0x54, 0x54, 0x54, 0x20}, // 's'
|
||||
{0x04, 0x3F, 0x44, 0x40, 0x20}, // 't'
|
||||
{0x3C, 0x40, 0x40, 0x20, 0x7C}, // 'u'
|
||||
{0x1C, 0x20, 0x40, 0x20, 0x1C}, // 'v'
|
||||
{0x3C, 0x40, 0x30, 0x40, 0x3C}, // 'w'
|
||||
{0x44, 0x28, 0x10, 0x28, 0x44}, // 'x'
|
||||
{0x0C, 0x50, 0x50, 0x50, 0x3C}, // 'y'
|
||||
{0x44, 0x64, 0x54, 0x4C, 0x44}, // 'z'
|
||||
{0x00, 0x08, 0x36, 0x41, 0x00}, // '{'
|
||||
{0x00, 0x00, 0x7F, 0x00, 0x00}, // '|'
|
||||
{0x00, 0x41, 0x36, 0x08, 0x00}, // '}'
|
||||
{0x08, 0x08, 0x2A, 0x1C, 0x08} // '~'
|
||||
};
|
||||
|
||||
#endif // OS_FONT_5X7_H
|
||||
@@ -0,0 +1,48 @@
|
||||
#ifndef OS_GFX_H
|
||||
#define OS_GFX_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "os_oled.h"
|
||||
#include "os_status.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define STATUS_BAR_HEIGHT 8
|
||||
#define ACTION_BAR_HEIGHT 7
|
||||
#define VIEWPORT_Y_TOP 8
|
||||
#define VIEWPORT_HEIGHT 32
|
||||
#define VIEWPORT_FULL_HEIGHT 40
|
||||
|
||||
esp_err_t sys_gfx_init(void);
|
||||
void sys_gfx_clear(void);
|
||||
void sys_gfx_clear_viewport(void);
|
||||
esp_err_t sys_gfx_flush(void);
|
||||
|
||||
void sys_gfx_draw_pixel(int16_t x, int16_t y, uint8_t color);
|
||||
void sys_gfx_draw_line(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint8_t color);
|
||||
void sys_gfx_draw_rect(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color);
|
||||
void sys_gfx_fill_rect(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color);
|
||||
void sys_gfx_draw_bitmap(int16_t x, int16_t y, int16_t w, int16_t h, const uint8_t *bitmap, uint8_t color);
|
||||
|
||||
void sys_gfx_draw_char_5x7(int16_t x, int16_t y, char c, uint8_t color);
|
||||
void sys_gfx_draw_str_5x7(int16_t x, int16_t y, const char *str, uint8_t color);
|
||||
void sys_gfx_draw_char_3x5(int16_t x, int16_t y, char c, uint8_t color);
|
||||
void sys_gfx_draw_str_3x5(int16_t x, int16_t y, const char *str, uint8_t color);
|
||||
|
||||
void sys_gfx_draw_status_bar(const sys_status_t *status);
|
||||
void sys_gfx_draw_action_bar(const char *left_hint, const char *right_hint);
|
||||
void sys_gfx_draw_menu(int16_t y_start, const char *items[], size_t count, size_t selected_idx);
|
||||
void sys_gfx_draw_progress_bar(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t pct);
|
||||
void sys_gfx_draw_sparkline(int16_t x, int16_t y, int16_t w, int16_t h, const uint8_t *data, size_t count, uint8_t max_val);
|
||||
|
||||
void sys_gfx_show_toast(const char *msg, uint32_t duration_ms);
|
||||
void sys_gfx_render_toast_if_active(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // OS_GFX_H
|
||||
@@ -0,0 +1,46 @@
|
||||
#ifndef OS_OLED_H
|
||||
#define OS_OLED_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "driver/gpio.h"
|
||||
#include "driver/i2c_master.h"
|
||||
#include "esp_err.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define OLED_I2C_PORT 0 /* i2c_port_num_t */
|
||||
#define OLED_I2C_ADDR 0x3C
|
||||
#define OLED_PIN_SDA GPIO_NUM_5
|
||||
#define OLED_PIN_SCL GPIO_NUM_6
|
||||
#define OLED_I2C_FREQ_HZ 400000
|
||||
|
||||
#define OLED_WIDTH 72
|
||||
#define OLED_HEIGHT 40
|
||||
#define OLED_PAGES 5
|
||||
#define OLED_BUFFER_SIZE (OLED_WIDTH * OLED_PAGES)
|
||||
|
||||
#ifndef OLED_COLUMN_OFFSET
|
||||
#define OLED_COLUMN_OFFSET 28
|
||||
#endif
|
||||
|
||||
#define COLOR_BLACK 0
|
||||
#define COLOR_WHITE 1
|
||||
#define COLOR_INVERT 2
|
||||
|
||||
esp_err_t oled_driver_init(gpio_num_t sda, gpio_num_t scl, uint8_t col_offset);
|
||||
uint8_t *oled_driver_get_buffer(void);
|
||||
void oled_driver_clear(void);
|
||||
void oled_driver_fill(void);
|
||||
esp_err_t oled_driver_flush(void);
|
||||
esp_err_t oled_driver_set_contrast(uint8_t contrast);
|
||||
esp_err_t oled_driver_set_invert(bool invert);
|
||||
void oled_driver_draw_pixel(int16_t x, int16_t y, uint8_t color);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // OS_OLED_H
|
||||
Reference in New Issue
Block a user