From b5ca3990c2ec9dc240fb334002ed2f7c82eea853 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Tue, 16 Jun 2009 04:20:21 +0000
Subject: Added new USB_Host_SetDeviceConfiguration() convenience function.
 Change over Low Level host demos to use the new routine.

---
 Demos/Host/LowLevel/CDCHost/CDCHost.c              | 47 ++++++++------------
 .../Host/LowLevel/GenericHIDHost/GenericHIDHost.c  | 49 ++++++++-------------
 Demos/Host/LowLevel/KeyboardHost/KeyboardHost.c    | 47 ++++++++------------
 .../KeyboardHostWithParser.c                       | 50 ++++++++--------------
 .../LowLevel/MassStorageHost/MassStorageHost.c     | 47 ++++++++------------
 Demos/Host/LowLevel/MouseHost/MouseHost.c          | 49 ++++++++-------------
 .../MouseHostWithParser/MouseHostWithParser.c      | 49 ++++++++-------------
 .../Host/LowLevel/StillImageHost/StillImageHost.c  | 45 +++++++------------
 8 files changed, 140 insertions(+), 243 deletions(-)

(limited to 'Demos')

diff --git a/Demos/Host/LowLevel/CDCHost/CDCHost.c b/Demos/Host/LowLevel/CDCHost/CDCHost.c
index 9a5e81ae4..e00332f9f 100644
--- a/Demos/Host/LowLevel/CDCHost/CDCHost.c
+++ b/Demos/Host/LowLevel/CDCHost/CDCHost.c
@@ -132,36 +132,6 @@ void CDC_Host_Task(void)
 	switch (USB_HostState)
 	{
 		case HOST_STATE_Addressed:
-			/* Standard request to set the device configuration to configuration 1 */
-			USB_ControlRequest = (USB_Request_Header_t)
-				{
-					.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),
-					.bRequest      = REQ_SetConfiguration,
-					.wValue        = 1,
-					.wIndex        = 0,
-					.wLength       = 0,
-				};
-
-			/* Select the control pipe for the request transfer */
-			Pipe_SelectPipe(PIPE_CONTROLPIPE);
-
-			/* Send the request, display error and wait for device detach if request fails */
-			if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
-			{
-				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
-				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
-
-				/* Indicate error via status LEDs */
-				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-
-				/* Wait until USB device disconnected */
-				while (USB_IsConnected);
-				break;
-			}
-				
-			USB_HostState = HOST_STATE_Configured;
-			break;
-		case HOST_STATE_Configured:
 			puts_P(PSTR("Getting Config Data.\r\n"));
 		
 			/* Get and process the configuration descriptor data */
@@ -181,7 +151,24 @@ void CDC_Host_Task(void)
 				while (USB_IsConnected);
 				break;
 			}
+			
+			/* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */
+			if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful)
+			{
+				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
+				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
 
+				/* Indicate error via status LEDs */
+				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+
+				/* Wait until USB device disconnected */
+				while (USB_IsConnected);
+				break;
+			}
+				
+			USB_HostState = HOST_STATE_Configured;
+			break;
+		case HOST_STATE_Configured:
 			puts_P(PSTR("CDC Device Enumerated.\r\n"));
 				
 			USB_HostState = HOST_STATE_Ready;
diff --git a/Demos/Host/LowLevel/GenericHIDHost/GenericHIDHost.c b/Demos/Host/LowLevel/GenericHIDHost/GenericHIDHost.c
index ac764fad0..5bb89af47 100644
--- a/Demos/Host/LowLevel/GenericHIDHost/GenericHIDHost.c
+++ b/Demos/Host/LowLevel/GenericHIDHost/GenericHIDHost.c
@@ -233,36 +233,6 @@ void HID_Host_Task(void)
 	switch (USB_HostState)
 	{
 		case HOST_STATE_Addressed:
-			/* Standard request to set the device configuration to configuration 1 */
-			USB_ControlRequest = (USB_Request_Header_t)
-				{
-					.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),
-					.bRequest      = REQ_SetConfiguration,
-					.wValue        = 1,
-					.wIndex        = 0,
-					.wLength       = 0,
-				};
-
-			/* Select the control pipe for the request transfer */
-			Pipe_SelectPipe(PIPE_CONTROLPIPE);
-
-			/* Send the request, display error and wait for device detach if request fails */
-			if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
-			{
-				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
-				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
-
-				/* Indicate error status */
-				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-				
-				/* Wait until USB device disconnected */
-				while (USB_IsConnected);
-				break;
-			}
-			
-			USB_HostState = HOST_STATE_Configured;
-			break;
-		case HOST_STATE_Configured:
 			puts_P(PSTR("Getting Config Data.\r\n"));
 		
 			/* Get and process the configuration descriptor data */
