--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/MicroPython/MicrobitDevices.py Wed Jul 10 20:21:57 2019 +0200 @@ -0,0 +1,124 @@ +# -*- 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 .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