aboutsummaryrefslogtreecommitdiffstats
path: root/tests/main.c
diff options
context:
space:
mode:
authorChristian Starkjohann <cs+github@obdev.at>2008-04-29 17:41:25 +0000
committerChristian Starkjohann <cs+github@obdev.at>2008-04-29 17:41:25 +0000
commit47ff1843807c727ccf8e0aa1ee344036374217fc (patch)
treeec447b447515ec00f8f3b904a6243dcdcb8d41d1 /tests/main.c
parent3f3c069e49b52566df6b82c075a1275805285b3b (diff)
downloadv-usb-47ff1843807c727ccf8e0aa1ee344036374217fc.tar.gz
v-usb-47ff1843807c727ccf8e0aa1ee344036374217fc.tar.bz2
v-usb-47ff1843807c727ccf8e0aa1ee344036374217fc.zip
- added directory with test code
Diffstat (limited to 'tests/main.c')
-rw-r--r--tests/main.c159
1 files changed, 159 insertions, 0 deletions
diff --git a/tests/main.c b/tests/main.c
new file mode 100644
index 0000000..2a5968c
--- /dev/null
+++ b/tests/main.c
@@ -0,0 +1,159 @@
+/* Name: main.c
+ * Project: Testing driver features
+ * Author: Christian Starkjohann
+ * Creation Date: 2008-04-29
+ * Tabsize: 4
+ * Copyright: (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH
+ * License: GNU GPL v2 (see License.txt) or proprietary (CommercialLicense.txt)
+ * This Revision: $Id$
+ */
+
+/*
+This module is a do-nothing test code linking against (or including) the USB
+driver. It is used to determine the code size for various options and to
+check whether the code compiles with all options.
+*/
+#include <avr/io.h>
+#include <avr/interrupt.h> /* for sei() */
+#include <avr/pgmspace.h> /* required by usbdrv.h */
+#include <util/delay.h> /* for _delay_ms() */
+#include "usbdrv.h"
+#if USE_INCLUDE
+#include "usbdrv.c"
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* ----------------------------- USB interface ----------------------------- */
+/* ------------------------------------------------------------------------- */
+
+#if USB_CFG_IMPLEMENT_FN_WRITE
+uchar usbFunctionWrite(uchar *data, uchar len)
+{
+ return 1;
+}
+#endif
+
+#if USB_CFG_IMPLEMENT_FN_READ
+uchar usbFunctionRead(uchar *data, uchar len)
+{
+ return len;
+}
+#endif
+
+#if USB_CFG_IMPLEMENT_FN_WRITEOUT
+void usbFunctionWriteOut(uchar *data, uchar len)
+{
+}
+#endif
+
+#if USE_DYNAMIC_DESCRIPTOR
+
+static PROGMEM char myDescriptorDevice[] = { /* USB device descriptor */
+ 18, /* sizeof(usbDescriptorDevice): length of descriptor in bytes */
+ USBDESCR_DEVICE, /* descriptor type */
+ 0x10, 0x01, /* USB version supported */
+ USB_CFG_DEVICE_CLASS,
+ USB_CFG_DEVICE_SUBCLASS,
+ 0, /* protocol */
+ 8, /* max packet size */
+ /* the following two casts affect the first byte of the constant only, but
+ * that's sufficient to avoid a warning with the default values.
+ */
+ (char)USB_CFG_VENDOR_ID,/* 2 bytes */
+ (char)USB_CFG_DEVICE_ID,/* 2 bytes */
+ USB_CFG_DEVICE_VERSION, /* 2 bytes */
+ USB_CFG_DESCR_PROPS_STRING_VENDOR != 0 ? 1 : 0, /* manufacturer string index */
+ USB_CFG_DESCR_PROPS_STRING_PRODUCT != 0 ? 2 : 0, /* product string index */
+ USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER != 0 ? 3 : 0, /* serial number string index */
+ 1, /* number of configurations */
+};
+
+static PROGMEM char myDescriptorConfiguration[] = { /* USB configuration descriptor */
+ 9, /* sizeof(usbDescriptorConfiguration): length of descriptor in bytes */
+ USBDESCR_CONFIG, /* descriptor type */
+ 18 + 7 * USB_CFG_HAVE_INTRIN_ENDPOINT + (USB_CFG_DESCR_PROPS_HID & 0xff), 0,
+ /* total length of data returned (including inlined descriptors) */
+ 1, /* number of interfaces in this configuration */
+ 1, /* index of this configuration */
+ 0, /* configuration name string index */
+#if USB_CFG_IS_SELF_POWERED
+ USBATTR_SELFPOWER, /* attributes */
+#else
+ (char)USBATTR_BUSPOWER, /* attributes */
+#endif
+ USB_CFG_MAX_BUS_POWER/2, /* max USB current in 2mA units */
+/* interface descriptor follows inline: */
+ 9, /* sizeof(usbDescrInterface): length of descriptor in bytes */
+ USBDESCR_INTERFACE, /* descriptor type */
+ 0, /* index of this interface */
+ 0, /* alternate setting for this interface */
+ USB_CFG_HAVE_INTRIN_ENDPOINT, /* endpoints excl 0: number of endpoint descriptors to follow */
+ USB_CFG_INTERFACE_CLASS,
+ USB_CFG_INTERFACE_SUBCLASS,
+ USB_CFG_INTERFACE_PROTOCOL,
+ 0, /* string index for interface */
+#if (USB_CFG_DESCR_PROPS_HID & 0xff) /* HID descriptor */
+ 9, /* sizeof(usbDescrHID): length of descriptor in bytes */
+ USBDESCR_HID, /* descriptor type: HID */
+ 0x01, 0x01, /* BCD representation of HID version */
+ 0x00, /* target country code */
+ 0x01, /* number of HID Report (or other HID class) Descriptor infos to follow */
+ 0x22, /* descriptor type: report */
+ USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH, 0, /* total length of report descriptor */
+#endif
+#if USB_CFG_HAVE_INTRIN_ENDPOINT /* endpoint descriptor for endpoint 1 */
+ 7, /* sizeof(usbDescrEndpoint) */
+ USBDESCR_ENDPOINT, /* descriptor type = endpoint */
+ (char)0x81, /* IN endpoint number 1 */
+ 0x03, /* attrib: Interrupt endpoint */
+ 8, 0, /* maximum packet size */
+ USB_CFG_INTR_POLL_INTERVAL, /* in ms */
+#endif
+};
+
+uchar usbFunctionDescriptor(usbRequest_t *rq)
+{
+uchar *p = 0, len = 0;
+
+ if(rq->wValue.bytes[1] == USBDESCR_DEVICE){
+ p = (uchar *)myDescriptorDevice;
+ len = sizeof(myDescriptorDevice);
+ }else{ /* must be configuration descriptor */
+ p = (uchar *)(myDescriptorConfiguration);
+ len = sizeof(myDescriptorConfiguration);
+ }
+ usbMsgPtr = p;
+ return len;
+}
+#endif
+
+USB_PUBLIC uchar usbFunctionSetup(uchar data[8])
+{
+usbRequest_t *rq = (void *)data;
+
+ if(rq->bRequest == 0) /* request using usbFunctionRead()/usbFunctionWrite() */
+ return 0xff;
+ return 0; /* default for not implemented requests: return no data back to host */
+}
+
+/* ------------------------------------------------------------------------- */
+
+int main(void)
+{
+uchar i;
+
+ usbInit();
+ usbDeviceDisconnect(); /* enforce re-enumeration, do this while interrupts are disabled! */
+ i = 0;
+ while(--i){ /* fake USB disconnect for > 250 ms */
+ _delay_ms(1);
+ }
+ usbDeviceConnect();
+ sei();
+ for(;;){ /* main event loop */
+ usbPoll();
+ }
+ return 0;
+}
+
+/* ------------------------------------------------------------------------- */