summaryrefslogtreecommitdiffstats
path: root/PMC/src/com/android/pmc
diff options
context:
space:
mode:
authorJim Tan <jimtan@google.com>2017-06-07 17:40:45 -0700
committerJim Tan <jimtan@google.com>2017-06-15 18:19:01 -0700
commitafd0ad43555fda4808de6e9dc35717a0fe11fcba (patch)
tree33b4d8affb1b5e10b121661878a57056105e6295 /PMC/src/com/android/pmc
parent3aad68c052667ec9b4c833f44432906359530da1 (diff)
downloadplatform_packages_apps_Test_connectivity-afd0ad43555fda4808de6e9dc35717a0fe11fcba.tar.gz
platform_packages_apps_Test_connectivity-afd0ad43555fda4808de6e9dc35717a0fe11fcba.tar.bz2
platform_packages_apps_Test_connectivity-afd0ad43555fda4808de6e9dc35717a0fe11fcba.zip
Save starting/ending times fo scanning to log fileandroid-vts-8.0_r1oreo-dev
Since Android doesn't fire alarms at the exact time we specify when alarm interval is very short, i.e. 5 seconds so we need to send starting & ending times for BLE scanning back to Python client to do an accurate calculation for the average. Test: Done Bug: 38234726 Change-Id: I9106ddce8e358e0a7ef222b51110129804395716 (cherry picked from commit cfdbd7def753412a7914bac42e68f3c9659791f7)
Diffstat (limited to 'PMC/src/com/android/pmc')
-rw-r--r--PMC/src/com/android/pmc/BleScanReceiver.java33
-rw-r--r--PMC/src/com/android/pmc/PMCStatusLogger.java57
2 files changed, 82 insertions, 8 deletions
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 @@ public class BleScanReceiver extends BroadcastReceiver {
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 @@ public class BleScanReceiver extends BroadcastReceiver {
private int mScanTime;
private int mNoScanTime;
private int mNumAlarms;
+ private int mFirstScanTime;
+ private long mScanStartTime;
+ private long mScanEndTime;
/**
* Constructor
@@ -119,14 +126,15 @@ public class BleScanReceiver extends BroadcastReceiver {
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 @@ public class BleScanReceiver extends BroadcastReceiver {
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 @@ public class BleScanReceiver extends BroadcastReceiver {
}
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 @@ public class BleScanReceiver extends BroadcastReceiver {
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 @@ public class BleScanReceiver extends BroadcastReceiver {
}
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 @@ package com.android.pmc;
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 @@ public class PMCStatusLogger {
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 @@ public class PMCStatusLogger {
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 class PMCStatusLogger {
*/
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 @@ public class PMCStatusLogger {
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);
+ }
+ }
+
}