eric6/MicroPython/EspDevices.py

branch
micropython
changeset 7059
a8fad276cbd5
child 7065
e3d04faced34
diff -r bdd583f96e96 -r a8fad276cbd5 eric6/MicroPython/EspDevices.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/MicroPython/EspDevices.py	Wed Jul 10 20:21:57 2019 +0200
@@ -0,0 +1,145 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing some utility functions and the MicroPythonDevice base
+class.
+"""
+
+from __future__ import unicode_literals
+
+from .MicroPythonDevices import MicroPythonDevice
+from .MicroPythonReplWidget import HAS_QTCHART
+
+
+class EspDevice(MicroPythonDevice):
+    """
+    Class implementing the device for ESP32 and ESP8266 based boards.
+    """
+    def __init__(self, microPythonWidget, parent=None):
+        """
+        Constructor
+        
+        @param microPythonWidget reference to the main MicroPython widget
+        @type MicroPythonReplWidget
+        @param parent reference to the parent object
+        @type QObject
+        """
+        super(EspDevice, self).__init__(microPythonWidget, parent)
+        
+        self.__replActive = False
+        self.__fileManagerActive = False
+        self.__plotterActive = False
+    
+    def setButtons(self):
+        """
+        Public method to enable the supported action buttons.
+        """
+        super(EspDevice, self).setButtons()
+        self.microPython.setActionButtons(
+            run=True, repl=True, files=True, chart=HAS_QTCHART)
+    
+    def forceInterrupt(self):
+        """
+        Public method to determine the need for an interrupt when opening the
+        serial connection.
+        
+        @return flag indicating an interrupt is needed
+        @rtype bool
+        """
+        return True
+    
+    def canStartRepl(self):
+        """
+        Public method to determine, if a REPL can be started.
+        
+        @return tuple containing a flag indicating it is safe to start a REPL
+            and a reason why it cannot.
+        @rtype tuple of (bool, str)
+        """
+        if self.__fileManagerActive:
+            return False, self.tr("The REPL and the file manager use the same"
+                                  " USB serial connection. Only one can be"
+                                  " active at any time. Toggle the file"
+                                  " manager off and try again.")
+        else:
+            return True, ""
+    
+    def setRepl(self, on):
+        """
+        Public method to set the REPL status and dependent status.
+        
+        @param on flag indicating the active status
+        @type bool
+        """
+        self.__replActive = on
+        self.microPython.setActionButtons(files=not on)
+    
+    def canStartPlotter(self):
+        """
+        Public method to determine, if a Plotter can be started.
+        
+        @return tuple containing a flag indicating it is safe to start a
+            Plotter and a reason why it cannot.
+        @rtype tuple of (bool, str)
+        """
+        if self.__fileManagerActive:
+            return False, self.tr("The Plotter and the file manager use the"
+                                  " same USB serial connection. Only one can"
+                                  " be active at any time. Toggle the file"
+                                  " manager off and try again.")
+        else:
+            return True, ""
+    
+    def setPlotter(self, on):
+        """
+        Public method to set the Plotter status and dependent status.
+        
+        @param on flag indicating the active status
+        @type bool
+        """
+        self.__plotterActive = on
+        self.microPython.setActionButtons(files=not on)
+    
+    def canRunScript(self):
+        """
+        Public method to determine, if a Plotter can be started.
+        
+        @return tuple containing a flag indicating it is safe to start a
+            Plotter and a reason why it cannot.
+        @rtype tuple of (bool, str)
+        """
+        return self.canStartRepl()
+    
+    def runScript(self, script):
+        """
+        Public method to run the given Python script.
+        
+        @param script script to be executed
+        @type str
+        """
+        pythonScript = script.split("\n")
+        self.sendCommands(pythonScript)
+    
+    # TODO: not yet implemented
+    def canStartFileManager(self):
+        """
+        Public method to determine, if a File Manager can be started.
+        
+        @return tuple containing a flag indicating it is safe to start a
+            File Manager and a reason why it cannot.
+        @rtype tuple of (bool, str)
+        """
+        return False, self.tr("File Manager is not supported by this device.")
+    
+    # TODO: not yet implemented
+    def setFileManager(self, on):
+        """
+        Public method to set the File Manager status and dependent status.
+        
+        @param on flag indicating the active status
+        @type bool
+        """
+        pass

eric ide

mercurial