@@ -282,7 +252,24 @@ void HID_Host_Task(void)
 				while (USB_IsConnected);
 				break;
 			}
-		
+
+			/* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */
+			if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful)
+			{
+				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
+				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
+
+				/* Indicate error status */
+				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+				
+				/* Wait until USB device disconnected */
+				while (USB_IsConnected);
+				break;
+			}
+			
+			USB_HostState = HOST_STATE_Configured;
+			break;
+		case HOST_STATE_Configured:
 			puts_P(PSTR("HID Device Enumerated.\r\n"));
 					
 			USB_HostState = HOST_STATE_Ready;
diff --git a/Demos/Host/LowLevel/KeyboardHost/KeyboardHost.c b/Demos/Host/LowLevel/KeyboardHost/KeyboardHost.c
index 64bcf0906..734ef2a57 100644
--- a/Demos/Host/LowLevel/KeyboardHost/KeyboardHost.c
+++ b/Demos/Host/LowLevel/KeyboardHost/KeyboardHost.c
@@ -197,36 +197,6 @@ void Keyboard_HID_Task(void)
 	switch (USB_HostState)
 	{
 		case HOST_STATE_Addressed:
-			/* Standard request to set the device configuration to configuration 1 */
-			USB_ControlRequest = (USB_Request_Header_t)
-				{
-					.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),
-					.bRequest      = REQ_SetConfiguration,
-					.wValue        = 1,
-					.wIndex        = 0,
-					.wLength       = 0,
-				};
-
-			/* Select the control pipe for the request transfer */
-			Pipe_SelectPipe(PIPE_CONTROLPIPE);
-
-			/* Send the request, display error and wait for device detach if request fails */
-			if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
-			{
-				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
-				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
-
-				/* Indicate error status */
-				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-
-				/* Wait until USB device disconnected */
-				while (USB_IsConnected);
-				break;
-			}
-				
-			USB_HostState = HOST_STATE_Configured;
-			break;
-		case HOST_STATE_Configured:
 			puts_P(PSTR("Getting Config Data.\r\n"));
 		
 			/* Get and process the configuration descriptor data */
@@ -247,6 +217,23 @@ void Keyboard_HID_Task(void)
 				break;
 			}
 		
+			/* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */
+			if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful)
+			{
+				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
+				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
+
+				/* Indicate error status */
+				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+
+				/* Wait until USB device disconnected */
+				while (USB_IsConnected);
+				break;
+			}
+				
+			USB_HostState = HOST_STATE_Configured;
+			break;
+		case HOST_STATE_Configured:
 			/* HID class request to set the keyboard protocol to the Boot Protocol */
 			USB_ControlRequest = (USB_Request_Header_t)
 				{
diff --git a/Demos/Host/LowLevel/KeyboardHostWithParser/KeyboardHostWithParser.c b/Demos/Host/LowLevel/KeyboardHostWithParser/KeyboardHostWithParser.c
index 620f158e0..54e400ded 100644
--- a/Demos/Host/LowLevel/KeyboardHostWithParser/KeyboardHostWithParser.c
+++ b/Demos/Host/LowLevel/KeyboardHostWithParser/KeyboardHostWithParser.c
@@ -132,36 +132,6 @@ void Keyboard_HID_Task(void)
 	switch (USB_HostState)
 	{
 		case HOST_STATE_Addressed:
-			/* Standard request to set the device configuration to configuration 1 */
-			USB_ControlRequest = (USB_Request_Header_t)
-				{
-					.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),
-					.bRequest      = REQ_SetConfiguration,
-					.wValue        = 1,
-					.wIndex        = 0,
-					.wLength       = 0,
-				};
-
-			/* Select the control pipe for the request transfer */
-			Pipe_SelectPipe(PIPE_CONTROLPIPE);
-
-			/* Send the request, display error and wait for device detach if request fails */
-			if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
-			{
-				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
-				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
-
-				/* Indicate error via status LEDs */
-				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-
-				/* Wait until USB device disconnected */
-				while (USB_IsConnected);
-				break;
-			}
-				
-			USB_HostState = HOST_STATE_Configured;
-			break;
-		case HOST_STATE_Configured:
 			puts_P(PSTR("Getting Config Data.\r\n"));
 		
 			/* Get and process the configuration descriptor data */
@@ -181,7 +151,25 @@ void Keyboard_HID_Task(void)
 				while (USB_IsConnected);
 				break;
 			}
