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>
