src/eric7/MicroPython/Devices/RP2040Devices.py

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

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

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

8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
9653
e67609152c5e Updated copyright for 2023.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9496
diff changeset
3 # Copyright (c) 2021 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the device interface class for RP2040 based boards
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 (e.g. Raspberry Pi Pico).
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
11 import ast
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
12 import binascii
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
13 import json
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
14 import os
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
15
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
16 from PyQt6.QtCore import QUrl, pyqtSlot
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
17 from PyQt6.QtNetwork import QNetworkReply, QNetworkRequest
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
18 from PyQt6.QtWidgets import QDialog, QMenu
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
20 from eric7 import Globals, Preferences
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
21 from eric7.EricGui.EricOverrideCursor import EricOverrideCursor
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
22 from eric7.EricWidgets import EricMessageBox
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
23 from eric7.EricWidgets.EricApplication import ericApp
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
24
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
25 from ..EthernetDialogs import WiznetUtilities
9765
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
26 from ..MicroPythonWidget import HAS_QTCHART
9756
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
27 from . import FirmwareGithubUrls
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
28 from .DeviceBase import BaseDevice
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30
9756
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
31 class RP2040Device(BaseDevice):
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 Class implementing the device for RP2040 based boards.
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
35
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 def __init__(self, microPythonWidget, deviceType, parent=None):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
39
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @param microPythonWidget reference to the main MicroPython widget
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @type MicroPythonWidget
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @param deviceType device type assigned to this device interface
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @type str
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @param parent reference to the parent object
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @type QObject
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
47 super().__init__(microPythonWidget, deviceType, parent)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
48
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
49 self.__createRP2040Menu()
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
50
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
51 self.__statusTranslations = {
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
52 "picow": {
9789
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
53 -3: self.tr("authentication failed"),
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
54 -2: self.tr("no matching access point found"),
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
55 -1: self.tr("connection failed"),
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
56 0: self.tr("idle"),
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
57 1: self.tr("connecting"),
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
58 2: self.tr("connected, waiting for IP address"),
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
59 3: self.tr("connected"),
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
60 },
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
61 "picowireless": {
9835
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
62 0: self.tr("idle"),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
63 1: self.tr("no matching access point found"),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
64 2: self.tr("network scan completed"),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
65 3: self.tr("connected"),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
66 4: self.tr("connection failed"),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
67 5: self.tr("connection lost"),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
68 6: self.tr("disconnected"),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
69 7: self.tr("AP listening"),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
70 8: self.tr("AP connected"),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
71 9: self.tr("AP failed"),
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
72 },
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
73 "picowiz": {
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
74 0: self.tr("switched off"),
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
75 1: self.tr("switched on, inactive"),
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
76 2: self.tr("switched on, active"),
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
77 },
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
78 }
9843
72e8270a5940 Removed an obsolete TODO marker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9841
diff changeset
79
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
80 self.__securityTranslations = {
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
81 "picow": {
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
82 0: self.tr("open", "open WiFi network"),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
83 1: "WEP",
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
84 2: "WPA",
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
85 3: "WPA2",
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
86 4: "WPA/WPA2",
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
87 5: "WPA2 (CCMP)",
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
88 6: "WPA3",
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
89 7: "WPA2/WPA3",
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
90 },
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
91 "picowireless": {
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
92 2: "WPA",
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
93 4: "WPA2 (CCMP)",
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
94 5: "WEP",
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
95 7: self.tr("open", "open WiFi network"),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
96 8: self.tr("automatic"),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
97 },
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
98 }
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
99
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 def setButtons(self):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 Public method to enable the supported action buttons.
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8122
diff changeset
104 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
105
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 self.microPython.setActionButtons(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
107 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
108 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
109
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 def forceInterrupt(self):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 Public method to determine the need for an interrupt when opening the
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 serial connection.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
114
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 @return flag indicating an interrupt is needed
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 @rtype bool
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
119
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 def deviceName(self):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 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
123
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 @return name of the device
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 @rtype str
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 return self.tr("RP2040")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
128
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 def canStartRepl(self):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 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
132
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 @return tuple containing a flag indicating it is safe to start a REPL
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 and a reason why it cannot.
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 @rtype tuple of (bool, str)
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
138
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 def canStartPlotter(self):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 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
142
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 @return tuple containing a flag indicating it is safe to start a
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 Plotter and a reason why it cannot.
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 @rtype tuple of (bool, str)
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
148
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 def canRunScript(self):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 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
152
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 @return tuple containing a flag indicating it is safe to start a
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 Plotter and a reason why it cannot.
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 @rtype tuple of (bool, str)
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
158
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 def runScript(self, script):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 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
162
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 @param script script to be executed
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 @type str
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 pythonScript = script.split("\n")
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 self.sendCommands(pythonScript)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
168
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 def canStartFileManager(self):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 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
172
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 @return tuple containing a flag indicating it is safe to start a
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 File Manager and a reason why it cannot.
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 @rtype tuple of (bool, str)
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 return True, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
178
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
179 def __createRP2040Menu(self):
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
180 """
9908
761301a784f3 Corrected a typo.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9888
diff changeset
181 Private method to create the RP2040 submenu.
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
182 """
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
183 self.__rp2040Menu = QMenu(self.tr("RP2040 Functions"))
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
184
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
185 self.__showMpyAct = self.__rp2040Menu.addAction(
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
186 self.tr("Show MicroPython Versions"), self.__showFirmwareVersions
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
187 )
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
188 self.__rp2040Menu.addSeparator()
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
189 self.__bootloaderAct = self.__rp2040Menu.addAction(
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
190 self.tr("Activate Bootloader"), self.__activateBootloader
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
191 )
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
192 self.__flashMpyAct = self.__rp2040Menu.addAction(
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
193 self.tr("Flash MicroPython Firmware"), self.__flashPython
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
194 )
9835
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
195 self.__rp2040Menu.addSeparator()
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
196 self.__resetAct = self.__rp2040Menu.addAction(
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
197 self.tr("Reset Device"), self.__resetDevice
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
198 )
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
199
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 def addDeviceMenuEntries(self, menu):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 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
203
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 @param menu reference to the context menu
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 @type QMenu
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 connected = self.microPython.isConnected()
9749
5d409223cf3f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9748
diff changeset
208 linkConnected = self.microPython.isLinkConnected()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
209
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
210 self.__showMpyAct.setEnabled(connected)
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
211 self.__bootloaderAct.setEnabled(connected)
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
212 self.__flashMpyAct.setEnabled(not linkConnected)
9835
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
213 self.__resetAct.setEnabled(connected)
9752
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
214
2b9546c0cbd9 Moved the MicroPython board specific functions to a separate submenu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9751
diff changeset
215 menu.addMenu(self.__rp2040Menu)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
216
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 def hasFlashMenuEntry(self):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 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
220
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 @return flag indicating a specific flash menu entry
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 @rtype bool
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 return True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
225
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 @pyqtSlot()
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 def __flashPython(self):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 Private slot to flash a MicroPython firmware to the device.
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 """
9756
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
231 from ..UF2FlashDialog import UF2FlashDialog
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
232
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 dlg = UF2FlashDialog(boardType="rp2040")
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 dlg.exec()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
235
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
236 @pyqtSlot()
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 def __activateBootloader(self):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 """
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
239 Private slot to switch the board into 'bootloader' mode.
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 if self.microPython.isConnected():
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
242 self.executeCommands(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
243 [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
244 "import machine",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
245 "machine.bootloader()",
9835
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
246 ],
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
247 mode=self._submitMode,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
248 )
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 # simulate pressing the disconnect button
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 self.microPython.on_connectButton_clicked()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
251
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
252 @pyqtSlot()
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
253 def __showFirmwareVersions(self):
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
254 """
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
255 Private slot to show the firmware version of the connected device and the
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
256 available firmware version.
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
257 """
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
258 if self.microPython.isConnected():
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
259 if self._deviceData["mpy_name"] != "micropython":
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
260 EricMessageBox.critical(
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
261 None,
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
262 self.tr("Show MicroPython Versions"),
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
263 self.tr(
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
264 """The firmware of the connected device cannot be"""
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
265 """ determined or the board does not run MicroPython."""
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
266 """ Aborting..."""
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
267 ),
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
268 )
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
269 else:
9772
06ef28082c4d Changed the RP2040 related code of the MicroPython package to show the version info for a MicroPython variant (like Pimoroni Pico) if such is available (e.g. Pimoroni Pico 1.19.14 or newer).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
270 if self._deviceData["mpy_variant"] == "Pimoroni Pico":
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
271 # MicroPython with Pimoroni add-on libraries
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
272 url = QUrl(FirmwareGithubUrls["pimoroni_pico"])
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
273 else:
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
274 url = QUrl(FirmwareGithubUrls["micropython"])
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
275 ui = ericApp().getObject("UserInterface")
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
276 request = QNetworkRequest(url)
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
277 reply = ui.networkAccessManager().head(request)
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
278 reply.finished.connect(lambda: self.__firmwareVersionResponse(reply))
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
279
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
280 @pyqtSlot(QNetworkReply)
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
281 def __firmwareVersionResponse(self, reply):
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
282 """
9820
67597e003373 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9799
diff changeset
283 Private slot handling the response of the latest version request.
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
284
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
285 @param reply reference to the reply object
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
286 @type QNetworkReply
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
287 """
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
288 latestUrl = reply.url().toString()
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
289 tag = latestUrl.rsplit("/", 1)[-1]
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
290 while tag and not tag[0].isdecimal():
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
291 # get rid of leading non-decimal characters
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
292 tag = tag[1:]
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
293 latestVersion = Globals.versionToTuple(tag)
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
294
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
295 if self._deviceData["mpy_version"] == "unknown":
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
296 currentVersionStr = self.tr("unknown")
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
297 currentVersion = (0, 0, 0)
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
298 else:
9772
06ef28082c4d Changed the RP2040 related code of the MicroPython package to show the version info for a MicroPython variant (like Pimoroni Pico) if such is available (e.g. Pimoroni Pico 1.19.14 or newer).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
299 currentVersionStr = (
06ef28082c4d Changed the RP2040 related code of the MicroPython package to show the version info for a MicroPython variant (like Pimoroni Pico) if such is available (e.g. Pimoroni Pico 1.19.14 or newer).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
300 self._deviceData["mpy_variant_version"]
06ef28082c4d Changed the RP2040 related code of the MicroPython package to show the version info for a MicroPython variant (like Pimoroni Pico) if such is available (e.g. Pimoroni Pico 1.19.14 or newer).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
301 if bool(self._deviceData["mpy_variant_version"])
06ef28082c4d Changed the RP2040 related code of the MicroPython package to show the version info for a MicroPython variant (like Pimoroni Pico) if such is available (e.g. Pimoroni Pico 1.19.14 or newer).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
302 else self._deviceData["mpy_version"]
06ef28082c4d Changed the RP2040 related code of the MicroPython package to show the version info for a MicroPython variant (like Pimoroni Pico) if such is available (e.g. Pimoroni Pico 1.19.14 or newer).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
303 )
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
304 currentVersion = Globals.versionToTuple(currentVersionStr)
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
305
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
306 msg = self.tr(
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
307 "<h4>MicroPython Version Information</h4>"
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
308 "<table>"
9772
06ef28082c4d Changed the RP2040 related code of the MicroPython package to show the version info for a MicroPython variant (like Pimoroni Pico) if such is available (e.g. Pimoroni Pico 1.19.14 or newer).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
309 "<tr><td>Installed:</td><td>{0}</td></tr>"
06ef28082c4d Changed the RP2040 related code of the MicroPython package to show the version info for a MicroPython variant (like Pimoroni Pico) if such is available (e.g. Pimoroni Pico 1.19.14 or newer).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
310 "<tr><td>Available:</td><td>{1}</td></tr>"
06ef28082c4d Changed the RP2040 related code of the MicroPython package to show the version info for a MicroPython variant (like Pimoroni Pico) if such is available (e.g. Pimoroni Pico 1.19.14 or newer).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
311 "{2}"
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
312 "</table>"
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
313 ).format(
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
314 currentVersionStr,
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
315 tag,
9786
f94b530722af Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
316 self.tr("<tr><td>Variant:</td><td>{0}</td></tr>").format(
f94b530722af Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
317 self._deviceData["mpy_variant"]
f94b530722af Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
318 )
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
319 if self._deviceData["mpy_variant"]
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
320 else "",
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
321 )
9786
f94b530722af Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
322 if self._deviceData["mpy_variant"] in ["Pimoroni Pico"] and not bool(
f94b530722af Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
323 self._deviceData["mpy_variant_version"]
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
324 ):
9772
06ef28082c4d Changed the RP2040 related code of the MicroPython package to show the version info for a MicroPython variant (like Pimoroni Pico) if such is available (e.g. Pimoroni Pico 1.19.14 or newer).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
325 # cannot derive update info
06ef28082c4d Changed the RP2040 related code of the MicroPython package to show the version info for a MicroPython variant (like Pimoroni Pico) if such is available (e.g. Pimoroni Pico 1.19.14 or newer).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
326 msg += self.tr("<p>Update may be available.</p>")
06ef28082c4d Changed the RP2040 related code of the MicroPython package to show the version info for a MicroPython variant (like Pimoroni Pico) if such is available (e.g. Pimoroni Pico 1.19.14 or newer).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9765
diff changeset
327 elif currentVersion < latestVersion:
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
328 msg += self.tr("<p><b>Update available!</b></p>")
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
329
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
330 EricMessageBox.information(
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
331 None,
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
332 self.tr("MicroPython Version"),
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
333 msg,
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
334 )
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
335
9835
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
336 @pyqtSlot()
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
337 def __resetDevice(self):
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
338 """
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
339 Private slot to reset the connected device.
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
340 """
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
341 if self.microPython.isConnected():
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
342 self.executeCommands(
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
343 "import machine\nmachine.reset()\n", mode=self._submitMode
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
344 )
9835
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
345
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 def getDocumentationUrl(self):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 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
349
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 @return documentation URL of the device
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 @rtype str
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 return Preferences.getMicroPython("MicroPythonDocuUrl")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
354
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 def getDownloadMenuEntries(self):
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 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
358
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 @return list of tuples with menu text and URL to be opened for each
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 entry
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 @rtype list of tuple of (str, str)
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 """
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 return [
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
364 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
365 self.tr("MicroPython Firmware"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
366 Preferences.getMicroPython("MicroPythonFirmwareUrl"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
367 ),
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 ("<separator>", ""),
9748
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9747
diff changeset
369 (self.tr("Pimoroni Pico Firmware"), FirmwareGithubUrls["pimoroni_pico"]),
9747
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
370 ("<separator>", ""),
b7976868d5b0 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9738
diff changeset
371 (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
372 self.tr("CircuitPython Firmware"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
373 Preferences.getMicroPython("CircuitPythonFirmwareUrl"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
374 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
375 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
376 self.tr("CircuitPython Libraries"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
377 Preferences.getMicroPython("CircuitPythonLibrariesUrl"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
378 ),
8122
eb85ced7844c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 ]
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
380
9765
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
381 ##################################################################
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
382 ## time related methods below
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
383 ##################################################################
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
384
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
385 def _getSetTimeCode(self):
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
386 """
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
387 Protected method to get the device code to set the time.
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
388
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
389 Note: This method must be implemented in the various device specific
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
390 subclasses.
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
391
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
392 @return code to be executed on the connected device to set the time
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
393 @rtype str
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
394 """
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
395 # rtc_time[0] - year 4 digit
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
396 # rtc_time[1] - month 1..12
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
397 # rtc_time[2] - day 1..31
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
398 # rtc_time[3] - weekday 1..7 1=Monday
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
399 # rtc_time[4] - hour 0..23
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
400 # rtc_time[5] - minute 0..59
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
401 # rtc_time[6] - second 0..59
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
402 # rtc_time[7] - yearday 1..366
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
403 # rtc_time[8] - isdst 0, 1, or -1
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
404
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
405 # The machine.rtc.datetime() function takes the arguments in the order:
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
406 # (year, month, day, weekday, hour, minute, second, subseconds)
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
407 # __IGNORE_WARNING_M891__
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
408 # https://docs.micropython.org/en/latest/library/machine.RTC.html#machine-rtc
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
409 return """
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
410 def set_time(rtc_time):
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
411 import machine
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
412 rtc = machine.RTC()
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
413 rtc.datetime(rtc_time[:7] + (0,))
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
414 """
6378da868bb0 Reorganized the MicroPython code even more.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9763
diff changeset
415
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
416 ##################################################################
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
417 ## Methods below implement WiFi related methods
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
418 ##################################################################
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
419
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
420 def addDeviceWifiEntries(self, menu):
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
421 """
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
422 Public method to add device specific entries to the given menu.
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
423
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
424 @param menu reference to the context menu
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
425 @type QMenu
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
426 """
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
427 menu.addSeparator()
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
428 menu.addAction(self.tr("Set Country"), self.__setCountry).setEnabled(
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
429 self._deviceData["wifi_type"] == "picow"
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
430 )
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
431
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
432 def hasWifi(self):
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
433 """
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
434 Public method to check the availability of WiFi.
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
435
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
436 @return tuple containing a flag indicating the availability of WiFi
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
437 and the WiFi type (picow or picowireless)
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
438 @rtype tuple of (bool, str)
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
439 @exception OSError raised to indicate an issue with the device
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
440 """
9835
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
441 # picowireless:
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
442 # It seems to take up to 20 sec to detect, that no Pico Wireless Pack is
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
443 # attached. Therefore the command will timeout before.
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
444 command = """
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
445 def has_wifi():
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
446 try:
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
447 import network
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
448 if hasattr(network, 'WLAN'):
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
449 return True, 'picow'
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
450 except ImportError:
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
451 try:
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
452 import picowireless as pw
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
453 try:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
454 if pw.get_fw_version() != '':
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
455 return True, 'picowireless'
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
456 except RuntimeError:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
457 picowireless.init()
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
458 return True, 'picowireless'
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
459 except ImportError:
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
460 pass
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
461
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
462 return False, ''
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
463
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
464 print(has_wifi())
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
465 del has_wifi
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
466 """
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
467 out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
468 if err:
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
469 if not err.startswith(b"Timeout "):
9835
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
470 raise OSError(self._shortError(err))
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
471 else:
9880
f425c58cf8e9 Fixed a bug in the recently added µPy code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9878
diff changeset
472 # pimoroni firmware loaded but no pico wireless present
f425c58cf8e9 Fixed a bug in the recently added µPy code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9878
diff changeset
473 return False, ""
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
474 return ast.literal_eval(out.decode("utf-8"))
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
475
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
476 def getWifiData(self):
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
477 """
9789
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
478 Public method to get data related to the current WiFi status.
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
479
9798
4402d76c5fa9 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9797
diff changeset
480 @return tuple of three dictionaries containing the WiFi status data
4402d76c5fa9 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9797
diff changeset
481 for the WiFi client, access point and overall data
4402d76c5fa9 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9797
diff changeset
482 @rtype tuple of (dict, dict, dict)
9789
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
483 @exception OSError raised to indicate an issue with the device
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
484 """
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
485 if self._deviceData["wifi_type"] == "picow":
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
486 command = """
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
487 def wifi_status():
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
488 import ubinascii
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
489 import ujson
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
490 import network
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
491 import rp2
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
492
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
493 wifi = network.WLAN(network.STA_IF)
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
494 station = {
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
495 'active': wifi.active(),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
496 'connected': wifi.isconnected(),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
497 'status': wifi.status(),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
498 'ifconfig': wifi.ifconfig(),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
499 'mac': ubinascii.hexlify(wifi.config('mac'), ':').decode(),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
500 'channel': wifi.config('channel'),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
501 'txpower': wifi.config('txpower'),
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
502 'country': rp2.country(),
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
503 }
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
504 print(ujson.dumps(station))
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
505
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
506 wifi = network.WLAN(network.AP_IF)
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
507 ap = {
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
508 'active': wifi.active(),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
509 'connected': wifi.isconnected(),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
510 'status': wifi.status(),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
511 'ifconfig': wifi.ifconfig(),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
512 'mac': ubinascii.hexlify(wifi.config('mac'), ':').decode(),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
513 'channel': wifi.config('channel'),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
514 'txpower': wifi.config('txpower'),
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
515 'essid': wifi.config('essid'),
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
516 'country': rp2.country(),
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
517 }
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
518 print(ujson.dumps(ap))
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
519
9798
4402d76c5fa9 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9797
diff changeset
520 overall = {
4402d76c5fa9 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9797
diff changeset
521 'active': station['active'] or ap['active']
4402d76c5fa9 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9797
diff changeset
522 }
4402d76c5fa9 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9797
diff changeset
523 print(ujson.dumps(overall))
4402d76c5fa9 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9797
diff changeset
524
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
525 wifi_status()
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
526 del wifi_status
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
527 """
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
528 elif self._deviceData["wifi_type"] == "picowireless":
9835
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
529 command = """
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
530 def wifi_status():
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
531 import picowireless as pw
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
532 import ubinascii
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
533 import ujson
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
534
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
535 def ip_str(ip):
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
536 return '.'.join(str(i) for i in ip)
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
537
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
538 station = {
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
539 'active': pw.get_connection_status() not in (0, 7, 8, 9),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
540 'connected': pw.get_connection_status() == 3,
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
541 'status': pw.get_connection_status(),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
542 'ifconfig': (
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
543 ip_str(pw.get_ip_address()),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
544 ip_str(pw.get_subnet_mask()),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
545 ip_str(pw.get_gateway_ip()),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
546 '0.0.0.0'
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
547 ),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
548 'mac': ubinascii.hexlify(pw.get_mac_address(), ':').decode(),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
549 }
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
550 if station['connected']:
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
551 station.update({
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
552 'ap_ssid': pw.get_current_ssid(),
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
553 'ap_bssid': ubinascii.hexlify(pw.get_current_bssid(), ':'),
9835
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
554 'ap_rssi': pw.get_current_rssi(),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
555 'ap_security': pw.get_current_encryption_type(),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
556 })
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
557 print(ujson.dumps(station))
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
558
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
559 ap = {
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
560 'active': pw.get_connection_status() in (7, 8, 9),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
561 'connected': pw.get_connection_status() == 8,
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
562 'status': pw.get_connection_status(),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
563 'mac': ubinascii.hexlify(pw.get_mac_address(), ':').decode(),
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
564 }
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
565 if ap['active']:
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
566 ap['essid'] = pw.get_current_ssid()
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
567 ap['ifconfig'] = (
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
568 ip_str(pw.get_ip_address()),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
569 ip_str(pw.get_subnet_mask()),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
570 ip_str(pw.get_gateway_ip()),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
571 '0.0.0.0'
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
572 )
9835
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
573 print(ujson.dumps(ap))
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
574
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
575 overall = {
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
576 'active': pw.get_connection_status() != 0
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
577 }
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
578 print(ujson.dumps(overall))
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
579
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
580 wifi_status()
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
581 del wifi_status
b4b07de1b695 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
582 """
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
583 else:
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
584 return super().getWifiData()
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
585
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
586 out, err = self.executeCommands(command, mode=self._submitMode)
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
587 if err:
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
588 raise OSError(self._shortError(err))
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
589
9798
4402d76c5fa9 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9797
diff changeset
590 stationStr, apStr, overallStr = out.decode("utf-8").splitlines()
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
591 station = json.loads(stationStr)
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
592 ap = json.loads(apStr)
9798
4402d76c5fa9 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9797
diff changeset
593 overall = json.loads(overallStr)
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
594 if "status" in station:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
595 # translate the numerical status to a string
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
596 try:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
597 station["status"] = self.__statusTranslations[
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
598 self._deviceData["wifi_type"]
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
599 ][station["status"]]
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
600 except KeyError:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
601 station["status"] = str(station["status"])
10138
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10089
diff changeset
602 if "status" in ap:
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
603 # translate the numerical status to a string
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
604 try:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
605 ap["status"] = self.__statusTranslations[self._deviceData["wifi_type"]][
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
606 ap["status"]
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
607 ]
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
608 except KeyError:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
609 ap["status"] = str(ap["status"])
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
610 if "ap_security" in station:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
611 # translate the numerical AP security to a string
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
612 try:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
613 station["ap_security"] = self.__securityTranslations[
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
614 self._deviceData["wifi_type"]
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
615 ][station["ap_security"]]
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
616 except KeyError:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
617 station["ap_security"] = self.tr("unknown ({0})").format(
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
618 station["ap_security"]
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
619 )
9798
4402d76c5fa9 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9797
diff changeset
620 return station, ap, overall
9775
c6806d24468b Created new branch <mpy_network>.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9772
diff changeset
621
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
622 def connectWifi(self, ssid, password):
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
623 """
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
624 Public method to connect a device to a WiFi network.
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
625
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
626 @param ssid name (SSID) of the WiFi network
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
627 @type str
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
628 @param password password needed to connect
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
629 @type str
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
630 @return tuple containing the connection status and an error string
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
631 @rtype tuple of (bool, str)
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
632 """
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
633 if self._deviceData["wifi_type"] == "picow":
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
634 country = Preferences.getMicroPython("WifiCountry").upper()
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
635 command = """
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
636 def connect_wifi(ssid, password, country):
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
637 import network
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
638 import rp2
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
639 import ujson
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
640 from time import sleep
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
641
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
642 rp2.country(country)
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
643
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
644 wifi = network.WLAN(network.STA_IF)
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
645 wifi.active(False)
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
646 wifi.active(True)
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
647 wifi.connect(ssid, password)
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
648 max_wait = 140
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
649 while max_wait:
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
650 if wifi.status() < 0 or wifi.status() >= 3:
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
651 break
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
652 max_wait -= 1
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
653 sleep(0.1)
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
654 status = wifi.status()
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
655 print(ujson.dumps({{'connected': wifi.isconnected(), 'status': status}}))
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
656
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
657 connect_wifi({0}, {1}, {2})
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
658 del connect_wifi
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
659 """.format(
9789
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
660 repr(ssid),
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
661 repr(password if password else ""),
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
662 repr(country if country else "XX"),
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
663 )
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
664 elif self._deviceData["wifi_type"] == "picowireless":
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
665 command = """
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
666 def connect_wifi(ssid, password):
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
667 import picowireless as pw
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
668 import ujson
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
669 from time import sleep
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
670
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
671 pw.init()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
672 if bool(password):
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
673 pw.wifi_set_passphrase(ssid, password)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
674 else:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
675 pw.wifi_set_network(ssid)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
676
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
677 max_wait = 140
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
678 while max_wait:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
679 if pw.get_connection_status() == 3:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
680 break
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
681 max_wait -= 1
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
682 sleep(0.1)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
683 status = pw.get_connection_status()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
684 if status == 3:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
685 pw.set_led(0, 64, 0)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
686 else:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
687 pw.set_led(64, 0, 0)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
688 print(ujson.dumps({{'connected': status == 3, 'status': status}}))
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
689
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
690 connect_wifi({0}, {1})
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
691 del connect_wifi
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
692 """.format(
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
693 repr(ssid),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
694 repr(password if password else ""),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
695 )
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
696 else:
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
697 return super().connectWifi(ssid, password)
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
698
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
699 with EricOverrideCursor():
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
700 out, err = self.executeCommands(
9827
21803aa6c3e2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9820
diff changeset
701 command, mode=self._submitMode, timeout=15000
9799
a79430a8811d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9798
diff changeset
702 )
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
703 if err:
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
704 return False, err
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
705
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
706 result = json.loads(out.decode("utf-8").strip())
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
707 if result["connected"]:
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
708 error = ""
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
709 else:
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
710 try:
9789
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
711 error = self.__statusTranslations[self._deviceData["wifi_type"]][
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
712 result["status"]
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
713 ]
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
714 except KeyError:
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
715 error = str(result["status"])
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
716
10138
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10089
diff changeset
717 self._networkConnected = result["connected"]
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10089
diff changeset
718
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
719 return result["connected"], error
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
720
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
721 def disconnectWifi(self):
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
722 """
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
723 Public method to disconnect a device from the WiFi network.
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
724
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
725 @return tuple containing a flag indicating success and an error string
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
726 @rtype tuple of (bool, str)
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
727 """
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
728 if self._deviceData["wifi_type"] == "picow":
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
729 command = """
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
730 def disconnect_wifi():
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
731 import network
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
732 from time import sleep
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
733
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
734 wifi = network.WLAN(network.STA_IF)
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
735 wifi.disconnect()
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
736 wifi.active(False)
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
737 sleep(0.1)
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
738 print(not wifi.isconnected())
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
739
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
740 disconnect_wifi()
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
741 del disconnect_wifi
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
742 """
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
743 elif self._deviceData["wifi_type"] == "picowireless":
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
744 command = """
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
745 def disconnect_wifi():
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
746 import picowireless as pw
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
747 from time import sleep
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
748
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
749 pw.disconnect()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
750 sleep(0.1)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
751 print(pw.get_connection_status() != 3)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
752 pw.set_led(0, 0, 0)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
753
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
754 disconnect_wifi()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
755 del disconnect_wifi
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
756 """
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
757 else:
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
758 return super().disconnectWifi()
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
759
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
760 out, err = self.executeCommands(command, mode=self._submitMode)
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
761 if err:
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
762 return False, err
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
763
10138
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10089
diff changeset
764 self._networkConnected = False
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10089
diff changeset
765
9776
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
766 return out.decode("utf-8").strip() == "True", ""
210bf87ae5c7 Continued implementing WiFi functionality for RP2040 based devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9775
diff changeset
767
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
768 def writeCredentials(self, ssid, password):
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
769 """
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
770 Public method to write the given credentials to the connected device and modify
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
771 the start script to connect automatically.
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
772
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
773 @param ssid SSID of the network to connect to
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
774 @type str
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
775 @param password password needed to authenticate
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
776 @type str
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
777 @return tuple containing a flag indicating success and an error message
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
778 @rtype tuple of (bool, str)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
779 """
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
780 command = """
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
781 def modify_boot():
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
782 add = True
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
783 try:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
784 with open('/boot.py', 'r') as f:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
785 for ln in f.readlines():
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
786 if 'wifi_connect' in ln:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
787 add = False
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
788 break
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
789 except:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
790 pass
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
791 if add:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
792 with open('/boot.py', 'a') as f:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
793 f.write('\\nimport wifi_connect\\n')
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
794 print(True)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
795
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
796 modify_boot()
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
797 del modify_boot
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
798 """
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
799
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
800 if self._deviceData["wifi_type"] == "picow":
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
801 country = Preferences.getMicroPython("WifiCountry").upper()
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
802 secrets = "WIFI_SSID = {0}\nWIFI_KEY = {1}\nWIFI_COUNTRY={2}".format(
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
803 repr(ssid),
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
804 repr(password) if password else '""',
9789
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
805 repr(country) if country else '""',
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
806 )
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
807 wifiConnectFile = "picowWiFiConnect.py"
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
808 else:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
809 secrets = "WIFI_SSID = {0}\nWIFI_KEY = {1}\n".format(
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
810 repr(ssid),
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
811 repr(password) if password else '""',
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
812 )
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
813 if self._deviceData["wifi_type"] == "picowireless":
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
814 wifiConnectFile = "pimoroniWiFiConnect.py"
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
815 else:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
816 wifiConnectFile = "mpyWiFiConnect.py"
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
817 try:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
818 # write secrets file
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
819 self.putData("/secrets.py", secrets.encode("utf-8"))
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
820 # copy auto-connect file
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
821 self.put(
9789
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
822 os.path.join(os.path.dirname(__file__), "MCUScripts", wifiConnectFile),
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
823 "/wifi_connect.py",
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
824 )
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
825 except OSError as err:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
826 return False, str(err)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
827
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
828 # modify boot.py
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
829 out, err = self.executeCommands(command, mode=self._submitMode)
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
830 if err:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
831 return False, err
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
832
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
833 return out.decode("utf-8").strip() == "True", ""
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
834
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
835 def removeCredentials(self):
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
836 """
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
837 Public method to remove the saved credentials from the connected device.
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
838
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
839 @return tuple containing a flag indicating success and an error message
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
840 @rtype tuple of (bool, str)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
841 """
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
842 try:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
843 self.rm("/secrets.py")
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
844 except OSError as err:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
845 return False, str(err)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
846
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
847 return True, ""
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
848
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
849 def checkInternet(self):
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
850 """
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
851 Public method to check, if the internet can be reached.
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
852
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
853 @return tuple containing a flag indicating reachability and an error string
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
854 @rtype tuple of (bool, str)
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
855 """
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
856 if self._deviceData["wifi_type"] == "picow":
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
857 command = """
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
858 def check_internet():
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
859 import network
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
860 import socket
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
861
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
862 wifi = network.WLAN(network.STA_IF)
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
863 if wifi.isconnected():
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
864 s = socket.socket()
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
865 try:
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
866 s.connect(socket.getaddrinfo('quad9.net', 80)[0][-1])
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
867 s.close()
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
868 print(True)
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
869 except:
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
870 print(False)
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
871 else:
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
872 print(False)
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
873
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
874 check_internet()
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
875 del check_internet
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
876 """
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
877 elif self._deviceData["wifi_type"] == "picowireless":
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
878 command = """
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
879 def check_internet():
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
880 import picowireless as pw
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
881
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
882 if pw.get_connection_status() == 3:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
883 res = pw.ping((9, 9, 9, 9), 300)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
884 print(res >= 0)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
885 else:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
886 print(False)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
887
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
888 check_internet()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
889 del check_internet
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
890 """
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
891 else:
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
892 return super().checkInternet()
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
893
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
894 out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
895 if err:
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
896 return False, err
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
897
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
898 return out.decode("utf-8").strip() == "True", ""
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
899
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
900 def scanNetworks(self):
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
901 """
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
902 Public method to scan for available WiFi networks.
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
903
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
904 @return tuple containing the list of available networks as a tuple of 'Name',
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
905 'MAC-Address', 'channel', 'RSSI' and 'security' and an error string
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
906 @rtype tuple of (list of tuple of (str, str, int, int, str), str)
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
907 """
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
908 if self._deviceData["wifi_type"] == "picow":
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
909 country = Preferences.getMicroPython("WifiCountry").upper()
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
910 command = """
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
911 def scan_networks():
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
912 import network
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
913 import rp2
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
914
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
915 rp2.country({0})
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
916
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
917 wifi = network.WLAN(network.STA_IF)
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
918 active = wifi.active()
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
919 if not active:
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
920 wifi.active(True)
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
921 network_list = wifi.scan()
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
922 if not active:
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
923 wifi.active(False)
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
924 print(network_list)
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
925
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
926 scan_networks()
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
927 del scan_networks
9789
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
928 """.format(
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
929 repr(country if country else "XX")
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
930 )
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
931
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
932 elif self._deviceData["wifi_type"] == "picowireless":
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
933 command = """
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
934 def scan_networks():
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
935 import picowireless as pw
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
936
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
937 network_list = []
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
938 pw.init()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
939 pw.start_scan_networks()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
940 networks = pw.get_scan_networks()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
941 for n in range(networks):
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
942 network_list.append((
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
943 pw.get_ssid_networks(n),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
944 pw.get_bssid_networks(n),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
945 pw.get_channel_networks(n),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
946 pw.get_rssi_networks(n),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
947 pw.get_enc_type_networks(n),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
948 ))
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
949 print(network_list)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
950
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
951 scan_networks()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
952 del scan_networks
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
953 """
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
954 else:
9782
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
955 return super().scanNetworks()
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
956
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
957 out, err = self.executeCommands(command, mode=self._submitMode, timeout=15000)
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
958 if err:
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
959 return [], err
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
960
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
961 networksList = ast.literal_eval(out.decode("utf-8"))
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
962 networks = []
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
963 for network in networksList:
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
964 if network[0]:
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
965 ssid = (
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
966 network[0].decode("utf-8")
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
967 if isinstance(network[0], bytes)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
968 else network[0]
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
969 )
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
970 mac = (
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
971 binascii.hexlify(network[1], ":").decode("utf-8")
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
972 if network[1] is not None
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
973 else ""
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
974 )
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
975 channel = network[2]
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
976 rssi = network[3]
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
977 try:
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
978 security = self.__securityTranslations[
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
979 self._deviceData["wifi_type"]
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
980 ][network[4]]
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
981 except KeyError:
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
982 security = self.tr("unknown ({0})").format(network[4])
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
983 networks.append((ssid, mac, channel, rssi, security))
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
984
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
985 return networks, ""
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
986
9782
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
987 def deactivateInterface(self, interface):
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
988 """
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
989 Public method to deactivate a given WiFi interface of the connected device.
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
990
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
991 @param interface designation of the interface to be deactivated (one of 'AP'
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
992 or 'STA')
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
993 @type str
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
994 @return tuple containg a flag indicating success and an error message
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
995 @rtype tuple of (bool, str)
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
996 @exception ValueError raised to indicate a wrong value for the interface type
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
997 """
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
998 if interface not in ("STA", "AP"):
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
999 raise ValueError(
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1000 "interface must be 'AP' or 'STA', got '{0}'".format(interface)
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1001 )
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1002
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1003 if self._deviceData["wifi_type"] == "picow":
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1004 command = """
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1005 def deactivate():
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1006 import network
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1007 from time import sleep
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1008
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1009 wifi = network.WLAN(network.{0}_IF)
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1010 wifi.active(False)
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1011 sleep(0.1)
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1012 print(not wifi.active())
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1013
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1014 deactivate()
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1015 del deactivate
9789
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
1016 """.format(
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
1017 interface
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
1018 )
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
1019 elif self._deviceData["wifi_type"] == "picowireless":
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1020 command = """
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1021 def deactivate():
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1022 import picowireless as pw
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1023
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1024 pw.init()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1025 print(True)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1026
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1027 deactivate()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1028 del deactivate
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1029 """
9782
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1030 else:
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1031 return super().deactivateInterface(interface)
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1032
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
1033 out, err = self.executeCommands(command, mode=self._submitMode)
9782
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1034 if err:
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1035 return False, err
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1036 else:
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1037 return out.decode("utf-8").strip() == "True", ""
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1038
9797
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1039 def startAccessPoint(self, ssid, security=None, password=None, ifconfig=None):
9782
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1040 """
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1041 Public method to start the access point interface.
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1042
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1043 @param ssid SSID of the access point
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1044 @type str
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1045 @param security security method (defaults to None)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1046 @type int (optional)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1047 @param password password (defaults to None)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1048 @type str (optional)
9797
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1049 @param ifconfig IPv4 configuration for the access point if not default
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1050 (IPv4 address, netmask, gateway address, DNS server address)
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1051 @type tuple of (str, str, str, str)
9782
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1052 @return tuple containing a flag indicating success and an error message
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1053 @rtype tuple of (bool, str)
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1054 """
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1055 if security is None or password is None:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1056 security = 0
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1057 password = ""
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1058
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1059 if self._deviceData["wifi_type"] == "picow":
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1060 country = Preferences.getMicroPython("WifiCountry").upper()
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1061 if security:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1062 security = 4 # Pico W supports just WPA/WPA2
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1063 command = """
9797
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1064 def start_ap(ssid, security, password, ifconfig, country):
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1065 import network
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1066 import rp2
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1067 from time import sleep
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1068
9797
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1069 rp2.country(country)
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1070
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1071 ap = network.WLAN(network.AP_IF)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1072 ap.active(True)
9797
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1073 if ifconfig:
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1074 ap.ifconfig(ifconfig)
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1075 ap.config(ssid=ssid, security=security, password=password)
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1076 sleep(0.1)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1077 print(ap.isconnected())
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1078
9797
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1079 start_ap({0}, {1}, {2}, {3}, {4})
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1080 del start_ap
9789
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
1081 """.format(
9797
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1082 repr(ssid),
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1083 security,
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1084 repr(password),
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1085 ifconfig,
3be7b2326e2c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9793
diff changeset
1086 repr(country if country else "XX"),
9789
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
1087 )
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
1088 elif self._deviceData["wifi_type"] == "picowireless":
9841
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9838
diff changeset
1089 if ifconfig:
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9838
diff changeset
1090 return (
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9838
diff changeset
1091 False,
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9838
diff changeset
1092 self.tr(
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9838
diff changeset
1093 "Pico Wireless does not support setting the IPv4 parameters of"
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9838
diff changeset
1094 " the WiFi access point."
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9838
diff changeset
1095 ),
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9838
diff changeset
1096 )
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9838
diff changeset
1097
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1098 # AP is fixed at channel 6
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1099 command = """
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1100 def start_ap(ssid, password):
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1101 import picowireless as pw
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1102
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1103 pw.init()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1104 if bool(password):
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1105 res = pw.wifi_set_ap_passphrase(ssid, password, 6)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1106 else:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1107 res = pw.wifi_set_ap_network(ssid, 6)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1108 status = pw.get_connection_status()
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1109 if status in (7, 8):
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1110 pw.set_led(0, 64, 0)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1111 else:
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1112 pw.set_led(64, 0, 0)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1113 print(res >= 0)
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1114
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1115 start_ap({0}, {1})
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1116 del start_ap
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1117 """.format(
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1118 repr(ssid),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1119 repr(password if password else ""),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1120 )
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1121 else:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1122 return super().startAccessPoint(ssid, security=security, password=password)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1123
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
1124 out, err = self.executeCommands(command, mode=self._submitMode, timeout=15000)
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1125 if err:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1126 return False, err
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1127 else:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1128 return out.decode("utf-8").strip() == "True", ""
9782
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1129
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1130 def stopAccessPoint(self):
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1131 """
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1132 Public method to stop the access point interface.
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1133
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1134 @return tuple containg a flag indicating success and an error message
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1135 @rtype tuple of (bool, str)
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1136 """
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
1137 if self._deviceData["wifi_type"] in ("picow", "picowireless"):
9782
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1138 return self.deactivateInterface("AP")
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1139 else:
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1140 return super().stopAccessPoint()
67414f28db68 Continued implementing WiFi functionality for RP2040 based devices (interface deactivation, AP stop, MicroPython config page).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9781
diff changeset
1141
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1142 def getConnectedClients(self):
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1143 """
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1144 Public method to get a list of connected clients.
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1145
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1146 @return a tuple containing a list of tuples containing the client MAC-Address
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1147 and the RSSI (if supported and available) and an error message
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1148 @rtype tuple of ([(bytes, int)], str)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1149 """
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1150 if self._deviceData["wifi_type"] == "picow":
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1151 command = """
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1152 def get_stations():
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1153 import network
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1154
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1155 ap = network.WLAN(network.AP_IF)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1156 stations = ap.status('stations')
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1157 print(stations)
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1158
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1159 get_stations()
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1160 del get_stations
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1161 """
9838
d6b87ef03c13 MicroPython, RP2040
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9836
diff changeset
1162 elif self._deviceData["wifi_type"] == "picowireless":
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1163 return (
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1164 [],
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1165 self.tr(
9841
3c6118eee33e Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9838
diff changeset
1166 "Pico Wireless does not support reporting of connected clients."
9836
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1167 ),
902ec9a04ebe MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9835
diff changeset
1168 )
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1169 else:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1170 return super().checkInternet()
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1171
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
1172 out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1173 if err:
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1174 return [], err
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1175
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1176 clientsList = ast.literal_eval(out.decode("utf-8"))
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1177 return clientsList, ""
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1178
10022
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1179 def enableWebrepl(self, password):
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1180 """
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1181 Public method to write the given WebREPL password to the connected device and
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1182 modify the start script to start the WebREPL server.
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1183
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1184 @param password password needed to authenticate
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1185 @type str
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1186 @return tuple containing a flag indicating success and an error message
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1187 @rtype tuple of (bool, str)
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1188 """
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1189 command = """
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1190 def modify_boot():
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1191 import os
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1192
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1193 try:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1194 with open('/boot.py', 'r') as old_f, open('/boot.py.tmp', 'w') as new_f:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1195 found = False
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1196 for l in old_f.read().splitlines():
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1197 if 'webrepl' in l:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1198 found = True
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1199 if l.startswith('#'):
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1200 l = l[1:]
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1201 new_f.write(l + '\\n')
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1202 if not found:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1203 new_f.write('\\nimport webrepl\\nwebrepl.start()\\n')
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1204
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1205 os.remove('/boot.py')
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1206 os.rename('/boot.py.tmp', '/boot.py')
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1207 except:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1208 pass
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1209
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1210 print(True)
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1211
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1212 modify_boot()
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1213 del modify_boot
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1214 """
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1215
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1216 if self._deviceData["wifi_type"] == "picow":
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1217 config = "PASS = {0}\n".format(repr(password))
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1218 else:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1219 return False, self.tr("WebREPL is not supported on this device.")
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1220
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1221 try:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1222 # write config file
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1223 self.putData("/webrepl_cfg.py", config.encode("utf-8"))
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1224 except OSError as err:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1225 return False, str(err)
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1226
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1227 # modify boot.py
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1228 out, err = self.executeCommands(command, mode=self._submitMode)
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1229 if err:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1230 return False, err
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1231
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1232 return out.decode("utf-8").strip() == "True", ""
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1233
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1234 def disableWebrepl(self):
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1235 """
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1236 Public method to write the given WebREPL password to the connected device and
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1237 modify the start script to start the WebREPL server.
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1238
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1239 @return tuple containing a flag indicating success and an error message
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1240 @rtype tuple of (bool, str)
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1241 """
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1242 command = """
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1243 def modify_boot():
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1244 import os
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1245
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1246 try:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1247 with open('/boot.py', 'r') as old_f, open('/boot.py.tmp', 'w') as new_f:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1248 for l in old_f.read().splitlines():
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1249 if 'webrepl' in l:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1250 if not l.startswith('#'):
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1251 l = '#' + l
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1252 new_f.write(l + '\\n')
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1253
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1254 os.remove('/boot.py')
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1255 os.rename('/boot.py.tmp', '/boot.py')
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1256 except:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1257 pass
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1258
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1259 print(True)
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1260
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1261 modify_boot()
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1262 del modify_boot
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1263 """
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1264
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1265 # modify boot.py
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1266 out, err = self.executeCommands(command, mode=self._submitMode)
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1267 if err:
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1268 return False, err
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1269
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1270 return out.decode("utf-8").strip() == "True", ""
a95800b414b7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9989
diff changeset
1271
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1272 ##################################################################
10089
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1273 ## Methods below implement Bluetooth related methods
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1274 ##################################################################
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1275
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1276 def hasBluetooth(self):
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1277 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1278 Public method to check the availability of Bluetooth.
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1279
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1280 @return flag indicating the availability of Bluetooth
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1281 @rtype bool
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1282 @exception OSError raised to indicate an issue with the device
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1283 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1284 command = """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1285 def has_bt():
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1286 try:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1287 import bluetooth
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1288 if hasattr(bluetooth, 'BLE'):
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1289 return True
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1290 except ImportError:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1291 pass
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1292
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1293 return False
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1294
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1295 print(has_bt())
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1296 del has_bt
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1297 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1298 out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1299 if err:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1300 raise OSError(self._shortError(err))
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1301 return out.strip() == b"True"
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1302
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1303 def getBluetoothStatus(self):
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1304 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1305 Public method to get Bluetooth status data of the connected board.
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1306
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1307 @return list of tuples containing the translated status data label and
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1308 the associated value
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1309 @rtype list of tuples of (str, str)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1310 @exception OSError raised to indicate an issue with the device
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1311 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1312 command = """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1313 def ble_status():
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1314 import bluetooth
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1315 import ubinascii
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1316 import ujson
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1317
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1318 ble = bluetooth.BLE()
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1319
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1320 ble_active = ble.active()
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1321 if not ble_active:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1322 ble.active(True)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1323
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1324 res = {
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1325 'active': ble_active,
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1326 'mac': ubinascii.hexlify(ble.config('mac')[1], ':').decode(),
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1327 'addr_type': ble.config('mac')[0],
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1328 'name': ble.config('gap_name'),
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1329 'mtu': ble.config('mtu'),
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1330 }
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1331
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1332 if not ble_active:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1333 ble.active(False)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1334
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1335 print(ujson.dumps(res))
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1336
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1337 ble_status()
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1338 del ble_status
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1339 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1340 out, err = self.executeCommands(command, mode=self._submitMode)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1341 if err:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1342 raise OSError(self._shortError(err))
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1343
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1344 status = []
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1345 bleStatus = json.loads(out.decode("utf-8"))
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1346 status.append((self.tr("Active"), self.bool2str(bleStatus["active"])))
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1347 status.append((self.tr("Name"), bleStatus["name"]))
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1348 status.append((self.tr("MAC-Address"), bleStatus["mac"]))
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1349 status.append(
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1350 (
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1351 self.tr("Address Type"),
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1352 self.tr("Public") if bleStatus == 0 else self.tr("Random"),
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1353 )
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1354 )
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1355 status.append((self.tr("MTU"), self.tr("{0} Bytes").format(bleStatus["mtu"])))
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1356
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1357 return status
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1358
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1359 def activateBluetoothInterface(self):
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1360 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1361 Public method to activate the Bluetooth interface.
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1362
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1363 @return flag indicating the new state of the Bluetooth interface
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1364 @rtype bool
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1365 @exception OSError raised to indicate an issue with the device
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1366 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1367 command = """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1368 def activate_ble():
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1369 import bluetooth
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1370
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1371 ble = bluetooth.BLE()
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1372 if not ble.active():
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1373 ble.active(True)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1374 print(ble.active())
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1375
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1376 activate_ble()
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1377 del activate_ble
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1378 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1379 out, err = self.executeCommands(command, mode=self._submitMode)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1380 if err:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1381 raise OSError(self._shortError(err))
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1382
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1383 return out.strip() == b"True"
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1384
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1385 def deactivateBluetoothInterface(self):
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1386 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1387 Public method to deactivate the Bluetooth interface.
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1388
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1389 @return flag indicating the new state of the Bluetooth interface
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1390 @rtype bool
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1391 @exception OSError raised to indicate an issue with the device
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1392 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1393 command = """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1394 def deactivate_ble():
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1395 import bluetooth
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1396
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1397 ble = bluetooth.BLE()
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1398 if ble.active():
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1399 ble.active(False)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1400 print(ble.active())
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1401
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1402 deactivate_ble()
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1403 del deactivate_ble
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1404 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1405 out, err = self.executeCommands(command, mode=self._submitMode)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1406 if err:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1407 raise OSError(self._shortError(err))
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1408
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1409 return out.strip() == b"True"
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1410
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1411 def getDeviceScan(self, timeout=10):
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1412 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1413 Public method to perform a Bluetooth device scan.
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1414
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1415 @param timeout duration of the device scan in seconds (defaults
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1416 to 10)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1417 @type int (optional)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1418 @return tuple containing a dictionary with the scan results and
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1419 an error string
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1420 @rtype tuple of (dict, str)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1421 """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1422 from ..BluetoothDialogs.BluetoothAdvertisement import BluetoothAdvertisement
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1423
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1424 command = """
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1425 _scan_done = False
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1426
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1427 def ble_scan():
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1428 import bluetooth
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1429 import time
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1430 import ubinascii
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1431
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1432 IRQ_SCAN_RESULT = 5
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1433 IRQ_SCAN_DONE = 6
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1434
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1435 def _bleIrq(event, data):
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1436 global _scan_done
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1437 if event == IRQ_SCAN_RESULT:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1438 addr_type, addr, adv_type, rssi, adv_data = data
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1439 if addr:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1440 print({{
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1441 'address': ubinascii.hexlify(addr,':').decode('utf-8'),
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1442 'rssi': rssi,
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1443 'adv_type': adv_type,
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1444 'advertisement': bytes(adv_data),
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1445 }})
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1446 elif event == IRQ_SCAN_DONE:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1447 _scan_done = True
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1448
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1449 ble = bluetooth.BLE()
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1450
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1451 ble_active = ble.active()
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1452 if not ble_active:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1453 ble.active(True)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1454
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1455 ble.irq(_bleIrq)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1456 ble.gap_scan({0} * 1000, 1000000, 50000, True)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1457 while not _scan_done:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1458 time.sleep(0.2)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1459
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1460 if not ble_active:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1461 ble.active(False)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1462
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1463 ble_scan()
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1464 del ble_scan, _scan_done
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1465 """.format(
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1466 timeout
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1467 )
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1468 out, err = self.executeCommands(
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1469 command, mode=self._submitMode, timeout=(timeout + 5) * 1000
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1470 )
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1471 if err:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1472 return {}, err
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1473
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1474 scanResults = {}
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1475 for line in out.decode("utf-8").splitlines():
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1476 res = ast.literal_eval(line)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1477 address = res["address"]
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1478 if address not in scanResults:
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1479 scanResults[address] = BluetoothAdvertisement(address)
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1480 scanResults[address].update(
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1481 res["adv_type"], res["rssi"], res["advertisement"]
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1482 )
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1483
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1484 return scanResults, ""
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1485
5fe9bfafbc7c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
1486 ##################################################################
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1487 ## Methods below implement Ethernet related methods
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1488 ##################################################################
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1489
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1490 def hasEthernet(self):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1491 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1492 Public method to check the availability of Ethernet.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1493
9880
f425c58cf8e9 Fixed a bug in the recently added µPy code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9878
diff changeset
1494 @return tuple containing a flag indicating the availability of Ethernet
f425c58cf8e9 Fixed a bug in the recently added µPy code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9878
diff changeset
1495 and the Ethernet type (picowiz)
f425c58cf8e9 Fixed a bug in the recently added µPy code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9878
diff changeset
1496 @rtype tuple of (bool, str)
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1497 @exception OSError raised to indicate an issue with the device
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1498 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1499 command = """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1500 def has_eth():
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1501 try:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1502 import network
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1503 if hasattr(network, 'WIZNET5K'):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1504 return True, 'picowiz'
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1505 except ImportError:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1506 pass
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1507
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1508 return False, ''
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1509
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1510 print(has_eth())
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1511 del has_eth
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1512 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1513
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
1514 out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1515 if err:
9880
f425c58cf8e9 Fixed a bug in the recently added µPy code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9878
diff changeset
1516 raise OSError(self._shortError(err))
f425c58cf8e9 Fixed a bug in the recently added µPy code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9878
diff changeset
1517
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1518 return ast.literal_eval(out.decode("utf-8"))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1519
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1520 def getEthernetStatus(self):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1521 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1522 Public method to get Ethernet status data of the connected board.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1523
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1524 @return list of tuples containing the translated status data label and
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1525 the associated value
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1526 @rtype list of tuples of (str, str)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1527 @exception OSError raised to indicate an issue with the device
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1528 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1529 command = """{0}
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1530 def ethernet_status():
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1531 import network
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1532 import ubinascii
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1533 import ujson
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1534
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1535 w5x00_init()
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1536
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1537 res = {{
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1538 'active': nic.active(),
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1539 'connected': nic.isconnected(),
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1540 'status': nic.status(),
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1541 'ifconfig': nic.ifconfig(),
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1542 'mac': ubinascii.hexlify(nic.config('mac'), ':').decode(),
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1543 'hostname': network.hostname(),
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1544 }}
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1545 print(ujson.dumps(res))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1546
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1547 ethernet_status()
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1548 del ethernet_status, w5x00_init
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1549 """.format(
9888
f76eeb80907b Adapted RP2040Device to the renamed method of WiznetUtilities.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9880
diff changeset
1550 WiznetUtilities.mpyWiznetInit()
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1551 )
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1552
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
1553 out, err = self.executeCommands(command, mode=self._submitMode)
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1554 if err:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1555 raise OSError(self._shortError(err))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1556
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1557 status = []
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1558 ethStatus = json.loads(out.decode("utf-8"))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1559 status.append((self.tr("Active"), self.bool2str(ethStatus["active"])))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1560 status.append((self.tr("Connected"), self.bool2str(ethStatus["connected"])))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1561 status.append(
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1562 (
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1563 self.tr("Status"),
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1564 self.__statusTranslations["picowiz"][ethStatus["status"]],
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1565 )
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1566 )
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1567 status.append((self.tr("Hostname"), ethStatus["hostname"]))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1568 status.append((self.tr("IPv4 Address"), ethStatus["ifconfig"][0]))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1569 status.append((self.tr("Netmask"), ethStatus["ifconfig"][1]))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1570 status.append((self.tr("Gateway"), ethStatus["ifconfig"][2]))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1571 status.append((self.tr("DNS"), ethStatus["ifconfig"][3]))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1572 status.append((self.tr("MAC-Address"), ethStatus["mac"]))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1573
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1574 return status
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1575
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1576 def connectToLan(self, config):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1577 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1578 Public method to connect the connected device to the LAN.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1579
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1580 @param config configuration for the connection (either the string 'dhcp'
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1581 for a dynamic address or a tuple of four strings with the IPv4 parameters.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1582 @type str or tuple of (str, str, str, str)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1583 @return tuple containing a flag indicating success and an error message
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1584 @rtype tuple of (bool, str)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1585 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1586 command = """{0}
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1587 def connect_lan(config):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1588 import time
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1589
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1590 w5x00_init()
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1591
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1592 nic.active(False)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1593 nic.active(True)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1594 nic.ifconfig(config)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1595 max_wait = 140
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1596 while max_wait:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1597 if nic.isconnected():
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1598 break
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1599 max_wait -= 1
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1600 time.sleep(0.1)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1601 print(nic.isconnected())
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1602
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1603 connect_lan({1})
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1604 del connect_lan, w5x00_init
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1605 """.format(
9888
f76eeb80907b Adapted RP2040Device to the renamed method of WiznetUtilities.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9880
diff changeset
1606 WiznetUtilities.mpyWiznetInit(), "'dhcp'" if config == "dhcp" else config
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1607 )
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1608
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1609 with EricOverrideCursor():
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
1610 out, err = self.executeCommands(
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1611 command, mode=self._submitMode, timeout=15000
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1612 )
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1613 if err:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1614 return False, err
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1615
10138
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10089
diff changeset
1616 self._networkConnected = True
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10089
diff changeset
1617
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1618 return out.strip() == b"True", ""
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1619
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1620 def disconnectFromLan(self):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1621 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1622 Public method to disconnect from the LAN.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1623
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1624 @return tuple containing a flag indicating success and an error message
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1625 @rtype tuple of (bool, str)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1626 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1627 command = """{0}
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1628 def disconnect_lan():
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1629 import time
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1630
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1631 w5x00_init()
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1632
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1633 nic.active(False)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1634 time.sleep(0.1)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1635 print(not nic.isconnected())
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1636
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1637 disconnect_lan()
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1638 del disconnect_lan, w5x00_init
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1639 """.format(
9888
f76eeb80907b Adapted RP2040Device to the renamed method of WiznetUtilities.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9880
diff changeset
1640 WiznetUtilities.mpyWiznetInit(),
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1641 )
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1642
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1643 with EricOverrideCursor():
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
1644 out, err = self.executeCommands(
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1645 command, mode=self._submitMode, timeout=15000
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1646 )
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1647 if err:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1648 return False, err
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1649
10138
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10089
diff changeset
1650 self._networkConnected = False
56614cf9d03c MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10089
diff changeset
1651
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1652 return out.strip() == b"True", ""
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1653
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1654 def checkInternetViaLan(self):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1655 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1656 Public method to check, if the internet can be reached (LAN variant).
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1657
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1658 @return tuple containing a flag indicating reachability and an error string
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1659 @rtype tuple of (bool, str)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1660 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1661 command = """{0}
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1662 def check_internet():
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1663 import network
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1664 import socket
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1665
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1666 w5x00_init()
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1667
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1668 if nic.isconnected():
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1669 s = socket.socket()
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1670 try:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1671 s.connect(socket.getaddrinfo('quad9.net', 80)[0][-1])
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1672 s.close()
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1673 print(True)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1674 except:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1675 print(False)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1676 else:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1677 print(False)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1678
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1679 check_internet()
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1680 del check_internet, w5x00_init
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1681 """.format(
9888
f76eeb80907b Adapted RP2040Device to the renamed method of WiznetUtilities.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9880
diff changeset
1682 WiznetUtilities.mpyWiznetInit(),
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1683 )
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1684
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
1685 out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1686 if err:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1687 return False, err
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1688
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1689 return out.strip() == b"True", ""
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1690
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1691 def deactivateEthernet(self):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1692 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1693 Public method to deactivate the Ethernet interface of the connected device.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1694
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1695 @return tuple containg a flag indicating success and an error message
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1696 @rtype tuple of (bool, str)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1697 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1698 # The WIZnet 5x00 interface cannot be switched off explicitly. That means,
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1699 # disconnect from the LAN is all we can do.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1700
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1701 return self.disconnectFromLan()
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1702
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1703 def writeLanAutoConnect(self, config):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1704 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1705 Public method to generate a script and associated configuration to connect the
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1706 device to the LAN during boot time.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1707
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1708 @param config configuration for the connection (either the string 'dhcp'
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1709 for a dynamic address or a tuple of four strings with the IPv4 parameters.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1710 @type str or tuple of (str, str, str, str)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1711 @return tuple containing a flag indicating success and an error message
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1712 @rtype tuple of (bool, str)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1713 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1714 command = """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1715 def modify_boot():
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1716 add = True
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1717 try:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1718 with open('/boot.py', 'r') as f:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1719 for ln in f.readlines():
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1720 if 'wiznet_connect' in ln:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1721 add = False
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1722 break
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1723 except:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1724 pass
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1725 if add:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1726 with open('/boot.py', 'a') as f:
9888
f76eeb80907b Adapted RP2040Device to the renamed method of WiznetUtilities.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9880
diff changeset
1727 f.write('\\n')
f76eeb80907b Adapted RP2040Device to the renamed method of WiznetUtilities.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9880
diff changeset
1728 f.write('import wiznet_connect\\n')
f76eeb80907b Adapted RP2040Device to the renamed method of WiznetUtilities.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9880
diff changeset
1729 f.write('nic = wiznet_connect.connect_lan()\\n')
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1730 print(True)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1731
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1732 modify_boot()
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1733 del modify_boot
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1734 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1735 ifconfig = "ifconfig = {0}\n".format("'dhcp'" if config == "dhcp" else config)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1736 try:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1737 # write secrets file
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1738 self.putData("/wiznet_config.py", ifconfig.encode("utf-8"))
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1739 # copy auto-connect file
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1740 self.put(
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1741 os.path.join(
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1742 os.path.dirname(__file__), "MCUScripts", "picoWiznetConnect.py"
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1743 ),
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1744 "/wiznet_connect.py",
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1745 )
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1746 except OSError as err:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1747 return False, str(err)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1748
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1749 # modify boot.py
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
1750 out, err = self.executeCommands(command, mode=self._submitMode)
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1751 if err:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1752 return False, err
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1753
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1754 return out.decode("utf-8").strip() == "True", ""
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1755
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1756 def removeLanAutoConnect(self):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1757 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1758 Public method to remove the saved IPv4 parameters from the connected device.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1759
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1760 Note: This disables the LAN auto-connect feature.
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1761
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1762 @return tuple containing a flag indicating success and an error message
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1763 @rtype tuple of (bool, str)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1764 """
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1765 try:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1766 self.rm("/wiznet_config.py")
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1767 except OSError as err:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1768 return False, str(err)
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1769
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1770 return True, ""
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1771
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1772 ##################################################################
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1773 ## Methods below implement NTP related methods
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1774 ##################################################################
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1775
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1776 def hasNetworkTime(self):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1777 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1778 Public method to check the availability of network time functions.
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1779
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1780 @return flag indicating the availability of network time functions
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1781 @rtype bool
9870
0399d3607829 Fixed a few code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9868
diff changeset
1782 @exception OSError raised to indicate an issue with the device
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1783 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1784 command = """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1785 def has_ntp():
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1786 try:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1787 import ntptime
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1788 return True
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1789 except ImportError:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1790 return False
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1791
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1792 print(has_ntp())
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1793 del has_ntp
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1794 """
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
1795 out, err = self.executeCommands(command, mode=self._submitMode)
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1796 if err:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1797 raise OSError(self._shortError(err))
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1798 return out.strip() == b"True"
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1799
9888
f76eeb80907b Adapted RP2040Device to the renamed method of WiznetUtilities.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9880
diff changeset
1800 def setNetworkTime(self, server="pool.ntp.org", tzOffset=0, timeout=10):
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1801 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1802 Public method to set the time to the network time retrieved from an
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1803 NTP server.
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1804
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1805 @param server name of the NTP server to get the network time from
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1806 (defaults to "0.pool.ntp.org")
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1807 @type str (optional)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1808 @param tzOffset offset with respect to UTC (defaults to 0)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1809 @type int (optional)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1810 @param timeout maximum time to wait for a server response in seconds
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1811 (defaults to 10)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1812 @type int
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1813 @return tuple containing a flag indicating success and an error string
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1814 @rtype tuple of (bool, str)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1815 """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1816 command = """
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1817 def set_ntp_time(server, tz_offset, timeout):
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1818 import network
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1819 import ntptime
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1820 import machine
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1821
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1822 if hasattr(network, 'WLAN') and not network.WLAN(network.STA_IF).isconnected():
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1823 return False
9878
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1824 elif hasattr(network, 'WIZNET5K'):
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1825 try:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1826 if not nic.isconnected():
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1827 return False
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1828 except NameError:
a82014a9e57b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9870
diff changeset
1829 return False
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1830
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1831 ntptime.host = server
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1832 ntptime.timeout = timeout
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1833 ntptime.settime()
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1834
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1835 rtc = machine.RTC()
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1836 t = list(rtc.datetime())
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1837 t[4] += tz_offset
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1838 rtc.datetime(t)
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1839
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1840 return True
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1841
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1842 try:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1843 print({{
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1844 'result': set_ntp_time({0}, {1}, {2}),
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1845 'error': '',
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1846 }})
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1847 except Exception as err:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1848 print({{
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1849 'result': False,
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1850 'error': str(err),
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1851 }})
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1852 del set_ntp_time
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1853 """.format(
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1854 repr(server), tzOffset, timeout
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1855 )
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
1856 out, err = self.executeCommands(
9868
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1857 command, mode=self._submitMode, timeout=(timeout + 2) * 1000
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1858 )
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1859 if err:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1860 return False, err
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1861 else:
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1862 res = ast.literal_eval(out.decode("utf-8"))
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1863 return res["result"], res["error"]
467288cffee2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9843
diff changeset
1864
9781
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
1865 ############################################################################
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
1866 ## RP2 only methods below
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
1867 ############################################################################
3112f77f722b Continued implementing WiFi functionality for RP2040 based devices (internet connection, network scan).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9779
diff changeset
1868
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1869 @pyqtSlot()
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1870 def __setCountry(self):
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1871 """
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1872 Private slot to configure the country of the connected RP2040 device.
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1873
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1874 The country is the two letter country code.
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1875 """
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1876 from ..WifiDialogs.WifiCountryDialog import WifiCountryDialog
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1877
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1878 dlg = WifiCountryDialog()
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1879 if dlg.exec() == QDialog.DialogCode.Accepted:
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1880 country, remember = dlg.getCountry()
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1881 if remember:
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1882 Preferences.setMicroPython("WifiCountry", country)
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1883
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1884 command = """
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1885 import rp2
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1886 rp2.country({0})
9789
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
1887 """.format(
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
1888 repr(country)
d8e0ab86ddca Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9788
diff changeset
1889 )
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1890
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9908
diff changeset
1891 out, err = self.executeCommands(command, mode=self._submitMode)
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1892 if err:
9787
163511257f24 Continued implementing WiFi functionality for RP2040 based devices (show connected stations, save/remove credentials, boot script for Pico W).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9782
diff changeset
1893 self.microPython.showError("rp2.country()", err)
9779
8d3c7c991085 Continued implementing WiFi functionality for RP2040 based devices (set country, menu hierarchy).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9776
diff changeset
1894
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1895
10069
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10022
diff changeset
1896 def createDevice(
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10022
diff changeset
1897 microPythonWidget, deviceType, vid, pid, boardName, serialNumber # noqa: U100
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10022
diff changeset
1898 ):
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1899 """
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1900 Function to instantiate a MicroPython device object.
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1901
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1902 @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: 9473
diff changeset
1903 @type MicroPythonWidget
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1904 @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: 9473
diff changeset
1905 @type str
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1906 @param vid vendor ID
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1907 @type int
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1908 @param pid product ID
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1909 @type int
9738
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1910 @param boardName name of the board
4ae976ee5339 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1911 @type str
9751
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
1912 @param serialNumber serial number of the board
606ac0e26533 Various enhancements and improvements to the MicroPython/CircuitPython related modules.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9749
diff changeset
1913 @type str
9496
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1914 @return reference to the instantiated device object
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1915 @rtype RP2040Device
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1916 """
05017f795c24 Changed MicroPython device imports to use importlib.import_module().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
1917 return RP2040Device(microPythonWidget, deviceType)

eric ide

mercurial