Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Jul 2007 12:24:48 -0600
From:      "Kirk Davis" <kirk.davis@epsb.ca>
To:        "Hans Petter Selasky" <hselasky@c2i.net>, <freebsd-usb@freebsd.org>
Subject:   RE: Changing the poer on a USB device
Message-ID:  <DB9A31C316524A4A83E54A2C0D2065570413BCC1@Exchange24.EDU.epsb.ca>
In-Reply-To: <200707280838.57586.hselasky@c2i.net>
References:  <DB9A31C316524A4A83E54A2C0D2065570413BC74@Exchange24.EDU.epsb.ca> <200707280838.57586.hselasky@c2i.net>

next in thread | previous in thread | raw e-mail | index | archive | help
=20
Hi Hans,

> -----Original Message-----
> From: Hans Petter Selasky [mailto:hselasky@c2i.net]=20
> Hi Kirk!
>=20
> 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 =3D 0;
>
>        /* The Get Max Lun command is a class-specific request. */
>        req.bmRequestType =3D UT_READ_CLASS_INTERFACE;
>        req.bRequest =3D UR_BBB_GET_MAX_LUN;
>        USETW(req.wValue, 0);
>        req.wIndex[0] =3D sc->sc_iface_no;
>        req.wIndex[1] =3D 0;
>        USETW(req.wLength, 1);
>
>        err =3D usbd_do_request(sc->sc_udev, &req, &buf);
>        if (err) {
>            buf =3D 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=20
>> change a newer blackberry. I have the driver detecting and enabling=20
>> the port when I insert the blackberry but it only configs the USB
port=20
>> for 100mA rate.  The blackberry needs 500mA and it displays some=20
>> information on the blackberry screen that they current is to low.
>>
>> 	Looking at some other code that was written for libusb it looks
like=20
>> 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. =20
>> Can anyone give my some advise on how I would do something like this=20
>> in a driver?  I'm not sure of the kernel equivalent to=20
>> usb_control_msg.
>>
>> Thanks,  Kirk
>>
>>
>>
>> Kirk Davis
>> Sr. Network Analyst, ITS
>> Edmonton Public Schools
>>

---- Kirk



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?DB9A31C316524A4A83E54A2C0D2065570413BCC1>