-/* $Id$
-
-This file is part of R²C²
-Copyright © 2010 Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
#include <fcntl.h>
#include <termios.h>
#include <sys/poll.h>
void Intellibox::flush()
{
- Time::TimeStamp t = Time::now();
for(list<CommandSlot>::iterator i=queue.begin(); i!=queue.end(); ++i)
{
write(serial_fd, i->data, i->length);
unsigned speed = (data[0]<=1 ? 0 : data[0]*2/19+1);
bool reverse = !(data[1]&0x20);
- if(speed!=loco.speed || reverse!=loco.reverse)
- {
- loco.speed = speed;
- loco.reverse = reverse;
- signal_loco_speed.emit(addr, loco.speed, loco.reverse);
- }
+ bool speed_changed = (speed!=loco.speed || reverse!=loco.reverse);
+
+ loco.speed = speed;
+ loco.reverse = reverse;
unsigned funcs = (data[1]&0xF)<<1;
if(data[1]&0x10)
funcs |= 1;
- if(funcs!=loco.funcs)
- {
- unsigned changed = loco.funcs^funcs;
- loco.funcs = funcs;
- for(unsigned i=0; i<5; ++i)
- if(changed&(1<<i))
- signal_loco_function.emit(addr, i, loco.funcs&(1<<i));
- }
+ unsigned funcs_changed = loco.funcs^funcs;
+ loco.funcs = funcs;
+
+ if(speed_changed)
+ signal_loco_speed.emit(addr, loco.speed, loco.reverse);
+ for(unsigned i=0; i<5; ++i)
+ if(funcs_changed&(1<<i))
+ signal_loco_function.emit(addr, i, loco.funcs&(1<<i));
}
else
error(cmd, err);