uart: Immediately skip reception of parity bits when not applicable
authorGerhard Sittig <gerhard.sittig@gmx.net>
Tue, 14 Mar 2017 14:35:27 +0000 (15:35 +0100)
committerGerhard Sittig <gerhard.sittig@gmx.net>
Tue, 14 Mar 2017 18:26:21 +0000 (19:26 +0100)
When the UART frame does not contain a parity bit, then immediately
advance to reception of stop bits after all data bits were received.

This eliminates the necessity to run the parity check routine when
parity does not apply in the first place. Without this change, some
"dummy" sample needs to get inspected for correct operation of the
state machine.

decoders/uart/pd.py

index 070a2f419c3f108b63c7748b08e30e62f142f378..51b0504201e56e4fe883aac06baa9925fdeb83ee 100644 (file)
@@ -263,7 +263,11 @@ class Decoder(srd.Decoder):
             self.cur_data_bit[rxtx] += 1
             return
 
+        # Skip to either reception of the parity bit, or reception of
+        # the STOP bits if parity is not applicable.
         self.state[rxtx] = 'GET PARITY BIT'
+        if self.options['parity_type'] == 'none':
+            self.state[rxtx] = 'GET STOP BITS'
 
         self.putpx(rxtx, ['DATA', rxtx,
             (self.datavalue[rxtx], self.databits[rxtx])])
@@ -322,11 +326,6 @@ class Decoder(srd.Decoder):
         return None
 
     def get_parity_bit(self, rxtx, signal):
-        # If no parity is used/configured, skip to the next state immediately.
-        if self.options['parity_type'] == 'none':
-            self.state[rxtx] = 'GET STOP BITS'
-            return
-
         # Skip samples until we're in the middle of the parity bit.
         if not self.reached_bit(rxtx, self.options['num_data_bits'] + 1):
             return