def __init__(self, threadID, name, queue, max_readings, serial_port_builder, port, baud, CustomSerial=None, isFast=True): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.queue = queue self.connected = False self.max_readings = max_readings self.serial_port_builder = serial_port_builder self.port = port self.baudrate = baud self.custom_serial = CustomSerial self.is_stopped = False self.build_serial() self.processor = ATTMatrixHitProcessor() self.isFast = isFast self.publisher = None
class ThreadedSerialReader (threading.Thread): def __init__(self, threadID, name, queue, max_readings, serial_port_builder, port, baud, CustomSerial=None, isFast=True): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.queue = queue self.connected = False self.max_readings = max_readings self.serial_port_builder = serial_port_builder self.port = port self.baudrate = baud self.custom_serial = CustomSerial self.is_stopped = False self.build_serial() self.processor = ATTMatrixHitProcessor() self.isFast = isFast self.publisher = None #self.publisher = PikaPublisher("my_queue") def build_serial(self): if self.custom_serial != None: self.serial_port = self.custom_serial else: self.serial_port = self.serial_port_builder.build_serial_port(self.port, self.baudrate) def run(self): self.write_log("Starting " + self.name) time.sleep(5) iterations = 0 while not self.connected and not self.is_stopped: #time.sleep(0.1) if (self.serial_port != None and self.serial_port.isOpen()): while iterations < self.max_readings or self.max_readings == None: #time.sleep(0.01) if self.read_and_enqueue() == True: iterations = iterations + 1 else: break else: time.sleep(0.1) try: self.serial_port = self.build_serial() except Exception: self.write_log("Error: Check the serial connection or cable, please.") self.write_log("Exiting " + self.name) def read_and_enqueue(self): try: if self.isFast: reading = self.serial_port.readline() else: reading = self.serial_port.readline(1) if reading <> "": if self.publisher <> None: the_reading = reading + "/" + str(time.time()) self.publisher.publish(the_reading) hit = self.processor.parse_hit(reading) self.queue.put(hit) self.connected = True self.write_log("Reading from serial: " + reading) else: time.sleep(0.1) pass except: self.write_log("Miss!") self.serial_port.close() self.connected = False traceback.print_exc(file=sys.stdout) return False return True def write_log(self, str_message): print str_message sys.stdout.flush() def stop(self): self.is_stopped = True def restart(self): self.is_stopped = False def pause(self): self.is_stopped = True def unpause(self): self.is_stopped = False