o cleanup
This commit is contained in:
127
tools/avrusb/tests/Makefile
Normal file
127
tools/avrusb/tests/Makefile
Normal file
@@ -0,0 +1,127 @@
|
||||
# Name: Makefile
|
||||
# Project: custom-class example
|
||||
# Author: Christian Starkjohann
|
||||
# Creation Date: 2008-04-07
|
||||
# Tabsize: 4
|
||||
# Copyright: (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH
|
||||
# License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
|
||||
# This Revision: $Id: Makefile 719 2009-03-16 18:51:56Z cs $
|
||||
|
||||
DEVICE = attiny2313
|
||||
F_CPU = 16000000 # in Hz
|
||||
DEFINES =
|
||||
|
||||
CFLAGS = $(DEFINES) -Iusbdrv -I. -DDEBUG_LEVEL=0
|
||||
OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o main.o
|
||||
|
||||
COMPILE = avr-gcc -Wall -Os -DF_CPU=$(F_CPU) $(CFLAGS) -mmcu=$(DEVICE)
|
||||
|
||||
SIZES_TMP = /tmp/sizetmp.txt
|
||||
|
||||
# symbolic targets:
|
||||
help:
|
||||
@echo "This Makefile has no default rule. Use one of the following:"
|
||||
@echo "make clean ..... to delete objects and hex file"
|
||||
@echo "make sizes ..... compute code and RAM sizes for various options"
|
||||
@echo "make test ...... test with all features whether everything compiles"
|
||||
|
||||
sizes sizes.txt:
|
||||
rm -f $(SIZES_TMP) sizes.txt
|
||||
$(MAKE) null.elf
|
||||
avr-size null.elf | tail -1 | awk '{print "null", $$1+$$2, $$3+$$2}' >$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf
|
||||
avr-size main.elf | tail -1 | awk '{print "Minimum_with_16_MHz", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf F_CPU=12000000
|
||||
avr-size main.elf | tail -1 | awk '{print "Minimum_with_12_MHz", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf F_CPU=12800000
|
||||
avr-size main.elf | tail -1 | awk '{print "Minimum_with_12_8_MHz", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf F_CPU=15000000
|
||||
avr-size main.elf | tail -1 | awk '{print "Minimum_with_15_MHz", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf F_CPU=16500000
|
||||
avr-size main.elf | tail -1 | awk '{print "Minimum_with_16_5_MHz", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf F_CPU=18000000
|
||||
avr-size main.elf | tail -1 | awk '{print "Minimum_with_18_MHz+CRC", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf F_CPU=20000000
|
||||
avr-size main.elf | tail -1 | awk '{print "Minimum_with_20_MHz", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf DEFINES=-DUSB_CFG_IMPLEMENT_FN_WRITE=1
|
||||
avr-size main.elf | tail -1 | awk '{print "With_usbFunctionWrite", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf DEFINES=-DUSB_CFG_IMPLEMENT_FN_READ=1
|
||||
avr-size main.elf | tail -1 | awk '{print "With_usbFunctionRead", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf "DEFINES=-DUSB_CFG_IMPLEMENT_FN_READ=1 -DUSB_CFG_IMPLEMENT_FN_WRITE=1"
|
||||
avr-size main.elf | tail -1 | awk '{print "With_usbFunctionRead_and_Write", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf "DEFINES=-DUSB_CFG_IMPLEMENT_FN_WRITEOUT=1"
|
||||
avr-size main.elf | tail -1 | awk '{print "With_usbFunctionWriteOut", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf "DEFINES=-DUSB_CFG_HAVE_INTRIN_ENDPOINT=1"
|
||||
avr-size main.elf | tail -1 | awk '{print "With_Interrupt_In_Endpoint_1", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf "DEFINES=-DUSB_CFG_IMPLEMENT_HALT=1 -DUSB_CFG_HAVE_INTRIN_ENDPOINT=1"
|
||||
avr-size main.elf | tail -1 | awk '{print "With_Interrupt_In_Endpoint_1_and_Halt", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf "DEFINES=-DUSB_CFG_HAVE_INTRIN_ENDPOINT3=1"
|
||||
avr-size main.elf | tail -1 | awk '{print "With_Interrupt_In_Endpoint_1_and_3", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf "DEFINES=-DUSE_DYNAMIC_DESCRIPTOR=1"
|
||||
avr-size main.elf | tail -1 | awk '{print "With_Dynamic_Descriptor", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
$(MAKE) clean; $(MAKE) main.elf "DEFINES=-DUSB_CFG_LONG_TRANSFERS=1"
|
||||
avr-size main.elf | tail -1 | awk '{print "With_Long_Transfers", $$1+$$2, $$3+$$2}' >>$(SIZES_TMP)
|
||||
cat $(SIZES_TMP) | awk 'BEGIN{printf("%39s %5s %5s %5s %5s\n"), "Variation", "Flash", "RAM", "+F", "+RAM"}\
|
||||
/^null/{nullRom=$$2; nullRam=$$3; next} \
|
||||
{rom=$$2-nullRom; ram=$$3-nullRam; if(!refRom){refRom=rom; refRam=ram} \
|
||||
printf("%39s %5d %5d %+5d %+5d\n", $$1, rom, ram, rom-refRom, ram-refRam)}' | tee sizes.txt
|
||||
rm $(SIZES_TMP)
|
||||
|
||||
test:
|
||||
for freq in 12000000 12800000 15000000 16000000 16500000 18000000 20000000; do \
|
||||
for opt in USB_COUNT_SOF USB_CFG_HAVE_INTRIN_ENDPOINT USB_CFG_HAVE_INTRIN_ENDPOINT3 USB_CFG_HAVE_MEASURE_FRAME_LENGTH USB_CFG_LONG_TRANSFERS; do \
|
||||
$(MAKE) clean; $(MAKE) main.elf F_CPU=$$freq "DEFINES=-D$$opt=1" || exit 1; \
|
||||
$(MAKE) clean; $(MAKE) main.elf F_CPU=$$freq "DEFINES=-D$$opt=1 -DDUSB_CFG_IMPLEMENT_FN_WRITEOUT=1" || exit 1; \
|
||||
done \
|
||||
done
|
||||
|
||||
# The following rule is used to check the compiler
|
||||
devices: #exclude devices without RAM for stack and atmega603 for gcc 3
|
||||
excludes="at90s1200 attiny11 attiny12 attiny15 attiny28"; \
|
||||
for gccVersion in 3 4; do \
|
||||
avr-gcc-select $$gccVersion; \
|
||||
for device in `echo | avr-gcc -xc -mmcu=x - 2>&1 | egrep '^ *at[a-zA-Z0-9_-]+$$'`; do \
|
||||
if echo "$$excludes" | grep "$$device" >/dev/null; then continue; fi; \
|
||||
if [ "$$gccVersion" = 3 -a "$$device" = atmega603 ]; then continue; fi; \
|
||||
$(MAKE) clean; $(MAKE) null.elf DEVICE=$$device || exit 1; \
|
||||
done \
|
||||
done
|
||||
$(MAKE) clean
|
||||
avr-gcc-select 3
|
||||
@echo "+++ Device test succeeded!"
|
||||
|
||||
# rule for deleting dependent files (those which can be built by Make):
|
||||
clean:
|
||||
rm -f *.hex *.lst *.map *.elf *.o
|
||||
rm -rf usbdrv
|
||||
|
||||
# Generic rule for compiling C files:
|
||||
.c.o:
|
||||
$(COMPILE) -c $< -o $@
|
||||
|
||||
# Generic rule for assembling Assembler source files:
|
||||
.S.o:
|
||||
$(COMPILE) -x assembler-with-cpp -c $< -o $@
|
||||
# "-x assembler-with-cpp" should not be necessary since this is the default
|
||||
# file type for the .S (with capital S) extension. However, upper case
|
||||
# characters are not always preserved on Windows. To ensure WinAVR
|
||||
# compatibility define the file type manually.
|
||||
|
||||
# Generic rule for compiling C to assembler, used for debugging only.
|
||||
.c.s:
|
||||
$(COMPILE) -S $< -o $@
|
||||
|
||||
# file targets:
|
||||
|
||||
# Since we don't want to ship the driver multipe times, we copy it into this project:
|
||||
usbdrv:
|
||||
cp -r ../usbdrv .
|
||||
|
||||
main.elf: usbdrv $(OBJECTS) # usbdrv dependency only needed because we copy it
|
||||
$(COMPILE) -o main.elf $(OBJECTS)
|
||||
|
||||
main_i.elf: usbdrv main.o usbdrv/usbdrvasm.o # usbdrv dependency only needed because we copy it
|
||||
$(COMPILE) -o main_i.elf main.o usbdrv/usbdrvasm.o
|
||||
|
||||
null.elf: null.o
|
||||
$(COMPILE) -o null.elf null.o
|
||||
13
tools/avrusb/tests/Readme.txt
Normal file
13
tools/avrusb/tests/Readme.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
This is the Readme file for the directory "tests" of AVR-USB, a firmware-only
|
||||
USB driver for AVR microcontrollers.
|
||||
|
||||
WHAT IS IN THIS DIRECTORY?
|
||||
==========================
|
||||
This directory is for driver development only. It contains tests to check
|
||||
whether all branches of #ifdef code compile as they should and whether the
|
||||
code size of the driver increased.
|
||||
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
(c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH.
|
||||
http://www.obdev.at/
|
||||
45
tools/avrusb/tests/compare-sizes.awk
Normal file
45
tools/avrusb/tests/compare-sizes.awk
Normal file
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/awk -f
|
||||
# Name: compare-sizes.awk
|
||||
# Project: avr-usb
|
||||
# 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), GNU GPL v3 or proprietary (CommercialLicense.txt)
|
||||
# This Revision: $Id$
|
||||
|
||||
BEGIN{
|
||||
opt = 0;
|
||||
if(ARGC != 3){
|
||||
printf("usage: compare-sizes.awk file1 file2\n");
|
||||
printf(" computes size differences between two size lists\n");
|
||||
exit 1;
|
||||
}
|
||||
file1 = ARGV[1];
|
||||
file2 = ARGV[2];
|
||||
}
|
||||
|
||||
{
|
||||
if(($2 + 0) != 0){
|
||||
if(!hadOption[$1]){
|
||||
hadOption[$1] = 1;
|
||||
options[opt++] = $1;
|
||||
}
|
||||
flash[FILENAME, $1] = $2;
|
||||
ram[FILENAME, $1] = $3;
|
||||
}
|
||||
}
|
||||
|
||||
END{
|
||||
if(opt > 0){
|
||||
printf ("%39s %6s %5s\n", "Variation", "+Flash", "+RAM");
|
||||
}
|
||||
for(i = 0; i < opt; i++){
|
||||
option = options[i];
|
||||
if(!flash[file2, option] || !flash[file1, option]){
|
||||
printf("%39s %6s %5s\n", option, "n/a", "n/a");
|
||||
}else{
|
||||
printf("%39s %+6d %+5d\n", option, flash[file2, option] - flash[file1, option], ram[file2, option] - ram[file1, option]);
|
||||
}
|
||||
}
|
||||
}
|
||||
159
tools/avrusb/tests/main.c
Normal file
159
tools/avrusb/tests/main.c
Normal file
@@ -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), GNU GPL v3 or proprietary (CommercialLicense.txt)
|
||||
* This Revision: $Id: main.c 692 2008-11-07 15:07:40Z cs $
|
||||
*/
|
||||
|
||||
/*
|
||||
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
|
||||
};
|
||||
|
||||
USB_PUBLIC usbMsgLen_t 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 usbMsgLen_t 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;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
26
tools/avrusb/tests/null.c
Normal file
26
tools/avrusb/tests/null.c
Normal file
@@ -0,0 +1,26 @@
|
||||
/* Name: null.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), GNU GPL v3 or proprietary (CommercialLicense.txt)
|
||||
* This Revision: $Id: null.c 692 2008-11-07 15:07:40Z cs $
|
||||
*/
|
||||
|
||||
/*
|
||||
This is a NULL main() function to find out the code size required by libusb's
|
||||
startup code, interrupt vectors etc.
|
||||
*/
|
||||
#include <avr/io.h>
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
int main(void)
|
||||
{
|
||||
for(;;);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
@@ -0,0 +1,13 @@
|
||||
Variation Flash RAM +F +RAM
|
||||
Minimum_with_16_MHz 1154 45 +0 +0
|
||||
Minimum_with_12_MHz 1274 45 +120 +0
|
||||
Minimum_with_15_MHz 1260 45 +106 +0
|
||||
Minimum_with_16_5_MHz 1276 45 +122 +0
|
||||
With_usbFunctionWrite 1214 45 +60 +0
|
||||
With_usbFunctionRead 1200 45 +46 +0
|
||||
With_usbFunctionRead_and_Write 1246 45 +92 +0
|
||||
With_usbFunctionWriteOut 1178 45 +24 +0
|
||||
With_Interrupt_In_Endpoint_1 1284 58 +130 +13
|
||||
With_Interrupt_In_Endpoint_1_and_Halt 1372 58 +218 +13
|
||||
With_Interrupt_In_Endpoint_1_and_3 1386 69 +232 +24
|
||||
With_Dynamic_Descriptor 1186 45 +32 +0
|
||||
@@ -0,0 +1,13 @@
|
||||
Variation Flash RAM +F +RAM
|
||||
Minimum_with_16_MHz 1208 45 +0 +0
|
||||
Minimum_with_12_MHz 1328 45 +120 +0
|
||||
Minimum_with_15_MHz 1314 45 +106 +0
|
||||
Minimum_with_16_5_MHz 1330 45 +122 +0
|
||||
With_usbFunctionWrite 1268 45 +60 +0
|
||||
With_usbFunctionRead 1264 45 +56 +0
|
||||
With_usbFunctionRead_and_Write 1314 45 +106 +0
|
||||
With_usbFunctionWriteOut 1218 45 +10 +0
|
||||
With_Interrupt_In_Endpoint_1 1340 58 +132 +13
|
||||
With_Interrupt_In_Endpoint_1_and_Halt 1414 58 +206 +13
|
||||
With_Interrupt_In_Endpoint_1_and_3 1426 69 +218 +24
|
||||
With_Dynamic_Descriptor 1238 45 +30 +0
|
||||
@@ -0,0 +1,15 @@
|
||||
Variation Flash RAM +F +RAM
|
||||
Minimum_with_16_MHz 1154 45 +0 +0
|
||||
Minimum_with_12_MHz 1274 45 +120 +0
|
||||
Minimum_with_15_MHz 1260 45 +106 +0
|
||||
Minimum_with_16_5_MHz 1276 45 +122 +0
|
||||
Minimum_with_20_MHz 1136 45 -18 +0
|
||||
With_usbFunctionWrite 1214 45 +60 +0
|
||||
With_usbFunctionRead 1192 45 +38 +0
|
||||
With_usbFunctionRead_and_Write 1234 45 +80 +0
|
||||
With_usbFunctionWriteOut 1178 45 +24 +0
|
||||
With_Interrupt_In_Endpoint_1 1280 57 +126 +12
|
||||
With_Interrupt_In_Endpoint_1_and_Halt 1370 57 +216 +12
|
||||
With_Interrupt_In_Endpoint_1_and_3 1346 69 +192 +24
|
||||
With_Dynamic_Descriptor 1182 45 +28 +0
|
||||
With_Long_Transfers 1200 47 +46 +2
|
||||
@@ -0,0 +1,15 @@
|
||||
Variation Flash RAM +F +RAM
|
||||
Minimum_with_16_MHz 1192 45 +0 +0
|
||||
Minimum_with_12_MHz 1312 45 +120 +0
|
||||
Minimum_with_15_MHz 1298 45 +106 +0
|
||||
Minimum_with_16_5_MHz 1314 45 +122 +0
|
||||
Minimum_with_20_MHz 1174 45 -18 +0
|
||||
With_usbFunctionWrite 1246 45 +54 +0
|
||||
With_usbFunctionRead 1242 45 +50 +0
|
||||
With_usbFunctionRead_and_Write 1280 45 +88 +0
|
||||
With_usbFunctionWriteOut 1208 45 +16 +0
|
||||
With_Interrupt_In_Endpoint_1 1320 57 +128 +12
|
||||
With_Interrupt_In_Endpoint_1_and_Halt 1410 57 +218 +12
|
||||
With_Interrupt_In_Endpoint_1_and_3 1428 69 +236 +24
|
||||
With_Dynamic_Descriptor 1212 45 +20 +0
|
||||
With_Long_Transfers 1270 47 +78 +2
|
||||
@@ -0,0 +1,16 @@
|
||||
Variation Flash RAM +F +RAM
|
||||
Minimum_with_16_MHz 1152 45 +0 +0
|
||||
Minimum_with_12_MHz 1202 45 +50 +0
|
||||
Minimum_with_12_8_MHz 1522 45 +370 +0
|
||||
Minimum_with_15_MHz 1258 45 +106 +0
|
||||
Minimum_with_16_5_MHz 1274 45 +122 +0
|
||||
Minimum_with_20_MHz 1134 45 -18 +0
|
||||
With_usbFunctionWrite 1212 45 +60 +0
|
||||
With_usbFunctionRead 1190 45 +38 +0
|
||||
With_usbFunctionRead_and_Write 1232 45 +80 +0
|
||||
With_usbFunctionWriteOut 1176 45 +24 +0
|
||||
With_Interrupt_In_Endpoint_1 1278 57 +126 +12
|
||||
With_Interrupt_In_Endpoint_1_and_Halt 1368 57 +216 +12
|
||||
With_Interrupt_In_Endpoint_1_and_3 1344 69 +192 +24
|
||||
With_Dynamic_Descriptor 1180 45 +28 +0
|
||||
With_Long_Transfers 1198 47 +46 +2
|
||||
@@ -0,0 +1,16 @@
|
||||
Variation Flash RAM +F +RAM
|
||||
Minimum_with_16_MHz 1194 45 +0 +0
|
||||
Minimum_with_12_MHz 1244 45 +50 +0
|
||||
Minimum_with_12_8_MHz 1564 45 +370 +0
|
||||
Minimum_with_15_MHz 1300 45 +106 +0
|
||||
Minimum_with_16_5_MHz 1316 45 +122 +0
|
||||
Minimum_with_20_MHz 1176 45 -18 +0
|
||||
With_usbFunctionWrite 1248 45 +54 +0
|
||||
With_usbFunctionRead 1244 45 +50 +0
|
||||
With_usbFunctionRead_and_Write 1282 45 +88 +0
|
||||
With_usbFunctionWriteOut 1210 45 +16 +0
|
||||
With_Interrupt_In_Endpoint_1 1322 57 +128 +12
|
||||
With_Interrupt_In_Endpoint_1_and_Halt 1412 57 +218 +12
|
||||
With_Interrupt_In_Endpoint_1_and_3 1430 69 +236 +24
|
||||
With_Dynamic_Descriptor 1214 45 +20 +0
|
||||
With_Long_Transfers 1272 47 +78 +2
|
||||
@@ -0,0 +1,16 @@
|
||||
Variation Flash RAM +F +RAM
|
||||
Minimum_with_16_MHz 1152 45 +0 +0
|
||||
Minimum_with_12_MHz 1202 45 +50 +0
|
||||
Minimum_with_12_8_MHz 1522 45 +370 +0
|
||||
Minimum_with_15_MHz 1258 45 +106 +0
|
||||
Minimum_with_16_5_MHz 1274 45 +122 +0
|
||||
Minimum_with_20_MHz 1134 45 -18 +0
|
||||
With_usbFunctionWrite 1212 45 +60 +0
|
||||
With_usbFunctionRead 1190 45 +38 +0
|
||||
With_usbFunctionRead_and_Write 1232 45 +80 +0
|
||||
With_usbFunctionWriteOut 1176 45 +24 +0
|
||||
With_Interrupt_In_Endpoint_1 1278 57 +126 +12
|
||||
With_Interrupt_In_Endpoint_1_and_Halt 1368 57 +216 +12
|
||||
With_Interrupt_In_Endpoint_1_and_3 1344 69 +192 +24
|
||||
With_Dynamic_Descriptor 1180 45 +28 +0
|
||||
With_Long_Transfers 1198 47 +46 +2
|
||||
@@ -0,0 +1,16 @@
|
||||
Variation Flash RAM +F +RAM
|
||||
Minimum_with_16_MHz 1194 45 +0 +0
|
||||
Minimum_with_12_MHz 1244 45 +50 +0
|
||||
Minimum_with_12_8_MHz 1564 45 +370 +0
|
||||
Minimum_with_15_MHz 1300 45 +106 +0
|
||||
Minimum_with_16_5_MHz 1316 45 +122 +0
|
||||
Minimum_with_20_MHz 1176 45 -18 +0
|
||||
With_usbFunctionWrite 1248 45 +54 +0
|
||||
With_usbFunctionRead 1244 45 +50 +0
|
||||
With_usbFunctionRead_and_Write 1282 45 +88 +0
|
||||
With_usbFunctionWriteOut 1210 45 +16 +0
|
||||
With_Interrupt_In_Endpoint_1 1322 57 +128 +12
|
||||
With_Interrupt_In_Endpoint_1_and_Halt 1412 57 +218 +12
|
||||
With_Interrupt_In_Endpoint_1_and_3 1430 69 +236 +24
|
||||
With_Dynamic_Descriptor 1214 45 +20 +0
|
||||
With_Long_Transfers 1272 47 +78 +2
|
||||
@@ -0,0 +1,17 @@
|
||||
Variation Flash RAM +F +RAM
|
||||
Minimum_with_16_MHz 1152 45 +0 +0
|
||||
Minimum_with_12_MHz 1202 45 +50 +0
|
||||
Minimum_with_12_8_MHz 1522 45 +370 +0
|
||||
Minimum_with_15_MHz 1258 45 +106 +0
|
||||
Minimum_with_16_5_MHz 1274 45 +122 +0
|
||||
Minimum_with_18_MHz+CRC 2268 45 +1116 +0
|
||||
Minimum_with_20_MHz 1134 45 -18 +0
|
||||
With_usbFunctionWrite 1212 45 +60 +0
|
||||
With_usbFunctionRead 1190 45 +38 +0
|
||||
With_usbFunctionRead_and_Write 1232 45 +80 +0
|
||||
With_usbFunctionWriteOut 1176 45 +24 +0
|
||||
With_Interrupt_In_Endpoint_1 1278 57 +126 +12
|
||||
With_Interrupt_In_Endpoint_1_and_Halt 1368 57 +216 +12
|
||||
With_Interrupt_In_Endpoint_1_and_3 1344 69 +192 +24
|
||||
With_Dynamic_Descriptor 1180 45 +28 +0
|
||||
With_Long_Transfers 1198 47 +46 +2
|
||||
@@ -0,0 +1,17 @@
|
||||
Variation Flash RAM +F +RAM
|
||||
Minimum_with_16_MHz 1224 45 +0 +0
|
||||
Minimum_with_12_MHz 1274 45 +50 +0
|
||||
Minimum_with_12_8_MHz 1594 45 +370 +0
|
||||
Minimum_with_15_MHz 1330 45 +106 +0
|
||||
Minimum_with_16_5_MHz 1346 45 +122 +0
|
||||
Minimum_with_18_MHz+CRC 2298 45 +1074 +0
|
||||
Minimum_with_20_MHz 1206 45 -18 +0
|
||||
With_usbFunctionWrite 1284 45 +60 +0
|
||||
With_usbFunctionRead 1280 45 +56 +0
|
||||
With_usbFunctionRead_and_Write 1318 45 +94 +0
|
||||
With_usbFunctionWriteOut 1246 45 +22 +0
|
||||
With_Interrupt_In_Endpoint_1 1358 57 +134 +12
|
||||
With_Interrupt_In_Endpoint_1_and_Halt 1448 57 +224 +12
|
||||
With_Interrupt_In_Endpoint_1_and_3 1466 69 +242 +24
|
||||
With_Dynamic_Descriptor 1250 45 +26 +0
|
||||
With_Long_Transfers 1302 47 +78 +2
|
||||
317
tools/avrusb/tests/usbconfig.h
Normal file
317
tools/avrusb/tests/usbconfig.h
Normal file
@@ -0,0 +1,317 @@
|
||||
/* Name: usbconfig.h
|
||||
* Project: AVR USB driver
|
||||
* Author: Christian Starkjohann
|
||||
* Creation Date: 2005-04-01
|
||||
* Tabsize: 4
|
||||
* Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
|
||||
* License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
|
||||
* This Revision: $Id: usbconfig.h 719 2009-03-16 18:51:56Z cs $
|
||||
*/
|
||||
|
||||
#ifndef __usbconfig_h_included__
|
||||
#define __usbconfig_h_included__
|
||||
|
||||
/*
|
||||
General Description:
|
||||
This file is an example configuration (with inline documentation) for the USB
|
||||
driver. It configures AVR-USB for USB D+ connected to Port D bit 2 (which is
|
||||
also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
|
||||
wire the lines to any other port, as long as D+ is also wired to INT0 (or any
|
||||
other hardware interrupt, as long as it is the highest level interrupt, see
|
||||
section at the end of this file).
|
||||
*/
|
||||
|
||||
/* ---------------------------- Hardware Config ---------------------------- */
|
||||
|
||||
#define USB_CFG_IOPORTNAME D
|
||||
/* This is the port where the USB bus is connected. When you configure it to
|
||||
* "B", the registers PORTB, PINB and DDRB will be used.
|
||||
*/
|
||||
#define USB_CFG_DMINUS_BIT 4
|
||||
/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
|
||||
* This may be any bit in the port.
|
||||
*/
|
||||
#define USB_CFG_DPLUS_BIT 2
|
||||
/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
|
||||
* This may be any bit in the port. Please note that D+ must also be connected
|
||||
* to interrupt pin INT0! [You can also use other interrupts, see section
|
||||
* "Optional MCU Description" below, or you can connect D- to the interrupt, as
|
||||
* it is required if you use the USB_COUNT_SOF feature. If you use D- for the
|
||||
* interrupt, the USB interrupt will also be triggered at Start-Of-Frame
|
||||
* markers every millisecond.]
|
||||
*/
|
||||
#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
|
||||
/* Clock rate of the AVR in MHz. Legal values are 12000, 15000, 16000 or 16500.
|
||||
* The 16.5 MHz version of the code requires no crystal, it tolerates +/- 1%
|
||||
* deviation from the nominal frequency. All other rates require a precision
|
||||
* of 2000 ppm and thus a crystal!
|
||||
* Default if not specified: 12 MHz
|
||||
*/
|
||||
#define USB_CFG_CHECK_CRC (USB_CFG_CLOCK_KHZ == 18000)
|
||||
/* Define this to 1 if you want that the driver checks data integrity of data
|
||||
* packets (CRC checks). CRC checks cost quite a bit of code size and are
|
||||
* currently only available for 18 MHz crystal clock. You must choose
|
||||
* USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
|
||||
*/
|
||||
|
||||
|
||||
/* ----------------------- Optional Hardware Config ------------------------ */
|
||||
|
||||
/* #define USB_CFG_PULLUP_IOPORTNAME D */
|
||||
/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
|
||||
* V+, you can connect and disconnect the device from firmware by calling
|
||||
* the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
|
||||
* This constant defines the port on which the pullup resistor is connected.
|
||||
*/
|
||||
/* #define USB_CFG_PULLUP_BIT 4 */
|
||||
/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
|
||||
* above) where the 1.5k pullup resistor is connected. See description
|
||||
* above for details.
|
||||
*/
|
||||
|
||||
/* --------------------------- Functional Range ---------------------------- */
|
||||
|
||||
#ifndef USB_CFG_HAVE_INTRIN_ENDPOINT3
|
||||
#define USB_CFG_HAVE_INTRIN_ENDPOINT3 0
|
||||
#endif
|
||||
/* Define this to 1 if you want to compile a version with three endpoints: The
|
||||
* default control endpoint 0, an interrupt-in endpoint 3 (or the number
|
||||
* configured below) and a catch-all default interrupt-in endpoint as above.
|
||||
* You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
|
||||
*/
|
||||
#ifndef USB_CFG_HAVE_INTRIN_ENDPOINT
|
||||
#define USB_CFG_HAVE_INTRIN_ENDPOINT USB_CFG_HAVE_INTRIN_ENDPOINT3
|
||||
#endif
|
||||
/* Define this to 1 if you want to compile a version with two endpoints: The
|
||||
* default control endpoint 0 and an interrupt-in endpoint (any other endpoint
|
||||
* number).
|
||||
*/
|
||||
#define USB_CFG_EP3_NUMBER 3
|
||||
/* If the so-called endpoint 3 is used, it can now be configured to any other
|
||||
* endpoint number (except 0) with this macro. Default if undefined is 3.
|
||||
*/
|
||||
/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
|
||||
/* The above macro defines the startup condition for data toggling on the
|
||||
* interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
|
||||
* Since the token is toggled BEFORE sending any data, the first packet is
|
||||
* sent with the oposite value of this configuration!
|
||||
*/
|
||||
//#define USB_CFG_IMPLEMENT_HALT 0
|
||||
/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
|
||||
* for endpoint 1 (interrupt endpoint). Although you may not need this feature,
|
||||
* it is required by the standard. We have made it a config option because it
|
||||
* bloats the code considerably.
|
||||
*/
|
||||
#define USB_CFG_INTR_POLL_INTERVAL 10
|
||||
/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
|
||||
* interval. The value is in milliseconds and must not be less than 10 ms for
|
||||
* low speed devices.
|
||||
*/
|
||||
#define USB_CFG_IS_SELF_POWERED 0
|
||||
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
|
||||
* device is powered from the USB bus.
|
||||
*/
|
||||
#define USB_CFG_MAX_BUS_POWER 40
|
||||
/* Set this variable to the maximum USB bus power consumption of your device.
|
||||
* The value is in milliamperes. [It will be divided by two since USB
|
||||
* communicates power requirements in units of 2 mA.]
|
||||
*/
|
||||
//#define USB_CFG_IMPLEMENT_FN_WRITE 0
|
||||
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
|
||||
* transfers. Set it to 0 if you don't need it and want to save a couple of
|
||||
* bytes.
|
||||
*/
|
||||
//#define USB_CFG_IMPLEMENT_FN_READ 0
|
||||
/* Set this to 1 if you need to send control replies which are generated
|
||||
* "on the fly" when usbFunctionRead() is called. If you only want to send
|
||||
* data from a static buffer, set it to 0 and return the data from
|
||||
* usbFunctionSetup(). This saves a couple of bytes.
|
||||
*/
|
||||
//#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
|
||||
/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
|
||||
* You must implement the function usbFunctionWriteOut() which receives all
|
||||
* interrupt/bulk data sent to any endpoint other than 0. The endpoint number
|
||||
* can be found in 'usbRxToken'.
|
||||
*/
|
||||
#define USB_CFG_HAVE_FLOWCONTROL 0
|
||||
/* Define this to 1 if you want flowcontrol over USB data. See the definition
|
||||
* of the macros usbDisableAllRequests() and usbEnableAllRequests() in
|
||||
* usbdrv.h.
|
||||
*/
|
||||
//#define USB_CFG_LONG_TRANSFERS 0
|
||||
/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
|
||||
* in a single control-in or control-out transfer. Note that the capability
|
||||
* for long transfers increases the driver size.
|
||||
*/
|
||||
/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
|
||||
/* This macro is a hook if you want to do unconventional things. If it is
|
||||
* defined, it's inserted at the beginning of received message processing.
|
||||
* If you eat the received message and don't want default processing to
|
||||
* proceed, do a return after doing your things. One possible application
|
||||
* (besides debugging) is to flash a status LED on each packet.
|
||||
*/
|
||||
/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
|
||||
/* This macro is a hook if you need to know when an USB RESET occurs. It has
|
||||
* one parameter which distinguishes between the start of RESET state and its
|
||||
* end.
|
||||
*/
|
||||
/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
|
||||
/* This macro (if defined) is executed when a USB SET_ADDRESS request was
|
||||
* received.
|
||||
*/
|
||||
//#define USB_COUNT_SOF 0
|
||||
/* define this macro to 1 if you need the global variable "usbSofCount" which
|
||||
* counts SOF packets. This feature requires that the hardware interrupt is
|
||||
* connected to D- instead of D+.
|
||||
*/
|
||||
//#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
|
||||
/* define this macro to 1 if you want the function usbMeasureFrameLength()
|
||||
* compiled in. This function can be used to calibrate the AVR's RC oscillator.
|
||||
*/
|
||||
|
||||
/* -------------------------- Device Description --------------------------- */
|
||||
|
||||
#define USB_CFG_VENDOR_ID 0xc0, 0x16
|
||||
/* USB vendor ID for the device, low byte first. If you have registered your
|
||||
* own Vendor ID, define it here. Otherwise you use one of obdev's free shared
|
||||
* VID/PID pairs. Be sure to read USBID-License.txt for rules!
|
||||
*/
|
||||
#define USB_CFG_DEVICE_ID 0x08, 0x3e /* 1000 dec, "free for lab use" */
|
||||
/* This is the ID of the product, low byte first. It is interpreted in the
|
||||
* scope of the vendor ID. If you have registered your own VID with usb.org
|
||||
* or if you have licensed a PID from somebody else, define it here. Otherwise
|
||||
* you use obdev's free shared VID/PID pair. Be sure to read the rules in
|
||||
* USBID-License.txt!
|
||||
*/
|
||||
#define USB_CFG_DEVICE_VERSION 0x00, 0x01
|
||||
/* Version number of the device: Minor number first, then major number.
|
||||
*/
|
||||
#define USB_CFG_VENDOR_NAME 'o', 'b', 'd', 'e', 'v', '.', 'a', 't'
|
||||
#define USB_CFG_VENDOR_NAME_LEN 8
|
||||
/* These two values define the vendor name returned by the USB device. The name
|
||||
* must be given as a list of characters under single quotes. The characters
|
||||
* are interpreted as Unicode (UTF-16) entities.
|
||||
* If you don't want a vendor name string, undefine these macros.
|
||||
* ALWAYS define a vendor name containing your Internet domain name if you use
|
||||
* obdev's free shared VID/PID pair. See the file USBID-License.txt for
|
||||
* details.
|
||||
*/
|
||||
#define USB_CFG_DEVICE_NAME 'T', 'e', 's', 't'
|
||||
#define USB_CFG_DEVICE_NAME_LEN 4
|
||||
/* Same as above for the device name. If you don't want a device name, undefine
|
||||
* the macros. See the file USBID-License.txt before you assign a name if you
|
||||
* use a shared VID/PID.
|
||||
*/
|
||||
/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */
|
||||
/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */
|
||||
/* Same as above for the serial number. If you don't want a serial number,
|
||||
* undefine the macros.
|
||||
* It may be useful to provide the serial number through other means than at
|
||||
* compile time. See the section about descriptor properties below for how
|
||||
* to fine tune control over USB descriptors such as the string descriptor
|
||||
* for the serial number.
|
||||
*/
|
||||
#define USB_CFG_DEVICE_CLASS 0xff /* set to 0 if deferred to interface */
|
||||
#define USB_CFG_DEVICE_SUBCLASS 0
|
||||
/* See USB specification if you want to conform to an existing device class.
|
||||
* Class 0xff is "vendor specific".
|
||||
*/
|
||||
#define USB_CFG_INTERFACE_CLASS 0 /* define class here if not at device level */
|
||||
#define USB_CFG_INTERFACE_SUBCLASS 0
|
||||
#define USB_CFG_INTERFACE_PROTOCOL 0
|
||||
/* See USB specification if you want to conform to an existing device class or
|
||||
* protocol. The following classes must be set at interface level:
|
||||
* HID class is 3, no subclass and protocol required (but may be useful!)
|
||||
* CDC class is 2, use subclass 2 and protocol 1 for ACM
|
||||
*/
|
||||
/* #define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 42 */
|
||||
/* Define this to the length of the HID report descriptor, if you implement
|
||||
* an HID device. Otherwise don't define it or define it to 0.
|
||||
* If you use this define, you must add a PROGMEM character array named
|
||||
* "usbHidReportDescriptor" to your code which contains the report descriptor.
|
||||
* Don't forget to keep the array and this define in sync!
|
||||
*/
|
||||
|
||||
/* #define USB_PUBLIC static */
|
||||
/* Use the define above if you #include usbdrv.c instead of linking against it.
|
||||
* This technique saves a couple of bytes in flash memory.
|
||||
*/
|
||||
|
||||
/* ------------------- Fine Control over USB Descriptors ------------------- */
|
||||
/* If you don't want to use the driver's default USB descriptors, you can
|
||||
* provide our own. These can be provided as (1) fixed length static data in
|
||||
* flash memory, (2) fixed length static data in RAM or (3) dynamically at
|
||||
* runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
|
||||
* information about this function.
|
||||
* Descriptor handling is configured through the descriptor's properties. If
|
||||
* no properties are defined or if they are 0, the default descriptor is used.
|
||||
* Possible properties are:
|
||||
* + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
|
||||
* at runtime via usbFunctionDescriptor().
|
||||
* + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
|
||||
* in static memory is in RAM, not in flash memory.
|
||||
* + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
|
||||
* the driver must know the descriptor's length. The descriptor itself is
|
||||
* found at the address of a well known identifier (see below).
|
||||
* List of static descriptor names (must be declared PROGMEM if in flash):
|
||||
* char usbDescriptorDevice[];
|
||||
* char usbDescriptorConfiguration[];
|
||||
* char usbDescriptorHidReport[];
|
||||
* char usbDescriptorString0[];
|
||||
* int usbDescriptorStringVendor[];
|
||||
* int usbDescriptorStringDevice[];
|
||||
* int usbDescriptorStringSerialNumber[];
|
||||
* Other descriptors can't be provided statically, they must be provided
|
||||
* dynamically at runtime.
|
||||
*
|
||||
* Descriptor properties are or-ed or added together, e.g.:
|
||||
* #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
|
||||
*
|
||||
* The following descriptors are defined:
|
||||
* USB_CFG_DESCR_PROPS_DEVICE
|
||||
* USB_CFG_DESCR_PROPS_CONFIGURATION
|
||||
* USB_CFG_DESCR_PROPS_STRINGS
|
||||
* USB_CFG_DESCR_PROPS_STRING_0
|
||||
* USB_CFG_DESCR_PROPS_STRING_VENDOR
|
||||
* USB_CFG_DESCR_PROPS_STRING_PRODUCT
|
||||
* USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
|
||||
* USB_CFG_DESCR_PROPS_HID
|
||||
* USB_CFG_DESCR_PROPS_HID_REPORT
|
||||
* USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
|
||||
*
|
||||
*/
|
||||
|
||||
#if USE_DYNAMIC_DESCRIPTOR
|
||||
#define USB_CFG_DESCR_PROPS_DEVICE USB_PROP_IS_DYNAMIC
|
||||
#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
|
||||
#else
|
||||
#define USB_CFG_DESCR_PROPS_DEVICE 0
|
||||
#define USB_CFG_DESCR_PROPS_CONFIGURATION 0
|
||||
#endif
|
||||
#define USB_CFG_DESCR_PROPS_STRINGS 0
|
||||
#define USB_CFG_DESCR_PROPS_STRING_0 0
|
||||
#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0
|
||||
#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0
|
||||
#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0
|
||||
#define USB_CFG_DESCR_PROPS_HID 0
|
||||
#define USB_CFG_DESCR_PROPS_HID_REPORT 0
|
||||
#define USB_CFG_DESCR_PROPS_UNKNOWN 0
|
||||
|
||||
/* ----------------------- Optional MCU Description ------------------------ */
|
||||
|
||||
/* The following configurations have working defaults in usbdrv.h. You
|
||||
* usually don't need to set them explicitly. Only if you want to run
|
||||
* the driver on a device which is not yet supported or with a compiler
|
||||
* which is not fully supported (such as IAR C) or if you use a differnt
|
||||
* interrupt than INT0, you may have to define some of these.
|
||||
*/
|
||||
/* #define USB_INTR_CFG MCUCR */
|
||||
/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */
|
||||
/* #define USB_INTR_CFG_CLR 0 */
|
||||
/* #define USB_INTR_ENABLE GIMSK */
|
||||
/* #define USB_INTR_ENABLE_BIT INT0 */
|
||||
/* #define USB_INTR_PENDING GIFR */
|
||||
/* #define USB_INTR_PENDING_BIT INTF0 */
|
||||
/* #define USB_INTR_VECTOR SIG_INTERRUPT0 */
|
||||
|
||||
#endif /* __usbconfig_h_included__ */
|
||||
Reference in New Issue
Block a user