
// UTF-8 fonty (c) Jirka Chráska 2026, <jirka@lixis.cz>


#ifndef PI_PICO_SH1106_SH1106_I2C_H
#define PI_PICO_SH1106_SH1106_I2C_H


#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include "font.h"


#define SET_DISP 0xAE
#define SET_SCAN_DIR 0xC0
#define SET_SEG_REMAP 0xA0
#define LOW_COL_ADDR 0x00
#define HIGH_COL_ADDR 0x10
#define SET_PAGE_ADDR 0xB0

typedef struct sh1106 {
    uint8_t address;
    uint8_t width;
    uint8_t height;
    uint8_t pages;
    uint8_t **buffer;
    i2c_inst_t *i2c;
} sh1106_t;
void SH1106_Write_Data(sh1106_t *sh1106, uint8_t* data);
void SH1106_Write_CMD(sh1106_t *sh1106, uint8_t command);
void SH1106_init(sh1106_t *sh1106, i2c_inst_t *i2c, uint8_t address, uint8_t width, uint8_t height);
// aktualizace displeje
void SH1106_draw(sh1106_t *sh1106);
// kreslení bodu
void SH1106_drawPixel(sh1106_t *sh1106, uint8_t x, uint8_t y, uint8_t color);
// kreslení čáry z bodu [x1,y1] do bodu [x2,y2]
void SH1106_drawLine(sh1106_t *sh1106, int32_t x1, int32_t y1, int32_t x2, int32_t y2, uint8_t color);
// kreslení vodorovné linky do pageBufferu
void SH1106_drawHLine(sh1106_t *sh1106, uint8_t x, uint8_t y, uint8_t w, uint8_t color);
// kreslení svislé linky do pageBufferu
void SH1106_drawVLine(sh1106_t *sh1106, uint8_t x, uint8_t y, uint8_t w, uint8_t color);
// kreslení kružnice
void SH1106_drawCircle(sh1106_t *sh1106, int xm, int ym, int r, uint8_t color);
// vymazání displeje
void SH1106_clear(sh1106_t *sh1106);
// kreslení obdélníku
void SH1106_drawRectangle(sh1106_t *sh1106, uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t color);
// kreslení UTF8 řetězce 
uint16_t SH1106_drawString(sh1106_t *p, uint32_t x, uint32_t y, bitmapFONT * Font, const char * pString, uint8_t color);
// kreslení UTF8 znaku
uint16_t SH1106_drawChar(sh1106_t * p, uint32_t x, uint32_t y, const bitmapFONT* Font, uint32_t Index, uint8_t color);

#endif //PI_PICO_SH1106_SH1106_I2C_H
