diff options
author | Christian Starkjohann <cs+github@obdev.at> | 2008-04-29 17:41:25 +0000 |
---|---|---|
committer | Christian Starkjohann <cs+github@obdev.at> | 2008-04-29 17:41:25 +0000 |
commit | 47ff1843807c727ccf8e0aa1ee344036374217fc (patch) | |
tree | ec447b447515ec00f8f3b904a6243dcdcb8d41d1 /tests/main.c | |
parent | 3f3c069e49b52566df6b82c075a1275805285b3b (diff) | |
download | v-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.c | 159 |
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; +} + +/* ------------------------------------------------------------------------- */ |