Accessing USB Device without driver - Ubuntu

This is a discussion on Accessing USB Device without driver - Ubuntu ; Anyone know if it's possible to communicate with a USB Device *without* a driver? Essentially what I have is a 3rd party device where I have a log of the USB protocol it uses and I just need to write ...

+ Reply to Thread
Results 1 to 8 of 8

Thread: Accessing USB Device without driver

  1. Accessing USB Device without driver

    Anyone know if it's possible to communicate with a USB Device *without* a
    driver? Essentially what I have is a 3rd party device where I have a log
    of the USB protocol it uses and I just need to write my own software to
    communicate with it.

    I don't really want to go through the whole hassle of writing a driver
    specifically for it if there's a simpler way.

    Thanks in advance,

    --
    Stephan
    1986 Pontiac Fiero GT

    君の事思い出す日なんてないのは
    君の事忘れたときがないから

  2. Re: Accessing USB Device without driver

    Stephan Rose bibbled of :

    > Anyone know if it's possible to communicate with a USB Device *without* a
    > driver? Essentially what I have is a 3rd party device where I have a log
    > of the USB protocol it uses and I just need to write my own software to
    > communicate with it.
    >
    > I don't really want to go through the whole hassle of writing a driver
    > specifically for it if there's a simpler way.
    >
    > Thanks in advance,
    >



    A little more information as to what the device is, is needed here.
    Personally I have not found a usb device that linux cannot see since the
    development of the 2.4 kernel.

  3. Re: Accessing USB Device without driver

    On Tue, 18 Mar 2008 14:28:00 +1200, thor wrote:

    > Stephan Rose bibbled of :
    >
    >> Anyone know if it's possible to communicate with a USB Device *without*
    >> a driver? Essentially what I have is a 3rd party device where I have a
    >> log of the USB protocol it uses and I just need to write my own
    >> software to communicate with it.
    >>
    >> I don't really want to go through the whole hassle of writing a driver
    >> specifically for it if there's a simpler way.
    >>
    >> Thanks in advance,
    >>
    >>

    >
    > A little more information as to what the device is, is needed here.
    > Personally I have not found a usb device that linux cannot see since the
    > development of the 2.4 kernel.


    It's an evaluation board from Microchip with a Pic32 on it.

    Driver is proprietary to Microchip but I sniffed the USB protocol. The
    driver allows downloading new binary images to the device and debugging.

    Personally I'm primarily interested in writing my own utility to send new
    images to the device so that I can do my test development from Linux and
    not windows.

    --
    Stephan
    1986 Pontiac Fiero GT

    君の事思い出す日なんてないのは
    君の事忘れたときがないから

  4. Re: Accessing USB Device without driver

    In article <1757631.gLdDFFJgiz@valhalla.enzed>, thor wrote:
    >Stephan Rose bibbled of :
    >
    >> Anyone know if it's possible to communicate with a USB Device *without* a
    >> driver? Essentially what I have is a 3rd party device where I have a log
    >> of the USB protocol it uses and I just need to write my own software to
    >> communicate with it.
    >>
    >> I don't really want to go through the whole hassle of writing a driver
    >> specifically for it if there's a simpler way.
    >>
    >> Thanks in advance,


    > A little more information as to what the device is, is needed here.
    >Personally I have not found a usb device that linux cannot see since the
    >development of the 2.4 kernel.


    I had some problems with the 2.4. ... kernel (RH 9) but kubuntu 7.10 (a
    version of the 2.6. ... kernel IIRC ?) has seen everything I've plugged
    into it without fail. To the OP, why not plug it in and see what happens ?




  5. Re: Accessing USB Device without driver



    "Stephan Rose" wrote in message
    news:T5mdnTjcdOV6v0LanZ2dnUVZ_orinZ2d@giganews.com ...
    > Anyone know if it's possible to communicate with a USB Device *without* a
    > driver? Essentially what I have is a 3rd party device where I have a log
    > of the USB protocol it uses and I just need to write my own software to
    > communicate with it.
    >
    > I don't really want to go through the whole hassle of writing a driver
    > specifically for it if there's a simpler way.
    >
    > Thanks in advance,


    Well there is always direct access to the addresses of the hardware.. I
    expect you would have to disable the USB drivers to do that.

    I suspect what you are really asking is for a RAW interface to the USB bus
    and not to bypass the USB drivers at all.

    This looks interesting but may not be what you want.
    http://www.embedded.com/story/OEG20021217S0036
    >
    > --
    > Stephan
    > 1986 Pontiac Fiero GT
    >
    > 君の事思い出す日なんてないのは
    > 君の事忘れたときがないから



  6. Re: Accessing USB Device without driver

    thor wrote:
    > Stephan Rose bibbled of :
    >
    >> Anyone know if it's possible to communicate with a USB Device *without* a
    >> driver? Essentially what I have is a 3rd party device where I have a log
    >> of the USB protocol it uses and I just need to write my own software to
    >> communicate with it.
    >>
    >> I don't really want to go through the whole hassle of writing a driver
    >> specifically for it if there's a simpler way.
    >>
    >> Thanks in advance,
    >>

    >
    >
    > A little more information as to what the device is, is needed here.
    > Personally I have not found a usb device that linux cannot see since the
    > development of the 2.4 kernel.


    Linux may see the device, but I have an Aiptec pen camera that I can
    only download the stills from, not the movies, and I can't use it as a
    webcam.

    So, "see" =/= "use".
    --
    These are my personal views and not those of Fujitsu Siemens Computers!
    Josef Mllers (Pinguinpfleger bei FSC)
    If failure had no penalty success would not be a prize (T. Pratchett)
    Company Details: http://www.fujitsu-siemens.com/imprint.html

  7. Re: Accessing USB Device without driver

    On Mon, 17 Mar 2008 21:03:19 -0500, Stephan Rose wrote:

    > Anyone know if it's possible to communicate with a USB Device *without*
    > a driver? Essentially what I have is a 3rd party device where I have a
    > log of the USB protocol it uses and I just need to write my own software
    > to communicate with it.
    >
    > I don't really want to go through the whole hassle of writing a driver
    > specifically for it if there's a simpler way.
    >
    > Thanks in advance,


    I had a similar problem.

    I wanted to control the Griffin RadioShark (a radio tuner) from the
    command line.

    I wrote the following Python script. It finds and writes to USB
    interfaces. Use it as an example if you like. You might want to look
    at a tutorial on the libusb library.

    #!/usr/bin/python
    #
    # GreatWhite RadioShark driver
    # (c) 2008 Wayne Bergeron
    #
    # This is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; version 2
    #
    # This software is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this software; see the file COPYING. If not, write to
    # the Free Software Foundation, Inc., 51 Franklin Street,
    # Boston, MA 02110-1301, USA.
    #
    ################################################## #############
    #
    # There is a radio named RadioSharkm made by Griffin Technology, Inc.
    #
    # The RadioShark is an AM and FM tuner integrated with a USB
    # device. The consumer package contains Windows application software
    # for controlling the Shark. Ths software is not very impressive, and
    # it doesn't work on Linux, as far as I know.
    #
    # There is another product from Griffin calle RadioShark2. This
    # software should be able to control both versions, but I haven't
    # been able to test it with a RadioShark2, since I only own two RadioSharks.
    #
    # I wrote this program after buying a second RadioShark. I had used
    # a single Shark for quite a while using a program called shark.c
    # by Michael Rolig (email: michael_rolig@alumni.macalester.edu),
    # Tightened up and unnecessary libhid example code removed by E. Stuart
    # Hicks (email: ehicks@binarymagi.com)
    #
    # The shark.c program worked fine, but it couldn't control two RadioSharks.
    # I use two Sharks, each enclosed in the field of a tunable AM antenna.
    #
    # The RadioShark is deficient, in my opinion, in not reporting a serial
    # number on the USB. This causes me problems in controlling a shark individually,
    # given which antenna it is associated with. I adapt to this by controlling
    # multiple devices based on USB bus/file pairs. This should survive a
    # reboot IF NO CHANGES ARE MADE TO THE USB DEVICES. It is a kludge,
    # but good enough.
    #
    # If you only have one RadioShark, you have no problem, and this program
    # will always control the one it finds.
    #
    # I wrote this program in Python, so I wouldn't have to compile and build.
    #
    # I have cron jobs which setup each RadioShark, and then copy the
    # outputs (using sox) into files. I get mp3 files of radio shows that
    # I am not home or awake to listen to.
    #
    # A cron job in bash should do something like:
    #
    # export dsp=$(GreatWhite.py --verbose --unit='001/004' --am=770 --bblue=20 --echodsp)
    # sox -t ossdsp $dsp -t wav - stat fade 1 1800 1 | lame -k -V 7 - ~/tmp/am770.mp3
    # GreatWhite.py -v --unit='001/004' --bblue=0 --red=0 --blue=0
    #
    # This assumes you have installed (at a minimum):
    #
    # python
    # libusb
    # usbfs (with usbfs mounted in /etc/fstab)
    # ALSA
    #
    # I wrote and debugged this on a Kubuntu 7.10 installation on an AMD64 computer.
    # This program may rely on other part of my installation not listed above.
    #
    # You should give the users permission to sudo this file. In
    # file /etc/sudoers, you can add a line like:
    #
    # username ALL=NOPASSWD: /home/username/bin/GreatWhite.py
    #
    # If you do that, this file will use sudo to silently run
    # this program as root. If you do not put that line in /etc/sudoers,
    # whenever sudo is used, you will be prompted for your password.
    # In that case, you cannot use this program in cron jobs.
    #
    #
    # So, here is the GreatWhite shark software.
    #
    import sys
    import getopt
    import os
    import re
    from string import *
    import usb
    from glob import glob
    #
    # Process command line options.
    #
    def help_message(s):
    n = sys.argv[0]
    sys.stderr.write('''
    ''' + n + " --- " + s + '''

    Options:
    -h, --help -- displays this help message
    --radioshark -- specifies an original radioshark -- default
    --radioshark2 -- specifies a version 2 radioshark
    --unit= -- specifies which of the identical units to consider -- bus/device
    run lsusb (for example '001/004', '006/005'). Defaults to first radioshark found.
    --am= -- expects an argument in kHz. Programs for AM reception.
    --fm= -- expects an argument in MHz. Programs for FM reception.
    --bblue= -- turns on blinking blue LED. Expects a duration argument (in seconds, 0 to 127).
    --blue= -- turns a blue LED on or off. Expects an intensity argument (0 to 127).
    --red= -- turns a red LED on or off. Expects an argument (0 or 1).
    --echodsp -- writes the name of the /dev/dsp device associated with the specified shark
    --dspandunit -- writes the name of the /dev/dsp device and the usb bus location to the stdout,
    and DOES NOTHING ELSE. Result on stdout is like '/dev/dsp;001/004'
    -v --verbose -- give a little more information during operation
    --version -- displays version of the ''' + sys.argv[0] + ''' program
    Examples:
    ''' + n + ''' --am=770 -bblue=10
    dsp=$(''' + n + ''' --fm=89.3 --red=1 --unit='006/006' --echodsp) ; sox -t ossdsp $dsp -t mp3 x.mp3 stat fade 1 1800 1
    \n''')
    sys.exit(0)



    def dspfilename(idstr="RadioSHARK", verbose=False):
    """
    The idstr input is of the form "RadioSHARK_1" or "RadioSHARK".

    Goes through /proc/asound/cards and finds which sound card RadioSHARK_X is.
    RadioSHARK_4 could be sound card 0 (/dev/dsp) or sound card 6 (/dev/dsp6),
    for example.

    """
    result = None
    defaultdspname = "/dev/null"
    fin = None
    try:
    fin = open("/proc/asound/cards")
    lines = fin.readlines()
    except:
    sys.stderr.write("Unable to read /proc/asound/cards. Is ALSA available?\n")
    lines = [] ; ret = -1
    if fin : fin.close()
    for line in lines:
    lst = re.split(r'[[\s]+', strip(line))
    if verbose : sys.stderr.write("/proc/asound/cards : " + join(lst, ",") + "\n")
    if idstr in lst :
    result = "/dev/dsp"
    if (lst[0] != "0") : result += lst[0]
    break
    return result



    def main(argv=None) :
    if argv is None :
    script_name = sys.argv[0]
    argv = sys.argv[1:]
    if len(argv) < 1:
    help_message("Nothing to do")
    try:
    options, xarguments = getopt.getopt(argv, \
    'hv', \
    [ 'help', \
    'revision=', 'radioshark', 'radioshark2', \
    'unit=', 'am=', 'fm=', \
    'bblue=', 'blue=', 'red=', \
    'echodsp', 'dspandunit', 'version', \
    'sudo' ])
    except getopt.error:
    help_message('''Error: You tried to use an unknown option or the argument
    for an option that requires it was missing.''')
    #
    # Define constants.
    #
    SHARK_VENDID = 0x077d #Griffin's Vendor ID
    SHARK_DEVID = 0x627a # The radioSHARK's Device ID
    #SHARK_HIDINUM = 2 # The Human Interface Device Interface number
    #
    # Define default options.
    #
    revision = 1 # Default to RadioShark, not RadioShark2
    radioshark = True
    radioshark2 = False
    echodsp = False # Spit out the name of the dsp (output) device
    dspandunit = False # Spit out the name of the dsp (output) device, and the bus location, and do nothing else
    unit = "0" # Default to the first unit
    am = -1 # No change in AM
    fm = -1 # No change in FM
    bblue = -1 # No change in the blinking blue LED
    blue = -1 # No change in the steady blue LED
    red = -1 # No change in the red light
    sudo = False # Assume we are not being run by sudo
    defaultdspname = "/dev/null"
    dspname = defaultdspname
    version = "0.5 (3/14/2008)" # Version level of this program
    verbose = False
    UseUSB = True
    #
    # Interperet all of the options.
    #
    for a in options[:]:
    if a[0] == '-h' or a[0] == "--help" :
    help_message("")
    if a[0] == '--unit' :
    unit = a[1]
    #if (unit < 0) or (unit > 126) :
    # help_message("Bad RadioShark unit specified as \"" + a[1] + "\"; it should be a non-negative number, usually less than 3")
    if a[0] == '--revision' :
    revision = int(a[1])
    if (revision < 1) or (revision > 2) :
    help_message("Bad RadioShark revision specified as \"" + a[1] + "\"; it should be either 1 or 2")
    if (revision == 2) :
    radioshark = False
    radioshark2 = True
    if a[0] == '--radioshark' :
    revision = 1; radioshark = True
    if a[0] == '--radioshark2' :
    revision = 2; radioshark2 = True
    if a[0] == '--am' :
    am = float(a[1])
    if (am < 540) or (am > 1700) :
    help_message("Bad AM frequency specified as \"" + a[1] + "\"; it should be in kHz between 540 and 1700")
    if a[0] == '--fm' :
    fm = float(a[1])
    if (fm < 88.0) or (fm > 108.0) :
    help_message("Bad FM frequency specified as \"" + a[1] + "\"; it should be in MHz between 88.0 and 108.0")
    if a[0] == '--bblue' :
    bblue = int(a[1])
    if (bblue < 0) or (bblue > 127) :
    help_message("Bad blue LED blink duration specified as \"" + a[1] + "\"; it should be in seconds between 0 and 127")
    if a[0] == '--blue' :
    blue = int(a[1])
    if (blue < 0) or (blue > 127) :
    help_message("Bad blue LED intensity specified as \"" + a[1] + "\"; it should be between 0 and 127")
    if a[0] == '--red' :
    red = int(a[1])
    if (red < 0) or (red > 1) :
    help_message("Bad red LED intensity specified as \"" + a[1] + "\"; it should be between 0 and 1")
    if a[0] == '--echodsp' :
    echodsp = True
    if a[0] == '--dspandunit' :
    dspandunit = True
    if a[0] == '--sudo' :
    sudo = True
    if a[0] == '--version' :
    print version
    sys.exit(0)
    if a[0] == '-v' or a[0] == "--verbose" :
    verbose = True
    #
    # Check for some impossible conditions.
    #
    if am > 0 and fm > 0:
    help_message("Cannot choose both --am and --fm tuning")
    if (radioshark and radioshark2) or not (radioshark or radioshark2):
    help_message("You must choose only one of radioshark or radioshark2 (default is radioshark)")
    #if dspandunit and (am > -1 or fm > -1 or blue > -1 or bblue > -1 or red > -1) :
    # help_message("The --dspandunit option is incompatible with device-control options.\n")
    #
    # Figure out which RadioSHARK to use.
    # This assumes the ALSA sound drivers are available.
    #
    # Go through files /proc/asound/RadioSHARK*/usbbus and find all
    # of the RadioSharks known to ALSA. This is done to determine
    # which sequence number the dsp output is associated with. So:
    #
    # File Sequence busid file
    # ------------ -------- -------------
    # RadioSHARK 0 /proc/asound/RadioSHARK/usbbus
    # RadioSHARK_1 1 /proc/asound/RadioSHARK_1/usbbus
    # RadioSHARK_2 2 /proc/asound/RadioSHARK_2/usbbus
    #
    # If no unit is chosen as --unit='001/004', the RadioSHARK sequence 0 is used
    #
    idstr = "RadioSHARK" # Default, if no --unit is specified
    if unit != "0":
    filelist = glob("/proc/asound/RadioSHARK*/usbbus")
    idstr_from_unit = ""
    for filename in filelist :
    fin = None
    try:
    if verbose: sys.stderr.write("Reading file " + filename + "\n")
    fin = open(filename)
    lines = fin.readlines()
    except:
    sys.stderr.write("Unable to read file " + filename + "\n")
    if fin: fin.close()
    #sys.stderr.write("<" + strip(lines[0]) + ">\n")
    if unit == strip(lines[0]) :
    idstr_from_unit = re.search(r'(?PRadioSHARK[^/]*)', filename).group("shark")
    break
    if idstr_from_unit == "" :
    sys.stderr.write("Unable to find busid " + unit + " in files /proc/asound/RadioSHARK*/usbbus\n")
    else :
    idstr = idstr_from_unit
    else :
    #
    # Check to see if such a shark really exists for ALSA
    #
    filename = "/proc/asound/" + idstr + "/usbbus"
    fin = None
    try:
    fin = open(filename)
    lines = fin.readlines()
    except:
    sys.stderr.write("Unable to read file " + filename + "\n")
    UseUSB = False
    if fin: fin.close()
    unit = strip(lines[0])
    #
    # Figure out what dsp outputs the audio of the selected RadioSHARK,
    # if requested.
    #
    if echodsp or dspandunit :
    dspname = dspfilename(idstr, verbose)
    if dspname == None :
    dspname = "/dev/null"
    if dspandunit : dspanme += ";000/000"
    if verbose : sys.stderr.write("Will output " + dspname + "\n")
    sys.stdout.write("/dev/null;000/000\n")
    sys.exit(-1) # Exit this program with a failure
    if dspandunit :
    outstr = dspname + ";" + unit + "\n"
    if verbose : sys.stderr.write("Will output " + outstr)
    sys.stdout.write(outstr)
    sys.exit(0)
    if echodsp:
    if verbose : sys.stderr.write("Will output ossdsp output file name " + dspname + "\n")
    sys.stdout.write(dspname + "\n")
    #
    # It's possible that this program does not need to
    # access the USB bus at all. If all that is required
    # is to figure out the output dsp of the shark,
    # the USB need never be accessed.
    #
    # If it is not necessary, figure it out here.
    #
    UseUSB = UseUSB and not (red < 0 and bblue < 0 and blue < 0 and am < 0 and fm < 0)
    #
    # Most of this script is only useful if we are running as root.
    # This will reexecute this program using sudo if we are not root.
    #
    # Care must be exercised to prevent an infinite loop.
    #
    if UseUSB and not os.access("/proc/bus/usb", os.W_OK | os.R_OK) :
    if sudo :
    help_message("Unable to get write access to /proc/bus/usb -- Are you root or able to sudo root? See man sudoers")
    else :
    if verbose : sys.stderr.write("Escalating permissions with sudo.\n")
    os.execv("/usr/bin/sudo", ["--"] + sys.argv[0:] + ["--sudo"]) # This should never return
    #
    # Get a list of all busses and devices.
    #
    if UseUSB :
    busses = usb.busses()
    sharklist = [ ]
    unitlist = [ ]
    for bus in busses :
    for device in bus.devices :
    if device.idVendor == SHARK_VENDID and device.idProduct == SHARK_DEVID :
    foundunit = bus.dirname + "/" + device.filename
    if verbose : sys.stderr.write("RadioShark at bus.dirname/device.filename :" + foundunit + "\n")
    sharklist.append(device)
    unitlist.append(foundunit)
    #
    # Choose which device to open up.
    #
    device = None
    if UseUSB :
    if len(unitlist) < 1 :
    help_message("No RadioShark found attached to any USB port.")
    UseUSB = False
    elif unit == "0" :
    device = sharklist[0]
    if verbose : sys.stderr.write("Will use device at " + unitlist[0] + "\n")
    else :
    for i in range(len(unitlist)) :
    if unit == unitlist[i] :
    device = sharklist[i]
    if verbose : sys.stderr.write("Will use " + idstr + " at busid " + unitlist[i] + "\n")
    break
    if device == None :
    help_message("No RadioShark found attached to USB bus/device " + unit + ". Run lsusb.")
    UseUSB = False
    #
    # Open that sucker.
    #
    if UseUSB :
    devicehandle = device.open()
    if devicehandle == 0 :
    sys.stderr.write("usb.open() failed.\n")
    UseUSB = False
    #
    # Get the HID interface.
    #
    if UseUSB :
    devicehandle.detachKernelDriver(2)
    devicehandle.claimInterface(2)
    #
    # Figure out the number of bytes to write for
    # each control write. The length differs based
    # on the choice of RadioShark or RadioShark2.
    # This should not be necessary. Check if it is??????????
    #
    wlen = 6
    if radioshark2 : wlen = 7
    #
    # Write to the selected device to set each of the
    # specified parameters.
    #
    READ_EP = 0x5 # libhid read command
    WRITE_EP = 0x5 #libhid write command
    mstimeout = 4000 # Timeout of 4 seconds for all hid transactions
    nullstr = chr(0) + chr(0) + chr(0) + chr(0) + chr(0) + chr(0) + chr(0) + chr(0)
    #
    ret = wlen
    if UseUSB and ret == wlen and am > 0 :
    sys.stderr.write("Setting AM frequency...\n")
    f = int(am + 450)
    bytes = (chr(0xC0) + chr(0x12) + chr((f>>8) & 0xFF) + chr(f & 0xFF) + nullstr)[0:wlen]
    ret = devicehandle.interruptWrite(WRITE_EP, bytes, mstimeout)
    if ret < wlen : sys.stderr.write("usb.interruptWrite failed with return code %d.\n" % ret)
    if UseUSB and ret == wlen and fm > 0 :
    sys.stderr.write("Setting FM frequency...\n")
    f = int(((fm * 1000 + 10700) / 12.5) + 3)
    bytes = (chr(0xC0) + chr(0) + chr((f>>8) & 0xFF) + chr(f & 0xFF) + nullstr)[0:wlen]
    ret = devicehandle.interruptWrite(WRITE_EP, bytes, mstimeout)
    if ret < wlen : sys.stderr.write("usb.interruptWrite failed with return code %d.\n" % ret)
    if UseUSB and ret == wlen and red > -1 :
    sys.stderr.write("Setting RED LED...\n")
    bytes = (chr(0xA8 + red) + chr(red) + nullstr)[0:wlen]
    ret = devicehandle.interruptWrite(WRITE_EP, bytes, mstimeout)
    if ret < wlen : sys.stderr.write("usb.interruptWrite failed with return code %d.\n" % ret)
    if UseUSB and ret == wlen and bblue > -1 :
    sys.stderr.write("Setting Blinking BLUE LED...\n")
    bytes = (chr(0xA1) + chr(bblue) + nullstr)[0:wlen]
    ret = devicehandle.interruptWrite(WRITE_EP, bytes, mstimeout)
    if ret < wlen : sys.stderr.write("usb.interruptWrite failed with return code %d.\n" % ret)
    if UseUSB and ret == wlen and blue > -1 :
    sys.stderr.write("Setting BLUE LED...\n")
    bytes = (chr(0xA0) + chr(blue) + nullstr)[0:wlen]
    ret = devicehandle.interruptWrite(WRITE_EP, bytes, mstimeout)
    if ret < wlen : sys.stderr.write("usb.interruptWrite failed with return code %d.\n" % ret)
    if ret == wlen: ret = 0

    sys.exit(ret)


    if __name__ == "__main__" :
    main()











  8. Re: Accessing USB Device without driver

    I just fount this post. The code in this post is in dire need of some critical indentation that seems to have been removed, making the code nearly useless.

    A Google of GreatWhite,py is not successful.

    Can GreatWhite.py be downloaded from somewhere?

    Thanks in advance,

    Steve Stenbom
    Kingston, WA

+ Reply to Thread