main.c
/*
 * $Id: main.c,v 1.15 2009/01/16 13:08:48 fvecoven Exp $
 */

#include <p18f452.h>
#include <timers.h>
#include <delays.h>
#include "lcd.h"
#include "ir2.h"

#pragma config WDT = OFF
#pragma config OSC = HSPLL


/* global variables */
unsigned char update;


/* prototypes */
void handle_interrupt(void);
void handle_capture(void);


/* INTERRUPT ENTRY POINT */
#pragma code interrupt_code = 0x08
void interrupt(void)
{
        _asm
                goto handle_interrupt
        _endasm
}


#pragma code
#pragma interrupt handle_interrupt
void handle_interrupt(void)
{
        if (PIR1bits.TMR1IF) {
                ir_timeout();
                PIR1bits.TMR1IF = 0;
        }
        if (PIR1bits.CCP1IF) {
                ir_interrupt();
                PIR1bits.CCP1IF = 0;
        }
}




void main(void)
{
        char str[8];

        Delay100TCYx(10);

        INTCON = 0;

        lcd_init();

        lcd_i_write(0x80);
        putrs_lcd("IR decoder");

        ir_init();
        ir_enable();

        INTCONbits.GIE = 1;

        update = 0;
        while (1) {
                if (ir_flags.decoded) {

                        lcd_i_write(0x1);
                        lcd_i_write(0x80);
                        if (ir.type == IR_RC5) {
                                putrs_lcd("RC5");
                        } else if (ir.type == IR_RC6) {
                                putrs_lcd("RC6");
                        } else if (ir.type == IR_JVC) {
                                putrs_lcd("JVC");
                        } else if (ir.type == IR_NEC) {
                                putrs_lcd("NEC");
                        } else if (ir.type == IR_NEC_EXTENDED) {
                                putrs_lcd("NEC EXTENDED");
                        } else if (ir.type == IR_SONY_12BITS){
                                putrs_lcd("SONY 12 BITS");
                        } else if (ir.type == IR_SONY_15BITS){
                                putrs_lcd("SONY 15 BITS");
                        } else if (ir.type == IR_SONY_20BITS){
                                putrs_lcd("SONY 20 BITS");
                        } else if (ir.type == IR_SHARP) {
                                putrs_lcd("SHARP");
                        } else if (ir.type == IR_PACE) {
                                putrs_lcd("PACE");
                        } else {
                                putrs_lcd("UNKNOWN");
                        }
                        lcd_i_write(0xc0);
                        lcd_d_write('A');
                        lcd_d_write('=');
                        puts_lcd(itox(ir.address, str));
                        lcd_d_write(' ');
                        lcd_d_write('C');
                        lcd_d_write('=');
                        puts_lcd(btox(ir.command, str));
                        lcd_d_write(' ');
                        lcd_d_write('E');
                        lcd_d_write('=');
                        puts_lcd(btox(ir.extra, str));

                        // re-enable IR reception
                        ir_enable();
                }
        }
}