public String callsign;
public int radio_enable;
public int radio_calibration;
+ public int telemetry_rate;
/* Old HAS_RADIO values */
public int radio_channel;
public int radio_setting;
radio_calibration = -1;
radio_channel = -1;
radio_setting = -1;
+ telemetry_rate = -1;
accel_cal_plus = -1;
accel_cal_minus = -1;
try { callsign = get_string(line, "Callsign:"); } catch (Exception e) {}
try { radio_enable = get_int(line, "Radio enable:"); } catch (Exception e) {}
try { radio_calibration = get_int(line, "Radio cal:"); } catch (Exception e) {}
+ try { telemetry_rate = get_int(line, "Telemetry rate:"); } catch (Exception e) {}
/* Old HAS_RADIO values */
try { radio_channel = get_int(line, "Radio channel:"); } catch (Exception e) {}
callsign = source.callsign();
if (radio_calibration >= 0)
radio_calibration = source.radio_calibration();
+ if (telemetry_rate >= 0)
+ telemetry_rate = source.telemetry_rate();
/* HAS_ACCEL */
if (pad_orientation >= 0)
dest.set_apogee_lockout(apogee_lockout);
dest.set_radio_calibration(radio_calibration);
dest.set_radio_frequency(frequency());
+ dest.set_telemetry_rate(telemetry_rate);
boolean max_enabled = true;
if (log_space() == 0)
if (radio_enable >= 0)
link.printf("c e %d\n", radio_enable);
+ if (telemetry_rate >= 0)
+ link.printf("c T %d\n", telemetry_rate);
+
/* HAS_ACCEL */
/* UI doesn't support accel cal */
if (pad_orientation >= 0)
public abstract String callsign();
+ public abstract void set_telemetry_rate(int new_telemetry_rate);
+
+ public abstract int telemetry_rate() throws AltosConfigDataException;
+
public abstract void set_flight_log_max(int new_flight_log_max);
public abstract void set_flight_log_max_enabled(boolean enable);
public void set_telemetry(int telemetry) { }
+ public void set_telemetry_rate(int telemetry_rate) throws InterruptedException, TimeoutException { }
+
public void save_telemetry() { }
+ public void save_telemetry_rate() { }
+
public void update(AltosState state) throws InterruptedException { }
public boolean supports_telemetry(int telemetry) { return false; }
+ public boolean supports_telemetry_rate(int telemetry_rate) { return false; }
+
public File backing_file() { return null; }
public boolean has_monitor_battery() throws InterruptedException { return false; }
"Off", "Standard Telemetry", "TeleMetrum v0.9", "TeleMetrum v0.8"
};
+ public static final int ao_telemetry_rate_38400 = 0;
+ public static final int ao_telemetry_rate_9600 = 1;
+ public static final int ao_telemetry_rate_2400 = 2;
+ public static final int ao_telemetry_rate_max = 2;
+
+ public static final Integer[] ao_telemetry_rate_values = {
+ 38400, 9600, 2400
+ };
+
public static final String launch_sites_url = "http://www.altusmetrum.org/AltOS/launch-sites.txt";
public static final int ao_telemetry_standard_len = 32;
}
public void flush_output() {
+ if (pending_output == null)
+ return;
for (String s : pending_output)
System.out.print(s);
pending_output.clear();
*/
public boolean monitor_mode = false;
public int telemetry = AltosLib.ao_telemetry_standard;
+ public int telemetry_rate = AltosLib.ao_telemetry_rate_38400;
public double frequency;
public String callsign;
AltosConfigData config_data;
flush_output();
}
+ public void set_telemetry_rate(int in_telemetry_rate) {
+ telemetry_rate = in_telemetry_rate;
+ if (monitor_mode)
+ printf("m 0\nc T %d\nm %x\n", telemetry_rate, telemetry_len());
+ else
+ printf("c T %d\n", telemetry_rate);
+ flush_output();
+ }
+
public void set_monitor(boolean monitor) {
monitor_mode = monitor;
if (monitor)
flush_output();
}
- public AltosConfigData config_data() throws InterruptedException, TimeoutException {
+ public AltosConfigData config_data() throws InterruptedException, TimeoutException {
synchronized(config_data_lock) {
if (config_data == null) {
printf("m 0\n");
/* telemetry format preference name */
public final static String telemetryPreferenceFormat = "TELEMETRY-%d";
+ /* telemetry rate format preference name */
+ public final static String telemetryRatePreferenceFormat = "RATE-%d";
+
/* voice preference name */
public final static String voicePreference = "VOICE";
/* scanning telemetry preferences name */
public final static String scanningTelemetryPreference = "SCANNING-TELEMETRY";
+ /* scanning telemetry rate preferences name */
+ public final static String scanningTelemetryRatePreference = "SCANNING-RATE";
+
/* Launcher serial preference name */
public final static String launcherSerialPreference = "LAUNCHER-SERIAL";
/* Telemetry (map serial to telemetry format) */
public static Hashtable<Integer, Integer> telemetries;
+ /* Telemetry rate (map serial to telemetry format) */
+ public static Hashtable<Integer, Integer> telemetry_rates;
+
/* Voice preference */
public static boolean voice;
/* Scanning telemetry */
public static int scanning_telemetry;
+ public static int scanning_telemetry_rate;
+
/* List of frequencies */
public final static String common_frequencies_node_name = "COMMON-FREQUENCIES";
public static AltosFrequency[] common_frequencies;
telemetries = new Hashtable<Integer,Integer>();
+ telemetry_rates = new Hashtable<Integer,Integer>();
+
voice = backend.getBoolean(voicePreference, true);
callsign = backend.getString(callsignPreference,"N0CALL");
scanning_telemetry = backend.getInt(scanningTelemetryPreference,(1 << AltosLib.ao_telemetry_standard));
+ scanning_telemetry_rate = backend.getInt(scanningTelemetryRatePreference,(1 << AltosLib.ao_telemetry_rate_38400));
+
launcher_serial = backend.getInt(launcherSerialPreference, 0);
launcher_channel = backend.getInt(launcherChannelPreference, 0);
}
}
+ public static void set_telemetry_rate(int serial, int new_telemetry_rate) {
+ synchronized (backend) {
+ telemetry_rates.put(serial, new_telemetry_rate);
+ backend.putInt(String.format(telemetryRatePreferenceFormat, serial), new_telemetry_rate);
+ flush_preferences();
+ }
+ }
+
+ public static int telemetry_rate(int serial) {
+ synchronized (backend) {
+ if (telemetry_rates.containsKey(serial))
+ return telemetry_rates.get(serial);
+ int telemetry_rate = backend.getInt(String.format(telemetryRatePreferenceFormat, serial),
+ AltosLib.ao_telemetry_rate_38400);
+ telemetry_rates.put(serial, telemetry_rate);
+ return telemetry_rate;
+ }
+ }
+
public static void set_scanning_telemetry(int new_scanning_telemetry) {
synchronized (backend) {
scanning_telemetry = new_scanning_telemetry;
}
}
+ public static void set_scanning_telemetry_rate(int new_scanning_telemetry_rate) {
+ synchronized (backend) {
+ scanning_telemetry_rate = new_scanning_telemetry_rate;
+ backend.putInt(scanningTelemetryRatePreference, scanning_telemetry_rate);
+ flush_preferences();
+ }
+ }
+
+ public static int scanning_telemetry_rate() {
+ synchronized(backend) {
+ return scanning_telemetry_rate;
+ }
+ }
+
public static void set_voice(boolean new_voice) {
synchronized (backend) {
voice = new_voice;
AltosLog log;
double frequency;
int telemetry;
+ int telemetry_rate;
AltosState state = null;
LinkedBlockingQueue<AltosLine> telem;
}
}
+ public boolean supports_telemetry_rate(int telemetry_rate) {
+ try {
+ /* Version 1.4.1.1 supports all rates, older versions don't */
+ if (link.config_data().compare_version("1.4.1.1") >= 0)
+ return true;
+
+ if (telemetry_rate == AltosLib.ao_telemetry_rate_38400)
+ return true;
+ else
+ return false;
+ } catch (InterruptedException ie) {
+ return false;
+ } catch (TimeoutException te) {
+ return true;
+ }
+ }
+
public void save_frequency() {
AltosPreferences.set_frequency(link.serial, frequency);
}
AltosPreferences.set_telemetry(link.serial, telemetry);
}
+ public void set_telemetry_rate(int in_telemetry_rate) {
+ telemetry_rate = in_telemetry_rate;
+ link.set_telemetry_rate(telemetry_rate);
+ }
+
+ public void save_telemetry_rate() {
+ AltosPreferences.set_telemetry_rate(link.serial, telemetry_rate);
+ }
+
public void set_monitor(boolean monitor) {
link.set_monitor(monitor);
}
set_frequency(frequency);
telemetry = AltosPreferences.telemetry(link.serial);
set_telemetry(telemetry);
+ telemetry_rate = AltosPreferences.telemetry_rate(link.serial);
+ set_telemetry_rate(telemetry_rate);
link.add_monitor(telem);
success = true;
} finally {