Subversion Repositories Projects

Rev

Blame | Last modification | View Log | RSS feed

/*****************************************************************************
 *   Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net                  *
 *                                                                           *
 *   This program is free software; you can redistribute it and/or modify    *
 *   it under the terms of the GNU General Public License as published by    *
 *   the Free Software Foundation; either version 2 of the License.          *
 *                                                                           *
 *   This program is distributed in the hope that it will be useful,         *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
 *   GNU General Public License for more details.                            *
 *                                                                           *
 *   You should have received a copy of the GNU General Public License       *
 *   along with this program; if not, write to the                           *
 *   Free Software Foundation, Inc.,                                         *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.               *
 *                                                                           *
 *****************************************************************************/


#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>

#include "main.h"
#include "lcd.h"
#include "usart.h"
#include "timer.h"

#include "mk-data-structs.h"

#define TIMEOUT 500     // 5 sec

void display_data (void)
{
        uint8_t cmd;
        uint8_t flag = 0;;
       
        mode = 'H';
       
        lcd_cls ();
        if (current_hardware == NC)
        {
                lcd_printpns_at (0, 7, PSTR(" \x1c    \x1d     Exit  FC"), 0);
        }
        else
        {
                if (hardware == FC)
                {
                        lcd_printpns_at (0, 7, PSTR(" \x1c    \x1d     Exit"), 0);
                }
                else
                {
                        lcd_printpns_at (0, 7, PSTR(" \x1c    \x1d     Exit  NC"), 0);
                }
        }
        lcd_printp_at (0, 0, PSTR("Display"), 0);
       
        rxd_buffer_locked = FALSE;
        timer = TIMEOUT;
        cmd = 0xfc;     // Home = first page

        do
        {
                SendOutData('h', ADDRESS_ANY, 1, &cmd, 1);
                cmd = 0xff;
                //LED6_TOGGLE;
                _delay_ms (250);

                if (rxd_buffer_locked)
                {
                        Decode64 ();
                        flag = 1;
                       
                        if (!hardware)
                        {       // hardware was not detected at startup
                                hardware = rxd_buffer[1] - 'a';
                                if (hardware == NC)
                                {
                                        lcd_printpns_at (0, 7, PSTR(" \x1c    \x1d     Exit  FC"), 0);
                                        current_hardware = NC;
                                }
                                else
                                {
                                        lcd_printpns_at (0, 7, PSTR(" \x1c    \x1d     Exit"), 0);
                                        current_hardware = FC;
                                }
                        }

#if 0
                        rxd_buffer[24] = 0;
                       
                        lcd_print_at (0, rxd_buffer[3] + 1, (uint8_t *) &rxd_buffer[4], 0);
#else
                        rxd_buffer[83] = 0;
                       
                        print_display_at (0, 2, (uint8_t *) &rxd_buffer[3]);
#endif
                       
                        rxd_buffer_locked = FALSE;
                        timer = TIMEOUT;
                }
               
                if (get_key_press (1 << KEY_MINUS))
                {
                        cmd = 0xfe;     // next page
                        LED1_TOGGLE;
                        //SendOutData('h', ADDRESS_ANY, 1, &cmd, 1);
                        //cmd = 0;
                }
                else if (get_key_press (1 << KEY_PLUS))
                {
                        cmd = 0xfd;     // previous page
                        LED2_TOGGLE;
                        //SendOutData('h', ADDRESS_ANY, 1, &cmd, 1);
                        //cmd = 0;
                }
                else if ((hardware == NC) && get_key_press (1 << KEY_ENTER))
                {
                        if (current_hardware == NC)
                        {
                                SwitchToFC();

                                //timer = TIMEOUT;
                                lcd_printpns_at (0, 7, PSTR(" \x1c    \x1d     Exit  NC"), 0);
                                LED3_TOGGLE;
                        }
                        else
                        {
                                SwitchToNC();

                                //timer = TIMEOUT;
                                lcd_printpns_at (0, 7, PSTR(" \x1c    \x1d     Exit  FC"), 0);
                                LED4_TOGGLE;
                        }
                        cmd = 0xfc;     // Home = first page
                        //SendOutData('h', ADDRESS_ANY, 1, &cmd, 1);
                        //cmd = 0;
                }
        }
        while (!get_key_press (1 << KEY_ESC) && timer);

        get_key_press(KEY_ALL);

        mode = 0;
        rxd_buffer_locked = FALSE;
       
        if (!timer)
        {       // timeout occured
                if (flag)
                {
                        lcd_cls ();
                }
                lcd_printp_at (0, 2, PSTR("ERROR: no data"), 0);
               
                timer = 100;
                while (timer > 0);
        }
        LED_ALL_OFF;
}