summaryrefslogtreecommitdiff
path: root/usbdrv/usbconfig_.h
blob: a4288ceaeb185963bd6c5ba1816002e53413bed8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
/* 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: Proprietary, free under certain conditions. See Documentation.
 * This Revision: $Id: usbconfig-prototype.h 206 2006-06-23 19:02:30Z 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 an ATMega8 with USB D+ connected to Port D
bit 2 (which is also hardware interrupt 0) and USB D- to Port D bit 0. You may
wire the lines to any other port, as long as D- is on bit 0 and D+ is also
wired to INT0.
To create your own usbconfig.h file, copy this file to the directory
containing "usbdrv" (that is your project firmware source directory) and
rename it to "usbconfig.h". Then edit it accordingly.
*/

/* ---------------------------- Hardware Config ---------------------------- */

#if defined(CCCB_COMPATIBLE)

  #define USB_CFG_IOPORTNAME      D
  #define USB_CFG_DMINUS_BIT      1
  #define USB_CFG_DPLUS_BIT       2
 
#else

  #define USB_CFG_IOPORTNAME      B
  #define USB_CFG_DMINUS_BIT      0
  #define USB_CFG_DPLUS_BIT       1

#endif

/* ----------------------- 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.
 */
/* #define  USB_BUFFER_SECTION         ".bss" */
/* The USB receive buffer (variable "usbRxBuf") with a length of 22 bytes
 * MUST NOT cross a 256 byte boundary. We have introduced this configuration
 * option to allow you to change the data segment where this buffer is
 * allocated. If you have problems with the default segment (start of .bss),
 * you may change this setting. See the comment in usbdrv.h for details.
 * On IAR C, the default is the TINY_Z segment (first 256 bytes). You must
 * change this default for devices which don't have RAM below 0x100.
 */

/* --------------------------- Functional Range ---------------------------- */

#ifndef BOOTLOADER
 #ifndef USB_HID
  #define USB_CFG_HAVE_INTRIN_ENDPOINT    1
/* Define this to 1 if you want to compile a version with two endpoints: The
 * default control endpoint 0 and an interrupt-in endpoint 1.
 */
  #define USB_CFG_HAVE_INTRIN_ENDPOINT3   1
/* Define this and USB_CFG_HAVE_INTRIN_ENDPOINT to 1 if you want to compile a
 * version with three endpoints: The default control endpoint 0, an
 * interrupt-in endpoint 1 and an interrupt-in endpoint 3.
 */
 #else
  #define USB_CFG_HAVE_INTRIN_ENDPOINT    0
  #define USB_CFG_HAVE_INTRIN_ENDPOINT3   0
 #endif
#else
 #define USB_CFG_HAVE_INTRIN_ENDPOINT    0
 #define USB_CFG_HAVE_INTRIN_ENDPOINT3   0
#endif
#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           120
/* 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_SAMPLE_EXACT            1
/* This variable affects Sampling Jitter for USB receiving. When it is 0, the
 * driver guarantees a sampling window of 1/2 bit. The USB spec requires
 * that the receiver has at most 1/4 bit sampling window. The 1/2 bit window
 * should still work reliably enough because we work at low speed. If you want
 * to meet the spec, set this value to 1. This will unroll a loop which
 * results in bigger code size.
 * If you have problems with long cables, try setting this value to 1.
 */
#define USB_CFG_IMPLEMENT_FN_WRITE      1
/* 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.
 */
#ifndef BOOTLOADER
 #define USB_CFG_IMPLEMENT_FN_READ       1
/* 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.
 */

 #ifndef USB_HID
  #define USB_CFG_IMPLEMENT_FN_WRITEOUT   1
 #else
  #define USB_CFG_IMPLEMENT_FN_WRITEOUT   0
 #endif
/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoint 1.
 * You must implement the function usbFunctionWriteOut() which receives all
 * interrupt/bulk data sent to endpoint 1.
 */
 #define USB_CFG_HAVE_FLOWCONTROL        1
/* Define this to 1 if you want flowcontrol over USB data. See the definition
 * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
 * usbdrv.h.
 */
#else
 #define USB_CFG_IMPLEMENT_FN_READ       0
#endif
/* Define this to the size of your configuration descriptor if you provide
 * your own configuration descriptor at the global program memory address
 * 'usbDescrConfig'.
 */

/* -------------------------- Device Description --------------------------- */

#ifndef BOOTLOADER
 #ifndef ISAVRISPMKII
  #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 obdev's free shared
 * VID/PID pair. Be sure to read USBID-License.txt for rules!
 * This template uses obdev's shared VID/PID pair for HIDs: 0x16c0/0x5df.
 * Use this VID/PID pair ONLY if you understand the implications!
 */
  #ifndef USB_HID
   #define  USB_CFG_DEVICE_ID       0xe1, 0x05
  #else
   #define  USB_CFG_DEVICE_ID       0xdc, 0x05
  #endif
