Added the Adafruit Feather nRF52840 to the list of known NRF52 boards and changed the list of known CircuitPython boards to be more explicit with respect to Adafruit boards (i.e. VID 0x239A).
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1
|
# -*- coding: utf-8 -*- |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2
|
|
11090
|
3
|
# Copyright (c) 2023 - 2025 Detlev Offenbach <detlev@die-offenbachs.de> |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4
|
# |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7
|
Module implementing the Ethernet related functionality. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10
|
from PyQt6.QtCore import QObject, pyqtSlot |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11
|
from PyQt6.QtWidgets import QDialog, QMenu |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13
|
from eric7.EricGui.EricOverrideCursor import EricOverrideCursor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14
|
from eric7.EricWidgets import EricMessageBox |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17
|
class EthernetController(QObject): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19
|
Class implementing the Ethernet related functionality. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22
|
def __init__(self, microPython, parent=None): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24
|
Constructor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26
|
@param microPython reference to the MicroPython widget |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27
|
@type MicroPythonWidgep |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28
|
@param parent reference to the parent object (defaults to None) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29
|
@type QObject (optional) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31
|
super().__init__(parent) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33
|
self.__mpy = microPython |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35
|
def createMenu(self, menu): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37
|
Public method to create the Ethernet submenu. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39
|
@param menu reference to the parent menu |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40
|
@type QMenu |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41
|
@return reference to the created menu |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42
|
@rtype QMenu |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44
|
ethernetMenu = QMenu(self.tr("Ethernet Functions"), menu) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45
|
ethernetMenu.setTearOffEnabled(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46
|
ethernetMenu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47
|
self.tr("Show Ethernet Status"), self.__showEthernetStatus |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49
|
ethernetMenu.addSeparator() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50
|
ethernetMenu.addAction(self.tr("Connect to LAN (DHCP)"), self.__connectLanDhcp) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51
|
ethernetMenu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52
|
self.tr("Connect to LAN (fixed IP)"), self.__connectLanIp |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54
|
ethernetMenu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55
|
self.tr("Check Internet Connection"), self.__checkInternet |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57
|
ethernetMenu.addAction(self.tr("Disconnect from LAN"), self.__disconnectLan) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58
|
ethernetMenu.addSeparator() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59
|
ethernetMenu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60
|
self.tr("Write Auto-Connect Script"), self.__writeAutoConnect |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62
|
ethernetMenu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63
|
self.tr("Remove Auto-Connect Script"), self.__removeAutoConnect |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65
|
ethernetMenu.addSeparator() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66
|
ethernetMenu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67
|
self.tr("Deactivate Ethernet Interface"), self.__deactivateEthernet |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69
|
ethernetMenu.addSeparator() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70
|
ethernetMenu.addAction(self.tr("Set Network Time"), self.__setNetworkTime) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72
|
# add device specific entries (if there are any) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73
|
self.__mpy.getDevice().addDeviceEthernetEntries(ethernetMenu) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75
|
return ethernetMenu |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78
|
def __showEthernetStatus(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80
|
Private slot to show a dialog with the WiFi status of the current device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82
|
from .EthernetStatusDialog import EthernetStatusDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84
|
try: |
9885
|
85
|
with EricOverrideCursor(): |
|
86
|
status = self.__mpy.getDevice().getEthernetStatus() |
|
87
|
# status is a list of user labels and associated values |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88
|
|
11005
|
89
|
dlg = EthernetStatusDialog(status, parent=self.__mpy) |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90
|
dlg.exec() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91
|
except Exception as exc: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92
|
self.__mpy.showError("getEthernetStatus()", str(exc)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95
|
def __connectLanDhcp(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97
|
Private slot to connect to the LAN with a dynamic IPv4 address (DHCP mode). |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98
|
""" |
10153
|
99
|
from .HostnameDialog import HostnameDialog |
|
100
|
|
11005
|
101
|
dlg = HostnameDialog(parent=self.__mpy) |
10153
|
102
|
hostname = ( |
10167
|
103
|
dlg.getHostname() if dlg.exec() == QDialog.DialogCode.Accepted else "" |
10153
|
104
|
) |
|
105
|
self.__connectLan("dhcp", hostname) |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108
|
def __connectLanIp(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110
|
Private slot to connect to the LAN with a fixed IPv4 address (fixed address |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111
|
mode). |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113
|
from .IPv4AddressDialog import IPv4AddressDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115
|
dlg = IPv4AddressDialog(withDhcp=False, parent=self.__mpy) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116
|
if dlg.exec() == QDialog.DialogCode.Accepted: |
10153
|
117
|
ifconfig, hostname = dlg.getIPv4Address() |
|
118
|
self.__connectLan(ifconfig, hostname) |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119
|
|
10153
|
120
|
def __connectLan(self, config, hostname): |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122
|
Private method to connect the connected device to the LAN. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124
|
@param config configuration for the connection (either the string 'dhcp' |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125
|
for a dynamic address or a tuple of four strings with the IPv4 parameters. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126
|
@type str of tuple of (str, str, str, str) |
10153
|
127
|
@param hostname host name of the device |
|
128
|
@type str |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129
|
""" |
10153
|
130
|
success, error = self.__mpy.getDevice().connectToLan(config, hostname) |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131
|
if success: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134
|
self.tr("Connect to LAN"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135
|
self.tr("<p>The device was connected to the LAN successfully.</p>"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140
|
self.tr("Connect to LAN"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142
|
"<p>The device could not connect to the LAN.</p><p>Reason: {0}</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143
|
).format(error if error else self.tr("unknown")), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147
|
def __disconnectLan(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149
|
Private slot to disconnect from the LAN. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
151
|
success, error = self.__mpy.getDevice().disconnectFromLan() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152
|
if success: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155
|
self.tr("Disconnect from LAN"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156
|
self.tr("<p>The device was disconnected from the LAN.</p>"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161
|
self.tr("Disconnect from LAN"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163
|
"<p>The device could not be disconnected from the LAN.</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164
|
"<p>Reason: {0}</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165
|
).format(error if error else self.tr("unknown")), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169
|
def __checkInternet(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
170
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171
|
Private slot to check the availability of an internet connection. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172
|
""" |
9885
|
173
|
with EricOverrideCursor(): |
|
174
|
success, error = self.__mpy.getDevice().checkInternetViaLan() |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175
|
if not error: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176
|
msg = ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177
|
self.tr("<p>The internet connection is <b>available</b>.</p>") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178
|
if success |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179
|
else self.tr("<p>The internet connection is <b>not available</b>.</p>") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183
|
self.tr("Check Internet Connection"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184
|
msg, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189
|
self.tr("Check Internet Connection"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
190
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191
|
"<p>The internet is not available.</p><p>Reason: {0}</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192
|
).format(error if error else self.tr("unknown")), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196
|
def __writeAutoConnect(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198
|
Private slot to generate a script and associated configuration to connect the |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199
|
device during boot time. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201
|
This will also modify the boot script to perform the automatic connection. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
203
|
from .IPv4AddressDialog import IPv4AddressDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
204
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
205
|
dlg = IPv4AddressDialog(withDhcp=True, parent=self.__mpy) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
206
|
if dlg.exec() == QDialog.DialogCode.Accepted: |
10153
|
207
|
ifconfig, hostname = dlg.getIPv4Address() |
|
208
|
ok, err = self.__mpy.getDevice().writeLanAutoConnect(ifconfig, hostname) |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
209
|
if ok: |
9885
|
210
|
if self.__mpy.getDevice().hasCircuitPython(): |
|
211
|
# CircuitPython will reset for the REPL, so no auto-connect |
|
212
|
# available. |
|
213
|
EricMessageBox.information( |
|
214
|
None, |
|
215
|
self.tr("Write Auto-Connect Script"), |
|
216
|
self.tr( |
|
217
|
"<p>The auto-connect script and associated configuration" |
|
218
|
" was saved on the device. Use the script like this:</p>" |
|
219
|
"<p>import wiznet_connect<br/>" |
|
220
|
"nic = wiznet_connect.connect_lan()</p>" |
|
221
|
), |
|
222
|
) |
|
223
|
else: |
|
224
|
EricMessageBox.information( |
|
225
|
None, |
|
226
|
self.tr("Write Auto-Connect Script"), |
|
227
|
self.tr( |
|
228
|
"<p>The auto-connect script and associated configuration" |
|
229
|
" was saved on the device. The device will connect to the" |
|
230
|
" LAN at boot time.</p>" |
|
231
|
), |
|
232
|
) |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
233
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
234
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
235
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
236
|
self.tr("Write Auto-Connect Script"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
237
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
238
|
"<p>The auto-connect script and associated configuration could" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
239
|
" not be saved on the device.</p><p>Reason: {0}</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
240
|
).format(err if err else self.tr("unknown")), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
241
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
242
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
243
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
244
|
def __removeAutoConnect(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
245
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
246
|
Private slot to remove the boot time connect capability. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
247
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
248
|
This will not remove the auto-connect part of the boot script. This needs to be |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
249
|
done manually if desired. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
250
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
251
|
ok = EricMessageBox.yesNo( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
252
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
253
|
self.tr("Remove Auto-Connect Script"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
254
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
255
|
"Shall the saved IPv4 parameters really be removed from the connected" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
256
|
" device?" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
257
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
258
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
259
|
if ok: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
260
|
ok, err = self.__mpy.getDevice().removeLanAutoConnect() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
261
|
if ok: |
9885
|
262
|
if self.__mpy.getDevice().hasCircuitPython(): |
|
263
|
EricMessageBox.information( |
|
264
|
None, |
|
265
|
self.tr("Remove Auto-Connect Script"), |
|
266
|
self.tr( |
|
267
|
"<p>The IPv4 parameters were removed from the device.</p>" |
|
268
|
), |
|
269
|
) |
|
270
|
else: |
|
271
|
EricMessageBox.information( |
|
272
|
None, |
|
273
|
self.tr("Remove Auto-Connect Script"), |
|
274
|
self.tr( |
|
275
|
"<p>The IPv4 parameters were removed from the device. The" |
|
276
|
" device will not connect to the LAN at boot time anymore." |
|
277
|
"</p>" |
|
278
|
), |
|
279
|
) |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
280
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
281
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
282
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
283
|
self.tr("Remove Auto-Connect Script"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
284
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
285
|
"<p>The IPv4 parameters could not be removed from the device." |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
286
|
"</p><p>Reason: {0}</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
287
|
).format(err if err else self.tr("unknown")), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
288
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
289
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
290
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
291
|
def __deactivateEthernet(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
292
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
293
|
Private slot to deactivate the Ethernet interface. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
294
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
295
|
ok, err = self.__mpy.getDevice().deactivateEthernet() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
296
|
if ok: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
297
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
298
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
299
|
self.tr("Deactivate Ethernet Interface"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
300
|
self.tr("The Ethernet interface was deactivated successfully."), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
301
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
302
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
303
|
msg = self.tr("<p>The Ethernet interface could not be deactivated.</p>") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
304
|
if err: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
305
|
msg += self.tr("<p>Reason: {0}</p>").format(err) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
306
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
307
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
308
|
self.tr("Deactivate Ethernet Interface"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
309
|
msg, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
310
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
311
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
312
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
313
|
def __setNetworkTime(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
314
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
315
|
Private slot to synchronize the device clock to network time. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
316
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
317
|
from ..NtpParametersDialog import NtpParametersDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
318
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
319
|
device = self.__mpy.getDevice() |
10230
|
320
|
if not device.hasNetworkTime(): |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
321
|
if device.hasCircuitPython(): |
9885
|
322
|
if device.getDeviceData("ethernet"): |
|
323
|
moduleName = "adafruit_wiznet5k" |
|
324
|
else: |
|
325
|
moduleName = "adafruit_ntp" |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
326
|
EricMessageBox.warning( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
327
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
328
|
self.tr("Set Network Time"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
329
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
330
|
"<p>The device does not support network time synchronization." |
9885
|
331
|
" The module <b>{0}</b> is not installed.</p>" |
|
332
|
).format(moduleName), |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
333
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
334
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
335
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
336
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
337
|
self.tr("Set Network Time"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
338
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
339
|
"<p>The device does not support network time synchronization." |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
340
|
" The module <b>ntptime</b> is not available.</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
341
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
342
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
343
|
return |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
344
|
|
11005
|
345
|
dlg = NtpParametersDialog(parent=self.__mpy) |
9878
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
346
|
if dlg.exec() == QDialog.DialogCode.Accepted: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
347
|
server, tzOffset, isDst, timeout = dlg.getParameters() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
348
|
if isDst: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
349
|
tzOffset += 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
350
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
351
|
ok, err = self.__mpy.getDevice().setNetworkTime( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
352
|
server=server, tzOffset=tzOffset, timeout=timeout |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
353
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
354
|
if ok: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
355
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
356
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
357
|
self.tr("Set Network Time"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
358
|
self.tr("The device time was synchronized successfully."), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
359
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
360
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
361
|
if err: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
362
|
msg = self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
363
|
"<p>The device time could not be synchronized.</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
364
|
"<p>Reason: {0}</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
365
|
).format(err) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
366
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
367
|
msg = self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
368
|
"<p>The device time could not be synchronized. Is the device" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
369
|
" connected to a LAN?</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
370
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
371
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
372
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
373
|
self.tr("Set Network Time"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
374
|
msg, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
375
|
) |