diff options
| author | Keith Packard <keithp@keithp.com> | 2011-01-06 12:51:39 -0800 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2011-01-06 12:51:39 -0800 | 
| commit | ddcc94da4326f9ce954bd31a46b36165c58e6c18 (patch) | |
| tree | 808d9c89e1d43e22017655217e730e54d79ed397 /src/ao_log.c | |
| parent | f3f1b1488bdc92fa9277dc549ba9f3210a8d4c8c (diff) | |
altos: Simplify storage API
This removes the config-specific APIs and exposes global variables for
the available storage space, block size and config storage location.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/ao_log.c')
| -rw-r--r-- | src/ao_log.c | 25 | 
1 files changed, 14 insertions, 11 deletions
diff --git a/src/ao_log.c b/src/ao_log.c index 18bdb8c8..30acc50a 100644 --- a/src/ao_log.c +++ b/src/ao_log.c @@ -18,6 +18,7 @@  #include "ao.h"  static __pdata uint32_t	ao_log_current_pos; +static __pdata uint32_t ao_log_end_pos;  static __pdata uint32_t	ao_log_start_pos;  static __xdata uint8_t	ao_log_running;  static __xdata uint8_t	ao_log_mutex; @@ -41,16 +42,14 @@ ao_log_data(__xdata struct ao_log_record *log) __reentrant  	log->csum = 0;  	log->csum = ao_log_csum((__xdata uint8_t *) log);  	ao_mutex_get(&ao_log_mutex); { +		if (ao_log_current_pos >= ao_log_end_pos) +			ao_log_running = 0;  		if (ao_log_running) {  			wrote = 1; -			ao_ee_write(ao_log_current_pos, -				    (uint8_t *) log, -				    sizeof (struct ao_log_record)); +			ao_storage_write(ao_log_current_pos, +					 log, +					 sizeof (struct ao_log_record));  			ao_log_current_pos += sizeof (struct ao_log_record); -			if (ao_log_current_pos >= AO_EE_DATA_SIZE) -				ao_log_current_pos = 0; -			if (ao_log_current_pos == ao_log_start_pos) -				ao_log_running = 0;  		}  	} ao_mutex_put(&ao_log_mutex);  	return wrote; @@ -59,7 +58,7 @@ ao_log_data(__xdata struct ao_log_record *log) __reentrant  void  ao_log_flush(void)  { -	ao_ee_flush(); +	ao_storage_flush();  }  __xdata struct ao_log_record log; @@ -76,7 +75,7 @@ ao_log_dump_check_data(void)  static void  ao_log_scan(void)  { -	if (!ao_ee_read(0, (uint8_t *) &log, sizeof (struct ao_log_record))) +	if (!ao_storage_read(0, &log, sizeof (struct ao_log_record)))  		ao_panic(AO_PANIC_LOG);  	if (ao_log_dump_check_data() && log.type == AO_LOG_FLIGHT) {  		ao_flight_number = log.u.flight.flight + 1; @@ -97,6 +96,12 @@ typedef uint8_t check_log_size[1-(256 % sizeof(struct ao_log_record))] ;  void  ao_log(void)  { +	ao_storage_setup(); + +	/* For now, use all of the available space */ +	ao_log_current_pos = 0; +	ao_log_end_pos = ao_storage_config; +  	ao_log_scan();  	while (!ao_log_running) @@ -179,8 +184,6 @@ ao_log_init(void)  	ao_log_running = 0;  	/* For now, just log the flight starting at the begining of eeprom */ -	ao_log_start_pos = 0; -	ao_log_current_pos = ao_log_start_pos;  	ao_log_state = ao_flight_invalid;  	/* Create a task to log events to eeprom */  | 
