123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- /*
- * ssd1306.h
- *
- * Created on: Jan 12, 2021
- * Author: David Original work by Jose (PTDreamer), 2017
- */
- #ifndef GRAPHICS_SSD1306_H_
- #define GRAPHICS_SSD1306_H_
- #include "u8g2.h"
- #include "main.h"
- #include "widgets.h"
- //For checking if SPI DMA is active. Check before drawing the buffer.
- typedef enum {
- oled_idle=0,
- oled_busy=1,
- } oledStatus_t;
- typedef enum{
- error_NMI,
- error_HARDFAULT,
- error_MEMMANAGE,
- error_BUSFAULT,
- error_USAGEFAULT,
- error_RUNAWAY25,
- error_RUNAWAY50,
- error_RUNAWAY75,
- error_RUNAWAY100,
- error_RUNAWAY500,
- error_RUNAWAY_UNKNOWN,
- }FatalErrors;
- #define OledWidth 128
- #define OledHeight 64
- // buffer needs to be aligned to 32bit(4byte) boundary, as FillBuffer() uses 32bit transfer for increased speed
- typedef struct{
- __attribute__((aligned(4))) uint8_t buffer[128*8]; // 128x64 1BPP OLED
- uint8_t *ptr;
- volatile uint8_t status;
- volatile uint8_t row;
- volatile uint8_t use_sw;
- #if defined OLED_SPI && defined OLED_DEVICE
- SPI_HandleTypeDef *device;
- #elif defined OLED_I2C && defined OLED_DEVICE
- I2C_HandleTypeDef *device;
- #endif
- DMA_HandleTypeDef *fillDMA;
- }oled_t;
- extern oled_t oled;
- enum { fill_soft, fill_dma };
- #define Oled_Set_SCL() SW_SCL_GPIO_Port->BSRR = (uint32_t)SW_SCL_Pin
- #define Oled_Clear_SCL() SW_SCL_GPIO_Port->BRR = (uint32_t)SW_SCL_Pin
- #define Oled_Set_SDA() SW_SDA_GPIO_Port->BSRR = (uint32_t)SW_SDA_Pin
- #define Oled_Clear_SDA() SW_SDA_GPIO_Port->BRR = (uint32_t)SW_SDA_Pin
- #ifdef USE_CS
- #define Oled_Set_CS() OLED_CS_GPIO_Port->BSRR = (uint32_t)OLED_CS_Pin
- #define Oled_Clear_CS() OLED_CS_GPIO_Port->BRR = (uint32_t)OLED_CS_Pin
- #endif
- #ifdef USE_DC
- #define Oled_Set_DC() OLED_DC_GPIO_Port->BSRR = (uint32_t)OLED_DC_Pin
- #define Oled_Clear_DC() OLED_DC_GPIO_Port->BRR = (uint32_t)OLED_DC_Pin
- #endif
- #ifdef USE_RST
- #define Oled_Set_RES() OLED_RST_GPIO_Port->BSRR = (uint32_t)OLED_RST_Pin
- #define Oled_Clear_RES() OLED_RST_GPIO_Port->BRR = (uint32_t)OLED_RST_Pin
- #endif
- #define BLACK 0
- #define WHITE 1
- #define XOR 2
- #if !defined OLED_SPI && !defined OLED_I2C
- #error "No display configured in board.h!"
- #elif defined OLED_I2C && !defined OLED_ADDRESS
- #error "No display I2C address configured in board.h!"
- #endif
- #if defined OLED_SPI && defined OLED_DEVICE
- void ssd1306_init(SPI_HandleTypeDef *device,DMA_HandleTypeDef *dma);
- void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *device);
- #elif defined OLED_SPI
- void Enable_Soft_SPI(void);
- void ssd1306_init(DMA_HandleTypeDef *dma);
- void spi_send(uint8_t* bf, uint16_t count);
- #endif
- #if !defined OLED_DEVICE || (defined OLED_DEVICE && defined I2C_TRY_HW)
- void enable_soft_Oled(void);
- void disable_soft_Oled(void);
- #endif
- #if defined OLED_I2C
- #define i2cData 0x40
- #define i2cCmd 0x00
- #if !defined OLED_DEVICE || (defined OLED_DEVICE && defined I2C_TRY_HW)
- void i2cStart(void);
- void i2cStop(void);
- void i2cBegin(uint8_t mode);
- void i2cSend(uint8_t* bf, uint16_t count, uint8_t mode);
- void i2cDelay(void);
- #endif
- #if defined OLED_DEVICE
- void ssd1306_init(I2C_HandleTypeDef *device,DMA_HandleTypeDef *dma);
- void i2c_workaround(void);
- void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *device);
- #else
- void ssd1306_init(DMA_HandleTypeDef *dma);
- #endif
- #endif
- void FatalError(uint8_t type);
- void write_data(uint8_t* data, uint16_t count);
- void write_cmd(uint8_t cmd);
- void pset(uint8_t x, uint8_t y, bool c);
- void update_display(void);
- void display_abort(void);
- void update_display_ErrorHandler(void);
- void setContrast(uint8_t value);
- void setOledRow(uint8_t row);
- uint8_t getContrast();
- void FillBuffer(bool color, bool mode);
- void putStrAligned(char* str, uint8_t y, AlignType align);
- void Reset_onError(void);
- #endif /* GRAPHICS_SSD1306_H_ */
|