Added receiving of raw data - not working yet - numSamples wrong and null pointer exception converting to AccelData class.

This commit is contained in:
Graham Jones
2016-06-27 22:45:43 +01:00
parent c871509d62
commit c0d0f9ed30
4 changed files with 124 additions and 32 deletions

Binary file not shown.

View File

@@ -0,0 +1,69 @@
package uk.org.openseizuredetector;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.TimeZone;
/**
* Created by graham on 27/06/16.
*/
/* From https://github.com/kramimus/pebble-accel-analyzer */
public class AccelData {
private final String TAG = AccelData.class.getSimpleName();
final private int x;
final private int y;
final private int z;
private long timestamp = 0;
final private boolean didVibrate;
public AccelData(byte[] data) {
x = (data[0] & 0xff) | (data[1] << 8);
y = (data[2] & 0xff) | (data[3] << 8);
z = (data[4] & 0xff) | (data[5] << 8);
didVibrate = data[6] != 0;
for (int i = 0; i < 8; i++) {
timestamp |= ((long)(data[i+7] & 0xff)) << (i * 8);
}
}
public JSONObject toJson() {
JSONObject json = new JSONObject();
try {
json.put("x", x);
json.put("y", y);
json.put("z", z);
json.put("ts", timestamp);
json.put("v", didVibrate);
return json;
} catch (JSONException e) {
Log.w(TAG, "problem constructing accel data, skipping " + e);
}
return null;
}
public static List<AccelData> fromDataArray(byte[] data) {
List<AccelData> accels = new ArrayList<AccelData>();
for (int i = 0; i < data.length; i += 15) {
accels.add(new AccelData(Arrays.copyOfRange(data, i, i + 15)));
}
return accels;
}
public long getTimestamp() {
return timestamp;
}
public void applyTimezone(TimeZone tz) {
timestamp -= tz.getOffset(timestamp);
}
}

View File

@@ -50,6 +50,8 @@ public class SdData implements Parcelable {
public short mFallThreshMin;
public short mFallThreshMax;
public short mFallWindow;
public long mSdMode;
public long mSampleFreq;
public long alarmFreqMin;
public long alarmFreqMax;
public long nMin;
@@ -148,6 +150,8 @@ public class SdData implements Parcelable {
jsonObj.put("haveSettings", haveSettings);
jsonObj.put("alarmState", alarmState);
jsonObj.put("alarmPhrase", alarmPhrase);
jsonObj.put("sdMode",mSdMode);
jsonObj.put("sampleFreq",mSampleFreq);
jsonObj.put("alarmFreqMin",alarmFreqMin);
jsonObj.put("alarmFreqMax",alarmFreqMax);
jsonObj.put("alarmThresh", alarmThresh);

View File

@@ -38,6 +38,9 @@ import com.getpebble.android.kit.Constants;
import com.getpebble.android.kit.PebbleKit;
import com.getpebble.android.kit.util.PebbleDictionary;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -46,6 +49,10 @@ import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.TimeZone;
import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID;
@@ -103,11 +110,14 @@ public class SdDataSourcePebble extends SdDataSource {
private int KEY_MAN_ALARM_PERIOD = 27;
private int KEY_SD_MODE = 28;
private int KEY_SAMPLE_FREQ = 29;
private int KEY_RAW_DATA = 30;
private int KEY_NUM_RAW_DATA = 31;
// Values of the KEY_DATA_TYPE entry in a message
private int DATA_TYPE_RESULTS = 1; // Analysis Results
private int DATA_TYPE_SETTINGS = 2; // Settings
private int DATA_TYPE_SPEC = 3; // FFT Spectrum (or part of a spectrum)
private int DATA_TYPE_RAW = 4; // raw accelerometer data.
private short mDataUpdatePeriod;
private short mMutePeriod;
private short mManAlarmPeriod;
@@ -377,6 +387,16 @@ public class SdDataSourcePebble extends SdDataSource {
mSdData.batteryPc = data.getUnsignedIntegerAsLong(KEY_BATTERY_PC);
mSdData.haveSettings = true;
}
if (data.getUnsignedIntegerAsLong(KEY_DATA_TYPE)
== DATA_TYPE_RAW) {
Log.v(TAG, "DATA_TYPE = Raw");
long numSamples = data.getUnsignedIntegerAsLong(KEY_NUM_RAW_DATA);
Log.v(TAG, "numSamples = " + numSamples);
byte[] rawData = data.getBytes(KEY_RAW_DATA);
for (AccelData reading : AccelData.fromDataArray(rawData)) {
Log.i(TAG, "reading ts " + reading.getTimestamp());
}
}
}
};
PebbleKit.registerReceivedDataHandler(mContext, msgDataHandler);
@@ -439,7 +459,7 @@ public class SdDataSourcePebble extends SdDataSource {
* variables to the watch.
*/
public void sendPebbleSdSettings() {
Log.v(TAG, "sendPebblSdSettings() - preparing settings dictionary..");
Log.v(TAG, "sendPebblSdSettings() - preparing settings dictionary.. mSampleFreq=" + mSampleFreq);
// Watch Settings
final PebbleDictionary setDict = new PebbleDictionary();
setDict.addInt16(KEY_DATA_UPDATE_PERIOD, mDataUpdatePeriod);
@@ -628,10 +648,9 @@ public class SdDataSourcePebble extends SdDataSource {
}
}
}