onewire: combined reset and presence detect events, avoid unneeded overdrive exit...
authorIztok Jeras <iztok.jeras@gmail.com>
Fri, 13 Jul 2012 20:59:12 +0000 (22:59 +0200)
committerIztok Jeras <iztok.jeras@gmail.com>
Sun, 15 Jul 2012 13:02:57 +0000 (15:02 +0200)
decoders/onewire_link/onewire_link.py
decoders/onewire_network/onewire_network.py

index 44bc4f8bd0d0f8a641abb5e800ebda92cdb2d5c4..d111882f8e81a1d5fc91fbec0d0a2f9cc61a3151 100644 (file)
@@ -189,21 +189,19 @@ class Decoder(srd.Decoder):
                         # Save the sample number for the falling edge.
                         self.rise = self.samplenum
                         self.state = "WAIT FOR PRESENCE DETECT"
-                        self.put(self.fall, self.rise, self.out_ann, [0, ['RESET']])
-                        self.put(self.fall, self.rise, self.out_proto, ['RESET', 0])
                         # Reset the timer.
                         self.fall = self.samplenum
                         # Exit overdrive mode
-                        self.put(self.fall, self.cnt_bit[self.overdrive], self.out_ann, [0, ['EXIT OVERDRIVE MODE']])
-                        self.overdrive = 0
+                        if (self.overdrive):
+                            self.put(self.fall, self.cnt_bit[self.overdrive], self.out_ann, [0, ['EXIT OVERDRIVE MODE']])
+                            self.overdrive = 0
+                        # Clear command bit counter and data register
                         self.bit_cnt = 0
                         self.command = 0
                     elif ((self.samplenum - self.fall > self.cnt_overdrive_reset) and (self.overdrive)):
                         # Save the sample number for the falling edge.
                         self.rise = self.samplenum
                         self.state = "WAIT FOR PRESENCE DETECT"
-                        self.put(self.fall, self.rise, self.out_ann, [0, ['RESET']])
-                        self.put(self.fall, self.rise, self.out_proto, ['RESET', 0])
                         # Reset the timer.
                         self.fall = self.samplenum
                     # Otherwise this is assumed to be a data bit.
@@ -218,7 +216,7 @@ class Decoder(srd.Decoder):
                     # create presence detect event
                     if (self.present) :  self.state = 'WAIT FOR FALLING EDGE'
                     else              :  self.state = 'WAIT FOR RISING EDGE'
-                    self.put(self.samplenum, 0, self.out_ann, [0, ['PRESENCE: ' + "False" if self.present else "True"]])
-                    self.put(self.samplenum, 0, self.out_proto, ['PRESENCE', self.present])
+                    self.put(self.samplenum, 0, self.out_ann, [0, ['RESET/PRESENCE: %s' % ('False' if self.present else 'True')]])
+                    self.put(self.samplenum, 0, self.out_proto, ['RESET/PRESENCE', not self.present])
             else:
                 raise Exception('Invalid state: %d' % self.state)
index 5587f974e44c5f9740d43dcfd6fd7edd582ccff4..d2b86a0622f0d7d949d5ceb9fc9d97f485b5b9a5 100644 (file)
@@ -77,7 +77,7 @@ class Decoder(srd.Decoder):
         [code, val] = data
 
         # State machine.
-        if (code == "RESET"):
+        if (code == "RESET/PRESENCE"):
             self.state = "COMMAND"
             self.search = "P"
             self.bit_cnt = 0