예제 #1
0
    def parse(self, decryptionKey=None):
        if decryptionKey is not None:
            self.decrypt(decryptionKey)

        reader = BufferReader(self._data)
        reader.skip(2)

        if self.opCode == 7:
            try:
                self.payload = parseOpcode7(reader.getRemainingBytes())
            except CrownstoneException:
                self.payload = AdvUnknownData()
                self.payload.data = self._data
                raise CrownstoneException(
                    CrownstoneError.INVALID_SERVICE_DATA,
                    "Protocol not supported. Unknown data type. Could be because decryption failed."
                )
        elif self.opCode == 6:
            self.payload = parseOpCode6(reader.getRemainingBytes())
        else:
            self.payload = AdvUnknownData()
            self.payload.data = self._data
            raise CrownstoneException(
                CrownstoneError.INVALID_SERVICE_DATA,
                "Protocol not supported. Unknown opcode.")
예제 #2
0
 def load(self, data):
     reader = BufferReader(data)
     self.stateType = reader.getUInt16()
     self.id = reader.getUInt16()
     self.persistenceMode = reader.getUInt8()
     reserved = reader.getUInt8()
     self.payload = reader.getRemainingBytes()
예제 #3
0
    def parse(self, data: list):
        """
		Parses data.

		:returns True on success.
		"""
        try:
            reader = BufferReader(data)
            self.opCode = reader.getUInt16()
            self.payload = reader.getRemainingBytes()
            return True
        except CrownstoneError as e:
            _LOGGER.warning(F"Parse error: {e}")
            return False
예제 #4
0
	def parse(self, buffer: list):
		"""
		Parses data between size field and CRC.

		:returns True on success.
		"""
		reader = BufferReader(buffer)
		try:
			self.protocolMajor = reader.getUInt8()
			self.protocolMinor = reader.getUInt8()
			self.messageType   = reader.getUInt8()
			self.payload       = reader.getRemainingBytes()
			return True
		except CrownstoneError as e:
			_LOGGER.warning(F"Parse error: {e}")
			return False
예제 #5
0
	def _parse(self, reader: BufferReader):
		self.header.parse(reader)
		self.offset = reader.getUInt16()
		self.binaryChunk = reader.getRemainingBytes()
 def _deserialize(self, reader: BufferReader):
     self.header.deserialize(reader)
     self.offset = reader.getUInt16()
     self.binaryChunk = reader.getRemainingBytes()
 def _deserialize(self, reader: BufferReader):
     self.header.deserialize(reader)
     self.elementType = reader.getUInt8()
     self.elementSize = reader.getUInt8()
     self.elementData = reader.getRemainingBytes()