diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/ao.h | 2 | ||||
| -rw-r--r-- | src/core/ao_log_telem.c | 10 | ||||
| -rw-r--r-- | src/core/ao_report.c | 18 | 
3 files changed, 23 insertions, 7 deletions
| diff --git a/src/core/ao.h b/src/core/ao.h index f2e40fc6..a541d8ac 100644 --- a/src/core/ao.h +++ b/src/core/ao.h @@ -1436,6 +1436,8 @@ extern __xdata struct ao_ignition ao_ignition[2];  enum ao_igniter_status  ao_igniter_status(enum ao_igniter igniter); +extern __pdata uint8_t ao_igniter_present; +  void  ao_ignite_set_pins(void); diff --git a/src/core/ao_log_telem.c b/src/core/ao_log_telem.c index 193c11f3..096ad919 100644 --- a/src/core/ao_log_telem.c +++ b/src/core/ao_log_telem.c @@ -23,6 +23,7 @@ static __data uint8_t			ao_log_monitor_pos;  __pdata enum ao_flight_state		ao_flight_state;  __pdata int16_t				ao_max_height;	/* max of ao_height */  __pdata int16_t				sense_d, sense_m; +__pdata uint8_t				ao_igniter_present;  static void  ao_log_telem_track() { @@ -30,10 +31,15 @@ ao_log_telem_track() {  		switch (ao_log_single_write_data.telemetry.generic.type) {  		case AO_TELEMETRY_SENSOR_TELEMETRUM:  		case AO_TELEMETRY_SENSOR_TELEMINI: -			sense_d = ao_log_single_write_data.telemetry.sensor.sense_d; -			sense_m = ao_log_single_write_data.telemetry.sensor.sense_m;  			/* fall through ... */  		case AO_TELEMETRY_SENSOR_TELENANO: +			if (ao_log_single_write_data.telemetry.generic.type == AO_TELEMETRY_SENSOR_TELENANO) { +				ao_igniter_present = 0; +			} else { +				sense_d = ao_log_single_write_data.telemetry.sensor.sense_d; +				sense_m = ao_log_single_write_data.telemetry.sensor.sense_m; +				ao_igniter_present = 1; +			}  			if (ao_log_single_write_data.telemetry.sensor.height > ao_max_height) {  				ao_max_height = ao_log_single_write_data.telemetry.sensor.height;  			} diff --git a/src/core/ao_report.c b/src/core/ao_report.c index e0355d96..70f0b49d 100644 --- a/src/core/ao_report.c +++ b/src/core/ao_report.c @@ -119,7 +119,13 @@ ao_report_igniter_ready(enum ao_igniter igniter)  static void  ao_report_continuity(void) __reentrant  { -	uint8_t	c = (ao_report_igniter_ready(ao_igniter_drogue) | +	uint8_t	c; + +#if !HAS_IGNITE +	if (!ao_igniter_present) +		return; +#endif +	c = (ao_report_igniter_ready(ao_igniter_drogue) |  		     (ao_report_igniter_ready(ao_igniter_main) << 1));  	if (c) {  		while (c--) { @@ -145,9 +151,6 @@ ao_report_continuity(void) __reentrant  		}  	}  #endif -	c = 50; -	while (c-- && ao_flight_state == ao_flight_pad) -		pause(AO_MS_TO_TICKS(100));  }  #endif @@ -162,8 +165,13 @@ ao_report(void)  #if HAS_IGNITE_REPORT  		if (ao_flight_state == ao_flight_idle)  			ao_report_continuity(); -		while (ao_flight_state == ao_flight_pad) +		while (ao_flight_state == ao_flight_pad) { +			uint8_t	c;  			ao_report_continuity(); +			c = 50; +			while (c-- && ao_flight_state == ao_flight_pad) +				pause(AO_MS_TO_TICKS(100)); +		}  #endif  		__critical {  			while (ao_report_state == ao_flight_state) | 
