summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
422799d)
This also involved hacking up the code to allow for non-zero offsets
for the pad firing and continuity pins.
Signed-off-by: Keith Packard <keithp@keithp.com>
volatile __xdata struct ao_data ao_data_ring[AO_DATA_RING];
volatile __data uint8_t ao_data_head;
volatile __xdata struct ao_data ao_data_ring[AO_DATA_RING];
volatile __data uint8_t ao_data_head;
+#ifndef AO_ADC_FIRST_PIN
+#define AO_ADC_FIRST_PIN 0
+#endif
+
# ifdef TELENANO_V_0_1
ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | 1;
# else
# ifdef TELENANO_V_0_1
ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | 1;
# else
- ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | 0;
+ ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | AO_ADC_FIRST_PIN;
#endif /* telemini || telenano */
#ifdef TELEFIRE_V_0_1
#endif /* telemini || telenano */
#ifdef TELEFIRE_V_0_1
- a = (uint8_t __xdata *) (&ao_data_ring[ao_data_head].adc.sense[0] + sequence);
+ a = (uint8_t __xdata *) (&ao_data_ring[ao_data_head].adc.sense[0] + sequence - AO_ADC_FIRST_PIN);
a[0] = ADCL;
a[1] = ADCH;
if (sequence < 5)
a[0] = ADCL;
a[1] = ADCH;
if (sequence < 5)
+static void
+ao_siren(uint8_t v)
+{
+#ifdef AO_SIREN
+ ao_gpio_set(AO_SIREN_PORT, AO_SIREN_PIN, AO_SIREN, v);
+#else
+ ao_beep(v ? AO_BEEP_MID : 0);
+#endif
+}
+
+static void
+ao_strobe(uint8_t v)
+{
+#ifdef AO_STROBE
+ ao_gpio_set(AO_STROBE_PORT, AO_STROBE_PIN, AO_STROBE, v);
+#endif
+}
+
static void
ao_pad_run(void)
{
static void
ao_pad_run(void)
{
for (;;) {
while (!ao_pad_ignite)
ao_sleep(&ao_pad_ignite);
/*
* Actually set the pad bits
*/
for (;;) {
while (!ao_pad_ignite)
ao_sleep(&ao_pad_ignite);
/*
* Actually set the pad bits
*/
- AO_PAD_PORT = (AO_PAD_PORT & (~AO_PAD_ALL_PINS)) | ao_pad_ignite;
+ pins = 0;
+#if AO_PAD_NUM > 0
+ if (ao_pad_ignite & (1 << 0))
+ pins |= (1 << AO_PAD_PIN_0);
+#endif
+#if AO_PAD_NUM > 1
+ if (ao_pad_ignite & (1 << 1))
+ pins |= (1 << AO_PAD_PIN_1);
+#endif
+#if AO_PAD_NUM > 2
+ if (ao_pad_ignite & (1 << 2))
+ pins |= (1 << AO_PAD_PIN_2);
+#endif
+#if AO_PAD_NUM > 3
+ if (ao_pad_ignite & (1 << 3))
+ pins |= (1 << AO_PAD_PIN_3);
+#endif
+ AO_PAD_PORT = (AO_PAD_PORT & (~AO_PAD_ALL_PINS)) | pins;
while (ao_pad_ignite) {
ao_pad_ignite = 0;
while (ao_pad_ignite) {
ao_pad_ignite = 0;
ao_delay(AO_PAD_FIRE_TIME);
}
AO_PAD_PORT &= ~(AO_PAD_ALL_PINS);
}
}
ao_delay(AO_PAD_FIRE_TIME);
}
AO_PAD_PORT &= ~(AO_PAD_ALL_PINS);
}
}
-#define AO_PAD_ARM_BEEP_INTERVAL 200
+#define AO_PAD_ARM_SIREN_INTERVAL 200
static void
ao_pad_monitor(void)
static void
ao_pad_monitor(void)
ao_pad_armed = 0;
if (ao_pad_armed) {
ao_pad_armed = 0;
if (ao_pad_armed) {
beeping = 1;
} else if (query.arm_status == AO_PAD_ARM_STATUS_ARMED && !beeping) {
if (arm_beep_time == 0) {
beeping = 1;
} else if (query.arm_status == AO_PAD_ARM_STATUS_ARMED && !beeping) {
if (arm_beep_time == 0) {
- arm_beep_time = AO_PAD_ARM_BEEP_INTERVAL;
+ arm_beep_time = AO_PAD_ARM_SIREN_INTERVAL;
}
--arm_beep_time;
} else if (beeping) {
beeping = 0;
}
--arm_beep_time;
} else if (beeping) {
beeping = 0;
+ ao_siren(0);
+ ao_strobe(0);
int16_t time_difference;
int8_t ret;
int16_t time_difference;
int8_t ret;
- ao_beep_for(AO_BEEP_MID, AO_MS_TO_TICKS(200));
ao_pad_box = 0;
ao_led_set(0);
ao_led_on(AO_LED_POWER);
ao_pad_box = 0;
ao_led_set(0);
ao_led_on(AO_LED_POWER);
- if (command.channels & ~(AO_PAD_ALL_PINS))
+ if (command.channels & ~(AO_PAD_ALL_CHANNELS))
break;
time_difference = command.tick - ao_time();
break;
time_difference = command.tick - ao_time();
#endif
#if AO_PAD_NUM > 3
ao_enable_output(AO_PAD_PORT, AO_PAD_PIN_3, AO_PAD_3, 0);
#endif
#if AO_PAD_NUM > 3
ao_enable_output(AO_PAD_PORT, AO_PAD_PIN_3, AO_PAD_3, 0);
+#endif
+#ifdef AO_STROBE
+ ao_enable_output(AO_STROBE_PORT, AO_STROBE_PIN, AO_STROBE, 0);
+#endif
+#ifdef AO_SIREN
+ ao_enable_output(AO_SIREN_PORT, AO_SIREN_PIN, AO_SIREN, 0);
#endif
ao_cmd_register(&ao_pad_cmds[0]);
ao_add_task(&ao_pad_task, ao_pad, "pad listener");
#endif
ao_cmd_register(&ao_pad_cmds[0]);
ao_add_task(&ao_pad_task, ao_pad, "pad listener");
#define PACKET_HAS_MASTER 0
#define PACKET_HAS_SLAVE 0
#define PACKET_HAS_MASTER 0
#define PACKET_HAS_SLAVE 0
-#define AO_LED_CONTINUITY(c) (1 << (c))
-#define AO_LED_CONTINUITY_MASK (0xf)
+#define AO_LED_CONTINUITY(c) (1 << ((c) + 2))
+#define AO_LED_CONTINUITY_MASK (0xc)
#define AO_LED_RX 0x10
#define AO_LED_TX 0x20
#define AO_LED_ARMED 0x40
#define AO_LED_RX 0x10
#define AO_LED_TX 0x20
#define AO_LED_ARMED 0x40
#define AO_PCA9922_CS_PIN 4
#define AO_PCA9922_CS P1_4
#define AO_PCA9922_CS_PIN 4
#define AO_PCA9922_CS P1_4
#define AO_PAD_PORT P1
#define AO_PAD_DIR P1DIR
#define AO_PAD_PORT P1
#define AO_PAD_DIR P1DIR
-#define AO_PAD_PIN_0 0
-#define AO_PAD_0 P1_0
-#define AO_PAD_PIN_1 1
-#define AO_PAD_1 P1_1
-#define AO_PAD_PIN_2 2
-#define AO_PAD_2 P1_2
-#define AO_PAD_PIN_3 3
-#define AO_PAD_3 P1_3
-#define AO_PAD_ALL_PINS ((1 << AO_PAD_PIN_0) | (1 << AO_PAD_PIN_1) | (1 << AO_PAD_PIN_2) | (1 << AO_PAD_PIN_3))
+
+#define AO_PAD_PIN_0 2
+#define AO_PAD_0 P1_2
+#define AO_PAD_ADC_0 2
+
+#define AO_PAD_PIN_1 3
+#define AO_PAD_1 P1_3
+#define AO_PAD_ADC_1 3
+
+#define AO_PAD_ALL_PINS ((1 << AO_PAD_PIN_0) | (1 << AO_PAD_PIN_1))
+#define AO_PAD_ALL_CHANNELS ((1 << 0) | (1 << 1))
+
+#define AO_SIREN_PORT P1
+#define AO_SIREN_DIR P1DIR
+#define AO_SIREN_PIN 0
+#define AO_SIREN P1_0
+
+#define AO_STROBE_PORT P1
+#define AO_STROBE_DIR P1DIR
+#define AO_STROBE_PIN 1
+#define AO_STROBE P1_1
/* test these values with real igniters */
#define AO_PAD_RELAY_CLOSED 3524
#define AO_PAD_NO_IGNITER 16904
#define AO_PAD_GOOD_IGNITER 22514
/* test these values with real igniters */
#define AO_PAD_RELAY_CLOSED 3524
#define AO_PAD_NO_IGNITER 16904
#define AO_PAD_GOOD_IGNITER 22514
+#define AO_PAD_ADC_PYRO 4
+#define AO_PAD_ADC_BATT 5
+
+#define AO_ADC_FIRST_PIN 2
+
+ int16_t sense[AO_PAD_NUM];
int16_t pyro;
int16_t batt;
};
#define AO_ADC_DUMP(p) \
int16_t pyro;
int16_t batt;
};
#define AO_ADC_DUMP(p) \
- printf ("tick: %5u 0: %5d 1: %5d 2: %5d 3: %5d pyro: %5d batt %5d\n", \
+ printf ("tick: %5u 0: %5d 1: %5d pyro: %5d batt %5d\n", \
(p)->tick, \
(p)->adc.sense[0], \
(p)->adc.sense[1], \
(p)->tick, \
(p)->adc.sense[0], \
(p)->adc.sense[1], \
- (p)->adc.sense[2], \
- (p)->adc.sense[3], \
(p)->adc.pyro, \
(p)->adc.batt)
(p)->adc.pyro, \
(p)->adc.batt)
-#define AO_ADC_PINS ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5))
+#define AO_ADC_PINS ((1 << AO_PAD_ADC_0) | (1 << AO_PAD_ADC_1) | (1 << AO_PAD_ADC_PYRO) | (1 << AO_PAD_ADC_BATT))