#ifndef KEYBOARD_CONTROLLER_H
#define KEYBOARD_CONTROLLER_H

/////////////////////////////////////////////////////////////////////// INCLUDES
#include <16F877A.h>

//////////////////////////////////////////////////////////////////////// DEFINES
#define NUM_ROWS	8
#define NUM_COLS	7

/////////////////////////////////////////////////////////////// PIN DESIGNATIONS
#define  A0    PIN_A0
#define  _RD   PIN_A1
#define  _WR   PIN_A2
#define  IRQ   PIN_A3
#define  D0    PIN_B0
#define  D1    PIN_B1
#define  D2    PIN_B2
#define  D3    PIN_B3
#define  D4    PIN_B4
#define  D5    PIN_B5
#define  D6    PIN_B6
#define  D7    PIN_B7
#define  COL0  PIN_C0
#define  COL1  PIN_C1
#define  COL2  PIN_C2
#define  COL3  PIN_C4
#define  TX    PIN_C6
#define  RX    PIN_C7
#define  COL4  PIN_E0
#define  COL5  PIN_E1
#define  COL6  PIN_E2
#define  ROW0  PIN_D0
#define  ROW1  PIN_D1
#define  ROW2  PIN_D2
#define  ROW3  PIN_D3
#define  ROW4  PIN_D4
#define  ROW5  PIN_D5
#define  ROW6  PIN_D6
#define  ROW7  PIN_D7

//////////////////////////////////////////////////////// MICROPROCESSOR SETTINGS
#device *=16
#device adc=8
#fuses NOWDT,RC,NOPUT,NOPROTECT,NODEBUG,BROWNOUT,NOLVP,NOCPD,NOWRT
#use delay(clock=20000000)
//#use rs232(baud=19200,parity=N,xmit=TX,rcv=RX,bits=8)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)

//////////////////////////////////////////////////////////// FUNCTION PROTOTYPES
void TIMER2_isr(void);
void initialize(void);
void read_key_data(void);
void send_key_events(void);
void assert_column(int8, int1);

#endif /* KEYBOARD_CONTROLLER_H */

