Skip to content
Snippets Groups Projects
usb-lowlevel.py 1.56 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env python
    #
    # Basic example for Fadecandy, talking directly to the
    # Teensy using PyUSB.
    #
    # Micah Elizabeth Scott
    # This example code is released into the public domain.
    #
    
    import usb.core
    import usb.util
    import random
    import time
    import binascii
    
    dev = usb.core.find(idVendor=0x1d50, idProduct=0x607a)
    if not dev:
    
        raise IOError("No Fadecandy interfaces found")
    
    
    dev.set_configuration()
    
    print "Serial number: %s" % usb.util.get_string(dev, 255, dev.iSerialNumber)
    
    
    # Debug flags
    
    flags = 0x00
    dev.write(1, '\x80' + chr(flags) + ('\x00' * 62))
    
    # Set up a default color LUT
    
    lut = [0] * (64 * 25)
    for index in range(25):
    
        lut[index*64] = index | 0x40
    
    lut[24*64] |= 0x20
    for channel in range(3):
    
        for row in range(257):
            value = min(0xFFFF, int(pow(row / 256.0, 2.2) * 0x10000))
            i = channel * 257 + row
            packetNum = i / 31
            packetIndex = i % 31
            #print "%d, %d = 0x%04x" % (channel, row, value)
            lut[packetNum*64 + 2 + packetIndex*2] = value & 0xFF
            lut[packetNum*64 + 3 + packetIndex*2] = value >> 8
    
    lutPackets = ''.join(map(chr, lut))
    #print binascii.b2a_hex(lutPackets)
    dev.write(1, lutPackets)
    
    print "LUT programmed"
    
    # Slowly push random frames to the device
    
        for index in range(25):
            if index == 24:
                # Final
                control = index | 0x20
            else:
                control = index
    
            data = chr(control) + ''.join(chr(random.choice([0, 255])) for i in range(63))
            dev.write(1, data)
            #print binascii.b2a_hex(data)
    
        #print
        raw_input()
        #time.sleep(0.1)