From b9e44d1e0964f5c6c99ec52b68a5a6e0bc1ac633 Mon Sep 17 00:00:00 2001 From: Uwe Hermann Date: Wed, 1 Feb 2012 18:59:18 +0100 Subject: [PATCH] srd: uart: Use strings for packet types. While this has a (small) performance penalty compared to using integers, it has the advantage of not requiring the use of magic numbers which need to be declared in both the UART decoder and all decoders which stack on top of UART. --- decoders/pan1321/pan1321.py | 5 +---- decoders/uart/uart.py | 40 ++++++++++++++++--------------------- 2 files changed, 18 insertions(+), 27 deletions(-) diff --git a/decoders/pan1321/pan1321.py b/decoders/pan1321/pan1321.py index 9c22637..e89b6a0 100644 --- a/decoders/pan1321/pan1321.py +++ b/decoders/pan1321/pan1321.py @@ -29,9 +29,6 @@ import sigrokdecode as srd # Annotation feed formats ANN_ASCII = 0 -# UART 'data' packet type. -T_DATA = 1 - # ... RX = 0 TX = 1 @@ -97,7 +94,7 @@ class Decoder(srd.Decoder): ptype, rxtx, pdata = data # For now, ignore all UART packets except the actual data packets. - if ptype != T_DATA: + if ptype != 'DATA': return # Append a new (ASCII) byte to the currently built/parsed command. diff --git a/decoders/uart/uart.py b/decoders/uart/uart.py index b70496f..f0f40c9 100644 --- a/decoders/uart/uart.py +++ b/decoders/uart/uart.py @@ -101,15 +101,18 @@ # [, , ] # # This is the list of s and their respective : -# - T_START: The data is the (integer) value of the start bit (0 or 1). -# - T_DATA: The data is the (integer) value of the UART data. Valid values +# - 'STARTBIT': The data is the (integer) value of the start bit (0 or 1). +# - 'DATA': The data is the (integer) value of the UART data. Valid values # range from 0 to 512 (as the data can be up to 9 bits in size). -# - T_PARITY: The data is the (integer) value of the parity bit (0 or 1). -# - T_STOP: The data is the (integer) value of the stop bit (0 or 1). -# - T_INVALID_START: The data is the (integer) value of the start bit (0 or 1). -# - T_INVALID_STOP: The data is the (integer) value of the stop bit (0 or 1). -# - T_PARITY_ERROR: The data is a tuple with two entries. The first one is +# - 'PARITYBIT': The data is the (integer) value of the parity bit (0 or 1). +# - 'STOPBIT': The data is the (integer) value of the stop bit (0 or 1). +# - 'INVALID STARTBIT': The data is the (integer) value of the start bit +# (0 or 1). +# - 'INVALID STOPBIT': The data is the (integer) value of the stop bit +# (0 or 1). +# - 'PARITY ERROR': The data is a tuple with two entries. The first one is # the expected parity value, the second is the actual parity value. +# - TODO: Frame error? # # The field is 0 for RX packets, 1 for TX packets. # @@ -151,15 +154,6 @@ ANN_HEX = 2 ANN_OCT = 3 ANN_BITS = 4 -# Protocol output packet types -T_START = 0 -T_DATA = 1 -T_PARITY = 2 -T_STOP = 3 -T_INVALID_START = 4 -T_INVALID_STOP = 5 -T_PARITY_ERROR = 6 - # Given a parity type to check (odd, even, zero, one), the value of the # parity bit, the value of the data, and the length of the data (5-9 bits, # usually 8 bits) return True if the parity is correct, False otherwise. @@ -284,7 +278,7 @@ class Decoder(srd.Decoder): # The startbit must be 0. If not, we report an error. if self.startbit[rxtx] != 0: self.put(self.frame_start[rxtx], self.samplenum, self.out_proto, - [T_INVALID_START, rxtx, self.startbit[rxtx]]) + ['INVALID STARTBIT', rxtx, self.startbit[rxtx]]) # TODO: Abort? Ignore rest of the frame? self.cur_data_bit[rxtx] = 0 @@ -294,7 +288,7 @@ class Decoder(srd.Decoder): self.state[rxtx] = GET_DATA_BITS self.put(self.frame_start[rxtx], self.samplenum, self.out_proto, - [T_START, rxtx, self.startbit[rxtx]]) + ['STARTBIT', rxtx, self.startbit[rxtx]]) self.put(self.frame_start[rxtx], self.samplenum, self.out_ann, [ANN_ASCII, ['Start bit', 'Start', 'S']]) @@ -328,7 +322,7 @@ class Decoder(srd.Decoder): self.state[rxtx] = GET_PARITY_BIT self.put(self.startsample[rxtx], self.samplenum - 1, self.out_proto, - [T_DATA, rxtx, self.databyte[rxtx]]) + ['DATA', rxtx, self.databyte[rxtx]]) s = 'RX: ' if (rxtx == RX) else 'TX: ' self.putx(rxtx, [ANN_ASCII, [s + chr(self.databyte[rxtx])]]) @@ -358,14 +352,14 @@ class Decoder(srd.Decoder): self.databyte[rxtx], self.options['num_data_bits']): # TODO: Fix range. self.put(self.samplenum, self.samplenum, self.out_proto, - [T_PARITY_BIT, rxtx, self.paritybit[rxtx]]) + ['PARITYBIT', rxtx, self.paritybit[rxtx]]) self.put(self.samplenum, self.samplenum, self.out_ann, [ANN_ASCII, ['Parity bit', 'Parity', 'P']]) else: # TODO: Fix range. # TODO: Return expected/actual parity values. self.put(self.samplenum, self.samplenum, self.out_proto, - [T_PARITY_ERROR, rxtx, (0, 1)]) # FIXME: Dummy tuple... + ['PARITY ERROR', rxtx, (0, 1)]) # FIXME: Dummy tuple... self.put(self.samplenum, self.samplenum, self.out_ann, [ANN_ASCII, ['Parity error', 'Parity err', 'PE']]) @@ -382,14 +376,14 @@ class Decoder(srd.Decoder): # Stop bits must be 1. If not, we report an error. if self.stopbit1[rxtx] != 1: self.put(self.frame_start[rxtx], self.samplenum, self.out_proto, - [T_INVALID_STOP, rxtx, self.stopbit1[rxtx]]) + ['INVALID STOPBIT', rxtx, self.stopbit1[rxtx]]) # TODO: Abort? Ignore the frame? Other? self.state[rxtx] = WAIT_FOR_START_BIT # TODO: Fix range. self.put(self.samplenum, self.samplenum, self.out_proto, - [T_STOP, rxtx, self.stopbit1[rxtx]]) + ['STOPBIT', rxtx, self.stopbit1[rxtx]]) self.put(self.samplenum, self.samplenum, self.out_ann, [ANN_ASCII, ['Stop bit', 'Stop', 'P']]) -- 2.30.2