*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
#ifndef _AO_PINS_H_
#define _AO_PINS_H_
-#define HAS_TASK_QUEUE 1
/* 8MHz High speed external crystal */
#define AO_HSE 8000000
#define ao_gps_set_speed ao_serial3_set_speed
#define ao_gps_fifo (ao_stm_usart3.rx_fifo)
+#define AO_CONFIG_DEFAULT_FLIGHT_LOG_MAX (1024 * 1024)
+#define AO_CONFIG_MAX_SIZE 1024
+#define LOG_ERASE_MARK 0x55
+#define LOG_MAX_ERASE 128
+#define AO_LOG_FORMAT AO_LOG_FORMAT_TELEMEGA
+
#define HAS_EEPROM 1
#define USE_INTERNAL_FLASH 0
+#define USE_EEPROM_CONFIG 1
+#define USE_STORAGE_CONFIG 0
#define HAS_USB 1
#define HAS_BEEP 1
+#define BEEPER_TIMER 3
+#define BEEPER_CHANNEL 1
+#define BEEPER_PORT (&stm_gpioc)
+#define BEEPER_PIN 6
+#define HAS_BATTERY_REPORT 1
#define HAS_RADIO 1
#define HAS_TELEMETRY 1
#define HAS_APRS 1
+#define HAS_COMPANION 1
#define HAS_SPI_1 1
#define SPI_1_PA5_PA6_PA7 1 /* Barometer */
#define HAS_GPS 1
#define HAS_FLIGHT 1
#define HAS_ADC 1
+#define HAS_ADC_TEMP 1
#define HAS_LOG 1
/*
#define HAS_IGNITE 1
#define HAS_IGNITE_REPORT 1
-#define AO_SENSE_DROGUE(p) ((p)->adc.sense[0])
-#define AO_SENSE_MAIN(p) ((p)->adc.sense[1])
+#define AO_SENSE_PYRO(p,n) ((p)->adc.sense[n])
+#define AO_SENSE_DROGUE(p) ((p)->adc.sense[4])
+#define AO_SENSE_MAIN(p) ((p)->adc.sense[5])
#define AO_IGNITER_CLOSED 400
#define AO_IGNITER_OPEN 60
-#define AO_IGNITER_DROGUE_PORT (&stm_gpiod)
-#define AO_IGNITER_DROGUE_PIN 6
+/* Pyro A */
+#define AO_PYRO_PORT_0 (&stm_gpiod)
+#define AO_PYRO_PIN_0 6
-#define AO_IGNITER_MAIN_PORT (&stm_gpiod)
-#define AO_IGNITER_MAIN_PIN 7
+/* Pyro B */
+#define AO_PYRO_PORT_1 (&stm_gpiod)
+#define AO_PYRO_PIN_1 7
-#define AO_PYRO_PORT_0 (&stm_gpiob)
-#define AO_PYRO_PIN_0 5
+/* Pyro C */
+#define AO_PYRO_PORT_2 (&stm_gpiob)
+#define AO_PYRO_PIN_2 5
-#define AO_PYRO_PORT_1 (&stm_gpioe)
-#define AO_PYRO_PIN_1 4
+/* Pyro D */
+#define AO_PYRO_PORT_3 (&stm_gpioe)
+#define AO_PYRO_PIN_3 4
-#define AO_PYRO_PORT_2 (&stm_gpioe)
-#define AO_PYRO_PIN_2 6
+/* Drogue */
+#define AO_IGNITER_DROGUE_PORT (&stm_gpioe)
+#define AO_IGNITER_DROGUE_PIN 6
-#define AO_PYRO_PORT_3 (&stm_gpioe)
-#define AO_PYRO_PIN_3 5
+/* Main */
+#define AO_IGNITER_MAIN_PORT (&stm_gpioe)
+#define AO_IGNITER_MAIN_PIN 5
/* Number of general purpose pyro channels available */
#define AO_PYRO_NUM 4
-#define AO_SENSE_PYRO(a,p) ((a)->adc.sense[(p) + 2])
-
-#define AO_IGNITER_SET_DROGUE(v) stm_gpio_set(AO_IGNITER_DROGUE_PORT, AO_IGNITER_DROGUE_PIN, v)
-#define AO_IGNITER_SET_MAIN(v) stm_gpio_set(AO_IGNITER_MAIN_PORT, AO_IGNITER_MAIN_PIN, v)
-
/*
* ADC
*/
int16_t sense[AO_ADC_NUM_SENSE];
int16_t v_batt;
int16_t v_pbatt;
- int16_t accel_ref;
- int16_t accel;
int16_t temp;
};
+#define AO_ADC_DUMP(p) \
+ printf("tick: %5u A: %5d B: %5d C: %5d D: %5d drogue: %5d main: %5d batt: %5d pbatt: %5d temp: %5d\n", \
+ (p)->tick, \
+ (p)->adc.sense[0], (p)->adc.sense[1], (p)->adc.sense[2], \
+ (p)->adc.sense[3], (p)->adc.sense[4], (p)->adc.sense[5], \
+ (p)->adc.v_batt, (p)->adc.v_pbatt, (p)->adc.temp)
+
#define AO_ADC_SENSE_A 0
#define AO_ADC_SENSE_A_PORT (&stm_gpioa)
#define AO_ADC_SENSE_A_PIN 0
#define AO_ADC_SENSE_D_PORT (&stm_gpioa)
#define AO_ADC_SENSE_D_PIN 3
-#define AO_ADC_SENSE_E 4
-#define AO_ADC_SENSE_E_PORT (&stm_gpioa)
-#define AO_ADC_SENSE_E_PIN 4
+#define AO_ADC_SENSE_DROGUE 4
+#define AO_ADC_SENSE_DROGUE_PORT (&stm_gpioa)
+#define AO_ADC_SENSE_DROGUE_PIN 4
-#define AO_ADC_SENSE_F 22
-#define AO_ADC_SENSE_F_PORT (&stm_gpioe)
-#define AO_ADC_SENSE_F_PIN 7
+#define AO_ADC_SENSE_MAIN 22
+#define AO_ADC_SENSE_MAIN_PORT (&stm_gpioe)
+#define AO_ADC_SENSE_MAIN_PIN 7
#define AO_ADC_V_BATT 8
#define AO_ADC_V_BATT_PORT (&stm_gpiob)
#define AO_ADC_V_PBATT_PORT (&stm_gpiob)
#define AO_ADC_V_PBATT_PIN 1
-#define AO_ADC_ACCEL_REF 10
-#define AO_ADC_ACCEL_REF_PORT (&stm_gpioc)
-#define AO_ADC_ACCEL_REF_PIN 0
-
-#define AO_ADC_ACCEL 11
-#define AO_ADC_ACCEL_PORT (&stm_gpioc)
-#define AO_ADC_ACCEL_PIN 1
-
#define AO_ADC_TEMP 16
#define AO_ADC_RCC_AHBENR ((1 << STM_RCC_AHBENR_GPIOAEN) | \
(1 << STM_RCC_AHBENR_GPIOEEN) | \
- (1 << STM_RCC_AHBENR_GPIOBEN) | \
- (1 << STM_RCC_AHBENR_GPIOCEN))
+ (1 << STM_RCC_AHBENR_GPIOBEN))
-#define AO_NUM_ADC_PIN (AO_ADC_NUM_SENSE + 4)
+#define AO_NUM_ADC_PIN (AO_ADC_NUM_SENSE + 2)
#define AO_ADC_PIN0_PORT AO_ADC_SENSE_A_PORT
#define AO_ADC_PIN0_PIN AO_ADC_SENSE_A_PIN
#define AO_ADC_PIN2_PIN AO_ADC_SENSE_C_PIN
#define AO_ADC_PIN3_PORT AO_ADC_SENSE_D_PORT
#define AO_ADC_PIN3_PIN AO_ADC_SENSE_D_PIN
-#define AO_ADC_PIN4_PORT AO_ADC_SENSE_E_PORT
-#define AO_ADC_PIN4_PIN AO_ADC_SENSE_E_PIN
-#define AO_ADC_PIN5_PORT AO_ADC_SENSE_F_PORT
-#define AO_ADC_PIN5_PIN AO_ADC_SENSE_F_PIN
+#define AO_ADC_PIN4_PORT AO_ADC_SENSE_DROGUE_PORT
+#define AO_ADC_PIN4_PIN AO_ADC_SENSE_DROGUE_PIN
+#define AO_ADC_PIN5_PORT AO_ADC_SENSE_MAIN_PORT
+#define AO_ADC_PIN5_PIN AO_ADC_SENSE_MAIN_PIN
#define AO_ADC_PIN6_PORT AO_ADC_V_BATT_PORT
#define AO_ADC_PIN6_PIN AO_ADC_V_BATT_PIN
#define AO_ADC_PIN7_PORT AO_ADC_V_PBATT_PORT
#define AO_ADC_PIN7_PIN AO_ADC_V_PBATT_PIN
-#define AO_ADC_PIN8_PORT AO_ADC_ACCEL_REF_PORT
-#define AO_ADC_PIN8_PIN AO_ADC_ACCEL_REF_PIN
-#define AO_ADC_PIN9_PORT AO_ADC_ACCEL_PORT
-#define AO_ADC_PIN9_PIN AO_ADC_ACCEL_PIN
-#define AO_NUM_ADC (AO_ADC_NUM_SENSE + 5)
+#define AO_NUM_ADC (AO_ADC_NUM_SENSE + 3)
#define AO_ADC_SQ1 AO_ADC_SENSE_A
#define AO_ADC_SQ2 AO_ADC_SENSE_B
#define AO_ADC_SQ3 AO_ADC_SENSE_C
#define AO_ADC_SQ4 AO_ADC_SENSE_D
-#define AO_ADC_SQ5 AO_ADC_SENSE_E
-#define AO_ADC_SQ6 AO_ADC_SENSE_F
+#define AO_ADC_SQ5 AO_ADC_SENSE_DROGUE
+#define AO_ADC_SQ6 AO_ADC_SENSE_MAIN
#define AO_ADC_SQ7 AO_ADC_V_BATT
#define AO_ADC_SQ8 AO_ADC_V_PBATT
-#define AO_ADC_SQ9 AO_ADC_ACCEL_REF
-#define AO_ADC_SQ10 AO_ADC_ACCEL
-#define AO_ADC_SQ11 AO_ADC_TEMP
+#define AO_ADC_SQ9 AO_ADC_TEMP
+
+/*
+ * Voltage divider on ADC battery sampler
+ */
+#define AO_BATTERY_DIV_PLUS 56 /* 5.6k */
+#define AO_BATTERY_DIV_MINUS 100 /* 10k */
+
+/*
+ * Voltage divider on ADC igniter samplers
+ */
+#define AO_IGNITE_DIV_PLUS 100 /* 100k */
+#define AO_IGNITE_DIV_MINUS 27 /* 27k */
+
+/*
+ * ADC reference in decivolts
+ */
+#define AO_ADC_REFERENCE_DV 33
/*
* Pressure sensor settings
#define AO_CC1120_MARC_GPIO 3
#define AO_CC1120_MARC_GPIO_IOCFG CC1120_IOCFG3
-
#define HAS_BOOT_RADIO 0
/*
#define AO_MPU6000_INT_PORT (&stm_gpioc)
#define AO_MPU6000_INT_PIN 13
#define AO_MPU6000_I2C_INDEX STM_I2C_INDEX(1)
+#define HAS_IMU 1
/*
* mma655x
*/
#define HAS_MMA655X 1
+#define AO_MMA655X_INVERT 0
#define AO_MMA655X_SPI_INDEX AO_SPI_1_PE13_PE14_PE15
#define AO_MMA655X_CS_PORT (&stm_gpiod)
#define AO_MMA655X_CS_PIN 4