sabme ua / mail_driven_task_example

Dependencies:   mail-driven-task mbed-rtos mbed-src

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers led_task.cpp Source File

led_task.cpp

00001 #include "Task.h"
00002 #include "taskdef.h"
00003 
00004 DigitalOut led1(LED1);
00005 RtosTimer *blinkTimer;
00006 extern void ledToggle(void const *n);
00007 
00008 inline void ledTaskInit()
00009 {
00010     led1 = 1;
00011     blinkTimer = new RtosTimer(ledToggle, osTimerPeriodic, NULL);
00012 }
00013 
00014 void ledToggle(void const *n)
00015 {
00016     led1 = !led1;
00017 }
00018 
00019 void ledTaskMain(void const *argument)
00020 {
00021     Task *self = (Task *)argument;
00022 
00023     ledTaskInit();
00024 
00025     while (true) {
00026         MailPacket *mail = self->waitMail();
00027         switch(mail->messageId) {
00028         case TMSG_LED_TURNON:
00029             self->log(LOG_DEBUG, "TURNON");
00030             led1 = 0;
00031             break;
00032         case TMSG_LED_TURNOFF:
00033             self->log(LOG_DEBUG, "TURNOFF");
00034             led1 = 1;
00035             break;
00036         case TMSG_LED_START_BLINK:
00037             self->log(LOG_DEBUG, "START_BLINK");
00038             blinkTimer->start(1000);
00039             break;
00040         case TMSG_LED_STOP_BLINK:
00041             self->log(LOG_DEBUG, "STOP_BLINK");
00042             blinkTimer->stop();
00043             Task::sendMail(TID_LED, TMSG_LED_TURNOFF, NULL);
00044             break;
00045         default:
00046             break;
00047         }
00048         self->deleteMail(mail);
00049     }
00050 }