/* 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!
 * This template uses obdev's shared VID/PID pair for HIDs: 0x16c0/0x5df.
 * Use this VID/PID pair ONLY if you understand the implications!
 */
 #else
  #define  USB_CFG_VENDOR_ID       0x03, 0xeb
  #define  USB_CFG_DEVICE_ID       0x21, 0x04
 #endif
#endif
#ifndef ISAVRISPMKII
 #define USB_CFG_DEVICE_VERSION  0x00, 0x01
#else
 #define USB_CFG_DEVICE_VERSION  0x02, 0x00
#endif
/* Version number of the device: Minor number first, then major number.
 */
#ifndef ISUSBASP
 #define USB_CFG_VENDOR_NAME     'w', 'i', 'n', 'd', 'f', 'i', 's', 'c', 'h', '.', 'o', 'r', 'g'
 #define USB_CFG_VENDOR_NAME_LEN 13
 #define USB_CFG_DEVICE_NAME     's', 'c', 'h', 'e', 'i', 'b', 'e'
 #define USB_CFG_DEVICE_NAME_LEN 7
#else
 #define	USB_CFG_VENDOR_NAME     'w', 'w', 'w', '.', 'f', 'i', 's', 'c', 'h', 'l', '.', 'd', 'e'
 #define USB_CFG_VENDOR_NAME_LEN 13
 #define	USB_CFG_DEVICE_NAME		'U', 'S', 'B', 'a', 's', 'p'
 #define	USB_CFG_DEVICE_NAME_LEN	6 
#endif

/* 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_LENGTH  0
/* Set this define to the number of charcters in the serial number if your
 * device should have a serial number to uniquely identify each hardware
 * instance. You must supply the serial number in a string descriptor with the
 * name "usbCfgSerialNumberStringDescriptor", e.g.:
 * #define USB_CFG_SERIAL_NUMBER_LENGTH  5
 * int usbCfgSerialNumberStringDescriptor[] PROGMEM = {
 *     USB_STRING_DESCRIPTOR_HEADER(USB_CFG_SERIAL_NUMBER_LENGTH),
 *     '1', '2', '3', '4', '5'
 * };
 * See usbdrv.h for more information about the USB_STRING_DESCRIPTOR_HEADER()
 * macro or usbdrv.c for example string descriptors.
 * You may want to put "usbCfgSerialNumberStringDescriptor" at a constant
 * flash memory address (with magic linker commands) so that you don't need
 * to recompile if you change it.
 */
#if defined(BOOTLOADER) || defined(USB_HID) 
 #define USB_CFG_DEVICE_CLASS    	0xff
 #define USB_CFG_DEVICE_SUBCLASS 	0

 #define USB_CFG_INTERFACE_CLASS    0
 #define USB_CFG_INTERFACE_SUBCLASS 0
 #define USB_CFG_INTERFACE_PROTOCOL 0 
#else
 #define USB_CFG_DEVICE_CLASS        2
 #define USB_CFG_DEVICE_SUBCLASS     0
/* See USB specification if you want to conform to an existing device class.
 */
 #ifndef ISAVRISPMKII
  #define USB_CFG_INTERFACE_CLASS     0x02    /* CDC class */
  #define USB_CFG_INTERFACE_SUBCLASS  2       /* Abstract (Modem) */
  #define USB_CFG_INTERFACE_PROTOCOL  1       /* AT-Commands */
 #else
  #define USB_CFG_INTERFACE_CLASS     0xff    /* Vendor specific */
  #define USB_CFG_INTERFACE_SUBCLASS  0       /* none */
  #define USB_CFG_INTERFACE_PROTOCOL  0       /* none */
 #endif
#endif
#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH    0  /* total length of report descriptor */
/* 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.
 * Since this template defines a HID device, it must also specify a HID
 * report descriptor length. 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!
 */

/* ----------------------- 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 */

#ifndef BOOTLOADER
 #ifndef USB_HID
  #define USB_CFG_DESCR_PROPS_DEVICE                  USB_PROP_IS_DYNAMIC
  #define USB_CFG_DESCR_PROPS_CONFIGURATION           USB_PROP_IS_DYNAMIC
  #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                     USB_PROP_IS_DYNAMIC
  #define USB_CFG_DESCR_PROPS_HID_REPORT              0
  #define USB_CFG_DESCR_PROPS_UNKNOWN                 0
 #endif
#endif

#endif /* __usbconfig_h_included__ */