src/eric7/MicroPython/MicroPythonWidget.py

branch
mpy_network
changeset 10008
c5bcafe3485c
parent 9990
54c614d91eff
child 10009
61e5fe703818
equal deleted inserted replaced
9990:54c614d91eff 10008:c5bcafe3485c
48 from . import ConvertToUF2Dialog, Devices, UF2FlashDialog 48 from . import ConvertToUF2Dialog, Devices, UF2FlashDialog
49 from .BluetoothDialogs.BluetoothController import BluetoothController 49 from .BluetoothDialogs.BluetoothController import BluetoothController
50 from .EthernetDialogs.EthernetController import EthernetController 50 from .EthernetDialogs.EthernetController import EthernetController
51 from .MicroPythonFileManager import MicroPythonFileManager 51 from .MicroPythonFileManager import MicroPythonFileManager
52 from .MicroPythonFileManagerWidget import MicroPythonFileManagerWidget 52 from .MicroPythonFileManagerWidget import MicroPythonFileManagerWidget
53 from .MicroPythonWebreplDeviceInterface import MicroPythonWebreplDeviceInterface
53 from .Ui_MicroPythonWidget import Ui_MicroPythonWidget 54 from .Ui_MicroPythonWidget import Ui_MicroPythonWidget
54 from .WifiDialogs.WifiController import WifiController 55 from .WifiDialogs.WifiController import WifiController
55 56
56 try: 57 try:
57 from .MicroPythonGraphWidget import MicroPythonGraphWidget 58 from .MicroPythonGraphWidget import MicroPythonGraphWidget
214 DevicePortRole = Qt.ItemDataRole.UserRole + 2 215 DevicePortRole = Qt.ItemDataRole.UserRole + 2
215 DeviceVidRole = Qt.ItemDataRole.UserRole + 3 216 DeviceVidRole = Qt.ItemDataRole.UserRole + 3
216 DevicePidRole = Qt.ItemDataRole.UserRole + 4 217 DevicePidRole = Qt.ItemDataRole.UserRole + 4
217 DeviceSerNoRole = Qt.ItemDataRole.UserRole + 5 218 DeviceSerNoRole = Qt.ItemDataRole.UserRole + 5
218 DeviceInterfaceTypeRole = Qt.ItemDataRole.UserRole + 6 219 DeviceInterfaceTypeRole = Qt.ItemDataRole.UserRole + 6
220 DeviceWebreplUrlRole = Qt.ItemDataRole.UserRole + 7
219 221
220 dataReceived = pyqtSignal(bytes) 222 dataReceived = pyqtSignal(bytes)
221 223
222 ManualMarker = "<manual>" 224 ManualMarker = "<manual>"
223 225
344 346
345 self.deviceTypeComboBox.addItem("", "") 347 self.deviceTypeComboBox.addItem("", "")
346 devices, unknownDevices, unknownPorts = Devices.getFoundDevices() 348 devices, unknownDevices, unknownPorts = Devices.getFoundDevices()
347 if devices: 349 if devices:
348 supportedMessage = self.tr( 350 supportedMessage = self.tr(
349 "%n supported device(s) detected.", "", len(devices) 351 "%n supported serial device(s) detected.", "", len(devices)
350 ) 352 )
351 353
352 for index, ( 354 for index, (
353 boardType, 355 boardType,
354 boardName, 356 boardName,
380 self.deviceTypeComboBox.setItemData( 382 self.deviceTypeComboBox.setItemData(
381 index, "serial", self.DeviceInterfaceTypeRole 383 index, "serial", self.DeviceInterfaceTypeRole
382 ) 384 )
383 385
384 else: 386 else:
385 supportedMessage = self.tr("No supported devices detected.") 387 supportedMessage = self.tr("No supported serial devices detected.")
386 388
387 self.__unknownPorts = unknownPorts 389 self.__unknownPorts = unknownPorts
388 if self.__unknownPorts: 390 if self.__unknownPorts:
389 unknownMessage = self.tr( 391 unknownMessage = self.tr(
390 "\n%n unknown device(s) for manual selection.", 392 "\n%n unknown device(s) for manual selection.",
399 self.ManualMarker, 401 self.ManualMarker,
400 self.DeviceTypeRole, 402 self.DeviceTypeRole,
401 ) 403 )
402 else: 404 else:
403 unknownMessage = "" 405 unknownMessage = ""
406
407 # add webrepl entries
408 self.deviceTypeComboBox.insertSeparator(self.deviceTypeComboBox.count())
409 # TODO: replace this test data with real code
410 self.deviceTypeComboBox.addItem("Raspberry Pico W #2")
411 index = self.deviceTypeComboBox.count() - 1
412 self.deviceTypeComboBox.setItemData(index, "rp2040", self.DeviceTypeRole)
413 self.deviceTypeComboBox.setItemData(
414 index, "webrepl", self.DeviceInterfaceTypeRole
415 )
416 self.deviceTypeComboBox.setItemData(
417 index, "ws://repl#3179@192.168.1.52", self.DeviceWebreplUrlRole
418 )
419 #############################
404 420
405 self.deviceInfoLabel.setText(supportedMessage + unknownMessage) 421 self.deviceInfoLabel.setText(supportedMessage + unknownMessage)
406 422
407 index = self.deviceTypeComboBox.findText( 423 index = self.deviceTypeComboBox.findText(
408 currentDevice, Qt.MatchFlag.MatchExactly 424 currentDevice, Qt.MatchFlag.MatchExactly
762 def __clear(self): 778 def __clear(self):
763 """ 779 """
764 Private slot to clear the REPL pane. 780 Private slot to clear the REPL pane.
765 """ 781 """
766 self.replEdit.clear() 782 self.replEdit.clear()
767 self.__interface.isConnected() and self.__interface.write(b"\r") 783 if bool(self.__interface) and self.__interface.isConnected():
784 self.__interface.write(b"\r")
768 785
769 @pyqtSlot() 786 @pyqtSlot()
770 def __paste(self, mode=QClipboard.Mode.Clipboard): 787 def __paste(self, mode=QClipboard.Mode.Clipboard):
771 """ 788 """
772 Private slot to perform a paste operation. 789 Private slot to perform a paste operation.
779 if clipboard: 796 if clipboard:
780 pasteText = clipboard.text(mode=mode) 797 pasteText = clipboard.text(mode=mode)
781 if pasteText: 798 if pasteText:
782 pasteText = pasteText.replace("\n\r", "\r") 799 pasteText = pasteText.replace("\n\r", "\r")
783 pasteText = pasteText.replace("\n", "\r") 800 pasteText = pasteText.replace("\n", "\r")
784 if self.__interface.isConnected(): 801 if bool(self.__interface) and self.__interface.isConnected():
785 self.__interface.write(b"\x05") 802 self.__interface.write(b"\x05")
786 self.__interface.write(pasteText.encode("utf-8")) 803 self.__interface.write(pasteText.encode("utf-8"))
787 self.__interface.write(b"\x04") 804 self.__interface.write(b"\x04")
788 805
789 def eventFilter(self, obj, evt): 806 def eventFilter(self, obj, evt):
844 msg = b"" 861 msg = b""
845 elif key in (Qt.Key.Key_Return, Qt.Key.Key_Enter): 862 elif key in (Qt.Key.Key_Return, Qt.Key.Key_Enter):
846 tc = self.replEdit.textCursor() 863 tc = self.replEdit.textCursor()
847 tc.movePosition(QTextCursor.MoveOperation.EndOfLine) 864 tc.movePosition(QTextCursor.MoveOperation.EndOfLine)
848 self.replEdit.setTextCursor(tc) 865 self.replEdit.setTextCursor(tc)
849 self.__interface.isConnected() and self.__interface.write(msg) 866 if bool(self.__interface) and self.__interface.isConnected():
867 self.__interface.write(msg)
850 return True 868 return True
851 else: 869 else:
852 # standard event processing 870 # standard event processing
853 return super().eventFilter(obj, evt) 871 return super().eventFilter(obj, evt)
854 872
865 @type QMouseEvent 883 @type QMouseEvent
866 """ 884 """
867 if evt.button() == Qt.MouseButton.MiddleButton: 885 if evt.button() == Qt.MouseButton.MiddleButton:
868 self.__paste(mode=QClipboard.Mode.Selection) 886 self.__paste(mode=QClipboard.Mode.Selection)
869 msg = b"" 887 msg = b""
870 if self.__interface.isConnected(): 888 if bool(self.__interface) and self.__interface.isConnected():
871 self.__interface.write(msg) 889 self.__interface.write(msg)
872 evt.accept() 890 evt.accept()
873 else: 891 else:
874 self.__origReplEditMouseReleaseEvent(evt) 892 self.__origReplEditMouseReleaseEvent(evt)
875 893
1214 else: 1232 else:
1215 return 1233 return
1216 1234
1217 self.__interface = MicroPythonSerialDeviceInterface(self) 1235 self.__interface = MicroPythonSerialDeviceInterface(self)
1218 elif interfaceType == "webrepl": 1236 elif interfaceType == "webrepl":
1219 # TODO: not yet implemented 1237 port = self.deviceTypeComboBox.currentData(self.DeviceWebreplUrlRole)
1220 return 1238 if not port:
1239 # TODO: implement Webrepl parameter dialog (ws:// URL)
1240 return
1241
1242 self.__interface = MicroPythonWebreplDeviceInterface(self)
1221 1243
1222 if self.__interface.connectToDevice(port): 1244 if self.__interface.connectToDevice(port):
1223 deviceResponding = self.__interface.probeDevice() 1245 deviceResponding = self.__interface.probeDevice()
1224 self.__setConnected(deviceResponding) 1246 self.__setConnected(deviceResponding)
1225 self.__device.setConnected(deviceResponding) 1247 self.__device.setConnected(deviceResponding)

eric ide

mercurial