debug(false)
{ }
+Control::~Control()
+{
+ for(map<unsigned, Sensor *>::iterator i=sensors.begin(); i!=sensors.end(); ++i)
+ delete i->second;
+ for(map<unsigned, Turnout *>::iterator i=turnouts.begin(); i!=turnouts.end(); ++i)
+ delete i->second;
+ for(map<unsigned, Locomotive *>::iterator i=locomotives.begin(); i!=locomotives.end(); ++i)
+ delete i->second;
+ close(serial_fd);
+}
+
void Control::set_power(bool p)
{
power=p;
command(string(1, CMD_POWER_OFF));
}
+void Control::set_debug(bool d)
+{
+ debug=d;
+}
+
void Control::open(const string &dev)
{
serial_fd=::open(dev.c_str(), O_RDWR);
poll_sensors=false;
}
- if(queue.size() && queue.front().get_sent())
+ if(!queue.empty() && queue.front().get_sent())
{
pollfd pfd={serial_fd, POLLIN, 0};
if(poll(&pfd, 1, 0)>0)
{
- string resp=read_reply((Cmd)(unsigned char)queue.front().get_command()[0]);
+ string resp=read_reply(static_cast<Cmd>(static_cast<unsigned char>(queue.front().get_command()[0])));
if(debug)
{
printf("read: ");
for(unsigned i=0; i<resp.size(); ++i)
- printf("%02X ", (unsigned char)resp[i]);
+ printf("%02X ", static_cast<unsigned char>(resp[i]));
printf("(%d bytes)\n", resp.size());
}
- queue.front().signal_done.emit((Error)resp[0], resp.substr(1));
+ queue.front().signal_done.emit(static_cast<Error>(resp[0]), resp.substr(1));
queue.erase(queue.begin());
}
else
return;
}
- if(queue.size())
+ if(!queue.empty())
{
string cmd=queue.front().get_command();
{
printf("write: ");
for(unsigned i=0; i<cmd.size(); ++i)
- printf("%02X ",(unsigned char)cmd[i]);
- printf("(%d bytes)\n",cmd.size());
+ printf("%02X ", static_cast<unsigned char>(cmd[i]));
+ printf("(%d bytes)\n", cmd.size());
}
write(serial_fd, cmd.data(), cmd.size());
return timer.add(dt);
}
-Control::~Control()
-{
- for(map<unsigned, Sensor *>::iterator i=sensors.begin(); i!=sensors.end(); ++i)
- delete i->second;
- for(map<unsigned, Turnout *>::iterator i=turnouts.begin(); i!=turnouts.end(); ++i)
- delete i->second;
- for(map<unsigned, Locomotive *>::iterator i=locomotives.begin(); i!=locomotives.end(); ++i)
- delete i->second;
- close(serial_fd);
-}
-
-/*** private ***/
-
void Control::read_all(int fd, char *buf, int size)
{
int pos=0;
unsigned count=resp[0];
for(unsigned i=0; i<count; ++i)
{
- unsigned addr=(unsigned char)resp[i*2+1]+((resp[i*2+2]&7)<<8);
+ unsigned addr=static_cast<unsigned char>(resp[i*2+1])+((resp[i*2+2]&7)<<8);
bool status=!(resp[i*2+2]&0x80);
cout<<"Turnout "<<addr<<", status "<<status<<'\n';
signal_turnout_event.emit(addr, status);
{
for(unsigned i=0; resp[i]; i+=3)
{
- unsigned module=(unsigned char)resp[i];
+ unsigned module=static_cast<unsigned char>(resp[i]);
cout<<"S88 module "<<module<<", status ";
for(unsigned j=0; j<16; ++j)