eric6/MicroPython/MicrobitDevices.py

Tue, 16 Jul 2019 20:12:53 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 16 Jul 2019 20:12:53 +0200
branch
micropython
changeset 7065
e3d04faced34
parent 7059
a8fad276cbd5
child 7082
ec199ef0cfc6
permissions
-rw-r--r--

Continued implementing the MicroPython support.

# -*- coding: utf-8 -*-

# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing the device interface class for BBC micro:bit boards.
"""

from __future__ import unicode_literals

from PyQt5.QtCore import pyqtSlot

from .MicroPythonDevices import MicroPythonDevice
from .MicroPythonReplWidget import HAS_QTCHART


class MicrobitDevice(MicroPythonDevice):
    """
    Class implementing the device for BBC micro:bit 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(MicrobitDevice, 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(MicrobitDevice, self).setButtons()
        self.microPython.setActionButtons(
            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)
    
    # 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
    
    @pyqtSlot()
    def handleDataFlood(self):
        """
        Public slot handling a data floof from the device.
        """
        self.microPython.setActionButtons(files=True)

eric ide

mercurial