altosdroid: initial implementation of telemetry logging.
authorMike Beattie <mike@ethernal.org>
Tue, 18 Sep 2012 11:47:50 +0000 (23:47 +1200)
committerMike Beattie <mike@ethernal.org>
Tue, 18 Sep 2012 11:47:50 +0000 (23:47 +1200)
Signed-off-by: Mike Beattie <mike@ethernal.org>
altosdroid/AndroidManifest.xml
altosdroid/Makefile.am
altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java [new file with mode: 0644]
altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java

index 1239175968fb334ed0d44a400d727ef37c61fe17..7147c0b1ef919da0507c3cd515118eab9118dab8 100644 (file)
@@ -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-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" >
 
     <application android:label="@string/app_name"
                  android:icon="@drawable/app_icon" >
index c06afebe8f4ea35e6f6ce7e5cd47781fd80a357d..96831b722ba7955a87242bf562e5823df8965f37 100644 (file)
@@ -27,6 +27,7 @@ SRC=\
        $(SRC_DIR)/AltosVoice.java \
        $(SRC_DIR)/TelemetryService.java \
        $(SRC_DIR)/TelemetryReader.java \
        $(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
        $(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 (file)
index 0000000..b2dcdb4
--- /dev/null
@@ -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);
+       }
+
+}
index 393fd2f6f03609856bcb63195360f2e87c0f2387..3cb498e8a1995c05ddc2edc954846016dfe83c79 100644 (file)
@@ -76,6 +76,7 @@ public class TelemetryService extends Service {
        private AltosBluetooth  mAltosBluetooth  = null;
        private AltosConfigData mConfigData      = null;
        private TelemetryReader mTelemetryReader = null;
        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;
 
        // internally track state of bluetooth connection
        private int state = STATE_NONE;
@@ -164,6 +165,11 @@ public class TelemetryService extends Service {
                        }
                        mTelemetryReader = null;
                }
                        }
                        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();
                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();
 
                mTelemetryReader = new TelemetryReader(mAltosBluetooth, mHandler);
                mTelemetryReader.start();
+               
+               mTelemetryLogger = new TelemetryLogger(this, mAltosBluetooth);
        }
 
 
        }