Files
2023-04-16 12:18:33 +04:00

85 lines
3.0 KiB
C

#ifndef INC_OLED_H_
#define INC_OLED_H_
#include "main.h"
#include "fonts.h"
#include "images.h"
#define OLED_I2C hi2c1
#define OLED_ADDRESS 0x3C
#define OLED_WIDTH 128
#define OLED_HEIGHT 32
#define OLED_PADDING_LEFT 0
#define OLED_TIMEOUT 100
typedef enum __attribute__ ((__packed__))
{
OLED_CONTROLLER_SSD1306 = 0,
OLED_CONTROLLER_SH1106
} OLED_CONTROLLER;
#define OLED_COMMAND_LAST 0x00
#define OLED_COMMAND_NOT_LAST 0x80
#define OLED_COMMAND_DATA 0x40
#define OLED_CMD_SET_COLUMN_LOW(column) ((column) & 0xF)
#define OLED_CMD_SET_COLUMN_HIGH(column) (0x10 | ((column) >> 8))
#define OLED_CMD_SET_PUMP_VOLTAGE_6_4 0x30
#define OLED_CMD_SET_PUMP_VOLTAGE_7_4 0x31
#define OLED_CMD_SET_PUMP_VOLTAGE_8_0 0x32
#define OLED_CMD_SET_PUMP_VOLTAGE_9_0 0x33
#define OLED_CMD_SET_START_LINE(line) (0x40 | ((line) & 0x3F))
#define OLED_CMD_SET_CONTRAST_MODE 0x81
#define OLED_CMD_SET_HORIZONTAL_FLIP_OFF 0xA0
#define OLED_CMD_SET_HORIZONTAL_FLIP_ON 0xA1
#define OLED_CMD_SET_ENTIRE_OFF 0xA4
#define OLED_CMD_SET_ENTIRE_ON 0xA5
#define OLED_CMD_SET_REVERSE_OFF 0xA6
#define OLED_CMD_SET_REVERSE_ON 0xA7
#define OLED_CMD_SET_MULTIPLEX_RATION_MODE 0xA8
#define OLED_CMD_SET_OFF 0xAE
#define OLED_CMD_SET_ON 0xAF
#define OLED_CMD_SET_PAGE(page) (0xB0 | ((page) & 7))
#define OLED_CMD_SET_VERTICAL_FLIP_OFF 0xC0
#define OLED_CMD_SET_VERTICAL_FLIP_ON 0xC8
#define OLED_CMD_SET_CLOCK_RATIO_MODE 0xD5
#define OLED_CMD_SET_PADS_MODE 0xDA
#define OLED_CMD_SET_PADS_MODE_SEQUENTIAL 0x02
#define OLED_CMD_SET_PADS_MODE_ALTERNATIVE 0x12
void oled_init(OLED_CONTROLLER oled_controller, uint8_t rotate_screen, uint8_t reverse, uint8_t contrast);
uint8_t* oled_pixel(int x, int y);
void oled_set_pixel(int x, int y, uint8_t value);
uint8_t oled_get_pixel(int x, int y);
HAL_StatusTypeDef oled_send_commands(int len, ...);
HAL_StatusTypeDef oled_send_command(uint8_t command);
HAL_StatusTypeDef oled_write_data(uint8_t *data, uint8_t len);
HAL_StatusTypeDef oled_update(uint8_t start_page, uint8_t end_page);
HAL_StatusTypeDef oled_update_full();
HAL_StatusTypeDef oled_update_invisible();
HAL_StatusTypeDef oled_set_line(int y);
uint8_t oled_get_line();
void oled_draw_rectangle(int x1, int y1, int x2, int y2, uint8_t fill, uint8_t value);
void oled_draw_line(int x1, int y1, int x2, int y2, uint8_t value);
void oled_copy_to_invisible();
void oled_switch_to_invisible();
void oled_draw_text(const DotMatrixFont *font, char* text, int x, int y, uint8_t replace, uint8_t invert);
void oled_draw_text_cropped(const DotMatrixFont *font, char* text, int x, int y,
uint8_t start_x, uint8_t max_width,
uint8_t start_y, uint8_t max_height,
uint8_t replace, uint8_t invert);
int oled_get_text_length(const DotMatrixFont *font, char *text);
void oled_draw_image(const DotMatrixImage *img, int x, int y, uint8_t replace, uint8_t invert);
void oled_draw_image_cropped(const DotMatrixImage *img, int x, int y,
uint8_t start_x, uint8_t max_width,
uint8_t start_y, uint8_t max_height,
uint8_t replace, uint8_t invert);
void oled_rotate(uint8_t rotate_screen);
extern I2C_HandleTypeDef OLED_I2C;
#endif /* INC_OLED_H_ */