SUCCESS!!
I found my error. Apparently I need to claim the device by this program
that I'm running. The new code is as follows (with some new declarations);
import sys
import usb.core
import usb.util
dev = usb.core.find(idVendor=0x130c, idProduct=0x0001)
interface = 5
endpoint = dev[0][(0,0)][0]
if dev.is_kernel_driver_active(interface) is True:
# tell the kernel to detach
dev.detach_kernel_driver(interface)
# claim the device
usb.util.claim_interface(dev, interface)
#if dev is None:
# raise ValueError('Device not found')
dev.set_configuration()
print "Connected to " + str(dev)
QS="\x51\x53\x0D" #Call for Serial number
BLON="\x42\x4C\x4F\x4E\x0D" #Backlight ON
BLOFF="\x42\x4C\x4F\x46\x46\x0D" #Backlight OFF
dev.write(0x02,QS,0,0)
ret = dev.read(0x82,endpoint.wMaxPacketSize)
sret=''.join([chr(x) for x in ret])
print "Return Raw: ",ret
print "Return : ", sret
# release the device
#usb.util.release_interface(dev, interface)
# reattach the device to the OS kernel
#dev.attach_kernel_driver(interface)
I did get an error the first time when I did not have the last line
commented out. I need to work on that one, but it does work now! I can call
the serial number and turn the back light on and off so the train is
rolling.
Thanks!
On Mon, Jun 1, 2015 at 8:44 AM, Caleb Mayfield <[email protected]>
wrote:
> Attached is the manual that was sent to me. One thing to note from the
> person who sent it to me, this was in development and was never completed.
> There is no Appendix C with an example code in it. I'm still learning about
> this level of programming. My experience thus far has been a moderate level
> of Arduino work and some beginner level shell scripting and java. I feel
> like I'm missing something that's right in front of my face, so any help is
> appreciated.
>
> Below is the lsusb -v output for this device. I'm currently working on a
> Pi2 running the 2015-05-05 Raspbian release using Python 2.7.3 for coding.
>
> Bus 001 Device 004: ID 130c:0001
> Device Descriptor:
> bLength 18
> bDescriptorType 1
> bcdUSB 1.01
> bDeviceClass 255 Vendor Specific Class
> bDeviceSubClass 255 Vendor Specific Subclass
> bDeviceProtocol 255 Vendor Specific Protocol
> bMaxPacketSize0 64
> idVendor 0x130c
> idProduct 0x0001
> bcdDevice 1.00
> iManufacturer 1 Quest Technologies, Inc.
> iProduct 2 Quest Technologies SoundPro SLM
> iSerial 6 BJL060022
> bNumConfigurations 1
> Configuration Descriptor:
> bLength 9
> bDescriptorType 2
> wTotalLength 32
> bNumInterfaces 1
> bConfigurationValue 1
> iConfiguration 3 Quest Technologies Device
> bmAttributes 0xc0
> Self Powered
> MaxPower 0mA
> Interface Descriptor:
> bLength 9
> bDescriptorType 4
> bInterfaceNumber 0
> bAlternateSetting 0
> bNumEndpoints 2
> bInterfaceClass 255 Vendor Specific Class
> bInterfaceSubClass 255 Vendor Specific Subclass
> bInterfaceProtocol 255 Vendor Specific Protocol
> iInterface 5 Virtual COM
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x02 EP 2 OUT
> bmAttributes 2
> Transfer Type Bulk
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0040 1x 64 bytes
> bInterval 0
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x82 EP 2 IN
> bmAttributes 2
> Transfer Type Bulk
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0040 1x 64 bytes
> bInterval 0
> Device Status: 0x0001
> Self Powered
>
>
> On Sat, May 30, 2015 at 5:05 AM, Karl Palsson <[email protected]> wrote:
>
>>
>> I'm pretty sure you're not actually sending the request that the manual
>> says.
>>
>> Caleb Mayfield <[email protected]> wrote:
>> > I am new to using Python and PyUSB. I am trying to write a program to
>> > communicate with a 3M Quest SoundPro sound meter. Because I'm new, I'm
>> > starting simple. The vendor was gracious enough to send me the manual
>> > they
>> > have on the commands for the unit. Right now all I'm trying to do is
>> > request the serial number and read the response. I just need to get
>> > communication between a Raspberry Pi and the device working. I have used
>> > the software on a Windows 7 machine along with a USB sniffer to verify
>> > the
>> > commands and endpoint address were correct.
>> >
>> > This is the program;
>> >
>> > import usb.core
>> >
>> > import usb.util
>> >
>> > import sys
>> >
>> > dev = usb.core.find(idVendor=0x130c, idProduct=0x0001)
>> >
>> > if dev is None:
>> >
>> > raise ValueError('Device not found')
>> >
>> > dev.set_configuration()
>> >
>> > print "Connected to " + str(dev)
>> >
>> > QS = '0x51,0x53,0x0D' #Call for Serial number
>> >
>> > dev.write(0x02,QS,0,0)
>>
>> I don't believe this is really right, you're probably meant to send the
>> three bytes, 0x51, 0x53, 0xd, not the 14 bytes, 0, x,5,1,,,0,x,5,3.....
>>
>> You probably just want to do something like...
>>
>> dev.write(0x02, "QS\r", 0, 0)
>>
>>
>> If you can share the manual, You can probably get more correct help than
>> my asumptions. :)
>>
>> Cheers,
>> Karl P
>>
>>
>> ------------------------------------------------------------------------------
>>
>> _______________________________________________
>> pyusb-users mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/pyusb-users
>>
>>
>
>
> --
> Caleb Mayfield
>
> James 1:19-20
>
--
Caleb Mayfield
James 1:19-20
------------------------------------------------------------------------------
_______________________________________________
pyusb-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pyusb-users