class CircularQueue(Queue): """Circular Variant of Queue.""" # Initialize the queue representation def _init(self, maxsize): self.queue = CircularBuffer(maxsize) def _qsize(self, len=len): return self.queue.count # Put a new item in the queue def _put(self, item): self.queue.put(item) # Get an item from the queue def _get(self): return self.queue.get()
def __init__(self, bufflen=1000, verbose=True): threading.Thread.__init__(self) self.verbose = verbose self.last_received = 0 self.total_received = 0 # Create the buffer for storing serial data self.buff = CircularBuffer(bufflen) self.start_time = time.time() self.logger = TimedLogger(self.start_time, textcolor=self.LOGGING_COLOR) # Set as a daemon so that this thread will exit correctly # when the parent receives a kill signal self.daemon = True
class globals: MY_NODE = 'gateway' # TODO, read this from environment running = True # Try to read n bytes from serial port, then unblock NUM_BYTES_TO_READ: int = 10 # Ring buffer for incoming data stream rxBuffer: CircularBuffer = CircularBuffer() # Sets up serial port. Xbee is in Transparent Mode xBee = serial.Serial('/dev/ttyUSB0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1) msgParser: MessageStreamParser = MessageStreamParser( recieveMessageCallback) currentData: sensorData = sensorData()
class InputBuffer(threading.Thread): __metaclass__ = ABCMeta # Default logging color LOGGING_COLOR = TimedLogger.CYAN def __init__(self, bufflen=1000, verbose=True): threading.Thread.__init__(self) self.verbose = verbose self.last_received = 0 self.total_received = 0 # Create the buffer for storing serial data self.buff = CircularBuffer(bufflen) self.start_time = time.time() self.logger = TimedLogger(self.start_time, textcolor=self.LOGGING_COLOR) # Set as a daemon so that this thread will exit correctly # when the parent receives a kill signal self.daemon = True @abstractmethod def get_reader(self): pass def get_buffer(self): return self.buff def get(self, wait=None): return self.buff.get(wait=wait) def stop(self): self._Thread__stop() def run(self): reader = self.get_reader() while True: data = "" is_html = False hdr = None while True: char = reader.read(1) if len(char) == 0: break self.total_received += 1 if ord(char) == HMTLprotocol.MsgHdr.STARTCODE: # This is the start of an HMTL data message is_html = True if is_html: data += char if len(data) == HMTLprotocol.MsgHdr.length(): # Received enough data for a full message header hdr = HMTLprotocol.MsgHdr.from_data(data) # TODO: Perform basic header validation here if hdr: if len(data) >= hdr.length: # Reached end of message break else: # Arduino print output lines are terminated with \r\n if char == '\r': continue if char == '\n': break data += char if data and len(data): self.last_received = time.time() item = InputItem(data, self.last_received, is_html) self.buff.put(item) if self.verbose: item.print(self.logger)
class myVMRSerial: port = '' ser = False B = [] G = [] A = [] P = [] T = [] bufferSize = 1000 cbB = CircularBuffer(bufferSize) cbG = CircularBuffer(bufferSize) cbA = CircularBuffer(bufferSize) cbP = CircularBuffer(bufferSize) cbT = CircularBuffer(bufferSize) def __init__(self, port="COM3"): try: self.ser = serial.Serial(port, 115200, timeout=.5) # open serial port print(self.ser.name) time.sleep(.2) """ self.readThread = threading.Thread(target=self.readData) self.readThread.setDaemon(True) self.ser.reset_input_buffer() self.readThread.start() """ except Exception as e: print(e) quit(1) def readLine(self): line = self.ser.readline().decode("utf-8")[:-2] return line def getData(self): try: line = self.readLine() data = [float(d) for d in (line.split(" "))] n = int(data[0]) dLen = len(data) if dLen not in [4, 10, 12]: print("Line = ", line) print("Line data length = ", dLen) return #if len(data) >= 4: self.setB(data[1:4]) # self.B = data[1:4] # print("B = ", self.B) if dLen == 10: self.setA(data[4:7]) self.setG(data[7:11]) # print("G = ", self.G) # print("A = ", self.A) if dLen == 12: self.setP(data[10]) self.setT(data[11]) # print("Atm. pressure: ", self.P, " mbar") # print("Sensor temperature ", data[11], " C") return self.B, self.A, self.G except Exception as e: pass def readData(self, progress_callback): while True: self.getData() def setB(self, x): self.B = x self.cbB.append(x) def setA(self, x): self.A = x self.cbA.append(x) def setG(self, x): self.G = x self.cbG.append(x) def setP(self, x): self.P = x self.cbP.append(x) def setT(self, x): self.T = x self.cbT.append(x)
# Fig. 19.12: fig19_12.py # Show multiple threads modifying shared object. from CircularBuffer import CircularBuffer from ProduceInteger import ProduceInteger from ConsumeInteger import ConsumeInteger # initialize number and threads buffer = CircularBuffer() producer = ProduceInteger( "Producer", buffer, 11, 20 ) consumer = ConsumeInteger( "Consumer", buffer, 10 ) print "Starting threads...\n" buffer.displayState() # start threads producer.start() consumer.start() # wait for threads to terminate producer.join() consumer.join() print "\nAll threads have terminated." ########################################################################## # (C) Copyright 2002 by Deitel & Associates, Inc. and Prentice Hall. # # All Rights Reserved. # # # # DISCLAIMER: The authors and publisher of this book have used their #
def _init(self, maxsize): self.queue = CircularBuffer(maxsize)
# Fig. 19.12: fig19_12.py # Show multiple threads modifying shared object. from CircularBuffer import CircularBuffer from ProduceInteger import ProduceInteger from ConsumeInteger import ConsumeInteger # initialize number and threads buffer = CircularBuffer() producer = ProduceInteger("Producer", buffer, 11, 20) consumer = ConsumeInteger("Consumer", buffer, 10) print "Starting threads...\n" buffer.displayState() # start threads producer.start() consumer.start() # wait for threads to terminate producer.join() consumer.join() print "\nAll threads have terminated." ########################################################################## # (C) Copyright 2002 by Deitel & Associates, Inc. and Prentice Hall. # # All Rights Reserved. # # # # DISCLAIMER: The authors and publisher of this book have used their #