def _send_command(self, cid, command, fields): """ Send a command over the serial port :param cid: The command ID :type cid: int :param command: The Core CommandSpec :type command: master_core.core_command.CoreCommandSpec :param fields: A dictionary with the command input field values :type fields dict :raises: serial_utils.CommunicationTimedOutException """ payload = command.create_request_payload(fields) checked_payload = (str(chr(cid)) + command.instruction + WordField.encode(len(payload)) + payload) data = (CoreCommunicator.START_OF_REQUEST + str(chr(cid)) + command.instruction + WordField.encode(len(payload)) + payload + 'C' + str(chr(CoreCommunicator._calculate_crc(checked_payload))) + CoreCommunicator.END_OF_REQUEST) self._write_to_serial(data)
def read_ucan_config(): """ Reads the full uCAN config """ return UCANCommandSpec(sid=SID.NORMAL_COMMAND, instruction=Instruction(instruction=[0, 199]), identifier=AddressField('ucan_address', 3), response_instructions=[ Instruction(instruction=[i, 199], checksum_byte=7) for i in xrange(1, 14) ], response_fields=[ ByteField('input_link_0'), ByteField('input_link_1'), ByteField('input_link_2'), ByteField('input_link_3'), ByteField('input_link_4'), ByteField('input_link_5'), ByteField('sensor_link_0'), ByteField('sensor_link_1'), ByteField('sensor_type'), VersionField('firmware_version'), ByteField('bootloader'), ByteField('new_indicator'), ByteField('min_led_brightness'), ByteField('max_led_brightness'), WordField('adc_input_2'), WordField('adc_input_3'), WordField('adc_input_4'), WordField('adc_input_5'), WordField('adc_dc_input') ])
def error_information(): """ Error information """ return CoreCommandSpec(instruction='ER', response_fields=[ ByteField('type'), ByteField('parameter_a'), WordField('parameter_b'), WordField('parameter_c') ])
def basic_action(): """ Basic action spec """ return CoreCommandSpec(instruction='BA', request_fields=[ ByteField('type'), ByteField('action'), WordField('device_nr'), WordField('extra_parameter') ], response_fields=[ ByteField('type'), ByteField('action'), WordField('device_nr'), WordField('extra_parameter') ])
def general_configuration_max_specs(): """ Receives general configuration regarding maximum specifications (e.g. max number of input modules, max number of basic actions, ...) """ return CoreCommandSpec(instruction='GC', request_fields=[LiteralBytesField(1)], response_fields=[ ByteField('type'), ByteField('output'), ByteField('input'), ByteField('sensor'), ByteField('ucan'), WordField('groups'), WordField('basic_actions'), ByteField('shutters'), ByteField('shutter_groups') ])
def memory_write(length): """ Writes memory """ return CoreCommandSpec(instruction='MW', request_fields=[ CharField('type'), WordField('page'), ByteField('start'), ByteArrayField('data', length) ], response_fields=[ CharField('type'), WordField('page'), ByteField('start'), ByteField('length'), CharField('result') ])
def memory_read(): """ Reads memory """ return CoreCommandSpec(instruction='MR', request_fields=[ CharField('type'), WordField('page'), ByteField('start'), ByteField('length') ], response_fields=[ CharField('type'), WordField('page'), ByteField('start'), ByteArrayField('data', lambda length: length - 4) ])
def output_detail(): """ Received output detail information """ return CoreCommandSpec(instruction='OD', request_fields=[WordField('device_nr')], response_fields=[ WordField('device_nr'), ByteField('status'), ByteField('dimmer'), ByteField('dimmer_min'), ByteField('dimmer_max'), ByteField('timer_type'), ByteField('timer_type_standard'), WordField('timer'), WordField('timer_standard'), WordField('group_action'), ByteField('dali_output') ])
def event_information(): """ Event information """ return CoreCommandSpec(instruction='EV', response_fields=[ ByteField('type'), ByteField('action'), WordField('device_nr'), ByteArrayField('data', 4) ])
def module_information(): """ Receives module information """ return CoreCommandSpec(instruction='MC', request_fields=[ ByteField('module_nr'), ByteField('module_family') ], response_fields=[ ByteField('module_nr'), ByteField('module_family'), ByteField('module_type'), AddressField('address'), WordField('bus_errors'), ByteField('module_status') ])
def _word_decode(data): return WordField.decode(str(chr(data[0])) + str(chr(data[1])))