Program for the water play project for the course Software Testing Practical 2016 given at the VU University
Dependencies: mbed DRV88255 TextLCD Ping mbed-rtos
SensorAlarmController.cpp
- Committer:
- sbouber1
- Date:
- 2016-06-24
- Revision:
- 80:38e274c4dafa
- Parent:
- 73:bafd8d0f3daf
File content as of revision 80:38e274c4dafa:
#include "SensorAlarmController.h"
//outputpins for alarm
static DigitalOut buzzer(p17);
static DigitalOut led1(LED1);
static DigitalOut led2(LED2);
static DigitalOut led3(LED3);
static DigitalOut led4(LED4);
void SensorAlarmController::update() {
#ifndef TEST_MODE
if(this->num_iters < STARTUP_ITERATIONS) {
cout << this->getName() << ": not running, startup phase";
return;
}
#endif
value = sensor->getValue();
if ((value < min_undesired) || (value > max_undesired)) {
if ((value < min_crit) || (value > max_crit)) {
this->raiseAlarm(true);
} else {
this->raiseAlarm(false);
}
} else {
//clear alarm
printf("Clearing alarm: %s\r\n", this->getName().c_str());
timer.stop();
timer.reset();
this->is_crit = false;
sensor->setLed(false);
}
}
void SensorAlarmController::raiseAlarm(bool isCrit) {
this->is_crit = isCrit;
int readtimer = timer.read();
if (isCrit)
printf("Received a critical %s alarm %f timer is at %d\r\n", this->sensor->getName().c_str(), value, readtimer);
if (!isCrit)
printf("Received a non-critical %s alarm %f timer is at %d\r\n", this->sensor->getName().c_str(), value, readtimer);
if (readtimer > 0 ) { //already running
if ((readtimer >= NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM && is_crit) ||
(readtimer >= NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM && !is_crit)) {
this->error = true;
if (this->is_crit) {
this->error_msg = this->error_msg_critical;
} else {
this->error_msg = this->error_msg_undesired;
}
printf("### %s alarm has been triggered after ### %d seconds\r\n", this->getName().c_str(), readtimer);
sensor->setLed(true);
buzzOnce();
timer.stop();
timer.reset();
this->is_crit = false;
}
} else {
timer.start();
}
}
std::string SensorAlarmController::getName() {
return "AlarmController[" + this->sensor->getName() + "]";
}
bool SensorAlarmController::isError() {
return this->error;
}
std::string SensorAlarmController::getErrorMessage() {
return this->error_msg;
}
void SensorAlarmController::setCriticalErrorMsg(std::string msg) {
this->error_msg_critical = msg;
}
void SensorAlarmController::setUndesiredErrorMsg(std::string msg) {
this->error_msg_undesired = msg;
}
bool SensorAlarmController::isActive() {
return this->timer.read() > 0;
}
void SensorAlarmController::buzzOnce() {
buzzer = 1;
wait(0.1);
buzzer = 0;
}