// value definitions, don't change this
#define 	SED1335_SYSTEM_SET   	0x40
#define 	SED1335_SLEEP_IN   		0x53
#define 	SED1335_DISP_OFF   		0x58
#define 	SED1335_DISP_ON   		0x59
#define 	SED1335_SCROLL   		0x44
#define 	SED1335_CSRFORM   		0x5d
#define 	SED1335_CGRAM_ADR   	0x5c
#define 	SED1335_CSRDIR_U   		0x4e
#define 	SED1335_CSRDIR_D   		0x4f
#define 	SED1335_CSRDIR_L   		0x4d
#define 	SED1335_CSRDIR_R   		0x4c
#define 	SED1335_HDOT_SCR   		0x5a
#define 	SED1335_OVLAY   		0x5b
#define 	SED1335_CSRW   			0x46
#define 	SED1335_CSRR   			0x47
#define 	SED1335_MWRITE   		0x42
#define 	SED1335_MREAD   		0x43
#define		SED1335_GRAYSCALE		0x60
#define		SED1335_OFF				0x0
#define		SED1335_ON				0x1
#define		SED1335_FLASH_2HZ		0x2
#define		SED1335_FLASH_16HZ		0x3

//pin/port definitions
#define SED1335_DATA_PORT		PORTA
#define SED1335_DATA_DIR		DDRA
#define SED1335_DATA_PIN		PINA

#define SED1335_CONTROL_PORT	PORTB
#define SED1335_CONTROL_DIR		DDRB
#define	SED1335_CONTROL_PIN		PINB
#define SED1335_RST_PORT		PORTD
#define SED1335_RST_DIR			DDRD

#define SED1335_A0				(1 << PB0)
#define SED1335_WR				(1 << PB1)
#undef SED1335_RD
#undef SED1335_CS
#define SED1335_RES				(1 << PD0)

// LCD config values
#define 	SED1335_M0   			0		//character generator select, 0=cgrom, 1=cgram
#define 	SED1335_M2   			0		//character height, 0=8px, 1=16px
#define 	SED1335_WS   			0		//panel drive select, 0=single, 1=dual
#define 	SED1335_IV   			1		//screen origin compensation, 1=shift text down by 1px
#define 	SED1335_FX   			7		//horizontal size of characters minus one
#define 	SED1335_FY   			7		//vertical size of characters minus one
#define 	SED1335_WF   			1		//ac drive waveform period, 0=16-line ac drive, 1=two-frame ac drive
#define 	SED1335_CR   			59		//character bytes per row minus one
#define 	SED1335_TCR   			61		//total character bytes per row >= CR+2
#define 	SED1335_LF   			159		//frame height minus one
#define 	SED1335_AP   			80		//horizontal address range -----------tu chyba powinno być 60, ale nie działa!
#define 	SED1335_CRX   			0x04	//cursor width, pixels minus one
#define 	SED1335_CRY   			0x07	//cursor height, pixels minus one
#define 	SED1335_CM   			0		//cursor mode, 0=underscore, 1=block
#define 	SED1335_MX   			0		//layer composition method, 0=or, 1=xor, 2=and
#define 	SED1335_DM1   			1		//display mode for screen block 3, 0=text, 1=graphic
#define 	SED1335_DM0   			1		//display mode for screen block 1, 0=text, 1=graphic
#define 	SED1335_OV   			1		//3 layer overlay select, 0=two layers, 1=three layers
#define 	SED1335_SAG   			0x7000	//character generator start address
#define 	SED1335_SCRD   			0		//horizontal pixel scroll
#define 	SED1335_FLASH   		(SED1335_OFF | (SED1335_OFF<<2) | (SED1335_ON<<4) | (SED1335_ON<<6)) //off-on-flash; cursor, sad1, sad2, sad3
//#define 	SED1335_TEXTSIZE   		((SED1335_SAD2H << 8) + SED1335_SAD2L)
#define		SED1335_BPP				1		//bits per pixel, 0=1, 1=2, 2=4

#define 	SED1335_GRAPHICSIZE		((long int)(SED1335_LF+1)*SED1335_AP)

#define 	SED1335_SAD1	   		0x0000	//first display memory page addr
#define 	SED1335_SL1   			SED1335_LF	//size of block screen 1 in lines minus one
#define 	SED1335_SAD2	   		0x0000	//second display memory page addr
#define 	SED1335_SL2   			SED1335_LF	//size of block screen 2 in lines minus one
#define 	SED1335_SAD3   			(SED1335_SAD2 + SED1335_GRAPHICSIZE)	//third display memory page addr
#define 	SED1335_SAD4   			0x0000	//fourth display memory page addr

#define		SED1335_GRAPHICSTART	SED1335_SAD2
#define		SED1335_TGRAPHICSTART	SED1335_SAD3 //używane przez gtext.c; jak ustawiłem OV=0 i używałem strony 1 zamiast 3, były dziwne zjawiska przy zapisie do GRAM na zielonych wyświetlaczach

//#define 	SED1335_GRAPHICSIZE   	((SED1335_SL2+1) * (SED1335_SCR_WIDTH+1))>>3
//#define 	SED1335_MEM_END   		10800 /// ????
#define 	SED1335_SYS_P1   		0x00 | (SED1335_IV << 5) | (1 << 4) | (SED1335_WS << 3) | (SED1335_M2 << 2) | SED1335_M0
#define 	SED1335_SYS_P2   		0x00 | (SED1335_WF << 7) | SED1335_FX
#define 	SED1335_CSRF_P2   		0x00 | (SED1335_CM << 7) | SED1335_CRY
#define 	SED1335_OVLAY_P1   		0x00 | (SED1335_OV << 4) | (SED1335_DM0 << 2) | (SED1335_DM1 << 3) | SED1335_MX

void GLCD_Initialize(void);
void GLCD_Clear(void);
void GLCD_WriteCommand(unsigned char);
void GLCD_WriteData(unsigned char);
unsigned char GLCD_ReadData(void);
void GLCD_InitializePorts(void);
void GLCD_ClearText(void);
void GLCD_ClearGraphic(void);
void GLCD_TextGoTo(unsigned char, unsigned char);
void GLCD_WriteText(char *);
void GLCD_SetPixel(unsigned int x,unsigned int y, int color);
void GLCD_SetCursorAddress(unsigned int address);
void GLCD_GraphicGoTo(unsigned int x, unsigned int y);
void GLCD_Bitmap(char * bmp, int x, int y, int dx, int dy);
void GLCD_HardReset(void);