diff --git a/code/main.c b/code/main.c index aa5faee..5a3ef26 100644 --- a/code/main.c +++ b/code/main.c @@ -6,11 +6,30 @@ #include "sdi_shield.h" #include -uint8_t EEMEM cam_saved; -volatile uint8_t cam = 0; -volatile uint8_t pgm = 0; -volatile uint8_t pvw = 0; -volatile uint8_t valid = 0; +uint8_t pgm = 0; +uint8_t pvw = 0; + +typedef struct { + uint8_t cam; + uint8_t front_enabled; + uint8_t pvw_enabled; +} settings_t; + +uint8_t setting_limits[sizeof(settings_t)] = { + 16, + 2, + 2 +}; + +volatile union{ + settings_t settings; + uint8_t arr[sizeof(settings_t)]; +} menu; + +void* EEMEM settings_saved; + +volatile uint8_t menu_state = 0; +volatile uint8_t update = 1; #define SDI_SHIELD_ADDR 0x84 @@ -19,27 +38,32 @@ volatile uint8_t valid = 0; #define LENS_PGM_TALLY_PIN 2 #define VF_FRONT_PGM_TALLY_PIN 3 -volatile uint8_t pvw_enabled = 1; -volatile uint8_t front_enabled = 1; - void enc_init(){ PORTC |= (1<<2) | (1 << 3); - PCICR |= (1< setting_limits[0]) + menu.settings.cam = 0; + enc_init(); + btn_init(); lcd_init(); lcd_on(); @@ -97,7 +121,6 @@ int main(void){ } */ - enc_init(); sei(); while(1){ @@ -107,60 +130,89 @@ int main(void){ shield_read_uint8(0x5001, &data_length); if(data_length){ uint8_t tally; - shield_read_uint8(0x5100+cam, &tally); + shield_read_uint8(0x5100+menu.settings.cam, &tally); pgm = !!(tally & (1<<0)); pvw = !!(tally & (1<<1)); } if(pgm){ DDRC |= 1<<1; - if(front_enabled){ + if(menu.settings.front_enabled){ PORTB |= (1<