src/eric7/MicroPython/Devices/CircuitPythonDevices.py

Sat, 29 Jul 2023 19:27:18 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 29 Jul 2023 19:27:18 +0200
branch
eric7
changeset 10138
56614cf9d03c
parent 10069
435cc5875135
child 10144
45a9177c8e77
permissions
-rw-r--r--

MicroPython
- Optimized the MicroPython super menu handling a little bit.

7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
9653
e67609152c5e Updated copyright for 2023.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9624
diff changeset
3 # Copyright (c) 2019 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the device interface class for CircuitPython boards.
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
10 import ast
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
11 import binascii
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
12 import json
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
13 import os
7116
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
14 import shutil
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
15
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
16 from PyQt6.QtCore import QUrl, pyqtSlot
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
17 from PyQt6.QtNetwork import QNetworkReply, QNetworkRequest
9944
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
18 from PyQt6.QtWidgets import QInputDialog, QMenu
7116
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
19
9742
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
20 from eric7 import Globals, Preferences
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
21 from eric7.EricGui.EricOverrideCursor import EricOverrideCursor, EricOverridenCursor
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
22 from eric7.EricWidgets import EricFileDialog, EricMessageBox
9742
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
23 from eric7.EricWidgets.EricApplication import ericApp
9944
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
24 from eric7.SystemUtilities import FileSystemUtilities, OSUtilities
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
26 from ..EthernetDialogs import WiznetUtilities
9765
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
27 from ..MicroPythonWidget import HAS_QTCHART
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
28 from . import FirmwareGithubUrls
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
29 from .CircuitPythonUpdater.CircuitPythonUpdaterInterface import (
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
30 CircuitPythonUpdaterInterface,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
31 isCircupAvailable,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
32 )
9756
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
33 from .DeviceBase import BaseDevice
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
9756
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
36 class CircuitPythonDevice(BaseDevice):
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 Class implementing the device for CircuitPython boards.
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
40
7132
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
41 DeviceVolumeName = "CIRCUITPY"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
42
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
43 def __init__(
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
44 self,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
45 microPythonWidget,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
46 deviceType,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
47 boardName,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
48 vid=0,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
49 pid=0,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
50 hasWorkspace=True,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
51 parent=None,
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
52 ):
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
55
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 @param microPythonWidget reference to the main MicroPython widget
7134
21d23ca51680 Renamed "MicroPythonReplWidget" to "MicroPythonWidget".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7132
diff changeset
57 @type MicroPythonWidget
8117
aaa5e0eacd4e MicroPython: changed the logic to synchronize the time because some devices don't implement long integer and failed defining the 'set_time()' function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8096
diff changeset
58 @param deviceType device type assigned to this device interface
aaa5e0eacd4e MicroPython: changed the logic to synchronize the time because some devices don't implement long integer and failed defining the 'set_time()' function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8096
diff changeset
59 @type str
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
60 @param boardName name of the board
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
61 @type str
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
62 @param vid vendor ID (defaults to 0)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
63 @type int (optional)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
64 @param pid product ID (defaults to 0)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
65 @type int (optional)
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
66 @param hasWorkspace flag indicating that the devices supports access via
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
67 a mounted volume (defaults to True)
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
68 @type bool (optional)
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 @param parent reference to the parent object
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 @type QObject
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
72 super().__init__(microPythonWidget, deviceType, parent)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
73
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
74 self._submitMode = "paste" # use 'paste' mode to avoid loosing state
9799
a79430a8811d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9786
diff changeset
75
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
76 self.__boardName = boardName
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
77 self.__vidpid = (vid, pid)
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
78
9944
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
79 self.__workspaceSelected = False
9870
0399d3607829 Fixed a few code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9868
diff changeset
80 self.__workspace = self.__findWorkspace() if hasWorkspace else None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
81
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
82 self.__updater = CircuitPythonUpdaterInterface(self)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
83
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
84 self.__createCPyMenu()
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
85
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
86 self.__wiznetVidPid = (
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
87 (0x2E8A, 0x1027), # WIZnet W5100S-EVB-Pico
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
88 (0x2E8A, 0x1029), # WIZnet W5500-EVB-Pico
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
89 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
90
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
91 self.__securityTranslations = {
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
92 "OPEN": self.tr("open", "open WiFi network"),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
93 "WEP": "WEP",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
94 "WPA_PSK": "WPA",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
95 "WPA2_PSK": "WPA2",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
96 "WPA_WPA2_PSK": "WPA/WPA2",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
97 "WPA2_ENTERPRISE": "WPA2 (CCMP)",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
98 "WPA3_PSK": "WPA3",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
99 "WPA2_WPA3_PSK": "WPA2/WPA3",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
100 }
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
101 self.__securityCode2AuthModeString = {
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
102 0: "[wifi.AuthMode.OPEN]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
103 1: "[wifi.AuthMode.WEP]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
104 2: "[wifi.AuthMode.WPA, wifi.AuthMode.PSK]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
105 3: "[wifi.AuthMode.WPA2, wifi.AuthMode.PSK]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
106 4: "[wifi.AuthMode.WPA, wifi.AuthMode.WPA2, wifi.AuthMode.PSK]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
107 5: "[wifi.AuthMode.WPA2, wifi.AuthMode.ENTERPRISE]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
108 6: "[wifi.AuthMode.WPA3, wifi.AuthMode.PSK]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
109 7: "[wifi.AuthMode.WPA2, wifi.AuthMode.WPA3, wifi.AuthMode.PSK]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
110 }
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
111 self.__bleAddressType = {
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
112 0: self.tr("Public"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
113 1: self.tr("Random Static"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
114 2: self.tr("Random Private Resolvable"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
115 3: self.tr("Random Private Non-Resolvable"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
116 }
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
117
9783
5f84d5eeee9e Corrected an issue in the CircuitPython device causing a torn off menu to remain visible after a device disconnect.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9767
diff changeset
118 def setConnected(self, connected):
5f84d5eeee9e Corrected an issue in the CircuitPython device causing a torn off menu to remain visible after a device disconnect.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9767
diff changeset
119 """
5f84d5eeee9e Corrected an issue in the CircuitPython device causing a torn off menu to remain visible after a device disconnect.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9767
diff changeset
120 Public method to set the connection state.
5f84d5eeee9e Corrected an issue in the CircuitPython device causing a torn off menu to remain visible after a device disconnect.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9767
diff changeset
121
5f84d5eeee9e Corrected an issue in the CircuitPython device causing a torn off menu to remain visible after a device disconnect.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9767
diff changeset
122 @param connected connection state
5f84d5eeee9e Corrected an issue in the CircuitPython device causing a torn off menu to remain visible after a device disconnect.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9767
diff changeset
123 @type bool
5f84d5eeee9e Corrected an issue in the CircuitPython device causing a torn off menu to remain visible after a device disconnect.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9767
diff changeset
124 """
5f84d5eeee9e Corrected an issue in the CircuitPython device causing a torn off menu to remain visible after a device disconnect.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9767
diff changeset
125 if not connected and self.__libraryMenu.isTearOffMenuVisible():
5f84d5eeee9e Corrected an issue in the CircuitPython device causing a torn off menu to remain visible after a device disconnect.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9767
diff changeset
126 self.__libraryMenu.hideTearOffMenu()
5f84d5eeee9e Corrected an issue in the CircuitPython device causing a torn off menu to remain visible after a device disconnect.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9767
diff changeset
127
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
128 if self.__flashMenu.isTearOffMenuVisible():
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
129 self.__flashMenu.hideTearOffMenu()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
130
9783
5f84d5eeee9e Corrected an issue in the CircuitPython device causing a torn off menu to remain visible after a device disconnect.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9767
diff changeset
131 super().setConnected(connected)
9979
dbafba79461d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9972
diff changeset
132 self._deviceData["local_mip"] = False
9783
5f84d5eeee9e Corrected an issue in the CircuitPython device causing a torn off menu to remain visible after a device disconnect.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9767
diff changeset
133
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
134 if (
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
135 connected
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
136 and not self._deviceData["ethernet"]
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
137 and self.__vidpid in self.__wiznetVidPid
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
138 ):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
139 with EricOverridenCursor():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
140 EricMessageBox.warning(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
141 None,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
142 self.tr("WIZnet 5x00 Ethernet"),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
143 self.tr(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
144 "<p>Support for <b>WIZnet 5x00</b> Ethernet boards could not be"
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
145 " detected. Is the module <b>adafruit_wiznet5k</b> installed?"
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
146 "</p>"
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
147 ),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
148 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
149
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 def setButtons(self):
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 Public method to enable the supported action buttons.
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8117
diff changeset
154 super().setButtons()
9763
52f982c08301 Removed the 'Open' and 'Save' buttons from the MicroPython widget and made the repl and file manager start automatically upon connecting to the selected device.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9756
diff changeset
155
7100
c4d9c28ebcd8 Devices.py files: removed some methods no longer needed after the recent improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7092
diff changeset
156 self.microPython.setActionButtons(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
157 run=True, repl=True, files=True, chart=HAS_QTCHART
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
158 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
159
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 def forceInterrupt(self):
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 Public method to determine the need for an interrupt when opening the
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 serial connection.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
164
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 @return flag indicating an interrupt is needed
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 @rtype bool
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
169
7125
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
170 def deviceName(self):
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
171 """
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
172 Public method to get the name of the device.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
173
7125
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
174 @return name of the device
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
175 @rtype str
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
176 """
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
177 return self.tr("CircuitPython")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
178
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 def canStartRepl(self):
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 Public method to determine, if a REPL can be started.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
182
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 @return tuple containing a flag indicating it is safe to start a REPL
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 and a reason why it cannot.
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 @rtype tuple of (bool, str)
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
188
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 def canStartPlotter(self):
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 Public method to determine, if a Plotter can be started.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
192
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 @return tuple containing a flag indicating it is safe to start a
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 Plotter and a reason why it cannot.
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 @rtype tuple of (bool, str)
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
198
7092
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
199 def canRunScript(self):
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
200 """
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
201 Public method to determine, if a script can be executed.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
202
7092
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
203 @return tuple containing a flag indicating it is safe to start a
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
204 Plotter and a reason why it cannot.
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
205 @rtype tuple of (bool, str)
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
206 """
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
207 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
208
7092
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
209 def runScript(self, script):
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
210 """
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
211 Public method to run the given Python script.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
212
7092
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
213 @param script script to be executed
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
214 @type str
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
215 """
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
216 pythonScript = script.split("\n")
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
217 self.sendCommands(pythonScript)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
218
7100
c4d9c28ebcd8 Devices.py files: removed some methods no longer needed after the recent improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7092
diff changeset
219 def canStartFileManager(self):
c4d9c28ebcd8 Devices.py files: removed some methods no longer needed after the recent improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7092
diff changeset
220 """
c4d9c28ebcd8 Devices.py files: removed some methods no longer needed after the recent improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7092
diff changeset
221 Public method to determine, if a File Manager can be started.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
222
7100
c4d9c28ebcd8 Devices.py files: removed some methods no longer needed after the recent improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7092
diff changeset
223 @return tuple containing a flag indicating it is safe to start a
c4d9c28ebcd8 Devices.py files: removed some methods no longer needed after the recent improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7092
diff changeset
224 File Manager and a reason why it cannot.
c4d9c28ebcd8 Devices.py files: removed some methods no longer needed after the recent improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7092
diff changeset
225 @rtype tuple of (bool, str)
c4d9c28ebcd8 Devices.py files: removed some methods no longer needed after the recent improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7092
diff changeset
226 """
c4d9c28ebcd8 Devices.py files: removed some methods no longer needed after the recent improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7092
diff changeset
227 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
228
7129
3cc19aec959a MicroPythonDevicces: added a method to indicate that a device allows access to its file system via a local directory.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7125
diff changeset
229 def supportsLocalFileAccess(self):
3cc19aec959a MicroPythonDevicces: added a method to indicate that a device allows access to its file system via a local directory.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7125
diff changeset
230 """
3cc19aec959a MicroPythonDevicces: added a method to indicate that a device allows access to its file system via a local directory.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7125
diff changeset
231 Public method to indicate file access via a local directory.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
232
7129
3cc19aec959a MicroPythonDevicces: added a method to indicate that a device allows access to its file system via a local directory.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7125
diff changeset
233 @return flag indicating file access via local directory
7145
ceb3e8b242c1 Regenerated source docu after merge with 'micropython' branch.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7138
diff changeset
234 @rtype bool
7129
3cc19aec959a MicroPythonDevicces: added a method to indicate that a device allows access to its file system via a local directory.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7125
diff changeset
235 """
7132
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
236 return self.__deviceVolumeMounted()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
237
7132
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
238 def __deviceVolumeMounted(self):
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
239 """
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
240 Private method to check, if the device volume is mounted.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
241
7132
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
242 @return flag indicated a mounted device
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
243 @rtype bool
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
244 """
8072
58491f4c99d6 MicroPython: added code to give a hint for CircuitPython devices, that do not support the UF2 bootloader for flashing.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8067
diff changeset
245 if self.__workspace and not os.path.exists(self.__workspace):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
246 self.__workspace = "" # reset
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
247
9944
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
248 if (
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
249 self.__workspace
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
250 and self.DeviceVolumeName not in self.__workspace
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
251 and not self.__workspaceSelected
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
252 ):
9786
f94b530722af Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9783
diff changeset
253 self.__workspace = "" # reset
9767
2eed840795c0 Fixed a few issues in the MicroPython file manager widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
254
9972
68ac01294544 Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9944
diff changeset
255 return self.__workspaceSelected or self.DeviceVolumeName in self.getWorkspace(
68ac01294544 Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9944
diff changeset
256 silent=True
9944
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
257 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
258
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
259 def __findDeviceDirectories(self, directories):
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
260 """
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
261 Private method to find the device directories associated with the
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
262 current board name.
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
263
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
264 @param directories list of directories to be checked
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
265 @type list of str
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
266 @return list of associated directories
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
267 @rtype list of str
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
268 """
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
269 boardDirectories = []
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
270 for directory in directories:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
271 bootFile = os.path.join(directory, "boot_out.txt")
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
272 if os.path.exists(bootFile):
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
273 with open(bootFile, "r") as f:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
274 line = f.readline()
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
275 if self.__boardName in line:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
276 boardDirectories.append(directory)
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
277
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
278 return boardDirectories
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
279
8062
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
280 def __findWorkspace(self, silent=False):
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
281 """
8067
a467ab075be0 MicroPython: added buttons to go to the 'home' directory (local and on device) to the MicroPython file manager and improved the workspace handling.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8062
diff changeset
282 Private method to find the workspace directory.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
283
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
284 @param silent flag indicating silent operations (defaults to False)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
285 @type bool (optional)
8062
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
286 @return workspace directory used for saving files
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
287 @rtype str
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
288 """
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
289 # Attempts to find the paths on the filesystem that represents the
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
290 # plugged in CIRCUITPY boards.
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9496
diff changeset
291 deviceDirectories = FileSystemUtilities.findVolume(
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9496
diff changeset
292 self.DeviceVolumeName, findAll=True
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9496
diff changeset
293 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
294
8062
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
295 if deviceDirectories:
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
296 if len(deviceDirectories) == 1:
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
297 return deviceDirectories[0]
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
298 else:
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
299 boardDirectories = self.__findDeviceDirectories(deviceDirectories)
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
300 if len(boardDirectories) == 1:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
301 return boardDirectories[0]
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
302 elif len(boardDirectories) > 1:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
303 return self.selectDeviceDirectory(boardDirectories)
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
304 else:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
305 return self.selectDeviceDirectory(deviceDirectories)
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 else:
7174
de8175253dfc MicroPython: did some fine tuning of the MicroPython interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7161
diff changeset
307 # return the default workspace and give the user a warning (unless
de8175253dfc MicroPython: did some fine tuning of the MicroPython interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7161
diff changeset
308 # silent mode is selected)
de8175253dfc MicroPython: did some fine tuning of the MicroPython interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7161
diff changeset
309 if not silent:
8356
68ec9c3d4de5 Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8318
diff changeset
310 EricMessageBox.warning(
7174
de8175253dfc MicroPython: did some fine tuning of the MicroPython interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7161
diff changeset
311 self.microPython,
de8175253dfc MicroPython: did some fine tuning of the MicroPython interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7161
diff changeset
312 self.tr("Workspace Directory"),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
313 self.tr(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
314 "Python files for CircuitPython can be edited in"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
315 " place, if the device volume is locally"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
316 " available. Such a volume was not found. In"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
317 " place editing will not be available."
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
318 ),
8067
a467ab075be0 MicroPython: added buttons to go to the 'home' directory (local and on device) to the MicroPython file manager and improved the workspace handling.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8062
diff changeset
319 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
320
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8117
diff changeset
321 return super().getWorkspace()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
322
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
323 def getWorkspace(self, silent=False):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
324 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
325 Public method to get the workspace directory.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
326
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
327 @param silent flag indicating silent operations
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
328 @type bool
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
329 @return workspace directory used for saving files
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
330 @rtype str
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
331 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
332 if self.__workspace:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
333 # return cached entry
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
334 return self.__workspace
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
335 else:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
336 self.__workspace = self.__findWorkspace(silent=silent)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
337 return self.__workspace
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
338
9944
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
339 def setWorkspace(self, workspacePath):
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
340 """
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
341 Public method to set the device workspace directory.
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
342
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
343 @param workspacePath directory to be used for saving files
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
344 @type str
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
345 """
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
346 self.__workspace = workspacePath
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
347 self.__workspaceSelected = True
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
348
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
349 def __createCPyMenu(self):
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
350 """
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
351 Private method to create the CircuitPython submenu.
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
352 """
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
353 self.__libraryMenu = QMenu(self.tr("Library Management"))
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
354 self.__libraryMenu.aboutToShow.connect(self.__aboutToShowLibraryMenu)
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
355 self.__libraryMenu.setTearOffEnabled(True)
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
356
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
357 self.__flashMenu = self.__createFlashMenus()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
358
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
359 self.__cpyMenu = QMenu(self.tr("CircuitPython Functions"))
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
360 self.__cpyMenu.addAction(
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
361 self.tr("Show CircuitPython Versions"), self.showCircuitPythonVersions
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
362 )
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
363 self.__cpyMenu.addSeparator()
9944
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
364 self.__cpyMenu.addAction(
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
365 self.tr("Select Device Volume"), self.__selectDeviceVolume
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
366 )
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
367 self.__cpyMenu.addSeparator()
9898
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
368 self.__bootloaderAct = self.__cpyMenu.addAction(
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
369 self.tr("Activate Bootloader"), self.__activateBootloader
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
370 )
9902
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
371 self.__uf2Act = self.__cpyMenu.addAction(
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
372 self.tr("Activate UF2 Mode"), self.__activateUF2Boot
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
373 )
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
374 self.__flashCpyAct = self.__cpyMenu.addMenu(self.__flashMenu)
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
375 self.__cpyMenu.addSeparator()
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
376 self.__cpyMenu.addMenu(self.__libraryMenu)
9805
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
377 self.__cpyMenu.addSeparator()
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
378 self.__resetAct = self.__cpyMenu.addAction(
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
379 self.tr("Reset Device"), self.__resetDevice
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
380 )
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
381
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
382 def __createFlashMenus(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
383 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
384 Private method to create the various menus to flash a CircuitPython firmware.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
385
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
386 @return reference to the created top level flash menu
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
387 @rtype QMenu
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
388 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
389 menu = QMenu(self.tr("Flash CircuitPython Firmware"))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
390 menu.setTearOffEnabled(True)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
391
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
392 # UF2 devices
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
393 menu.addAction(self.tr("UF2 Device"), self.__flashCircuitPython)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
394 menu.addSeparator()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
395
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
396 # ESP32 specific submenu
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
397 self.__esp32FlashMenu = QMenu(self.tr("ESP32 Device"))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
398 self.__esp32FlashMenu.addAction(self.tr("Erase Flash"), self.__esp32EraseFlash)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
399 self.__esp32FlashMenu.addAction(
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
400 self.tr("Flash MicroPython Firmware"), self.__esp32FlashPython
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
401 )
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
402 self.__esp32FlashMenu.addSeparator()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
403 self.__esp32FlashMenu.addAction(
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
404 self.tr("Flash Additional Firmware"), self.__esp32FlashAddons
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
405 )
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
406 menu.addMenu(self.__esp32FlashMenu)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
407
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
408 # Teensy 4.0 and 4.1 specific submenu
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
409 self.__teensyFlashMenu = QMenu(self.tr("Teensy Device"))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
410 self.__teensyFlashMenu.addAction(
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
411 self.tr("CircuitPython Flash Instructions"),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
412 self.__showTeensyFlashInstructions,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
413 )
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
414 act = self.__teensyFlashMenu.addAction(
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
415 self.tr("Start 'Teensy Loader'"), self.__startTeensyLoader
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
416 )
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
417 act.setToolTip(
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
418 self.tr("Start the 'Teensy Loader' application to flash the Teensy device.")
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
419 )
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
420 menu.addMenu(self.__teensyFlashMenu)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
421
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
422 return menu
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
423
7116
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
424 def addDeviceMenuEntries(self, menu):
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
425 """
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
426 Public method to add device specific entries to the given menu.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
427
7116
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
428 @param menu reference to the context menu
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
429 @type QMenu
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
430 """
9805
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
431 connected = self.microPython.isConnected()
9749
5d409223cf3f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9747
diff changeset
432 linkConnected = self.microPython.isLinkConnected()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
433
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
434 self.__flashCpyAct.setEnabled(not linkConnected)
9805
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
435 self.__resetAct.setEnabled(connected)
9898
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
436 self.__bootloaderAct.setEnabled(connected)
9902
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
437 self.__uf2Act.setEnabled(connected)
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
438
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
439 menu.addMenu(self.__cpyMenu)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
440
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
441 @pyqtSlot()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
442 def __aboutToShowLibraryMenu(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
443 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
444 Private slot to populate the 'Library Management' menu.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
445 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
446 self.__libraryMenu.clear()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
447
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
448 if isCircupAvailable():
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
449 self.__updater.populateMenu(self.__libraryMenu)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
450 else:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
451 act = self.__libraryMenu.addAction(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
452 self.tr("Install Library Files"), self.__installLibraryFiles
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
453 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
454 act.setEnabled(self.__deviceVolumeMounted())
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
455 act = self.__libraryMenu.addAction(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
456 self.tr("Install Library Package"),
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
457 lambda: self.__installLibraryFiles(packageMode=True),
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
458 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
459 act.setEnabled(self.__deviceVolumeMounted())
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
460 self.__libraryMenu.addSeparator()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
461 self.__libraryMenu.addAction(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
462 self.tr("Install 'circup' Package"),
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
463 self.__updater.installCircup,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
464 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
465
9805
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
466 @pyqtSlot()
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
467 def __resetDevice(self):
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
468 """
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
469 Private slot to reset the connected device.
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
470 """
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
471 if self.microPython.isConnected():
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
472 self.executeCommands(
9929
4a81ccaa7c7f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9902
diff changeset
473 "import microcontroller as mc\n"
4a81ccaa7c7f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9902
diff changeset
474 "mc.on_next_reset(mc.RunMode.NORMAL)"
4a81ccaa7c7f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9902
diff changeset
475 "mc.reset()\n",
9834
1fdaebde6316 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
476 mode=self._submitMode,
9805
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
477 )
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
478
8096
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
479 def hasFlashMenuEntry(self):
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
480 """
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
481 Public method to check, if the device has its own flash menu entry.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
482
8096
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
483 @return flag indicating a specific flash menu entry
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
484 @rtype bool
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
485 """
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
486 return True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
487
7116
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
488 @pyqtSlot()
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
489 def __flashCircuitPython(self):
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
490 """
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
491 Private slot to flash a CircuitPython firmware to a device supporting UF2.
7116
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
492 """
9756
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
493 from ..UF2FlashDialog import UF2FlashDialog
9482
a2bc06a54d9d Corrected/acknowledged some bad import style and removed some obsolete code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
494
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
495 dlg = UF2FlashDialog(boardType="circuitpython")
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
496 dlg.exec()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
497
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
498 @pyqtSlot()
9898
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
499 def __activateBootloader(self):
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
500 """
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
501 Private slot to switch the board into 'bootloader' mode.
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
502 """
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
503 if self.microPython.isConnected():
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
504 self.executeCommands(
9898
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
505 "import microcontroller as mc\n"
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
506 "mc.on_next_reset(mc.RunMode.BOOTLOADER)\n"
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
507 "mc.reset()\n",
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
508 mode=self._submitMode,
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
509 )
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
510
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
511 @pyqtSlot()
9902
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
512 def __activateUF2Boot(self):
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
513 """
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
514 Private slot to switch the board into 'UF2 Boot' mode.
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
515 """
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
516 if self.microPython.isConnected():
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
517 self.executeCommands(
9902
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
518 "import microcontroller as mc\n"
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
519 "mc.on_next_reset(mc.RunMode.UF2)\n"
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
520 "mc.reset()\n",
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
521 mode=self._submitMode,
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
522 )
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
523
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
524 @pyqtSlot()
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
525 def __showTeensyFlashInstructions(self):
8072
58491f4c99d6 MicroPython: added code to give a hint for CircuitPython devices, that do not support the UF2 bootloader for flashing.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8067
diff changeset
526 """
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
527 Private slot to show a message box because Teensy does not support
8072
58491f4c99d6 MicroPython: added code to give a hint for CircuitPython devices, that do not support the UF2 bootloader for flashing.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8067
diff changeset
528 the UF2 bootloader yet.
58491f4c99d6 MicroPython: added code to give a hint for CircuitPython devices, that do not support the UF2 bootloader for flashing.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8067
diff changeset
529 """
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
530 from .TeensyDevices import showTeensyFlashInstructions
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
531
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
532 showTeensyFlashInstructions()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
533
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
534 @pyqtSlot()
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
535 def __startTeensyLoader(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
536 """
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
537 Private slot to start the 'Teensy Loader' application.
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
538
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
539 Note: The application must be accessible via the application search path.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
540 """
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
541 from .TeensyDevices import startTeensyLoader
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
542
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
543 startTeensyLoader()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
544
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
545 @pyqtSlot()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
546 def __esp32EraseFlash(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
547 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
548 Private slot to erase the flash of an ESP32 device.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
549 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
550 from .EspDevices import eraseFlash
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
551
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
552 eraseFlash(self.microPython.getCurrentPort())
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
553
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
554 @pyqtSlot()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
555 def __esp32FlashPython(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
556 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
557 Private slot to flash a MicroPython or CircuitPython firmware to an ESP32
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
558 device.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
559 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
560 from .EspDevices import flashPythonFirmware
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
561
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
562 flashPythonFirmware(self.microPython.getCurrentPort())
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
563
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
564 @pyqtSlot()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
565 def __esp32FlashAddons(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
566 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
567 Private slot to flash additional firmware to an ESP32 device.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
568 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
569 from .EspDevices import flashAddonFirmware
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
570
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
571 flashAddonFirmware(self.microPython.getCurrentPort())
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
572
7138
a2a53535d855 CircuitPythonDevices: added capability to install library files onto the device to the device menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7134
diff changeset
573 @pyqtSlot()
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
574 def showCircuitPythonVersions(self):
9742
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
575 """
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
576 Public slot to show the CircuitPython version of a connected device and
9742
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
577 the latest available one (from Github).
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
578 """
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
579 ui = ericApp().getObject("UserInterface")
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9746
diff changeset
580 request = QNetworkRequest(QUrl(FirmwareGithubUrls["circuitpython"]))
9742
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
581 reply = ui.networkAccessManager().head(request)
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
582 reply.finished.connect(lambda: self.__cpyVersionResponse(reply))
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
583
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
584 @pyqtSlot(QNetworkReply)
9742
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
585 def __cpyVersionResponse(self, reply):
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
586 """
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
587 Private slot handling the response of the latest version request.
9742
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
588
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
589 @param reply reference to the reply object
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
590 @type QNetworkReply
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
591 """
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
592 latestUrl = reply.url().toString()
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
593 tag = latestUrl.rsplit("/", 1)[-1]
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
594 latestVersion = Globals.versionToTuple(tag)
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
595
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
596 cpyVersionStr = self.tr("unknown")
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
597 cpyVersion = (0, 0, 0)
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
598 if self.supportsLocalFileAccess():
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
599 bootFile = os.path.join(self.getWorkspace(), "boot_out.txt")
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
600 if os.path.exists(bootFile):
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
601 with open(bootFile, "r") as f:
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
602 line = f.readline()
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
603 cpyVersionStr = line.split(";")[0].split()[2]
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
604 cpyVersion = Globals.versionToTuple(cpyVersionStr)
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
605 if (
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
606 cpyVersion == (0, 0, 0)
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
607 and self._deviceData
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
608 and self._deviceData["mpy_version"] != "unknown"
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
609 ):
9745
2c706ccc2b42 Added code to the CircuitPython interface to show the installed firmware version even if the drive is not mounted but the device is connected via the serial console.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9742
diff changeset
610 # drive is not mounted or 'boot_out.txt' is missing but the device
2c706ccc2b42 Added code to the CircuitPython interface to show the installed firmware version even if the drive is not mounted but the device is connected via the serial console.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9742
diff changeset
611 # is connected via the serial console
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
612 cpyVersionStr = self._deviceData["mpy_version"]
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
613 cpyVersion = Globals.versionToTuple(cpyVersionStr)
9742
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
614
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
615 msg = self.tr(
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
616 "<h4>CircuitPython Version Information</h4>"
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
617 "<table>"
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
618 "<tr><td>Installed:</td><td>{0}</td></tr>"
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
619 "<tr><td>Available:</td><td>{1}</td></tr>"
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
620 "</table>"
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
621 ).format(cpyVersionStr, tag)
9746
37d460e32843 Corrected the CircuitPython interface code to show the update availability notice correctly.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9745
diff changeset
622 if cpyVersion < latestVersion and cpyVersion != (0, 0, 0):
9742
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
623 msg += self.tr("<p><b>Update available!</b></p>")
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
624
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
625 EricMessageBox.information(
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
626 None,
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
627 self.tr("CircuitPython Version"),
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
628 msg,
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
629 )
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
630
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
631 @pyqtSlot()
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
632 def __installLibraryFiles(self, packageMode=False):
7138
a2a53535d855 CircuitPythonDevices: added capability to install library files onto the device to the device menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7134
diff changeset
633 """
a2a53535d855 CircuitPythonDevices: added capability to install library files onto the device to the device menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7134
diff changeset
634 Private slot to install Python files into the onboard library.
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
635
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
636 @param packageMode flag indicating to install a library package
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
637 (defaults to False)
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
638 @type bool (optional)
7138
a2a53535d855 CircuitPythonDevices: added capability to install library files onto the device to the device menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7134
diff changeset
639 """
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
640 title = (
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
641 self.tr("Install Library Package")
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
642 if packageMode
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
643 else self.tr("Install Library Files")
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
644 )
7138
a2a53535d855 CircuitPythonDevices: added capability to install library files onto the device to the device menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7134
diff changeset
645 if not self.__deviceVolumeMounted():
8356
68ec9c3d4de5 Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8318
diff changeset
646 EricMessageBox.critical(
7138
a2a53535d855 CircuitPythonDevices: added capability to install library files onto the device to the device menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7134
diff changeset
647 self.microPython,
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
648 title,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
649 self.tr(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
650 """The device volume "<b>{0}</b>" is not available."""
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
651 """ Ensure it is mounted properly and try again."""
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
652 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
653 )
7138
a2a53535d855 CircuitPythonDevices: added capability to install library files onto the device to the device menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7134
diff changeset
654 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
655
7138
a2a53535d855 CircuitPythonDevices: added capability to install library files onto the device to the device menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7134
diff changeset
656 target = os.path.join(self.getWorkspace(), "lib")
a2a53535d855 CircuitPythonDevices: added capability to install library files onto the device to the device menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7134
diff changeset
657 # ensure that the library directory exists on the device
a2a53535d855 CircuitPythonDevices: added capability to install library files onto the device to the device menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7134
diff changeset
658 if not os.path.isdir(target):
a2a53535d855 CircuitPythonDevices: added capability to install library files onto the device to the device menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7134
diff changeset
659 os.makedirs(target)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
660
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
661 if packageMode:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
662 libraryPackage = EricFileDialog.getExistingDirectory(
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
663 self.microPython,
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
664 title,
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
665 os.path.expanduser("~"),
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
666 EricFileDialog.Option(0),
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
667 )
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
668 if libraryPackage:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
669 target = os.path.join(target, os.path.basename(libraryPackage))
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
670 shutil.rmtree(target, ignore_errors=True)
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
671 shutil.copytree(libraryPackage, target)
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
672 else:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
673 libraryFiles = EricFileDialog.getOpenFileNames(
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
674 self.microPython,
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
675 title,
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
676 os.path.expanduser("~"),
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
677 self.tr(
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
678 "Compiled Python Files (*.mpy);;"
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
679 "Python Files (*.py);;"
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
680 "All Files (*)"
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
681 ),
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
682 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
683
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
684 for libraryFile in libraryFiles:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
685 if os.path.exists(libraryFile):
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
686 shutil.copy2(libraryFile, target)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
687
7161
728018c32b09 MicroPythonWidget: added actions to show the device documentation and to open the configuration page to the hamburger menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7145
diff changeset
688 def getDocumentationUrl(self):
728018c32b09 MicroPythonWidget: added actions to show the device documentation and to open the configuration page to the hamburger menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7145
diff changeset
689 """
728018c32b09 MicroPythonWidget: added actions to show the device documentation and to open the configuration page to the hamburger menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7145
diff changeset
690 Public method to get the device documentation URL.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
691
7161
728018c32b09 MicroPythonWidget: added actions to show the device documentation and to open the configuration page to the hamburger menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7145
diff changeset
692 @return documentation URL of the device
728018c32b09 MicroPythonWidget: added actions to show the device documentation and to open the configuration page to the hamburger menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7145
diff changeset
693 @rtype str
728018c32b09 MicroPythonWidget: added actions to show the device documentation and to open the configuration page to the hamburger menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7145
diff changeset
694 """
728018c32b09 MicroPythonWidget: added actions to show the device documentation and to open the configuration page to the hamburger menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7145
diff changeset
695 return Preferences.getMicroPython("CircuitPythonDocuUrl")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
696
8053
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
697 def getDownloadMenuEntries(self):
7328
e2d85ef3fadb MicroPython:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7229
diff changeset
698 """
8053
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
699 Public method to retrieve the entries for the downloads menu.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
700
8053
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
701 @return list of tuples with menu text and URL to be opened for each
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
702 entry
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
703 @rtype list of tuple of (str, str)
7328
e2d85ef3fadb MicroPython:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7229
diff changeset
704 """
8053
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
705 return [
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
706 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
707 self.tr("CircuitPython Firmware"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
708 Preferences.getMicroPython("CircuitPythonFirmwareUrl"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
709 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
710 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
711 self.tr("CircuitPython Libraries"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
712 Preferences.getMicroPython("CircuitPythonLibrariesUrl"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
713 ),
8053
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
714 ]
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
715
9944
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
716 @pyqtSlot()
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
717 def __selectDeviceVolume(self):
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
718 """
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
719 Private slot to select the mounted device volume, if it could not be found
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
720 automatically.
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
721 """
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
722 userMounts = FileSystemUtilities.getUserMounts()
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
723 msg = (
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
724 self.tr("Select the drive letter of the device:")
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
725 if OSUtilities.isWindowsPlatform()
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
726 else self.tr("Select the path of the mounted device:")
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
727 )
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
728 selectedMount, ok = QInputDialog.getItem(
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
729 None,
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
730 self.tr("Select Device Volume"),
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
731 msg,
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
732 userMounts,
9972
68ac01294544 Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9944
diff changeset
733 0,
68ac01294544 Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9944
diff changeset
734 False,
9944
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
735 )
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
736 if ok and selectedMount:
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
737 self.__workspace = selectedMount
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
738 self.__workspaceSelected = self.DeviceVolumeName not in self.__workspace
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
739
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
740 ##################################################################
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
741 ## Methods below implement WiFi related methods
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
742 ##################################################################
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
743
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
744 def hasWifi(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
745 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
746 Public method to check the availability of WiFi.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
747
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
748 @return tuple containing a flag indicating the availability of WiFi
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
749 and the WiFi type (picow or pimoroni)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
750 @rtype tuple of (bool, str)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
751 @exception OSError raised to indicate an issue with the device
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
752 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
753 command = """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
754 def has_wifi():
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
755 try:
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
756 import wifi
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
757 if hasattr(wifi, 'radio'):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
758 return True, 'circuitpython'
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
759 except ImportError:
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
760 pass
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
761
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
762 return False, ''
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
763
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
764 print(has_wifi())
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
765 del has_wifi
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
766 """
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
767 out, err = self.executeCommands(command, mode=self._submitMode)
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
768 if err:
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
769 raise OSError(self._shortError(err))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
770 return ast.literal_eval(out.decode("utf-8"))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
771
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
772 def getWifiData(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
773 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
774 Public method to get data related to the current WiFi status.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
775
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
776 @return tuple of three dictionaries containing the WiFi status data
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
777 for the WiFi client, access point and overall data
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
778 @rtype tuple of (dict, dict, dict)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
779 @exception OSError raised to indicate an issue with the device
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
780 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
781 command = """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
782 def wifi_status():
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
783 import binascii
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
784 import json
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
785 import wifi
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
786
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
787 r = wifi.radio
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
788
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
789 station = {
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
790 'active': r.enabled and r.ipv4_address is not None,
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
791 'connected': r.ipv4_address is not None,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
792 'ifconfig': (
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
793 str(r.ipv4_address) if r.ipv4_address else'0.0.0.0',
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
794 str(r.ipv4_subnet) if r.ipv4_subnet else'0.0.0.0',
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
795 str(r.ipv4_gateway) if r.ipv4_gateway else'0.0.0.0',
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
796 str(r.ipv4_dns) if r.ipv4_dns else'0.0.0.0',
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
797 ),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
798 'mac': binascii.hexlify(r.mac_address, ':').decode(),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
799 'hostname': r.hostname,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
800 }
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
801 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
802 station['txpower'] = r.tx_power
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
803 except AttributeError:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
804 pass
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
805 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
806 if r.ap_info is not None:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
807 station.update({
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
808 'ap_ssid': r.ap_info.ssid,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
809 'ap_bssid': binascii.hexlify(r.ap_info.bssid, ':'),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
810 'ap_rssi': r.ap_info.rssi,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
811 'ap_channel': r.ap_info.channel,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
812 'ap_country': r.ap_info.country,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
813 })
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
814 authmode = r.ap_info.authmode
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
815 station['ap_security'] = (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
816 '_'.join(str(x).split('.')[-1] for x in authmode)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
817 if isinstance(authmode, list)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
818 else authmode
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
819 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
820 except (NotImplementedError, AttributeError):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
821 pass
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
822 print(json.dumps(station))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
823
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
824 ap = {
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
825 'active': r.enabled and r.ipv4_address_ap is not None,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
826 'connected': r.ipv4_address_ap is not None,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
827 'ifconfig': (
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
828 str(r.ipv4_address_ap) if r.ipv4_address_ap else'0.0.0.0',
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
829 str(r.ipv4_subnet_ap) if r.ipv4_subnet_ap else'0.0.0.0',
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
830 str(r.ipv4_gateway_ap) if r.ipv4_gateway_ap else'0.0.0.0',
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
831 str(r.ipv4_dns) if r.ipv4_dns else'0.0.0.0',
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
832 ),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
833 'mac': binascii.hexlify(r.mac_address_ap, ':').decode(),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
834 'hostname': r.hostname,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
835 }
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
836 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
837 ap['txpower'] = r.tx_power
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
838 except AttributeError:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
839 pass
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
840 print(json.dumps(ap))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
841
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
842 overall = {
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
843 'active': r.enabled
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
844 }
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
845 print(json.dumps(overall))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
846
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
847 wifi_status()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
848 del wifi_status
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
849 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
850
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
851 out, err = self.executeCommands(command, mode=self._submitMode)
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
852 if err:
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
853 raise OSError(self._shortError(err))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
854
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
855 stationStr, apStr, overallStr = out.decode("utf-8").splitlines()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
856 station = json.loads(stationStr)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
857 ap = json.loads(apStr)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
858 overall = json.loads(overallStr)
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
859 if "ap_security" in station:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
860 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
861 station["ap_security"] = self.__securityTranslations[
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
862 station["ap_security"]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
863 ]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
864 except KeyError:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
865 station["ap_security"] = self.tr("unknown ({0})").format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
866 station["ap_security"]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
867 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
868
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
869 return station, ap, overall
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
870
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
871 def connectWifi(self, ssid, password):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
872 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
873 Public method to connect a device to a WiFi network.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
874
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
875 @param ssid name (SSID) of the WiFi network
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
876 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
877 @param password password needed to connect
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
878 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
879 @return tuple containing the connection status and an error string
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
880 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
881 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
882 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
883 def connect_wifi(ssid, password):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
884 import json
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
885 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
886
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
887 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
888 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
889 r.start_station()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
890 r.connect(ssid, password)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
891 status = 'connected'
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
892 except Exception as exc:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
893 status = str(exc)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
894
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
895 print(json.dumps({{'connected': r.ipv4_address is not None, 'status': status}}))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
896
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
897 connect_wifi({0}, {1})
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
898 del connect_wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
899 """.format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
900 repr(ssid),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
901 repr(password if password else ""),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
902 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
903
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
904 with EricOverrideCursor():
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
905 out, err = self.executeCommands(
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
906 command, mode=self._submitMode, timeout=15000
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
907 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
908 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
909 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
910
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
911 result = json.loads(out.decode("utf-8").strip())
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
912 error = "" if result["connected"] else result["status"]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
913
10138
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
914 self._networkConnected = result["connected"]
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
915
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
916 return result["connected"], error
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
917
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
918 def disconnectWifi(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
919 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
920 Public method to disconnect a device from the WiFi network.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
921
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
922 @return tuple containing a flag indicating success and an error string
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
923 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
924 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
925 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
926 def disconnect_wifi():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
927 import json
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
928 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
929
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
930 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
931 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
932 r.stop_station()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
933 status = ''
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
934 except Exception as exc:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
935 status = str(exc)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
936
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
937 print(json.dumps({'success': status == '', 'status': status}))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
938
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
939 disconnect_wifi()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
940 del disconnect_wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
941 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
942
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
943 out, err = self.executeCommands(command, mode=self._submitMode)
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
944 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
945 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
946
10138
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
947 self._networkConnected = False
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
948
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
949 result = json.loads(out.decode("utf-8").strip())
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
950 return result["success"], result["status"]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
951
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
952 def writeCredentials(self, ssid, password):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
953 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
954 Public method to write the given credentials to the connected device and modify
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
955 the start script to connect automatically.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
956
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
957 @param ssid SSID of the network to connect to
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
958 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
959 @param password password needed to authenticate
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
960 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
961 @return tuple containing a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
962 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
963 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
964 if not self.__deviceVolumeMounted():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
965 return False, self.tr("The device volume is not available.")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
966
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
967 workspace = self.getWorkspace()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
968
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
969 if Globals.versionToTuple(self._deviceData["release"]) >= (8, 0, 0):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
970 # CircuitPython >= 8.0.0: generate 'settings.toml' file
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
971 contents = (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
972 'CIRCUITPY_WIFI_SSID = "{0}"\nCIRCUITPY_WIFI_PASSWORD = "{1}"\n'.format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
973 ssid, password
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
974 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
975 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
976 filename = os.path.join(workspace, "settings.toml")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
977 if os.path.exists(filename):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
978 ok = EricMessageBox.yesNo(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
979 None,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
980 self.tr("Write WiFi Credentials"),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
981 self.tr(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
982 """<p>The file <b>{0}</b> exists already. Shall it be"""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
983 """ replaced?</p>"""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
984 ).format(filename),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
985 icon=EricMessageBox.Warning,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
986 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
987 if not ok:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
988 return False, self.tr("Aborted")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
989 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
990 with open(filename, "w") as f:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
991 f.write(contents)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
992 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
993 except OSError as err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
994 return False, str(err)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
995
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
996 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
997 # CircuitPython < 8.0.0: generate a secrets.py script
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
998 # step 1: generate the secrets.py file
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
999 contents = (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1000 'secrets = {{\n "ssid": "{0}",\n "password": "{1}",\n}}\n'.format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1001 ssid, password
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1002 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1003 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1004 filename = os.path.join(workspace, "secrets.py")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1005 if os.path.exists(filename):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1006 ok = EricMessageBox.yesNo(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1007 None,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1008 self.tr("Write WiFi Credentials"),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1009 self.tr(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1010 """<p>The file <b>{0}</b> exists already. Shall it be"""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1011 """ replaced?</p>"""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1012 ).format(filename),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1013 icon=EricMessageBox.Warning,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1014 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1015 if not ok:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1016 return False, self.tr("Aborted")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1017 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1018 with open(filename, "w") as f:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1019 f.write(contents)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1020 except OSError as err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1021 return False, str(err)
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1022
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1023 # step 2: create the auto-connect script (wifi_connect.py)
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1024 scriptFile = os.path.join(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1025 os.path.dirname(__file__), "MCUScripts", "circuitPy7WiFiConnect.py"
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1026 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1027 targetFile = os.path.join(workspace, "wifi_connect.py")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1028 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1029 shutil.copy2(scriptFile, targetFile)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1030 except OSError as err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1031 return False, str(err)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1032 # Note: code.py will not be modified because the connection will be
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1033 # reset anyway
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1034 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1035
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1036 def removeCredentials(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1037 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1038 Public method to remove the saved credentials from the connected device.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1039
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1040 @return tuple containing a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1041 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1042 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1043 if not self.__deviceVolumeMounted():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1044 return False, self.tr("The device volume is not available.")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1045
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1046 workspace = self.getWorkspace()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1047 for name in ("settings.toml", "secrets.py"):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1048 filename = os.path.join(workspace, name)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1049 if os.path.exists(filename):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1050 os.remove(filename)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1051
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1052 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1053
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1054 def checkInternet(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1055 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1056 Public method to check, if the internet can be reached.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1057
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1058 @return tuple containing a flag indicating reachability and an error string
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1059 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1060 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1061 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1062 def check_internet():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1063 import ipaddress
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1064 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1065
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1066 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1067 if r.ipv4_address is not None:
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9834
diff changeset
1068 ping = r.ping(ipaddress.IPv4Address("9.9.9.9"))
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1069 print(ping is not None)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1070 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1071 print(False)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1072
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1073 check_internet()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1074 del check_internet
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1075 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1076
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1077 out, err = self.executeCommands(command, mode=self._submitMode)
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1078 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1079 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1080
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1081 return out.decode("utf-8").strip() == "True", ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1082
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1083 def scanNetworks(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1084 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1085 Public method to scan for available WiFi networks.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1086
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1087 @return tuple containing the list of available networks as a tuple of 'Name',
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1088 'MAC-Address', 'channel', 'RSSI' and 'security' and an error string
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1089 @rtype tuple of (list of tuple of (str, str, int, int, str), str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1090 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1091 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1092 def scan_networks():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1093 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1094
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1095 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1096 network_list = []
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1097 enabled = r.enabled
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1098 if not enabled:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1099 r.enabled = True
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1100 for net in r.start_scanning_networks():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1101 network_list.append(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1102 (net.ssid, net.bssid, net.channel, net.rssi,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1103 '_'.join(str(x).split('.')[-1] for x in net.authmode))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1104 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1105 r.stop_scanning_networks()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1106 if not enabled:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1107 r.enabled = False
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1108 print(network_list)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1109
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1110 scan_networks()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1111 del scan_networks
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1112 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1113
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1114 out, err = self.executeCommands(command, mode=self._submitMode, timeout=15000)
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1115 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1116 return [], err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1117
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1118 networksList = ast.literal_eval(out.decode("utf-8"))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1119 networks = []
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1120 seenNetworks = []
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1121 for network in networksList:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1122 if network[0]:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1123 ssid = network[0]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1124 mac = binascii.hexlify(network[1], ":").decode("utf-8")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1125 channel = network[2]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1126 rssi = network[3]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1127 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1128 security = self.__securityTranslations[network[4]]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1129 except KeyError:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1130 security = self.tr("unknown ({0})").format(network[4])
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1131 if (ssid, mac, channel) not in seenNetworks:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1132 seenNetworks.append((ssid, mac, channel))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1133 networks.append((ssid, mac, channel, rssi, security))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1134
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1135 return networks, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1136
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1137 def deactivateInterface(self, interface):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1138 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1139 Public method to deactivate a given WiFi interface of the connected device.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1140
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1141 Note: With CircuitPython it is not possible to deactivate the station and
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1142 access point interfaces separately.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1143
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1144 @param interface designation of the interface to be deactivated (one of 'AP'
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1145 or 'STA')
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1146 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1147 @return tuple containg a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1148 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1149 @exception ValueError raised to indicate a wrong value for the interface type
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1150 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1151 if interface not in ("STA", "AP"):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1152 raise ValueError(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1153 "interface must be 'AP' or 'STA', got '{0}'".format(interface)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1154 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1155
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1156 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1157 def deactivate():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1158 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1159
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1160 wifi.radio.enabled = False
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1161 print(not wifi.radio.enabled)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1162
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1163 deactivate()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1164 del deactivate
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1165 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1166
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1167 out, err = self.executeCommands(command, mode=self._submitMode)
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1168 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1169 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1170 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1171 return out.decode("utf-8").strip() == "True", ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1172
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1173 def startAccessPoint(self, ssid, security=None, password=None, ifconfig=None):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1174 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1175 Public method to start the access point interface.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1176
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1177 @param ssid SSID of the access point
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1178 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1179 @param security security method (defaults to None)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1180 @type int (optional)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1181 @param password password (defaults to None)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1182 @type str (optional)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1183 @param ifconfig IPv4 configuration for the access point if not default
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1184 (IPv4 address, netmask, gateway address, DNS server address)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1185 @type tuple of (str, str, str, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1186 @return tuple containing a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1187 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1188 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1189 if security is None or password is None:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1190 security = 0
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1191 password = ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1192 authmode = self.__securityCode2AuthModeString[security]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1193
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1194 if ifconfig:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1195 return (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1196 False,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1197 self.tr(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1198 "CircuitPython does not support setting the IPv4 parameters of the"
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1199 " WiFi access point."
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1200 ),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1201 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1202
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1203 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1204 def start_ap(ssid, password):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1205 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1206
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1207 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1208 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1209 r.start_ap(ssid, password, authmode={2})
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1210 except ValueError as exc:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1211 print('Error:', str(exc))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1212
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1213 start_ap({0}, {1})
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1214 del start_ap
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1215 """.format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1216 repr(ssid), repr(password), authmode
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1217 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1218
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1219 out, err = self.executeCommands(command, mode=self._submitMode, timeout=15000)
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1220 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1221 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1222 elif out and out.startswith(b"Error:"):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1223 return False, out.decode("utf-8").split(None, 1)[-1]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1224 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1225 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1226
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1227 def stopAccessPoint(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1228 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1229 Public method to stop the access point interface.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1230
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1231 @return tuple containg a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1232 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1233 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1234 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1235 def stop_ap():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1236 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1237
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1238 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1239 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1240 r.stop_ap()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1241 except NotImplementedError as exc:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1242 print('Error:', str(exc))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1243
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1244 stop_ap()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1245 del stop_ap
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1246 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1247
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1248 out, err = self.executeCommands(command, mode=self._submitMode)
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1249 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1250 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1251 elif out and out.startswith(b"Error:"):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1252 return False, out.decode("utf-8").split(None, 1)[-1]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1253 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1254 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1255
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1256 def getConnectedClients(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1257 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1258 Public method to get a list of connected clients.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1259
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1260 @return a tuple containing a list of tuples containing the client MAC-Address
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1261 and the RSSI (if supported and available) and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1262 @rtype tuple of ([(bytes, int)], str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1263 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1264 return (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1265 [],
9841
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
1266 self.tr("CircuitPython does not support reporting of connected clients."),
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1267 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1268
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1269 ##################################################################
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1270 ## Methods below implement Ethernet related methods
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1271 ##################################################################
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1272
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1273 def hasEthernet(self):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1274 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1275 Public method to check the availability of Ethernet.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1276
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1277 @return tuple containing a flag indicating the availability of Ethernet
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1278 and the Ethernet type
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1279 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1280 @exception OSError raised to indicate an issue with the device
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1281 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1282 command = """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1283 def has_eth():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1284 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1285 from adafruit_wiznet5k import adafruit_wiznet5k
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1286 if hasattr(adafruit_wiznet5k, 'WIZNET5K'):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1287 return True, 'cpypicowiz'
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1288 except ImportError:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1289 pass
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1290
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1291 return False, ''
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1292
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1293 print(has_eth())
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1294 del has_eth
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1295 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1296
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1297 out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1298 if err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1299 raise OSError(self._shortError(err))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1300
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1301 return ast.literal_eval(out.decode("utf-8"))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1302
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1303 def getEthernetStatus(self):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1304 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1305 Public method to get Ethernet status data of the connected board.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1306
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1307 @return list of tuples containing the translated status data label and
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1308 the associated value
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1309 @rtype list of tuples of (str, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1310 @exception OSError raised to indicate an issue with the device
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1311 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1312 command = """{0}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1313 def ethernet_status():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1314 import binascii
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1315 import json
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1316
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1317 w5x00_init()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1318
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1319 res = {{
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1320 'active': nic.link_status != 0,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1321 'connected': nic.link_status == 1 and nic.ifconfig[0] != b'\x00\x00\x00\x00',
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1322 'ifconfig': (
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1323 nic.pretty_ip(nic.ifconfig[0]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1324 nic.pretty_ip(nic.ifconfig[1]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1325 nic.pretty_ip(nic.ifconfig[2]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1326 nic.pretty_ip(nic.ifconfig[3]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1327 ),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1328 'mac': binascii.hexlify(nic.mac_address, ':').decode(),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1329 'chip': nic.chip,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1330 'max_sockets': nic.max_sockets,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1331 }}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1332 print(json.dumps(res))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1333
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1334 ethernet_status()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1335 del ethernet_status, w5x00_init
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1336 """.format(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1337 WiznetUtilities.cpyWiznetInit()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1338 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1339
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1340 out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1341 if err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1342 raise OSError(self._shortError(err))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1343
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1344 status = []
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1345 ethStatus = json.loads(out.decode("utf-8"))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1346 status.append((self.tr("Active"), self.bool2str(ethStatus["active"])))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1347 status.append((self.tr("Connected"), self.bool2str(ethStatus["connected"])))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1348 status.append((self.tr("IPv4 Address"), ethStatus["ifconfig"][0]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1349 status.append((self.tr("Netmask"), ethStatus["ifconfig"][1]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1350 status.append((self.tr("Gateway"), ethStatus["ifconfig"][2]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1351 status.append((self.tr("DNS"), ethStatus["ifconfig"][3]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1352 status.append((self.tr("MAC-Address"), ethStatus["mac"]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1353 status.append((self.tr("Chip Type"), ethStatus["chip"]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1354 status.append((self.tr("max. Sockets"), ethStatus["max_sockets"]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1355
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1356 return status
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1357
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1358 def connectToLan(self, config):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1359 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1360 Public method to connect the connected device to the LAN.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1361
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1362 Note: The MAC address of the interface is configured with the WIZ
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1363
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1364 @param config configuration for the connection (either the string 'dhcp'
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1365 for a dynamic address or a tuple of four strings with the IPv4 parameters.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1366 @type str or tuple of (str, str, str, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1367 @return tuple containing a flag indicating success and an error message
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1368 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1369 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1370 command = """{0}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1371 def connect_lan(config):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1372 from adafruit_wiznet5k import adafruit_wiznet5k
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1373
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1374 w5x00_init()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1375
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1376 nic.mac_address = adafruit_wiznet5k._DEFAULT_MAC
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1377 if config == 'dhcp':
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1378 nic.set_dhcp(response_timeout=14)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1379 else:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1380 nic.ifconfig = (
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1381 nic.unpretty_ip(config[0]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1382 nic.unpretty_ip(config[1]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1383 nic.unpretty_ip(config[2]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1384 tuple(int(a) for a in config[3].split('.')),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1385 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1386 print(nic.ifconfig[0] != b'\x00\x00\x00\x00')
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1387
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1388 connect_lan({1})
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1389 del connect_lan, w5x00_init
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1390 """.format(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1391 WiznetUtilities.cpyWiznetInit(), "'dhcp'" if config == "dhcp" else config
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1392 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1393
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1394 with EricOverrideCursor():
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1395 out, err = self.executeCommands(
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1396 command, mode=self._submitMode, timeout=15000
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1397 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1398 if err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1399 return False, err
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1400
10138
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1401 self._networkConnected = True
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1402
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1403 return out.strip() == b"True", ""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1404
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1405 def disconnectFromLan(self):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1406 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1407 Public method to disconnect from the LAN.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1408
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1409 @return tuple containing a flag indicating success and an error message
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1410 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1411 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1412 command = """{0}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1413 def disconnect_lan():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1414 import time
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1415
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1416 w5x00_init()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1417
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1418 nic.sw_reset()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1419 time.sleep(1)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1420 print(nic.ifconfig[0] == b'\x00\x00\x00\x00')
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1421
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1422 disconnect_lan()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1423 del disconnect_lan, w5x00_init
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1424 """.format(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1425 WiznetUtilities.cpyWiznetInit(),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1426 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1427
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1428 with EricOverrideCursor():
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1429 out, err = self.executeCommands(
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1430 command, mode=self._submitMode, timeout=15000
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1431 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1432 if err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1433 return False, err
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1434
10138
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1435 self._networkConnected = False
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1436
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1437 return out.strip() == b"True", ""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1438
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1439 def checkInternetViaLan(self):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1440 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1441 Public method to check, if the internet can be reached (LAN variant).
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1442
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1443 @return tuple containing a flag indicating reachability and an error string
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1444 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1445 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1446 command = """{0}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1447 def check_internet():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1448 w5x00_init()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1449
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1450 if nic.ifconfig[0] != b'\x00\x00\x00\x00':
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1451 sock = nic.get_socket()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1452 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1453 nic.socket_connect(sock, nic.get_host_by_name('quad9.net'), 80)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1454 nic.socket_disconnect(sock)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1455 print(True)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1456 except:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1457 print(False)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1458 nic.socket_close(sock)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1459 else:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1460 print(False)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1461
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1462 check_internet()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1463 del check_internet, w5x00_init
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1464 """.format(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1465 WiznetUtilities.cpyWiznetInit(),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1466 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1467
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1468 out, err = self.executeCommands(command, mode=self._submitMode, timeout=15000)
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1469 if err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1470 return False, err
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1471
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1472 return out.strip() == b"True", ""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1473
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1474 def deactivateEthernet(self):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1475 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1476 Public method to deactivate the Ethernet interface of the connected device.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1477
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1478 @return tuple containg a flag indicating success and an error message
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1479 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1480 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1481 # The WIZnet 5x00 interface cannot be switched off explicitly. That means,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1482 # disconnect from the LAN is all we can do.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1483
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1484 return self.disconnectFromLan()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1485
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1486 def writeLanAutoConnect(self, config):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1487 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1488 Public method to generate a script and associated configuration to connect the
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1489 device to the LAN during boot time.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1490
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1491 @param config configuration for the connection (either the string 'dhcp'
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1492 for a dynamic address or a tuple of four strings with the IPv4 parameters.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1493 @type str or tuple of (str, str, str, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1494 @return tuple containing a flag indicating success and an error message
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1495 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1496 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1497 if not self.__deviceVolumeMounted():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1498 return False, self.tr("The device volume is not available.")
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1499
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1500 workspace = self.getWorkspace()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1501
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1502 if Globals.versionToTuple(self._deviceData["release"]) >= (8, 0, 0):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1503 # CircuitPython >= 8.0.0: generate 'settings.toml' file
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1504 newConfig = (
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1505 {
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1506 "WIZNET_IFCONFIG_0": '"dhcp"',
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1507 "WIZNET_IFCONFIG_1": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1508 "WIZNET_IFCONFIG_2": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1509 "WIZNET_IFCONFIG_3": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1510 }
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1511 if config == "dhcp"
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1512 else {
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1513 "WIZNET_IFCONFIG_0": '"{0}"'.format(config[0]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1514 "WIZNET_IFCONFIG_1": '"{0}"'.format(config[1]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1515 "WIZNET_IFCONFIG_2": '"{0}"'.format(config[2]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1516 "WIZNET_IFCONFIG_3": '"{0}"'.format(config[3]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1517 }
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1518 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1519 ok, err = self.__modifySettings(newConfig)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1520 if not ok:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1521 return False, err
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1522
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1523 scriptFile = os.path.join(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1524 os.path.dirname(__file__), "MCUScripts", "picoWiznetConnectCpy8.py"
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1525 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1526
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1527 else:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1528 # step 1: generate the wiznet_config.py file
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1529 ifconfig = "ifconfig = {0}\n".format(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1530 "'dhcp'" if config == "dhcp" else config
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1531 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1532 filename = os.path.join(workspace, "wiznet_config.py")
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1533 if os.path.exists(filename):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1534 ok = EricMessageBox.yesNo(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1535 None,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1536 self.tr("Write Connect Script"),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1537 self.tr(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1538 """<p>The file <b>{0}</b> exists already. Shall it be"""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1539 """ replaced?</p>"""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1540 ).format(filename),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1541 icon=EricMessageBox.Warning,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1542 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1543 if not ok:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1544 return False, self.tr("Aborted")
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1545 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1546 with open(filename, "w") as f:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1547 f.write(ifconfig)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1548 except OSError as err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1549 return False, str(err)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1550
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1551 scriptFile = os.path.join(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1552 os.path.dirname(__file__), "MCUScripts", "picoWiznetConnectCpy7.py"
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1553 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1554
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1555 # step 2: create the auto-connect script (wiznet_connect.py)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1556 targetFile = os.path.join(workspace, "wiznet_connect.py")
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1557 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1558 shutil.copy2(scriptFile, targetFile)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1559 except OSError as err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1560 return False, str(err)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1561 # Note: code.py will not be modified because the connection will be
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1562 # reset anyway
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1563 return True, ""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1564
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1565 def removeLanAutoConnect(self):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1566 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1567 Public method to remove the saved IPv4 parameters from the connected device.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1568
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1569 Note: This disables the LAN auto-connect feature.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1570
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1571 @return tuple containing a flag indicating success and an error message
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1572 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1573 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1574 if not self.__deviceVolumeMounted():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1575 return False, self.tr("The device volume is not available.")
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1576
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1577 workspace = self.getWorkspace()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1578
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1579 if Globals.versionToTuple(self._deviceData["release"]) >= (8, 0, 0):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1580 # CircuitPython >= 8.0.0: generate 'settings.toml' file
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1581 newConfig = {
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1582 "WIZNET_IFCONFIG_0": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1583 "WIZNET_IFCONFIG_1": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1584 "WIZNET_IFCONFIG_2": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1585 "WIZNET_IFCONFIG_3": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1586 }
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1587 self.__modifySettings(newConfig)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1588
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1589 for name in ("wiznet_config.py", "wiznet_connect.py"):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1590 filename = os.path.join(workspace, name)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1591 if os.path.exists(filename):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1592 os.remove(filename)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1593
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1594 return True, ""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1595
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1596 ##################################################################
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1597 ## Methods below implement Bluetooth related methods
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1598 ##################################################################
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1599
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1600 def hasBluetooth(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1601 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1602 Public method to check the availability of Bluetooth.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1603
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1604 @return flag indicating the availability of Bluetooth
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1605 @rtype bool
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1606 @exception OSError raised to indicate an issue with the device
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1607 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1608 command = """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1609 def has_bt():
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1610 try:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1611 import _bleio
9881
5ce653f9dac8 Fixed an issue in the CircuitPython Bluetooth detection code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1612 if hasattr(_bleio, 'adapter') and _bleio.adapter is not None:
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1613 return True
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1614 except ImportError:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1615 pass
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1616
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1617 return False
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1618
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1619 print(has_bt())
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1620 del has_bt
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1621 """
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1622 out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1623 if err:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1624 raise OSError(self._shortError(err))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1625 return out.strip() == b"True"
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1626
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1627 def getBluetoothStatus(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1628 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1629 Public method to get Bluetooth status data of the connected board.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1630
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1631 @return list of tuples containing the translated status data label and
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1632 the associated value
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1633 @rtype list of tuples of (str, str)
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1634 @exception OSError raised to indicate an issue with the device
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1635 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1636 command = """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1637 def ble_status():
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1638 import _bleio
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1639 import binascii
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1640 import json
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1641
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1642 a = _bleio.adapter
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1643
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1644 ble_enabled = a.enabled
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1645 if not ble_enabled:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1646 a.enabled = True
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1647
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1648 res = {
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1649 'active': ble_enabled,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1650 'mac': binascii.hexlify(bytes(reversed(a.address.address_bytes)), ':').decode(),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1651 'addr_type': a.address.type,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1652 'name': a.name,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1653 'advertising': a.advertising,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1654 'connected': a.connected,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1655 }
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1656
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1657 if not ble_enabled:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1658 a.enabled = False
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1659
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1660 print(json.dumps(res))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1661
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1662 ble_status()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1663 del ble_status
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1664 """
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1665 out, err = self.executeCommands(command, mode=self._submitMode)
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1666 if err:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1667 raise OSError(self._shortError(err))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1668
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1669 status = []
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1670 bleStatus = json.loads(out.decode("utf-8"))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1671 status.append((self.tr("Active"), self.bool2str(bleStatus["active"])))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1672 status.append((self.tr("Name"), bleStatus["name"]))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1673 status.append((self.tr("MAC-Address"), bleStatus["mac"]))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1674 status.append(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1675 (self.tr("Address Type"), self.__bleAddressType[bleStatus["addr_type"]])
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1676 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1677 status.append((self.tr("Connected"), self.bool2str(bleStatus["connected"])))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1678 status.append((self.tr("Advertising"), self.bool2str(bleStatus["advertising"])))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1679
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1680 return status
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1681
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1682 def activateBluetoothInterface(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1683 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1684 Public method to activate the Bluetooth interface.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1685
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1686 @return flag indicating the new state of the Bluetooth interface
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1687 @rtype bool
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1688 @exception OSError raised to indicate an issue with the device
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1689 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1690 command = """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1691 def activate_ble():
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1692 import _bleio
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1693
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1694 a = _bleio.adapter
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1695 if not a.enabled:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1696 a.enabled = True
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1697 print(a.enabled)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1698
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1699 activate_ble()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1700 del activate_ble
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1701 """
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1702 out, err = self.executeCommands(command, mode=self._submitMode)
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1703 if err:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1704 raise OSError(self._shortError(err))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1705
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1706 return out.strip() == b"True"
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1707
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1708 def deactivateBluetoothInterface(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1709 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1710 Public method to deactivate the Bluetooth interface.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1711
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1712 @return flag indicating the new state of the Bluetooth interface
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1713 @rtype bool
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1714 @exception OSError raised to indicate an issue with the device
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1715 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1716 command = """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1717 def deactivate_ble():
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1718 import _bleio
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1719
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1720 a = _bleio.adapter
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1721 if a.enabled:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1722 a.enabled = False
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1723 print(a.enabled)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1724
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1725 deactivate_ble()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1726 del deactivate_ble
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1727 """
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1728 out, err = self.executeCommands(command, mode=self._submitMode)
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1729 if err:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1730 raise OSError(self._shortError(err))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1731
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1732 return out.strip() == b"True"
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1733
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1734 def getDeviceScan(self, timeout=10):
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1735 """
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1736 Public method to perform a Bluetooth device scan.
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1737
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1738 @param timeout duration of the device scan in seconds (defaults
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1739 to 10)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1740 @type int (optional)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1741 @return tuple containing a dictionary with the scan results and
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1742 an error string
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1743 @rtype tuple of (dict, str)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1744 """
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1745 from ..BluetoothDialogs.BluetoothAdvertisement import (
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1746 ADV_IND,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1747 ADV_SCAN_IND,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1748 SCAN_RSP,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1749 BluetoothAdvertisement,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1750 )
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1751
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1752 command = """
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1753 def ble_scan():
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1754 import _bleio
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1755 import binascii
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1756 import time
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1757
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1758 a = _bleio.adapter
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1759
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1760 ble_enabled = a.enabled
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1761 if not ble_enabled:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1762 a.enabled = True
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1763
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1764 scanResults = a.start_scan(
9859
829c1edbf253 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9858
diff changeset
1765 buffer_size=1024, extended=True, timeout={0}, minimum_rssi=-120, active=True
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1766 )
10032
102b79b2a8cd Finetuned the bluetooth scan function for various MicroPython boards.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1767 time.sleep({0} + 0.2)
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1768 a.stop_scan()
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1769
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1770 for res in scanResults:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1771 print({{
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1772 'address': binascii.hexlify(
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1773 bytes(reversed(res.address.address_bytes)), ':'
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1774 ).decode(),
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1775 'advertisement': res.advertisement_bytes,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1776 'connectable': res.connectable,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1777 'rssi': res.rssi,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1778 'scan_response': res.scan_response,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1779 }})
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1780
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1781 if not ble_enabled:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1782 a.enabled = False
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1783
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1784 ble_scan()
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1785 del ble_scan
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1786 """.format(
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1787 timeout
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1788 )
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1789 out, err = self.executeCommands(
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1790 command, mode=self._submitMode, timeout=(timeout + 5) * 1000
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1791 )
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1792 if err:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1793 return {}, err
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1794
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1795 scanResults = {}
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1796 for line in out.decode("utf-8").splitlines():
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1797 res = ast.literal_eval(line)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1798 address = res["address"]
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1799 if address not in scanResults:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1800 scanResults[address] = BluetoothAdvertisement(address)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1801 if res["scan_response"]:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1802 advType = SCAN_RSP
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1803 elif res["connectable"]:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1804 advType = ADV_IND
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1805 else:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1806 advType = ADV_SCAN_IND
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1807 scanResults[address].update(advType, res["rssi"], res["advertisement"])
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1808
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1809 return scanResults, ""
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1810
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1811 ##################################################################
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1812 ## Methods below implement NTP related methods
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1813 ##################################################################
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1814
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1815 def hasNetworkTime(self):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1816 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1817 Public method to check the availability of network time functions.
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1818
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1819 @return flag indicating the availability of network time functions
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1820 @rtype bool
9870
0399d3607829 Fixed a few code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9868
diff changeset
1821 @exception OSError raised to indicate an issue with the device
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1822 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1823 command = """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1824 def has_ntp():
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1825 try:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1826 import adafruit_ntp
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1827 if hasattr(adafruit_ntp, 'NTP'):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1828 return True
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1829 except ImportError:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1830 pass
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1831
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1832 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1833 from adafruit_wiznet5k import adafruit_wiznet5k_ntp
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1834 if hasattr(adafruit_wiznet5k_ntp, 'NTP'):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1835 return True
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1836 except ImportError:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1837 pass
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1838
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1839 return False
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1840
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1841 print(has_ntp())
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1842 del has_ntp
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1843 """
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1844 out, err = self.executeCommands(command, mode=self._submitMode)
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1845 if err:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1846 raise OSError(self._shortError(err))
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1847 return out.strip() == b"True"
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1848
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1849 def setNetworkTime(self, server="0.pool.ntp.org", tzOffset=0, timeout=10):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1850 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1851 Public method to set the time to the network time retrieved from an
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1852 NTP server.
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1853
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1854 @param server name of the NTP server to get the network time from
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1855 (defaults to "0.pool.ntp.org")
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1856 @type str (optional)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1857 @param tzOffset offset with respect to UTC (defaults to 0)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1858 @type int (optional)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1859 @param timeout maximum time to wait for a server response in seconds
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1860 (defaults to 10)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1861 @type int
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1862 @return tuple containing a flag indicating success and an error string
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1863 @rtype tuple of (bool, str)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1864 """
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1865 if self.getDeviceData("ethernet"):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1866 # WIZnet 5x00 Ethernet interface
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1867 # Note: The Adafruit NTP implementation does not close the socket after
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1868 # calling get_time(). That causes follow-on calls to fail. We
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1869 # close the socket in our code as a workaround.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1870 command = """{0}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1871 def set_ntp_time(server, tz_offset):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1872 import rtc
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1873
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1874 from adafruit_wiznet5k import adafruit_wiznet5k_ntp
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1875
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1876 w5x00_init()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1877
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1878 server_ip = nic.pretty_ip(nic.get_host_by_name(server))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1879 ntp = adafruit_wiznet5k_ntp.NTP(iface=nic, ntp_address=server_ip, utc=tz_offset)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1880 rtc.RTC().datetime = ntp.get_time()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1881 ntp._sock.close()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1882 return True
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1883
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1884 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1885 print({{
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1886 'result': set_ntp_time({1}, {2}),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1887 'error': '',
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1888 }})
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1889 except Exception as err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1890 print({{
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1891 'result': False,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1892 'error': str(err),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1893 }})
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1894 del set_ntp_time, w5x00_init
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1895 """.format(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1896 WiznetUtilities.cpyWiznetInit(), repr(server), tzOffset
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1897 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1898
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1899 elif self.getDeviceData("wifi"):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1900 # WiFi enabled board
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1901 command = """
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1902 def set_ntp_time(server, tz_offset, timeout):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1903 import rtc
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1904 import socketpool
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1905 import wifi
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1906
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1907 import adafruit_ntp
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1908
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1909
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1910 r = wifi.radio
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1911 if r.ipv4_address is None:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1912 return False
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1913
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1914 pool = socketpool.SocketPool(r)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1915 ntp = adafruit_ntp.NTP(
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1916 pool, server=server, tz_offset=tz_offset, socket_timeout=timeout
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1917 )
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1918 rtc.RTC().datetime = ntp.datetime
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1919 return True
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1920
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1921 try:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1922 print({{
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1923 'result': set_ntp_time({0}, {1}, {2}),
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1924 'error': '',
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1925 }})
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1926 except Exception as err:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1927 print({{
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1928 'result': False,
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1929 'error': str(err),
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1930 }})
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1931 del set_ntp_time
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1932 """.format(
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1933 repr(server), tzOffset, timeout
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1934 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1935
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9979
diff changeset
1936 out, err = self.executeCommands(
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1937 command, mode=self._submitMode, timeout=(timeout + 2) * 1000
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1938 )
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1939 if err:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1940 return False, err
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1941 else:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1942 res = ast.literal_eval(out.decode("utf-8"))
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1943 return res["result"], res["error"]
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1944
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1945 ##################################################################
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1946 ## Methods below implement some utility methods
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1947 ##################################################################
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1948
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1949 def __modifySettings(self, changedEntries):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1950 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1951 Private method to modify the 'settings.toml' file as of CircuitPython 8.0.0.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1952
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1953 @param changedEntries dictionary containing the TOML entries to be changed
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1954 @type dict of {str: str}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1955 @return tuple containing a success flag and an error message
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1956 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1957 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1958 workspace = self.getWorkspace()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1959 filename = os.path.join(workspace, "settings.toml")
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1960 if os.path.exists(filename):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1961 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1962 with open(filename, "r") as f:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1963 lines = f.read().splitlines()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1964 except OSError as err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1965 return False, str(err)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1966 else:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1967 lines = []
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1968
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1969 for key, value in changedEntries.items():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1970 newLine = "{0} = {1}".format(key, value)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1971 for row in range(len(lines)):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1972 if lines[row].split("=")[0].strip() == key:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1973 if value == "":
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1974 del lines[row]
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1975 else:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1976 lines[row] = newLine
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1977 break
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1978 else:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1979 if value != "":
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1980 lines.append(newLine)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1981
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1982 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1983 with open(filename, "w") as f:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1984 f.write("\n".join(lines))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1985 except OSError as err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1986 return False, str(err)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1987
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1988 return True, ""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1989
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1990
10069
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10032
diff changeset
1991 def createDevice(
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10032
diff changeset
1992 microPythonWidget, deviceType, vid, pid, boardName, serialNumber # noqa: U100
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10032
diff changeset
1993 ):
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1994 """
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1995 Function to instantiate a MicroPython device object.
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1996
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1997 @param microPythonWidget reference to the main MicroPython widget
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1998 @type MicroPythonWidget
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1999 @param deviceType device type assigned to this device interface
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2000 @type str
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2001 @param vid vendor ID
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2002 @type int
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2003 @param pid product ID
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2004 @type int
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2005 @param boardName name of the board
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2006 @type str
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
2007 @param serialNumber serial number of the board
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
2008 @type str
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2009 @return reference to the instantiated device object
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2010 @rtype CircuitPythonDevice
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2011 """
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
2012 return CircuitPythonDevice(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
2013 microPythonWidget, deviceType, boardName, vid=vid, pid=pid
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
2014 )

eric ide

mercurial