From 7665bf323e76ed1ebcfd137e2ab0bd356b43a5e8 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Thu, 4 Jun 2009 06:26:35 +0000 Subject: Fixed EVENT_USB_CDC_ControLineStateChanged() event not taking the CDC interface structure as a parameter. Converted TestApp demo over to the new demo structure. More class driver documentation improvements. --- Demos/OTG/TestApp/TestApp.c | 105 +++++++++++++++-------------------------- Demos/OTG/TestApp/TestApp.h | 29 ++++++------ Demos/OTG/TestApp/TestApp.txt | 10 +--- Demos/OTG/TestApp/TestEvents.c | 14 ------ Demos/OTG/TestApp/TestEvents.h | 11 ++--- Demos/OTG/TestApp/makefile | 1 - 6 files changed, 61 insertions(+), 109 deletions(-) (limited to 'Demos') diff --git a/Demos/OTG/TestApp/TestApp.c b/Demos/OTG/TestApp/TestApp.c index 4dc9b44e3..dc10aadfc 100644 --- a/Demos/OTG/TestApp/TestApp.c +++ b/Demos/OTG/TestApp/TestApp.c @@ -36,19 +36,30 @@ #include "TestApp.h" -/* Scheduler Task List */ -TASK_LIST -{ - { .Task = TestApp_CheckJoystick, .TaskStatus = TASK_RUN }, - { .Task = TestApp_CheckButton , .TaskStatus = TASK_RUN }, - { .Task = TestApp_CheckTemp , .TaskStatus = TASK_RUN }, - { .Task = USB_USBTask , .TaskStatus = TASK_RUN }, -}; - /** Main program entry point. This routine configures the hardware required by the application, then * starts the scheduler to run the application tasks. */ int main(void) +{ + SetupHardware(); + + puts_P(PSTR(ESC_RESET ESC_BG_WHITE ESC_INVERSE_ON ESC_ERASE_DISPLAY + "LUFA Demo running.\r\n" ESC_INVERSE_OFF)); + + for (;;) + { + CheckJoystick(); + CheckButton(); + CheckTemperature(); + + /* Clear output-compare flag (logic 1 clears the flag) */ + TIFR0 |= (1 << OCF0A); + + USB_USBTask(); + } +} + +void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ MCUSR &= ~(1 << WDRF); @@ -65,41 +76,20 @@ int main(void) LEDs_Init(); Buttons_Init(); - /* Millisecond timer initialization, with output compare interrupt enabled */ + /* Millisecond timer initialization */ OCR0A = 0x7D; TCCR0A = (1 << WGM01); TCCR0B = ((1 << CS01) | (1 << CS00)); - TIMSK0 = (1 << OCIE0A); - - /* Turn on interrupts */ - sei(); - - /* Start-up message via USART */ - puts_P(PSTR(ESC_RESET ESC_BG_WHITE ESC_INVERSE_ON ESC_ERASE_DISPLAY - "LUFA Demo running.\r\n" ESC_INVERSE_OFF)); - - /* Scheduling - routine never returns, so put this last in the main function */ - Scheduler_Start(); -} - -/** ISR for the timer 0 compare vector. This ISR fires once each millisecond, and increments the - * scheduler tick counter. - */ -ISR(TIMER0_COMPA_vect, ISR_BLOCK) -{ - /* Scheduler test - increment scheduler tick counter once each millisecond */ - Scheduler_TickCounter++; } /** Task responsible for checking the joystick position, and displaying the joystick position onto the * board LEDs. */ -TASK(TestApp_CheckJoystick) +void CheckJoystick(void) { uint8_t JoyStatus_LCL = Joystick_GetStatus(); - uint8_t LEDMask = 0; + uint8_t LEDMask = LEDS_NO_LEDS; - /* Test of the Joystick - change a mask in response to joystick */ if (JoyStatus_LCL & JOY_UP) LEDMask |= LEDS_LED1; @@ -115,78 +105,61 @@ TASK(TestApp_CheckJoystick) if (JoyStatus_LCL & JOY_PRESS) LEDMask = LEDS_ALL_LEDS; - /* Test of LEDs - light up in response to joystick */ LEDs_SetAllLEDs(LEDMask); } /** Task responsible for checking the current temperature via the temperature sensor mounted on the * board, and displaying it through the serial USART. */ -TASK(TestApp_CheckTemp) +void CheckTemperature(void) { - static SchedulerDelayCounter_t DelayCounter = 10000; // Force immediate run on start-up + static uint16_t MSElapsed = 0; + + if (TIFR0 & (1 << OCF0A)) + MSElapsed++; /* Task runs every 10000 ticks, 10 seconds for this demo */ - if (Scheduler_HasDelayElapsed(10000, &DelayCounter)) + if (MSElapsed == 1000) { printf_P(PSTR("Current temperature: %d Degrees Celcius\r\n\r\n"), (int8_t)Temperature_GetTemperature()); - /* Reset the delay counter, ready to count another 10000 tick interval */ - Scheduler_ResetDelay(&DelayCounter); + MSElapsed = 0; } } /** Task responsible for checking the board's first button' position, and start-stopping other tasks and the USB * interface in response to user joystick movements. */ -TASK(TestApp_CheckButton) +void CheckButton(void) { - static SchedulerDelayCounter_t DelayCounter = 0; - static bool IsPressed; - static bool BlockingJoystickTask; + static uint16_t DebounceMSElapsed = 0; + static bool IsPressed; - /* Check if board button pressed (start USB) */ + if (TIFR0 & (1 << OCF0A)) + DebounceMSElapsed++; + if (Buttons_GetStatus() & BUTTONS_BUTTON1) { - /* Debounce - check 100 ticks later to see if button is still being pressed */ - if ((IsPressed == false) && (Scheduler_HasDelayElapsed(100, &DelayCounter))) + if (!(IsPressed) && (DebounceMSElapsed == 100)) { - /* Set flag, indicating that current pressed state has been handled */ IsPressed = true; - - /* First start of the USB interface permanently blocks the joystick task */ - if (BlockingJoystickTask == false) - { - Scheduler_SetTaskMode(TestApp_CheckJoystick, TASK_STOP); - BlockingJoystickTask = true; - } - /* Toggle USB interface */ if (USB_IsInitialized == true) { USB_ShutDown(); - - LEDs_SetAllLEDs(LEDS_LED1); puts_P(PSTR(ESC_BG_WHITE "USB Power Off.\r\n")); - - Scheduler_SetTaskMode(TestApp_CheckTemp, TASK_RUN); } else { - Scheduler_SetTaskMode(TestApp_CheckTemp, TASK_STOP); - - LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3); - puts_P(PSTR(ESC_BG_YELLOW "USB Power On.\r\n")); - + puts_P(PSTR(ESC_BG_YELLOW "USB Power On.\r\n")); USB_Init(USB_MODE_UID, USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL); } } } else { - /* Board button not pressed - reset debounce interval counter and press handled flag */ - Scheduler_ResetDelay(&DelayCounter); + DebounceMSElapsed = 0; IsPressed = false; } } diff --git a/Demos/OTG/TestApp/TestApp.h b/Demos/OTG/TestApp/TestApp.h index 7ae5663d9..832b5f977 100644 --- a/Demos/OTG/TestApp/TestApp.h +++ b/Demos/OTG/TestApp/TestApp.h @@ -42,20 +42,21 @@ #include #include - #include // Library Version Information - #include // USB Functionality - #include // Simple scheduler for task management - #include // ANSI Terminal Escape Codes - #include // ADC driver - #include // USART Stream driver - #include // Joystick driver - #include // LED driver - #include // Board Buttons driver - #include // Temperature sensor driver + #include + #include + #include + #include + #include + #include + #include + #include + #include - /* Task Definitions: */ - TASK(TestApp_CheckJoystick); - TASK(TestApp_CheckButton); - TASK(TestApp_CheckTemp); + /* Function Prototypes: */ + void SetupHardware(void); + + void CheckJoystick(void); + void CheckButton(void); + void CheckTemperature(void); #endif diff --git a/Demos/OTG/TestApp/TestApp.txt b/Demos/OTG/TestApp/TestApp.txt index a0f1488ec..540a59ce1 100644 --- a/Demos/OTG/TestApp/TestApp.txt +++ b/Demos/OTG/TestApp/TestApp.txt @@ -42,19 +42,13 @@ * Pressing the HWB will initiate the USB subsystem, enumerating * the device (which has no actual functionality beyond * enumeration as a device or as a host in this demo, and serves - * only to demonstrate the USB portion of the library). It will - * also suspend the joystick and temperature monitoring tasks. + * only to demonstrate the USB portion of the library). * - * Pressing the HWB a second time will turn off the USB system - * and resume the temperature printing task (but not the joystick - * monitoring task). + * Pressing the HWB a second time will turn off the USB system. * * When activated, the USB events will be printed through the * serial USART. * - * When the USB subsystem is activated, the board LEDs will show - * the current USB status. - * * \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/OTG/TestApp/TestEvents.c b/Demos/OTG/TestApp/TestEvents.c index ea7fa4b55..9b091472f 100644 --- a/Demos/OTG/TestApp/TestEvents.c +++ b/Demos/OTG/TestApp/TestEvents.c @@ -79,9 +79,6 @@ void EVENT_USB_VBUSDisconnect(void) void EVENT_USB_Connect(void) { puts_P(PSTR(EVENT_PREFIX "USB +\r\n")); - LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3 | LEDS_LED4); - - Scheduler_SetTaskMode(USB_USBTask, TASK_RUN); } /** @@ -90,24 +87,19 @@ void EVENT_USB_Connect(void) */ void EVENT_USB_Disconnect(void) { - Scheduler_SetTaskMode(USB_USBTask, TASK_STOP); - puts_P(PSTR(EVENT_PREFIX "USB -\r\n")); - LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3 | LEDS_LED3); } /** Event handler for the USB_Suspend event. When fired, the event is logged to the USART. */ void EVENT_USB_Suspend(void) { puts_P(PSTR(EVENT_PREFIX ESC_BG_YELLOW "USB Sleep\r\n")); - LEDs_SetAllLEDs(LEDS_ALL_LEDS); } /** Event handler for the USB_WakeUp event. When fired, the event is logged to the USART. */ void EVENT_USB_WakeUp(void) { puts_P(PSTR(EVENT_PREFIX ESC_BG_GREEN "USB Wakeup\r\n")); - LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED4); } /** Event handler for the USB_Reset event. When fired, the event is logged to the USART. */ @@ -129,8 +121,6 @@ void EVENT_USB_UIDChange(void) ModeStrPtr = PSTR("DEVICE"); else ModeStrPtr = PSTR("N/A"); - - LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3); printf_P(PSTR(" -- New Mode %S\r\n"), ModeStrPtr); } @@ -192,16 +182,12 @@ void EVENT_USB_UnhandledControlPacket(void) void EVENT_USB_ConfigurationChanged(void) { puts_P(PSTR(EVENT_PREFIX "Configuration Number Changed\r\n")); - - LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED4); } /** Event handler for the USB_DeviceAttached event. When fired, the event is logged to the USART. */ void EVENT_USB_DeviceAttached(void) { puts_P(PSTR(EVENT_PREFIX ESC_BG_GREEN "Device +\r\n")); - - Scheduler_SetTaskMode(USB_USBTask, TASK_RUN); } /** Event handler for the USB_DeviceUnattached event. When fired, the event is logged to the USART. */ diff --git a/Demos/OTG/TestApp/TestEvents.h b/Demos/OTG/TestApp/TestEvents.h index 3642428f5..b82936fb4 100644 --- a/Demos/OTG/TestApp/TestEvents.h +++ b/Demos/OTG/TestApp/TestEvents.h @@ -39,12 +39,11 @@ /* Includes: */ #include - #include // Commonly used macros - #include // USB Functionality - #include // LED driver - #include // USART Stream driver - #include // ANSI Terminal Escape Codes - #include // Simple scheduler for task management + #include + #include + #include + #include + #include /* Macros: */ /** Prefix sent through the USART when an even fires before the actual event message. */ diff --git a/Demos/OTG/TestApp/makefile b/Demos/OTG/TestApp/makefile index a8bf4ac42..55b98815a 100644 --- a/Demos/OTG/TestApp/makefile +++ b/Demos/OTG/TestApp/makefile @@ -126,7 +126,6 @@ LUFA_PATH = ../../.. SRC = $(TARGET).c \ TestEvents.c \ Descriptors.c \ - $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \ $(LUFA_PATH)/LUFA/Drivers/Board/Temperature.c \ $(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \ $(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \ -- cgit v1.2.3