--- a/src/eric7/MicroPython/MicroPythonWidget.py Fri Apr 28 12:07:41 2023 +0200 +++ b/src/eric7/MicroPython/MicroPythonWidget.py Tue May 02 12:01:40 2023 +0200 @@ -50,6 +50,7 @@ from .EthernetDialogs.EthernetController import EthernetController from .MicroPythonFileManager import MicroPythonFileManager from .MicroPythonFileManagerWidget import MicroPythonFileManagerWidget +from .MicroPythonWebreplDeviceInterface import MicroPythonWebreplDeviceInterface from .Ui_MicroPythonWidget import Ui_MicroPythonWidget from .WifiDialogs.WifiController import WifiController @@ -216,6 +217,7 @@ DevicePidRole = Qt.ItemDataRole.UserRole + 4 DeviceSerNoRole = Qt.ItemDataRole.UserRole + 5 DeviceInterfaceTypeRole = Qt.ItemDataRole.UserRole + 6 + DeviceWebreplUrlRole = Qt.ItemDataRole.UserRole + 7 dataReceived = pyqtSignal(bytes) @@ -346,7 +348,7 @@ devices, unknownDevices, unknownPorts = Devices.getFoundDevices() if devices: supportedMessage = self.tr( - "%n supported device(s) detected.", "", len(devices) + "%n supported serial device(s) detected.", "", len(devices) ) for index, ( @@ -382,7 +384,7 @@ ) else: - supportedMessage = self.tr("No supported devices detected.") + supportedMessage = self.tr("No supported serial devices detected.") self.__unknownPorts = unknownPorts if self.__unknownPorts: @@ -402,6 +404,20 @@ else: unknownMessage = "" + # add webrepl entries + self.deviceTypeComboBox.insertSeparator(self.deviceTypeComboBox.count()) + # TODO: replace this test data with real code + self.deviceTypeComboBox.addItem("Raspberry Pico W #2") + index = self.deviceTypeComboBox.count() - 1 + self.deviceTypeComboBox.setItemData(index, "rp2040", self.DeviceTypeRole) + self.deviceTypeComboBox.setItemData( + index, "webrepl", self.DeviceInterfaceTypeRole + ) + self.deviceTypeComboBox.setItemData( + index, "ws://repl#3179@192.168.1.52", self.DeviceWebreplUrlRole + ) + ############################# + self.deviceInfoLabel.setText(supportedMessage + unknownMessage) index = self.deviceTypeComboBox.findText( @@ -764,7 +780,8 @@ Private slot to clear the REPL pane. """ self.replEdit.clear() - self.__interface.isConnected() and self.__interface.write(b"\r") + if bool(self.__interface) and self.__interface.isConnected(): + self.__interface.write(b"\r") @pyqtSlot() def __paste(self, mode=QClipboard.Mode.Clipboard): @@ -781,7 +798,7 @@ if pasteText: pasteText = pasteText.replace("\n\r", "\r") pasteText = pasteText.replace("\n", "\r") - if self.__interface.isConnected(): + if bool(self.__interface) and self.__interface.isConnected(): self.__interface.write(b"\x05") self.__interface.write(pasteText.encode("utf-8")) self.__interface.write(b"\x04") @@ -846,7 +863,8 @@ tc = self.replEdit.textCursor() tc.movePosition(QTextCursor.MoveOperation.EndOfLine) self.replEdit.setTextCursor(tc) - self.__interface.isConnected() and self.__interface.write(msg) + if bool(self.__interface) and self.__interface.isConnected(): + self.__interface.write(msg) return True else: # standard event processing @@ -867,7 +885,7 @@ if evt.button() == Qt.MouseButton.MiddleButton: self.__paste(mode=QClipboard.Mode.Selection) msg = b"" - if self.__interface.isConnected(): + if bool(self.__interface) and self.__interface.isConnected(): self.__interface.write(msg) evt.accept() else: @@ -1216,8 +1234,12 @@ self.__interface = MicroPythonSerialDeviceInterface(self) elif interfaceType == "webrepl": - # TODO: not yet implemented - return + port = self.deviceTypeComboBox.currentData(self.DeviceWebreplUrlRole) + if not port: + # TODO: implement Webrepl parameter dialog (ws:// URL) + return + + self.__interface = MicroPythonWebreplDeviceInterface(self) if self.__interface.connectToDevice(port): deviceResponding = self.__interface.probeDevice()