]> www.fi.muni.cz Git - bike-lights.git/blob - logging.c
log reset count immediately
[bike-lights.git] / logging.c
1 #ifdef USE_LOGGING
2
3 #include <avr/io.h>
4 #include <avr/eeprom.h>
5
6 #include "lights.h"
7
8 #define LOG_BUFFER 128
9 static unsigned char log_buffer_ee[LOG_BUFFER] EEMEM;
10 static unsigned char log_buffer_count;
11 static unsigned char log_buffer[LOG_BUFFER];
12 static unsigned char log_state EEMEM;
13 static unsigned char reboot_count EEMEM = 0;
14 static unsigned char can_write_eeprom = 0;
15
16 void log_set_state(unsigned char val)
17 {
18         if (can_write_eeprom)
19                 eeprom_write_byte(&log_state, val);
20 }
21
22 void log_init()
23 {
24         unsigned char r_count;
25
26         r_count = eeprom_read_byte(&reboot_count);
27
28         if (r_count < 5) {
29                 r_count++;
30                 eeprom_write_byte(&reboot_count, r_count);
31                 can_write_eeprom = 1;
32         } else {
33                 //eeprom_write_byte(&log_state, 0xFF);
34                 can_write_eeprom = 0;
35         }
36
37         log_set_state(1);
38         log_buffer_count = 0;
39 }
40
41 void log_byte(unsigned char byte) {
42         if (log_buffer_count >= LOG_BUFFER)
43                 return;
44         
45         // eeprom_write_word(&log_buffer[log_buffer_count], word);
46         log_buffer[log_buffer_count++] = byte;
47
48         if (log_buffer_count == LOG_BUFFER)
49                 log_flush();
50 }
51
52 void log_word(uint16_t word) {
53         log_byte(word & 0xFF);
54         log_byte(word >> 8);
55 }
56
57 void log_flush() {
58         unsigned char i;
59
60         log_buffer_count = LOG_BUFFER;
61
62         if (!can_write_eeprom)
63                 return;
64
65         for (i=0; i < LOG_BUFFER; i++) {
66                 eeprom_write_byte(&log_buffer_ee[i],
67                         log_buffer[i]);
68         }
69         log_set_state(0x42);
70 }
71
72 #endif
73