Date: Thu, 2 Aug 2007 20:42:06 +0200 From: Hans Petter Selasky <hselasky@c2i.net> To: "Kirk Davis" <kirk.davis@epsb.ca> Cc: freebsd-usb@freebsd.org Subject: Re: Changing the poer on a USB device Message-ID: <200708022042.06643.hselasky@c2i.net> In-Reply-To: <DB9A31C316524A4A83E54A2C0D2065570413BCC1@Exchange24.EDU.epsb.ca> References: <DB9A31C316524A4A83E54A2C0D2065570413BC74@Exchange24.EDU.epsb.ca> <200707280838.57586.hselasky@c2i.net> <DB9A31C316524A4A83E54A2C0D2065570413BCC1@Exchange24.EDU.epsb.ca>
next in thread | previous in thread | raw e-mail | index | archive | help
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@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200708022042.06643.hselasky>