summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-03-27 10:38:32 -0700
committerKeith Packard <keithp@keithp.com>2012-03-27 10:45:34 -0700
commitd8ebb83e64d66fa159e75aa560d39d80bb6d9d04 (patch)
treeb8388ffafeee81e3583e7e7160c0a7107b59f960
parentc1d12a117b36de7fe8dd992959b890bfd1163e81 (diff)
altosui: Configure radio with new direct frequency setting
Instead of computing the radio setting in altosui, let the radio do it directly. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--altosui/AltosConfig.java14
-rw-r--r--altosui/AltosConfigData.java3
-rw-r--r--altosui/AltosConfigUI.java1
-rw-r--r--altosui/AltosConvert.java16
-rw-r--r--altosui/AltosFrequency.java2
-rw-r--r--altosui/AltosSerial.java19
6 files changed, 44 insertions, 11 deletions
diff --git a/altosui/AltosConfig.java b/altosui/AltosConfig.java
index 93def70d..84261ec7 100644
--- a/altosui/AltosConfig.java
+++ b/altosui/AltosConfig.java
@@ -76,6 +76,7 @@ public class AltosConfig implements ActionListener {
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;
@@ -193,6 +194,7 @@ public class AltosConfig implements ActionListener {
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);
@@ -230,6 +232,7 @@ public class AltosConfig implements ActionListener {
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);
@@ -275,6 +278,7 @@ public class AltosConfig implements ActionListener {
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());
@@ -282,6 +286,7 @@ public class AltosConfig implements ActionListener {
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) {
@@ -378,15 +383,19 @@ public class AltosConfig implements ActionListener {
}
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);
@@ -453,6 +462,7 @@ public class AltosConfig implements ActionListener {
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);
diff --git a/altosui/AltosConfigData.java b/altosui/AltosConfigData.java
index c14dc5a1..e5c3566b 100644
--- a/altosui/AltosConfigData.java
+++ b/altosui/AltosConfigData.java
@@ -49,6 +49,7 @@ public class AltosConfigData implements Iterable<String> {
int apogee_delay;
int radio_channel;
int radio_setting;
+ int radio_frequency;
String callsign;
int accel_cal_plus, accel_cal_minus;
int radio_calibration;
@@ -107,6 +108,7 @@ public class AltosConfigData implements Iterable<String> {
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();
@@ -121,6 +123,7 @@ public class AltosConfigData implements Iterable<String> {
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+");
diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java
index 9fef8e3b..c8ec06d2 100644
--- a/altosui/AltosConfigUI.java
+++ b/altosui/AltosConfigUI.java
@@ -638,6 +638,7 @@ public class AltosConfigUI
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() {
diff --git a/altosui/AltosConvert.java b/altosui/AltosConvert.java
index db7039ec..df41a522 100644
--- a/altosui/AltosConvert.java
+++ b/altosui/AltosConvert.java
@@ -190,14 +190,18 @@ public class AltosConvert {
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;
}
diff --git a/altosui/AltosFrequency.java b/altosui/AltosFrequency.java
index 0617ce74..b748e460 100644
--- a/altosui/AltosFrequency.java
+++ b/altosui/AltosFrequency.java
@@ -35,7 +35,7 @@ public class AltosFrequency {
String description;
public String toString() {
- return String.format("%7.3f MHz %-20.20s",
+ return String.format("%7.3f MHz %-20s",
frequency, description);
}
diff --git a/altosui/AltosSerial.java b/altosui/AltosSerial.java
index 4cf306d0..ff1a91a5 100644
--- a/altosui/AltosSerial.java
+++ b/altosui/AltosSerial.java
@@ -363,12 +363,26 @@ public class AltosSerial implements Runnable {
}
}
+ 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));
@@ -378,6 +392,7 @@ public class AltosSerial implements Runnable {
frequency = in_frequency;
config_data();
set_radio_frequency(frequency,
+ config_data.radio_frequency != 0,
config_data.radio_setting != 0,
config_data.radio_calibration);
}