def _translate(self, element): if isinstance(element, KeyDataElement): self.__translator.translate_control_packet( MultiCastCommand(element.key)) elif isinstance(element, KeyPayloadDataElement): self.__translator.translate_control_packet( MultiCastCommand(element.key, element.payload))
def start_resume_commands(self): commands = list() # change the retina key it transmits with # (based off if its right or left) if self._position == self.RIGHT_RETINA: key_set_command = self.MANAGEMENT_BIT | self.RIGHT_RETINA_KEY_SET else: key_set_command = self.MANAGEMENT_BIT | self.LEFT_RETINA_KEY_SET # to ensure populations receive the correct packets, this needs to be # different based on which retina key_set_payload = (self._virtual_chip_x << 24 | self._virtual_chip_y << 16) commands.append( MultiCastCommand(key=key_set_command, payload=key_set_payload, repeat=5, delay_between_repeats=1000)) # make retina enabled (dependent on if its a left or right retina if self._position == self.RIGHT_RETINA: enable_command = self.MANAGEMENT_BIT | self.RIGHT_RETINA_ENABLE else: enable_command = self.MANAGEMENT_BIT | self.LEFT_RETINA_ENABLE commands.append( MultiCastCommand(key=enable_command, payload=1, repeat=5, delay_between_repeats=1000)) return commands
def set_retina_transmission(self, retina_key=RetinaKey.NATIVE_128_X_128, retina_payload=None, time=None): """ Set the retina transmission key :param retina_key: the new key for the retina :param retina_payload: \ the new payload for the set retina key command packet :type retina_payload: enum or None :param time: when to transmit this packet :return: the command to send :rtype: \ :py:class:`spinn_front_end_common.utility_models.multi_cast_command.MultiCastCommand` """ if retina_key == RetinaKey.FIXED_KEY and retina_payload is None: retina_payload = RetinaPayload.EVENTS_IN_PAYLOAD if retina_payload is None: retina_payload = RetinaPayload.NO_PAYLOAD if (retina_key == RetinaKey.FIXED_KEY and retina_payload != RetinaPayload.EVENTS_IN_PAYLOAD): raise ConfigurationException( "If the Retina Key is FIXED_KEY, the payload must be" " EVENTS_IN_PAYLOAD") return MultiCastCommand(key=self.set_retina_transmission_key, payload=retina_key.value | retina_payload.value, time=time)
def poll_individual_sensor_continuously( self, sensor_id, time_in_ms, time=None): return MultiCastCommand( key=self.poll_individual_sensor_continuously_key, payload=((sensor_id << _PAYLOAD_SENSOR_ID_OFFSET) | (time_in_ms << _PAYLOAD_OFFSET_FOR_SENSOR_TIME)), time=time)
def pause_stop_commands(self): # disable retina disable_command = self._MANAGEMENT_BIT | (self._RIGHT_RETINA_DISABLE if self.__is_right else self._LEFT_RETINA_DISABLE) return [ MultiCastCommand(disable_command, payload=0, repeat=5, delay_between_repeats=1000) ]
def push_bot_led_set_frequency(self, frequency, time=None): self._check_for_pushbot_mode() return MultiCastCommand(key=self.push_bot_led_set_frequency_key, payload=frequency, time=time)
def push_bot_led_total_period(self, total_period, time=None): self._check_for_pushbot_mode() return MultiCastCommand(key=self.push_bot_led_total_period_key, payload=total_period, time=time)
def push_bot_led_front_active_time(self, active_time, time=None): self._check_for_pushbot_mode() return MultiCastCommand(key=self.push_bot_led_front_active_time_key, payload=active_time, time=time)
def poll_sensors_once(self, sensor_id, time=None): return MultiCastCommand( key=self.poll_sensors_once_key, payload=(sensor_id << _PAYLOAD_SENSOR_ID_OFFSET), time=time)
def push_bot_speaker_set_melody(self, melody, time=None): self._check_for_pushbot_mode() return MultiCastCommand(key=self.push_bot_speaker_set_melody_key, payload=melody, time=time)
def bias_values(self, bias_id, bias_value, time=None): return MultiCastCommand(key=self.bias_values_key, payload=((bias_id << 0) | (bias_value << 8)), time=time)
def master_slave_set_master_clock_active(self, time=None): return MultiCastCommand( key=self.master_slave_key, payload=_PAYLOAD_MASTER_SLAVE_SET_MASTER_CLOCK_ACTIVE, time=time)
def pwm_pin_output_timer_c_channel_1_ratio(self, timer_period, time=None): return MultiCastCommand( key=self.pwm_pin_output_timer_c_channel_1_ratio_key, payload=timer_period, time=time)
def reset_retina(self, time=None): return MultiCastCommand(key=self.reset_retina_key, time=time)
def generic_motor1_raw_output_leak_to_0(self, pwm_signal, time=None): return MultiCastCommand( key=self.generic_motor1_raw_output_leak_to_0_key, payload=pwm_signal, time=time)
def pwm_pin_output_timer_c_duration(self, timer_period, time=None): return MultiCastCommand(key=self.pwm_pin_output_timer_c_duration_key, payload=timer_period, time=time)
def generic_motor0_raw_output_permanent(self, pwm_signal, time=None): return MultiCastCommand( key=self.generic_motor0_raw_output_permanent_key, payload=pwm_signal, time=time)
def generic_motor_total_period(self, time_in_ms, time=None): return MultiCastCommand(key=self.generic_motor_total_period_key, payload=time_in_ms, time=time)
def generic_motor_disable(self, time=None): return MultiCastCommand(key=self.enable_disable_motor_key, payload=0, time=time)
def push_bot_motor_1_permanent(self, velocity, time=None): self._check_for_pushbot_mode() return MultiCastCommand(key=self.push_bot_motor_1_permanent_key, payload=velocity, time=time)
def set_output_pattern_for_payload(self, payload, time=None): return MultiCastCommand(key=self.set_output_pattern_for_payload_key, payload=payload, time=time)
def push_bot_motor_1_leaking_towards_zero(self, velocity, time=None): self._check_for_pushbot_mode() return MultiCastCommand( key=self.push_bot_motor_1_leaking_towards_zero_key, payload=velocity, time=time)
def remove_payload_logic_to_current_output(self, payload, time=None): return MultiCastCommand( key=self.remove_payload_logic_to_current_output_key, payload=payload, time=time)
def _translate(self, label, key, payload=None): translator = self.__translators[label] if payload is None: translator.translate_control_packet(MultiCastCommand(key)) else: translator.translate_control_packet(MultiCastCommand(key, payload))
def set_payload_pins_to_high_impedance(self, payload, time=None): return MultiCastCommand( key=self.set_payload_pins_to_high_impedance_key, payload=payload, time=time)
def query_state_of_io_lines(self, time=None): return MultiCastCommand(key=self.query_state_of_io_lines_key, time=time)
def turn_off_sensor_reporting(self, sensor_id, time=None): return MultiCastCommand( key=self.turn_off_sensor_reporting_key, payload=(sensor_id << _PAYLOAD_SENSOR_ID_OFFSET), time=time)