Changing the poer on a USB device

Hans Petter Selasky hselasky at c2i.net
Thu Aug 2 18:42:40 UTC 2007


Hi Kirk,

I've been very busy this week. Try searching the sources. Maybe you have to 
set a different USB configuration on the device.

--HPS

On Monday 30 July 2007, Kirk Davis wrote:
> 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