def _bytes_to_varuint(value): result = 0 bitpos = 0 for c in value: val = char_to_byte(c) result |= (val & 0x7F) << bitpos bitpos += 7 if (val & 0x80) == 0: return result return None
def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) yield cg.register_component(var, config) yield switch.register_switch(var, config) yield uart.register_uart_device(var, config) data = config[CONF_DATA] if isinstance(data, binary_type): data = [HexInt(char_to_byte(x)) for x in data] cg.add(var.set_data(data))
def uart_write_to_code(config, action_id, template_arg, args): var = cg.new_Pvariable(action_id, template_arg) yield cg.register_parented(var, config[CONF_ID]) data = config[CONF_DATA] if isinstance(data, binary_type): data = [char_to_byte(x) for x in data] if cg.is_template(data): templ = yield cg.templatable(data, args, cg.std_vector.template(cg.uint8)) cg.add(var.set_data_template(templ)) else: cg.add(var.set_data_static(data)) yield var
def cpp_string_escape(string, encoding='utf-8'): def _should_escape(byte): # type: (int) -> bool if not 32 <= byte < 127: return True if byte in (char_to_byte('\\'), char_to_byte('"')): return True return False if isinstance(string, text_type): string = string.encode(encoding) result = '' for character in string: character = char_to_byte(character) if _should_escape(character): result += '\\%03o' % character else: result += chr(character) return '"' + result + '"'
def _run_once(self): if not self._socket_open_event.wait(0.1): return # Preamble if char_to_byte(self._recv(1)[0]) != 0x00: raise APIConnectionError("Invalid preamble") length = self._recv_varint() msg_type = self._recv_varint() raw_msg = self._recv(length) if msg_type not in MESSAGE_TYPE_TO_PROTO: _LOGGER.debug("Skipping message type %s", msg_type) return msg = MESSAGE_TYPE_TO_PROTO[msg_type]() msg.ParseFromString(raw_msg) _LOGGER.debug("Got message: %s:\n%s", type(msg), indent(str(msg))) for msg_handler in self._message_handlers[:]: msg_handler(msg) self._handle_internal_messages(msg)
def _should_escape(byte): # type: (int) -> bool if not 32 <= byte < 127: return True if byte in (char_to_byte('\\'), char_to_byte('"')): return True return False
def recv_decode(sock, amount, decode=True): data = sock.recv(amount) if not decode: return data return [char_to_byte(x) for x in data]
def _recv_varint(self): raw = bytes() while not raw or char_to_byte(raw[-1]) & 0x80: raw += self._recv(1) return _bytes_to_varuint(raw)