Merge "/bin/wifi: Make 'wifi show' work for Frenzy." into wifitv
diff --git a/conman/connection_manager.py b/conman/connection_manager.py
index d9ccefc..f925c26 100755
--- a/conman/connection_manager.py
+++ b/conman/connection_manager.py
@@ -272,7 +272,8 @@
wifi_up = self.is_interface_up(wifi.name)
self.ifplugd_action(wifi.name, wifi_up)
if wifi_up:
- wifi.attach_wpa_control(self._wpa_control_interface)
+ self._status.attached_to_wpa_supplicant = wifi.attach_wpa_control(
+ self._wpa_control_interface)
for path, prefix in ((self._tmp_dir, self.GATEWAY_FILE_PREFIX),
(self._interface_status_dir, ''),
@@ -374,7 +375,8 @@
if not wifi.attached():
logging.debug('Attempting to attach to wpa control interface for %s',
wifi.name)
- wifi.attach_wpa_control(self._wpa_control_interface)
+ self._status.attached_to_wpa_supplicant = wifi.attach_wpa_control(
+ self._wpa_control_interface)
wifi.handle_wpa_events()
# Only one wlan_configuration per interface will have access_point ==
diff --git a/conman/interface.py b/conman/interface.py
index 0f42e20..0d81b65 100755
--- a/conman/interface.py
+++ b/conman/interface.py
@@ -333,8 +333,16 @@
return self._wpa_control and self._wpa_control.attached
def attach_wpa_control(self, path):
+ """Attach to the wpa_supplicant control interface.
+
+ Args:
+ path: The path containing the wpa_supplicant control interface socket.
+
+ Returns:
+ Whether attaching was successful.
+ """
if self.attached():
- return
+ return True
socket = os.path.join(path, self.name)
if os.path.exists(socket):
@@ -343,7 +351,7 @@
self._wpa_control.attach()
except wpactrl.error as e:
logging.error('Error attaching to wpa_supplicant: %s', e)
- return
+ return False
for line in self._wpa_control.request('STATUS').splitlines():
if '=' not in line:
@@ -353,6 +361,11 @@
self.wpa_supplicant = value == 'COMPLETED'
elif key == 'ssid' and not self._initialized:
self.initial_ssid = value
+ else:
+ logging.error('wpa control socket does not exist: %s', socket)
+ return False
+
+ return True
def get_wpa_control(self, socket):
return wpactrl.WPACtrl(socket)
diff --git a/conman/status.py b/conman/status.py
index 1026a0b..e21dc01 100644
--- a/conman/status.py
+++ b/conman/status.py
@@ -29,6 +29,7 @@
COULD_REACH_ACS = 'COULD_REACH_ACS'
CAN_REACH_INTERNET = 'CAN_REACH_INTERNET'
PROVISIONING_FAILED = 'PROVISIONING_FAILED'
+ ATTACHED_TO_WPA_SUPPLICANT = 'ATTACHED_TO_WPA_SUPPLICANT'
# Format: { proposition: (implications, counter-implications), ... }
@@ -66,6 +67,10 @@
(P.HAVE_CONFIG,),
(),
),
+ P.ATTACHED_TO_WPA_SUPPLICANT: (
+ (),
+ (),
+ )
}
@@ -78,7 +83,7 @@
def __init__(self, name, export_path):
self._name = name
self._export_path = export_path
- self._value = False
+ self._value = None
self._implications = set()
self._counter_implications = set()
self._impliers = set()
diff --git a/wifi/quantenna.py b/wifi/quantenna.py
index ab45b04..54b0262 100755
--- a/wifi/quantenna.py
+++ b/wifi/quantenna.py
@@ -115,6 +115,13 @@
# 'apply_security_config' must be called instead.
_qcsapi('apply_security_config', 'wifi0')
+ for _ in xrange(10):
+ if _qcsapi('get_status', 'wifi0') == 'Up':
+ break
+ time.sleep(1)
+ else:
+ raise utils.BinWifiException('wpa_supplicant failed to connect')
+
return True
diff --git a/wifi/quantenna_test.py b/wifi/quantenna_test.py
index 12626c4..0b6975f 100755
--- a/wifi/quantenna_test.py
+++ b/wifi/quantenna_test.py
@@ -19,7 +19,9 @@
def fake_qcsapi(*args):
calls.append(list(args))
if args[0] == 'is_startprod_done':
- return '1\n' if ['startprod', 'wifi0'] in calls else '0\n'
+ return '1' if ['startprod', 'wifi0'] in calls else '0'
+ if args[0] == 'get_status':
+ return 'Up' if ['get_status', 'wifi0'] in calls else 'Down'
bridge_interfaces = set()