src/eric7/MicroPython/Devices/CircuitPythonDevices.py

Wed, 29 Mar 2023 14:15:55 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 29 Mar 2023 14:15:55 +0200
branch
eric7
changeset 9944
011ae0edbcff
parent 9929
4a81ccaa7c7f
child 9972
68ac01294544
permissions
-rw-r--r--

MicroPython
- Added the capability to select the device path manually in case it could not be detected (e.g. because the device does not have a volume name).

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)
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
132
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
133 if (
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
134 connected
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
135 and not self._deviceData["ethernet"]
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
136 and self.__vidpid in self.__wiznetVidPid
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
137 ):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
138 with EricOverridenCursor():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
139 EricMessageBox.warning(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
140 None,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
141 self.tr("WIZnet 5x00 Ethernet"),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
142 self.tr(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
143 "<p>Support for <b>WIZnet 5x00</b> Ethernet boards could not be"
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
144 " detected. Is the module <b>adafruit_wiznet5k</b> installed?"
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
145 "</p>"
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
146 ),
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
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 def setButtons(self):
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 Public method to enable the supported action buttons.
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 """
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
153 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
154
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
155 self.microPython.setActionButtons(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
156 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
157 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
158
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 def forceInterrupt(self):
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 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
162 serial connection.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
163
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 @return flag indicating an interrupt is needed
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 @rtype bool
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
168
7125
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
169 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
170 """
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
171 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
172
7125
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
173 @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
174 @rtype str
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
175 """
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
176 return self.tr("CircuitPython")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
177
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 def canStartRepl(self):
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 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
181
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 @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
183 and a reason why it cannot.
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 @rtype tuple of (bool, str)
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
187
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 def canStartPlotter(self):
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 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
191
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 @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
193 Plotter and a reason why it cannot.
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 @rtype tuple of (bool, str)
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
197
7092
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
198 def canRunScript(self):
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
199 """
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
200 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
201
7092
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
202 @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
203 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
204 @rtype tuple of (bool, str)
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
205 """
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
206 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
207
7092
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
208 def runScript(self, script):
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
209 """
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
210 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
211
7092
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
212 @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
213 @type str
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
214 """
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
215 pythonScript = script.split("\n")
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
216 self.sendCommands(pythonScript)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
217
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
218 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
219 """
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 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
221
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
222 @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
223 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
224 @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
225 """
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 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
227
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
228 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
229 """
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 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
231
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
232 @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
233 @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
234 """
7132
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
235 return self.__deviceVolumeMounted()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
236
7132
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
237 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
238 """
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
239 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
240
7132
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
241 @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
242 @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
243 """
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
244 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
245 self.__workspace = "" # reset
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
246
9944
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
247 if (
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
248 self.__workspace
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
249 and self.DeviceVolumeName not in self.__workspace
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
250 and not self.__workspaceSelected
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
251 ):
9786
f94b530722af Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9783
diff changeset
252 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
253
9944
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
254 return (
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
255 self.__workspaceSelected
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
256 or self.DeviceVolumeName in self.getWorkspace(silent=True)
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():
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
472 self.microPython.deviceInterface().execute(
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():
5bfb3c70e30b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9885
diff changeset
504 self.microPython.deviceInterface().execute(
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():
a3136eb28587 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9898
diff changeset
517 self.microPython.deviceInterface().execute(
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,
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
733 0, False,
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
734 )
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
735 if ok and selectedMount:
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
736 self.__workspace = selectedMount
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
737 self.__workspaceSelected = self.DeviceVolumeName not in self.__workspace
011ae0edbcff MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9929
diff changeset
738
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
739 ##################################################################
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
740 ## Methods below implement WiFi related methods
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
741 ##################################################################
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 def hasWifi(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
744 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
745 Public method to check the availability of WiFi.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
746
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
747 @return tuple containing a flag indicating the availability of WiFi
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
748 and the WiFi type (picow or pimoroni)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
749 @rtype tuple of (bool, str)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
750 @exception OSError raised to indicate an issue with the device
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
751 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
752 command = """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
753 def has_wifi():
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
754 try:
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
755 import wifi
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
756 if hasattr(wifi, 'radio'):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
757 return True, 'circuitpython'
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
758 except ImportError:
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
759 pass
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
760
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
761 return False, ''
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
762
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
763 print(has_wifi())
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
764 del has_wifi
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
765 """
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
766 out, err = self._interface.execute(command, mode=self._submitMode)
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
767 if err:
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
768 raise OSError(self._shortError(err))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
769 return ast.literal_eval(out.decode("utf-8"))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
770
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
771 def getWifiData(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
772 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
773 Public method to get data related to the current WiFi status.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
774
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
775 @return tuple of three dictionaries containing the WiFi status data
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
776 for the WiFi client, access point and overall data
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
777 @rtype tuple of (dict, dict, dict)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
778 @exception OSError raised to indicate an issue with the device
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
779 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
780 command = """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
781 def wifi_status():
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
782 import binascii
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
783 import json
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
784 import wifi
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
785
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
786 r = wifi.radio
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
787
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
788 station = {
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
789 'active': r.enabled and r.ipv4_address is not None,
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
790 'connected': r.ipv4_address is not None,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
791 'ifconfig': (
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
792 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
793 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
794 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
795 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
796 ),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
797 'mac': binascii.hexlify(r.mac_address, ':').decode(),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
798 'hostname': r.hostname,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
799 }
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
800 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
801 station['txpower'] = r.tx_power
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
802 except AttributeError:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
803 pass
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
804 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
805 if r.ap_info is not None:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
806 station.update({
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
807 'ap_ssid': r.ap_info.ssid,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
808 'ap_bssid': binascii.hexlify(r.ap_info.bssid, ':'),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
809 'ap_rssi': r.ap_info.rssi,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
810 'ap_channel': r.ap_info.channel,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
811 'ap_country': r.ap_info.country,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
812 })
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
813 authmode = r.ap_info.authmode
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
814 station['ap_security'] = (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
815 '_'.join(str(x).split('.')[-1] for x in authmode)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
816 if isinstance(authmode, list)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
817 else authmode
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
818 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
819 except (NotImplementedError, AttributeError):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
820 pass
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
821 print(json.dumps(station))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
822
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
823 ap = {
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
824 'active': r.enabled and r.ipv4_address_ap is not None,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
825 'connected': r.ipv4_address_ap is not None,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
826 'ifconfig': (
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
827 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
828 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
829 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
830 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
831 ),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
832 'mac': binascii.hexlify(r.mac_address_ap, ':').decode(),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
833 'hostname': r.hostname,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
834 }
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
835 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
836 ap['txpower'] = r.tx_power
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
837 except AttributeError:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
838 pass
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
839 print(json.dumps(ap))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
840
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
841 overall = {
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
842 'active': r.enabled
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
843 }
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
844 print(json.dumps(overall))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
845
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
846 wifi_status()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
847 del wifi_status
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
848 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
849
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
850 out, err = self._interface.execute(command, mode=self._submitMode)
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
851 if err:
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
852 raise OSError(self._shortError(err))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
853
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
854 stationStr, apStr, overallStr = out.decode("utf-8").splitlines()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
855 station = json.loads(stationStr)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
856 ap = json.loads(apStr)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
857 overall = json.loads(overallStr)
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
858 if "ap_security" in station:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
859 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
860 station["ap_security"] = self.__securityTranslations[
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
861 station["ap_security"]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
862 ]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
863 except KeyError:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
864 station["ap_security"] = self.tr("unknown ({0})").format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
865 station["ap_security"]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
866 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
867
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
868 return station, ap, overall
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
869
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
870 def connectWifi(self, ssid, password):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
871 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
872 Public method to connect a device to a WiFi network.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
873
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
874 @param ssid name (SSID) of the WiFi network
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
875 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
876 @param password password needed to connect
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
877 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
878 @return tuple containing the connection status and an error string
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
879 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
880 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
881 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
882 def connect_wifi(ssid, password):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
883 import json
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
884 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
885
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
886 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
887 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
888 r.start_station()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
889 r.connect(ssid, password)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
890 status = 'connected'
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
891 except Exception as exc:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
892 status = str(exc)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
893
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
894 print(json.dumps({{'connected': r.ipv4_address is not None, 'status': status}}))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
895
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
896 connect_wifi({0}, {1})
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
897 del connect_wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
898 """.format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
899 repr(ssid),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
900 repr(password if password else ""),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
901 )
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 with EricOverrideCursor():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
904 out, err = self._interface.execute(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
905 command, mode=self._submitMode, timeout=15000
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
906 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
907 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
908 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
909
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
910 result = json.loads(out.decode("utf-8").strip())
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
911 error = "" if result["connected"] else result["status"]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
912
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
913 return result["connected"], error
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
914
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
915 def disconnectWifi(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
916 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
917 Public method to disconnect a device from the WiFi network.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
918
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
919 @return tuple containing a flag indicating success and an error string
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
920 @rtype tuple of (bool, str)
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 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
923 def disconnect_wifi():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
924 import json
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
925 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
926
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
927 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
928 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
929 r.stop_station()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
930 status = ''
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
931 except Exception as exc:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
932 status = str(exc)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
933
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
934 print(json.dumps({'success': status == '', 'status': status}))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
935
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
936 disconnect_wifi()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
937 del disconnect_wifi
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
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
940 out, err = self._interface.execute(command, mode=self._submitMode)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
941 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
942 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
943
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
944 result = json.loads(out.decode("utf-8").strip())
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
945 return result["success"], result["status"]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
946
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
947 def writeCredentials(self, ssid, password):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
948 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
949 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
950 the start script to connect automatically.
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 @param ssid SSID of the network to connect to
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
953 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
954 @param password password needed to authenticate
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
955 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
956 @return tuple containing a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
957 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
958 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
959 if not self.__deviceVolumeMounted():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
960 return False, self.tr("The device volume is not available.")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
961
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
962 workspace = self.getWorkspace()
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 Globals.versionToTuple(self._deviceData["release"]) >= (8, 0, 0):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
965 # CircuitPython >= 8.0.0: generate 'settings.toml' file
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
966 contents = (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
967 'CIRCUITPY_WIFI_SSID = "{0}"\nCIRCUITPY_WIFI_PASSWORD = "{1}"\n'.format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
968 ssid, password
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
969 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
970 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
971 filename = os.path.join(workspace, "settings.toml")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
972 if os.path.exists(filename):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
973 ok = EricMessageBox.yesNo(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
974 None,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
975 self.tr("Write WiFi Credentials"),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
976 self.tr(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
977 """<p>The file <b>{0}</b> exists already. Shall it be"""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
978 """ replaced?</p>"""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
979 ).format(filename),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
980 icon=EricMessageBox.Warning,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
981 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
982 if not ok:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
983 return False, self.tr("Aborted")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
984 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
985 with open(filename, "w") as f:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
986 f.write(contents)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
987 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
988 except OSError as err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
989 return False, str(err)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
990
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
991 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
992 # CircuitPython < 8.0.0: generate a secrets.py script
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
993 # step 1: generate the secrets.py file
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
994 contents = (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
995 'secrets = {{\n "ssid": "{0}",\n "password": "{1}",\n}}\n'.format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
996 ssid, password
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
997 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
998 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
999 filename = os.path.join(workspace, "secrets.py")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1000 if os.path.exists(filename):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1001 ok = EricMessageBox.yesNo(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1002 None,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1003 self.tr("Write WiFi Credentials"),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1004 self.tr(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1005 """<p>The file <b>{0}</b> exists already. Shall it be"""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1006 """ replaced?</p>"""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1007 ).format(filename),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1008 icon=EricMessageBox.Warning,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1009 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1010 if not ok:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1011 return False, self.tr("Aborted")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1012 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1013 with open(filename, "w") as f:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1014 f.write(contents)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1015 except OSError as err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1016 return False, str(err)
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1017
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1018 # step 2: create the auto-connect script (wifi_connect.py)
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1019 scriptFile = os.path.join(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1020 os.path.dirname(__file__), "MCUScripts", "circuitPy7WiFiConnect.py"
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1021 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1022 targetFile = os.path.join(workspace, "wifi_connect.py")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1023 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1024 shutil.copy2(scriptFile, targetFile)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1025 except OSError as err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1026 return False, str(err)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1027 # Note: code.py will not be modified because the connection will be
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1028 # reset anyway
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1029 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1030
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1031 def removeCredentials(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1032 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1033 Public method to remove the saved credentials from the connected device.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1034
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1035 @return tuple containing a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1036 @rtype tuple of (bool, str)
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 if not self.__deviceVolumeMounted():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1039 return False, self.tr("The device volume is not available.")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1040
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1041 workspace = self.getWorkspace()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1042 for name in ("settings.toml", "secrets.py"):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1043 filename = os.path.join(workspace, name)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1044 if os.path.exists(filename):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1045 os.remove(filename)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1046
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1047 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1048
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1049 def checkInternet(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1050 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1051 Public method to check, if the internet can be reached.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1052
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1053 @return tuple containing a flag indicating reachability and an error string
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1054 @rtype tuple of (bool, str)
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 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1057 def check_internet():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1058 import ipaddress
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1059 import wifi
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 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1062 if r.ipv4_address is not None:
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9834
diff changeset
1063 ping = r.ping(ipaddress.IPv4Address("9.9.9.9"))
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1064 print(ping is not None)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1065 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1066 print(False)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1067
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1068 check_internet()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1069 del check_internet
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1070 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1071
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1072 out, err = self._interface.execute(command, mode=self._submitMode)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1073 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1074 return False, err
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 return out.decode("utf-8").strip() == "True", ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1077
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1078 def scanNetworks(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1079 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1080 Public method to scan for available WiFi networks.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1081
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1082 @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
1083 'MAC-Address', 'channel', 'RSSI' and 'security' and an error string
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1084 @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
1085 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1086 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1087 def scan_networks():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1088 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1089
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1090 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1091 network_list = []
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1092 enabled = r.enabled
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1093 if not enabled:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1094 r.enabled = True
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1095 for net in r.start_scanning_networks():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1096 network_list.append(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1097 (net.ssid, net.bssid, net.channel, net.rssi,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1098 '_'.join(str(x).split('.')[-1] for x in net.authmode))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1099 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1100 r.stop_scanning_networks()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1101 if not enabled:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1102 r.enabled = False
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1103 print(network_list)
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 scan_networks()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1106 del scan_networks
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1107 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1108
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1109 out, err = self._interface.execute(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1110 command, mode=self._submitMode, timeout=15000
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1111 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1112 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1113 return [], err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1114
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1115 networksList = ast.literal_eval(out.decode("utf-8"))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1116 networks = []
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1117 seenNetworks = []
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1118 for network in networksList:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1119 if network[0]:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1120 ssid = network[0]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1121 mac = binascii.hexlify(network[1], ":").decode("utf-8")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1122 channel = network[2]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1123 rssi = network[3]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1124 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1125 security = self.__securityTranslations[network[4]]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1126 except KeyError:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1127 security = self.tr("unknown ({0})").format(network[4])
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1128 if (ssid, mac, channel) not in seenNetworks:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1129 seenNetworks.append((ssid, mac, channel))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1130 networks.append((ssid, mac, channel, rssi, security))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1131
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1132 return networks, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1133
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1134 def deactivateInterface(self, interface):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1135 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1136 Public method to deactivate a given WiFi interface of the connected device.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1137
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1138 Note: With CircuitPython it is not possible to deactivate the station and
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1139 access point interfaces separately.
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 @param interface designation of the interface to be deactivated (one of 'AP'
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1142 or 'STA')
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1143 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1144 @return tuple containg a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1145 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1146 @exception ValueError raised to indicate a wrong value for the interface type
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1147 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1148 if interface not in ("STA", "AP"):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1149 raise ValueError(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1150 "interface must be 'AP' or 'STA', got '{0}'".format(interface)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1151 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1152
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1153 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1154 def deactivate():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1155 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1156
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1157 wifi.radio.enabled = False
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1158 print(not wifi.radio.enabled)
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 deactivate()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1161 del deactivate
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
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1164 out, err = self._interface.execute(command, mode=self._submitMode)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1165 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1166 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1167 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1168 return out.decode("utf-8").strip() == "True", ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1169
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1170 def startAccessPoint(self, ssid, security=None, password=None, ifconfig=None):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1171 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1172 Public method to start the access point interface.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1173
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1174 @param ssid SSID of the access point
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1175 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1176 @param security security method (defaults to None)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1177 @type int (optional)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1178 @param password password (defaults to None)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1179 @type str (optional)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1180 @param ifconfig IPv4 configuration for the access point if not default
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1181 (IPv4 address, netmask, gateway address, DNS server address)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1182 @type tuple of (str, str, str, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1183 @return tuple containing a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1184 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1185 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1186 if security is None or password is None:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1187 security = 0
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1188 password = ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1189 authmode = self.__securityCode2AuthModeString[security]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1190
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1191 if ifconfig:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1192 return (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1193 False,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1194 self.tr(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1195 "CircuitPython does not support setting the IPv4 parameters of the"
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1196 " WiFi access point."
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1197 ),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1198 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1199
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1200 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1201 def start_ap(ssid, password):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1202 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1203
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1204 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1205 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1206 r.start_ap(ssid, password, authmode={2})
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1207 except ValueError as exc:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1208 print('Error:', str(exc))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1209
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1210 start_ap({0}, {1})
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1211 del start_ap
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1212 """.format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1213 repr(ssid), repr(password), authmode
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1214 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1215
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1216 out, err = self._interface.execute(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1217 command, mode=self._submitMode, timeout=15000
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1218 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1219 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1220 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1221 elif out and out.startswith(b"Error:"):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1222 return False, out.decode("utf-8").split(None, 1)[-1]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1223 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1224 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1225
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1226 def stopAccessPoint(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1227 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1228 Public method to stop the access point interface.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1229
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1230 @return tuple containg a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1231 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1232 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1233 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1234 def stop_ap():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1235 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1236
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1237 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1238 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1239 r.stop_ap()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1240 except NotImplementedError as exc:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1241 print('Error:', str(exc))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1242
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1243 stop_ap()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1244 del stop_ap
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1245 """
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 out, err = self._interface.execute(command, mode=self._submitMode)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1248 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1249 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1250 elif out and out.startswith(b"Error:"):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1251 return False, out.decode("utf-8").split(None, 1)[-1]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1252 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1253 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1254
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1255 def getConnectedClients(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1256 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1257 Public method to get a list of connected clients.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1258
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1259 @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
1260 and the RSSI (if supported and available) and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1261 @rtype tuple of ([(bytes, int)], str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1262 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1263 return (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1264 [],
9841
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
1265 self.tr("CircuitPython does not support reporting of connected clients."),
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1266 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1267
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1268 ##################################################################
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1269 ## Methods below implement Ethernet related methods
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1270 ##################################################################
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 def hasEthernet(self):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1273 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1274 Public method to check the availability of Ethernet.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1275
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1276 @return tuple containing a flag indicating the availability of Ethernet
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1277 and the Ethernet type
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1278 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1279 @exception OSError raised to indicate an issue with the device
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1280 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1281 command = """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1282 def has_eth():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1283 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1284 from adafruit_wiznet5k import adafruit_wiznet5k
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1285 if hasattr(adafruit_wiznet5k, 'WIZNET5K'):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1286 return True, 'cpypicowiz'
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1287 except ImportError:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1288 pass
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1289
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1290 return False, ''
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1291
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1292 print(has_eth())
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1293 del has_eth
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1294 """
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 out, err = self._interface.execute(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1297 command, mode=self._submitMode, timeout=10000
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1298 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1299 if err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1300 raise OSError(self._shortError(err))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1301
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1302 return ast.literal_eval(out.decode("utf-8"))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1303
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1304 def getEthernetStatus(self):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1305 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1306 Public method to get Ethernet status data of the connected board.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1307
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1308 @return list of tuples containing the translated status data label and
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1309 the associated value
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1310 @rtype list of tuples of (str, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1311 @exception OSError raised to indicate an issue with the device
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1312 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1313 command = """{0}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1314 def ethernet_status():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1315 import binascii
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1316 import json
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1317
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1318 w5x00_init()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1319
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1320 res = {{
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1321 'active': nic.link_status != 0,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1322 '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
1323 'ifconfig': (
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1324 nic.pretty_ip(nic.ifconfig[0]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1325 nic.pretty_ip(nic.ifconfig[1]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1326 nic.pretty_ip(nic.ifconfig[2]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1327 nic.pretty_ip(nic.ifconfig[3]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1328 ),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1329 'mac': binascii.hexlify(nic.mac_address, ':').decode(),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1330 'chip': nic.chip,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1331 'max_sockets': nic.max_sockets,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1332 }}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1333 print(json.dumps(res))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1334
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1335 ethernet_status()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1336 del ethernet_status, w5x00_init
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1337 """.format(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1338 WiznetUtilities.cpyWiznetInit()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1339 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1340
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1341 out, err = self._interface.execute(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1342 command, mode=self._submitMode, timeout=10000
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 if err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1345 raise OSError(self._shortError(err))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1346
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1347 status = []
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1348 ethStatus = json.loads(out.decode("utf-8"))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1349 status.append((self.tr("Active"), self.bool2str(ethStatus["active"])))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1350 status.append((self.tr("Connected"), self.bool2str(ethStatus["connected"])))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1351 status.append((self.tr("IPv4 Address"), ethStatus["ifconfig"][0]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1352 status.append((self.tr("Netmask"), ethStatus["ifconfig"][1]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1353 status.append((self.tr("Gateway"), ethStatus["ifconfig"][2]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1354 status.append((self.tr("DNS"), ethStatus["ifconfig"][3]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1355 status.append((self.tr("MAC-Address"), ethStatus["mac"]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1356 status.append((self.tr("Chip Type"), ethStatus["chip"]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1357 status.append((self.tr("max. Sockets"), ethStatus["max_sockets"]))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1358
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1359 return status
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1360
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1361 def connectToLan(self, config):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1362 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1363 Public method to connect the connected device to the LAN.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1364
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1365 Note: The MAC address of the interface is configured with the WIZ
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1366
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1367 @param config configuration for the connection (either the string 'dhcp'
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1368 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
1369 @type str or tuple of (str, str, str, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1370 @return tuple containing a flag indicating success and an error message
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1371 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1372 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1373 command = """{0}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1374 def connect_lan(config):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1375 from adafruit_wiznet5k import adafruit_wiznet5k
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1376
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1377 w5x00_init()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1378
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1379 nic.mac_address = adafruit_wiznet5k._DEFAULT_MAC
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1380 if config == 'dhcp':
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1381 nic.set_dhcp(response_timeout=14)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1382 else:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1383 nic.ifconfig = (
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1384 nic.unpretty_ip(config[0]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1385 nic.unpretty_ip(config[1]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1386 nic.unpretty_ip(config[2]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1387 tuple(int(a) for a in config[3].split('.')),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1388 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1389 print(nic.ifconfig[0] != b'\x00\x00\x00\x00')
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1390
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1391 connect_lan({1})
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1392 del connect_lan, w5x00_init
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1393 """.format(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1394 WiznetUtilities.cpyWiznetInit(), "'dhcp'" if config == "dhcp" else config
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1395 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1396
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1397 with EricOverrideCursor():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1398 out, err = self._interface.execute(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1399 command, mode=self._submitMode, timeout=15000
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1400 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1401 if err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1402 return False, err
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1403
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1404 return out.strip() == b"True", ""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1405
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1406 def disconnectFromLan(self):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1407 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1408 Public method to disconnect from the LAN.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1409
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1410 @return tuple containing a flag indicating success and an error message
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1411 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1412 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1413 command = """{0}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1414 def disconnect_lan():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1415 import time
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1416
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1417 w5x00_init()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1418
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1419 nic.sw_reset()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1420 time.sleep(1)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1421 print(nic.ifconfig[0] == b'\x00\x00\x00\x00')
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1422
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1423 disconnect_lan()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1424 del disconnect_lan, w5x00_init
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1425 """.format(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1426 WiznetUtilities.cpyWiznetInit(),
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
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1429 with EricOverrideCursor():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1430 out, err = self._interface.execute(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1431 command, mode=self._submitMode, timeout=15000
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1432 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1433 if err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1434 return False, err
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1435
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1436 return out.strip() == b"True", ""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1437
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1438 def checkInternetViaLan(self):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1439 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1440 Public method to check, if the internet can be reached (LAN variant).
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1441
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1442 @return tuple containing a flag indicating reachability and an error string
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1443 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1444 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1445 command = """{0}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1446 def check_internet():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1447 w5x00_init()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1448
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1449 if nic.ifconfig[0] != b'\x00\x00\x00\x00':
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1450 sock = nic.get_socket()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1451 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1452 nic.socket_connect(sock, nic.get_host_by_name('quad9.net'), 80)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1453 nic.socket_disconnect(sock)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1454 print(True)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1455 except:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1456 print(False)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1457 nic.socket_close(sock)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1458 else:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1459 print(False)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1460
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1461 check_internet()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1462 del check_internet, w5x00_init
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1463 """.format(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1464 WiznetUtilities.cpyWiznetInit(),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1465 )
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 out, err = self._interface.execute(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1468 command, mode=self._submitMode, timeout=15000
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1469 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1470 if err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1471 return False, err
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1472
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1473 return out.strip() == b"True", ""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1474
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1475 def deactivateEthernet(self):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1476 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1477 Public method to deactivate the Ethernet interface of the connected device.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1478
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1479 @return tuple containg a flag indicating success and an error message
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1480 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1481 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1482 # The WIZnet 5x00 interface cannot be switched off explicitly. That means,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1483 # disconnect from the LAN is all we can do.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1484
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1485 return self.disconnectFromLan()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1486
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1487 def writeLanAutoConnect(self, config):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1488 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1489 Public method to generate a script and associated configuration to connect the
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1490 device to the LAN during boot time.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1491
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1492 @param config configuration for the connection (either the string 'dhcp'
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1493 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
1494 @type str or tuple of (str, str, str, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1495 @return tuple containing a flag indicating success and an error message
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1496 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1497 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1498 if not self.__deviceVolumeMounted():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1499 return False, self.tr("The device volume is not available.")
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1500
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1501 workspace = self.getWorkspace()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1502
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1503 if Globals.versionToTuple(self._deviceData["release"]) >= (8, 0, 0):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1504 # CircuitPython >= 8.0.0: generate 'settings.toml' file
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1505 newConfig = (
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1506 {
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1507 "WIZNET_IFCONFIG_0": '"dhcp"',
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1508 "WIZNET_IFCONFIG_1": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1509 "WIZNET_IFCONFIG_2": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1510 "WIZNET_IFCONFIG_3": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1511 }
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1512 if config == "dhcp"
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1513 else {
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1514 "WIZNET_IFCONFIG_0": '"{0}"'.format(config[0]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1515 "WIZNET_IFCONFIG_1": '"{0}"'.format(config[1]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1516 "WIZNET_IFCONFIG_2": '"{0}"'.format(config[2]),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1517 "WIZNET_IFCONFIG_3": '"{0}"'.format(config[3]),
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 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1520 ok, err = self.__modifySettings(newConfig)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1521 if not ok:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1522 return False, err
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1523
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1524 scriptFile = os.path.join(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1525 os.path.dirname(__file__), "MCUScripts", "picoWiznetConnectCpy8.py"
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
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1528 else:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1529 # step 1: generate the wiznet_config.py file
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1530 ifconfig = "ifconfig = {0}\n".format(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1531 "'dhcp'" if config == "dhcp" else config
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1532 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1533 filename = os.path.join(workspace, "wiznet_config.py")
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1534 if os.path.exists(filename):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1535 ok = EricMessageBox.yesNo(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1536 None,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1537 self.tr("Write Connect Script"),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1538 self.tr(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1539 """<p>The file <b>{0}</b> exists already. Shall it be"""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1540 """ replaced?</p>"""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1541 ).format(filename),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1542 icon=EricMessageBox.Warning,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1543 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1544 if not ok:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1545 return False, self.tr("Aborted")
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1546 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1547 with open(filename, "w") as f:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1548 f.write(ifconfig)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1549 except OSError as err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1550 return False, str(err)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1551
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1552 scriptFile = os.path.join(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1553 os.path.dirname(__file__), "MCUScripts", "picoWiznetConnectCpy7.py"
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
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1556 # step 2: create the auto-connect script (wiznet_connect.py)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1557 targetFile = os.path.join(workspace, "wiznet_connect.py")
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1558 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1559 shutil.copy2(scriptFile, targetFile)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1560 except OSError as err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1561 return False, str(err)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1562 # Note: code.py will not be modified because the connection will be
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1563 # reset anyway
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1564 return True, ""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1565
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1566 def removeLanAutoConnect(self):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1567 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1568 Public method to remove the saved IPv4 parameters from the connected device.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1569
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1570 Note: This disables the LAN auto-connect feature.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1571
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1572 @return tuple containing a flag indicating success and an error message
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1573 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1574 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1575 if not self.__deviceVolumeMounted():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1576 return False, self.tr("The device volume is not available.")
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1577
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1578 workspace = self.getWorkspace()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1579
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1580 if Globals.versionToTuple(self._deviceData["release"]) >= (8, 0, 0):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1581 # CircuitPython >= 8.0.0: generate 'settings.toml' file
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1582 newConfig = {
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1583 "WIZNET_IFCONFIG_0": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1584 "WIZNET_IFCONFIG_1": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1585 "WIZNET_IFCONFIG_2": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1586 "WIZNET_IFCONFIG_3": "",
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1587 }
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1588 self.__modifySettings(newConfig)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1589
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1590 for name in ("wiznet_config.py", "wiznet_connect.py"):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1591 filename = os.path.join(workspace, name)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1592 if os.path.exists(filename):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1593 os.remove(filename)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1594
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1595 return True, ""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1596
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1597 ##################################################################
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1598 ## Methods below implement Bluetooth related methods
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
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1601 def hasBluetooth(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1602 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1603 Public method to check the availability of Bluetooth.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1604
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1605 @return flag indicating the availability of Bluetooth
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1606 @rtype bool
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1607 @exception OSError raised to indicate an issue with the device
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1608 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1609 command = """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1610 def has_bt():
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1611 try:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1612 import _bleio
9881
5ce653f9dac8 Fixed an issue in the CircuitPython Bluetooth detection code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1613 if hasattr(_bleio, 'adapter') and _bleio.adapter is not None:
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1614 return True
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1615 except ImportError:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1616 pass
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1617
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1618 return False
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1619
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1620 print(has_bt())
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1621 del has_bt
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1622 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1623 out, err = self._interface.execute(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1624 command, mode=self._submitMode, timeout=10000
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1625 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1626 if err:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1627 raise OSError(self._shortError(err))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1628 return out.strip() == b"True"
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1629
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1630 def getBluetoothStatus(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1631 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1632 Public method to get Bluetooth status data of the connected board.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1633
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1634 @return list of tuples containing the translated status data label and
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1635 the associated value
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1636 @rtype list of tuples of (str, str)
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1637 @exception OSError raised to indicate an issue with the device
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1638 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1639 command = """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1640 def ble_status():
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1641 import _bleio
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1642 import binascii
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1643 import json
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1644
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1645 a = _bleio.adapter
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1646
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1647 ble_enabled = a.enabled
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1648 if not ble_enabled:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1649 a.enabled = True
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1650
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1651 res = {
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1652 'active': ble_enabled,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1653 'mac': binascii.hexlify(bytes(reversed(a.address.address_bytes)), ':').decode(),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1654 'addr_type': a.address.type,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1655 'name': a.name,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1656 'advertising': a.advertising,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1657 'connected': a.connected,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1658 }
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 if not ble_enabled:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1661 a.enabled = False
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1662
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1663 print(json.dumps(res))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1664
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1665 ble_status()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1666 del ble_status
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1667 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1668 out, err = self._interface.execute(command, mode=self._submitMode)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1669 if err:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1670 raise OSError(self._shortError(err))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1671
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1672 status = []
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1673 bleStatus = json.loads(out.decode("utf-8"))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1674 status.append((self.tr("Active"), self.bool2str(bleStatus["active"])))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1675 status.append((self.tr("Name"), bleStatus["name"]))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1676 status.append((self.tr("MAC-Address"), bleStatus["mac"]))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1677 status.append(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1678 (self.tr("Address Type"), self.__bleAddressType[bleStatus["addr_type"]])
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 status.append((self.tr("Connected"), self.bool2str(bleStatus["connected"])))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1681 status.append((self.tr("Advertising"), self.bool2str(bleStatus["advertising"])))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1682
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1683 return status
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1684
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1685 def activateBluetoothInterface(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1686 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1687 Public method to activate the Bluetooth interface.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1688
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1689 @return flag indicating the new state of the Bluetooth interface
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1690 @rtype bool
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1691 @exception OSError raised to indicate an issue with the device
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1692 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1693 command = """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1694 def activate_ble():
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1695 import _bleio
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1696
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1697 a = _bleio.adapter
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1698 if not a.enabled:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1699 a.enabled = True
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1700 print(a.enabled)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1701
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1702 activate_ble()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1703 del activate_ble
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1704 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1705 out, err = self._interface.execute(command, mode=self._submitMode)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1706 if err:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1707 raise OSError(self._shortError(err))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1708
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1709 return out.strip() == b"True"
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1710
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1711 def deactivateBluetoothInterface(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1712 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1713 Public method to deactivate the Bluetooth interface.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1714
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1715 @return flag indicating the new state of the Bluetooth interface
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1716 @rtype bool
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1717 @exception OSError raised to indicate an issue with the device
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1718 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1719 command = """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1720 def deactivate_ble():
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1721 import _bleio
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1722
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1723 a = _bleio.adapter
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1724 if a.enabled:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1725 a.enabled = False
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1726 print(a.enabled)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1727
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1728 deactivate_ble()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1729 del deactivate_ble
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1730 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1731 out, err = self._interface.execute(command, mode=self._submitMode)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1732 if err:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1733 raise OSError(self._shortError(err))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1734
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1735 return out.strip() == b"True"
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1736
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1737 def getDeviceScan(self, timeout=10):
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1738 """
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1739 Public method to perform a Bluetooth device scan.
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1740
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1741 @param timeout duration of the device scan in seconds (defaults
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1742 to 10)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1743 @type int (optional)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1744 @return tuple containing a dictionary with the scan results and
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1745 an error string
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1746 @rtype tuple of (dict, str)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1747 """
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1748 from ..BluetoothDialogs.BluetoothAdvertisement import (
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1749 ADV_IND,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1750 ADV_SCAN_IND,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1751 SCAN_RSP,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1752 BluetoothAdvertisement,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1753 )
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1754
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1755 command = """
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1756 def ble_scan():
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1757 import _bleio
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1758 import binascii
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1759 import time
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1760
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1761 a = _bleio.adapter
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1762
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1763 ble_enabled = a.enabled
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1764 if not ble_enabled:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1765 a.enabled = True
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1766
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1767 scanResults = a.start_scan(
9859
829c1edbf253 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9858
diff changeset
1768 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
1769 )
9858
6518c336fcd3 Fixed some bugs in MicroPython Bluetooth support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9857
diff changeset
1770 time.sleep({0})
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1771 a.stop_scan()
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1772
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1773 for res in scanResults:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1774 print({{
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1775 'address': binascii.hexlify(
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1776 bytes(reversed(res.address.address_bytes)), ':'
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1777 ).decode(),
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1778 'advertisement': res.advertisement_bytes,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1779 'connectable': res.connectable,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1780 'rssi': res.rssi,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1781 'scan_response': res.scan_response,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1782 }})
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 if not ble_enabled:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1785 a.enabled = False
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1786
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1787 ble_scan()
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1788 del ble_scan
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1789 """.format(
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1790 timeout
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 out, err = self._interface.execute(
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1793 command, mode=self._submitMode, timeout=(timeout + 5) * 1000
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 if err:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1796 return {}, err
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1797
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1798 scanResults = {}
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1799 for line in out.decode("utf-8").splitlines():
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1800 res = ast.literal_eval(line)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1801 address = res["address"]
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1802 if address not in scanResults:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1803 scanResults[address] = BluetoothAdvertisement(address)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1804 if res["scan_response"]:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1805 advType = SCAN_RSP
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1806 elif res["connectable"]:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1807 advType = ADV_IND
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1808 else:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1809 advType = ADV_SCAN_IND
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1810 scanResults[address].update(advType, res["rssi"], res["advertisement"])
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1811
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1812 return scanResults, ""
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1813
9868
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 ## Methods below implement NTP related methods
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
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1818 def hasNetworkTime(self):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1819 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1820 Public method to check the availability of network time functions.
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1821
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1822 @return flag indicating the availability of network time functions
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1823 @rtype bool
9870
0399d3607829 Fixed a few code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9868
diff changeset
1824 @exception OSError raised to indicate an issue with the device
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1825 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1826 command = """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1827 def has_ntp():
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1828 try:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1829 import adafruit_ntp
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1830 if hasattr(adafruit_ntp, 'NTP'):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1831 return True
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1832 except ImportError:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1833 pass
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1834
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1835 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1836 from adafruit_wiznet5k import adafruit_wiznet5k_ntp
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1837 if hasattr(adafruit_wiznet5k_ntp, 'NTP'):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1838 return True
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1839 except ImportError:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1840 pass
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1841
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1842 return False
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1843
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1844 print(has_ntp())
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1845 del has_ntp
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1846 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1847 out, err = self._interface.execute(command, mode=self._submitMode)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1848 if err:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1849 raise OSError(self._shortError(err))
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1850 return out.strip() == b"True"
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1851
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1852 def setNetworkTime(self, server="0.pool.ntp.org", tzOffset=0, timeout=10):
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 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
1855 NTP server.
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1856
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1857 @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
1858 (defaults to "0.pool.ntp.org")
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1859 @type str (optional)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1860 @param tzOffset offset with respect to UTC (defaults to 0)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1861 @type int (optional)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1862 @param timeout maximum time to wait for a server response in seconds
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1863 (defaults to 10)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1864 @type int
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1865 @return tuple containing a flag indicating success and an error string
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1866 @rtype tuple of (bool, str)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1867 """
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1868 if self.getDeviceData("ethernet"):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1869 # WIZnet 5x00 Ethernet interface
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1870 # Note: The Adafruit NTP implementation does not close the socket after
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1871 # calling get_time(). That causes follow-on calls to fail. We
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1872 # close the socket in our code as a workaround.
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1873 command = """{0}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1874 def set_ntp_time(server, tz_offset):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1875 import rtc
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1876
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1877 from adafruit_wiznet5k import adafruit_wiznet5k_ntp
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1878
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1879 w5x00_init()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1880
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1881 server_ip = nic.pretty_ip(nic.get_host_by_name(server))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1882 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
1883 rtc.RTC().datetime = ntp.get_time()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1884 ntp._sock.close()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1885 return True
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1886
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1887 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1888 print({{
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1889 'result': set_ntp_time({1}, {2}),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1890 'error': '',
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1891 }})
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1892 except Exception as err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1893 print({{
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1894 'result': False,
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1895 'error': str(err),
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1896 }})
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1897 del set_ntp_time, w5x00_init
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1898 """.format(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1899 WiznetUtilities.cpyWiznetInit(), repr(server), tzOffset
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1900 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1901
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1902 elif self.getDeviceData("wifi"):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1903 # WiFi enabled board
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1904 command = """
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1905 def set_ntp_time(server, tz_offset, timeout):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1906 import rtc
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1907 import socketpool
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1908 import wifi
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 import adafruit_ntp
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1911
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1912
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1913 r = wifi.radio
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1914 if r.ipv4_address is None:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1915 return False
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1916
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1917 pool = socketpool.SocketPool(r)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1918 ntp = adafruit_ntp.NTP(
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1919 pool, server=server, tz_offset=tz_offset, socket_timeout=timeout
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 rtc.RTC().datetime = ntp.datetime
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1922 return True
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1923
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1924 try:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1925 print({{
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1926 'result': set_ntp_time({0}, {1}, {2}),
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1927 'error': '',
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1928 }})
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1929 except Exception as err:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1930 print({{
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1931 'result': False,
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1932 'error': str(err),
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1933 }})
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1934 del set_ntp_time
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1935 """.format(
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1936 repr(server), tzOffset, timeout
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1937 )
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1938
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1939 out, err = self._interface.execute(
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1940 command, mode=self._submitMode, timeout=(timeout + 2) * 1000
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1941 )
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1942 if err:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1943 return False, err
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1944 else:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1945 res = ast.literal_eval(out.decode("utf-8"))
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1946 return res["result"], res["error"]
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1947
9885
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 ## Methods below implement some utility methods
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
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1952 def __modifySettings(self, changedEntries):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1953 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1954 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
1955
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1956 @param changedEntries dictionary containing the TOML entries to be changed
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1957 @type dict of {str: str}
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1958 @return tuple containing a success flag and an error message
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1959 @rtype tuple of (bool, str)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1960 """
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1961 workspace = self.getWorkspace()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1962 filename = os.path.join(workspace, "settings.toml")
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1963 if os.path.exists(filename):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1964 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1965 with open(filename, "r") as f:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1966 lines = f.read().splitlines()
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1967 except OSError as err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1968 return False, str(err)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1969 else:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1970 lines = []
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1971
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1972 for key, value in changedEntries.items():
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1973 newLine = "{0} = {1}".format(key, value)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1974 for row in range(len(lines)):
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1975 if lines[row].split("=")[0].strip() == key:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1976 if value == "":
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1977 del lines[row]
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 lines[row] = newLine
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1980 break
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1981 else:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1982 if value != "":
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1983 lines.append(newLine)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1984
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1985 try:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1986 with open(filename, "w") as f:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1987 f.write("\n".join(lines))
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1988 except OSError as err:
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1989 return False, str(err)
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1990
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1991 return True, ""
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
1992
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1993
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
1994 def createDevice(microPythonWidget, deviceType, vid, pid, boardName, serialNumber):
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1995 """
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1996 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
1997
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1998 @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
1999 @type MicroPythonWidget
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2000 @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
2001 @type str
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2002 @param vid vendor ID
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2003 @type int
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2004 @param pid product ID
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2005 @type int
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2006 @param boardName name of the board
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2007 @type str
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
2008 @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
2009 @type str
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2010 @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
2011 @rtype CircuitPythonDevice
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2012 """
9885
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
2013 return CircuitPythonDevice(
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
2014 microPythonWidget, deviceType, boardName, vid=vid, pid=pid
05cbf70e8f10 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9881
diff changeset
2015 )

eric ide

mercurial