/* $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
*/
delete i->second;
for(map<unsigned, Locomotive *>::iterator i=locomotives.begin(); i!=locomotives.end(); ++i)
delete i->second;
- close(serial_fd);
+ if(serial_fd>=0)
+ close(serial_fd);
}
void Control::open(const string &dev)
if(debug)
cout<<"W: "<<queue.front()<<'\n';
- queue.front().send(serial_fd);
+ 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());
+ }
}
}
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));
}