summaryrefslogtreecommitdiff
path: root/app/src/main/java/com/javispedro/rempe/Device.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/javispedro/rempe/Device.java')
-rw-r--r--app/src/main/java/com/javispedro/rempe/Device.java69
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();
}
}
};