From 3a79548dc2bfd08f13a387b5533d8598ba0078d7 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Fri, 23 Jul 2010 09:12:26 +0000
Subject: [PATCH] Add TMC device capabilities to the incomplete TMC demo.

---
 Demos/Device/Incomplete/Sideshow/Sideshow.c   |  2 +-
 .../TestAndMeasurement/TestAndMeasurement.c   | 41 ++++++++++++++++++-
 .../TestAndMeasurement/TestAndMeasurement.h   | 26 ++++++++++++
 LUFA/ManPages/MigrationInformation.txt        |  2 +-
 4 files changed, 68 insertions(+), 3 deletions(-)

diff --git a/Demos/Device/Incomplete/Sideshow/Sideshow.c b/Demos/Device/Incomplete/Sideshow/Sideshow.c
index 92d2d3c12..e99a26b36 100644
--- a/Demos/Device/Incomplete/Sideshow/Sideshow.c
+++ b/Demos/Device/Incomplete/Sideshow/Sideshow.c
@@ -130,7 +130,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 				Endpoint_ClearSETUP();
 				
 				Endpoint_Write_Control_PStream_LE(DescriptorPointer, DescriptorSize);
-				Endpoint_ClearOUT();				
+				Endpoint_ClearOUT();
 			}
 
 			break;
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
index 6a2cff409..d56a7f7bc 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
+++ b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
@@ -30,6 +30,29 @@
 
 #include "TestAndMeasurement.h"
 
+/** Contains the (usually static) capabilities of the TMC device. This table is requested by the
+ *  host upon enumeration to give it information on what features of the Test and Measurement USB
+ *  Class the device supports.
+ */
+TMC_Capabilities_t Capabilities =
+	{
+		.Status     = TMC_REQUEST_STATUS_SUCCESS,
+		.TMCVersion = VERSION_BCD(1.00),
+		
+		.Interface  =
+			{
+				.ListenOnly             = false,
+				.TalkOnly               = false,
+				.PulseIndicateSupported = true,
+			},
+
+		.Device     =
+			{
+				.SupportsAbortINOnMatch = false,
+			},
+	};
+
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
@@ -141,7 +164,14 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 		case Req_GetCapabilities:
 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
 			{
-			
+				/* Acknowledge the SETUP packet, ready for data transfer */
+				Endpoint_ClearSETUP();
+					
+				/* Write the device capabilities to the control endpoint */
+				Endpoint_Write_Control_Stream_LE(&Capabilities, sizeof(TMC_Capabilities_t));
+				
+				/* Finalize the stream transfer to send the last packet or clear the host abort */
+				Endpoint_ClearOUT();
 			}
 			
 			break;
@@ -153,4 +183,13 @@ void TMC_Task(void)
 	/* Device must be connected and configured for the task to run */
 	if (USB_DeviceState != DEVICE_STATE_Configured)
 	  return;
+	  
+	Endpoint_SelectEndpoint(TMC_OUT_EPNUM);
+	
+	if (Endpoint_IsOUTReceived())
+	{
+		// TEMP - Indicate data received
+		LEDs_SetAllLEDs(LEDS_ALL_LEDS);
+		Endpoint_ClearOUT();
+	}
 }
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h
index 0a4a629a5..bd9aee689 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h
+++ b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h
@@ -71,6 +71,32 @@
 		#define TMC_REQUEST_STATUS_NOTRANSFER         0x81
 		#define TMC_REQUEST_STATUS_NOCHECKINITIATED   0x82
 		#define TMC_REQUEST_STATUS_CHECKINPROGRESS    0x83
+
+	/* Type Defines */
+		typedef struct
+		{
+			uint8_t  Status;
+			uint8_t  _RESERVED1;
+
+			uint16_t TMCVersion;
+			
+			struct
+			{
+				unsigned char ListenOnly             : 1;
+				unsigned char TalkOnly               : 1;
+				unsigned char PulseIndicateSupported : 1;
+				unsigned char _RESERVED              : 5;
+			} Interface;
+			
+			struct
+			{
+				unsigned char SupportsAbortINOnMatch : 1;
+				unsigned char _RESERVED              : 7;
+			} Device;
+			
+			uint8_t _RESERVED2[6];
+			uint8_t _RESERVED3[12];			
+		} TMC_Capabilities_t;
 		
 	/* Function Prototypes: */
 		void SetupHardware(void);
diff --git a/LUFA/ManPages/MigrationInformation.txt b/LUFA/ManPages/MigrationInformation.txt
index 95c96741d..d3453326c 100644
--- a/LUFA/ManPages/MigrationInformation.txt
+++ b/LUFA/ManPages/MigrationInformation.txt
@@ -10,7 +10,7 @@
  *  to the next version released. It does not indicate all new additions to the library in each version change, only
  *  areas relevant to making older projects compatible with the API changes of each new release.
  *
- * \section Sec_Migration100513 Migrating from 100513 to XXXXXX
+ * \section Sec_MigrationXXXXXX Migrating from 100513 to XXXXXX
  *
  *  <b>Non-USB Library Components</b>
  *    - The Dataflash board driver stub file has changed, as dataflash functions previously located in the internal
-- 
GitLab