am 57853108: Revert "Add timestamp in scan results"

* commit '578531082b8e8c8aa03868e69591b7613b0e8b8e':
  Revert "Add timestamp in scan results"
This commit is contained in:
Iliyan Malchev
2012-08-14 11:22:43 -07:00
committed by Android Git Automerger
4 changed files with 114 additions and 129 deletions

View File

@@ -13210,7 +13210,6 @@ package android.net.wifi {
field public java.lang.String capabilities; field public java.lang.String capabilities;
field public int frequency; field public int frequency;
field public int level; field public int level;
field public long timestamp;
} }
public final class SupplicantState extends java.lang.Enum implements android.os.Parcelable { public final class SupplicantState extends java.lang.Enum implements android.os.Parcelable {

View File

@@ -46,12 +46,6 @@ public class ScanResult implements Parcelable {
*/ */
public int frequency; public int frequency;
/**
* Time Synchronization Function (tsf) timestamp in microseconds when
* this result was last seen.
*/
public long timestamp;
/** /**
* We'd like to obtain the following attributes, * We'd like to obtain the following attributes,
* but they are not reported via the socket * but they are not reported via the socket
@@ -59,25 +53,13 @@ public class ScanResult implements Parcelable {
* internally by wpa_supplicant. * internally by wpa_supplicant.
* {@hide} * {@hide}
*/ */
public ScanResult(String SSID, String BSSID, String caps, int level, int frequency, long tsf) { public ScanResult(String SSID, String BSSID, String caps, int level, int frequency) {
this.SSID = SSID; this.SSID = SSID;
this.BSSID = BSSID; this.BSSID = BSSID;
this.capabilities = caps; this.capabilities = caps;
this.level = level; this.level = level;
this.frequency = frequency; this.frequency = frequency;
this.timestamp = tsf; //networkConfig = null;
}
/** copy constructor {@hide} */
public ScanResult(ScanResult source) {
if (source != null) {
SSID = source.SSID;
BSSID = source.BSSID;
capabilities = source.capabilities;
level = source.level;
frequency = source.frequency;
timestamp = source.timestamp;
}
} }
@Override @Override
@@ -94,9 +76,7 @@ public class ScanResult implements Parcelable {
append(", level: "). append(", level: ").
append(level). append(level).
append(", frequency: "). append(", frequency: ").
append(frequency). append(frequency);
append(", timestamp: ").
append(timestamp);
return sb.toString(); return sb.toString();
} }
@@ -113,7 +93,6 @@ public class ScanResult implements Parcelable {
dest.writeString(capabilities); dest.writeString(capabilities);
dest.writeInt(level); dest.writeInt(level);
dest.writeInt(frequency); dest.writeInt(frequency);
dest.writeLong(timestamp);
} }
/** Implement the Parcelable interface {@hide} */ /** Implement the Parcelable interface {@hide} */
@@ -125,8 +104,7 @@ public class ScanResult implements Parcelable {
in.readString(), in.readString(),
in.readString(), in.readString(),
in.readInt(), in.readInt(),
in.readInt(), in.readInt()
in.readLong()
); );
} }

View File

