src/eric7/MicroPython/Devices/Nrf52Devices.py

Sun, 16 Mar 2025 12:53:12 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 16 Mar 2025 12:53:12 +0100
branch
eric7
changeset 11170
6d6199d668fb
parent 11167
a3f5af773bc7
child 11208
f776db7cc222
permissions
-rw-r--r--

Added the Adafruit Feather nRF52840 to the list of known NRF52 boards and changed the list of known CircuitPython boards to be more explicit with respect to Adafruit boards (i.e. VID 0x239A).

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
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 dlg = UF2FlashDialog(boardType="nrf52", parent=self.microPython)
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