-					
+
+			/* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */
+			if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful)
+
+			{
+				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
+				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
+
+				/* Indicate error via status LEDs */
+				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+
+				/* Wait until USB device disconnected */
+				while (USB_IsConnected);
+				break;
+			}
+				
+			USB_HostState = HOST_STATE_Configured;
+			break;
+		case HOST_STATE_Configured:
 			puts_P(PSTR("Processing HID Report.\r\n"));
 
 			/* Get and process the device's first HID report descriptor */
diff --git a/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c b/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c
index 354a75fc7..905077e81 100644
--- a/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c
+++ b/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c
@@ -138,36 +138,6 @@ void MassStorage_Task(void)
 	switch (USB_HostState)
 	{
 		case HOST_STATE_Addressed:
-			/* Standard request to set the device configuration to configuration 1 */
-			USB_ControlRequest = (USB_Request_Header_t)
-				{
-					.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),
-					.bRequest      = REQ_SetConfiguration,
-					.wValue        = 1,
-					.wIndex        = 0,
-					.wLength       = 0,
-				};
-				
-			/* Select the control pipe for the request transfer */
-			Pipe_SelectPipe(PIPE_CONTROLPIPE);
-
-			/* Send the request, display error and wait for device detach if request fails */
-			if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
-			{
-				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
-				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
-
-				/* Indicate error via status LEDs */
-				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-
-				/* Wait until USB device disconnected */
-				while (USB_IsConnected);
-				break;
-			}
-				
-			USB_HostState = HOST_STATE_Configured;
-			break;
-		case HOST_STATE_Configured:
 			puts_P(PSTR("Getting Config Data.\r\n"));
 		
 			/* Get and process the configuration descriptor data */
@@ -188,6 +158,23 @@ void MassStorage_Task(void)
 				break;
 			}
 
+			/* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */
+			if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful)
+			{
+				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
+				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
+
+				/* Indicate error via status LEDs */
+				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+
+				/* Wait until USB device disconnected */
+				while (USB_IsConnected);
+				break;
+			}
+				
+			USB_HostState = HOST_STATE_Configured;
+			break;
+		case HOST_STATE_Configured:
 			puts_P(PSTR("Mass Storage Disk Enumerated.\r\n"));
 				
 			USB_HostState = HOST_STATE_Ready;
diff --git a/Demos/Host/LowLevel/MouseHost/MouseHost.c b/Demos/Host/LowLevel/MouseHost/MouseHost.c
index 9b4db3086..2a2e1b994 100644
--- a/Demos/Host/LowLevel/MouseHost/MouseHost.c
+++ b/Demos/Host/LowLevel/MouseHost/MouseHost.c
@@ -193,36 +193,6 @@ void Mouse_HID_Task(void)
 	switch (USB_HostState)
 	{
 		case HOST_STATE_Addressed:
-			/* Standard request to set the device configuration to configuration 1 */
-			USB_ControlRequest = (USB_Request_Header_t)
-				{
-					.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),
-					.bRequest      = REQ_SetConfiguration,
-					.wValue        = 1,
-					.wIndex        = 0,
-					.wLength       = 0,
-				};
-
-			/* Select the control pipe for the request transfer */
-			Pipe_SelectPipe(PIPE_CONTROLPIPE);
-
-			/* Send the request, display error and wait for device detach if request fails */
-			if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
-			{
-				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
-				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
-
-				/* Indicate error status */
-				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-				
-				/* Wait until USB device disconnected */
-				while (USB_IsConnected);
-				break;
-			}
-			
-			USB_HostState = HOST_STATE_Configured;
-			break;
-		case HOST_STATE_Configured:
 			puts_P(PSTR("Getting Config Data.\r\n"));
 		
 			/* Get and process the configuration descriptor data */
@@ -242,7 +212,24 @@ void Mouse_HID_Task(void)
 				while (USB_IsConnected);
 				break;
 			}
