diff options
| -rw-r--r-- | altosdroid/AndroidManifest.xml | 1 | ||||
| -rw-r--r-- | altosdroid/Makefile.am | 1 | ||||
| -rw-r--r-- | altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java | 73 | ||||
| -rw-r--r-- | altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java | 8 | 
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);  	} | 
