* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_3;
+package org.altusmetrum.altoslib_10;
import java.text.*;
import java.io.*;
AltosLog log;
double frequency;
int telemetry;
+ int telemetry_rate;
AltosState state = null;
LinkedBlockingQueue<AltosLine> telem;
public AltosState read() throws InterruptedException, ParseException, AltosCRCException, IOException {
- AltosLine l = telem.take();
- if (l.line == null)
- throw new IOException("IO error");
+ AltosLine l;
+ do {
+ l = telem.take();
+ if (l.line == null)
+ throw new IOException("IO error");
+ } while (!link.get_monitor());
AltosTelemetry telem = AltosTelemetry.parse(l.line);
if (state == null)
state = new AltosState();
public void reset() {
flush();
+ state = null;
}
public void close(boolean interrupted) {
+
link.remove_monitor(telem);
log.close();
try {
}
}
+ 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 {