src/eric7/MicroPython/Devices/Nrf52Devices.py

Sun, 06 Apr 2025 14:51:33 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 06 Apr 2025 14:51:33 +0200
branch
eric7
changeset 11208
f776db7cc222
parent 11167
a3f5af773bc7
child 11221
6c05da6f8b0e
permissions
-rw-r--r--

Fixed some issues related to support of UF2 capable micro-controllers.

11167
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the device interface class for NRF52 boards with UF2 support.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import ast
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import json
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from PyQt6.QtCore import QUrl, pyqtSlot
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from PyQt6.QtNetwork import QNetworkReply, QNetworkRequest
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from PyQt6.QtWidgets import QMenu
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from eric7 import EricUtilities, Preferences
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from eric7.EricWidgets import EricMessageBox
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 from eric7.EricWidgets.EricApplication import ericApp
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 from ..MicroPythonWidget import HAS_QTCHART
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 from . import FirmwareGithubUrls
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 from .DeviceBase import BaseDevice
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 class Nrf52Device(BaseDevice):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 Class implementing the device for NRF52 boards with UF2 support.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 def __init__(self, microPythonWidget, deviceType, parent=None):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 Constructor
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @param microPythonWidget reference to the main MicroPython widget
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 @type MicroPythonWidget
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 @param deviceType device type assigned to this device interface
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 @type str
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @param parent reference to the parent object
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @type QObject
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 super().__init__(microPythonWidget, deviceType, parent)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 self.__createNrfMenu()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 def setButtons(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 Public method to enable the supported action buttons.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 super().setButtons()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.microPython.setActionButtons(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 run=True, repl=True, files=True, chart=HAS_QTCHART
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 def forceInterrupt(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 Public method to determine the need for an interrupt when opening the
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 serial connection.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 @return flag indicating an interrupt is needed
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 @rtype bool
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 return False
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 def deviceName(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 Public method to get the name of the device.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 @return name of the device
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 @rtype str
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 return self.tr("NRF52 with UF2")
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 def canStartRepl(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 Public method to determine, if a REPL can be started.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 @return tuple containing a flag indicating it is safe to start a REPL
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 and a reason why it cannot.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 @rtype tuple of (bool, str)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 return True, ""
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 def canStartPlotter(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 Public method to determine, if a Plotter can be started.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 @return tuple containing a flag indicating it is safe to start a
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 Plotter and a reason why it cannot.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 @rtype tuple of (bool, str)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 return True, ""
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 def canRunScript(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 Public method to determine, if a script can be executed.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 @return tuple containing a flag indicating it is safe to start a
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 Plotter and a reason why it cannot.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 @rtype tuple of (bool, str)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 return True, ""
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 def runScript(self, script):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 Public method to run the given Python script.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 @param script script to be executed
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 @type str
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 pythonScript = script.split("\n")
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 self.sendCommands(pythonScript)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 def canStartFileManager(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 Public method to determine, if a File Manager can be started.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 @return tuple containing a flag indicating it is safe to start a
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 File Manager and a reason why it cannot.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 @rtype tuple of (bool, str)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 return True, ""
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 def __createNrfMenu(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 Private method to create the NRF52 submenu.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 self.__nrfMenu = QMenu(self.tr("NRF52 Functions"))
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 self.__showMpyAct = self.__nrfMenu.addAction(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 self.tr("Show MicroPython Versions"), self.__showFirmwareVersions
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 self.__nrfMenu.addSeparator()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 self.__bootloaderAct = self.__nrfMenu.addAction(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 self.tr("Activate Bootloader"), self.__activateBootloader
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 self.__flashMpyAct = self.__nrfMenu.addAction(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 self.tr("Flash MicroPython Firmware"), self.__flashPython
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 self.__nrfMenu.addSeparator()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 self.__resetAct = self.__nrfMenu.addAction(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 self.tr("Reset Device"), self.__resetDevice
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 def addDeviceMenuEntries(self, menu):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 Public method to add device specific entries to the given menu.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 @param menu reference to the context menu
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 @type QMenu
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 connected = self.microPython.isConnected()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 linkConnected = self.microPython.isLinkConnected()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 self.__showMpyAct.setEnabled(connected)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 self.__bootloaderAct.setEnabled(connected)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 self.__flashMpyAct.setEnabled(not linkConnected)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 self.__resetAct.setEnabled(connected)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 menu.addMenu(self.__nrfMenu)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 def hasFlashMenuEntry(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 Public method to check, if the device has its own flash menu entry.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 @return flag indicating a specific flash menu entry
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 @rtype bool
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 return True
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 @pyqtSlot()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 def __flashPython(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 Private slot to flash a MicroPython firmware to the device.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 from ..UF2FlashDialog import UF2FlashDialog
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178
11208
f776db7cc222 Fixed some issues related to support of UF2 capable micro-controllers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11167
diff changeset
179 dlg = UF2FlashDialog(boardType="UF2 Board", parent=self.microPython)
11167
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 dlg.exec()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 @pyqtSlot()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 def __activateBootloader(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 Private slot to switch the board into 'bootloader' mode.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 if self.microPython.isConnected():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 self.executeCommands(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 [
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 "import machine",
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 "machine.bootloader()",
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 ],
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 mode=self._submitMode,
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 # simulate pressing the disconnect button
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 self.microPython.on_connectButton_clicked()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 @pyqtSlot()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 def __showFirmwareVersions(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 Private slot to show the firmware version of the connected device and the
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 available firmware version.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 if self.microPython.isConnected():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 if self._deviceData["mpy_name"] != "micropython":
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 EricMessageBox.critical(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 self.microPython,
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 self.tr("Show MicroPython Versions"),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 self.tr(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 """The firmware of the connected device cannot be"""
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 """ determined or the board does not run MicroPython."""
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 """ Aborting..."""
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 ),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 else:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 if self._deviceData["mpy_variant"] == "Pimoroni Pico":
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 # MicroPython with Pimoroni add-on libraries
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 url = QUrl(FirmwareGithubUrls["pimoroni_pico"])
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 else:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 url = QUrl(FirmwareGithubUrls["micropython"])
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 ui = ericApp().getObject("UserInterface")
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 request = QNetworkRequest(url)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 reply = ui.networkAccessManager().head(request)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 reply.finished.connect(lambda: self.__firmwareVersionResponse(reply))
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 @pyqtSlot(QNetworkReply)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 def __firmwareVersionResponse(self, reply):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 Private slot handling the response of the latest version request.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 @param reply reference to the reply object
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 @type QNetworkReply
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 latestUrl = reply.url().toString()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 tag = latestUrl.rsplit("/", 1)[-1]
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 while tag and not tag[0].isdecimal():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 # get rid of leading non-decimal characters
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 tag = tag[1:]
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 latestVersion = EricUtilities.versionToTuple(tag)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 if self._deviceData["mpy_version"] == "unknown":
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 currentVersionStr = self.tr("unknown")
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 currentVersion = (0, 0, 0)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 else:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 currentVersionStr = (
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 self._deviceData["mpy_variant_version"]
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 if bool(self._deviceData["mpy_variant_version"])
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 else self._deviceData["mpy_version"]
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 currentVersion = EricUtilities.versionToTuple(currentVersionStr)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 msg = self.tr(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 "<h4>MicroPython Version Information</h4>"
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 "<table>"
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 "<tr><td>Installed:</td><td>{0}</td></tr>"
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 "<tr><td>Available:</td><td>{1}</td></tr>"
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 "{2}"
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 "</table>"
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 ).format(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 currentVersionStr,
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 tag,
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 (
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 self.tr("<tr><td>Variant:</td><td>{0}</td></tr>").format(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 self._deviceData["mpy_variant"]
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 if self._deviceData["mpy_variant"]
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 else ""
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 ),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 if self._deviceData["mpy_variant"] in ["Pimoroni Pico"] and not bool(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 self._deviceData["mpy_variant_version"]
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 ):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 # cannot derive update info
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 msg += self.tr("<p>Update may be available.</p>")
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 elif currentVersion < latestVersion:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 msg += self.tr("<p><b>Update available!</b></p>")
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 EricMessageBox.information(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 self.microPython,
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 self.tr("MicroPython Version"),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 msg,
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 @pyqtSlot()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 def __resetDevice(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 Private slot to reset the connected device.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 if self.microPython.isConnected():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 self.executeCommands(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 "import machine\nmachine.reset()\n", mode=self._submitMode
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 def getDocumentationUrl(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 Public method to get the device documentation URL.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 @return documentation URL of the device
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 @rtype str
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 return Preferences.getMicroPython("MicroPythonDocuUrl")
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 def getDownloadMenuEntries(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 Public method to retrieve the entries for the downloads menu.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 @return list of tuples with menu text and URL to be opened for each
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 entry
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 @rtype list of tuple of (str, str)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 return [
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 (
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 self.tr("MicroPython Firmware"),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 Preferences.getMicroPython("MicroPythonFirmwareUrl"),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 ),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 ("<separator>", ""),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 (
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 self.tr("CircuitPython Firmware"),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 Preferences.getMicroPython("CircuitPythonFirmwareUrl"),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 ),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 (
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 self.tr("CircuitPython Libraries"),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 Preferences.getMicroPython("CircuitPythonLibrariesUrl"),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 ),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 ]
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 ##################################################################
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 ## Methods below implement Bluetooth related methods
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 ##################################################################
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 def hasBluetooth(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 Public method to check the availability of Bluetooth.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 @return flag indicating the availability of Bluetooth
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 @rtype bool
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 @exception OSError raised to indicate an issue with the device
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 command = """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 def has_bt():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 try:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 import ble
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 if ble.address():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 return True
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 except (ImportError, OSError):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 pass
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 return False
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 print(has_bt())
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 del has_bt
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 if err:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 raise OSError(self._shortError(err))
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 return out.strip() == b"True"
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 def getBluetoothStatus(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 Public method to get Bluetooth status data of the connected board.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 @return list of tuples containing the translated status data label and
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 the associated value
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 @rtype list of tuples of (str, str)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 @exception OSError raised to indicate an issue with the device
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 command = """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 def ble_status():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 import ble
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 import json
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 res = {
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 'active': bool(ble.enabled()),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 'mac': ble.address(),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 }
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 print(json.dumps(res))
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 ble_status()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 del ble_status
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 out, err = self.executeCommands(command, mode=self._submitMode)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 if err:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 raise OSError(self._shortError(err))
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 bleStatus = json.loads(out.decode("utf-8"))
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 status = [
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 (self.tr("Active"), self.bool2str(bleStatus["active"])),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 (self.tr("MAC-Address"), bleStatus["mac"]),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 ]
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 return status
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 def activateBluetoothInterface(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396 Public method to activate the Bluetooth interface.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 @return flag indicating the new state of the Bluetooth interface
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399 @rtype bool
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 @exception OSError raised to indicate an issue with the device
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 command = """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 def activate_ble():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404 import ble
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406 if not ble.enabled():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 ble.enable()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 print(bool(ble.enabled()))
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 activate_ble()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 del activate_ble
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 out, err = self.executeCommands(command, mode=self._submitMode)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 if err:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 raise OSError(self._shortError(err))
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 return out.strip() == b"True"
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 def deactivateBluetoothInterface(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 Public method to deactivate the Bluetooth interface.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 @return flag indicating the new state of the Bluetooth interface
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 @rtype bool
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 @exception OSError raised to indicate an issue with the device
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
427 command = """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 def deactivate_ble():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429 import ble
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 if ble.enabled():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 ble.disable()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 print(bool(ble.enabled()))
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 deactivate_ble()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436 del deactivate_ble
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 out, err = self.executeCommands(command, mode=self._submitMode)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 if err:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 raise OSError(self._shortError(err))
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 return out.strip() == b"True"
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 def getDeviceScan(self, timeout=10):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 Public method to perform a Bluetooth device scan.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
448 @param timeout duration of the device scan in seconds (defaults
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 to 10)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450 @type int (optional)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451 @return tuple containing a dictionary with the scan results and
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 an error string
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453 @rtype tuple of (dict, str)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 from ..BluetoothDialogs.BluetoothAdvertisement import (
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456 SCAN_RSP,
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457 BluetoothAdvertisement,
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 command = """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 def ble_scan():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 import ble
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 import ubluepy as ub
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
465 ble_active = ble.enabled()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
466 if not ble_active:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 ble.enable()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 sc = ub.Scanner()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470 scanResults = sc.scan({0} * 1000)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471 for res in scanResults:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
472 try:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
473 scanData = res.getScanData()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
474 if res.addr():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
475 for data in scanData:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
476 print({{
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
477 'address': res.addr(),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
478 'rssi': res.rssi(),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
479 'adv_type': data[0],
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
480 'advertisement': bytes(data[2]),
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
481 }})
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
482 except MemoryError:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
483 pass
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
484
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
485 if not ble_active:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
486 ble.disable()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
487
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
488 ble_scan()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
489 del ble_scan
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
490 """.format(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
491 timeout
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
492 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
493 out, err = self.executeCommands(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
494 command, mode=self._submitMode, timeout=(timeout + 5) * 1000
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
495 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
496 if err:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
497 return {}, err
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
498
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
499 scanResults = {}
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
500 tempResults = {}
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
501
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
502 for line in out.decode("utf-8").splitlines():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
503 res = ast.literal_eval(line)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
504 address = res["address"]
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
505 if address not in tempResults:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
506 tempResults[address] = {
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
507 "advertisements": {},
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
508 }
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
509 tempResults[address]["rssi"] = res["rssi"]
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
510 tempResults[address]["advertisements"][res["adv_type"]] = res[
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
511 "advertisement"
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
512 ]
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
513
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
514 for address in tempResults:
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
515 advertisements = bytearray()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
516 for advType, advertisement in tempResults[address][
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
517 "advertisements"
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
518 ].items():
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
519 advertisements += (
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
520 (len(advertisement) + 1).to_bytes()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
521 + advType.to_bytes()
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
522 + advertisement
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
523 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
524 scanResults[address] = BluetoothAdvertisement(address)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
525 scanResults[address].update(
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
526 SCAN_RSP, tempResults[address]["rssi"], advertisements
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
527 )
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
528
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
529 return scanResults, ""
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
530
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
531 def supportsDeviceScan(self):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
532 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
533 Public method to indicate, that the Bluetooth implementation supports
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
534 scanning for devices.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
535
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
536 @return flag indicating that the scanning function is supported
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
537 @rtype bool
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
538 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
539 return True
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
540
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
541
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
542 def createDevice(microPythonWidget, deviceType, _vid, _pid, _boardName, _serialNumber):
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
543 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
544 Function to instantiate a MicroPython device object.
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
545
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
546 @param microPythonWidget reference to the main MicroPython widget
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
547 @type MicroPythonWidget
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
548 @param deviceType device type assigned to this device interface
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
549 @type str
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
550 @param _vid vendor ID (unused)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
551 @type int
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
552 @param _pid product ID (unused)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
553 @type int
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
554 @param _boardName name of the board (unused)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
555 @type str
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
556 @param _serialNumber serial number of the board (unused)
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
557 @type str
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
558 @return reference to the instantiated device object
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
559 @rtype RP2Device
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
560 """
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
561 return Nrf52Device(microPythonWidget, deviceType)

eric ide

mercurial