diff options
| author | Frank Gevaerts <frank@gevaerts.be> | 2008-04-26 19:02:16 +0000 |
|---|---|---|
| committer | Frank Gevaerts <frank@gevaerts.be> | 2008-04-26 19:02:16 +0000 |
| commit | bec6aa3176fc6d5ce80bcd4d6022358aa6c01629 (patch) | |
| tree | dfbaa924ba3e13d6f73dc446b1a2149610ed3e67 /firmware/usbstack/usb_charging_only.c | |
| parent | 33c44461e1b5fb9aff2f8ba7470ad2449b3c410e (diff) | |
| download | rockbox-bec6aa3176fc6d5ce80bcd4d6022358aa6c01629.zip rockbox-bec6aa3176fc6d5ce80bcd4d6022358aa6c01629.tar.gz rockbox-bec6aa3176fc6d5ce80bcd4d6022358aa6c01629.tar.bz2 rockbox-bec6aa3176fc6d5ce80bcd4d6022358aa6c01629.tar.xz | |
- change the usb class driver framework to allow for device classes with more than one interface or more than one endpoint pair
- move the charging-only dummy driver out of usb_core
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17252 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/usbstack/usb_charging_only.c')
| -rw-r--r-- | firmware/usbstack/usb_charging_only.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/firmware/usbstack/usb_charging_only.c b/firmware/usbstack/usb_charging_only.c new file mode 100644 index 0000000..501a7aa --- /dev/null +++ b/firmware/usbstack/usb_charging_only.c @@ -0,0 +1,72 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: $ + * + * Copyright (C) 2008 by Frank Gevaerts + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include "string.h" +#include "system.h" +#include "usb_core.h" +#include "usb_drv.h" +#include "kernel.h" + +//#define LOGF_ENABLE +#include "logf.h" + +#ifdef USB_CHARGING_ONLY + +/* charging_only interface */ +static struct usb_interface_descriptor __attribute__((aligned(2))) + interface_descriptor = +{ + .bLength = sizeof(struct usb_interface_descriptor), + .bDescriptorType = USB_DT_INTERFACE, + .bInterfaceNumber = 0, + .bAlternateSetting = 0, + .bNumEndpoints = 0, + .bInterfaceClass = USB_CLASS_VENDOR_SPEC, + .bInterfaceSubClass = 0, + .bInterfaceProtocol = 0, + .iInterface = 0 +}; + + +static int usb_interface; + +int usb_charging_only_set_first_endpoint(int endpoint) +{ + /* The dummy charging_only driver doesn't need an endpoint pair */ + return endpoint; +} +int usb_charging_only_set_first_interface(int interface) +{ + usb_interface = interface; + return interface + 1; +} + +int usb_charging_only_get_config_descriptor(unsigned char *dest,int max_packet_size) +{ + (void)max_packet_size; + unsigned char *orig_dest = dest; + + interface_descriptor.bInterfaceNumber=usb_interface; + memcpy(dest,&interface_descriptor,sizeof(struct usb_interface_descriptor)); + + dest+=sizeof(struct usb_interface_descriptor); + + return (dest-orig_dest); +} + +#endif /*USB_CHARGING_ONLY*/ |