Instead of computing the radio setting in altosui, let the radio do it directly.
Signed-off-by: Keith Packard <keithp@keithp.com>
int_ref ignite_mode;
int_ref pad_orientation;
int_ref radio_setting;
+ int_ref radio_frequency;
int_ref storage_size;
int_ref storage_erase_unit;
int_ref stored_flight;
get_int(line, "Ignite mode:", ignite_mode);
get_int(line, "Pad orientation:", pad_orientation);
get_int(line, "Radio setting:", radio_setting);
+ get_int(line, "Frequency:", radio_frequency);
get_int(line, "Radio enable:", radio_enable);
get_int(line, "Storage size:", storage_size);
get_int(line, "Storage erase unit:", storage_erase_unit);
apogee_delay.set(0);
radio_channel.set(0);
radio_setting.set(0);
+ radio_frequency.set(0);
radio_calibration.set(1186611);
radio_enable.set(-1);
flight_log_max.set(0);
void save_data() {
try {
double frequency = frequency();
+ boolean has_frequency = radio_frequency.get() > 0;
boolean has_setting = radio_setting.get() > 0;
start_serial();
serial_line.printf("c m %d\n", main_deploy.get());
if (!remote)
serial_line.printf("c f %d\n", radio_calibration.get());
serial_line.set_radio_frequency(frequency,
+ has_frequency,
has_setting,
radio_calibration.get());
if (remote) {
}
double frequency() {
- return AltosConvert.radio_to_frequency(radio_setting.get(),
+ return AltosConvert.radio_to_frequency(radio_frequency.get(),
+ radio_setting.get(),
radio_calibration.get(),
radio_channel.get());
}
void set_frequency(double freq) {
+ int frequency = radio_frequency.get();
int setting = radio_setting.get();
- if (setting > 0) {
+ if (frequency > 0) {
+ radio_frequency.set((int) Math.floor (freq * 1000 + 0.5));
+ } else if (setting > 0) {
radio_setting.set(AltosConvert.radio_frequency_to_setting(freq,
radio_calibration.get()));
radio_channel.set(0);
apogee_delay = new int_ref(0);
radio_channel = new int_ref(0);
radio_setting = new int_ref(0);
+ radio_frequency = new int_ref(0);
radio_calibration = new int_ref(1186611);
radio_enable = new int_ref(-1);
flight_log_max = new int_ref(0);
int apogee_delay;
int radio_channel;
int radio_setting;
+ int radio_frequency;
String callsign;
int accel_cal_plus, accel_cal_minus;
int radio_calibration;
serial_line.printf("c s\nf\nl\nv\n");
lines = new LinkedList<String>();
radio_setting = 0;
+ radio_frequency = 0;
stored_flight = 0;
for (;;) {
String line = serial_line.get_reply();
try { apogee_delay = get_int(line, "Apogee delay:"); } catch (Exception e) {}
try { radio_channel = get_int(line, "Radio channel:"); } catch (Exception e) {}
try { radio_setting = get_int(line, "Radio setting:"); } catch (Exception e) {}
+ try { radio_frequency = get_int(line, "Frequency:"); } catch (Exception e) {}
try {
if (line.startsWith("Accel cal")) {
String[] bits = line.split("\\s+");
AltosFrequency new_frequency = new AltosFrequency(new_radio_frequency, description);
AltosPreferences.add_common_frequency(new_frequency);
radio_frequency_value.insertItemAt(new_frequency, i);
+ radio_frequency_value.setSelectedIndex(i);
}
public double radio_frequency() {
return ignite / 32767 * 15.0;
}
- static double radio_to_frequency(int setting, int cal, int channel) {
+ static double radio_to_frequency(int freq, int setting, int cal, int channel) {
double f;
- if (setting <= 0)
- setting = cal;
- f = 434.550 * setting / cal;
- /* Round to nearest 50KHz */
- f = Math.floor (20.0 * f + 0.5) / 20.0;
+ if (freq > 0)
+ f = freq / 1000.0;
+ else {
+ if (setting <= 0)
+ setting = cal;
+ f = 434.550 * setting / cal;
+ /* Round to nearest 50KHz */
+ f = Math.floor (20.0 * f + 0.5) / 20.0;
+ }
return f + channel * 0.100;
}
String description;
public String toString() {
- return String.format("%7.3f MHz %-20.20s",
+ return String.format("%7.3f MHz %-20s",
frequency, description);
}
}
}
+ private void set_radio_freq(int frequency) {
+ if (altos != null) {
+ if (monitor_mode)
+ printf("m 0\nc F %d\nm %x\n",
+ frequency, telemetry_len());
+ else
+ printf("c F %d\n", frequency);
+ flush_output();
+ }
+ }
+
public void set_radio_frequency(double frequency,
+ boolean has_frequency,
boolean has_setting,
int cal) {
if (debug)
- System.out.printf("set_radio_frequency %7.3f %b %d\n", frequency, has_setting, cal);
- if (has_setting)
+ System.out.printf("set_radio_frequency %7.3f (freq %b) (set %b) %d\n", frequency, has_frequency, has_setting, cal);
+ if (has_frequency)
+ set_radio_freq((int) Math.floor (frequency * 1000));
+ else if (has_setting)
set_radio_setting(AltosConvert.radio_frequency_to_setting(frequency, cal));
else
set_channel(AltosConvert.radio_frequency_to_channel(frequency));
frequency = in_frequency;
config_data();
set_radio_frequency(frequency,
+ config_data.radio_frequency != 0,
config_data.radio_setting != 0,
config_data.radio_calibration);
}