def __init__(self, master_communicator=INJECTED, ucan_communicator=INJECTED, memory_files=INJECTED): """ :type master_communicator: master_core.core_communicator.CoreCommunicator :type ucan_communicator: master_core.ucan_communicator.UCANCommunicator :type memory_files: dict[master_core.memory_file.MemoryTypes, master_core.memory_file.MemoryFile] """ super(MasterCoreController, self).__init__(master_communicator) self._ucan_communicator = ucan_communicator self._memory_files = memory_files self._synchronization_thread = Thread(target=self._synchronize, name='CoreMasterSynchronization') self._master_online = False self._input_state = MasterInputState() self._output_interval = 600 self._output_last_updated = 0 self._output_states = {} self._sensor_interval = 300 self._sensor_last_updated = 0 self._sensor_states = {} self._master_communicator.register_consumer( BackgroundConsumer(CoreAPI.event_information(), 0, self._handle_event) ) self._master_communicator.register_consumer( BackgroundConsumer(CoreAPI.error_information(), 0, lambda e: logger.info('Got master error: {0}'.format(Error(e)))) ) self._master_communicator.register_consumer( BackgroundConsumer(CoreAPI.ucan_module_information(), 0, lambda i: logger.info('Got ucan module information: {0}'.format(i))) )
def __init__(self, memory_type, master_communicator=INJECTED): """ Initializes the MemoryFile instance, reprensenting one of the supported memory types. It provides caching for EEPROM, and direct write/read through for FRAM :type master_communicator: master_core.core_communicator.CoreCommunicator """ if not master_communicator: raise RuntimeError('Could not inject argument: core_communicator') self._core_communicator = master_communicator self.type = memory_type self._cache = {} if memory_type == MemoryTypes.EEPROM: self._pages = 512 self._page_length = 256 elif memory_type == MemoryTypes.FRAM: self._pages = 128 self._page_length = 256 if memory_type == MemoryTypes.EEPROM: self._core_communicator.register_consumer( BackgroundConsumer(CoreAPI.event_information(), 0, self._handle_event))