def run(self, target_node_id): """Run the code on the Thymio. """ payload = Message.uint16array_to_bytes([ target_node_id, ]) msg = Message(Message.ID_RUN, self.host_node_id, payload) self.send(msg)
def reset(self, target_node_id): """Reset the Thymio. """ payload = Message.uint16array_to_bytes([ target_node_id, ]) msg = Message(Message.ID_RESET, self.host_node_id, payload) self.send(msg)
def get_node_description(self, target_node_id): """Send a GET_NODE_DESCRIPTION message. """ payload = Message.uint16array_to_bytes([ target_node_id, Message.PROTOCOL_VERSION ]) msg = Message(Message.ID_GET_NODE_DESCRIPTION, self.host_node_id, payload) self.send(msg)
def set_variables(self, target_node_id, chunk_offset, chunk): """Send a SET_VARIABLES message. """ payload = Message.uint16array_to_bytes([ target_node_id, chunk_offset ] + chunk) msg = Message(Message.ID_SET_VARIABLES, self.host_node_id, payload) self.send(msg)
def get_node_description_fragment(self, target_node_id, fragment): """Send a ID_GET_NODE_DESCRIPTION_FRAGMENT message. """ payload = Message.uint16array_to_bytes([ target_node_id, Message.PROTOCOL_VERSION, fragment ]) msg = Message(Message.ID_GET_NODE_DESCRIPTION_FRAGMENT, self.host_node_id, payload) self.send(msg)
def set_bytecode(self, target_node_id, bytecode, address=0): """Set the bytecode by sending one or more SET_BYTECODE messages. """ size = len(bytecode) i = 0 while i < size: size_chunk = min(size - i, 256) payload = Message.uint16array_to_bytes([ target_node_id, address + i ] + bytecode[i:i + size_chunk]) msg = Message(Message.ID_SET_BYTECODE, self.host_node_id, payload) self.send(msg) i += size_chunk
def get_variables(self, target_node_id, chunk_offset=0, chunk_length=None): """Send a GET_VARIABLES message. """ if target_node_id is not None: if chunk_length is None: chunk_length = (self.get_target_node_var_total_size(target_node_id) - chunk_offset) payload = Message.uint16array_to_bytes([ target_node_id, chunk_offset, chunk_length ]) msg = Message(Message.ID_GET_VARIABLES, self.host_node_id, payload) self.remote_nodes[target_node_id].expected_var_end = chunk_offset + chunk_length self.send(msg)
def get_device_info(self, target_node_id, info=None): """Request device info (all available by default). """ if info is None: self.get_device_info(target_node_id, Message.DEVICE_INFO_NAME) self.get_device_info(target_node_id, Message.DEVICE_INFO_THYMIO2_RF_SETTINGS) self.get_device_info(target_node_id, Message.DEVICE_INFO_UUID) else: payload = Message.uint16array_to_bytes([ target_node_id, info ]) msg = Message(Message.ID_GET_DEVICE_INFO, self.host_node_id, payload) self.send(msg)
def send(self, msg: Message) -> None: """Send a message. """ with self.output_lock: if self.debug: print(">", msg) try: self.io.write(msg.serialize()) except Exception as error: self.comm_error = error if self.on_comm_error: self.on_comm_error("write: " + error) raise error
def read_message(self) -> Message: """Read a complete message. """ try: payload_len = self.read_uint16() source_node = self.read_uint16() id = self.read_uint16() payload = self.io.read(payload_len) msg = Message(id, source_node, payload) return msg except Exception as error: self.comm_error = error raise error
def list_nodes(self): """Send a LIST_NODES message. """ payload = Message.uint16array_to_bytes([Message.PROTOCOL_VERSION]) msg = Message(Message.ID_LIST_NODES, self.host_node_id, payload) self.send(msg)