*
* 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
#define HAS_HMC5883 1
#define HAS_BEEP 1
#define AO_CONFIG_MAX_SIZE 1024
+#define AO_MMA655X_INVERT 0
struct ao_adc {
int16_t sense[AO_ADC_NUM_SENSE];
#define AO_ADC_NUM_SENSE 2
#define HAS_MS5607 1
#define HAS_MMA655X 1
+#define AO_MMA655X_INVERT 1
#define HAS_BEEP 1
#define AO_CONFIG_MAX_SIZE 1024
#define AO_PYRO_2 2
#define AO_PYRO_3 3
+#define PYRO_DBG 1
+
static void
ao_pyro_pin_set(uint8_t pin, uint8_t value)
{
ao_quaternion_rotate(&ao_out, &ao_x, &ao_rotation);
+#if 0
int out = floor (atan2(ao_out.y, ao_out.x) * 180 / M_PI);
-#if 0
printf ("%7.2f state %-8.8s height %8.4f tilt %4d rot %4d mag_tilt %4d mag_rot %4d\n",
time,
ao_state_names[ao_flight_state],
#if 1
printf("%7.2f height %8.2f accel %8.3f "
-#if TELEMEGA && 0
+#if TELEMEGA && 1
"angle %5d "
"accel_x %8.3f accel_y %8.3f accel_z %8.3f gyro_x %8.3f gyro_y %8.3f gyro_z %8.3f mag_x %8d mag_y %8d, mag_z %8d mag_angle %4d "
#endif
time,
height,
accel,
-#if TELEMEGA && 0
+#if TELEMEGA && 1
ao_sample_orient,
ao_mpu6000_accel(ao_data_static.mpu6000.accel_x),
break;
}
#if TELEMEGA
- if (log_format == AO_LOG_FORMAT_TELEMEGA && nword == 30 && strlen(words[0]) == 1) {
+ if ((log_format == AO_LOG_FORMAT_TELEMEGA_OLD || log_format == AO_LOG_FORMAT_TELEMEGA) && nword == 30 && strlen(words[0]) == 1) {
int i;
struct ao_ms5607_value value;
ao_data_static.hmc5883.z = int16(bytes, 24);
#if HAS_MMA655X
ao_data_static.mma655x = int16(bytes, 26);
+ if (ao_config.pad_orientation != AO_PAD_ORIENTATION_ANTENNA_UP)
+ ao_data_static.mma655x = ao_data_accel_invert(ao_data_static.mma655x);
#endif
ao_records_read++;
ao_insert();
ao_config.accel_zero_along = atoi(words[3]);
ao_config.accel_zero_across = atoi(words[5]);
ao_config.accel_zero_through = atoi(words[7]);
- printf ("%d %d %d\n", ao_config.accel_zero_along, ao_config.accel_zero_across, ao_config.accel_zero_through);
#endif
} else if (nword >= 4 && strcmp(words[0], "Main") == 0) {
ao_config.main_deploy = atoi(words[2]);
} else if (nword >= 3 && strcmp(words[0], "Apogee") == 0 &&
strcmp(words[1], "lockout:") == 0) {
ao_config.apogee_lockout = atoi(words[2]);
+ } else if (nword >= 3 && strcmp(words[0], "Pad") == 0 &&
+ strcmp(words[1], "orientation:") == 0) {
+ ao_config.pad_orientation = atoi(words[2]);
} else if (nword >= 36 && strcmp(words[0], "CALL") == 0) {
tick = atoi(words[10]);
if (!ao_flight_started) {