altos: Stop storing pyro fired status in config block
[fw/altos] / src / kernel / ao_pyro.c
index b11d1080a54fbc1a7c25f5cb23a8eae492a7cf23..e5c30eec42da6e1504880684f773da59760bd482 100644 (file)
@@ -76,7 +76,7 @@ uint16_t      ao_pyro_fired;
 
 #if PYRO_DBG
 int pyro_dbg;
-#define DBG(...)       do { if (pyro_dbg) printf("\t%d: ", (int) (pyro - ao_config.pyro)); printf(__VA_ARGS__); } while (0)
+#define DBG(...)       do { if (pyro_dbg) { printf("\t%d: ", (int) (pyro - ao_config.pyro)); printf(__VA_ARGS__); } } while (0)
 #else
 #define DBG(...)
 #endif
@@ -181,7 +181,7 @@ ao_pyro_ready(struct ao_pyro *pyro)
                case ao_pyro_state_greater_or_equal:
                        if (ao_flight_state >= pyro->state_greater_or_equal)
                                continue;
-                       DBG("state %d >= %d\n", ao_flight_state, pyro->state_less);
+                       DBG("state %d < %d\n", ao_flight_state, pyro->state_greater_or_equal);
                        break;
 
                default:
@@ -239,11 +239,8 @@ ao_pyro_pins_fire(uint16_t fire)
        }
        ao_delay(ao_config.pyro_time);
        for (p = 0; p < AO_PYRO_NUM; p++) {
-               if (fire & (1 << p)) {
+               if (fire & (1 << p))
                        ao_pyro_pin_set(p, 0);
-                       ao_config.pyro[p].fired = 1;
-                       ao_pyro_fired |= (1 << p);
-               }
        }
        ao_delay(AO_MS_TO_TICKS(50));
 }
@@ -261,7 +258,7 @@ ao_pyro_check(void)
 
                /* Ignore igniters which have already fired
                 */
-               if (pyro->fired)
+               if (ao_pyro_fired & (1 << p))
                        continue;
 
                /* Ignore disabled igniters
@@ -296,7 +293,7 @@ ao_pyro_check(void)
                         * by setting the fired bit
                         */
                        if (!ao_pyro_ready(pyro)) {
-                               pyro->fired = 1;
+                               ao_pyro_fired |= (1 << p);
                                continue;
                        }
 
@@ -307,8 +304,10 @@ ao_pyro_check(void)
                fire |= (1 << p);
        }
 
-       if (fire)
+       if (fire) {
+               ao_pyro_fired |= fire;
                ao_pyro_pins_fire(fire);
+       }
 
        return any_waiting;
 }
@@ -438,7 +437,7 @@ ao_pyro_show(void)
                                if (ao_pyro_values[v].flag & AO_PYRO_8_BIT_VALUE)
                                        value = *((uint8_t *) ((char *) pyro + ao_pyro_values[v].offset));
                                else
-                                       value = *((int16_t *) ((char *) pyro + ao_pyro_values[v].offset));
+                                       value = *((int16_t *) (void *) ((char *) pyro + ao_pyro_values[v].offset));
                                printf ("%6d ", value);
                        } else {
                                printf ("       ");
@@ -482,7 +481,7 @@ ao_pyro_set(void)
                        break;
 
                for (c = 0; c < AO_PYRO_NAME_LEN - 1; c++) {
-                       if (ao_cmd_is_white())
+                       if (ao_cmd_is_white() || ao_cmd_lex_c == '\n')
                                break;
                        name[c] = ao_cmd_lex_c;
                        ao_cmd_lex();
@@ -517,7 +516,7 @@ ao_pyro_set(void)
                        } else {
                                if (negative)
                                        ao_cmd_lex_i = -ao_cmd_lex_i;
-                               *((int16_t *) ((char *) &pyro_tmp + ao_pyro_values[v].offset)) = ao_cmd_lex_i;
+                               *((int16_t *) (void *) ((char *) &pyro_tmp + ao_pyro_values[v].offset)) = ao_cmd_lex_i;
                        }
                }
        }