diff zb.py @ 5:5d5963d542bc

More tidyups & fixes. - Remove ability to set stuff like RSSI - it is pointless. - Rejig class hierarchy so it makes more sense. - Convert to list of ordinals earlier.
author darius@inchoate.localdomain
date Wed, 31 Oct 2007 20:47:32 +1030
parents ed7abe6f59c2
children 9c499d923544
line wrap: on
line diff
--- a/zb.py	Wed Oct 31 20:01:54 2007 +1030
+++ b/zb.py	Wed Oct 31 20:47:32 2007 +1030
@@ -61,28 +61,19 @@
     PKT_DESC = "RX Packet: 16 bit address"
     ADDR_SIZE = 2
     
-    def setsender(self, value):
-        self.resize(self.ADDR_SIZE)
-        for i, j in zip(reversed(range(self.ADDR_SIZE)), range(0, self.ADDR_SIZE * 8, 8)):
-            self.data[i] = (value & (0xff << j)) >> j
-
     def getsender(self):
         value = 0
         for i, j in zip(reversed(range(self.ADDR_SIZE)), range(0, self.ADDR_SIZE * 8, 8)):
             value |= self.data[i] << j
         return value
-    sender = property(getsender, setsender)
+    sender = property(getsender, None)
+
+    rssi = property(lambda s: -1 * s.data[s.ADDR_SIZE], None)
 
-    def setrssi(self, value):
-        self.resize(self.ADDR_SIZE + 1)
-        self.data[self.ADDR_SIZE] = -1 * value
-    rssi = property(lambda s: -1 * s.data[s.ADDR_SIZE], setrssi)
-    
-    def setflags(self, value):
-        self.resize(self.ADDR_SIZE + 2)
-        self.data[self.ADDR_SIZE + 1] = value
-    flags = property(lambda s: s.data[s.ADDR_SIZE + 1], setflags)
+    flags = property(lambda s: s.data[s.ADDR_SIZE + 1], None)
 
+    payload = property(lambda s: s.data[s.ADDR_SIZE + 2:], None)
+                       
 class RX_64_Bit(RX_16_Bit):
     PKT_TYPE = 0x80
     PKT_DESC = "RX Packet: 64 bit address"
@@ -95,7 +86,10 @@
     def setnsamples(self, value):
         self.resize(self.ADDR_SIZE + 3)
         self.data[self.ADDR_SIZE + 2] = value
-    nsamples = property(lambda s: s.data[s.ADDR_SIZE + 2], setnsamples)
+
+    def getnsamples(self):
+        return self.data[self.ADDR_SIZE + 2]
+    nsamples = property(getnsamples, setnsamples)
 
     def setmask(self, value):
         self.resize(self.ADDR_SIZE + 5)
@@ -124,16 +118,22 @@
 
         return rtn
 
-class RXIO_64_Bit(RX_16_Bit):
+class RXIO_64_Bit(RXIO_16_Bit):
     PKT_TYPE = 0x82
     PKT_DESC = "RXIO Packet: 64 bit address"
     ADDR_SIZE = 8
     
-class TX_16_Bit(PktBase):
+class TX_16_Bit(RX_64_Bit):
     PKT_TYPE = 0x00
     PKT_DESC = "TX Packet: 16 bit address"
 
-class TX_64_Bit(PktBase):
+    def setsender(self, value):
+        self.resize(self.ADDR_SIZE)
+        for i, j in zip(reversed(range(self.ADDR_SIZE)), range(0, self.ADDR_SIZE * 8, 8)):
+            self.data[i] = (value & (0xff << j)) >> j
+    sender = property(RX_64_Bit.getsender, setsender)
+
+class TX_64_Bit(RX_64_Bit):
     PKT_TYPE = 0x00
     PKT_DESC = "TX Packet: 64 bit address"
 
@@ -183,14 +183,17 @@
         self.rx_cnt = 0 # Packet count
         
         self.pktq = []
-    
+
+    def writedata(self, s, data):
+        s.write("".join(map(str, data)))
+                
     def getdata(self, s):
         l = []
         while (1):
             a = s.read()
             if (a == ''):
                 break
-            l.append(a)
+            l.append(ord(a))
     
         return self.process(l)
     
@@ -198,27 +201,27 @@
         pktcount = 0
         for d in data:
             if (self.state == 'init'):
-                if (d != '\x7e'):
-                    print "Framing error, got 0x%02x, expected 0x7f" % (ord(d))
+                if (d != 0x7e):
+                    print "Framing error, got 0x%02x, expected 0x7e" % (d)
                     self.fr_err += 1
                     continue
                 
                 self.state = 'sizemsb'
             elif (self.state == 'sizemsb'):
-                self.bufmsb = ord(d)
+                self.bufmsb = d
                 self.state = 'sizelsb'
             elif (self.state == 'sizelsb'):
                 self.dataleft = self.bufmsb << 8 | \
-                                ord(d)
+                                d
                 self.state = 'data'
             elif (self.state == 'data'):
-                self.buffer.append(ord(d))
+                self.buffer.append(d)
                 self.dataleft = self.dataleft - 1
                 if (self.dataleft == 0):
                     self.state = 'cksum'
             elif (self.state == 'cksum'):
                 pktsum = reduce(lambda x, y: x + y, self.buffer) & 0xff
-                rxcksum = ord(d)
+                rxcksum = d
                 self.state = 'init'
                 if (pktsum + rxcksum != 0xff):
                     self.buffer = []
@@ -226,7 +229,7 @@
                     print "Checksum error, got 0x%02x, expected 0x%02x" % \
                           (rxcksum, 0xff - pktsum)
                 else:
-                    print "Got a packet - " + str(self.buffer)
+                    #print "Got a packet - " + str(self.buffer)
                     p = Packets.Build(self.buffer)
                     self.pktq.append(p)
                     self.buffer = []
@@ -250,16 +253,16 @@
 
 
 # 0x0001 (-36dBm) -> 1 samples, mask 0x000f, DIO - 0x00f
-goodtest = ['~', '\x00', '\n', '\x83', '\x00', '\x01', '$', '\x00', '\x01', '\x00', '\x0f', '\x00', '\x0f', '8']
+goodtest = [126, 0, 10, 131, 0, 1, 36, 0, 1, 0, 15, 0, 15, 56]
 
 # Checksum error
-badtest = ['~', '\x00', '\n', '\x83', '\x00', '\x01', '$', '\x00', '\x01', '\x00', '\x0f', '\x00', '\x0e', '8']
+badtest = [126, 0, 10, 131, 0, 1, 36, 0, 1, 0, 15, 0, 14, 56]
 
 #0x0005 (-36dBm) -> 1 samples, mask 0x020e, DIO - 0x00e, ADC0 - 0x3ff
-adctest = ['~', '\x00', '\x0c', '\x83', '\x00', '\x05', '$', '\x00', '\x01', '\x02', '\x0e', '\x00', '\x0e', '\x03', '\xff', '2' ]
+adctest = [126, 0, 12, 131, 0, 5, 36, 0, 1, 2, 14, 0, 14, 3, 255, 50]
 
 # Exception
-badpkttypetest = ['~', '\x00', '\x03', '\x0a', 'V', 'L', 'S']
+badpkttypetest = [126, 0, 3, 10, 86, 76, 83]
 
 up = Packets()
 up.process(goodtest)