summaryrefslogtreecommitdiff
path: root/dexcom_reader/packetwriter.py
diff options
context:
space:
mode:
authorBen West <bewest@gmail.com>2014-05-24 16:42:13 -0700
committerBen West <bewest@gmail.com>2014-05-24 16:42:13 -0700
commit5d92368e5b10fb2d01ae25a2730e15cd05a84da6 (patch)
tree6f5264f423e8e5a9ddfd44f3222bc8ad215b6e2f /dexcom_reader/packetwriter.py
parent6b5ce2584b0fe2da991540a33c71b1f95cd8878a (diff)
prep for installable module
Diffstat (limited to 'dexcom_reader/packetwriter.py')
-rw-r--r--dexcom_reader/packetwriter.py49
1 files changed, 49 insertions, 0 deletions
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 @@
1import crc16
2import struct
3
4class PacketWriter(object):
5 MAX_PAYLOAD = 1584
6 MIN_LEN = 6
7 MAX_LEN = 1590
8 SOF = 0x01
9 OFFSET_SOF = 0
10 OFFSET_LENGTH = 1
11 OFFSET_CMD = 3
12 OFFSET_PAYLOAD = 4
13
14 def __init__(self):
15 self._packet = None
16
17 def Clear(self):
18 self._packet = None
19
20 def NewSOF(self, v):
21 self._packet[0] = chr(v)
22
23 def PacketString(self):
24 return ''.join(self._packet)
25
26 def AppendCrc(self):
27 self.SetLength()
28 ps = self.PacketString()
29 crc = crc16.crc16(ps, 0, len(ps))
30 for x in struct.pack('H', crc):
31 self._packet.append(x)
32
33 def SetLength(self):
34 self._packet[1] = chr(len(self._packet) + 2)
35
36 def _Add(self, x):
37 try:
38 len(x)
39 for y in x:
40 self._Add(y)
41 except:
42 self._packet.append(x)
43
44 def ComposePacket(self, command, payload=None):
45 assert self._packet is None
46 self._packet = ["\x01", None, "\x00", chr(command)]
47 if payload:
48 self._Add(payload)
49 self.AppendCrc()