src/eric7/MicroPython/EthernetDialogs/EthernetStatusDialog.py

Mon, 05 May 2025 17:40:08 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 05 May 2025 17:40:08 +0200
branch
eric7
changeset 11263
28f0ead11a82
parent 11090
f5f5f5803935
permissions
-rw-r--r--

MicroPython
- Added support for IPv6 for WiFi and Ethernet enabled devices (MPy ≥ 1.24.0).

9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3 # Copyright (c) 2023 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to show Ethernet related status information.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
10 from PyQt6.QtCore import Qt, pyqtSlot
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
13 from eric7.EricGui import EricPixmapCache
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
14 from eric7.SystemUtilities.NetworkUtilities import ipv6AddressScope
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
15
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from .Ui_EthernetStatusDialog import Ui_EthernetStatusDialog
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 class EthernetStatusDialog(QDialog, Ui_EthernetStatusDialog):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 Class implementing a dialog to show Ethernet related status information.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
24 def __init__(self, microPython, parent=None):
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 Constructor
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
28 @param microPython reference to the MicroPython widget
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
29 @type MicroPythonWidget
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @param parent reference to the parent widget (defaults to None)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 @type QWidget (optional)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 super().__init__(parent)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 self.setupUi(self)
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
35 self.setWindowFlags(Qt.WindowType.Window)
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 self.statusTree.setColumnCount(2)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
39 self.refreshButton.setIcon(EricPixmapCache.getIcon("reload"))
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
40 self.refreshButton.clicked.connect(self.__showStatus)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
41
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
42 self.__mpy = microPython
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
43
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
44 self.__showStatus()
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
45
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
46 @pyqtSlot()
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
47 def __showStatus(self):
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
48 """
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
49 Private slot to show the current WiFi status.
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
50 """
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
51 # clear old data
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
52 self.statusTree.clear()
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
53
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
54 # get the status
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
55 try:
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
56 status, addressInfo = self.__mpy.getDevice().getEthernetStatus()
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
57 except Exception as exc:
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
58 self.__mpy.showError("getEthernetStatus()", str(exc))
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
59 return
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
60
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 for topic, value in status:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 QTreeWidgetItem(self.statusTree, [topic, str(value)])
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
64 if addressInfo["ipv4"]:
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
65 header = self.__createHeader(self.statusTree, self.tr("IPv4"))
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
66 QTreeWidgetItem(header, [self.tr("Address"), addressInfo["ipv4"][0]])
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
67 QTreeWidgetItem(header, [self.tr("Netmask"), addressInfo["ipv4"][1]])
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
68 QTreeWidgetItem(header, [self.tr("Gateway"), addressInfo["ipv4"][2]])
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
69 QTreeWidgetItem(header, [self.tr("DNS"), addressInfo["ipv4"][3]])
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
70
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
71 if addressInfo["ipv6"]:
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
72 header = self.__createHeader(self.statusTree, self.tr("IPv6"))
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
73 addrHeader = self.__createHeader(
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
74 header, self.tr("Addresses"), underlined=False
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
75 )
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
76 for addr in sorted(addressInfo["ipv6"]):
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
77 QTreeWidgetItem(addrHeader, [addr.lower(), ipv6AddressScope(addr)])
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
78
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 for col in range(self.statusTree.columnCount()):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.statusTree.resizeColumnToContents(col)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setDefault(True)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 self.buttonBox.setFocus(Qt.FocusReason.OtherFocusReason)
11263
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
84
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
85 def __createHeader(self, parent, text, underlined=True):
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
86 """
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
87 Private method to create a subheader item.
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
88
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
89 @param parent reference to the parent item
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
90 @type QTreeWidgetItem
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
91 @param text text for the header item
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
92 @type str
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
93 @param underlined flag indicating an underlined header (defaults to True)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
94 @type bool (optional)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
95 @return reference to the created header item
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
96 @rtype QTreeWidgetItem
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
97 """
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
98 headerItem = QTreeWidgetItem(parent, [text])
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
99 headerItem.setExpanded(True)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
100 headerItem.setFirstColumnSpanned(True)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
101
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
102 if underlined:
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
103 font = headerItem.font(0)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
104 font.setUnderline(True)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
105 headerItem.setFont(0, font)
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
106
28f0ead11a82 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
107 return headerItem

eric ide

mercurial