Merge "bluetoothtbd common library reconfiguration (2/2)"
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..d2064b0
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,3 @@
+ajanti@google.com
+pavlin@google.com
+tturney@google.com
diff --git a/PMC/src/com/android/pmc/BleScanReceiver.java b/PMC/src/com/android/pmc/BleScanReceiver.java
index fb97255..56532dd 100644
--- a/PMC/src/com/android/pmc/BleScanReceiver.java
+++ b/PMC/src/com/android/pmc/BleScanReceiver.java
@@ -50,6 +50,10 @@
private BluetoothLeScanner mBleScanner;
private ScanSettings mScanSettings;
private List<ScanFilter> mScanFilterList;
+ // Use PMCStatusLogger to send status and start & end times back to Python client
+ private PMCStatusLogger mPMCStatusLogger;
+ // Test start time is set when receiving the broadcast message from Python client
+ private long mStartTestTime;
private ScanCallback mScanCallback = new ScanCallback() {
@Override
@@ -74,6 +78,9 @@
private int mScanTime;
private int mNoScanTime;
private int mNumAlarms;
+ private int mFirstScanTime;
+ private long mScanStartTime;
+ private long mScanEndTime;
/**
* Constructor
@@ -119,14 +126,15 @@
mScanTime = scanTime;
mNoScanTime = noScanTime;
mNumAlarms = numAlarms;
+ mFirstScanTime = startTime;
+
mScanSettings = new ScanSettings.Builder().setScanMode(
scanMode).build();
Intent alarmIntent = new Intent(BleScanListener.BLESCAN);
alarmIntent.putExtra("com.android.pmc.BLESCAN.Action", START_SCAN);
alarmIntent.putExtra("com.android.pmc.BLESCAN.CurrentAlarm", INIT_ALARM_NO);
- long triggerTime = SystemClock.elapsedRealtime()
- + startTime * 1000;
+ long triggerTime = SystemClock.elapsedRealtime() + startTime * 1000;
mAlarmManager.setExactAndAllowWhileIdle(
AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime,
PendingIntent.getBroadcast(mContext, 0,
@@ -151,6 +159,7 @@
return;
}
if (currentAlarm >= mNumAlarms) {
+ mPMCStatusLogger.flash(); // To flash out timestamps into log file
Log.d(TAG, "All alarms are done");
return;
}
@@ -185,13 +194,22 @@
}
if (action == START_SCAN) {
Log.v(TAG, "Before Start Scan");
+ mScanStartTime = System.currentTimeMillis();
mBleScanner.startScan(mScanFilterList, mScanSettings,
mScanCallback);
repeatAlarm(intent, mScanTime, STOP_SCAN);
} else if (action == STOP_SCAN) {
Log.v(TAG, "Before Stop scan");
+ mScanEndTime = System.currentTimeMillis();
+ mPMCStatusLogger.logAlarmTimes(mScanStartTime / 1000.0, mScanEndTime / 1000.0);
mBleScanner.stopScan(mScanCallback);
- repeatAlarm(intent, mNoScanTime, START_SCAN);
+ if ((mScanEndTime - mStartTestTime)
+ < ((mScanTime + mNoScanTime) * mNumAlarms / 2 + mFirstScanTime) * 1000) {
+ repeatAlarm(intent, mNoScanTime, START_SCAN);
+ } else {
+ mPMCStatusLogger.flash(); // To flash out timestamps into log file
+ Log.d(TAG, "Time is up to end");
+ }
} else {
Log.e(TAG, "Unknown Action");
}
@@ -230,6 +248,9 @@
int repetitions = 1;
String str;
+ mStartTestTime = System.currentTimeMillis();
+ mPMCStatusLogger = new PMCStatusLogger(TAG + ".log", TAG);
+
if (extras == null) {
Log.e(TAG, "No parameters specified");
return;
@@ -279,6 +300,12 @@
}
mAlarmScanListener.firstAlarm(scanMode, startTime,
scanTime, noScanTime, repetitions * 2);
+ if (mBleScanner != null && mScanFilterList != null && mScanSettings != null
+ && mScanCallback != null) {
+ mPMCStatusLogger.logStatus("READY");
+ } else {
+ Log.e(TAG, "BLE scanner is not ready to start test");
+ }
}
}
}
diff --git a/PMC/src/com/android/pmc/PMCStatusLogger.java b/PMC/src/com/android/pmc/PMCStatusLogger.java
index d931adf..500780e 100644
--- a/PMC/src/com/android/pmc/PMCStatusLogger.java
+++ b/PMC/src/com/android/pmc/PMCStatusLogger.java
@@ -18,11 +18,15 @@
import android.util.Log;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileOutputStream;
+import java.io.FileWriter;
import java.io.IOException;
-import java.io.OutputStreamWriter;
+
/**
* Logging class to log status so PMC can communicate the status back to client
@@ -31,6 +35,8 @@
private File mFile;
public static String TAG;
public static String LOG_DIR = "/mnt/sdcard/Download";
+ public static JSONObject mJObject;
+ public static JSONArray mJArray;
/**
* Construtor - check if the file exist. If it is delete and create a new.
@@ -41,12 +47,14 @@
TAG = tag;
try {
- mFile = new File(LOG_DIR + fileName);
+ mFile = new File(LOG_DIR + "/" + fileName);
if (mFile.exists()) mFile.delete();
mFile.createNewFile();
} catch (IOException e) {
Log.e(TAG, "Exception creating log file: " + fileName + " " + e);
}
+ mJObject = new JSONObject();
+ mJArray = new JSONArray();
}
/**
@@ -56,8 +64,8 @@
*/
public void logStatus(String message) {
try {
- FileOutputStream fos = new FileOutputStream(mFile, true);
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
+ FileWriter fos = new FileWriter(mFile);
+ BufferedWriter bw = new BufferedWriter(fos);
bw.write(message);
bw.newLine();
bw.close();
@@ -65,5 +73,44 @@
Log.e(TAG, "Exception writing log: " + message + " " + e);
}
}
+
+ /**
+ * Function to add alarm times into JSONArray object
+ *
+ * @param startTime - Start time for the cycle
+ * @param endTime - End time for the cycle
+ */
+ public void logAlarmTimes(double startTime, double endTime) {
+ JSONObject obj = new JSONObject();
+ try {
+ obj.put("StartTime", startTime);
+ obj.put("EndTime", endTime);
+ mJArray.put(obj);
+ } catch (JSONException e) {
+ Log.e(TAG, "Exception to put Alarm Times into JSONArray: " + e);
+ }
+ }
+
+ /**
+ * Function to save Json object into log file
+ *
+ */
+ public void flash() {
+ try {
+ mJObject.put("AlarmTimes", mJArray);
+
+ FileWriter fos = new FileWriter(mFile);
+ BufferedWriter bw = new BufferedWriter(fos);
+ Log.v(TAG, "JSON: " + mJObject.toString());
+ bw.write(mJObject.toString());
+ bw.newLine();
+ bw.close();
+ } catch (JSONException e) {
+ Log.e(TAG, "Exception to put JSONArray into main JSON object: " + e);
+ } catch (IOException e) {
+ Log.e(TAG, "Exception writing JSON to log file: " + e);
+ }
+ }
+
}