Exemple #1
0
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()
Exemple #2
0
    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
Exemple #3
0
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()
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
# 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     #
Exemple #7
0
 def _init(self, maxsize):
     self.queue = CircularBuffer(maxsize)
Exemple #8
0
# 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     #