 
"""
Extends Yapsy IPlugin interface to pass information about the board to plugins.

Fields of interest for plugins:
  args: list of arguments passed to the plugins
  sample_rate: actual sample rate of the board
  eeg_channels: number of EEG
  aux_channels: number of AUX channels
  
If needed, plugins that need to report an error can set self.is_activated to False during activate() call.

NB: because of how yapsy discovery system works, plugins must use the following syntax to inherit to use polymorphism (see http://yapsy.sourceforge.net/Advices.html):

    import plugin_interface as plugintypes

    class PluginExample(plugintypes.IPluginExtended):
       ...
"""

from yapsy.IPlugin import IPlugin

class IPluginExtended(IPlugin):
  # args: passed by command line
  def pre_activate(self, args, sample_rate=250, eeg_channels=8, aux_channels=3, imp_channels=0):
    self.args = args
    self.sample_rate = sample_rate
    self.eeg_channels = eeg_channels
    self.aux_channels = aux_channels
    self.imp_channels = imp_channels
    # by default we say that activation was okay -- inherited from IPlugin
    self.is_activated = True
    self.activate()
    # tell outside world if init went good or bad
    return  self.is_activated
   
  # inherited from IPlugin
  def activate(self):
    print("Plugin %s activated." % (self.__class__.__name__))
  
  # inherited from IPlugin
  def deactivate(self):
    print("Plugin %s deactivated." % (self.__class__.__name__))
  
  # plugins that require arguments should implement this method
  def show_help(self):
    print("I, %s, do not need any parameter." % (self.__class__.__name__))
