aboutsummaryrefslogtreecommitdiffstats
path: root/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-08-22 03:26:20 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-08-22 03:26:20 +0000
commit4cc7f5200beef90c39c8c8310ed7c8b849afb4d9 (patch)
treea8e2e56961f7e39b888e4ded0c38c5ab9cf6f5b6 /Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
parent1be3436e895c9937dcd4ebbec33ea199f3e26db2 (diff)
downloadlufa-4cc7f5200beef90c39c8c8310ed7c8b849afb4d9.tar.gz
lufa-4cc7f5200beef90c39c8c8310ed7c8b849afb4d9.tar.bz2
lufa-4cc7f5200beef90c39c8c8310ed7c8b849afb4d9.zip
Changed all Device mode LowLevel demos and Device Class drivers so that the control request is acknowledged and any data transferred as quickly as possible without any processing inbetween sections, so that long callbacks or event handlers will not break communications with the host by exceeding the maximum control request stage timeout period.
Diffstat (limited to 'Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c')
-rw-r--r--Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c37
1 files changed, 17 insertions, 20 deletions
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
index 94b86873f..55e17bcc6 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
+++ b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
@@ -146,8 +146,6 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
case Req_InitiateAbortBulkOut:
if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT))
{
- Endpoint_ClearSETUP();
-
/* Check that no split transaction is already in progress and the data transfer tag is valid */
if (RequestInProgress != 0)
{
@@ -165,6 +163,8 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
/* Save the split request for later checking when a new request is received */
RequestInProgress = Req_InitiateAbortBulkOut;
}
+
+ Endpoint_ClearSETUP();
/* Write the request response byte */
Endpoint_Write_Byte(TMCRequestStatus);
@@ -177,16 +177,16 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
case Req_CheckAbortBulkOutStatus:
if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT))
{
- Endpoint_ClearSETUP();
-
/* Check that an ABORT BULK OUT transaction has been requested and that the request has completed */
if (RequestInProgress != Req_InitiateAbortBulkOut)
TMCRequestStatus = TMC_STATUS_SPLIT_NOT_IN_PROGRESS;
else if (IsTMCBulkOUTReset)
TMCRequestStatus = TMC_STATUS_PENDING;
else
- RequestInProgress = 0;
-
+ RequestInProgress = 0;
+
+ Endpoint_ClearSETUP();
+
/* Write the request response bytes */
Endpoint_Write_Byte(TMCRequestStatus);
Endpoint_Write_Word_LE(0);
@@ -200,8 +200,6 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
case Req_InitiateAbortBulkIn:
if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT))
{
- Endpoint_ClearSETUP();
-
/* Check that no split transaction is already in progress and the data transfer tag is valid */
if (RequestInProgress != 0)
{
@@ -219,6 +217,8 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
/* Save the split request for later checking when a new request is received */
RequestInProgress = Req_InitiateAbortBulkIn;
}
+
+ Endpoint_ClearSETUP();
/* Write the request response bytes */
Endpoint_Write_Byte(TMCRequestStatus);
@@ -232,8 +232,6 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
case Req_CheckAbortBulkInStatus:
if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT))
{
- Endpoint_ClearSETUP();
-
/* Check that an ABORT BULK IN transaction has been requested and that the request has completed */
if (RequestInProgress != Req_InitiateAbortBulkIn)
TMCRequestStatus = TMC_STATUS_SPLIT_NOT_IN_PROGRESS;
@@ -241,7 +239,9 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
TMCRequestStatus = TMC_STATUS_PENDING;
else
RequestInProgress = 0;
-
+
+ Endpoint_ClearSETUP();
+
/* Write the request response bytes */
Endpoint_Write_Byte(TMCRequestStatus);
Endpoint_Write_Word_LE(0);
@@ -255,8 +255,6 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
case Req_InitiateClear:
if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
{
- Endpoint_ClearSETUP();
-
/* Check that no split transaction is already in progress */
if (RequestInProgress != 0)
{
@@ -271,6 +269,8 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
/* Save the split request for later checking when a new request is received */
RequestInProgress = Req_InitiateClear;
}
+
+ Endpoint_ClearSETUP();
/* Write the request response byte */
Endpoint_Write_Byte(TMCRequestStatus);
@@ -283,8 +283,6 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
case Req_CheckClearStatus:
if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
{
- Endpoint_ClearSETUP();
-
/* Check that a CLEAR transaction has been requested and that the request has completed */
if (RequestInProgress != Req_InitiateClear)
TMCRequestStatus = TMC_STATUS_SPLIT_NOT_IN_PROGRESS;
@@ -292,7 +290,9 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
TMCRequestStatus = TMC_STATUS_PENDING;
else
RequestInProgress = 0;
-
+
+ Endpoint_ClearSETUP();
+
/* Write the request response bytes */
Endpoint_Write_Byte(TMCRequestStatus);
Endpoint_Write_Byte(0);
@@ -305,13 +305,10 @@ 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_Write_Control_Stream_LE(&Capabilities, sizeof(TMC_Capabilities_t));
Endpoint_ClearOUT();
}