Yes, this is still an ugly kludge, but it's easy.
Signed-off-by: Keith Packard <keithp@keithp.com>
}
struct ao_mpu6000_sample ao_mpu6000_current;
+uint8_t ao_mpu6000_valid;
static void
ao_mpu6000(void)
ao_mpu6000_sample(&ao_mpu6000_next);
ao_arch_critical(
ao_mpu6000_current = ao_mpu6000_next;
+ ao_mpu6000_valid = 1;
);
ao_delay(0);
}
ao_mpu6000_init(void)
{
ao_mpu6000_configured = 0;
+ ao_mpu6000_valid = 0;
ao_add_task(&ao_mpu6000_task, ao_mpu6000, "mpu6000");
ao_cmd_register(&ao_mpu6000_cmds[0]);
};
extern struct ao_mpu6000_sample ao_mpu6000_current;
+extern uint8_t ao_mpu6000_valid;
void
ao_mpu6000_init(void);
}
struct ao_ms5607_sample ao_ms5607_current;
+uint8_t ao_ms5607_valid;
static void
ao_ms5607(void)
ao_ms5607_sample(&ao_ms5607_next);
ao_arch_critical(
ao_ms5607_current = ao_ms5607_next;
+ ao_ms5607_valid = 1;
);
ao_delay(0);
}
ao_ms5607_init(void)
{
ms5607_configured = 0;
+ ao_ms5607_valid = 0;
ao_cmd_register(&ao_ms5607_cmds[0]);
ao_spi_init_cs(AO_MS5607_CS_GPIO, (1 << AO_MS5607_CS));
uint32_t temp; /* raw 24 bit sensor */
};
+extern uint8_t ao_ms5607_valid;
extern struct ao_ms5607_sample ao_ms5607_current;
struct ao_ms5607_value {
*/
static void ao_adc_done(int index)
{
+ uint8_t step = 1;
ao_data_ring[ao_data_head].tick = ao_time();
#if HAS_MPU6000
+ if (!ao_mpu6000_valid)
+ step = 0;
ao_data_ring[ao_data_head].mpu6000 = ao_mpu6000_current;
#endif
#if HAS_MS5607
+ if (!ao_ms5607_valid)
+ step = 0;
ao_data_ring[ao_data_head].ms5607 = ao_ms5607_current;
#endif
- ao_data_head = ao_data_ring_next(ao_data_head);
- ao_wakeup((void *) &ao_data_head);
+ if (step) {
+ ao_data_head = ao_data_ring_next(ao_data_head);
+ ao_wakeup((void *) &ao_data_head);
+ }
ao_dma_done_transfer(STM_DMA_INDEX(STM_DMA_CHANNEL_ADC1));
ao_adc_ready = 1;
}