Fix up some missing target dependencies and output messages in the LUFA build system...
[pub/USBasp.git] / Projects / XPLAINBridge / XPLAINBridge.c
index 6dc1859..7909cc4 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2011.
+     Copyright (C) Dean Camera, 2012.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -48,18 +48,24 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
                .Config =
                        {
                                .ControlInterfaceNumber         = 0,
-
-                               .DataINEndpointNumber           = CDC_TX_EPNUM,
-                               .DataINEndpointSize             = CDC_TXRX_EPSIZE,
-                               .DataINEndpointDoubleBank       = true,
-
-                               .DataOUTEndpointNumber          = CDC_RX_EPNUM,
-                               .DataOUTEndpointSize            = CDC_TXRX_EPSIZE,
-                               .DataOUTEndpointDoubleBank      = true,
-
-                               .NotificationEndpointNumber     = CDC_NOTIFICATION_EPNUM,
-                               .NotificationEndpointSize       = CDC_NOTIFICATION_EPSIZE,
-                               .NotificationEndpointDoubleBank = false,
+                               .DataINEndpoint                 =
+                                       {
+                                               .Address                = CDC_TX_EPADDR,
+                                               .Size                   = CDC_TXRX_EPSIZE,
+                                               .Banks                  = 1,
+                                       },
+                               .DataOUTEndpoint                =
+                                       {
+                                               .Address                = CDC_RX_EPADDR,
+                                               .Size                   = CDC_TXRX_EPSIZE,
+                                               .Banks                  = 1,
+                                       },
+                               .NotificationEndpoint           =
+                                       {
+                                               .Address                = CDC_NOTIFICATION_EPADDR,
+                                               .Size                   = CDC_NOTIFICATION_EPSIZE,
+                                               .Banks                  = 1,
+                                       },
                        },
        };
 
@@ -105,7 +111,7 @@ void AVRISP_Task(void)
 
        V2Params_UpdateParamValues();
 
-       Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPNUM);
+       Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPADDR);
 
        /* Check to see if a V2 Protocol command has been received */
        if (Endpoint_IsOUTReceived())
@@ -170,11 +176,6 @@ void SetupHardware(void)
        /* Disable clock division */
        clock_prescale_set(clock_div_1);
 
-       /* Hardware Initialization */
-       SoftUART_Init();
-       LEDs_Init();
-       USB_Init();
-
        /* Disable JTAG debugging */
        MCUCR |= (1 << JTD);
        MCUCR |= (1 << JTD);
@@ -189,6 +190,16 @@ void SetupHardware(void)
        /* Re-enable JTAG debugging */
        MCUCR &= ~(1 << JTD);
        MCUCR &= ~(1 << JTD);
+
+       /* Hardware Initialization */
+       SoftUART_Init();
+       LEDs_Init();
+       #if defined(RESET_TOGGLES_LIBUSB_COMPAT)
+       UpdateCurrentCompatibilityMode();
+       #endif
+       
+       /* USB Stack Initialization */  
+       USB_Init();
 }
 
 /** Event handler for the library USB Configuration Changed event. */
@@ -213,13 +224,10 @@ void EVENT_USB_Device_ConfigurationChanged(void)
        }
        else
        {
-               ConfigSuccess &= Endpoint_ConfigureEndpoint(AVRISP_DATA_OUT_EPNUM, EP_TYPE_BULK, ENDPOINT_DIR_OUT,
-                                                           AVRISP_DATA_EPSIZE, ENDPOINT_BANK_SINGLE);
+               ConfigSuccess &= Endpoint_ConfigureEndpoint(AVRISP_DATA_OUT_EPADDR, EP_TYPE_BULK, AVRISP_DATA_EPSIZE, 1);
 
-               #if defined(LIBUSB_DRIVER_COMPAT)
-               ConfigSuccess &= Endpoint_ConfigureEndpoint(AVRISP_DATA_IN_EPNUM, EP_TYPE_BULK, ENDPOINT_DIR_IN,
-                                                           AVRISP_DATA_EPSIZE, ENDPOINT_BANK_SINGLE);
-               #endif
+               if ((AVRISP_DATA_IN_EPADDR & ENDPOINT_EPNUM_MASK) != (AVRISP_DATA_OUT_EPADDR & ENDPOINT_EPNUM_MASK))
+                 ConfigSuccess &= Endpoint_ConfigureEndpoint(AVRISP_DATA_IN_EPADDR, EP_TYPE_BULK, AVRISP_DATA_EPSIZE, 1);
 
                /* Configure the V2 protocol packet handler */
                V2Protocol_Init();
@@ -263,20 +271,22 @@ void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCI
  *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
  *  USB host.
  *
- *  \param[in]  wValue  Descriptor type and index to retrieve
- *  \param[in]  wIndex  Sub-index to retrieve (such as a localized string language)
- *  \param[out] DescriptorAddress  Address of the retrieved descriptor
+ *  \param[in]  wValue                 Descriptor type and index to retrieve
+ *  \param[in]  wIndex                 Sub-index to retrieve (such as a localized string language)
+ *  \param[out] DescriptorAddress      Address of the retrieved descriptor
+ *  \param[out] DescriptorMemorySpace  Memory space that the descriptor is stored in
  *
  *  \return Length of the retrieved descriptor in bytes, or NO_DESCRIPTOR if the descriptor was not found
  */
 uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                     const uint8_t wIndex,
-                                    const void** const DescriptorAddress)
+                                    const void** const DescriptorAddress,
+                                           uint8_t* const DescriptorMemorySpace)
 {
        /* Return the correct descriptors based on the selected mode */
        if (CurrentFirmwareMode == MODE_USART_BRIDGE)
-         return USART_GetDescriptor(wValue, wIndex, DescriptorAddress);
+         return USART_GetDescriptor(wValue, wIndex, DescriptorAddress, DescriptorMemorySpace);
        else
-         return AVRISP_GetDescriptor(wValue, wIndex, DescriptorAddress);
+         return AVRISP_GetDescriptor(wValue, wIndex, DescriptorAddress, DescriptorMemorySpace);
 }