summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Beattie <mike@ethernal.org>2012-09-18 23:47:50 +1200
committerMike Beattie <mike@ethernal.org>2012-09-18 23:47:50 +1200
commit3fe5c2f9fc01258d45c20070e9874d76bc6c8c07 (patch)
treea5ea30fc30dcecba540b11994f9d7d1d1b386611
parent0541201d4afe3e5d7913465e1db10e586d7182bb (diff)
altosdroid: initial implementation of telemetry logging.
Signed-off-by: Mike Beattie <mike@ethernal.org>
-rw-r--r--altosdroid/AndroidManifest.xml1
-rw-r--r--altosdroid/Makefile.am1
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java73
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java8
4 files changed, 83 insertions, 0 deletions
diff --git a/altosdroid/AndroidManifest.xml b/altosdroid/AndroidManifest.xml
index 12391759..7147c0b1 100644
--- a/altosdroid/AndroidManifest.xml
+++ b/altosdroid/AndroidManifest.xml
@@ -22,6 +22,7 @@
<uses-sdk android:targetSdkVersion="10" android:minSdkVersion="10"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application android:label="@string/app_name"
android:icon="@drawable/app_icon" >
diff --git a/altosdroid/Makefile.am b/altosdroid/Makefile.am
index c06afebe..96831b72 100644
--- a/altosdroid/Makefile.am
+++ b/altosdroid/Makefile.am
@@ -27,6 +27,7 @@ SRC=\
$(SRC_DIR)/AltosVoice.java \
$(SRC_DIR)/TelemetryService.java \
$(SRC_DIR)/TelemetryReader.java \
+ $(SRC_DIR)/TelemetryLogger.java \
$(SRC_DIR)/AltosBluetooth.java \
$(SRC_DIR)/DeviceListActivity.java \
$(SRC_DIR)/Dumper.java
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java
new file mode 100644
index 00000000..b2dcdb48
--- /dev/null
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java
@@ -0,0 +1,73 @@
+package org.altusmetrum.AltosDroid;
+
+import org.altusmetrum.AltosLib.*;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Environment;
+import android.util.Log;
+
+public class TelemetryLogger {
+ private static final String TAG = "TelemetryLogger";
+ private static final boolean D = true;
+
+ private Context context = null;
+ private AltosLink link = null;
+ private AltosLog logger = null;
+
+ private BroadcastReceiver mExternalStorageReceiver;
+
+ public TelemetryLogger(Context in_context, AltosLink in_link) {
+ context = in_context;
+ link = in_link;
+
+ startWatchingExternalStorage();
+ }
+
+ public void stop() {
+ stopWatchingExternalStorage();
+ close();
+ }
+
+ private void close() {
+ if (logger != null) {
+ if (D) Log.d(TAG, "Shutting down Telemetry Logging");
+ logger.close();
+ logger = null;
+ }
+ }
+
+ void handleExternalStorageState() {
+ String state = Environment.getExternalStorageState();
+ if (Environment.MEDIA_MOUNTED.equals(state)) {
+ if (logger == null) {
+ if (D) Log.d(TAG, "Starting up Telemetry Logging");
+ logger = new AltosLog(link);
+ }
+ } else {
+ if (D) Log.d(TAG, "External Storage not present - stopping");
+ close();
+ }
+ }
+
+ void startWatchingExternalStorage() {
+ mExternalStorageReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ handleExternalStorageState();
+ }
+ };
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
+ filter.addAction(Intent.ACTION_MEDIA_REMOVED);
+ context.registerReceiver(mExternalStorageReceiver, filter);
+ handleExternalStorageState();
+ }
+
+ void stopWatchingExternalStorage() {
+ context.unregisterReceiver(mExternalStorageReceiver);
+ }
+
+}
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java
index 393fd2f6..3cb498e8 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java
@@ -76,6 +76,7 @@ public class TelemetryService extends Service {
private AltosBluetooth mAltosBluetooth = null;
private AltosConfigData mConfigData = null;
private TelemetryReader mTelemetryReader = null;
+ private TelemetryLogger mTelemetryLogger = null;
// internally track state of bluetooth connection
private int state = STATE_NONE;
@@ -164,6 +165,11 @@ public class TelemetryService extends Service {
}
mTelemetryReader = null;
}
+ if (mTelemetryLogger != null) {
+ if (D) Log.d(TAG, "stopAltosBluetooth(): stopping TelemetryLogger");
+ mTelemetryLogger.stop();
+ mTelemetryLogger = null;
+ }
if (mAltosBluetooth != null) {
if (D) Log.d(TAG, "stopAltosBluetooth(): stopping AltosBluetooth");
mAltosBluetooth.close();
@@ -216,6 +222,8 @@ public class TelemetryService extends Service {
mTelemetryReader = new TelemetryReader(mAltosBluetooth, mHandler);
mTelemetryReader.start();
+
+ mTelemetryLogger = new TelemetryLogger(this, mAltosBluetooth);
}