From 5c7370dcd7a65c81a3c903a71167e07cfcbade53 Mon Sep 17 00:00:00 2001 From: Mike Beattie Date: Tue, 28 Aug 2012 22:07:39 +1200 Subject: [PATCH] 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/AltosDroid.java | 14 +++++++--- .../AltosDroid/TelemetryService.java | 26 ++++++++++++++----- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index bbb2970f..df2263ce 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -43,6 +43,8 @@ import android.view.Window; import android.widget.TextView; import android.widget.Toast; +import org.altusmetrum.AltosLib.*; + /** * This is the main Activity that displays the current chat session. */ @@ -71,8 +73,8 @@ public class AltosDroid extends Activity { private Messenger mService = null; final Messenger mMessenger = new Messenger(new IncomingHandler(this)); - // Name of the connected device - private String mConnectedDeviceName = null; + // TeleBT Config data + private AltosConfigData mConfigData = null; // Local Bluetooth adapter private BluetoothAdapter mBluetoothAdapter = null; @@ -93,16 +95,20 @@ public class AltosDroid extends Activity { if(D) Log.d(TAG, "MSG_STATE_CHANGE: " + msg.arg1); switch (msg.arg1) { case TelemetryService.STATE_CONNECTED: + ad.mConfigData = (AltosConfigData) msg.obj; + String str = String.format(" %s S/N: %d", ad.mConfigData.product, ad.mConfigData.serial); ad.mTitle.setText(R.string.title_connected_to); - ad.mTitle.append(ad.mConnectedDeviceName); - ad.mSerialView.setText(""); + ad.mTitle.append(str); + Toast.makeText(ad.getApplicationContext(), "Connected to " + str, Toast.LENGTH_SHORT).show(); break; case TelemetryService.STATE_CONNECTING: ad.mTitle.setText(R.string.title_connecting); break; case TelemetryService.STATE_READY: case TelemetryService.STATE_NONE: + ad.mConfigData = null; ad.mTitle.setText(R.string.title_not_connected); + ad.mSerialView.setText(""); break; } break; 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(); } -- 2.30.2