From 5d92368e5b10fb2d01ae25a2730e15cd05a84da6 Mon Sep 17 00:00:00 2001 From: Ben West Date: Sat, 24 May 2014 16:42:13 -0700 Subject: prep for installable module --- dexcom_reader/packetwriter.py | 49 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 dexcom_reader/packetwriter.py (limited to 'dexcom_reader/packetwriter.py') diff --git a/dexcom_reader/packetwriter.py b/dexcom_reader/packetwriter.py new file mode 100644 index 0000000..6e03342 --- /dev/null +++ b/dexcom_reader/packetwriter.py @@ -0,0 +1,49 @@ +import crc16 +import struct + +class PacketWriter(object): + MAX_PAYLOAD = 1584 + MIN_LEN = 6 + MAX_LEN = 1590 + SOF = 0x01 + OFFSET_SOF = 0 + OFFSET_LENGTH = 1 + OFFSET_CMD = 3 + OFFSET_PAYLOAD = 4 + + def __init__(self): + self._packet = None + + def Clear(self): + self._packet = None + + def NewSOF(self, v): + self._packet[0] = chr(v) + + def PacketString(self): + return ''.join(self._packet) + + def AppendCrc(self): + self.SetLength() + ps = self.PacketString() + crc = crc16.crc16(ps, 0, len(ps)) + for x in struct.pack('H', crc): + self._packet.append(x) + + def SetLength(self): + self._packet[1] = chr(len(self._packet) + 2) + + def _Add(self, x): + try: + len(x) + for y in x: + self._Add(y) + except: + self._packet.append(x) + + def ComposePacket(self, command, payload=None): + assert self._packet is None + self._packet = ["\x01", None, "\x00", chr(command)] + if payload: + self._Add(payload) + self.AppendCrc() -- cgit v1.2.3