*/
#include "ao.h"
-
-#if IGNITE_ON_P2
-#define AO_IGNITER_DROGUE P2_3
-#define AO_IGNITER_MAIN P2_4
-#define AO_IGNITER_DIR P2DIR
-#define AO_IGNITER_DROGUE_BIT (1 << 3)
-#define AO_IGNITER_MAIN_BIT (1 << 4)
-#endif
-
-#if IGNITE_ON_P0
-#define AO_IGNITER_DROGUE P0_5
-#define AO_IGNITER_MAIN P0_4
-#define AO_IGNITER_DIR P0DIR
-#define AO_IGNITER_DROGUE_BIT (1 << 5)
-#define AO_IGNITER_MAIN_BIT (1 << 4)
-#endif
-
-/* test these values with real igniters */
-#define AO_IGNITER_OPEN 1000
-#define AO_IGNITER_CLOSED 7000
-#define AO_IGNITER_FIRE_TIME AO_MS_TO_TICKS(50)
-#define AO_IGNITER_CHARGE_TIME AO_MS_TO_TICKS(2000)
+#include <ao_data.h>
__xdata struct ao_ignition ao_ignition[2];
enum ao_igniter_status
ao_igniter_status(enum ao_igniter igniter)
{
- __xdata struct ao_adc adc;
+ __xdata struct ao_data packet;
__pdata int16_t value;
__pdata uint8_t request, firing, fired;
__critical {
- ao_adc_get(&adc);
+ ao_data_get(&packet);
request = ao_ignition[igniter].request;
fired = ao_ignition[igniter].fired;
firing = ao_ignition[igniter].firing;
value = (AO_IGNITER_CLOSED>>1);
switch (igniter) {
case ao_igniter_drogue:
- value = adc.sense_d;
+ value = packet.adc.sense_d;
break;
case ao_igniter_main:
- value = adc.sense_m;
+ value = packet.adc.sense_m;
break;
}
if (value < AO_IGNITER_OPEN)
void
ao_igniter_fire(enum ao_igniter igniter) __critical
{
+ ao_mutex_get(&ao_radio_mutex);
ao_ignition[igniter].firing = 1;
switch(ao_config.ignite_mode) {
case AO_IGNITE_MODE_DUAL:
break;
}
ao_ignition[igniter].firing = 0;
+ ao_mutex_put(&ao_radio_mutex);
}
void