aboutsummaryrefslogtreecommitdiffstats
path: root/Demos
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2009-05-14 10:07:08 +0000
committerDean Camera <dean@fourwalledcubicle.com>2009-05-14 10:07:08 +0000
commit32f0f605efa293430a47d60bb857695ff6937d21 (patch)
tree9ab514c6088c9f044c029fdf36c880ecdf700a71 /Demos
parent0d5baf9bb3e88ebcbc53cc9a71566582d585f7dd (diff)
downloadlufa-32f0f605efa293430a47d60bb857695ff6937d21.tar.gz
lufa-32f0f605efa293430a47d60bb857695ff6937d21.tar.bz2
lufa-32f0f605efa293430a47d60bb857695ff6937d21.zip
Removed all user pipe/endpoint interrupt APIs, added internal library support for interrupt driven control endpoints when in device mode by defining INTERRUPT_CONTROL_ENDPOINT token and passing it to the compiler via the -D switch.
Diffstat (limited to 'Demos')
-rw-r--r--Demos/Device/GenericHID/GenericHID.c52
-rw-r--r--Demos/Device/GenericHID/GenericHID.h3
-rw-r--r--Demos/Device/GenericHID/GenericHID.txt7
-rw-r--r--Demos/Device/Keyboard/Keyboard.c52
-rw-r--r--Demos/Device/Keyboard/Keyboard.h3
-rw-r--r--Demos/Device/Keyboard/Keyboard.txt13
-rw-r--r--Demos/Device/MassStorage/MassStorage.c31
-rw-r--r--Demos/Device/MassStorage/MassStorage.h3
-rw-r--r--Demos/Device/MassStorage/MassStorage.txt5
-rw-r--r--Demos/Device/MassStorage/makefile1
-rw-r--r--Demos/Device/Mouse/Mouse.c50
-rw-r--r--Demos/Device/Mouse/Mouse.h3
-rw-r--r--Demos/Device/Mouse/Mouse.txt13
-rw-r--r--Demos/Host/GenericHIDHost/GenericHIDHost.c6
14 files changed, 13 insertions, 229 deletions
diff --git a/Demos/Device/GenericHID/GenericHID.c b/Demos/Device/GenericHID/GenericHID.c
index d4e7cca73..0369f9f52 100644
--- a/Demos/Device/GenericHID/GenericHID.c
+++ b/Demos/Device/GenericHID/GenericHID.c
@@ -39,10 +39,7 @@
/* Scheduler Task List */
TASK_LIST
{
- #if !defined(INTERRUPT_CONTROL_ENDPOINT)
{ .Task = USB_USBTask , .TaskStatus = TASK_STOP },
- #endif
-
{ .Task = USB_HID_Report , .TaskStatus = TASK_STOP },
};
@@ -75,30 +72,13 @@ int main(void)
Scheduler_Start();
}
-/** Event handler for the USB_Reset event. This fires when the USB interface is reset by the USB host, before the
- * enumeration process begins, and enables the control endpoint interrupt so that control requests can be handled
- * asynchronously when they arrive rather than when the control endpoint is polled manually.
- */
-EVENT_HANDLER(USB_Reset)
-{
- #if defined(INTERRUPT_CONTROL_ENDPOINT)
- /* Select the control endpoint */
- Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
-
- /* Enable the endpoint SETUP interrupt ISR for the control endpoint */
- USB_INT_Enable(ENDPOINT_INT_SETUP);
- #endif
-}
-
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and
* starts the library USB task to begin the enumeration and USB management process.
*/
EVENT_HANDLER(USB_Connect)
{
- #if !defined(INTERRUPT_CONTROL_ENDPOINT)
/* Start USB management task */
Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);
- #endif
/* Indicate USB enumerating */
UpdateStatus(Status_USBEnumerating);
@@ -111,10 +91,7 @@ EVENT_HANDLER(USB_Disconnect)
{
/* Stop running HID reporting and USB management tasks */
Scheduler_SetTaskMode(USB_HID_Report, TASK_STOP);
-
- #if !defined(INTERRUPT_CONTROL_ENDPOINT)
Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);
- #endif
/* Indicate USB not ready */
UpdateStatus(Status_USBNotReady);
@@ -298,32 +275,3 @@ TASK(USB_HID_Report)
}
}
}
-
-#if defined(INTERRUPT_CONTROL_ENDPOINT)
-/** ISR for the general Pipe/Endpoint interrupt vector. This ISR fires when an endpoint's status changes (such as
- * a packet has been received) on an endpoint with its corresponding ISR enabling bits set. This is used to send
- * HID packets to the host each time the HID interrupt endpoints polling period elapses, as managed by the USB
- * controller.
- */
-ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
-{
- /* Save previously selected endpoint before selecting a new endpoint */
- uint8_t PrevSelectedEndpoint = Endpoint_GetCurrentEndpoint();
-
- /* Check if the control endpoint has received a request */
- if (Endpoint_HasEndpointInterrupted(ENDPOINT_CONTROLEP))
- {
- /* Clear the endpoint interrupt */
- Endpoint_ClearEndpointInterrupt(ENDPOINT_CONTROLEP);
-
- /* Process the control request */
- USB_USBTask();
-
- /* Handshake the endpoint setup interrupt - must be after the call to USB_USBTask() */
- USB_INT_Clear(ENDPOINT_INT_SETUP);
- }
-
- /* Restore previously selected endpoint */
- Endpoint_SelectEndpoint(PrevSelectedEndpoint);
-}
-#endif
diff --git a/Demos/Device/GenericHID/GenericHID.h b/Demos/Device/GenericHID/GenericHID.h
index 817d37748..5841595e3 100644
--- a/Demos/Device/GenericHID/GenericHID.h
+++ b/Demos/Device/GenericHID/GenericHID.h
@@ -68,9 +68,6 @@
};
/* Event Handlers: */
- /** Indicates that this module will catch the USB_Reset event when thrown by the library. */
- HANDLES_EVENT(USB_Reset);
-
/** Indicates that this module will catch the USB_Connect event when thrown by the library. */
HANDLES_EVENT(USB_Connect);
diff --git a/Demos/Device/GenericHID/GenericHID.txt b/Demos/Device/GenericHID/GenericHID.txt
index c78f63753..a40b78b1f 100644
--- a/Demos/Device/GenericHID/GenericHID.txt
+++ b/Demos/Device/GenericHID/GenericHID.txt
@@ -60,12 +60,5 @@
* <td>This token defines the size of the device reports, both sent and received. The value must be an
* integer ranging from 1 to 255.</td>
* </tr>
- * <tr>
- * <td>INTERRUPT_CONTROL_ENDPOINT</td>
- * <td>Makefile CDEFS</td>
- * <td>When defined, this causes the demo to enable interrupts for the control endpoint,
- * which services control requests from the host. If not defined, the control endpoint
- * is serviced via polling using the task scheduler.</td>
- * </tr>
* </table>
*/
diff --git a/Demos/Device/Keyboard/Keyboard.c b/Demos/Device/Keyboard/Keyboard.c
index 928d95b62..fe041ef08 100644
--- a/Demos/Device/Keyboard/Keyboard.c
+++ b/Demos/Device/Keyboard/Keyboard.c
@@ -40,10 +40,7 @@
/* Scheduler Task List */
TASK_LIST
{
- #if !defined(INTERRUPT_CONTROL_ENDPOINT)
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP },
- #endif
-
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP },
{ .Task = USB_Keyboard_Report , .TaskStatus = TASK_STOP },
};
@@ -105,10 +102,8 @@ int main(void)
*/
EVENT_HANDLER(USB_Connect)
{
- #if !defined(INTERRUPT_CONTROL_ENDPOINT)
/* Start USB management task */
Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);
- #endif
/* Indicate USB enumerating */
UpdateStatus(Status_USBEnumerating);
@@ -117,21 +112,6 @@ EVENT_HANDLER(USB_Connect)
UsingReportProtocol = true;
}
-/** Event handler for the USB_Reset event. This fires when the USB interface is reset by the USB host, before the
- * enumeration process begins, and enables the control endpoint interrupt so that control requests can be handled
- * asynchronously when they arrive rather than when the control endpoint is polled manually.
- */
-EVENT_HANDLER(USB_Reset)
-{
- #if defined(INTERRUPT_CONTROL_ENDPOINT)
- /* Select the control endpoint */
- Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
-
- /* Enable the endpoint SETUP interrupt ISR for the control endpoint */
- USB_INT_Enable(ENDPOINT_INT_SETUP);
- #endif
-}
-
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via
* the status LEDs.
*/
@@ -139,10 +119,7 @@ EVENT_HANDLER(USB_Disconnect)
{
/* Stop running keyboard reporting and USB management tasks */
Scheduler_SetTaskMode(USB_Keyboard_Report, TASK_STOP);
-
- #if !defined(INTERRUPT_CONTROL_ENDPOINT)
Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);
- #endif
/* Indicate USB not ready */
UpdateStatus(Status_USBNotReady);
@@ -445,30 +422,3 @@ TASK(USB_Keyboard_Report)
ReceiveNextReport();
}
}
-
-#if defined(INTERRUPT_CONTROL_ENDPOINT)
-/** ISR for the general Pipe/Endpoint interrupt vector. This ISR fires when an endpoint's status changes (such as
- * a packet has been received) on an endpoint with its corresponding ISR enabling bits set. This is used to send
- * HID packets to the host each time the HID interrupt endpoints polling period elapses, as managed by the USB
- * controller. It is also used to respond to standard and class specific requests send to the device on the control
- * endpoint, by handing them off to the LUFA library when they are received.
- */
-ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
-{
- /* Save previously selected endpoint before selecting a new endpoint */
- uint8_t PrevSelectedEndpoint = Endpoint_GetCurrentEndpoint();
-
- /* Check if the control endpoint has received a request */
- if (Endpoint_HasEndpointInterrupted(ENDPOINT_CONTROLEP))
- {
- /* Process the control request */
- USB_USBTask();
-
- /* Handshake the endpoint setup interrupt - must be after the call to USB_USBTask() */
- USB_INT_Clear(ENDPOINT_INT_SETUP);
- }
-
- /* Restore previously selected endpoint */
- Endpoint_SelectEndpoint(PrevSelectedEndpoint);
-}
-#endif
diff --git a/Demos/Device/Keyboard/Keyboard.h b/Demos/Device/Keyboard/Keyboard.h
index c73701905..2cc9c5ca8 100644
--- a/Demos/Device/Keyboard/Keyboard.h
+++ b/Demos/Device/Keyboard/Keyboard.h
@@ -105,9 +105,6 @@
/** Indicates that this module will catch the USB_Disconnect event when thrown by the library. */
HANDLES_EVENT(USB_Disconnect);
- /** Indicates that this module will catch the USB_Reset event when thrown by the library. */
- HANDLES_EVENT(USB_Reset);
-
/** Indicates that this module will catch the USB_ConfigurationChanged event when thrown by the library. */
HANDLES_EVENT(USB_ConfigurationChanged);
diff --git a/Demos/Device/Keyboard/Keyboard.txt b/Demos/Device/Keyboard/Keyboard.txt
index 39df2a171..3fc9bee3a 100644
--- a/Demos/Device/Keyboard/Keyboard.txt
+++ b/Demos/Device/Keyboard/Keyboard.txt
@@ -52,16 +52,9 @@
*
* <table>
* <tr>
- * <td><b>Define Name:</b></td>
- * <td><b>Location:</b></td>
- * <td><b>Description:</b></td>
- * </tr>
- * <tr>
- * <td>INTERRUPT_CONTROL_ENDPOINT</td>
- * <td>Makefile CDEFS</td>
- * <td>When defined, this causes the demo to enable interrupts for the control endpoint,
- * which services control requests from the host. If not defined, the control endpoint
- * is serviced via polling using the task scheduler.</td>
+ * <td>
+ * None
+ * </td>
* </tr>
* </table>
*/
diff --git a/Demos/Device/MassStorage/MassStorage.c b/Demos/Device/MassStorage/MassStorage.c
index b24018a10..c50ca3dde 100644
--- a/Demos/Device/MassStorage/MassStorage.c
+++ b/Demos/Device/MassStorage/MassStorage.c
@@ -85,19 +85,6 @@ int main(void)
Scheduler_Start();
}
-/** Event handler for the USB_Reset event. This fires when the USB interface is reset by the USB host, before the
- * enumeration process begins, and enables the control endpoint interrupt so that control requests can be handled
- * asynchronously when they arrive rather than when the control endpoint is polled manually.
- */
-EVENT_HANDLER(USB_Reset)
-{
- /* Select the control endpoint */
- Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
-
- /* Enable the endpoint SETUP interrupt ISR for the control endpoint */
- USB_INT_Enable(ENDPOINT_INT_SETUP);
-}
-
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */
EVENT_HANDLER(USB_Connect)
{
@@ -376,21 +363,3 @@ STREAM_CALLBACK(AbortOnMassStoreReset)
/* Continue with the current stream operation */
return STREAMCALLBACK_Continue;
}
-
-/** ISR for the general Pipe/Endpoint interrupt vector. This ISR fires when a control request has been issued to the control endpoint,
- * so that the request can be processed. As several elements of the Mass Storage implementation require asynchronous control requests
- * (such as endpoint stall clearing and Mass Storage Reset requests during data transfers) this is done via interrupts rather than
- * polling so that they can be processed regardless of the rest of the application's state.
- */
-ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
-{
- /* Check if the control endpoint has received a request */
- if (Endpoint_HasEndpointInterrupted(ENDPOINT_CONTROLEP))
- {
- /* Process the control request */
- USB_USBTask();
-
- /* Handshake the endpoint setup interrupt - must be after the call to USB_USBTask() */
- USB_INT_Clear(ENDPOINT_INT_SETUP);
- }
-}
diff --git a/Demos/Device/MassStorage/MassStorage.h b/Demos/Device/MassStorage/MassStorage.h
index 17acca6b7..f0baf1461 100644
--- a/Demos/Device/MassStorage/MassStorage.h
+++ b/Demos/Device/MassStorage/MassStorage.h
@@ -134,9 +134,6 @@
STREAM_CALLBACK(AbortOnMassStoreReset);
/* Event Handlers: */
- /** Indicates that this module will catch the USB_Reset event when thrown by the library. */
- HANDLES_EVENT(USB_Reset);
-
/** Indicates that this module will catch the USB_Connect event when thrown by the library. */
HANDLES_EVENT(USB_Connect);
diff --git a/Demos/Device/MassStorage/MassStorage.txt b/Demos/Device/MassStorage/MassStorage.txt
index 9db731c31..1d06cb66d 100644
--- a/Demos/Device/MassStorage/MassStorage.txt
+++ b/Demos/Device/MassStorage/MassStorage.txt
@@ -58,6 +58,11 @@
* 255), with each LUN being allocated an equal portion of the available
* Dataflash memory.
*
+ * The USB control endpoint is managed entirely by the library using endpoint
+ * interrupts, as the INTERRUPT_CONTROL_ENDPOINT option is enabled. This allows for
+ * the host to reset the Mass Storage device state during long transfers without
+ * the need for complicated polling logic.
+ *
* \section SSec_Options Project Options
*
* The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
diff --git a/Demos/Device/MassStorage/makefile b/Demos/Device/MassStorage/makefile
index 3115aae16..65a22c6a3 100644
--- a/Demos/Device/MassStorage/makefile
+++ b/Demos/Device/MassStorage/makefile
@@ -189,6 +189,7 @@ CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)
CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY
CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION
CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
+CDEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Place -D or -U options here for ASM sources
diff --git a/Demos/Device/Mouse/Mouse.c b/Demos/Device/Mouse/Mouse.c
index 8998530d8..9dc2f9d04 100644
--- a/Demos/Device/Mouse/Mouse.c
+++ b/Demos/Device/Mouse/Mouse.c
@@ -39,10 +39,7 @@
/* Scheduler Task List */
TASK_LIST
{
- #if !defined(INTERRUPT_CONTROL_ENDPOINT)
{ .Task = USB_USBTask , .TaskStatus = TASK_STOP },
- #endif
-
{ .Task = USB_Mouse_Report , .TaskStatus = TASK_STOP },
};
@@ -105,10 +102,8 @@ int main(void)
*/
EVENT_HANDLER(USB_Connect)
{
- #if !defined(INTERRUPT_CONTROL_ENDPOINT)
/* Start USB management task */
Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);
- #endif
/* Indicate USB enumerating */
UpdateStatus(Status_USBEnumerating);
@@ -117,21 +112,6 @@ EVENT_HANDLER(USB_Connect)
UsingReportProtocol = true;
}
-/** Event handler for the USB_Reset event. This fires when the USB interface is reset by the USB host, before the
- * enumeration process begins, and enables the control endpoint interrupt so that control requests can be handled
- * asynchronously when they arrive rather than when the control endpoint is polled manually.
- */
-EVENT_HANDLER(USB_Reset)
-{
- #if defined(INTERRUPT_CONTROL_ENDPOINT)
- /* Select the control endpoint */
- Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
-
- /* Enable the endpoint SETUP interrupt ISR for the control endpoint */
- USB_INT_Enable(ENDPOINT_INT_SETUP);
- #endif
-}
-
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via
* the status LEDs and stops the USB management and Mouse reporting tasks.
*/
@@ -139,10 +119,7 @@ EVENT_HANDLER(USB_Disconnect)
{
/* Stop running mouse reporting and USB management tasks */
Scheduler_SetTaskMode(USB_Mouse_Report, TASK_STOP);
-
- #if !defined(INTERRUPT_CONTROL_ENDPOINT)
Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);
- #endif
/* Indicate USB not ready */
UpdateStatus(Status_USBNotReady);
@@ -381,30 +358,3 @@ TASK(USB_Mouse_Report)
SendNextReport();
}
}
-
-#if defined(INTERRUPT_CONTROL_ENDPOINT)
-/** ISR for the general Pipe/Endpoint interrupt vector. This ISR fires when an endpoint's status changes (such as
- * a packet has been received) on an endpoint with its corresponding ISR enabling bits set. This is used to send
- * HID packets to the host each time the HID interrupt endpoints polling period elapses, as managed by the USB
- * controller. It is also used to respond to standard and class specific requests send to the device on the control
- * endpoint, by handing them off to the LUFA library when they are received.
- */
-ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
-{
- /* Save previously selected endpoint before selecting a new endpoint */
- uint8_t PrevSelectedEndpoint = Endpoint_GetCurrentEndpoint();
-
- /* Check if the control endpoint has received a request */
- if (Endpoint_HasEndpointInterrupted(ENDPOINT_CONTROLEP))
- {
- /* Process the control request */
- USB_USBTask();
-
- /* Handshake the endpoint setup interrupt - must be after the call to USB_USBTask() */
- USB_INT_Clear(ENDPOINT_INT_SETUP);
- }
-
- /* Restore previously selected endpoint */
- Endpoint_SelectEndpoint(PrevSelectedEndpoint);
-}
-#endif
diff --git a/Demos/Device/Mouse/Mouse.h b/Demos/Device/Mouse/Mouse.h
index afa5a6a55..3bbbac234 100644
--- a/Demos/Device/Mouse/Mouse.h
+++ b/Demos/Device/Mouse/Mouse.h
@@ -105,9 +105,6 @@
/** Indicates that this module will catch the USB_Disconnect event when thrown by the library. */
HANDLES_EVENT(USB_Disconnect);
- /** Indicates that this module will catch the USB_Reset event when thrown by the library. */
- HANDLES_EVENT(USB_Reset);
-
/** Indicates that this module will catch the USB_ConfigurationChanged event when thrown by the library. */
HANDLES_EVENT(USB_ConfigurationChanged);
diff --git a/Demos/Device/Mouse/Mouse.txt b/Demos/Device/Mouse/Mouse.txt
index a3bf024d5..07982a713 100644
--- a/Demos/Device/Mouse/Mouse.txt
+++ b/Demos/Device/Mouse/Mouse.txt
@@ -53,16 +53,9 @@
*
* <table>
* <tr>
- * <td><b>Define Name:</b></td>
- * <td><b>Location:</b></td>
- * <td><b>Description:</b></td>
- * </tr>
- * <tr>
- * <td>INTERRUPT_CONTROL_ENDPOINT</td>
- * <td>Makefile CDEFS</td>
- * <td>When defined, this causes the demo to enable interrupts for the control endpoint,
- * which services control requests from the host. If not defined, the control endpoint
- * is serviced via polling using the task scheduler.</td>
+ * <td>
+ * None
+ * </td>
* </tr>
* </table>
*/
diff --git a/Demos/Host/GenericHIDHost/GenericHIDHost.c b/Demos/Host/GenericHIDHost/GenericHIDHost.c
index 5ac4257a6..580612c97 100644
--- a/Demos/Host/GenericHIDHost/GenericHIDHost.c
+++ b/Demos/Host/GenericHIDHost/GenericHIDHost.c
@@ -331,12 +331,6 @@ TASK(USB_HID_Host)
break;
}
- #if defined(INTERRUPT_DATA_PIPE)
- /* Select and unfreeze HID data IN pipe */
- Pipe_SelectPipe(HID_DATA_IN_PIPE);
- Pipe_Unfreeze();
- #endif
-
puts_P(PSTR("HID Device Enumerated.\r\n"));
USB_HostState = HOST_STATE_Ready;