#ifndef __SSD1306_H__ #define __SSD1306_H__ #include #include "fonts.h" #define READ_BIT I2C_MASTER_READ /*!< I2C master read */ #define ACK_CHECK_DIS 0x0 /*!< I2C master will not check ack from slave */ #define ACK_VAL 0x0 /*!< I2C ack value */ #define NACK_VAL 0x1 /*!< I2C nack value */ // Fundamental Command (page 28) #define DISPLAY_LINE_START 0x40 #define CONTRAST_CONTROL 0x81 #define DISABLE_ENTIRE_DISPLAY 0xA4 #define DISPLAY_ON_REG02 0xA5 #define NORMAL_DISPLAY 0xA6 #define DISPLAY_INVERSE 0xA7 #define DISPLAY_RESET 0xAE #define DISPLAY_ON 0xAF // Addressing Setting (page 30) #define MEM_ADDR_MODE 0x20 #define LOWER_COL_START_ADDR 0x00 #define HIGHER_COL_START_ADDR 0x10 #define PAGE_START_ADDR 0xB0 // Hardware Config (page 31) #define DISPLAY_START_LINE 0x40 #define SEGMENT_REMAP 0xA0 #define SEGMENT_REMAP_FLIP 0xA1 #define MULTIPLEX_RATIO 0xA8 #define COM_OUTPUT_SCAN_DIR 0xC0 #define DISPLAY_OFFSET 0xD3 #define COM_PINS_HARDWARE_CONFIG 0xDA // Timing & Driving Scheme (page 32) #define DISPLAY_CLK_RATIO 0xD5 #define PRE_CHARGE_PER 0xD9 #define VCOMH_DESELECT_LEVEL 0xDB #define NOOPERATION 0xE3 // Charge Pump (page 60) #define CHARGE_PUMP_SET 0x8D // Scrolling #define DEACTIVATE_SCROLL 0x2E #define ACTIVATE_SCROLL 0x2F #define VERTICAL_AND_RIGHT_HOR_SCROLL 0x29 #define DUMMY_BYTE 0x00 #define SIX_FRAMES_PER_SEC 0x00 #define VERTICAL_OFFSET_ONE 0x01 typedef enum { SSD1306_COLOR_BLACK = 0x00, /*!< Black color, no pixel */ SSD1306_COLOR_WHITE = 0x01 /*!< Pixel is set. Color depends on LCD */ } SSD1306_COLOR_t; #define SSD1306_WIDTH 128 #define SSD1306_HEIGHT 64 esp_err_t oled_ssd1306_init(); void SSD1306_Clear(); void SSD1306_DrawVertLine(const uint8_t y, const uint8_t x1, const uint8_t x2); char SSD1306_Putc(char ch, const FontDef_t* Font, SSD1306_COLOR_t color); char SSD1306_Puts(char* str, FontDef_t* Font, SSD1306_COLOR_t color); void SSD1306_SetPosition(const int x, const int y); void SSD1306_UpdateScreen(void); /** * @brief Calculates string length and height in units of pixels depending on string and font used * @param *str: String to be checked for length and height * @param *SizeStruct: Pointer to empty @ref FONTS_SIZE_t structure where informations will be saved * @param *Font: Pointer to @ref FontDef_t font used for calculations * @retval Pointer to string used for length and height */ char* FONTS_GetStringSize(char* str, FONTS_SIZE_t* SizeStruct, FontDef_t* Font); #endif