X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_log_micro.c;h=cfc0bcfd76ced85de0e99e28ef10d4634f96d50f;hb=c49bd3cb0c31a51fae79ddc92237cc309be9a242;hp=aa0f5c76c45f9c3277d638fa090f777b5946d55f;hpb=1085ec5d57e0ed5d132f2bbdac1a0b6a32c0ab4a;p=fw%2Faltos diff --git a/src/kernel/ao_log_micro.c b/src/kernel/ao_log_micro.c index aa0f5c76..cfc0bcfd 100644 --- a/src/kernel/ao_log_micro.c +++ b/src/kernel/ao_log_micro.c @@ -19,21 +19,24 @@ #include #include #include +#ifndef LOG_MICRO_ASYNC +#define LOG_MICRO_ASYNC 1 +#endif +#if LOG_MICRO_ASYNC #include +#else +#include +#endif +#include -static uint16_t ao_log_offset = STARTING_LOG_OFFSET; +static N_SAMPLES_TYPE ao_log_offset = STARTING_LOG_OFFSET; -#define AO_LOG_ID_SHIFT 12 -#define AO_LOG_ID_MASK ((1 << AO_LOG_ID_SHIFT) - 1) void ao_log_micro_save(void) { - uint16_t n_samples = (ao_log_offset - STARTING_LOG_OFFSET) / sizeof (uint16_t); + N_SAMPLES_TYPE n_samples = (ao_log_offset - STARTING_LOG_OFFSET) / sizeof (uint16_t); -#if AO_LOG_ID - n_samples |= AO_LOG_ID << AO_LOG_ID_SHIFT; -#endif ao_eeprom_write(PA_GROUND_OFFSET, &pa_ground, sizeof (pa_ground)); ao_eeprom_write(PA_MIN_OFFSET, &pa_min, sizeof (pa_min)); ao_eeprom_write(N_SAMPLES_OFFSET, &n_samples, sizeof (n_samples)); @@ -49,7 +52,7 @@ ao_log_micro_restore(void) void ao_log_micro_data(void) { - uint16_t low_bits = pa; + uint16_t low_bits = (uint16_t) pa; if (ao_log_offset < MAX_LOG_OFFSET) { ao_eeprom_write(ao_log_offset, &low_bits, sizeof (low_bits)); @@ -78,29 +81,31 @@ static void ao_log_hex_nibble(uint8_t b) { if (b < 10) - ao_async_byte('0' + b); + ao_async_byte((uint8_t) ('0' + b)); else - ao_async_byte('a' - 10 + b); + ao_async_byte((uint8_t) ('a' - 10 + b)); } -static void +void ao_log_hex(uint8_t b) { ao_log_hex_nibble(b>>4); ao_log_hex_nibble(b&0xf); } -static void +void ao_log_newline(void) { ao_async_byte('\r'); ao_async_byte('\n'); } +#define MAX_N_SAMPLES ((MAX_LOG_OFFSET - STARTING_LOG_OFFSET) / 2) + void ao_log_micro_dump(void) { - uint16_t n_samples; + N_SAMPLES_TYPE n_samples; uint16_t nbytes; uint8_t byte; uint16_t b; @@ -108,12 +113,24 @@ ao_log_micro_dump(void) ao_eeprom_read(N_SAMPLES_OFFSET, &n_samples, sizeof (n_samples)); - if (n_samples == 0xffff) + if (n_samples == (N_SAMPLES_TYPE) (~0)) n_samples = 0; + nbytes = (uint16_t) (STARTING_LOG_OFFSET + sizeof (uint16_t) * n_samples); + + /* + * Rewrite n_samples so that it includes the log ID value with + * 32-bit n_samples split into two chunks + */ + if (sizeof (n_samples) > 2) { + N_SAMPLES_TYPE n_samples_low; + N_SAMPLES_TYPE n_samples_high; + n_samples_low = n_samples & ((1 << AO_LOG_ID_SHIFT) - 1); + n_samples_high = (n_samples - n_samples_low) << AO_LOG_ID_WIDTH; + n_samples = n_samples_low | n_samples_high; + } #if AO_LOG_ID - n_samples &= AO_LOG_ID_MASK; + n_samples |= AO_LOG_ID << AO_LOG_ID_SHIFT; #endif - nbytes = STARTING_LOG_OFFSET + sizeof (uint16_t) * n_samples; ao_async_start(); ao_async_byte('M'); ao_async_byte('P'); @@ -121,13 +138,18 @@ ao_log_micro_dump(void) if ((b & 0xf) == 0) ao_log_newline(); ao_eeprom_read(b, &byte, 1); +#if AO_LOG_ID + if (N_SAMPLES_OFFSET <= b && b < (N_SAMPLES_OFFSET + sizeof(n_samples))) { + byte = (uint8_t) (n_samples >> ((b - N_SAMPLES_OFFSET) << 3)); + } +#endif ao_log_hex(byte); crc = ao_log_micro_crc(crc, byte); } ao_log_newline(); crc = ~crc; - ao_log_hex(crc >> 8); - ao_log_hex(crc); + ao_log_hex((uint8_t) (crc >> 8)); + ao_log_hex((uint8_t) crc); ao_log_newline(); ao_async_stop(); }