#ifdef USE_LOGGING #include #include #include "lights.h" #define LOG_BUFFER 128 static unsigned char log_buffer_ee[LOG_BUFFER] EEMEM; static unsigned char log_buffer_count; static unsigned char log_buffer[LOG_BUFFER]; static unsigned char log_state EEMEM; static unsigned char reboot_count EEMEM = 0; static unsigned char can_write_eeprom = 0; void log_set_state(unsigned char val) { if (can_write_eeprom) eeprom_write_byte(&log_state, val); } void log_init() { unsigned char r_count; r_count = eeprom_read_byte(&reboot_count); if (r_count < 5) { r_count++; eeprom_write_byte(&reboot_count, r_count); can_write_eeprom = 1; } else { //eeprom_write_byte(&log_state, 0xFF); can_write_eeprom = 0; } log_set_state(1); log_buffer_count = 0; } void log_byte(unsigned char byte) { if (log_buffer_count >= LOG_BUFFER) return; // eeprom_write_word(&log_buffer[log_buffer_count], word); log_buffer[log_buffer_count++] = byte; if (log_buffer_count == LOG_BUFFER) log_flush(); } void log_word(uint16_t word) { log_byte(word & 0xFF); log_byte(word >> 8); } void log_flush() { unsigned char i; log_buffer_count = LOG_BUFFER; if (!can_write_eeprom) return; for (i=0; i < LOG_BUFFER; i++) { eeprom_write_byte(&log_buffer_ee[i], log_buffer[i]); } log_set_state(0x42); } #endif