summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2019-06-02 07:51:36 +0200
committerBjørn Mork <bjorn@mork.no>2019-06-02 07:51:36 +0200
commit737c195f36867002fb0340cbb9a90d7a9a922a02 (patch)
treeb62905a2fee6356bb6001f8e3fb4f6501fa7d1eb
parente540de69e549391203026ee5af69a98b13ba71a2 (diff)
wip: network scan
Signed-off-by: Bjørn Mork <bjorn@mork.no>
-rw-r--r--Defogger/Makefile2
-rw-r--r--Defogger/res/layout/activity_main.xml9
-rw-r--r--Defogger/res/values/strings.xml1
-rw-r--r--Defogger/src/no/mork/android/defogger/MainActivity.java72
4 files changed, 72 insertions, 12 deletions
diff --git a/Defogger/Makefile b/Defogger/Makefile
index 4fecda2..c27b63e 100644
--- a/Defogger/Makefile
+++ b/Defogger/Makefile
@@ -14,7 +14,7 @@ JAVAVER ?= 8
ANDROID_HOME ?= /usr/lib/android-sdk
SDKCLASSPATH ?= $(ANDROID_HOME)/platforms/android-$(APIVER)/android.jar
-RESOURCES=layout/activity_main.xml layout/activity_scanner.xml layout/scanitem.xml values/strings.xml
+RESOURCES=layout/activity_main.xml layout/activity_scanner.xml layout/scanitem.xml layout/netitem.xml values/strings.xml
RES=$(addprefix res/,$(RESOURCES))
## Temp disabled while we have some non-building classess....
diff --git a/Defogger/res/layout/activity_main.xml b/Defogger/res/layout/activity_main.xml
index ad4c4f8..88afb39 100644
--- a/Defogger/res/layout/activity_main.xml
+++ b/Defogger/res/layout/activity_main.xml
@@ -16,6 +16,11 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/start_scan"/>
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/command" />
+
<EditText
android:id="@+id/command"
android:layout_width="fill_parent"
@@ -77,8 +82,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/setup"/>
- <TextView
- android:id="@+id/result"
+ <ListView
+ android:id="@+id/networks"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
diff --git a/Defogger/res/values/strings.xml b/Defogger/res/values/strings.xml
index a1a5381..30c8fd7 100644
--- a/Defogger/res/values/strings.xml
+++ b/Defogger/res/values/strings.xml
@@ -11,6 +11,7 @@
<string name="ipconfig">Show IP configuration</string>
<string name="sysinfo">Get system information</string>
<string name="setup">Setup WiFi network</string>
+ <string name="command">Run command:</string>
<!-- Scanner -->
diff --git a/Defogger/src/no/mork/android/defogger/MainActivity.java b/Defogger/src/no/mork/android/defogger/MainActivity.java
index cf6d2a9..6b38102 100644
--- a/Defogger/src/no/mork/android/defogger/MainActivity.java
+++ b/Defogger/src/no/mork/android/defogger/MainActivity.java
@@ -17,10 +17,14 @@ import android.text.format.DateFormat;
import android.util.Base64;
import android.util.Log;
import android.view.KeyEvent;
+import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
+import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
+import android.widget.ListView;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import java.nio.charset.StandardCharsets;
@@ -177,11 +181,11 @@ public class MainActivity extends Activity {
}
// utilities
- private Map<String,String> splitKV(String kv)
+ private Map<String,String> splitKV(String kv, String splitter)
{
Map<String,String> ret = new HashMap();
- for (String s : kv.split(";")) {
+ for (String s : kv.split(splitter)) {
String[] foo = s.split("=");
ret.put(foo[0], foo[1]);
}
@@ -247,7 +251,7 @@ public class MainActivity extends Activity {
public void onCharacteristicRead (BluetoothGatt gatt, BluetoothGattCharacteristic c, int status) {
int code = (int)(c.getUuid().getMostSignificantBits() >> 32);
String val = c.getStringValue(0);
- Map<String,String> kv = splitKV(val);
+ Map<String,String> kv = splitKV(val, ";");
Log.d(msg, c.getUuid().toString() + " returned " + val);
@@ -272,10 +276,8 @@ public class MainActivity extends Activity {
if (!kv.get("N").equals(kv.get("P")))
doWifiScan(gatt);
else
- for (String net : multimsg.split("&"))
- Log.d(msg, net);
+ selectNetwork(multimsg.split("&"));
break;
-
case 0xa101: // wificonfig
displayWifiConfig(kv);
break;
@@ -302,7 +304,7 @@ public class MainActivity extends Activity {
public void onCharacteristicWrite (BluetoothGatt gatt, BluetoothGattCharacteristic c, int status) {
int code = (int)(c.getUuid().getMostSignificantBits() >> 32);
String val = c.getStringValue(0);
- Map<String,String> kv = splitKV(val);
+ Map<String,String> kv = splitKV(val, ";");
Log.d(msg, "Write to " + c.getUuid().toString() + " status=" + status + ", value is now: " + val);
@@ -384,6 +386,57 @@ public class MainActivity extends Activity {
});
}
+ private class NetAdapter extends ArrayAdapter<String> {
+ private int res;
+
+ public NetAdapter(Context context, int resource, String[] networks) {
+ super(context, resource, networks);
+ res = resource;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ //L=I=aaaa7,M=0,C=4,S=4,E=2,P=100
+ // Get the data item for this position
+ Map<String,String> net = splitKV(getItem(position).substring(2), ",");
+
+ // Check if an existing view is being reused, otherwise inflate the view
+ if (convertView == null) {
+ convertView = LayoutInflater.from(getContext()).inflate(res, parent, false);
+ }
+
+ // Lookup view for data population
+ TextView ssid = (TextView) convertView.findViewById(R.id.ssid);
+ TextView channel = (TextView) convertView.findViewById(R.id.channel);
+ TextView key_mgmt = (TextView) convertView.findViewById(R.id.key_mgmt);
+ TextView proto = (TextView) convertView.findViewById(R.id.proto);
+ TextView rssi = (TextView) convertView.findViewById(R.id.rssi);
+
+ // Populate the data into the template view using the data object
+ ssid.setText(net.get("I"));
+ channel.setText(net.get("C"));
+ key_mgmt.setText(net.get("S"));
+ proto.setText(net.get("E"));
+ rssi.setText(net.get("P"));
+
+ // Return the completed view to render on screen
+ return convertView;
+ }
+ }
+
+ private void selectNetwork(String[] networks) {
+ Context ctx = this;
+ Log.d(msg, "displayWifiConfig()");
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ ArrayAdapter<String> itemsAdapter = new NetAdapter(ctx, R.layout.netitem, networks);
+ ListView listView = (ListView) findViewById(R.id.networks);
+ listView.setAdapter(itemsAdapter);
+ }
+ });
+ }
+
private void connectDevice(BluetoothDevice device) {
Log.d(msg, "connectDevice() " + device.getAddress());
@@ -423,11 +476,12 @@ public class MainActivity extends Activity {
if (locked)
return;
- /* collect current config when unlocking */
- doWifiScan(gatt);
+ /* collect current config after unlocking */
getWifiConfig(gatt);
+ getWifiLink(gatt);
getIpConfig(gatt);
getSysInfo(gatt);
+ doWifiScan(gatt);
}
private void notifications(BluetoothGatt gatt, boolean enable) {