X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fdummy.cpp;h=90638f63bd8c438b2cfa845a7c0d20173992df41;hb=9f0d428e974defa64cdf8e7b7072967327250958;hp=c28a3e16e9ae9c3a25d3a87c8b560b62c7e28c51;hpb=73d4dc248a97c11538e83bed6dddf486785804e1;p=r2c2.git diff --git a/source/libr2c2/dummy.cpp b/source/libr2c2/dummy.cpp index c28a3e1..90638f6 100644 --- a/source/libr2c2/dummy.cpp +++ b/source/libr2c2/dummy.cpp @@ -1,3 +1,5 @@ +#include +#include #include #include #include "dummy.h" @@ -9,7 +11,9 @@ namespace R2C2 { Dummy::Dummy(const Options &opts): power(true), - turnout_delay(opts.get("turnout_delay", 0U)*Time::sec) + halted(false), + turnout_delay(opts.get("turnout_delay", 0.0f)*Time::sec), + turnout_fail_rate(opts.get("turnout_fail_rate", 0.0f)*RAND_MAX) { } void Dummy::set_power(bool p) @@ -62,7 +66,8 @@ void Dummy::set_turnout(unsigned addr, unsigned state) turnout.timeout = Time::now()+turnout_delay; else { - turnout.state = state; + if(!turnout_fail_rate || rand()>=turnout_fail_rate) + turnout.state = state; signal_turnout.emit(addr, state); } } @@ -114,6 +119,11 @@ bool Dummy::get_sensor(unsigned addr) const return false; } +float Dummy::get_telemetry_value(const string &name) const +{ + throw key_error(name); +} + void Dummy::tick() { Time::TimeStamp t = Time::now(); @@ -121,6 +131,11 @@ void Dummy::tick() { if(i->second.timeout && t>=i->second.timeout) { + if(turnout_fail_rate && rand()first); + i->second.pending = i->second.state; + } i->second.state = i->second.pending; i->second.timeout = Time::TimeStamp(); signal_turnout.emit(i->first, i->second.state);