diff options
Diffstat (limited to 'Demos/Host/Incomplete')
3 files changed, 45 insertions, 66 deletions
diff --git a/Demos/Host/Incomplete/BluetoothHost/ConfigDescriptor.c b/Demos/Host/Incomplete/BluetoothHost/ConfigDescriptor.c index 0fd08fb93..cc7570387 100644 --- a/Demos/Host/Incomplete/BluetoothHost/ConfigDescriptor.c +++ b/Demos/Host/Incomplete/BluetoothHost/ConfigDescriptor.c @@ -50,7 +50,10 @@ uint8_t ProcessConfigurationDescriptor(void) uint8_t ConfigDescriptorData[512]; void* CurrConfigLocation = ConfigDescriptorData; uint16_t CurrConfigBytesRem; - uint8_t FoundEndpoints = 0; + + USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; + USB_Descriptor_Endpoint_t* DataOUTEndpoint = NULL; + USB_Descriptor_Endpoint_t* EventsEndpoint = NULL; /* Retrieve the entire configuration descriptor into the allocated buffer */ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) @@ -62,7 +65,7 @@ uint8_t ProcessConfigurationDescriptor(void) case HOST_GETCONFIG_BuffOverflow: return DescriptorTooLarge; default: - return ControlError; + return DevControlError; } /* The Bluetooth USB transport addendum mandates that the data (not streaming voice) endpoints @@ -71,63 +74,48 @@ uint8_t ProcessConfigurationDescriptor(void) /* Ensure that an interface was found, and the end of the descriptor was not reached */ if (!(CurrConfigBytesRem)) - return NoBTInterfaceFound; + return NoCompatibleInterfaceFound; - /* Get the data IN, data OUT and event notification endpoints for the Bluetooth interface */ - while (FoundEndpoints != ((1 << BLUETOOTH_DATA_IN_PIPE) | (1 << BLUETOOTH_DATA_OUT_PIPE) | - (1 << BLUETOOTH_EVENTS_PIPE))) + while (!(DataINEndpoint) || !(DataOUTEndpoint)) { - /* Fetch the next endpoint from the current Bluetooth interface */ + /* Get the next Still Image interface's data endpoint descriptor */ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, - DComp_NextInterfaceBluetoothDataEndpoint)) + DComp_NextInterfaceBluetoothDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) { - /* Descriptor not found, error out */ - return NoEndpointFound; + /* Data endpoints not found within the first bluetooth device interface, error out */ + return NoCompatibleInterfaceFound; } - + + /* Retrieve the endpoint address from the endpoint descriptor */ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); - /* Check if the endpoint is a bulk or interrupt type endpoint */ - if ((EndpointData->Attributes & EP_TYPE_MASK) == EP_TYPE_INTERRUPT) + /* If the endpoint is a IN type endpoint */ + if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN) { - if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN) - { - /* Configure the events IN pipe */ - Pipe_ConfigurePipe(BLUETOOTH_EVENTS_PIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN, - EndpointData->EndpointAddress, EndpointData->EndpointSize, - PIPE_BANK_SINGLE); - - Pipe_SetInterruptPeriod(EndpointData->PollingIntervalMS); - - /* Set the flag indicating that the events notification pipe has been found */ - FoundEndpoints |= (1 << BLUETOOTH_EVENTS_PIPE); - } + /* Check if the found endpoint is a interrupt or bulk type descriptor */ + if ((EndpointData->Attributes & EP_TYPE_MASK) == EP_TYPE_INTERRUPT) + EventsEndpoint = EndpointData; + else + DataINEndpoint = EndpointData; } else { - if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN) - { - /* Configure the data IN pipe */ - Pipe_ConfigurePipe(BLUETOOTH_DATA_IN_PIPE, EP_TYPE_BULK, PIPE_TOKEN_IN, - EndpointData->EndpointAddress, EndpointData->EndpointSize, - PIPE_BANK_SINGLE); - - /* Set the flag indicating that the data IN pipe has been found */ - FoundEndpoints |= (1 << BLUETOOTH_DATA_IN_PIPE); - } - else - { - /* Configure the data OUT pipe */ - Pipe_ConfigurePipe(BLUETOOTH_DATA_OUT_PIPE, EP_TYPE_BULK, PIPE_TOKEN_OUT, - EndpointData->EndpointAddress, EndpointData->EndpointSize, - PIPE_BANK_SINGLE); - - /* Set the flag indicating that the data OUT pipe has been found */ - FoundEndpoints |= (1 << BLUETOOTH_DATA_OUT_PIPE); - } + DataOUTEndpoint = EndpointData; } - } + + /* Configure the Bluetooth data IN pipe */ + Pipe_ConfigurePipe(BLUETOOTH_DATA_IN_PIPE, EP_TYPE_BULK, PIPE_TOKEN_IN, + DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, PIPE_BANK_SINGLE); + + /* Configure the Bluetooth data OUT pipe */ + Pipe_ConfigurePipe(BLUETOOTH_DATA_OUT_PIPE, EP_TYPE_BULK, PIPE_TOKEN_OUT, + DataOUTEndpoint->EndpointAddress, DataOUTEndpoint->EndpointSize, PIPE_BANK_SINGLE); + + /* Configure the Bluetooth events pipe */ + Pipe_ConfigurePipe(BLUETOOTH_EVENTS_PIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN, + EventsEndpoint->EndpointAddress, EventsEndpoint->EndpointSize, PIPE_BANK_SINGLE); + Pipe_SetInterruptPeriod(EventsEndpoint->PollingIntervalMS); /* Valid data found, return success */ return SuccessfulConfigRead; @@ -146,17 +134,10 @@ uint8_t DComp_NextInterfaceBluetoothDataEndpoint(void* CurrentDescriptor) { /* Determine the type of the current descriptor */ if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint) - { - /* Indicate that the descriptor being searched for has been found */ - return DESCRIPTOR_SEARCH_Found; - } + return DESCRIPTOR_SEARCH_Found; else if (DESCRIPTOR_TYPE(CurrentDescriptor) == 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; + return DESCRIPTOR_SEARCH_Fail; + else + return DESCRIPTOR_SEARCH_NotFound; } diff --git a/Demos/Host/Incomplete/BluetoothHost/ConfigDescriptor.h b/Demos/Host/Incomplete/BluetoothHost/ConfigDescriptor.h index 70451a6be..25442b87b 100644 --- a/Demos/Host/Incomplete/BluetoothHost/ConfigDescriptor.h +++ b/Demos/Host/Incomplete/BluetoothHost/ConfigDescriptor.h @@ -39,7 +39,10 @@ /* Includes: */ #include <LUFA/Drivers/USB/USB.h> - #include "BluetoothHost.h" + /* Macros: */ + #define BLUETOOTH_DATA_IN_PIPE 1 + #define BLUETOOTH_DATA_OUT_PIPE 2 + #define BLUETOOTH_EVENTS_PIPE 3 /* Enums: */ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ @@ -49,10 +52,7 @@ DevControlError = 1, /**< A control request to the device failed to complete successfully */ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ - NoBTInterfaceFound = 4, /**< A compatible Bluetooth interface was not found in the device's Configuration Descriptor */ - NoEndpointFound = 5, /**< A compatible set of Bluetooth endpoints were not found in the - * device's Bluetooth interface - */ + NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ }; /* Function Prototypes: */ diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothStack.h b/Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothStack.h index 6f1ea6742..e434e6c4f 100644 --- a/Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothStack.h +++ b/Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothStack.h @@ -39,11 +39,9 @@ /* Includes: */ #include <LUFA/Drivers/USB/USB.h> + #include "../ConfigDescriptor.h" + /* Macros: */ - #define BLUETOOTH_DATA_IN_PIPE 1 - #define BLUETOOTH_DATA_OUT_PIPE 2 - #define BLUETOOTH_EVENTS_PIPE 3 - #define BLUETOOTH_MAX_OPEN_CHANNELS 6 #define CHANNEL_PSM_SDP 0x0001 |