namespace R2C2 {
-Dummy::Dummy(const string ¶ms):
- power(true)
-{
- vector<string> opts = split(params, ':');
- for(vector<string>::const_iterator i=opts.begin(); i!=opts.end(); ++i)
- {
- string::size_type equals = i->find('=');
- if(equals!=string::npos)
- {
- string name = i->substr(0, equals);
- string value = i->substr(equals+1);
- if(name=="turnout_delay")
- turnout_delay = lexical_cast<unsigned>(value)*Time::msec;
- }
- }
-}
+Dummy::Dummy(const Options &opts):
+ power(true),
+ turnout_delay(opts.get("turnout_delay", 0U)*Time::sec)
+{ }
void Dummy::set_power(bool p)
{
signal_power.emit(power);
}
+void Dummy::halt(bool h)
+{
+ halted = h;
+ if(halted)
+ {
+ for(map<unsigned, LocoState>::iterator i=locos.begin(); i!=locos.end(); ++i)
+ if(i->second.speed)
+ set_loco_speed(i->first, 0);
+ }
+ signal_halt.emit(halted);
+}
+
const char *Dummy::enumerate_protocols(unsigned i) const
{
if(i==0)
return 0;
}
-void Dummy::add_turnout(unsigned addr, const TrackType &)
+unsigned Dummy::add_turnout(unsigned addr, const TrackType &)
{
turnouts[addr];
+ return addr;
}
void Dummy::set_turnout(unsigned addr, unsigned state)
void Dummy::set_loco_speed(unsigned addr, unsigned speed)
{
+ if(speed && halted)
+ return;
+
LocoState &loco = locos[addr];
loco.speed = speed;
signal_loco_speed.emit(addr, speed, loco.reverse);