1
0
mirror of https://github.com/myhdl/myhdl.git synced 2024-12-14 07:44:38 +08:00
myhdl/example/rs232/rs232_util.py
2003-02-03 20:21:46 +00:00

53 lines
1.2 KiB
Python

import operator
sec = 1e9
ODD, EVEN, MARK, SPACE = range(4)
class Error(Exception):
pass
class ParityError(Error):
pass
class StopBitError(Error):
pass
class Config(object):
""" rs232 configuration object.
Attributes:
baud_rate -- baud_rate in bits per second
n_bits -- number of data bits: 7 or 8
n_stops -- number of stop bits: 1 or 2
parity -- parity configuration: None, ODD, EVEN, MARK or SPACE
"""
__slots__ = ("baud_rate", "n_bits", "n_stops", "parity")
def __init__(self, baud_rate=9600, n_bits=8, n_stops=1, parity=None):
""" Return new Config object with actual or default parameters """
self.baud_rate = baud_rate
self.n_bits = n_bits
self.n_stops = n_stops
self.parity = parity
def parity(data, cfg):
""" Return data parity as configured """
if cfg == ODD:
return not reduceXor(data[8:])
elif cfg== EVEN:
return reduceXor(data[8:])
elif cfg == MARK:
return 1
elif cfg == SPACE:
return 0
def reduceXor(bv):
""" Return reduction xor of all bits in bv """
return reduce(operator.xor, [b for b in bv])