X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Farducontrol.cpp;h=6d75c7542dd0490fb3cde74b8b2e771560636eb1;hb=b3f8467442aac111e9a316db0dda67d37ae240b8;hp=0065c4dd5c5f534ce170d50ace90b851fce5e612;hpb=26fbc0321526ccc41a81a332f0d60b7cc42b6567;p=r2c2.git diff --git a/source/libr2c2/arducontrol.cpp b/source/libr2c2/arducontrol.cpp index 0065c4d..6d75c75 100644 --- a/source/libr2c2/arducontrol.cpp +++ b/source/libr2c2/arducontrol.cpp @@ -296,6 +296,8 @@ void ArduControl::activate_accessory_by_mask(Accessory &acc, unsigned mask) unsigned bit = mask&~(mask-1); for(active_index=0; (bit>>active_index)>1; ++active_index) ; acc.state.set((acc.state&~bit)|(acc.target&bit)); + if(debug>=1) + IO::print("Setting accessory %d bit %d, state=%d\n", acc.address, active_index, acc.state.pending); PendingCommand cmd(acc, Accessory::ACTIVATE, active_index); command_queue.push(cmd); active_accessory = &acc; @@ -457,8 +459,9 @@ void ArduControl::tick() if(active_accessory && off_timeout) { + bool success = (monitor.get_peak()>0.35f && monitor.get_current()off_timeout) + if(t>off_timeout || success) { Accessory &acc = *active_accessory; @@ -467,8 +470,10 @@ void ArduControl::tick() // Assume success if we were uncertain of the physical setting if(acc.uncertain&bit) acc.uncertain &= ~bit; - else if(acc.kind==Accessory::TURNOUT && monitor.get_peak()<0.5f) + else if(acc.kind==Accessory::TURNOUT && !success) { + if(debug>=1) + IO::print("Peak current only %.2f A\n", monitor.get_peak()); signal_turnout_failed.emit(acc.address); acc.state.rollback(); if(acc.valid_states&(1<<(acc.target^bit))) @@ -593,7 +598,7 @@ ArduControl::Accessory::Accessory(Kind k, unsigned a, unsigned b, unsigned s): state(0), uncertain((1<