diff options
Diffstat (limited to 'app/src/main/java/com/javispedro/rempe/Device.java')
-rw-r--r-- | app/src/main/java/com/javispedro/rempe/Device.java | 69 |
1 files changed, 51 insertions, 18 deletions
diff --git a/app/src/main/java/com/javispedro/rempe/Device.java b/app/src/main/java/com/javispedro/rempe/Device.java index fed7291..9258393 100644 --- a/app/src/main/java/com/javispedro/rempe/Device.java +++ b/app/src/main/java/com/javispedro/rempe/Device.java @@ -1,5 +1,6 @@ package com.javispedro.rempe; +import android.app.Activity; import android.content.Context; import android.util.Log; @@ -17,7 +18,8 @@ import java.util.EnumSet; public class Device { private final static String TAG = "Device"; - private final int mDeviceNumber; + public static final int INVALID_DEVICE = -1; + private int mDeviceNumber; private PccReleaseHandle<AntPlusEnvironmentPcc> mEnvPccHandle; private AntPlusEnvironmentPcc mEnvPcc; @@ -30,6 +32,7 @@ public class Device { private DeviceState mCurState; public interface DeviceObserver { + void onDeviceSearchFinished(RequestAccessResult result); void onDeviceInfoChanged(); void onDeviceStateChanged(); void onDeviceNewReading(); @@ -37,23 +40,56 @@ public class Device { } private DeviceObserver mObserver; - public Device(int deviceNumber) { + /** Creates empty Device object not attached to a specific device number. + * Only valid operation is searchForDevice. + */ + public Device() { + mDeviceNumber = INVALID_DEVICE; + mDeviceName = null; + mConnectResult = RequestAccessResult.SUCCESS; + mCurState = DeviceState.DEAD; + } + + /** Creates Device object with deviceNumber. Initial state will be unconnected. + * Can use connect() afterwards. */ + public Device(int deviceNumber, String initialDeviceName) { mDeviceNumber = deviceNumber; - mDeviceName = "dev-" + deviceNumber; + mDeviceName = initialDeviceName; mConnectResult = RequestAccessResult.SUCCESS; mCurState = DeviceState.DEAD; } + public void searchForDevice(Activity parentActivity) { + Log.d(TAG, "searchForNewDevice"); + if (isOpen()) { + Log.e(TAG, "Already open"); + return; + } + + // Clear old state + mConnectResult = RequestAccessResult.BAD_PARAMS; + mCurState = DeviceState.DEAD; + if (mObserver != null) { + mObserver.onDeviceStateChanged(); + } + + mEnvPccHandle = AntPlusEnvironmentPcc.requestAccess(parentActivity, parentActivity, mResultReceiver, mDeviceStateChangeReceiver); + } + public void connect(Context context) { Log.d(TAG, "connect (" + mDeviceNumber + ")"); - if (mEnvPccHandle != null) { - Log.w(TAG, "Already connected"); + if (isOpen()) { + Log.e(TAG, "Already open"); + return; } - mConnectResult = RequestAccessResult.SUCCESS; // Clear old connect result + + // Clear old connect result / state + mConnectResult = RequestAccessResult.SUCCESS; mCurState = DeviceState.SEARCHING; if (mObserver != null) { mObserver.onDeviceStateChanged(); } + mEnvPccHandle = AntPlusEnvironmentPcc.requestAccess(context, mDeviceNumber, 0, mResultReceiver, mDeviceStateChangeReceiver); } @@ -90,17 +126,15 @@ public class Device { } private void setEnvPcc(AntPlusEnvironmentPcc envPcc) { - if (mEnvPcc != null) { - mEnvPcc.subscribeTemperatureDataEvent(null); - mEnvPcc.subscribeRssiEvent(null); - mEnvPcc.releaseAccess(); - mEnvPcc = null; - } + assert mEnvPcc == null; mEnvPcc = envPcc; final String deviceName = mEnvPcc.getDeviceName(); final int deviceNumber = mEnvPcc.getAntDeviceNumber(); Log.d(TAG, "handleConnection deviceName=" + deviceName + " deviceNumber=" + deviceNumber); - if (deviceNumber != mDeviceNumber) { + if (mDeviceNumber == INVALID_DEVICE) { + mDeviceNumber = deviceNumber; // This is the initial search + } else if (deviceNumber != mDeviceNumber) { + // We tried to reconnect to a device and now it has a different number? Log.e(TAG, "device number mismatch"); } mDeviceName = deviceName; @@ -141,15 +175,14 @@ public class Device { Log.d(TAG, "onResultReceived resultCode=" + resultCode + " initialDeviceState=" + initialDeviceState); mConnectResult = resultCode; mCurState = initialDeviceState; - if (resultCode.equals(RequestAccessResult.SUCCESS)) { + if (resultCode == RequestAccessResult.SUCCESS) { setEnvPcc(result); } if (mObserver != null) { - mObserver.onDeviceStateChanged(); + mObserver.onDeviceSearchFinished(resultCode); } - - if (resultCode.equals(RequestAccessResult.SEARCH_TIMEOUT)) { - Log.d(TAG, "timeout"); + if (mObserver != null) { + mObserver.onDeviceStateChanged(); } } }; |