From: Mikko Rasa Date: Fri, 18 Dec 2009 23:07:25 +0000 (+0000) Subject: Simulate commands if no serial device is set to make turnouts work X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;ds=inline;h=09843b65a4a8aa1e7f53bd3d2ec1e431d29bf513;p=r2c2.git Simulate commands if no serial device is set to make turnouts work --- diff --git a/source/libmarklin/control.cpp b/source/libmarklin/control.cpp index 4f63cc2..30e99e6 100644 --- a/source/libmarklin/control.cpp +++ b/source/libmarklin/control.cpp @@ -1,7 +1,7 @@ /* $Id$ This file is part of the MSP Märklin suite -Copyright © 2007-2008 Mikkosoft Productions, Mikko Rasa +Copyright © 2007-2009 Mikkosoft Productions, Mikko Rasa Distributed under the GPL */ @@ -216,7 +216,11 @@ void Control::tick() if(serial_fd>=0) queue.front().send(serial_fd); else + { + Reply reply = Reply::simulate(queue.front().get_command()); + queue.front().signal_done.emit(reply); queue.erase(queue.begin()); + } } } @@ -240,7 +244,7 @@ void Control::event_query_done(const Reply &reply) command(CMD_EVENT_TURNOUT).signal_done.connect(sigc::mem_fun(this, &Control::turnout_event_done)); if(data[0]&0x04) command(CMD_EVENT_SENSOR).signal_done.connect(sigc::mem_fun(this, &Control::sensor_event_done)); - if(data[1]&0x40) + if((data[0]&0x80) && (data[1]&0x40)) command(CMD_STATUS).signal_done.connect(sigc::mem_fun(this, &Control::status_done)); } diff --git a/source/libmarklin/reply.cpp b/source/libmarklin/reply.cpp index 5a02df2..1d7d536 100644 --- a/source/libmarklin/reply.cpp +++ b/source/libmarklin/reply.cpp @@ -1,7 +1,7 @@ /* $Id$ This file is part of the MSP Märklin suite -Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa +Copyright © 2006-2009 Mikkosoft Productions, Mikko Rasa Distributed under the GPL */ @@ -108,6 +108,45 @@ Reply Reply::read(int fd, Cmd cmd) return result; } +Reply Reply::simulate(Cmd cmd) +{ + Reply result; + + if(cmd==CMD_STATUS) + { + result.data[0] = 0x80; + result.len = 1; + } + if(cmd==CMD_EVENT) + result.len = 1; + else if(cmd==CMD_TURNOUT) + ; + else if(cmd==CMD_TURNOUT_STATUS) + { + result.data[0] = 0x04; + result.len = 1; + } + else if(cmd==CMD_LOK) + ; + else if(cmd==CMD_LOK_STATUS) + { + result.data[1] = 0x20; + result.len = 3; + } + else if(cmd==CMD_SENSOR_PARAM_SET) + ; + else if(cmd==CMD_SENSOR_REPORT) + ; + else if(cmd==CMD_POWER_ON) + ; + else if(cmd==CMD_POWER_OFF) + ; + else + result.err = ERR_SYS_ERROR; + + return result; +} + ostream &operator<<(ostream &out, const Reply &reply) { out<