src/eric7/MicroPython/MicroPythonWidget.py

branch
mpy_network
changeset 10008
c5bcafe3485c
parent 9990
54c614d91eff
child 10009
61e5fe703818
--- 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()

eric ide

mercurial