From 3a79548dc2bfd08f13a387b5533d8598ba0078d7 Mon Sep 17 00:00:00 2001 From: Dean Camera 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 92d2d3c129..e99a26b369 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 6a2cff409d..d56a7f7bce 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 0a4a629a59..bd9aee6890 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 95c96741dd..d3453326c1 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 * * Non-USB Library Components * - The Dataflash board driver stub file has changed, as dataflash functions previously located in the internal