-		
+
+			/* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */
+			if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful)
+			{
+				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
+				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
+
+				/* Indicate error status */
+				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+				
+				/* Wait until USB device disconnected */
+				while (USB_IsConnected);
+				break;
+			}
+			
+			USB_HostState = HOST_STATE_Configured;
+			break;
+		case HOST_STATE_Configured:
 			/* HID class request to set the mouse protocol to the Boot Protocol */
 			USB_ControlRequest = (USB_Request_Header_t)
 				{
diff --git a/Demos/Host/LowLevel/MouseHostWithParser/MouseHostWithParser.c b/Demos/Host/LowLevel/MouseHostWithParser/MouseHostWithParser.c
index 3ef5503b3..5f0d35866 100644
--- a/Demos/Host/LowLevel/MouseHostWithParser/MouseHostWithParser.c
+++ b/Demos/Host/LowLevel/MouseHostWithParser/MouseHostWithParser.c
@@ -132,37 +132,7 @@ void Mouse_HID_Task(void)
 	/* Switch to determine what user-application handled host state the host state machine is in */
 	switch (USB_HostState)
 	{
-		case HOST_STATE_Addressed:	
-			/* Standard request to set the device configuration to configuration 1 */
-			USB_ControlRequest = (USB_Request_Header_t)
-				{
-					.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),
-					.bRequest      = REQ_SetConfiguration,
-					.wValue        = 1,
-					.wIndex        = 0,
-					.wLength       = 0,
-				};
-
-			/* Select the control pipe for the request transfer */
-			Pipe_SelectPipe(PIPE_CONTROLPIPE);
-
-			/* Send the request, display error and wait for device detach if request fails */
-			if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
-			{
-				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
-				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
-
-				/* Indicate error via status LEDs */
-				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-				
-				/* Wait until USB device disconnected */
-				while (USB_IsConnected);
-				break;
-			}
-			
-			USB_HostState = HOST_STATE_Configured;
-			break;
-		case HOST_STATE_Configured:
+		case HOST_STATE_Addressed:
 			puts_P(PSTR("Getting Config Data.\r\n"));
 		
 			/* Get and process the configuration descriptor data */
@@ -183,6 +153,23 @@ void Mouse_HID_Task(void)
 				break;
 			}
 		
+			/* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */
+			if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful)
+			{
+				puts_P(PSTR("Control Error (Set Configuration).\r\n"));
+				printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode);
+
+				/* Indicate error via status LEDs */
+				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+				
+				/* Wait until USB device disconnected */
+				while (USB_IsConnected);
+				break;
+			}
+			
+			USB_HostState = HOST_STATE_Configured;
+			break;
+		case HOST_STATE_Configured:
 			puts_P(PSTR("Processing HID Report.\r\n"));
 
 			/* Get and process the device's first HID report descriptor */
diff --git a/Demos/Host/LowLevel/StillImageHost/StillImageHost.c b/Demos/Host/LowLevel/StillImageHost/StillImageHost.c
index 318e25731..a337ab045 100644
--- a/Demos/Host/LowLevel/StillImageHost/StillImageHost.c
+++ b/Demos/Host/LowLevel/StillImageHost/StillImageHost.c
@@ -133,35 +133,6 @@ void StillImage_Task(void)
 	switch (USB_HostState)
 	{
 		case HOST_STATE_Addressed:
-			/* Standard request to set the device configuration to configuration 1 */
-			USB_ControlRequest = (USB_Request_Header_t)
-				{
-					.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),
-					.bRequest      = REQ_SetConfiguration,
-					.wValue        = 1,
-					.wIndex        = 0,
-					.wLength       = 0,
-				};
-
-			/* Select the control pipe for the request transfer */
-			Pipe_SelectPipe(PIPE_CONTROLPIPE);
-
-			/* Send the request, display error and wait for device detach if request fails */
-			if (USB_Host_SendControlRequest(NULL) != HOST_SENDCONTROL_Successful)
-			{
-				puts_P(PSTR("Control error.\r\n"));
-
-				/* Indicate error via status LEDs */
-				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-
-				/* Wait until USB device disconnected */
-				while (USB_IsConnected);
-				break;
-			}
-				
-			USB_HostState = HOST_STATE_Configured;
-			break;
-		case HOST_STATE_Configured:
 			puts_P(PSTR("Getting Config Data.\r\n"));
 		
 			/* Get and process the configuration descriptor data */
@@ -182,6 +153,22 @@ void StillImage_Task(void)
 				break;
 			}
 
+			/* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */
+			if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful)
+			{
+				puts_P(PSTR("Control error.\r\n"));
+
+				/* Indicate error via status LEDs */
+				LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+
+				/* Wait until USB device disconnected */
+				while (USB_IsConnected);
+				break;
+			}
+				
+			USB_HostState = HOST_STATE_Configured;
+			break;
+		case HOST_STATE_Configured:
 			puts_P(PSTR("Still Image Device Enumerated.\r\n"));
 				
 			USB_HostState = HOST_STATE_Ready;
-- 
cgit v1.2.3