#!/usr/bin/env python # Copyright (c) 2015 Freescale Semiconductor, Inc. # Copyright 2016-2017 NXP # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause import struct from .codec import (MessageType, MessageInfo, Codec, CodecError) class BasicCodec(Codec): """Version of this codec. Args: Codec (code.Codec): Inherit and implement codec interface functions. """ BASIC_CODEC_VERSION = 1 def start_write_message(self, msgInfo): header = (self.BASIC_CODEC_VERSION << 24) \ | ((msgInfo.service & 0xff) << 16) \ | ((msgInfo.request & 0xff) << 8) \ | (msgInfo.type.value & 0xff) self.write_uint32(header) self.write_uint32(msgInfo.sequence) def _write(self, fmt, value): self._buffer += struct.pack(fmt, value) self._cursor += struct.calcsize(fmt) def write_bool(self, value): self._write('> 24 if version != self.BASIC_CODEC_VERSION: raise CodecError("unsupported codec version %d" % version) service = (header >> 16) & 0xff request = (header >> 8) & 0xff msgType = MessageType(header & 0xff) return MessageInfo(type=msgType, service=service, request=request, sequence=sequence) def _read(self, fmt): result = struct.unpack_from(fmt, self._buffer, self._cursor) self._cursor += struct.calcsize(fmt) return result[0] def read_bool(self): return self._read('