- if (pyro > VOLTS_TO_PYRO(4)) {
- for (c = 0; c < AO_PAD_NUM; c++) {
- int16_t sense = packet->adc.sense[c];
+ if (pyro > VOLTS_TO_PYRO(4))
+ query.arm_status = AO_PAD_ARM_STATUS_ARMED;
+ else if (pyro < VOLTS_TO_PYRO(1))
+ query.arm_status = AO_PAD_ARM_STATUS_DISARMED;
+ else
+ query.arm_status = AO_PAD_ARM_STATUS_UNKNOWN;
+
+ for (c = 0; c < AO_PAD_NUM; c++) {
+ int16_t sense = packet->adc.sense[c];
+ uint8_t status = AO_PAD_IGNITER_STATUS_UNKNOWN;
+
+ if (query.arm_status == AO_PAD_ARM_STATUS_ARMED) {
+ /*
+ * pyro is run through a divider, so pyro = v_pyro * 27 / 127 ~= v_pyro / 20
+ * v_pyro = pyro * 127 / 27
+ *
+ * v_pyro \
+ * 100k igniter
+ * output /
+ * 100k \
+ * sense relay
+ * 27k /
+ * gnd ---
+ *
+ * If the relay is closed, then sense will be 0
+ * If no igniter is present, then sense will be v_pyro * 27k/227k = pyro * 127 / 227 ~= pyro/2
+ * If igniter is present, then sense will be v_pyro * 27k/127k ~= v_pyro / 20 = pyro
+ */