151 lines
2.8 KiB
C++
151 lines
2.8 KiB
C++
#include <Vector.h>
|
|
#include <Streaming.h>
|
|
#include <Arduino.h>
|
|
#include "app.h"
|
|
#include "config.h"
|
|
#include "types.h"
|
|
#include "common/macros.h"
|
|
#include "Addon.h"
|
|
#include "features.h"
|
|
|
|
|
|
void App::onDidSetupAddons(){
|
|
|
|
#ifdef HAS_STATUS
|
|
status->setStatusAllOn();
|
|
delay(SECS * 2);
|
|
status->setStatusAllOff();
|
|
status->setStatus(false);
|
|
#endif
|
|
}
|
|
|
|
short App::setFlag(ushort addonId, ushort flag)
|
|
{
|
|
Addon *addon = byId(addonId);
|
|
if (addon)
|
|
{
|
|
addon->setFlag(flag);
|
|
return E_OK;
|
|
}
|
|
return ERROR_WARNING;
|
|
}
|
|
|
|
ushort App::numByFlag(ushort flag)
|
|
{
|
|
uchar s = addons.size();
|
|
uchar l = 0;
|
|
String out = "";
|
|
for (uchar i = 0; i < s; i++)
|
|
{
|
|
Addon *addon = addons[i];
|
|
if (!!(addon->hasFlag(flag)))
|
|
{
|
|
l++;
|
|
}
|
|
}
|
|
return l;
|
|
}
|
|
|
|
short App::debug()
|
|
{
|
|
#ifndef MEARSURE_PERFORMANCE
|
|
if (millis() - debugTS > DEBUG_INTERVAL)
|
|
{
|
|
uchar s = addons.size();
|
|
uchar nb = 0;
|
|
for (uchar i = 0; i < s; i++)
|
|
{
|
|
Addon *addon = addons[i];
|
|
if (addon->hasFlag(DEBUG))
|
|
{
|
|
(addon->debug)(&Serial);
|
|
Serial.println("\n");
|
|
nb++;
|
|
}
|
|
}
|
|
if (nb)
|
|
{
|
|
Serial.println("\n");
|
|
}
|
|
debugTS = millis();
|
|
}
|
|
#endif
|
|
}
|
|
|
|
short App::info()
|
|
{
|
|
Serial.print("Addon configuration : \n\n");
|
|
uchar s = addons.size();
|
|
for (uchar i = 0; i < s; i++)
|
|
{
|
|
Addon *addon = addons[i];
|
|
if (addon->hasFlag(INFO))
|
|
{
|
|
addon->info(&Serial);
|
|
Serial << "\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
Addon *App::byId(short id)
|
|
{
|
|
uchar s = addons.size();
|
|
for (uchar i = 0; i < s; i++)
|
|
{
|
|
Addon *addon = addons[i];
|
|
if (addon->id == id)
|
|
{
|
|
return addon;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
void App::setup_addons()
|
|
{
|
|
#ifdef HAS_STATUS
|
|
addons.push_back((Addon *)status);
|
|
#endif
|
|
addons.push_back((Addon *)cSensor);
|
|
addons.push_back((Addon *)this);
|
|
|
|
uchar s = addons.size();
|
|
for (uchar i = 0; i < s; i++)
|
|
{
|
|
Addon *addon = addons[i];
|
|
if (addon->hasFlag(SETUP))
|
|
{
|
|
addon->setup();
|
|
}
|
|
}
|
|
onDidSetupAddons();
|
|
}
|
|
void App::loop_addons()
|
|
{
|
|
|
|
#ifdef MEARSURE_PERFORMANCE
|
|
millis_t now = millis();
|
|
#endif
|
|
|
|
uchar s = addons.size();
|
|
for (uchar i = 0; i < s; i++)
|
|
{
|
|
Addon *addon = addons[i];
|
|
if (addon->hasFlag(LOOP))
|
|
{
|
|
addon->now = now;
|
|
addon->loop();
|
|
}
|
|
}
|
|
|
|
#ifdef MEARSURE_PERFORMANCE
|
|
addonLoopTime = millis() - now;
|
|
if (millis() - printPerfTS > 3000)
|
|
{
|
|
printPerfTS = now;
|
|
Serial << SPACE("Addon loop time") << addonLoopTime << "\n";
|
|
}
|
|
#endif
|
|
debug();
|
|
}
|