/* ---------------------------------------------
*ad0x0, 2020
я взял какую-то библиотеку из инета, вырезал тупую ненужную херню
и замутил ряд оптимизаций. Например, символы рисуются не побайтово,
а отправляются кусками по 16 байт - ускорение бешенное
Шрифт один единственный 8х10, не стал его можно масштабировать к 16х20,
хотя в будущем мож допилю такую фичу
си с плюсами нет, по этому подверг API страшному изврату, чтобы отрисовывать
на разные устройства ОНОВРЕМЕННО (фриртос не такое Г как я думал)
* ----------------------------------------------
*/


#ifndef __SSD1327_H
#define __SSD1327_H
#include "stdint.h"
#include "../i2c/ad0x0_i2c.h"
#ifdef __cplusplus
extern "C" {
#endif

#define SSD1306_I2C_ADDRESS		     ( 0x78 ) 
	/* size */
#define SSD1306_LCDWIDTH                     128
#define SSD1306_LCDHEIGHT                    128
	/* Commands */
#define SSD1306_SETCONTRAST                  0x81
#define SSD1306_DISPLAYALLON_RESUME          0xA4
#define SSD1327_DISPLAYALLON                 0xA5
#define SSD1306_NORMALDISPLAY                0xA6
#define SSD1306_INVERTDISPLAY                0xA7
#define SSD1327_DISPLAYOFF                   0xAE
#define SSD1327_DISPLAYON                    0xAF
#define SSD1327_COLUMNADDR                   0x15
#define SSD1327_PAGEADDR                     0x75
#define SSD1327_SEGREMAP                     0xA0

#define COMAND		                   0x00
#define DATA		                     0x40
#define DATA_BUF                     0xC0

#define USE_BACKBUFFER	1
#define BUF_HEIGHT 128
typedef struct{
	unsigned int out;
	float t;
	uint8_t i2cbuf[2];
	//char buff[2048];  //буфер дисплея
	uint8_t char_x,char_y;
	uint8_t font_w,font_h;
	void (*clear)(void);
	void (*print_at)(unsigned char x, unsigned char y,unsigned char* buf, unsigned char size);
	void    (*ad0x0_i2c_push)(ADQ_t _ctype,uint8_t _cbyte);
	uint8_t (*ad0x0_i2c_get_ext_async2)(uint8_t *_p_out_handle,void **_p_out_i2c_ext_t);
	void 		(*command)(unsigned char ControByte, unsigned char DataByte);
	void 		(*command_buf)(unsigned char *pbuf,uint8_t count);
	void 		(*command2)(unsigned char ControByte, unsigned char DataByte1, unsigned char DataByte2);
	void 		(*command3)(unsigned char ControByte, unsigned char DataByte1, unsigned char DataByte2, unsigned char DataByte3);
	void 		(*OLED_test)(void);
	void 		(*OLED_test2)(void);
	void 		(*OLED_test3)(void);
}oled_desc_s;

	/* --- Прототипы функций -------------------------------- */
//        void delay_ms( unsigned int ms );
          


//	void OLED_CharBig(unsigned int c);  /* вывод крупных символов */
//	void OLED_Printf(unsigned char* buf, unsigned char size);  /* печатает строку с размерами - 0 самый мелкий 2 - увеличиный - 3 самый большой(только для цифр) */
//	void OLED_DrawImage(unsigned char num_image);  /* выводит картинку из флеш */
//	void OLED_Bat(unsigned char y,unsigned char x, unsigned char z);  /* рисует батарейку по координатам z - от 0 до 10 делений */
//	void OLED_Mode(char set_mode);  /* 1 - inverted / 0 - normal */
//	void OLED_Sleep(char set);  /* 1 - on sleep / 0 - off sleep */
void	OLED_Init2(I2C_TypeDef * _I2C_BASE, oled_desc_s *p_desc);
		unsigned char * i16_2s(int16_t value, unsigned char *buffer);
		unsigned char * i32_2s(int32_t value, unsigned char *buffer);
#ifdef USE_BACKBUFFER    
void	buf_render(oled_desc_s *p_desc);    
#endif
#ifdef __cplusplus
}
#endif

#endif /* __SSD1327_H */
