void CentralStation::tick()
{
- Time::TimeStamp t = Time::now();
- for(SensorMap::iterator i=sensors.begin(); i!=sensors.end(); ++i)
- if(i->second.off_timeout && t>i->second.off_timeout)
- {
- i->second.state = false;
- i->second.off_timeout = Time::TimeStamp();
- signal_sensor.emit(i->first, i->second.state);
- }
-
while(Message msg = receive())
{
if(msg.footer.code)
unsigned addr = base*16+j+1;
Sensor &sensor = sensors[addr];
bool s = state&(1<<j);
- if(s)
+ if(s!=sensor.state)
{
- sensor.off_timeout = Time::TimeStamp();
- if(!sensor.state)
- {
- sensor.state = true;
- signal_sensor.emit(addr, sensor.state);
- }
+ sensor.state = s;
+ signal_sensor.emit(addr, sensor.state);
}
- else if(sensor.state)
- sensor.off_timeout = Time::now()+700*Time::msec;
}
}
}