X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosdroid%2Fsrc%2Forg%2Faltusmetrum%2FAltosDroid%2FTelemetryService.java;h=63592e2999d26e2ae09b66bd5e4a59b7cb1df32a;hp=80694ea74357385264f19c5f5cd0968a25d69b8c;hb=57c1320962ad08d52e89d39bd5852f8d228dd872;hpb=c46c2c5767c6e909fa58587e6c864a4fbaa9fa20 diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java index 80694ea7..63592e29 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java @@ -43,8 +43,7 @@ import android.location.LocationManager; import android.location.LocationListener; import android.location.Criteria; -import org.altusmetrum.altoslib_7.*; - +import org.altusmetrum.altoslib_10.*; public class TelemetryService extends Service implements LocationListener { @@ -200,13 +199,11 @@ public class TelemetryService extends Service implements LocationListener { * Messages from TelemetryReader */ case MSG_TELEMETRY: - AltosDebug.debug("MSG_TELEMETRY"); s.telemetry((AltosTelemetry) msg.obj); break; case MSG_CRC_ERROR: // forward crc error messages s.telemetry_state.crc_errors = (Integer) msg.obj; - AltosDebug.debug("MSG_CRC_ERROR"); s.send_to_clients(); break; default: @@ -227,7 +224,6 @@ public class TelemetryService extends Service implements LocationListener { telem.update_state(state); telemetry_state.states.put(telem.serial, state); if (state != null) { - AltosDebug.debug("Save state %d", telem.serial); AltosPreferences.set_state(telem.serial, state, null); } send_to_clients(); @@ -252,7 +248,7 @@ public class TelemetryService extends Service implements LocationListener { /* On connect, send the current state to the new client */ - send_to_client(client, message()); + send_to_client(client); /* If we've got an address from a previous session, then * go ahead and try to reconnect to the device @@ -279,9 +275,9 @@ public class TelemetryService extends Service implements LocationListener { } } - private void send_to_client(Messenger client, Message m) { + private void send_to_client(Messenger client) { + Message m = message(); try { - AltosDebug.debug("Send message to client %s", client.toString()); client.send(m); } catch (RemoteException e) { AltosDebug.error("Client %s disappeared", client.toString()); @@ -290,10 +286,8 @@ public class TelemetryService extends Service implements LocationListener { } private void send_to_clients() { - Message m = message(); - AltosDebug.debug("Send message to %d clients", clients.size()); for (Messenger client : clients) - send_to_client(client, m); + send_to_client(client); } private void disconnect(boolean notify) { @@ -305,6 +299,8 @@ public class TelemetryService extends Service implements LocationListener { if (altos_link != null) altos_link.closing(); + stop_receiver_voltage_timer(); + if (telemetry_reader != null) { AltosDebug.debug("disconnect(): stopping TelemetryReader"); telemetry_reader.interrupt(); @@ -367,6 +363,34 @@ public class TelemetryService extends Service implements LocationListener { send_to_clients(); } + // Timer for receiver battery voltage monitoring + Timer receiver_voltage_timer; + + private void update_receiver_voltage() { + if (altos_link != null) { + try { + double voltage = altos_link.monitor_battery(); + telemetry_state.receiver_battery = voltage; + } catch (InterruptedException ie) { + } + } + } + + private void stop_receiver_voltage_timer() { + if (receiver_voltage_timer != null) { + receiver_voltage_timer.cancel(); + receiver_voltage_timer.purge(); + receiver_voltage_timer = null; + } + } + + private void start_receiver_voltage_timer() { + if (receiver_voltage_timer == null && altos_link.has_monitor_battery()) { + receiver_voltage_timer = new Timer(); + receiver_voltage_timer.scheduleAtFixedRate(new TimerTask() { public void run() {update_receiver_voltage();}}, 1000L, 10000L); + } + } + private void connected() throws InterruptedException { AltosDebug.debug("connected top"); AltosDebug.check_ui("connected\n"); @@ -401,6 +425,8 @@ public class TelemetryService extends Service implements LocationListener { telemetry_logger = new TelemetryLogger(this, altos_link); + start_receiver_voltage_timer(); + AltosDebug.debug("Notify UI of connection"); send_to_clients(); @@ -409,6 +435,12 @@ public class TelemetryService extends Service implements LocationListener { @Override public void onCreate() { + + AltosDebug.init(this); + + // Initialise preferences + AltosDroidPreferences.init(this); + // Get local Bluetooth adapter bluetooth_adapter = BluetoothAdapter.getDefaultAdapter(); @@ -417,9 +449,6 @@ public class TelemetryService extends Service implements LocationListener { Toast.makeText(this, "Bluetooth is not available", Toast.LENGTH_LONG).show(); } - // Initialise preferences - AltosDroidPreferences.init(this); - telemetry_state = new TelemetryState(); // Create a reference to the NotificationManager so that we can update our notifcation text later @@ -484,7 +513,11 @@ public class TelemetryService extends Service implements LocationListener { // Move us into the foreground. startForeground(NOTIFICATION, notification); - if (intent != null) { + /* Start bluetooth if we don't have a connection already */ + if (intent != null && + (telemetry_state.connect == TelemetryState.CONNECT_NONE || + telemetry_state.connect == TelemetryState.CONNECT_DISCONNECTED)) + { String action = intent.getAction(); if (action.equals(AltosDroid.ACTION_BLUETOOTH)) {