#!/usr/bin/env python import sys, os import array import usb import colorsys import time import math busses = usb.busses() VENDOR = 0x03eb PRODUCT = 0x2300 IFACE = 0 EP_IN = 0x81 EP_OUT = 0x02 deltah = 0.0003 T = 0.00 PWMperADC = 33 BAR = 80 tstart = time.time() def get_device(): for bus in busses: devices = bus.devices for dev in devices: if dev.idVendor == VENDOR and dev.idProduct == PRODUCT: return dev return None vmax = 1 vmin = 2**16 def adc(v): global vmax, vmin if v > vmax: vmax = v if v < vmin: vmin = v if vmax <= vmin: vmin -= 1 t = time.time() - tstart hz = usbiocnt / t o = '% 4d Hz ' % hz o += '#' * int( BAR * (v - vmin) / (vmax - vmin) ) print o usbiocnt = 0L def usbio(dh, r, g, b): global usbiocnt usbiocnt += 1 dout = array.array('B', [0]*4) dout[0] = 0xFF & 0x00 dout[1] = 0xFF & (r) dout[2] = 0xFF & (g) dout[3] = 0xFF & (b) dh.bulkWrite(EP_OUT, dout.tostring()) #if usbiocnt % PWMperADC == 0: if 1: din = dh.bulkRead(EP_IN, 4) l = len(din) if l != 4: print "unexpected bulk read length: %d" % l else: if usbiocnt % PWMperADC == 0: adc( (din[2] << 8) + din[3] ) def intcol(v): v = int(v*256) if v > 255: v = 255 if v < 0: v = 0 return v def rainbow(dh): h = 0. s = 1. v = 1. while 1: if h > 1.: h = 0. else: h += deltah rgb = colorsys.hsv_to_rgb(h, s, v) (ri, gi, bi) = map(intcol, rgb) usbio(dh, ri, gi, bi) time.sleep(T) def main(): dev = get_device() dh = dev.open() dh.claimInterface(IFACE) rainbow(dh) dh.releaseInterface() del dh return 0 if __name__ == '__main__': sys.exit( main() )