summaryrefslogtreecommitdiff
path: root/firmware/usbstack/usb_charging_only.c
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2008-04-26 19:02:16 +0000
committerFrank Gevaerts <frank@gevaerts.be>2008-04-26 19:02:16 +0000
commitbec6aa3176fc6d5ce80bcd4d6022358aa6c01629 (patch)
treedfbaa924ba3e13d6f73dc446b1a2149610ed3e67 /firmware/usbstack/usb_charging_only.c
parent33c44461e1b5fb9aff2f8ba7470ad2449b3c410e (diff)
downloadrockbox-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.c72
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*/