void read_track(track* my_track) { set_sectors(my_track, eeprom_read_uint32(0x04)); }
void init_user(){ uint8_t i; init_display(); TRISBbits.TRISB2 = 1; // SDCC is missing the TRISA7 bit in the define... #if 0 TRISAbits.TRISA0 = 1; TRISAbits.TRISA6 = 1; TRISAbits.TRISA7 = 1; #else TRISA = TRISA | b(11010001); #endif // Setup pwm and adc for the led brightness control ADCON0 = b(00000001); ADCON1 = b(01111110); ADCON2 = b(00000000); CCP1CON = b(00001100); PR2 = 0xFF; T2CON = b(00000100); CCPR1L = 0x00; debounce_init(hours_debounce,hours_switch_raw); debounce_init(mins_debounce,mins_switch_raw); debounce_init(secs_debounce,secs_switch_raw); if (!hours_switch_raw && !mins_switch_raw && secs_switch_raw){ mode = fast_clock; } else if (hours_switch_raw && !mins_switch_raw && !secs_switch_raw){ mode = slow_clock; } else if (!hours_switch_raw && mins_switch_raw && !secs_switch_raw){ // Oooh! Metrics display mode! Don't see that very often... inc_metric_meta(); // Basically just cycle through the bytes in the eeprom and display them on // screen forever. i = 0; while (1){ display_digits( i / 16,i % 16, CHAR_BLANK,CHAR_BLANK, (((uint8_t *)(&eeprom_data))[i] / 16), ((uint8_t *)(&eeprom_data))[i] % 16); delay10tcy(1); if (debounce_just_pressed(hours_debounce,hours_switch_raw)){ i++; if (i >= sizeof(eeprom_data)) i = 0; } if (debounce_just_pressed(secs_debounce,secs_switch_raw)){ i--; if (i >= sizeof(eeprom_data)) i = sizeof(eeprom_data) - 1; } debounce_add_sample(hours_debounce,hours_switch_raw); debounce_add_sample(secs_debounce,secs_switch_raw); } } else { mode = none_chosen; } if (mode == none_chosen){ mode = eeprom_read_uint32(EEPROM_ADDR_MODE); } else { eeprom_write_uint32(mode,EEPROM_ADDR_MODE); trigger_save_eeprom(); } silly_hour_display = eeprom_read_uint32(EEPROM_ADDR_SILLY_HOUR_DISPLAY); }