Subversion Repositories Projects

Rev

Blame | Last modification | View Log | RSS feed

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#include <stdlib.h>
#include <inttypes.h>
#include "main.h"
#include "uart0.h"
#include "printf_P.h"
#include "ubx.h"

uint8_t MaxMenuItem = 1;
uint8_t MenuItem = 0;
uint8_t RemoteKeys = 0;

#define KEY1    0x01
#define KEY2    0x02
#define KEY3    0x04
#define KEY4    0x08
#define KEY5    0x10



#define DISPLAYBUFFSIZE 80
int8_t DisplayBuff[DISPLAYBUFFSIZE] = "Hello World";
uint8_t DispPtr = 0;


/************************************/
/*        Clear LCD Buffer          */
/************************************/
void LCD_Clear(void)
{
        uint8_t i;
        for( i = 0; i < DISPLAYBUFFSIZE; i++) DisplayBuff[i] = ' ';
}


/************************************/
/*        Update Menu on LCD        */
/************************************/
// Display with 20 characters in 4 lines
void LCD_PrintMenu(void)
{
        if(RemoteKeys & KEY1)
        {
                if(MenuItem) MenuItem--;
                else MenuItem = MaxMenuItem;
        }
        if(RemoteKeys  & KEY2)
        {
                if(MenuItem == MaxMenuItem) MenuItem = 0;
                else MenuItem++;
        }
        if((RemoteKeys  & KEY1) && (RemoteKeys  & KEY2)) MenuItem = 0;

        LCD_Clear();

        if(MenuItem > MaxMenuItem) MenuItem = MaxMenuItem;
        // print menu item number in the upper right corner
        if(MenuItem < 10)
        {
          LCD_printfxy(17,0,"[%i]",MenuItem);
        }
        else
        {
          LCD_printfxy(16,0,"[%i]",MenuItem);
        }

        switch(MenuItem)
        {
    case 0:// Version Info Menu Item
           LCD_printfxy(0,0,"+ Follow Me +");
           #ifdef USE_SDLOGGER
           LCD_printfxy(0,1,"HW: SD-Logger");
           #endif
           #ifdef USE_FOLLOWME
           LCD_printfxy(0,1,"HW: Follow-Me");
           #endif
           LCD_printfxy(0,2,"SW: %d.%d%c", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH+'a');
           LCD_printfxy(0,3,"          ");
           break;

        case 1://GPS Lat/Lon coords
                        if (GPSInfo.status == INVALID)
                        {
                                LCD_printfxy(0,0,"No GPS data!");
                        }
                        else
                        {
                                switch (GPSInfo.satfix)
                                {
                                case SATFIX_NONE:
                                        LCD_printfxy(0,0,"Sats: %d Fix: No", GPSInfo.satnum);
                                        break;
                                case SATFIX_2D:
                                        LCD_printfxy(0,0,"Sats: %d Fix: 2D", GPSInfo.satnum);
                                        break;
                                case SATFIX_3D:
                                        LCD_printfxy(0,0,"Sats: %d Fix: 3D", GPSInfo.satnum);
                                        break;
                                default:
                                        LCD_printfxy(0,0,"Sats: %d Fix: ??", GPSInfo.satnum);
                                        break;
                                }
                                int16_t i1,i2,i3;
                                i1 = (int16_t)(GPSInfo.longitude/10000000L);
                                i2 = abs((int16_t)((GPSInfo.longitude%10000000L)/10000L));
                                i3 = abs((int16_t)(((GPSInfo.longitude%10000000L)%10000L)/10L));
                                LCD_printfxy(0,1,"Lon: %d.%.3d%.3d deg",i1, i2, i3);
                                i1 = (int16_t)(GPSInfo.latitude/10000000L);
                                i2 = abs((int16_t)((GPSInfo.latitude%10000000L)/10000L));
                                i3 = abs((int16_t)(((GPSInfo.latitude%10000000L)%10000L)/10L));
                                LCD_printfxy(0,2,"Lat: %d.%.3d%.3d deg",i1, i2, i3);
                                i1 = (int16_t)(GPSInfo.altitude/1000L);
                                i2 = abs((int16_t)(GPSInfo.altitude%1000L));
                                LCD_printfxy(0,3,"Alt: %d.%.3d m",i1, i2);
                        }
                        break;

    default: MaxMenuItem = MenuItem - 1;
             MenuItem = 0;
           break;
    }
    RemoteKeys = 0;
}