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; |
} |
} |