-
Notifications
You must be signed in to change notification settings - Fork 0
/
wlan.py
117 lines (94 loc) · 3.53 KB
/
wlan.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import logging
import os
import platform
import re
from nmcli import device
from qtCore import *
class DeviceWifi:
def __init__(self):
self.in_use = False
self.ssid = ''
self.bssid = ''
self.mode = ''
self.chan = 0
self.freq = 0
self.rate = 0
self.signal = 0
self.security = ''
class WlanConnectQThread(QThread):
def __init__(self):
super(WlanConnectQThread, self).__init__()
self._passwd = ""
self._ssid = ""
# def __del__(self):
# self.wait()
def set_connect_wifi(self, ssid, passwd):
self._ssid = ssid
self._passwd = passwd
def _connect_wifi(self):
try:
# device.wifi_connect(self._ssid, self._passwd)
os.system(F"nmcli dev wifi connect '{self._ssid}' password '{self._passwd}'")
except Exception as e:
logging.debug("wifi connect failed.", e)
def run(self) -> None:
self._connect_wifi()
class WlanListQThread(QThread):
newWlanList = pyqtSignal(QVariant)
def __init__(self):
super(WlanListQThread, self).__init__()
self.working = True
self.deviceWifi = []
# def __del__(self):
# self.working = False
# self.wait()
def _get_wifi_list(self):
try:
if is_release:
device.wifi_rescan()
lists = device.wifi()
if lists:
self.deviceWifi.clear()
for info in lists:
dat = re.findall(
"in_use=(.*), ssid='(.*)', bssid='(.*)', mode='(.*)', chan=(\\d*), freq=(\\d*), "
"rate=(\\d*), signal=(\\d*), security='(.*)'", str(info))
if dat:
dev = {'in_use': True if "True" in dat[0][0] else False, 'ssid': dat[0][1],
'bssid': dat[0][2], 'mode': dat[0][3],
'chan': int(dat[0][4]), 'freq': int(dat[0][5]), 'rate': int(dat[0][6]),
'signal': int(dat[0][7]), 'security': dat[0][8]}
self.deviceWifi.append(dev)
self.newWlanList.emit(self.deviceWifi)
else: # windows test
self.deviceWifi.clear()
for i in range(10):
dev = {'in_use': False, 'ssid': '中文@test:' + str(i), 'bssid': '0', 'mode': '1',
'chan': 20, 'freq': 2000, 'rate': 2000, 'signal': 100,
'security': 'WPA2'}
self.deviceWifi.append(dev)
self.newWlanList.emit(self.deviceWifi)
except Exception as e:
logging.debug("not find wifi.", e)
def is_working(self):
return self.working
def run(self) -> None:
self._get_wifi_list()
class MixwareScreenWLAN(QObject):
newWlanList = pyqtSignal(QVariant)
def __init__(self):
super(MixwareScreenWLAN, self).__init__()
self._list_thread = WlanListQThread()
self._list_thread.newWlanList.connect(self._newWlanList)
self._connect_thread = WlanConnectQThread()
@pyqtSlot()
def update(self):
self._list_thread.start()
@pyqtSlot(str, str)
def connect(self, ssid, passwd):
self._connect_thread._ssid = ssid
self._connect_thread._passwd = passwd
self._connect_thread.start()
@pyqtSlot(QVariant)
def _newWlanList(self, _list=QVariant):
self.newWlanList.emit(_list)