diff options
Diffstat (limited to 'platforms/avr/drivers/ssd1306.h')
| -rw-r--r-- | platforms/avr/drivers/ssd1306.h | 87 | 
1 files changed, 87 insertions, 0 deletions
diff --git a/platforms/avr/drivers/ssd1306.h b/platforms/avr/drivers/ssd1306.h new file mode 100644 index 0000000000..6eecdcfaa4 --- /dev/null +++ b/platforms/avr/drivers/ssd1306.h @@ -0,0 +1,87 @@ +#pragma once + +#include <stdbool.h> +#include <stdio.h> +#include "config.h" + +enum ssd1306_cmds { +    DisplayOff = 0xAE, +    DisplayOn  = 0xAF, + +    SetContrast        = 0x81, +    DisplayAllOnResume = 0xA4, + +    DisplayAllOn       = 0xA5, +    NormalDisplay      = 0xA6, +    InvertDisplay      = 0xA7, +    SetDisplayOffset   = 0xD3, +    SetComPins         = 0xda, +    SetVComDetect      = 0xdb, +    SetDisplayClockDiv = 0xD5, +    SetPreCharge       = 0xd9, +    SetMultiPlex       = 0xa8, +    SetLowColumn       = 0x00, +    SetHighColumn      = 0x10, +    SetStartLine       = 0x40, + +    SetMemoryMode = 0x20, +    ColumnAddr    = 0x21, +    PageAddr      = 0x22, + +    ComScanInc    = 0xc0, +    ComScanDec    = 0xc8, +    SegRemap      = 0xa0, +    SetChargePump = 0x8d, +    ExternalVcc   = 0x01, +    SwitchCapVcc  = 0x02, + +    ActivateScroll                   = 0x2f, +    DeActivateScroll                 = 0x2e, +    SetVerticalScrollArea            = 0xa3, +    RightHorizontalScroll            = 0x26, +    LeftHorizontalScroll             = 0x27, +    VerticalAndRightHorizontalScroll = 0x29, +    VerticalAndLeftHorizontalScroll  = 0x2a, +}; + +// Controls the SSD1306 128x32 OLED display via i2c + +#ifndef SSD1306_ADDRESS +#    define SSD1306_ADDRESS 0x3C +#endif + +#define DisplayHeight 32 +#define DisplayWidth 128 + +#define FontHeight 8 +#define FontWidth 6 + +#define MatrixRows (DisplayHeight / FontHeight) +#define MatrixCols (DisplayWidth / FontWidth) + +struct CharacterMatrix { +    uint8_t  display[MatrixRows][MatrixCols]; +    uint8_t *cursor; +    bool     dirty; +}; + +extern struct CharacterMatrix display; + +bool iota_gfx_init(void); +void iota_gfx_task(void); +bool iota_gfx_off(void); +bool iota_gfx_on(void); +void iota_gfx_flush(void); +void iota_gfx_write_char(uint8_t c); +void iota_gfx_write(const char *data); +void iota_gfx_write_P(const char *data); +void iota_gfx_clear_screen(void); + +void iota_gfx_task_user(void); + +void matrix_clear(struct CharacterMatrix *matrix); +void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c); +void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c); +void matrix_write(struct CharacterMatrix *matrix, const char *data); +void matrix_write_P(struct CharacterMatrix *matrix, const char *data); +void matrix_render(struct CharacterMatrix *matrix);  | 
