From: Mikko Rasa Date: Mon, 5 Apr 2010 13:35:46 +0000 (+0000) Subject: Add a set_sensor function to the Driver interface X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=9b68c21ebf8ce26d92246ecd4a392d2908b511f7;p=r2c2.git Add a set_sensor function to the Driver interface Bring back the simulation mode in Engineer --- diff --git a/source/engineer/engineer.cpp b/source/engineer/engineer.cpp index ea5139d..4a35c8e 100644 --- a/source/engineer/engineer.cpp +++ b/source/engineer/engineer.cpp @@ -74,6 +74,7 @@ Engineer::Engineer(int argc, char **argv): layout.signal_train_added.connect(sigc::mem_fun(this, &Engineer::train_added)); layout.signal_block_reserved.connect(sigc::mem_fun(this, &Engineer::block_reserved)); + layout.get_driver().signal_sensor.connect(sigc::mem_fun(this, &Engineer::sensor_event)); if(FS::exists("engineer.state")) DataFile::load(layout, "engineer.state"); @@ -83,8 +84,6 @@ Engineer::Engineer(int argc, char **argv): server->use_event_dispatcher(event_disp); } - layout.get_driver().signal_sensor.connect(sigc::mem_fun(this, &Engineer::sensor_event)); - // Setup 3D view DataFile::load(arrow_mesh, "arrow.mesh"); @@ -241,14 +240,11 @@ void Engineer::button_press(int x, int y, unsigned btn, unsigned) track.set_active_path(i); } } - /*else if(simulate) + else if(options.simulate) { - if(unsigned sid=track->get_track().get_sensor_id()) - { - Sensor &sensor = control.get_sensor(sid); - control.signal_sensor_event.emit(sid, !sensor.get_state()); - } - }*/ + if(unsigned sid=track.get_sensor_id()) + layout.get_driver().set_sensor(sid, !layout.get_driver().get_sensor(sid)); + } } } } diff --git a/source/libmarklin/driver.h b/source/libmarklin/driver.h index 1a5084d..9cab5cf 100644 --- a/source/libmarklin/driver.h +++ b/source/libmarklin/driver.h @@ -40,6 +40,7 @@ public: virtual bool get_turnout(unsigned) const = 0; virtual void add_sensor(unsigned) = 0; + virtual void set_sensor(unsigned, bool) = 0; virtual bool get_sensor(unsigned) const = 0; virtual void tick() = 0; diff --git a/source/libmarklin/dummy.cpp b/source/libmarklin/dummy.cpp index 99e9793..b8478a2 100644 --- a/source/libmarklin/dummy.cpp +++ b/source/libmarklin/dummy.cpp @@ -62,4 +62,21 @@ void Dummy::set_loco_function(unsigned addr, unsigned func, bool state) signal_loco_function.emit(addr, func, state); } +void Dummy::set_sensor(unsigned addr, bool state) +{ + if(sensors[addr]!=state) + { + sensors[addr] = state; + signal_sensor.emit(addr, state); + } +} + +bool Dummy::get_sensor(unsigned addr) const +{ + map::const_iterator i = sensors.find(addr); + if(i!=sensors.end()) + return i->second; + return false; +} + } // namespace Marklin diff --git a/source/libmarklin/dummy.h b/source/libmarklin/dummy.h index dab38ec..3004c8b 100644 --- a/source/libmarklin/dummy.h +++ b/source/libmarklin/dummy.h @@ -25,6 +25,7 @@ private: bool power; std::map turnouts; std::map locos; + std::map sensors; public: Dummy(); @@ -42,7 +43,8 @@ public: virtual bool get_turnout(unsigned) const; virtual void add_sensor(unsigned) { } - virtual bool get_sensor(unsigned) const { return false; } + virtual void set_sensor(unsigned, bool); + virtual bool get_sensor(unsigned) const; virtual void tick() { } virtual void flush() { } diff --git a/source/libmarklin/intellibox.h b/source/libmarklin/intellibox.h index 9f42aa2..a6b7cda 100644 --- a/source/libmarklin/intellibox.h +++ b/source/libmarklin/intellibox.h @@ -122,6 +122,7 @@ public: virtual bool get_turnout(unsigned) const; virtual void add_sensor(unsigned); + virtual void set_sensor(unsigned, bool) { } virtual bool get_sensor(unsigned) const; virtual void tick();