altos: Allow products to override default 100mA USB current
[fw/altos] / src / core / ao_product.c
index fb59580b8d4b123b729cf0a0712495282eac8da5..b9327bacbf8b4a9543775c335cefd63ab97becfc 100644 (file)
@@ -27,9 +27,15 @@ const char ao_product[] = AO_iProduct_STRING;
 #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,
@@ -55,7 +61,7 @@ __code __at(0x00aa) uint8_t ao_usb_descriptors [] =
        0x01,                   /*  bConfigurationValue */
        0x00,                   /*  iConfiguration */
        0xC0,                   /*  bmAttributes */
-       0x32,                   /*  bMaxPower */
+       AO_USB_MAX_POWER >> 1,  /*  bMaxPower, 2mA units */
 
        /* Control class interface */
        0x09,
@@ -70,26 +76,26 @@ __code __at(0x00aa) uint8_t ao_usb_descriptors [] =
 
        /* 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 */
@@ -100,7 +106,7 @@ __code __at(0x00aa) uint8_t ao_usb_descriptors [] =
        AO_USB_INT_EP|0x80,     /* bEndpointAddress */
        0x03,                   /* bmAttributes = intr */
        LE_WORD(8),             /* wMaxPacketSize */
-       0x0A,                   /* bInterval */
+       0xff,                   /* bInterval */
 
        /* Data class interface descriptor */
        0x09,