Cirrious.MvvmCross.Plugins.Sphero.Messages.SpheroResponseBuilder.Add C# (CSharp) Method

Add() public method

public Add ( byte x ) : void
x byte
return void
        public void Add(byte x)
        {
            if (IsErrored)
                throw new SpheroPluginException("Response already errored. You cannot add more bytes to it.");

            switch (_currentState)
            {
                case State.WaitingForSop1:
                    if (x != 0xff)
                    {
                        _currentState = State.ErrorHeader;
                        throw new SpheroPluginException("Unexpected packet SOP1 header byte {0}", x);
                    }
                    _response.StartOfPacket1 = x;
                    _currentState++;
                    break;
                case State.WaitingForSop2:
                    if (x != 0xff && x != 0xfe)
                    {
                        _currentState = State.ErrorHeader;
                        throw new SpheroPluginException("Unexpected packet SOP2 header byte {0}", x);
                    }
                    _response.StartOfPacket2 = x;
                    _currentState++;
                    break;
                case State.WaitingForMrsp:
                    _response.MessageResponse = x;
                    _currentState++;
                    break;
                case State.WaitingForSeq:
                    _response.SequenceNumber = x;
                    _currentState++;
                    break;
                case State.WaitingForDlen:
                    _response.DataLength = x;
                    _currentState++;
                    break;
                case State.WaitingForPayloadAndCheckSum:
                    if (_response.DataLength - _response.Payload.Count > 1)
                    {
                        _response.Payload.Add(x);
                    }
                    else
                    {
                        _response.CheckSum = x;
                        if (!_response.Validate())
                        {
                            _currentState = State.ErrorCheckSum;
                            throw new SpheroPluginException("CheckSum error in received packet");
                        }
                        _currentState++;
                    }
                    break;
                case State.Complete:
                    _currentState = State.ErrorOverflow;
                    throw new SpheroPluginException("You cannot add any more bytes to this complete response");
                case State.Error:
                case State.ErrorHeader:
                case State.ErrorCheckSum:
                case State.ErrorOverflow:
                    // do nothing
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
    }

Usage Example

Ejemplo n.º 1
0
        public void BuildsWithSimplePayload()
        {
            var responseBuilder = new SpheroResponseBuilder();
            AssertOKButNotComplete(responseBuilder);

            responseBuilder.Add(0xff); // SOP1
            AssertOKButNotComplete(responseBuilder);
            responseBuilder.Add(0xff); // SOP2
            AssertOKButNotComplete(responseBuilder);
            responseBuilder.Add(0xab); // Response
            AssertOKButNotComplete(responseBuilder);
            responseBuilder.Add(0x21); // Sequence
            AssertOKButNotComplete(responseBuilder);
            responseBuilder.Add(0x05); // Length of payload + checksum
            AssertOKButNotComplete(responseBuilder);
            responseBuilder.Add(0xa1); // payload
            AssertOKButNotComplete(responseBuilder);
            responseBuilder.Add(0xa2); // payload
            AssertOKButNotComplete(responseBuilder);
            responseBuilder.Add(0xa3); // payload
            AssertOKButNotComplete(responseBuilder);
            responseBuilder.Add(0xa4); // payload
            AssertOKButNotComplete(responseBuilder);
            responseBuilder.Add(0xa4); // inverted checksum
            AssertOKAndComplete(responseBuilder);
        }
All Usage Examples Of Cirrious.MvvmCross.Plugins.Sphero.Messages.SpheroResponseBuilder::Add
SpheroResponseBuilder