#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct display
{
    int size_x,size_y;
	void (*enable)();
	void (*disable)();

	void (*reset_hard)();
	void (*reset_soft)();

	uint8_t (*is_ready)();

	void (*sleep)();
	void (*wake)();

	void (*draw_pixel)(uint16_t, uint16_t, uint8_t); 
	void (*draw_line)(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t); 
	void (*draw_rectangle)(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t, uint8_t);
	void (*draw_circle)(uint16_t, uint16_t, uint16_t, uint8_t, uint8_t); 

	void (*scroll_right)(uint16_t, uint16_t);
	void (*scroll_left)(uint16_t, uint16_t);

	void (*scroll_up)(uint16_t, uint16_t);
	void (*scroll_down)(uint16_t, uint16_t);

	void (*set_font)(uint8_t*, uint8_t, uint8_t spacing); 
	void (*print_char)(uint16_t, uint16_t, uint8_t, uint8_t); 
	void (*print_text)(uint16_t, uint16_t, uint8_t, uint16_t, uint8_t);
	void (*print_cursor)(uint8_t); 

	void (*goto_pos)(uint16_t, uint16_t);

	uint8_t (*display)();
	uint8_t (*clear)();

	void (*change_brightness)(uint8_t); 
	void (*change_contrast)(uint8_t); 

	void (*rotate)(uint8_t); 
	void (*inverse)(uint8_t); 
	void (*invert)(uint8_t); 
    void (*print)(int);
} display_s;

void display_init(display_s *d);
void display_print(int val);