Changing the poer on a USB device

Hans Petter Selasky hselasky at c2i.net
Sat Jul 28 06:39:03 UTC 2007


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;
}

--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
>


More information about the freebsd-usb mailing list