#ifndef head_oled_i2c
#define head_oled_i2c

#define OLED_HEIGHT_64          0x12
#define OLED_64                 0x3F

#define OLED_DISPLAY_OFF        0xAE
#define OLED_DISPLAY_ON         0xAF

#define OLED_COMMAND_MODE       0x00
#define OLED_ONE_COMMAND_MODE   0x80
#define OLED_DATA_MODE          0x40

#define OLED_ADDRESSING_MODE    0x20
#define OLED_VERTICAL           0x01

#define OLED_NORMAL_V            0xC8
#define OLED_NORMAL_H            0xA1

#define OLED_CONTRAST           0x81
#define OLED_SETCOMPINS           0xDA
#define OLED_SETVCOMDETECT        0xDB
#define OLED_CLOCKDIV             0xD5
#define OLED_SETMULTIPLEX        0xA8
#define OLED_COLUMNADDR            0x21
#define OLED_PAGEADDR            0x22
#define OLED_CHARGEPUMP            0x8D

#define OLED_NORMALDISPLAY        0xA6

#define OLED_BUFSIZE (128*64/8)

#define OLED_MAX_X 127
#define OLED_MAX_Y 63
#define OLED_MAX_ROW 7

#define OLED_ADDR 0x3C
#define OLED_I2C_FREQ 100000UL

#ifdef __cplusplus
extern "C" {
#endif

void i2c_begin(uint8_t address);
void i2c_endTransaction();
void i2c_beginTransmission(uint8_t address);
void i2c_write(uint8_t data);

void endTransm();
void sendByteRaw(uint8_t data);
void startTransm();
void beginData();
void sendByte(uint8_t data);

void sendCommand(uint8_t cmd1);
void sendCommandData(uint8_t cmd1, uint8_t cmd2);
uint8_t constrainValue(uint8_t value, uint8_t min, uint8_t max);
void setWindow(int x0, int y0, int x1, int y1);

void beginCommand();
void beginOneCommand();

void initialization();

void setBit(uint8_t *value, uint8_t bitIndex, uint8_t bitValue);
void DrawPixel(uint8_t x, uint8_t y, uint8_t fill);
void DrawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t color);
void DrawRect(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t color, uint8_t fill);
void DrawCircle(uint8_t x0, uint8_t y0, uint8_t radius, uint8_t color, uint8_t fill);
void Fill(uint8_t fill);
void update();

void DrawChar(uint8_t x, uint8_t y, uint8_t charIndex, uint8_t fill);
void AddSymbol(uint8_t symbol);
void DelSymbol();
void SetPage(uint8_t p);



#ifdef __cplusplus
}
#endif

#endif