это состояние из которого вошли в состояние AB. Защелка может фиксировать энкодер в состояниях А, 0 или B. И нужно перещелкивать счетчик тогда и только тогда когды мы вошли в AB с одной стороны, а вышли с другой. Код несколько переусложнен, так как пытается обработать некоторые перескоки сразу через две четверти. То есть, например, при последовательности переходов B-A-0-AB-0-B-0 будет зафиксирован один поворот вперед :P Впочем, возможно это излишее. Если переходы возможны только последовательные - можно упростить:
if( cur == prev )
return;
if( prev == StateAB && cur != prevPrev ) {
if( cur == StateB )
up();
else
down();
}
prevPrev = prev;
prev = cur;