private void ResetState()
 {
     _headerCount = 0;
     _state       = SerbClientState.WaitHeader;
     _command     = Command.Unknown;
     _param       = 0;
 }
        private void ProcessByte(byte data)
        {
            switch (_state)
            {
            case SerbClientState.WaitHeader:
                if (data == HeaderBytes[_headerCount])
                {
                    _headerCount++;
                    if (_headerCount >= HeaderBytes.Length)
                    {
                        _state = SerbClientState.WaitCommand;
                    }
                }
                else
                {
                    _errorLed.TurnOn(200);
                    ResetState();
                }
                break;

            case SerbClientState.WaitCommand:
                _command = (char)data;
                _state   = SerbClientState.WaitParam;
                break;

            case SerbClientState.WaitParam:
                _param = data;
                _statusLed.TurnOn(200);
                InterpretCommand();
                ResetState();
                break;

            default:
                _errorLed.TurnOn(200);
                ResetState();
                break;
            }
        }