예제 #1
0
        public bool frameDecoder(byte b)
        {
            switch (state)
            {
            case frameState.S_READY:

                if (b == STARTCHAR)
                {
                    state = frameState.S_SYNC;
                }
                else
                {
                    state = frameState.S_READY;
                }
                break;

            case frameState.S_SYNC:
                if (b == thisaddr)
                {
                    state = frameState.S_IDENT;
                }
                else
                {
                    state = frameState.S_READY;
                }
                break;

            case frameState.S_IDENT:
                length   = b;
                checksum = 0;
                decode   = "";
                if (length != 0)
                {
                    state = frameState.S_READ;
                }
                else
                {
                    state = frameState.S_READY;
                }
                break;

            case frameState.S_READ:
                checksum ^= b;
                decode   += (char)b;
                if (--length == 0)
                {
                    state = frameState.S_CHECK;
                }
                else
                {
                    state = frameState.S_READ;
                }
                break;

            case frameState.S_CHECK:
                state = frameState.S_READY;
                if (checksum == b)
                {
                    return(true);
                }
                break;
            }
            return(false);
        }
예제 #2
0
 public frameDecode(byte address)
 {
     state    = frameState.S_READY;
     thisaddr = address;
 }