@@ -197,22 +197,8 @@ public class WifiNative {
return null; return null;
} }
/**
* Format of results:
* =================
* bssid=68:7f:74:d7:1b:6e
* freq=2412
* level=-43
* tsf=1344621975160944
* age=2623
* flags=[WPA2-PSK-CCMP][WPS][ESS]
* ssid=zubyb
*
* RANGE=ALL gets all scan results
* MASK=<N> see wpa_supplicant/src/common/wpa_ctrl.h for details
*/
public String scanResults() { public String scanResults() {
return doStringCommand("BSS RANGE=ALL MASK=0x1986"); return doStringCommand("SCAN_RESULTS");
} }
public boolean startDriver() { public boolean startDriver() {

View File

@@ -891,13 +891,7 @@ public class WifiStateMachine extends StateMachine {
* TODO: doc * TODO: doc
*/ */
public List<ScanResult> syncGetScanResultsList() { public List<ScanResult> syncGetScanResultsList() {
synchronized (mScanResultCache) { return mScanResults;
List<ScanResult> scanList = new ArrayList<ScanResult>();
for(ScanResult result: mScanResults) {
scanList.add(new ScanResult(result));
}
return scanList;
}
} }
/** /**
@@ -1363,103 +1357,131 @@ public class WifiStateMachine extends StateMachine {
mContext.sendStickyBroadcast(intent); mContext.sendStickyBroadcast(intent);
} }
private static final String BSSID_STR = "bssid=";
private static final String FREQ_STR = "freq=";
private static final String LEVEL_STR = "level=";
private static final String TSF_STR = "tsf=";
private static final String FLAGS_STR = "flags=";
private static final String SSID_STR = "ssid=";
private static final String DELIMITER_STR = "====";
/** /**
* Format: * Parse the scan result line passed to us by wpa_supplicant (helper).
* bssid=68:7f:76:d7:1a:6e * @param line the line to parse
* freq=2412 * @return the {@link ScanResult} object
* level=-44
* tsf=1344626243700342
* flags=[WPA2-PSK-CCMP][WPS][ESS]
* ssid=zfdy
* ====
* bssid=68:5f:74:d7:1a:6f
* freq=5180
* level=-73
* tsf=1344626243700373
* flags=[WPA2-PSK-CCMP][WPS][ESS]
* ssid=zuby
* ====
*/ */
private void setScanResults(String scanResults) { private ScanResult parseScanResult(String line) {
String bssid = ""; ScanResult scanResult = null;
int level = 0; if (line != null) {
int freq = 0; /*
long tsf = 0; * Cache implementation (LinkedHashMap) is not synchronized, thus,
String flags = ""; * must synchronized here!
String ssid = ""; */
synchronized (mScanResultCache) {
if (scanResults == null) { String[] result = scanResultPattern.split(line);
return; if (3 <= result.length && result.length <= 5) {
} String bssid = result[0];
// bssid | frequency | level | flags | ssid
synchronized(mScanResultCache) { int frequency;
mScanResults = new ArrayList<ScanResult>(); int level;
String[] lines = scanResults.split("\n");
for (String line : lines) {
if (line.startsWith(BSSID_STR)) {
bssid = line.substring(BSSID_STR.length());
} else if (line.startsWith(FREQ_STR)) {
try { try {
freq = Integer.parseInt(line.substring(FREQ_STR.length())); frequency = Integer.parseInt(result[1]);
} catch (NumberFormatException e) { level = Integer.parseInt(result[2]);
freq = 0;
}
} else if (line.startsWith(LEVEL_STR)) {
try {
level = Integer.parseInt(line.substring(LEVEL_STR.length()));
/* some implementations avoid negative values by adding 256 /* some implementations avoid negative values by adding 256
* so we need to adjust for that here. * so we need to adjust for that here.
*/ */
if (level > 0) level -= 256; if (level > 0) level -= 256;
} catch(NumberFormatException e) { } catch (NumberFormatException e) {
frequency = 0;
level = 0; level = 0;
} }
} else if (line.startsWith(TSF_STR)) {
try { /*
tsf = Long.parseLong(line.substring(TSF_STR.length())); * The formatting of the results returned by
} catch (NumberFormatException e) { * wpa_supplicant is intended to make the fields
tsf = 0; * line up nicely when printed,
} * not to make them easy to parse. So we have to
} else if (line.startsWith(FLAGS_STR)) { * apply some heuristics to figure out which field
flags = line.substring(FLAGS_STR.length()); * is the SSID and which field is the flags.
} else if (line.startsWith(SSID_STR)) { */
ssid = line.substring(SSID_STR.length()); String ssid;
if (ssid == null) ssid = ""; String flags;
} else if (line.startsWith(DELIMITER_STR)) { if (result.length == 4) {
if (bssid != null) { if (result[3].charAt(0) == '[') {
String key = bssid + ssid; flags = result[3];
ScanResult scanResult = mScanResultCache.get(key); ssid = "";
if (scanResult != null) {
scanResult.level = level;
scanResult.SSID = ssid;
scanResult.capabilities = flags;
scanResult.frequency = freq;
scanResult.timestamp = tsf;
} else { } else {
flags = "";
ssid = result[3];
}
} else if (result.length == 5) {
flags = result[3];
ssid = result[4];
} else {
// Here, we must have 3 fields: no flags and ssid
// set
flags = "";
ssid = "";
}
// bssid + ssid is the hash key
String key = bssid + ssid;
scanResult = mScanResultCache.get(key);
if (scanResult != null) {
scanResult.level = level;
scanResult.SSID = ssid;
scanResult.capabilities = flags;
scanResult.frequency = frequency;
} else {
// Do not add scan results that have no SSID set
if (0 < ssid.trim().length()) {
scanResult = scanResult =
new ScanResult( new ScanResult(
ssid, bssid, flags, level, freq, tsf); ssid, bssid, flags, level, frequency);
mScanResultCache.put(key, scanResult); mScanResultCache.put(key, scanResult);
} }
mScanResults.add(scanResult);
} }
bssid = null; } else {
level = 0; loge("Misformatted scan result text with " +
freq = 0; result.length + " fields: " + line);
tsf = 0;
flags = "";
ssid = "";
} }
} }
} }
return scanResult;
}
/**
* scanResults input format
* 00:bb:cc:dd:cc:ee 2427 166 [WPA-EAP-TKIP][WPA2-EAP-CCMP] Net1
* 00:bb:cc:dd:cc:ff 2412 165 [WPA-EAP-TKIP][WPA2-EAP-CCMP] Net2
*/
private void setScanResults(String scanResults) {
if (scanResults == null) {
return;
}
List<ScanResult> scanList = new ArrayList<ScanResult>();
int lineCount = 0;
int scanResultsLen = scanResults.length();
// Parse the result string, keeping in mind that the last line does
// not end with a newline.
for (int lineBeg = 0, lineEnd = 0; lineEnd <= scanResultsLen; ++lineEnd) {
if (lineEnd == scanResultsLen || scanResults.charAt(lineEnd) == '\n') {
++lineCount;
if (lineCount == 1) {
lineBeg = lineEnd + 1;
continue;
}
if (lineEnd > lineBeg) {
String line = scanResults.substring(lineBeg, lineEnd);
ScanResult scanResult = parseScanResult(line);
if (scanResult != null) {
scanList.add(scanResult);
} else {
//TODO: hidden network handling
}
}
lineBeg = lineEnd + 1;
}
}
mScanResults = scanList;
} }
/* /*
@@ -2805,7 +2827,7 @@ public class WifiStateMachine extends StateMachine {
if (DBG) log(getName() + "\n"); if (DBG) log(getName() + "\n");
mIsRunning = false; mIsRunning = false;
updateBatteryWorkSource(null); updateBatteryWorkSource(null);
mScanResults = new ArrayList<ScanResult>(); mScanResults = null;
if (mP2pSupported) mWifiP2pChannel.sendMessage(WifiStateMachine.CMD_DISABLE_P2P); if (mP2pSupported) mWifiP2pChannel.sendMessage(WifiStateMachine.CMD_DISABLE_P2P);
mContext.unregisterReceiver(mScreenReceiver); mContext.unregisterReceiver(mScreenReceiver);