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)))
Example #2
0
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)