#define LE_WORD(x) ((x)&0xFF),((uint8_t) (((uint16_t) (x))>>8))
#if HAS_USB
+
+/* Maximum power in mA */
+#ifndef AO_USB_MAX_POWER
+#define AO_USB_MAX_POWER 100
+#endif
+
#include "ao_usb.h"
/* USB descriptors in one giant block of bytes */
-__code __at(0x00aa) uint8_t ao_usb_descriptors [] =
+AO_ROMCONFIG_SYMBOL(0x00aa) uint8_t ao_usb_descriptors [] =
{
/* Device descriptor */
0x12,
0x01, /* bConfigurationValue */
0x00, /* iConfiguration */
0xC0, /* bmAttributes */
- 0x32, /* bMaxPower */
+ AO_USB_MAX_POWER >> 1, /* bMaxPower, 2mA units */
/* Control class interface */
0x09,
/* Header functional descriptor */
0x05,
- CS_INTERFACE,
+ AO_USB_CS_INTERFACE,
0x00, /* bDescriptor SubType Header */
LE_WORD(0x0110), /* CDC version 1.1 */
/* Call management functional descriptor */
0x05,
- CS_INTERFACE,
+ AO_USB_CS_INTERFACE,
0x01, /* bDescriptor SubType Call Management */
0x01, /* bmCapabilities = device handles call management */
0x01, /* bDataInterface call management interface number */
/* ACM functional descriptor */
0x04,
- CS_INTERFACE,
+ AO_USB_CS_INTERFACE,
0x02, /* bDescriptor SubType Abstract Control Management */
0x02, /* bmCapabilities = D1 (Set_line_Coding, Set_Control_Line_State, Get_Line_Coding and Serial_State) */
/* Union functional descriptor */
0x05,
- CS_INTERFACE,
+ AO_USB_CS_INTERFACE,
0x06, /* bDescriptor SubType Union Functional descriptor */
0x00, /* bMasterInterface */
0x01, /* bSlaveInterface0 */
AO_USB_INT_EP|0x80, /* bEndpointAddress */
0x03, /* bmAttributes = intr */
LE_WORD(8), /* wMaxPacketSize */
- 0x0A, /* bInterval */
+ 0xff, /* bInterval */
/* Data class interface descriptor */
0x09,