#ifndef _GLCD_H_
#define _GLCD_H_

/*
 *	Graphic LCD interface header file
 * 	(C)opyright SOOO "Gomelsky Priborostroitelny Zavod"
 *	www.gomel-pribor.com
 */


#define GLCD_WAIT 	DelayUs(10)

#define GLCD_RS		RA5
#define GLCD_EN		RC0
#define GLCD_RW		RC1
#define GLCD_CS1 	RA4
#define GLCD_CS2 	RA2 
#define GLCD_DATA	LATB
#define GLCD_DATA_PORT	PORTB 
#define GLCD_RS_TRIS	TRISA5
#define GLCD_EN_TRIS	TRISC0
#define GLCD_RW_TRIS	TRISC1 
#define GLCD_CS1_TRIS	TRISA4
#define GLCD_CS2_TRIS	TRISA2
#define GLCD_DATA_TRIS	TRISB

#define OUTPUT_PIN      0x0	
#define INPUT_PIN       0x1	
#define OUTPUT_DATA     0x0	
#define INPUT_DATA      0xFF

#define HALF_LEFT	0x1
#define HALF_RIGHT	0x2

#define GLCD_STROBE()	GLCD_EN = 1; asm("nop"); asm("nop"); GLCD_EN = 0

#define GLCD_STROBE_READ(value)	 GLCD_EN = 1; \
				 asm("nop"); \
				 asm("nop"); \
				 value=GLCD_DATA_PORT;\
				 GLCD_EN = 0;

#define glcd_off()			glcd_cmd(0x3e, HALF_LEFT | HALF_RIGHT)
#define glcd_on()			glcd_cmd(0x3f, HALF_LEFT | HALF_RIGHT)
#define glcd_page(x, half)		glcd_cmd(0xb8|(x), half)
#define glcd_column(x, half)		glcd_cmd(0x40|(x), half)
#define glcd_screen_top(x, half)	glcd_cmd(0xc0|(x), half)
#define glcd_clear()			glcd_fill(0)

#define ON		1
#define OFF		0

extern void glcd_cmd(unsigned char c, unsigned char half);
extern void glcd_datawrite(unsigned char c, unsigned char half);
extern unsigned char glcd_dataread(unsigned char half);
extern void glcd_init();
extern void glcd_fill(unsigned char c);

// put pixel on the display (x is horiz 0:127, y is vert 0:63, c is color)
extern void glcd_putpixel(unsigned char x, unsigned char y, unsigned char color);

// draw line
extern void glcd_line(int x1, int y1, int x2, int y2, unsigned char color);

// draw rectangle 
extern void glcd_rectangle(unsigned char x, unsigned char y, unsigned char a, unsigned char b, unsigned char color);

// draw circle of <radius> at <xcenter,ycenter>
extern void glcd_circle(unsigned char xcenter, unsigned char ycenter, unsigned char radius, unsigned char color);

// write a standard ascii charater (values 20-127) to the display
extern void glcd_writechar(unsigned char x, unsigned char y, char c, unsigned char color);

// write a standard ascii charater (values 20-127) to the display in scale
extern void glcd_writecharscale(unsigned char x, unsigned char scaleX, unsigned char y, unsigned char scaleY, char c, unsigned char color);

extern void glcd_putstr(unsigned char x, unsigned char y, char *data, unsigned char color);

extern void glcd_putstrscale(unsigned char x, unsigned char scaleX, unsigned char y, unsigned char scaleY, char *data, unsigned char color);

#endif

