X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/c8942ef4699362747efd6580975a7f61757a4cd6..3642ea0b9715cdf0196b10c9fc97898940eaefa6:/Projects/MissileLauncher/ConfigDescriptor.c diff --git a/Projects/MissileLauncher/ConfigDescriptor.c b/Projects/MissileLauncher/ConfigDescriptor.c index 7ee2449c2..295caa5ff 100644 --- a/Projects/MissileLauncher/ConfigDescriptor.c +++ b/Projects/MissileLauncher/ConfigDescriptor.c @@ -1,24 +1,24 @@ /* LUFA Library - Copyright (C) Dean Camera, 2010. - + Copyright (C) Dean Camera, 2015. + dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com + www.lufa-lib.org */ /* - Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2015 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. - The author disclaim all warranties with regard to this + The author disclaims all warranties with regard to this software, including all implied warranties of merchantability and fitness. In no event shall the author be liable for any special, indirect or consequential damages or any damages @@ -50,7 +50,7 @@ uint8_t ProcessConfigurationDescriptor(void) uint8_t ConfigDescriptorData[512]; void* CurrConfigLocation = ConfigDescriptorData; uint16_t CurrConfigBytesRem; - + USB_Descriptor_Interface_t* HIDInterface = NULL; USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; USB_Descriptor_Endpoint_t* DataOUTEndpoint = NULL; @@ -79,15 +79,15 @@ uint8_t ProcessConfigurationDescriptor(void) * but only found the mandatory IN endpoint, it's safe to continue with the device enumeration */ if (DataINEndpoint) break; - + /* Get the next HID interface from the configuration descriptor */ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, - DComp_NextHIDInterface) != DESCRIPTOR_SEARCH_COMP_Found) + DComp_NextHIDInterface) != DESCRIPTOR_SEARCH_COMP_Found) { /* Descriptor not found, error out */ return NoCompatibleInterfaceFound; } - + /* Save the interface in case we need to refer back to it later */ HIDInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); @@ -97,30 +97,28 @@ uint8_t ProcessConfigurationDescriptor(void) /* Skip the remainder of the loop as we have not found an endpoint yet */ continue; } - + /* Retrieve the endpoint address from the endpoint descriptor */ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); /* If the endpoint is a IN type endpoint */ - if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN) - DataINEndpoint = EndpointData; + if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) + DataINEndpoint = EndpointData; else DataOUTEndpoint = EndpointData; } - + /* Configure the HID data IN pipe */ - Pipe_ConfigurePipe(HID_DATA_IN_PIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN, - DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, PIPE_BANK_SINGLE); + Pipe_ConfigurePipe(HID_DATA_IN_PIPE, EP_TYPE_INTERRUPT, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 1); Pipe_SetInterruptPeriod(DataINEndpoint->PollingIntervalMS); - + /* Check if the HID interface contained an optional OUT data endpoint */ if (DataOUTEndpoint) { /* Configure the HID data OUT pipe */ - Pipe_ConfigurePipe(HID_DATA_OUT_PIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_OUT, - DataOUTEndpoint->EndpointAddress, DataOUTEndpoint->EndpointSize, PIPE_BANK_SINGLE); - } - + Pipe_ConfigurePipe(HID_DATA_OUT_PIPE, EP_TYPE_INTERRUPT, DataOUTEndpoint->EndpointAddress, DataOUTEndpoint->EndpointSize, 1); + } + /* Valid data found, return success */ return SuccessfulConfigRead; } @@ -135,17 +133,21 @@ uint8_t ProcessConfigurationDescriptor(void) */ uint8_t DComp_NextHIDInterface(void* CurrentDescriptor) { + USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); + /* Determine if the current descriptor is an interface descriptor */ - if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface) + if (Header->Type == DTYPE_Interface) { + USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); + /* Check the HID descriptor class and protocol, break out if correct class/protocol interface found */ - if (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Class == HID_CLASS) + if (Interface->Class == HID_CLASS) { /* Indicate that the descriptor being searched for has been found */ return DESCRIPTOR_SEARCH_Found; } } - + /* Current descriptor does not match what this comparator is looking for */ return DESCRIPTOR_SEARCH_NotFound; } @@ -161,18 +163,23 @@ uint8_t DComp_NextHIDInterface(void* CurrentDescriptor) */ uint8_t DComp_NextHIDInterfaceDataEndpoint(void* CurrentDescriptor) { + USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); + /* Determine the type of the current descriptor */ - if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint) + if (Header->Type == DTYPE_Endpoint) { /* Indicate that the descriptor being searched for has been found */ return DESCRIPTOR_SEARCH_Found; } - else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface) + else if (Header->Type == DTYPE_Interface) { /* Indicate that the search has failed prematurely and should be aborted */ return DESCRIPTOR_SEARCH_Fail; } - - /* Current descriptor does not match what this comparator is looking for */ - return DESCRIPTOR_SEARCH_NotFound; + else + { + /* Current descriptor does not match what this comparator is looking for */ + return DESCRIPTOR_SEARCH_NotFound; + } } +