You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.4 KiB
C
132 lines
3.4 KiB
C
#include "menu.h"
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
menu_state_t state = OFF;
|
|
uint8_t selected = 0;
|
|
|
|
int8_t menu_val_timezone_ee EEMEM;
|
|
int8_t menu_val_timezone;
|
|
uint8_t menu_val_format_ee EEMEM;
|
|
uint8_t menu_val_format;
|
|
uint8_t menu_val_leds_ee EEMEM;
|
|
uint8_t menu_val_dots;
|
|
uint8_t menu_val_dots_ee EEMEM;
|
|
|
|
uint8_t get_menu_active(){
|
|
if(state != OFF)
|
|
return 1;
|
|
return 0;
|
|
}
|
|
|
|
void enter_menu(){
|
|
switch(state){
|
|
case OFF:
|
|
state = 1;
|
|
break;
|
|
case EXIT:
|
|
state = OFF;
|
|
break;
|
|
default:
|
|
selected ^= 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
const char* get_menu_text(){
|
|
char *res = " ";
|
|
|
|
memset(res, ' ', 6);
|
|
if(selected)
|
|
switch(state){
|
|
case TIMEZONE:
|
|
res = " ";
|
|
if(menu_val_timezone < 0)
|
|
res[3] = '-';
|
|
else
|
|
res[3] = ' ';
|
|
res[4] = abs(menu_val_timezone / 10)+0x30;
|
|
res[5] = abs(menu_val_timezone % 10)+0x30;
|
|
break;
|
|
case FORMAT:
|
|
res[2] = (menu_val_format / 10) + 0x30;
|
|
res[3] = (menu_val_format % 10) + 0x30;
|
|
res[4] = 'H';
|
|
break;
|
|
case LEDS:
|
|
res[3] = (OCR2A / 100) + 0x30;
|
|
res[4] = (OCR2A / 10 % 10) + 0x30;
|
|
res[5] = (OCR2A % 10) + 0x30;
|
|
break;
|
|
case DOTS:
|
|
if(menu_val_dots)
|
|
res = " AN ";
|
|
else
|
|
res = " AUS";
|
|
break;
|
|
default:
|
|
res = "ERROR ";
|
|
break;
|
|
}
|
|
else
|
|
switch(state){
|
|
case TIMEZONE:
|
|
res = "ZONE ";
|
|
eeprom_write_byte((uint8_t*)&menu_val_timezone_ee, menu_val_timezone);
|
|
break;
|
|
case FORMAT:
|
|
res = "FORMAT";
|
|
break;
|
|
case LEDS:
|
|
res = "LED ";
|
|
eeprom_write_byte(&menu_val_leds_ee, OCR2A);
|
|
break;
|
|
case DOTS:
|
|
res = "PUNKTE";
|
|
eeprom_write_byte((uint8_t*)&menu_val_dots_ee, menu_val_dots);
|
|
break;
|
|
case EXIT:
|
|
res = "ZURUEK";
|
|
break;
|
|
default:
|
|
res = "ERROR";
|
|
break;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
void menu_up_down(uint8_t up_down){
|
|
if(selected)
|
|
switch(state){
|
|
case TIMEZONE:
|
|
menu_val_timezone += up_down;
|
|
if(menu_val_timezone < -12)
|
|
menu_val_timezone = 12;
|
|
if(menu_val_timezone > 12)
|
|
menu_val_timezone = -12;
|
|
break;
|
|
case FORMAT:
|
|
if(menu_val_format == 12)
|
|
menu_val_format = 24;
|
|
else if(menu_val_format == 24)
|
|
menu_val_format = 12;
|
|
break;
|
|
case LEDS:
|
|
OCR2A += up_down;
|
|
break;
|
|
case DOTS:
|
|
menu_val_dots ^= 0x01;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
else{
|
|
state += up_down;
|
|
if(state < 1)
|
|
state = 1;
|
|
if(state > EXIT)
|
|
state = EXIT;//TIMEZONE;
|
|
}
|
|
//debug_menu();
|
|
}
|