src/eric7/MicroPython/Devices/CircuitPythonDevices.py

Sun, 12 Mar 2023 16:17:51 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 12 Mar 2023 16:17:51 +0100
branch
eric7
changeset 9881
5ce653f9dac8
parent 9870
0399d3607829
child 9885
05cbf70e8f10
permissions
-rw-r--r--

Fixed an issue in the CircuitPython Bluetooth detection code.

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
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
18 from PyQt6.QtWidgets import 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
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
21 from eric7.EricGui.EricOverrideCursor import EricOverrideCursor
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
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9496
diff changeset
24 from eric7.SystemUtilities import FileSystemUtilities
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
9765
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
26 from ..MicroPythonWidget import HAS_QTCHART
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
27 from . import FirmwareGithubUrls
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
28 from .CircuitPythonUpdater.CircuitPythonUpdaterInterface import (
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
29 CircuitPythonUpdaterInterface,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
30 isCircupAvailable,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
31 )
9756
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
32 from .DeviceBase import BaseDevice
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
9756
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
35 class CircuitPythonDevice(BaseDevice):
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Class implementing the device for CircuitPython boards.
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
39
7132
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
40 DeviceVolumeName = "CIRCUITPY"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
41
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
42 def __init__(
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
43 self, microPythonWidget, deviceType, boardName, hasWorkspace=True, parent=None
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
44 ):
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
47
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 @param microPythonWidget reference to the main MicroPython widget
7134
21d23ca51680 Renamed "MicroPythonReplWidget" to "MicroPythonWidget".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7132
diff changeset
49 @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
50 @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
51 @type str
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
52 @param boardName name of the board
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
53 @type str
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
54 @param hasWorkspace flag indicating that the devices supports access via
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
55 a mounted volume (defaults to True)
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
56 @type bool (optional)
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 @param parent reference to the parent object
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 @type QObject
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
60 super().__init__(microPythonWidget, deviceType, parent)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
61
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
62 self._submitMode = "paste" # use 'paste' mode to avoid loosing state
9799
a79430a8811d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9786
diff changeset
63
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
64 self.__boardName = boardName
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
65
9870
0399d3607829 Fixed a few code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9868
diff changeset
66 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
67
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
68 self.__updater = CircuitPythonUpdaterInterface(self)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
69
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
70 self.__createCPyMenu()
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
71
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
72 self.__securityTranslations = {
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
73 "OPEN": self.tr("open", "open WiFi network"),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
74 "WEP": "WEP",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
75 "WPA_PSK": "WPA",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
76 "WPA2_PSK": "WPA2",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
77 "WPA_WPA2_PSK": "WPA/WPA2",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
78 "WPA2_ENTERPRISE": "WPA2 (CCMP)",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
79 "WPA3_PSK": "WPA3",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
80 "WPA2_WPA3_PSK": "WPA2/WPA3",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
81 }
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
82 self.__securityCode2AuthModeString = {
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
83 0: "[wifi.AuthMode.OPEN]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
84 1: "[wifi.AuthMode.WEP]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
85 2: "[wifi.AuthMode.WPA, wifi.AuthMode.PSK]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
86 3: "[wifi.AuthMode.WPA2, wifi.AuthMode.PSK]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
87 4: "[wifi.AuthMode.WPA, wifi.AuthMode.WPA2, wifi.AuthMode.PSK]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
88 5: "[wifi.AuthMode.WPA2, wifi.AuthMode.ENTERPRISE]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
89 6: "[wifi.AuthMode.WPA3, wifi.AuthMode.PSK]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
90 7: "[wifi.AuthMode.WPA2, wifi.AuthMode.WPA3, wifi.AuthMode.PSK]",
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
91 }
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
92 self.__bleAddressType = {
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
93 0: self.tr("Public"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
94 1: self.tr("Random Static"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
95 2: self.tr("Random Private Resolvable"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
96 3: self.tr("Random Private Non-Resolvable"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
97 }
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
98
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
99 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
100 """
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
101 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
102
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
103 @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
104 @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
105 """
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
106 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
107 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
108
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
109 if self.__flashMenu.isTearOffMenuVisible():
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
110 self.__flashMenu.hideTearOffMenu()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
111
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
112 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
113
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 def setButtons(self):
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 Public method to enable the supported action buttons.
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 """
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
118 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
119
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
120 self.microPython.setActionButtons(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
121 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
122 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
123
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 def forceInterrupt(self):
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 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
127 serial connection.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
128
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 @return flag indicating an interrupt is needed
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 @rtype bool
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
133
7125
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
134 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
135 """
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
136 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
137
7125
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
138 @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
139 @rtype str
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
140 """
2028553ee58c CircuitPythonDevices, EspDevices, MicroPythonDevices: added a method to get the device name.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7122
diff changeset
141 return self.tr("CircuitPython")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
142
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 def canStartRepl(self):
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 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
146
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 @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
148 and a reason why it cannot.
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 @rtype tuple of (bool, str)
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 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
152
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 def canStartPlotter(self):
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 """
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 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
156
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 @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
158 Plotter and a reason why it cannot.
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 @rtype tuple of (bool, str)
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 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
162
7092
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
163 def canRunScript(self):
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
164 """
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
165 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
166
7092
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
167 @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
168 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
169 @rtype tuple of (bool, str)
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
170 """
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
171 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
172
7092
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
173 def runScript(self, script):
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
174 """
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
175 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
176
7092
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
177 @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
178 @type str
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
179 """
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
180 pythonScript = script.split("\n")
7414b3b012b1 CircuitPythonDevices: started the adaption for 'CircuitPython' based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7084
diff changeset
181 self.sendCommands(pythonScript)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
182
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
183 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
184 """
c4d9c28ebcd8 Devices.py files: removed some methods no longer needed after the recent improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7092
diff changeset
185 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
186
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
187 @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
188 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
189 @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
190 """
c4d9c28ebcd8 Devices.py files: removed some methods no longer needed after the recent improvements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7092
diff changeset
191 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
192
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
193 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
194 """
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
195 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
196
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
197 @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
198 @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
199 """
7132
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
200 return self.__deviceVolumeMounted()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
201
7132
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
202 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
203 """
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
204 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
205
7132
c4682cfcd160 CircuitPythonDevice: only report local access if the well known volume is mounted.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7129
diff changeset
206 @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
207 @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
208 """
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
209 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
210 self.__workspace = "" # reset
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
211
9767
2eed840795c0 Fixed a few issues in the MicroPython file manager widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
212 if self.__workspace and self.DeviceVolumeName not in self.__workspace:
9786
f94b530722af Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9783
diff changeset
213 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
214
8062
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
215 return self.DeviceVolumeName in self.getWorkspace(silent=True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
216
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
217 def __findDeviceDirectories(self, directories):
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
218 """
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
219 Private method to find the device directories associated with the
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
220 current board name.
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
221
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
222 @param directories list of directories to be checked
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
223 @type list of str
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
224 @return list of associated directories
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
225 @rtype list of str
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
226 """
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
227 boardDirectories = []
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
228 for directory in directories:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
229 bootFile = os.path.join(directory, "boot_out.txt")
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
230 if os.path.exists(bootFile):
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
231 with open(bootFile, "r") as f:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
232 line = f.readline()
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
233 if self.__boardName in line:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
234 boardDirectories.append(directory)
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
235
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
236 return boardDirectories
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
237
8062
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
238 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
239 """
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
240 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
241
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
242 @param silent flag indicating silent operations (defaults to False)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
243 @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
244 @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
245 @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
246 """
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
247 # 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
248 # 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
249 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
250 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
251 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
252
8062
8dc5acb30a8b MicroPython: implemented code to deal with multiple devices attached to the computer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8053
diff changeset
253 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
254 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
255 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
256 else:
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
257 boardDirectories = self.__findDeviceDirectories(deviceDirectories)
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
258 if len(boardDirectories) == 1:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
259 return boardDirectories[0]
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
260 elif len(boardDirectories) > 1:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
261 return self.selectDeviceDirectory(boardDirectories)
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
262 else:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
263 return self.selectDeviceDirectory(deviceDirectories)
7059
a8fad276cbd5 Continued implementing the MicroPython support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 else:
7174
de8175253dfc MicroPython: did some fine tuning of the MicroPython interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7161
diff changeset
265 # 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
266 # silent mode is selected)
de8175253dfc MicroPython: did some fine tuning of the MicroPython interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7161
diff changeset
267 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
268 EricMessageBox.warning(
7174
de8175253dfc MicroPython: did some fine tuning of the MicroPython interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7161
diff changeset
269 self.microPython,
de8175253dfc MicroPython: did some fine tuning of the MicroPython interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7161
diff changeset
270 self.tr("Workspace Directory"),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
271 self.tr(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
272 "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
273 " 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
274 " 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
275 " 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
276 ),
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
277 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
278
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
279 return super().getWorkspace()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
280
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
281 def getWorkspace(self, silent=False):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
282 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
283 Public method to get the workspace directory.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
284
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
285 @param silent flag indicating silent operations
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
286 @type bool
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
287 @return workspace directory used for saving files
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
288 @rtype str
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
289 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
290 if self.__workspace:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
291 # return cached entry
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
292 return self.__workspace
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
293 else:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
294 self.__workspace = self.__findWorkspace(silent=silent)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
295 return self.__workspace
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
296
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
297 def __createCPyMenu(self):
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
298 """
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
299 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
300 """
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
301 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
302 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
303 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
304
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
305 self.__flashMenu = self.__createFlashMenus()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
306
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
307 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
308 self.__cpyMenu.addAction(
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
309 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
310 )
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
311 self.__cpyMenu.addSeparator()
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
312 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
313 self.__cpyMenu.addSeparator()
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
314 self.__cpyMenu.addMenu(self.__libraryMenu)
9805
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
315 self.__cpyMenu.addSeparator()
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
316 self.__resetAct = self.__cpyMenu.addAction(
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
317 self.tr("Reset Device"), self.__resetDevice
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
318 )
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
319
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
320 def __createFlashMenus(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
321 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
322 Private method to create the various menus to flash a CircuitPython firmware.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
323
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
324 @return reference to the created top level flash menu
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
325 @rtype QMenu
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
326 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
327 menu = QMenu(self.tr("Flash CircuitPython Firmware"))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
328 menu.setTearOffEnabled(True)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
329
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
330 # UF2 devices
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
331 menu.addAction(self.tr("UF2 Device"), self.__flashCircuitPython)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
332 menu.addSeparator()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
333
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
334 # ESP32 specific submenu
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
335 self.__esp32FlashMenu = QMenu(self.tr("ESP32 Device"))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
336 self.__esp32FlashMenu.addAction(self.tr("Erase Flash"), self.__esp32EraseFlash)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
337 self.__esp32FlashMenu.addAction(
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
338 self.tr("Flash MicroPython Firmware"), self.__esp32FlashPython
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
339 )
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
340 self.__esp32FlashMenu.addSeparator()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
341 self.__esp32FlashMenu.addAction(
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
342 self.tr("Flash Additional Firmware"), self.__esp32FlashAddons
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
343 )
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
344 menu.addMenu(self.__esp32FlashMenu)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
345
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
346 # Teensy 4.0 and 4.1 specific submenu
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
347 self.__teensyFlashMenu = QMenu(self.tr("Teensy Device"))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
348 self.__teensyFlashMenu.addAction(
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
349 self.tr("CircuitPython Flash Instructions"),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
350 self.__showTeensyFlashInstructions,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
351 )
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
352 act = self.__teensyFlashMenu.addAction(
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
353 self.tr("Start 'Teensy Loader'"), self.__startTeensyLoader
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
354 )
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
355 act.setToolTip(
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
356 self.tr("Start the 'Teensy Loader' application to flash the Teensy device.")
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
357 )
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
358 menu.addMenu(self.__teensyFlashMenu)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
359
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
360 return menu
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
361
7116
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
362 def addDeviceMenuEntries(self, menu):
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
363 """
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
364 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
365
7116
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
366 @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
367 @type QMenu
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
368 """
9805
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
369 connected = self.microPython.isConnected()
9749
5d409223cf3f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9747
diff changeset
370 linkConnected = self.microPython.isLinkConnected()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
371
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
372 self.__flashCpyAct.setEnabled(not linkConnected)
9805
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
373 self.__resetAct.setEnabled(connected)
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
374
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
375 menu.addMenu(self.__cpyMenu)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
376
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
377 @pyqtSlot()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
378 def __aboutToShowLibraryMenu(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
379 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
380 Private slot to populate the 'Library Management' menu.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
381 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
382 self.__libraryMenu.clear()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
383
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
384 if isCircupAvailable():
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
385 self.__updater.populateMenu(self.__libraryMenu)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
386 else:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
387 act = self.__libraryMenu.addAction(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
388 self.tr("Install Library Files"), self.__installLibraryFiles
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
389 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
390 act.setEnabled(self.__deviceVolumeMounted())
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
391 act = self.__libraryMenu.addAction(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
392 self.tr("Install Library Package"),
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
393 lambda: self.__installLibraryFiles(packageMode=True),
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
394 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
395 act.setEnabled(self.__deviceVolumeMounted())
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
396 self.__libraryMenu.addSeparator()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
397 self.__libraryMenu.addAction(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
398 self.tr("Install 'circup' Package"),
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
399 self.__updater.installCircup,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
400 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
401
9805
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
402 @pyqtSlot()
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
403 def __resetDevice(self):
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
404 """
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
405 Private slot to reset the connected device.
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
406 """
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
407 if self.microPython.isConnected():
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
408 self.microPython.deviceInterface().execute(
9834
1fdaebde6316 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
409 "import microcontroller\nmicrocontroller.reset()\n",
1fdaebde6316 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
410 mode=self._submitMode,
9805
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
411 )
4a2657e29a32 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
412
8096
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
413 def hasFlashMenuEntry(self):
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
414 """
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
415 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
416
8096
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
417 @return flag indicating a specific flash menu entry
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
418 @rtype bool
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
419 """
5425a9072300 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8072
diff changeset
420 return True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
421
7116
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
422 @pyqtSlot()
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
423 def __flashCircuitPython(self):
233b6e62ca2b CircuitPython: added code to flash a new CircuitPython firmware.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7100
diff changeset
424 """
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
425 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
426 """
9756
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
427 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
428
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
429 dlg = UF2FlashDialog(boardType="circuitpython")
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
430 dlg.exec()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
431
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
432 @pyqtSlot()
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
433 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
434 """
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
435 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
436 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
437 """
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
438 from .TeensyDevices import showTeensyFlashInstructions
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
439
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
440 showTeensyFlashInstructions()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
441
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
442 @pyqtSlot()
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
443 def __startTeensyLoader(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
444 """
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
445 Private slot to start the 'Teensy Loader' application.
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
446
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
447 Note: The application must be accessible via the application search path.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
448 """
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
449 from .TeensyDevices import startTeensyLoader
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
450
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
451 startTeensyLoader()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
452
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
453 @pyqtSlot()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
454 def __esp32EraseFlash(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
455 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
456 Private slot to erase the flash of an ESP32 device.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
457 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
458 from .EspDevices import eraseFlash
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
459
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
460 eraseFlash(self.microPython.getCurrentPort())
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
461
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
462 @pyqtSlot()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
463 def __esp32FlashPython(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
464 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
465 Private slot to flash a MicroPython or CircuitPython firmware to an ESP32
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
466 device.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
467 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
468 from .EspDevices import flashPythonFirmware
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
469
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
470 flashPythonFirmware(self.microPython.getCurrentPort())
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
471
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
472 @pyqtSlot()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
473 def __esp32FlashAddons(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
474 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
475 Private slot to flash additional firmware to an ESP32 device.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
476 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
477 from .EspDevices import flashAddonFirmware
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
478
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
479 flashAddonFirmware(self.microPython.getCurrentPort())
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9752
diff changeset
480
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
481 @pyqtSlot()
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
482 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
483 """
9866
0cf5dda5512f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9859
diff changeset
484 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
485 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
486 """
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
487 ui = ericApp().getObject("UserInterface")
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9746
diff changeset
488 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
489 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
490 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
491
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
492 @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
493 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
494 """
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
495 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
496
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
497 @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
498 @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
499 """
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
500 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
501 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
502 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
503
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
504 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
505 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
506 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
507 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
508 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
509 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
510 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
511 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
512 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
513 if (
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
514 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
515 and self._deviceData
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
516 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
517 ):
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
518 # 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
519 # 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
520 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
521 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
522
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
523 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
524 "<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
525 "<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
526 "<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
527 "<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
528 "</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
529 ).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
530 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
531 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
532
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
533 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
534 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
535 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
536 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
537 )
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
538
48dbfea4ac06 Added a CircuitPython menu entry to show the installed and available firmware version.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
539 @pyqtSlot()
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
540 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
541 """
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
542 Private slot to install Python files into the onboard library.
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
543
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
544 @param packageMode flag indicating to install a library package
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
545 (defaults to False)
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
546 @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
547 """
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
548 title = (
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
549 self.tr("Install Library Package")
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
550 if packageMode
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
551 else self.tr("Install Library Files")
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
552 )
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
553 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
554 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
555 self.microPython,
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
556 title,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
557 self.tr(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
558 """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
559 """ 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
560 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
561 )
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
562 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
563
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
564 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
565 # 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
566 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
567 os.makedirs(target)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
568
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
569 if packageMode:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
570 libraryPackage = EricFileDialog.getExistingDirectory(
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
571 self.microPython,
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
572 title,
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
573 os.path.expanduser("~"),
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
574 EricFileDialog.Option(0),
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
575 )
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
576 if libraryPackage:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
577 target = os.path.join(target, os.path.basename(libraryPackage))
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
578 shutil.rmtree(target, ignore_errors=True)
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
579 shutil.copytree(libraryPackage, target)
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
580 else:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
581 libraryFiles = EricFileDialog.getOpenFileNames(
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
582 self.microPython,
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
583 title,
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
584 os.path.expanduser("~"),
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
585 self.tr(
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
586 "Compiled Python Files (*.mpy);;"
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
587 "Python Files (*.py);;"
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
588 "All Files (*)"
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
589 ),
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
590 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
591
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
592 for libraryFile in libraryFiles:
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
593 if os.path.exists(libraryFile):
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
594 shutil.copy2(libraryFile, target)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
595
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
596 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
597 """
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
598 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
599
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
600 @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
601 @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
602 """
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
603 return Preferences.getMicroPython("CircuitPythonDocuUrl")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
604
8053
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
605 def getDownloadMenuEntries(self):
7328
e2d85ef3fadb MicroPython:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7229
diff changeset
606 """
8053
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
607 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
608
8053
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
609 @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
610 entry
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
611 @rtype list of tuple of (str, str)
7328
e2d85ef3fadb MicroPython:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7229
diff changeset
612 """
8053
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
613 return [
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
614 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
615 self.tr("CircuitPython Firmware"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
616 Preferences.getMicroPython("CircuitPythonFirmwareUrl"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
617 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
618 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
619 self.tr("CircuitPython Libraries"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
620 Preferences.getMicroPython("CircuitPythonLibrariesUrl"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
621 ),
8053
5316e335722f CircuitPython: added downloads menu for Firmware and Libraries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
622 ]
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
623
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
624 ##################################################################
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
625 ## Methods below implement WiFi related methods
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
626 ##################################################################
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
627
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
628 def hasWifi(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
629 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
630 Public method to check the availability of WiFi.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
631
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
632 @return tuple containing a flag indicating the availability of WiFi
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
633 and the WiFi type (picow or pimoroni)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
634 @rtype tuple of (bool, str)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
635 @exception OSError raised to indicate an issue with the device
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
636 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
637 command = """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
638 def has_wifi():
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
639 try:
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
640 import wifi
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
641 if hasattr(wifi, 'radio'):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
642 return True, 'circuitpython'
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
643 except ImportError:
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
644 pass
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
645
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
646 return False, ''
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
647
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
648 print(has_wifi())
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
649 del has_wifi
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
650 """
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
651 out, err = self._interface.execute(command, mode=self._submitMode)
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
652 if err:
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
653 raise OSError(self._shortError(err))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
654 return ast.literal_eval(out.decode("utf-8"))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
655
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
656 def getWifiData(self):
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
657 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
658 Public method to get data related to the current WiFi status.
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
659
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
660 @return tuple of three dictionaries containing the WiFi status data
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
661 for the WiFi client, access point and overall data
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
662 @rtype tuple of (dict, dict, dict)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
663 @exception OSError raised to indicate an issue with the device
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
664 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
665 command = """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
666 def wifi_status():
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
667 import binascii
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
668 import json
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
669 import wifi
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
670
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
671 r = wifi.radio
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
672
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
673 station = {
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
674 'active': r.enabled and r.ipv4_address is not None,
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
675 'connected': r.ipv4_address is not None,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
676 'ifconfig': (
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
677 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
678 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
679 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
680 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
681 ),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
682 'mac': binascii.hexlify(r.mac_address, ':').decode(),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
683 'hostname': r.hostname,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
684 }
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
685 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
686 station['txpower'] = r.tx_power
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
687 except AttributeError:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
688 pass
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
689 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
690 if r.ap_info is not None:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
691 station.update({
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
692 'ap_ssid': r.ap_info.ssid,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
693 'ap_bssid': binascii.hexlify(r.ap_info.bssid, ':'),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
694 'ap_rssi': r.ap_info.rssi,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
695 'ap_channel': r.ap_info.channel,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
696 'ap_country': r.ap_info.country,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
697 })
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
698 authmode = r.ap_info.authmode
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
699 station['ap_security'] = (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
700 '_'.join(str(x).split('.')[-1] for x in authmode)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
701 if isinstance(authmode, list)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
702 else authmode
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
703 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
704 except (NotImplementedError, AttributeError):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
705 pass
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
706 print(json.dumps(station))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
707
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
708 ap = {
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
709 'active': r.enabled and r.ipv4_address_ap is not None,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
710 'connected': r.ipv4_address_ap is not None,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
711 'ifconfig': (
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
712 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
713 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
714 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
715 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
716 ),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
717 'mac': binascii.hexlify(r.mac_address_ap, ':').decode(),
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
718 'hostname': r.hostname,
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
719 }
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
720 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
721 ap['txpower'] = r.tx_power
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
722 except AttributeError:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
723 pass
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
724 print(json.dumps(ap))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
725
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
726 overall = {
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
727 'active': r.enabled
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
728 }
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
729 print(json.dumps(overall))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
730
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
731 wifi_status()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
732 del wifi_status
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
733 """
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
734
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
735 out, err = self._interface.execute(command, mode=self._submitMode)
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
736 if err:
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
737 raise OSError(self._shortError(err))
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
738
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
739 stationStr, apStr, overallStr = out.decode("utf-8").splitlines()
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
740 station = json.loads(stationStr)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
741 ap = json.loads(apStr)
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
742 overall = json.loads(overallStr)
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
743 if "ap_security" in station:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
744 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
745 station["ap_security"] = self.__securityTranslations[
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
746 station["ap_security"]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
747 ]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
748 except KeyError:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
749 station["ap_security"] = self.tr("unknown ({0})").format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
750 station["ap_security"]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
751 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
752
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
753 return station, ap, overall
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9805
diff changeset
754
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
755 def connectWifi(self, ssid, password):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
756 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
757 Public method to connect a device to a WiFi network.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
758
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
759 @param ssid name (SSID) of the WiFi network
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
760 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
761 @param password password needed to connect
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
762 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
763 @return tuple containing the connection status and an error string
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
764 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
765 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
766 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
767 def connect_wifi(ssid, password):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
768 import json
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
769 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
770
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
771 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
772 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
773 r.start_station()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
774 r.connect(ssid, password)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
775 status = 'connected'
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
776 except Exception as exc:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
777 status = str(exc)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
778
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
779 print(json.dumps({{'connected': r.ipv4_address is not None, 'status': status}}))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
780
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
781 connect_wifi({0}, {1})
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
782 del connect_wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
783 """.format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
784 repr(ssid),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
785 repr(password if password else ""),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
786 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
787
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
788 with EricOverrideCursor():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
789 out, err = self._interface.execute(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
790 command, mode=self._submitMode, timeout=15000
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
791 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
792 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
793 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
794
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
795 result = json.loads(out.decode("utf-8").strip())
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
796 error = "" if result["connected"] else result["status"]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
797
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
798 return result["connected"], error
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
799
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
800 def disconnectWifi(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
801 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
802 Public method to disconnect a device from the WiFi network.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
803
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
804 @return tuple containing a flag indicating success and an error string
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
805 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
806 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
807 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
808 def disconnect_wifi():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
809 import json
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
810 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
811
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
812 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
813 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
814 r.stop_station()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
815 status = ''
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
816 except Exception as exc:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
817 status = str(exc)
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 print(json.dumps({'success': status == '', 'status': status}))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
820
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
821 disconnect_wifi()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
822 del disconnect_wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
823 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
824
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
825 out, err = self._interface.execute(command, mode=self._submitMode)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
826 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
827 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
829 result = json.loads(out.decode("utf-8").strip())
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
830 return result["success"], result["status"]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
831
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
832 def writeCredentials(self, ssid, password):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
833 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
834 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
835 the start script to connect automatically.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
836
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
837 @param ssid SSID of the network to connect to
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
838 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
839 @param password password needed to authenticate
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
840 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
841 @return tuple containing a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
842 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
843 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
844 if not self.__deviceVolumeMounted():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
845 return False, self.tr("The device volume is not available.")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
846
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
847 workspace = self.getWorkspace()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
848
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
849 if Globals.versionToTuple(self._deviceData["release"]) >= (8, 0, 0):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
850 # CircuitPython >= 8.0.0: generate 'settings.toml' file
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
851 contents = (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
852 'CIRCUITPY_WIFI_SSID = "{0}"\nCIRCUITPY_WIFI_PASSWORD = "{1}"\n'.format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
853 ssid, password
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
854 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
855 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
856 filename = os.path.join(workspace, "settings.toml")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
857 if os.path.exists(filename):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
858 ok = EricMessageBox.yesNo(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
859 None,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
860 self.tr("Write WiFi Credentials"),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
861 self.tr(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
862 """<p>The file <b>{0}</b> exists already. Shall it be"""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
863 """ replaced?</p>"""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
864 ).format(filename),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
865 icon=EricMessageBox.Warning,
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 if not ok:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
868 return False, self.tr("Aborted")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
869 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
870 with open(filename, "w") as f:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
871 f.write(contents)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
872 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
873 except OSError as err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
874 return False, str(err)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
875
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
876 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
877 # CircuitPython < 8.0.0: generate a secrets.py script
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
878 # step 1: generate the secrets.py file
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
879 contents = (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
880 'secrets = {{\n "ssid": "{0}",\n "password": "{1}",\n}}\n'.format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
881 ssid, password
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
882 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
883 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
884 filename = os.path.join(workspace, "secrets.py")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
885 if os.path.exists(filename):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
886 ok = EricMessageBox.yesNo(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
887 None,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
888 self.tr("Write WiFi Credentials"),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
889 self.tr(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
890 """<p>The file <b>{0}</b> exists already. Shall it be"""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
891 """ replaced?</p>"""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
892 ).format(filename),
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
893 icon=EricMessageBox.Warning,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
894 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
895 if not ok:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
896 return False, self.tr("Aborted")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
897 # step 2: create the auto-connect script (wifi_connect.py)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
898 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
899 with open(filename, "w") as f:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
900 f.write(contents)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
901 except OSError as err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
902 return False, str(err)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
903 scriptFile = os.path.join(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
904 os.path.dirname(__file__), "MCUScripts", "circuitPy7WiFiConnect.py"
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
905 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
906 targetFile = os.path.join(workspace, "wifi_connect.py")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
907 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
908 shutil.copy2(scriptFile, targetFile)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
909 except OSError as err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
910 return False, str(err)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
911 # Note: code.py will not be modified because the connection will be
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
912 # reset anyway
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
913 return True, ""
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 removeCredentials(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 remove the saved credentials from the connected device.
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 message
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 if not self.__deviceVolumeMounted():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
923 return False, self.tr("The device volume is not available.")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
924
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
925 workspace = self.getWorkspace()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
926 for name in ("settings.toml", "secrets.py"):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
927 filename = os.path.join(workspace, name)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
928 if os.path.exists(filename):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
929 os.remove(filename)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
930
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
931 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
932
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
933 def checkInternet(self):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
934 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
935 Public method to check, if the internet can be reached.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
936
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
937 @return tuple containing a flag indicating reachability and an error string
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
938 @rtype tuple of (bool, str)
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 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
941 def check_internet():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
942 import ipaddress
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
943 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
944
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
945 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
946 if r.ipv4_address is not None:
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9834
diff changeset
947 ping = r.ping(ipaddress.IPv4Address("9.9.9.9"))
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
948 print(ping is not None)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
949 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
950 print(False)
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 check_internet()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
953 del check_internet
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
954 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
955
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
956 out, err = self._interface.execute(command, mode=self._submitMode)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
957 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
958 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
959
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
960 return out.decode("utf-8").strip() == "True", ""
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 def scanNetworks(self):
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 Public method to scan for available WiFi networks.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
965
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
966 @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
967 'MAC-Address', 'channel', 'RSSI' and 'security' and an error string
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
968 @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
969 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
970 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
971 def scan_networks():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
972 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
973
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
974 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
975 network_list = []
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
976 enabled = r.enabled
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
977 if not enabled:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
978 r.enabled = True
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
979 for net in r.start_scanning_networks():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
980 network_list.append(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
981 (net.ssid, net.bssid, net.channel, net.rssi,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
982 '_'.join(str(x).split('.')[-1] for x in net.authmode))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
983 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
984 r.stop_scanning_networks()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
985 if not enabled:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
986 r.enabled = False
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
987 print(network_list)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
988
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
989 scan_networks()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
990 del scan_networks
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
991 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
992
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
993 out, err = self._interface.execute(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
994 command, mode=self._submitMode, timeout=15000
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
995 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
996 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
997 return [], err
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 networksList = ast.literal_eval(out.decode("utf-8"))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1000 networks = []
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1001 seenNetworks = []
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1002 for network in networksList:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1003 if network[0]:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1004 ssid = network[0]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1005 mac = binascii.hexlify(network[1], ":").decode("utf-8")
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1006 channel = network[2]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1007 rssi = network[3]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1008 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1009 security = self.__securityTranslations[network[4]]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1010 except KeyError:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1011 security = self.tr("unknown ({0})").format(network[4])
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1012 if (ssid, mac, channel) not in seenNetworks:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1013 seenNetworks.append((ssid, mac, channel))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1014 networks.append((ssid, mac, channel, rssi, security))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1015
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1016 return networks, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1017
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1018 def deactivateInterface(self, interface):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1019 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1020 Public method to deactivate a given WiFi interface of the connected device.
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 Note: With CircuitPython it is not possible to deactivate the station and
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1023 access point interfaces separately.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1024
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1025 @param interface designation of the interface to be deactivated (one of 'AP'
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1026 or 'STA')
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1027 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1028 @return tuple containg a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1029 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1030 @exception ValueError raised to indicate a wrong value for the interface type
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1031 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1032 if interface not in ("STA", "AP"):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1033 raise ValueError(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1034 "interface must be 'AP' or 'STA', got '{0}'".format(interface)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1035 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1036
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1037 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1038 def deactivate():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1039 import wifi
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 wifi.radio.enabled = False
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1042 print(not wifi.radio.enabled)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1043
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1044 deactivate()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1045 del deactivate
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
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1048 out, err = self._interface.execute(command, mode=self._submitMode)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1049 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1050 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1051 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1052 return out.decode("utf-8").strip() == "True", ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1053
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1054 def startAccessPoint(self, ssid, security=None, password=None, ifconfig=None):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1055 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1056 Public method to start the access point interface.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1057
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1058 @param ssid SSID of the access point
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1059 @type str
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1060 @param security security method (defaults to None)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1061 @type int (optional)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1062 @param password password (defaults to None)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1063 @type str (optional)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1064 @param ifconfig IPv4 configuration for the access point if not default
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1065 (IPv4 address, netmask, gateway address, DNS server address)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1066 @type tuple of (str, str, str, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1067 @return tuple containing a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1068 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1069 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1070 if security is None or password is None:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1071 security = 0
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1072 password = ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1073 authmode = self.__securityCode2AuthModeString[security]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1074
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1075 if ifconfig:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1076 return (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1077 False,
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1078 self.tr(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1079 "CircuitPython does not support setting the IPv4 parameters of the"
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1080 " WiFi access point."
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 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1083
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1084 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1085 def start_ap(ssid, password):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1086 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1087
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1088 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1089 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1090 r.start_ap(ssid, password, authmode={2})
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1091 except ValueError as exc:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1092 print('Error:', str(exc))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1093
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1094 start_ap({0}, {1})
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1095 del start_ap
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1096 """.format(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1097 repr(ssid), repr(password), authmode
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1098 )
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 out, err = self._interface.execute(
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1101 command, mode=self._submitMode, timeout=15000
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1102 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1103 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1104 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1105 elif out and out.startswith(b"Error:"):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1106 return False, out.decode("utf-8").split(None, 1)[-1]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1107 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1108 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1109
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1110 def stopAccessPoint(self):
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 Public method to stop the access point interface.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1113
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1114 @return tuple containg a flag indicating success and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1115 @rtype tuple of (bool, str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1116 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1117 command = """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1118 def stop_ap():
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1119 import wifi
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1120
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1121 r = wifi.radio
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1122 try:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1123 r.stop_ap()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1124 except NotImplementedError as exc:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1125 print('Error:', str(exc))
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1126
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1127 stop_ap()
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1128 del stop_ap
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1129 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1130
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1131 out, err = self._interface.execute(command, mode=self._submitMode)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1132 if err:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1133 return False, err
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1134 elif out and out.startswith(b"Error:"):
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1135 return False, out.decode("utf-8").split(None, 1)[-1]
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1136 else:
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1137 return True, ""
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1138
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1139 def getConnectedClients(self):
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 Public method to get a list of connected clients.
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1142
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1143 @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
1144 and the RSSI (if supported and available) and an error message
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1145 @rtype tuple of ([(bytes, int)], str)
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1146 """
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1147 return (
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1148 [],
9841
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
1149 self.tr("CircuitPython does not support reporting of connected clients."),
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1150 )
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
1151
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1152 ##################################################################
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1153 ## Methods below implement Bluetooth related methods
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1154 ##################################################################
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1155
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1156 def hasBluetooth(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1157 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1158 Public method to check the availability of Bluetooth.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1159
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1160 @return flag indicating the availability of Bluetooth
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1161 @rtype bool
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1162 @exception OSError raised to indicate an issue with the device
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1163 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1164 command = """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1165 def has_bt():
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1166 try:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1167 import _bleio
9881
5ce653f9dac8 Fixed an issue in the CircuitPython Bluetooth detection code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1168 if hasattr(_bleio, 'adapter') and _bleio.adapter is not None:
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1169 return True
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1170 except ImportError:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1171 pass
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1172
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1173 return False
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1174
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1175 print(has_bt())
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1176 del has_bt
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1177 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1178 out, err = self._interface.execute(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1179 command, mode=self._submitMode, timeout=10000
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1180 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1181 if err:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1182 raise OSError(self._shortError(err))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1183 return out.strip() == b"True"
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1184
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1185 def getBluetoothStatus(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1186 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1187 Public method to get Bluetooth status data of the connected board.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1188
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1189 @return list of tuples containing the translated status data label and
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1190 the associated value
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1191 @rtype list of tuples of (str, str)
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1192 @exception OSError raised to indicate an issue with the device
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1193 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1194 command = """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1195 def ble_status():
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1196 import _bleio
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1197 import binascii
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1198 import json
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1199
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1200 a = _bleio.adapter
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1201
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1202 ble_enabled = a.enabled
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1203 if not ble_enabled:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1204 a.enabled = True
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1205
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1206 res = {
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1207 'active': ble_enabled,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1208 'mac': binascii.hexlify(bytes(reversed(a.address.address_bytes)), ':').decode(),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1209 'addr_type': a.address.type,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1210 'name': a.name,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1211 'advertising': a.advertising,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1212 'connected': a.connected,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1213 }
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1214
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1215 if not ble_enabled:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1216 a.enabled = False
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1217
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1218 print(json.dumps(res))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1219
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1220 ble_status()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1221 del ble_status
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1222 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1223 out, err = self._interface.execute(command, mode=self._submitMode)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1224 if err:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1225 raise OSError(self._shortError(err))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1226
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1227 status = []
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1228 bleStatus = json.loads(out.decode("utf-8"))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1229 status.append((self.tr("Active"), self.bool2str(bleStatus["active"])))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1230 status.append((self.tr("Name"), bleStatus["name"]))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1231 status.append((self.tr("MAC-Address"), bleStatus["mac"]))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1232 status.append(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1233 (self.tr("Address Type"), self.__bleAddressType[bleStatus["addr_type"]])
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1234 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1235 status.append((self.tr("Connected"), self.bool2str(bleStatus["connected"])))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1236 status.append((self.tr("Advertising"), self.bool2str(bleStatus["advertising"])))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1237
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1238 return status
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1239
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1240 def activateBluetoothInterface(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1241 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1242 Public method to activate the Bluetooth interface.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1243
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1244 @return flag indicating the new state of the Bluetooth interface
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1245 @rtype bool
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1246 @exception OSError raised to indicate an issue with the device
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1247 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1248 command = """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1249 def activate_ble():
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1250 import _bleio
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1251
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1252 a = _bleio.adapter
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1253 if not a.enabled:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1254 a.enabled = True
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1255 print(a.enabled)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1256
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1257 activate_ble()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1258 del activate_ble
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1259 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1260 out, err = self._interface.execute(command, mode=self._submitMode)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1261 if err:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1262 raise OSError(self._shortError(err))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1263
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1264 return out.strip() == b"True"
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1265
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1266 def deactivateBluetoothInterface(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1267 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1268 Public method to deactivate the Bluetooth interface.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1269
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1270 @return flag indicating the new state of the Bluetooth interface
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1271 @rtype bool
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1272 @exception OSError raised to indicate an issue with the device
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1273 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1274 command = """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1275 def deactivate_ble():
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1276 import _bleio
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1277
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1278 a = _bleio.adapter
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1279 if a.enabled:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1280 a.enabled = False
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1281 print(a.enabled)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1282
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1283 deactivate_ble()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1284 del deactivate_ble
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1285 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1286 out, err = self._interface.execute(command, mode=self._submitMode)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1287 if err:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1288 raise OSError(self._shortError(err))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1289
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1290 return out.strip() == b"True"
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
1291
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1292 def getDeviceScan(self, timeout=10):
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1293 """
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1294 Public method to perform a Bluetooth device scan.
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1295
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1296 @param timeout duration of the device scan in seconds (defaults
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1297 to 10)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1298 @type int (optional)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1299 @return tuple containing a dictionary with the scan results and
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1300 an error string
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1301 @rtype tuple of (dict, str)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1302 """
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1303 from ..BluetoothDialogs.BluetoothAdvertisement import (
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1304 ADV_IND,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1305 ADV_SCAN_IND,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1306 SCAN_RSP,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1307 BluetoothAdvertisement,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1308 )
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1309
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1310 command = """
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1311 def ble_scan():
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1312 import _bleio
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1313 import binascii
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1314 import time
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1315
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1316 a = _bleio.adapter
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1317
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1318 ble_enabled = a.enabled
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1319 if not ble_enabled:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1320 a.enabled = True
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1321
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1322 scanResults = a.start_scan(
9859
829c1edbf253 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9858
diff changeset
1323 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
1324 )
9858
6518c336fcd3 Fixed some bugs in MicroPython Bluetooth support.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9857
diff changeset
1325 time.sleep({0})
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1326 a.stop_scan()
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1327
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1328 for res in scanResults:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1329 print({{
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1330 'address': binascii.hexlify(
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1331 bytes(reversed(res.address.address_bytes)), ':'
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1332 ).decode(),
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1333 'advertisement': res.advertisement_bytes,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1334 'connectable': res.connectable,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1335 'rssi': res.rssi,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1336 'scan_response': res.scan_response,
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1337 }})
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1338
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1339 if not ble_enabled:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1340 a.enabled = False
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1341
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1342 ble_scan()
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1343 del ble_scan
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1344 """.format(
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1345 timeout
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1346 )
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1347 out, err = self._interface.execute(
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1348 command, mode=self._submitMode, timeout=(timeout + 5) * 1000
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1349 )
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1350 if err:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1351 return {}, err
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1352
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1353 scanResults = {}
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1354 for line in out.decode("utf-8").splitlines():
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1355 res = ast.literal_eval(line)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1356 address = res["address"]
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1357 if address not in scanResults:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1358 scanResults[address] = BluetoothAdvertisement(address)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1359 if res["scan_response"]:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1360 advType = SCAN_RSP
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1361 elif res["connectable"]:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1362 advType = ADV_IND
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1363 else:
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1364 advType = ADV_SCAN_IND
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1365 scanResults[address].update(advType, res["rssi"], res["advertisement"])
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1366
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1367 return scanResults, ""
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
1368
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1369 ##################################################################
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1370 ## Methods below implement NTP related methods
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1371 ##################################################################
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1372
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1373 def hasNetworkTime(self):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1374 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1375 Public method to check the availability of network time functions.
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1376
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1377 @return flag indicating the availability of network time functions
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1378 @rtype bool
9870
0399d3607829 Fixed a few code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9868
diff changeset
1379 @exception OSError raised to indicate an issue with the device
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1380 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1381 command = """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1382 def has_ntp():
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1383 try:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1384 import adafruit_ntp
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1385 if hasattr(adafruit_ntp, 'NTP'):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1386 return True
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1387 except ImportError:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1388 pass
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1389
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1390 return False
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1391
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1392 print(has_ntp())
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1393 del has_ntp
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1394 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1395 out, err = self._interface.execute(command, mode=self._submitMode)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1396 if err:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1397 raise OSError(self._shortError(err))
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1398 return out.strip() == b"True"
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1399
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1400 def setNetworkTime(self, server="0.pool.ntp.org", tzOffset=0, timeout=10):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1401 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1402 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
1403 NTP server.
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1404
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1405 @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
1406 (defaults to "0.pool.ntp.org")
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1407 @type str (optional)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1408 @param tzOffset offset with respect to UTC (defaults to 0)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1409 @type int (optional)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1410 @param timeout maximum time to wait for a server response in seconds
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1411 (defaults to 10)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1412 @type int
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1413 @return tuple containing a flag indicating success and an error string
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1414 @rtype tuple of (bool, str)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1415 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1416 command = """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1417 def set_ntp_time(server, tz_offset, timeout):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1418 import rtc
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1419 import socketpool
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1420 import wifi
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1421
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1422 import adafruit_ntp
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1423
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1424
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1425 r = wifi.radio
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1426 if r.ipv4_address is None:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1427 return False
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1428
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1429 pool = socketpool.SocketPool(r)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1430 ntp = adafruit_ntp.NTP(
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1431 pool, server=server, tz_offset=tz_offset, socket_timeout=timeout
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1432 )
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1433 rtc.RTC().datetime = ntp.datetime
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1434 return True
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1435
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1436 try:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1437 print({{
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1438 'result': set_ntp_time({0}, {1}, {2}),
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1439 'error': '',
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1440 }})
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1441 except Exception as err:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1442 print({{
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1443 'result': False,
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1444 'error': str(err),
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1445 }})
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1446 del set_ntp_time
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1447 """.format(
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1448 repr(server), tzOffset, timeout
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1449 )
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1450 out, err = self._interface.execute(
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1451 command, mode=self._submitMode, timeout=(timeout + 2) * 1000
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1452 )
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1453 if err:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1454 return False, err
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1455 else:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1456 res = ast.literal_eval(out.decode("utf-8"))
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1457 return res["result"], res["error"]
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9866
diff changeset
1458
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1459
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
1460 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
1461 """
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1462 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
1463
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1464 @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
1465 @type MicroPythonWidget
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1466 @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
1467 @type str
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1468 @param vid vendor ID
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1469 @type int
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1470 @param pid product ID
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1471 @type int
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1472 @param boardName name of the board
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1473 @type str
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
1474 @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
1475 @type str
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1476 @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
1477 @rtype CircuitPythonDevice
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
1478 """
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1479 return CircuitPythonDevice(microPythonWidget, deviceType, boardName)

eric ide

mercurial