Big Mouth Billy Bass automation library
action.hpp
- Committer:
- bikeNomad
- Date:
- 2013-06-20
- Revision:
- 7:dba9221acf48
- Parent:
- 6:ea8136eb6976
File content as of revision 7:dba9221acf48:
#ifndef __included_action_hpp
#define __included_action_hpp
#include "billybass.hpp"
// 0.000000\t5.646050\thead
// 0.064498\t1.069177\ttail
// 0.357219\t0.580481\tmouth
#define MAX_ACTION_LINE_LENGTH 30
struct Action {
Action(float _time = -1.0,
bool _state = false,
DigitalOut *_out = 0,
char const *_outName = 0)
: actionTime(_time)
, output(_out)
, desiredState(_state)
, code('.') {
if (_outName) code = _outName[0];
}
bool operator < (Action const &other) const {
if (actionTime < other.actionTime) return true;
if (actionTime > other.actionTime) return false;
return (code < other.code);
}
// return <0 if *p1 is before *p2
static int compare(const void* p1, const void* p2) {
float tdiff = static_cast<Action const *>(p1)->actionTime - static_cast<Action const *>(p2)->actionTime;
if (tdiff != 0.0) return tdiff;
return static_cast<Action const *>(p1)->code - static_cast<Action const *>(p2)->code;
}
bool isValid() const {
return actionTime >= 0.0 && output != 0;
}
void act() {
output->write(desiredState ? 1 : 0);
}
bool isPast(float _now) {
return _now >= actionTime;
}
bool actIfPast(float _now) {
if (isPast(_now)) {
act();
return true;
} else return false;
}
void set(float _time, int _state, DigitalOut* _out, char _code = '.') {
actionTime = _time;
desiredState = _state;
output = _out;
code = _code;
}
float actionTime;
DigitalOut *output;
uint8_t desiredState;
char code;
};
#endif
Ned Konz