Simple example of the use of mail_driven_task library

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

adc_task/adc_task.cpp

Committer:
mzta
Date:
2014-12-22
Revision:
0:7e8dc6570c55

File content as of revision 0:7e8dc6570c55:

#include "Task.h"
#include "taskdef.h"
#include "adc_task.h"

AnalogIn ain0(A0);
AnalogIn ain1(A1);

void adcTaskMain(void const *argument)
{
    MailPacket *mail;
    Task *self = (Task *)argument;
    
    while (true) {
        mail = self->waitMail();
        switch(mail->messageId) {
        case TMSG_ADC_DATA_REQ: {
            self->log(LOG_INFO, "recieve DATA_REQ");
            AdcData *data = new AdcData;
            data->a0 = ain0.read();
            data->a1 = ain1.read();
            Task::sendMail(TID_KICK, TMSG_ADC_DATA_NOTIFY, data); 
            break;
        }
        case TMSG_ADC_AVEDATA_REQ: {
            int *cnt = (int *)mail->packet;
            float a0 = 0, a1 = 0;
            self->log(LOG_INFO, "recieve AVEDATA_REQ <count=%d>", *cnt);
            for (int i = 0; i < *cnt; i++) {
                a0 += ain0.read(); a1 += ain1.read();
                Thread::wait(1000);
            }
            AdcData *data = new AdcData;
            data->a0 = a0 / *cnt;
            data->a1 = a1 / *cnt;
            Task::sendMail(TID_KICK, TMSG_ADC_AVEDATA_NOTIFY, data); 
            delete cnt, a0, a1;
            break;
        }
        default:
            break;
        }
        self->deleteMail(mail);
    }
}