Fix nasty bug in USBInterrupt.c which would cause a lockup if the control endpoint...
authorDean Camera <dean@fourwalledcubicle.com>
Tue, 11 May 2010 13:45:23 +0000 (13:45 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Tue, 11 May 2010 13:45:23 +0000 (13:45 +0000)
Demos/Host/Incomplete/BluetoothHost/Lib/ServiceDiscoveryProtocol.c
LUFA/Drivers/USB/LowLevel/USBInterrupt.c

index f7935ca..bd64941 100644 (file)
@@ -183,8 +183,6 @@ static uint32_t ServiceDiscovery_GetDataElementSize(const void** DataElementHead
        uint8_t SizeIndex = (*((uint8_t*)*DataElementHeader) & 0x07);
        *DataElementHeader += sizeof(uint8_t);
        
-       *ElementHeaderSize = 1;
-       
        uint32_t ElementValue;
        
        switch (SizeIndex)
@@ -205,7 +203,8 @@ static uint32_t ServiceDiscovery_GetDataElementSize(const void** DataElementHead
                        *ElementHeaderSize  = (1 + sizeof(uint32_t));
                        break;
                default:
-                       ElementValue = (1UL << SizeIndex);
+                       ElementValue = (1 << SizeIndex);
+                       *ElementHeaderSize = 1;
                        break;
        }
        
index 7edd3ce..43df5f6 100644 (file)
@@ -233,15 +233,15 @@ ISR(USB_GEN_vect, ISR_BLOCK)
 #if defined(INTERRUPT_CONTROL_ENDPOINT) && defined(USB_CAN_BE_DEVICE)
 ISR(USB_COM_vect, ISR_BLOCK)
 {
-       uint8_t PrevSelectedEndpoint = Endpoint_GetCurrentEndpoint();
+       uint8_t PrevSelectedEndpoint = Endpoint_GetCurrentEndpoint(); 
 
+       Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
        USB_INT_Disable(USB_INT_RXSTPI);
        sei();
+
        USB_USBTask();
-       USB_INT_Enable(USB_INT_RXSTPI);
 
-       USB_INT_Clear(USB_INT_RXSTPI);
-       
+       USB_INT_Enable(USB_INT_RXSTPI);
        Endpoint_SelectEndpoint(PrevSelectedEndpoint);
 }
 #endif