#include "quadrature.h"
/*************************************************************************
 * quadrature()
 *   Decode quadrature states to return 0 distance traveled.
 */
#define ERROR()
int quadrature(unsigned char*stateticks,char encoder_A,char encoder_B,long *ticks)
{
    char encoder;

    encoder = (encoder_A << 1) | encoder_B;
    switch (*stateticks)
    {
    case 0:

        switch (encoder)
        {
        case 0:

            return 0;

        case 1:

            (*ticks) ++;

            *stateticks = encoder;

            return 0;

        case 2:

            (*ticks) --;

            *stateticks = encoder;

            return 0;

        case 3:

            ERROR();
            *stateticks = encoder;

            return 1;
        }

    case 1:

        switch (encoder)
        {
        case 0:
            (*ticks) --;

            *stateticks = encoder;

            return 0;

        case 1:

            return 0;

        case 2:

            ERROR();
            *stateticks = encoder;

            return 1;

        case 3:

            (*ticks) ++;

            *stateticks = encoder;

            return 0;
        }

    case 2:

        switch (encoder)
        {
        case 0:

            (*ticks) ++;

            *stateticks = encoder;

            return 0;

        case 1:

            ERROR();

            return 1;

        case 2:


            return 0;

        case 3:

            (*ticks) --;

            *stateticks = encoder;

            return 0;
        }

    case 3:

        switch (encoder)
        {
        case 0:

            ERROR();

            return 1;

        case 1:

            (*ticks) --;

            *stateticks = encoder;

            return 0;

        case 2:

            (*ticks) ++;

            *stateticks = encoder;

            return 0;

        case 3:

            return 0;
        }
    }
}

