Simple example of the use of mail_driven_task library
Dependencies: mail-driven-task mbed-rtos mbed-src
Diff: led_task/led_task.cpp
- Revision:
- 0:7e8dc6570c55
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/led_task/led_task.cpp Mon Dec 22 04:02:35 2014 +0000 @@ -0,0 +1,50 @@ +#include "Task.h" +#include "taskdef.h" + +DigitalOut led1(LED1); +RtosTimer *blinkTimer; +extern void ledToggle(void const *n); + +inline void ledTaskInit() +{ + led1 = 1; + blinkTimer = new RtosTimer(ledToggle, osTimerPeriodic, NULL); +} + +void ledToggle(void const *n) +{ + led1 = !led1; +} + +void ledTaskMain(void const *argument) +{ + Task *self = (Task *)argument; + + ledTaskInit(); + + while (true) { + MailPacket *mail = self->waitMail(); + switch(mail->messageId) { + case TMSG_LED_TURNON: + self->log(LOG_DEBUG, "TURNON"); + led1 = 0; + break; + case TMSG_LED_TURNOFF: + self->log(LOG_DEBUG, "TURNOFF"); + led1 = 1; + break; + case TMSG_LED_START_BLINK: + self->log(LOG_DEBUG, "START_BLINK"); + blinkTimer->start(1000); + break; + case TMSG_LED_STOP_BLINK: + self->log(LOG_DEBUG, "STOP_BLINK"); + blinkTimer->stop(); + Task::sendMail(TID_LED, TMSG_LED_TURNOFF, NULL); + break; + default: + break; + } + self->deleteMail(mail); + } +} \ No newline at end of file