src/eric7/MicroPython/Devices/CircuitPythonDevices.py

Tue, 06 May 2025 11:07:12 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 06 May 2025 11:07:12 +0200
branch
eric7
changeset 11267
9fc085d7e4fd
parent 11263
28f0ead11a82
child 11270
0e220c26e60e
permissions
-rw-r--r--

Fixed an issue in the CircuitPython device class related to ethernet enabled devices.

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

eric ide

mercurial