#endif
#if HAS_RADIO
+
+#if HAS_RADIO_FORWARD
+__xdata uint32_t ao_send_radio_setting;
+#endif
+
void
ao_config_set_radio(void)
{
ao_config.radio_setting = ao_freq_to_set(ao_config.frequency, ao_config.radio_cal);
+#if HAS_RADIO_FORWARD
+ ao_send_radio_setting = ao_freq_to_set(ao_config.send_frequency, ao_config.radio_cal);
+#endif
}
#endif /* HAS_RADIO */
#if HAS_RADIO_RATE
if (minor < 20)
ao_config.radio_rate = AO_CONFIG_DEFAULT_RADIO_RATE;
+#endif
+#if HAS_RADIO_FORWARD
+ if (minor < 21)
+ ao_config.send_frequency = 434550;
#endif
ao_config.minor = AO_CONFIG_MINOR;
ao_config_dirty = 1;
#endif
+#if HAS_RADIO_FORWARD
+void
+ao_config_send_frequency_show(void) __reentrant
+{
+ printf("Send frequency: %ld\n",
+ ao_config.send_frequency);
+}
+
+void
+ao_config_send_frequency_set(void) __reentrant
+{
+ ao_cmd_decimal();
+ if (ao_cmd_status != ao_cmd_success)
+ return;
+ _ao_config_edit_start();
+ ao_config.send_frequency = ao_cmd_lex_u32;
+ ao_config_set_radio();
+ _ao_config_edit_finish();
+#if HAS_RADIO_RECV
+ ao_radio_recv_abort();
+#endif
+}
+
+#endif
+
#if HAS_FLIGHT
void
uint16_t i;
int32_t accel_total;
uint8_t cal_data_ring;
+ int16_t min = 32767, max = -32768;
#if HAS_GYRO
int32_t accel_along_total = 0;
int32_t accel_across_total = 0;
while (i) {
ao_sleep(DATA_TO_XDATA(&ao_sample_data));
while (i && cal_data_ring != ao_sample_data) {
- accel_total += (int32_t) ao_data_accel(&ao_data_ring[cal_data_ring]);
+ int16_t v = ao_data_accel(&ao_data_ring[cal_data_ring]);
+ accel_total += (int32_t) v;
+ if (v < min) min = v;
+ if (v > max) max = v;
#if HAS_GYRO
accel_along_total += (int32_t) ao_data_along(&ao_data_ring[cal_data_ring]);
accel_across_total += (int32_t) ao_data_across(&ao_data_ring[cal_data_ring]);
accel_cal_across = accel_across_total >> ACCEL_CALIBRATE_SHIFT;
accel_cal_through = accel_through_total >> ACCEL_CALIBRATE_SHIFT;
#endif
+ printf ("total %d min %d max %d\n", accel_total, min, max);
return accel_total >> ACCEL_CALIBRATE_SHIFT;
}
}
_ao_config_edit_start();
ao_config.radio_rate = ao_cmd_lex_i;
+ _ao_config_edit_finish();
#if HAS_TELEMETRY
ao_telemetry_reset_interval();
#endif
- _ao_config_edit_finish();
#if HAS_RADIO_RECV
ao_radio_recv_abort();
#endif
_ao_config_edit_start();
ao_config.radio_enable = ao_cmd_lex_i;
_ao_config_edit_finish();
+#if HAS_TELEMETRY && HAS_RADIO_RATE
+ ao_telemetry_reset_interval();
+#endif
}
#endif /* HAS_RADIO */
_ao_config_edit_start();
ao_config.aprs_interval = ao_cmd_lex_i;
_ao_config_edit_finish();
+ ao_telemetry_reset_interval();
}
#endif /* HAS_APRS */
ao_config.tracker_motion = m;
ao_config.tracker_interval = i;
_ao_config_edit_finish();
+#if HAS_TELEMETRY
+ ao_telemetry_reset_interval();
+#endif
}
#endif /* HAS_TRACKER */
#if HAS_RADIO
{ "F <freq>\0Frequency (kHz)",
ao_config_frequency_set, ao_config_frequency_show },
+#if HAS_RADIO_FORWARD
+ { "R <freq>\0Repeater output frequency (kHz)",
+ ao_config_send_frequency_set, ao_config_send_frequency_show },
+#endif
{ "c <call>\0Callsign (8 char max)",
ao_config_callsign_set, ao_config_callsign_show },
{ "e <0 disable, 1 enable>\0Enable telemetry and RDF",