class BusPirateStream(threading.Thread): def __init__(self, port='COM1', sinks=None, autoStart=True): threading.Thread.__init__(self) self.daemon = True self.dispatcher=AsynchDispatch(sinks=sinks, callbacks={'serial_data':[self.send]}) try: self.bp = UART(port,115200) except: print 'Failed to start BusPirate' self.bp = None if autoStart: self.start() def run(self): if self.bp is not None: while(True): rx_bytes = self.bp.response(1000,True) if rx_bytes != '': self.dispatcher.dispatch(Message('serial_data',rx_bytes)) def send(self, message): if self.bp is not None: self.bp.bulk_trans(len(message.data),map(ord,list(message.data)))
trig_mode = DEFAULT_TRIGGER_MODE bp.port.write("\x15") while 1: plot = {} voltage = {} maxv = 0 minv = 100 time_scale = DEFAULT_TIME_SCALE * time_div prev_voltage = 0 measure = 0; if(trig_mode != NO_SYNC): for k in range(1,2000): prev_voltage = voltage measure = bp.response(2, True) voltage = ord(measure[0]) << 8 voltage = voltage + ord(measure[1]) voltage = (voltage/1024.0) * 6.6 #rising slope if((voltage >= trigger_level) and (prev_voltage < (voltage * TRIG_CAL)) and (trig_mode == RISING_SLOPE)): break if((voltage < trigger_level) and (voltage > 0.01) and (prev_voltage > voltage/TRIG_CAL) and (trig_mode == FALLING_SLOPE)): break for i in range(RES_X): for k in range(time_div - 1): #ignoring (time_div-1) samples to achieve proper time resolution bp.response(2, True) measure = bp.response(2, True)