Пример #1
0
        void processRemoteCommandByte(byte b)
        {
            switch (remoteCommandState)
            {
            case RemoteCommandReceiveState.awaitingStartState:
                if (b == 0xff)
                {
                    remoteCommandState = RemoteCommandReceiveState.awaitingLengthState;
                }
                break;

            case RemoteCommandReceiveState.awaitingLengthState:
                if (b > buffer.Length)
                {
                    remoteCommandState = RemoteCommandReceiveState.awaitingStartState;
                }
                else
                {
                    commandPos         = 0;
                    commandSize        = b;
                    remoteCommandState = RemoteCommandReceiveState.bufferingCharsState;
                }
                break;

            case RemoteCommandReceiveState.bufferingCharsState:
                if (b == 0xFF)
                {
                    remoteCommandState = RemoteCommandReceiveState.awaitingLengthState;
                    break;
                }
                if (b == 0xFE)
                {
                    // start of an escape sequence
                    remoteCommandState = RemoteCommandReceiveState.awaitingEscapeChar;
                    break;
                }
                // Add the character to the buffer
                // Process the command if at the end
                bufferByte(b);
                break;

            case RemoteCommandReceiveState.awaitingEscapeChar:
                if (b == 1)
                {
                    bufferByte(0xFE);
                    remoteCommandState = RemoteCommandReceiveState.bufferingCharsState;
                }
                else if (b == 2)
                {
                    bufferByte(0xFF);
                    remoteCommandState = RemoteCommandReceiveState.bufferingCharsState;
                }
                else
                {
                    resetRemoteCommandReceiver();
                }
                break;
            }
        }
Пример #2
0
        void bufferByte(byte b)
        {
            buffer[commandPos] = b;
            commandPos++;
            if (commandPos == commandSize)
            {
                byte check = 0;
                for (byte i = 0; i < commandSize - 1; i++)
                {
                    check += buffer[i];
                }

                if (check != buffer[commandSize - 1])
                {
                    return;
                }
                sendBuffer();
                remoteCommandState = RemoteCommandReceiveState.awaitingStartState;
            }
        }
Пример #3
0
 void resetRemoteCommandReceiver()
 {
     remoteCommandState = RemoteCommandReceiveState.awaitingStartState;
 }