Subversion Repositories MK3Mag

Compare Revisions

Ignore whitespace Rev 74 → Rev 75

/tags/V0.23a/menu.c
0,0 → 1,127
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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 "menu.h"
#include "uart.h"
#include "printf_P.h"
#include "analog.h"
#include "main.h"
 
 
uint8_t MaxMenuItem = 2;
uint8_t MenuItem = 0;
 
int8_t DisplayBuff[DISPLAYBUFFSIZE] = "Hello World";
uint8_t DispPtr = 0;
 
 
/************************************/
/* Put Character to LCD Buffer */
/************************************/
void Menu_Putchar(char c)
{
if(DispPtr < DISPLAYBUFFSIZE) DisplayBuff[DispPtr++] = c;
}
 
/************************************/
/* Clear LCD Buffer */
/************************************/
void Menu_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 Menu_Update(uint8_t Keys)
{
if(Keys & KEY1)
{
if(MenuItem) MenuItem--;
else MenuItem = MaxMenuItem;
}
if(Keys & KEY2)
{
if(MenuItem == MaxMenuItem) MenuItem = 0;
else MenuItem++;
}
if((Keys & KEY1) && (Keys & KEY2)) MenuItem = 0;
 
 
Menu_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,"++ MK3MAG ++ ");
LCD_printfxy(0,1," V %d.%d%c", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH + 'a');
if(AccPresent)
{
LCD_printfxy(0,2, " ACC Support ");
}
else
{
LCD_printfxy(0,2, " ");
}
LCD_printfxy(0,3,"(c) Buss, Busker ");
break;
 
case 1: // Magnet readings
LCD_printfxy(0,0,"Magnet Sensors: ");
LCD_printfxy(0,1,"X:%+4d Attitude", MagX);
LCD_printfxy(0,2,"Y:%+4d by", MagY);
LCD_printfxy(0,3,"Z:%+4d ", MagZ);
switch(AttitudeSource)
{
case ATTITUDE_SOURCE_I2C: LCD_printfxy(12,2,"I2C"); break;
case ATTITUDE_SOURCE_UART: LCD_printfxy(12,2,"UART"); break;
case ATTITUDE_SOURCE_ACC: LCD_printfxy(12,2,"ACC"); break;
default: LCD_printfxy(12,2,"???"); break;
break;
}
break;
case 2: // Calcstate
LCD_printfxy(0,0,"Calibrating: ");
LCD_printfxy(0,1,"Step: %1d ",ActualCalstate);
switch(ActualCalstate)
{
default:
case 0: LCD_printfxy(0,2," -- "); break;
case 3:
case 1: LCD_printfxy(0,2," pause "); break;
case 2: LCD_printfxy(0,2,"measure horizontal"); break;
case 4: LCD_printfxy(0,2,"measure vertical"); break;
case 5: LCD_printfxy(0,2,"store data"); break;
}
if(!ActualCalstate) LCD_printfxy(13,3,"(start)")
else LCD_printfxy(9,3,"(ESC)(step)");
if(Keys & KEY4) InternalCalstate++;
if(ActualCalstate >= 5 || (Keys & KEY3)) InternalCalstate = 0;
break;
 
default:
MaxMenuItem = MenuItem - 1;
MenuItem = 0;
break;
}
}