Changing the poer on a USB device

Kirk Davis kirk.davis at epsb.ca
Mon Jul 30 18:24:53 UTC 2007


 
Hi Hans,

> -----Original Message-----
> From: Hans Petter Selasky [mailto:hselasky at c2i.net] 
> Hi Kirk!
> 
> There is a function that is called "usbd_do_request()" in the kernel
that will do this.
>
>Here is an example from my new USB stack:
>
>static u_int8_t
>umass_bbb_get_max_lun(struct umass_softc *sc) {
>        usb_device_request_t req;
>        usbd_status err;
>        u_int8_t buf = 0;
>
>        /* The Get Max Lun command is a class-specific request. */
>        req.bmRequestType = UT_READ_CLASS_INTERFACE;
>        req.bRequest = UR_BBB_GET_MAX_LUN;
>        USETW(req.wValue, 0);
>        req.wIndex[0] = sc->sc_iface_no;
>        req.wIndex[1] = 0;
>        USETW(req.wLength, 1);
>
>        err = usbd_do_request(sc->sc_udev, &req, &buf);
>        if (err) {
>            buf = 0;
>
>            /* Device doesn't support Get Max Lun request. */
>            printf("%s: Get Max Lun not supported (%s)\n",
>                   sc->sc_name, usbd_errstr(err));
>        }
>        return buf;
>}

    OK.  Thanks Hans

    Is there a kernel equivelent for usb_reset(handle) ?  It looks like
after I talk to the Blackberry device to set the power levels and mode I
need to reset the usb device to it will then tell the bus the correct
current level.

>
>--HPS
>
>On Friday 27 July 2007, Kirk Davis wrote:
>> Hi,
>> 	I am trying to write a device driver for FreeBSD that will
detect and 
>> change a newer blackberry. I have the driver detecting and enabling 
>> the port when I insert the blackberry but it only configs the USB
port 
>> for 100mA rate.  The blackberry needs 500mA and it displays some 
>> information on the blackberry screen that they current is to low.
>>
>> 	Looking at some other code that was written for libusb it looks
like 
>> that is what is needed to turn on the charging:
>>
>> void charge(struct usb_dev_handle *handle) {
>> 	// the special sauce... these steps seem to do the trick
>> 	// for the 7750 series... needs testing on others
>> 	char buffer[2];
>> 	usb_control_msg(handle, 0xc0, 0xa5, 0, 1, buffer, 2, 100);
>> 	usb_control_msg(handle, 0x40, 0xa2, 0, 1, buffer, 0, 100); }
>>
>>
>> 	I'm a weak C programmer and this is my first attempt at a
driver.  
>> Can anyone give my some advise on how I would do something like this 
>> in a driver?  I'm not sure of the kernel equivalent to 
>> usb_control_msg.
>>
>> Thanks,  Kirk
>>
>>
>>
>> Kirk Davis
>> Sr. Network Analyst, ITS
>> Edmonton Public Schools
>>

---- Kirk


More information about the freebsd-usb mailing list