summaryrefslogtreecommitdiff
path: root/src/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/ao_config.c4
-rw-r--r--src/kernel/ao_log.h11
-rw-r--r--src/kernel/ao_log_fireone.c (renamed from src/kernel/ao_log_firetwo.c)4
-rw-r--r--src/kernel/ao_log_mega.c2
-rw-r--r--src/kernel/ao_log_micro.c5
-rw-r--r--src/kernel/ao_log_micro.h2
-rw-r--r--src/kernel/ao_microkalman.c32
-rw-r--r--src/kernel/ao_report_micro.c1
-rw-r--r--src/kernel/ao_report_micro.h21
-rw-r--r--src/kernel/ao_telemetry.c8
-rw-r--r--src/kernel/ao_telemetry.h4
-rw-r--r--src/kernel/ao_tracker.c22
-rw-r--r--src/kernel/ao_usb.h2
13 files changed, 98 insertions, 20 deletions
diff --git a/src/kernel/ao_config.c b/src/kernel/ao_config.c
index 5dda1c85..25634ffc 100644
--- a/src/kernel/ao_config.c
+++ b/src/kernel/ao_config.c
@@ -35,6 +35,10 @@ __pdata uint8_t ao_config_loaded;
__pdata uint8_t ao_config_dirty;
__xdata uint8_t ao_config_mutex;
+#if HAS_FORCE_FREQ
+__xdata uint8_t ao_force_freq;
+#endif
+
#ifndef AO_CONFIG_DEFAULT_APRS_INTERVAL
#define AO_CONFIG_DEFAULT_APRS_INTERVAL 0
#endif
diff --git a/src/kernel/ao_log.h b/src/kernel/ao_log.h
index a2f2c6ca..aca669db 100644
--- a/src/kernel/ao_log.h
+++ b/src/kernel/ao_log.h
@@ -45,7 +45,7 @@ extern __pdata enum ao_flight_state ao_log_state;
#define AO_LOG_FORMAT_TELEMETRY 3 /* 32 byte ao_telemetry records */
#define AO_LOG_FORMAT_TELESCIENCE 4 /* 32 byte typed telescience records */
#define AO_LOG_FORMAT_TELEMEGA_OLD 5 /* 32 byte typed telemega records */
-#define AO_LOG_FORMAT_EASYMINI 6 /* 16-byte MS5607 baro only, 3.0V supply */
+#define AO_LOG_FORMAT_EASYMINI1 6 /* 16-byte MS5607 baro only, 3.0V supply */
#define AO_LOG_FORMAT_TELEMETRUM 7 /* 16-byte typed telemetrum records */
#define AO_LOG_FORMAT_TELEMINI2 8 /* 16-byte MS5607 baro only, 3.3V supply, cc1111 SoC */
#define AO_LOG_FORMAT_TELEGPS 9 /* 32 byte telegps records */
@@ -53,6 +53,7 @@ extern __pdata enum ao_flight_state ao_log_state;
#define AO_LOG_FORMAT_DETHERM 11 /* 16-byte MS5607 baro only, no ADC */
#define AO_LOG_FORMAT_TELEMINI3 12 /* 16-byte MS5607 baro only, 3.3V supply, stm32f042 SoC */
#define AO_LOG_FORMAT_TELEFIRETWO 13 /* 32-byte test stand data */
+#define AO_LOG_FORMAT_EASYMINI2 14 /* 16-byte MS5607 baro only, 3.3V supply, stm32f042 SoC */
#define AO_LOG_FORMAT_NONE 127 /* No log at all */
extern __code uint8_t ao_log_format;
@@ -252,8 +253,8 @@ struct ao_log_mega {
int16_t gyro_y; /* 20 */
int16_t gyro_z; /* 22 */
int16_t mag_x; /* 24 */
- int16_t mag_y; /* 26 */
- int16_t mag_z; /* 28 */
+ int16_t mag_z; /* 26 */
+ int16_t mag_y; /* 28 */
int16_t accel; /* 30 */
} sensor; /* 32 */
/* AO_LOG_TEMP_VOLT */
@@ -309,9 +310,7 @@ struct ao_log_firetwo {
/* AO_LOG_FLIGHT */
struct {
uint16_t flight; /* 4 */
- uint16_t idle_pressure; /* 6 */
- uint16_t idle_thrust; /* 8 */
- } flight; /* 16 */
+ } flight; /* 6 */
/* AO_LOG_STATE */
struct {
uint16_t state; /* 4 */
diff --git a/src/kernel/ao_log_firetwo.c b/src/kernel/ao_log_fireone.c
index 4b42abe4..1a82673d 100644
--- a/src/kernel/ao_log_firetwo.c
+++ b/src/kernel/ao_log_fireone.c
@@ -75,8 +75,6 @@ typedef uint8_t check_log_size[1-(256 % sizeof(struct ao_log_firetwo))] ;
void
ao_log(void)
{
- uint16_t ao_idle_pressure = 0; // write code to capture pre-test values someday
- uint16_t ao_idle_thrust = 0;
uint16_t ao_flight_state = ao_flight_startup;
ao_storage_setup();
@@ -89,8 +87,6 @@ ao_log(void)
log.type = AO_LOG_FLIGHT;
log.tick = ao_time();
- log.u.flight.idle_pressure = ao_idle_pressure;
- log.u.flight.idle_thrust = ao_idle_thrust;
log.u.flight.flight = ao_flight_number;
ao_log_firetwo(&log);
diff --git a/src/kernel/ao_log_mega.c b/src/kernel/ao_log_mega.c
index a0212198..b86abe7a 100644
--- a/src/kernel/ao_log_mega.c
+++ b/src/kernel/ao_log_mega.c
@@ -135,8 +135,8 @@ ao_log(void)
#endif
#if HAS_HMC5883
log.u.sensor.mag_x = ao_data_ring[ao_log_data_pos].hmc5883.x;
- log.u.sensor.mag_y = ao_data_ring[ao_log_data_pos].hmc5883.y;
log.u.sensor.mag_z = ao_data_ring[ao_log_data_pos].hmc5883.z;
+ log.u.sensor.mag_y = ao_data_ring[ao_log_data_pos].hmc5883.y;
#endif
log.u.sensor.accel = ao_data_accel(&ao_data_ring[ao_log_data_pos]);
ao_log_mega(&log);
diff --git a/src/kernel/ao_log_micro.c b/src/kernel/ao_log_micro.c
index aa0f5c76..d6f9c5a8 100644
--- a/src/kernel/ao_log_micro.c
+++ b/src/kernel/ao_log_micro.c
@@ -19,7 +19,12 @@
#include <ao.h>
#include <ao_micropeak.h>
#include <ao_log_micro.h>
+#ifndef ao_async_byte
#include <ao_async.h>
+#else
+#include <ao_serial.h>
+#endif
+#include <ao_storage.h>
static uint16_t ao_log_offset = STARTING_LOG_OFFSET;
diff --git a/src/kernel/ao_log_micro.h b/src/kernel/ao_log_micro.h
index ec5cf3ed..f0243028 100644
--- a/src/kernel/ao_log_micro.h
+++ b/src/kernel/ao_log_micro.h
@@ -23,7 +23,9 @@
#define PA_MIN_OFFSET 4
#define N_SAMPLES_OFFSET 8
#define STARTING_LOG_OFFSET 10
+#ifndef MAX_LOG_OFFSET
#define MAX_LOG_OFFSET 512
+#endif
void
ao_log_micro_save(void);
diff --git a/src/kernel/ao_microkalman.c b/src/kernel/ao_microkalman.c
index ff543cc4..3cfb87cc 100644
--- a/src/kernel/ao_microkalman.c
+++ b/src/kernel/ao_microkalman.c
@@ -32,10 +32,32 @@
#include <ao_kalman.h>
+#ifndef AO_MK_STEP_96MS
+#define AO_MK_STEP_96MS 1
+
+#endif
+
+#if AO_MK_STEP_100MS
+#define AO_MK_TIME_STEP 0.1
+
+#define AO_K0_10 AO_MK2_BARO_K0_10
+#define AO_K1_10 AO_MK2_BARO_K1_10
+#define AO_K2_10 AO_MK2_BARO_K2_10
+#endif
+
+#if AO_MK_STEP_96MS
+#define AO_MK_TIME_STEP 0.096
+
+#define AO_K0_10 AO_MK_BARO_K0_10
+#define AO_K1_10 AO_MK_BARO_K1_10
+#define AO_K2_10 AO_MK_BARO_K2_10
+#endif
+
/* Basic time step (96ms) */
-#define AO_MK_STEP to_fix_v(0.096)
+#define AO_MK_STEP to_fix_v(AO_MK_TIME_STEP)
+
/* step ** 2 / 2 */
-#define AO_MK_STEP_2_2 to_fix_v(0.004608)
+#define AO_MK_STEP_2_2 to_fix_v(AO_MK_TIME_STEP * AO_MK_TIME_STEP / 2.0)
uint32_t ao_k_pa; /* 24.8 fixed point */
int32_t ao_k_pa_speed; /* 16.16 fixed point */
@@ -66,9 +88,9 @@ ao_microkalman_correct(void)
e = pa - from_fix8(ao_k_pa);
- ao_k_pa += fix16_to_fix8((int32_t) e * AO_MK_BARO_K0_10);
- ao_k_pa_speed += (int32_t) e * AO_MK_BARO_K1_10;
- ao_k_pa_accel += (int32_t) e * AO_MK_BARO_K2_10;
+ ao_k_pa += fix16_to_fix8((int32_t) e * AO_K0_10);
+ ao_k_pa_speed += (int32_t) e * AO_K1_10;
+ ao_k_pa_accel += (int32_t) e * AO_K2_10;
ao_pa = from_fix8(ao_k_pa);
ao_pa_speed = from_fix(ao_k_pa_speed);
ao_pa_accel = from_fix(ao_k_pa_accel);
diff --git a/src/kernel/ao_report_micro.c b/src/kernel/ao_report_micro.c
index af68457d..9c7afdc5 100644
--- a/src/kernel/ao_report_micro.c
+++ b/src/kernel/ao_report_micro.c
@@ -17,6 +17,7 @@
*/
#include <ao.h>
+#include <ao_report_micro.h>
#define mid(time) ao_led_for(AO_LED_REPORT, time)
#define pause(time) ao_delay(time)
diff --git a/src/kernel/ao_report_micro.h b/src/kernel/ao_report_micro.h
new file mode 100644
index 00000000..bd6c0622
--- /dev/null
+++ b/src/kernel/ao_report_micro.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright © 2017 Keith Packard <keithp@keithp.com>
+ *
+ * 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, 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ */
+
+#ifndef _AO_REPORT_MICRO_H_
+#define _AO_REPORT_MICRO_H_
+
+void
+ao_report_altitude(void);
+
+#endif /* _AO_REPORT_MICRO_H_ */
diff --git a/src/kernel/ao_telemetry.c b/src/kernel/ao_telemetry.c
index fa817824..2ae1e41b 100644
--- a/src/kernel/ao_telemetry.c
+++ b/src/kernel/ao_telemetry.c
@@ -160,8 +160,8 @@ ao_send_mega_sensor(void)
#if HAS_HMC5883
telemetry.mega_sensor.mag_x = packet->hmc5883.x;
- telemetry.mega_sensor.mag_y = packet->hmc5883.y;
telemetry.mega_sensor.mag_z = packet->hmc5883.z;
+ telemetry.mega_sensor.mag_y = packet->hmc5883.y;
#endif
ao_telemetry_send();
@@ -296,6 +296,10 @@ static __pdata int8_t ao_telemetry_config_max;
static __pdata int8_t ao_telemetry_config_cur;
static __pdata uint16_t ao_telemetry_flight_number;
+#ifndef ao_telemetry_battery_convert
+#define ao_telemetry_battery_convert(a) (a)
+#endif
+
static void
ao_send_configuration(void)
{
@@ -308,7 +312,7 @@ ao_send_configuration(void)
telemetry.configuration.config_minor = AO_CONFIG_MINOR;
#if AO_idProduct_NUMBER == 0x25 && HAS_ADC
/* TeleGPS gets battery voltage instead of apogee delay */
- telemetry.configuration.apogee_delay = ao_data_ring[ao_data_ring_prev(ao_data_head)].adc.v_batt;
+ telemetry.configuration.apogee_delay = ao_telemetry_battery_convert(ao_data_ring[ao_data_ring_prev(ao_data_head)].adc.v_batt);
#else
telemetry.configuration.apogee_delay = ao_config.apogee_delay;
telemetry.configuration.main_deploy = ao_config.main_deploy;
diff --git a/src/kernel/ao_telemetry.h b/src/kernel/ao_telemetry.h
index 45aaeb07..23e3ed7d 100644
--- a/src/kernel/ao_telemetry.h
+++ b/src/kernel/ao_telemetry.h
@@ -198,8 +198,8 @@ struct ao_telemetry_mega_sensor {
int16_t gyro_z; /* 24 */
int16_t mag_x; /* 26 */
- int16_t mag_y; /* 28 */
- int16_t mag_z; /* 30 */
+ int16_t mag_z; /* 28 */
+ int16_t mag_y; /* 30 */
/* 32 */
};
diff --git a/src/kernel/ao_tracker.c b/src/kernel/ao_tracker.c
index 4abd309a..46278530 100644
--- a/src/kernel/ao_tracker.c
+++ b/src/kernel/ao_tracker.c
@@ -164,6 +164,25 @@ ao_tracker(void)
}
}
+#ifdef AO_LED_GPS_LOCK
+
+static struct ao_task ao_gps_lock_task;
+
+static void
+ao_gps_lock(void)
+{
+ for (;;) {
+ if ((gps_data.flags & (AO_GPS_VALID|AO_GPS_COURSE_VALID)) ==
+ (AO_GPS_VALID|AO_GPS_COURSE_VALID))
+ {
+ ao_led_for(AO_LED_GPS_LOCK, AO_MS_TO_TICKS(20));
+ }
+ ao_delay(AO_SEC_TO_TICKS(3));
+ }
+}
+#endif
+
+
static uint8_t erasing_current;
void
@@ -222,4 +241,7 @@ ao_tracker_init(void)
#endif
ao_cmd_register(&ao_tracker_cmds[0]);
ao_add_task(&ao_tracker_task, ao_tracker, "tracker");
+#ifdef AO_LED_GPS_LOCK
+ ao_add_task(&ao_gps_lock_task, ao_gps_lock, "gps lock");
+#endif
}
diff --git a/src/kernel/ao_usb.h b/src/kernel/ao_usb.h
index cdea5178..936d939b 100644
--- a/src/kernel/ao_usb.h
+++ b/src/kernel/ao_usb.h
@@ -155,6 +155,8 @@ struct ao_usb_line_coding {
uint8_t data_bits;
} ;
+extern __xdata struct ao_usb_line_coding ao_usb_line_coding;
+
extern __pdata uint8_t ao_usb_running;
#endif /* _AO_USB_H_ */