ACPI.py 632 B

12345678910111213141516171819202122
  1. import struct
  2. class APCI:
  3. START = 0x68
  4. def __init__(self, length=0, send_seq=0, recv_seq=0):
  5. self.length = length
  6. self.send_seq = send_seq
  7. self.recv_seq = recv_seq
  8. def pack(self):
  9. return struct.pack('!BBHH', self.START, self.length, self.send_seq << 1, self.recv_seq << 1)
  10. @classmethod
  11. def unpack(cls, data):
  12. if len(data) < 6 or data[0] != cls.START:
  13. return None
  14. length = data[1]
  15. send_seq = (struct.unpack('!H', data[2:4])[0]) >> 1
  16. recv_seq = (struct.unpack('!H', data[4:6])[0]) >> 1
  17. return cls(length, send_seq, recv_seq)