X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Farducontrol.cpp;h=8c17234051752e2527295016e197d2b8d8e5237c;hb=aada4cd3c335e6cf55d64200b9d92e8f9310fa1d;hp=201d9a2ebdd73e7871527c2f09c87b3a7f29cba2;hpb=8935c058a29ce263f4539832049aa74be3762438;p=r2c2.git diff --git a/source/libr2c2/arducontrol.cpp b/source/libr2c2/arducontrol.cpp index 201d9a2..8c17234 100644 --- a/source/libr2c2/arducontrol.cpp +++ b/source/libr2c2/arducontrol.cpp @@ -760,12 +760,12 @@ ArduControl::MfxSearchTask::MfxSearchTask(ArduControl &c): next_address(1), size(0), bits(0), - pending(false) + misses(0) { } bool ArduControl::MfxSearchTask::get_work(PendingCommand &cmd) { - if(size==32) + if(size>32) { if(control.debug>=1) IO::print("Assigning MFX address %d to decoder %08X\n", next_address, bits); @@ -795,7 +795,6 @@ bool ArduControl::MfxSearchTask::get_work(PendingCommand &cmd) cmd.length = 6; next = t+200*Time::msec; - pending = true; if(control.debug>=1) IO::print("Search %08X/%d\n", bits, size); @@ -806,31 +805,24 @@ bool ArduControl::MfxSearchTask::get_work(PendingCommand &cmd) void ArduControl::MfxSearchTask::process_reply(const char *reply, unsigned length) { unsigned char type = reply[0]; - if(type==MFX_FEEDBACK && length==2 && pending) + if(type==MFX_SEARCH_FEEDBACK && length==2) { - pending = false; - bool finished = true; if(reply[1]) { - if(size<32) - ++size; - finished = false; + misses = 0; + ++size; } - else if(size>0) + else if(size>0 && misses<6) { - unsigned mask = 1<<(32-size); - if(!(bits&mask)) - { - bits |= mask; - finished = false; - } + ++misses; + bits ^= 1<<(32-size); } - - if(finished) + else { next = Time::now()+2*Time::sec; bits = 0; size = 0; + misses = 0; } } }