SOLVED

> Now it is my turn. First of all thank you Xiaofan for all support you have
> given here in the mailing list!

My thanks too.

> 1) Don't trust on get_active_configuration and get_interface_altsetting,
> they are not doing what they are supposed to yet.. Menawhile, they are
> returning the values set or the first one found if you haven't set. But I
> think this is not the issue.

get_active_configuration is working ok with my device.
It has a bootloader when numConfigurations == 1 and when the firmware
is loaded by the linu driver, it has 2 configurations and i need to
set it to the second.
This IS working for the case that the active configuration is 1 or the
case that it is already 2. But in but cases i could just always set it
to be the second.


> 2) What seems to be the problem is how you are using directly constants from
> usb.util to build the Request Type field. Some constants may require bit
> shift, so try to use the usb.util.build_request_type function (I must add
> this to the tutorial..). Test it and report us the results...

This solved the problem.

The types are defined as:
CTRL_TYPE_STANDARD = 0
CTRL_TYPE_CLASS = 1
CTRL_TYPE_VENDOR = 2
CTRL_TYPE_RESERVED = 3

as oposed to the libusb definitions.
#define LIBUSB_TYPE_STANDARD            (0x00 << 5)
#define LIBUSB_TYPE_CLASS                    (0x01 << 5)
#define LIBUSB_TYPE_VENDOR                 (0x02 << 5)
#define LIBUSB_TYPE_RESERVED            (0x03 << 5)

Now i am curious about this decision.
Most supported libraries are libusb versions so everyone will have to
shift bits with python or call this function which makes it less
readable than in normal C libusb.
Will this way of calling stay or should i redownload pyusb in a few weeks?


This is the working pyusb-example code:

    print "Going for reading: REQUEST_LINE "
    requesttype =
usb.util.build_request_type(usb.util.CTRL_RECIPIENT_DEVICE,
usb.util.CTRL_TYPE_VENDOR, usb.util.CTRL_IN)
    command = REQUEST_LINE
    value = 0
    moduleid = 0 #USBCTRL_UART1_PORT#USBCTRL_RAM_PORT
    msg = 8
    print dev.ctrl_transfer(bmRequestType=requesttype,
                             bRequest=command,
                             wValue=value,
                             wIndex=moduleid,
                             data_or_wLength=msg,
                             timeout=1000)

    print "Going for reading: USB_REQ_GPIO "
    requesttype =
usb.util.build_request_type(usb.util.CTRL_RECIPIENT_DEVICE,
usb.util.CTRL_TYPE_VENDOR, usb.util.CTRL_IN)
    command = USB_REQ_GPIO
    value = 0
    moduleid = 0 #USBCTRL_UART1_PORT#USBCTRL_RAM_PORT
    msg = 1
    print dev.ctrl_transfer(bmRequestType=requesttype,
                             bRequest=command,
                             wValue=value,
                             wIndex=moduleid,
                             data_or_wLength=msg,
                             timeout=1000)

    print "Going for writing: USB_REQ_GPIO "
    requesttype =
usb.util.build_request_type(usb.util.CTRL_RECIPIENT_DEVICE,
usb.util.CTRL_TYPE_VENDOR, usb.util.CTRL_OUT)
    command = USB_REQ_GPIO
    value = 0x33
    moduleid = 0 #USBCTRL_UART1_PORT#USBCTRL_RAM_PORT
    msg = None
    print dev.ctrl_transfer(bmRequestType=requesttype,
                             bRequest=command,
                             wValue=value,
                             wIndex=moduleid,
                             data_or_wLength=msg,
                             timeout=1000)




Thanks for making this new pyusb.
I was getting tired of using the old libusb-0.1 api to program
multiplatform software.

Diego.

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
pyusb-users mailing list
pyusb-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pyusb-users

Reply via email to