From 5c7370dcd7a65c81a3c903a71167e07cfcbade53 Mon Sep 17 00:00:00 2001 From: Mike Beattie Date: Tue, 28 Aug 2012 22:07:39 +1200 Subject: altosdroid: stop sending device name, just send config data * Kinda complicated, but ultimately more sensible * Just send the config data as an arg to MSG_CONNECTED * keep retrying connection till we actually get config data Signed-off-by: Mike Beattie --- .../altusmetrum/AltosDroid/TelemetryService.java | 26 ++++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java') diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java index cd47c6f9..d11fc53a 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java @@ -36,7 +36,7 @@ import android.os.RemoteException; import android.util.Log; import android.widget.Toast; -//import org.altusmetrum.AltosLib.*; +import org.altusmetrum.AltosLib.*; public class TelemetryService extends Service { @@ -68,6 +68,7 @@ public class TelemetryService extends Service { // Name of the connected device private BluetoothDevice device = null; private AltosBluetooth mAltosBluetooth = null; + private AltosConfigData mConfigData = null; private TelemetryReader mTelemetryReader = null; // internally track state of bluetooth connection @@ -85,8 +86,9 @@ public class TelemetryService extends Service { case MSG_REGISTER_CLIENT: s.mClients.add(msg.replyTo); try { - msg.replyTo.send(Message.obtain(null, AltosDroid.MSG_DEVNAME, s.device.getName())); - msg.replyTo.send(Message.obtain(null, AltosDroid.MSG_STATE_CHANGE, s.state, -1)); + // Now we try to send the freshly connected UI any relavant information about what + // we're talking to - Basically state and Config Data. + msg.replyTo.send(Message.obtain(null, AltosDroid.MSG_STATE_CHANGE, s.state, -1, s.mConfigData)); } catch (RemoteException e) { s.mClients.remove(msg.replyTo); } @@ -153,6 +155,7 @@ public class TelemetryService extends Service { mAltosBluetooth = null; } device = null; + mConfigData = null; } private void startAltosBluetooth() { @@ -176,17 +179,26 @@ public class TelemetryService extends Service { if (D) Log.d(TAG, "setState(): " + state + " -> " + s); state = s; - sendMessageToClients(Message.obtain(null, AltosDroid.MSG_STATE_CHANGE, state, -1)); + // This shouldn't be required - mConfigData should be null for any non-connected + // state, but to be safe and to reduce message size + AltosConfigData acd = (state == STATE_CONNECTED) ? mConfigData : null; + + sendMessageToClients(Message.obtain(null, AltosDroid.MSG_STATE_CHANGE, state, -1, acd)); } private void connected() { - sendMessageToClients(Message.obtain(null, AltosDroid.MSG_DEVNAME, device.getName())); - setState(STATE_CONNECTED); try { - sendMessageToClients(Message.obtain(null, AltosDroid.MSG_DEVCONFIG, mAltosBluetooth.config_data())); + mConfigData = mAltosBluetooth.config_data(); } catch (InterruptedException e) { } catch (TimeoutException e) { + // If this timed out, then we really want to retry it, but + // probably safer to just retry the connection from scratch. + mHandler.obtainMessage(MSG_CONNECT_FAILED).sendToTarget(); + return; } + + setState(STATE_CONNECTED); + mTelemetryReader = new TelemetryReader(mAltosBluetooth, mHandler); mTelemetryReader.start(); } -- cgit v1.2.3