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

#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();
}