Exemple #1
0
        internal void DispatchAsyncResponse(AsyncResponsePacket response)
        {
            switch (response.ResponseCode)
            {
            case AsynchronousId.POWER_NOTIFICATION:

                if (_core != null)
                {
                    _core.RaisePowerNotification(_core, (PowerState)response.Data[0]);
                }

                break;

            case AsynchronousId.SENSOR_DATA_STREAMING:
                if (_sphero != null)
                {
                    SensorData sensorData = new SensorData(_sphero.Mask, _sphero.Mask2, response.Data);

                    _sphero.RaiseSensorDataNotification(sensorData);
                }
                break;

            case AsynchronousId.SSB_DATA:
                string data = Encoding.UTF8.GetString(response.Data, 0, response.Data.Length);
                Debug.WriteLine("Async SSB message : {0}", BitConverter.ToString(response.ToArray()));

                break;

            case AsynchronousId.XP_UPDATE:
                if (_sphero != null)
                {
                    _sphero.RaiseXpNotification(response.Data[0]);
                }
                break;

            case AsynchronousId.BOOST_UPDATE:
                if (_sphero != null)
                {
                    _sphero.RaiseBoostNotification(response.Data[0]);
                }
                break;

            case AsynchronousId.COLLISION_DETECTED:
                if (_sphero != null)
                {
                    _sphero.RaiseCollisionDetected(new Collisions.CollisionData(response.Data));
                }
                break;

            default:
                if (Verbose)
                {
                    Debug.WriteLine("Async message : {0}", BitConverter.ToString(response.ToArray()));
                }
                break;
            }
        }
Exemple #2
0
        internal ResponsePacket ParseResponse(byte[] data)
        {
            ResponsePacket response = null;

            _data.AddRange(data);
            if (_data.Count >= 6)
            {
                if (_data[0] != 255 || _data[1] != 255)
                {
                    // Bad message case
                    if (_data[0] != 255 || _data[1] != 254)
                    {
                        // No Sphero Message
                        // Clean data until the next message
                        int nextMessageIndex = _data.IndexOf(255);
                        if (nextMessageIndex >= 0)
                        {
                            _data.RemoveRange(0, nextMessageIndex);
                        }
                        else
                        {
                            _data.Clear();
                        }
                    }

                    // Asynchronous message case

                    byte lengthMSB = _data[3], lengthLSB = _data[4];
                    int  length = BitConverter.ToUInt16(new byte[] { lengthLSB, lengthMSB }, 0) + 5;
                    if (_data.Count >= length)
                    {
                        byte[] responseArray = new byte[length];
                        _data.CopyTo(0, responseArray, 0, length);
                        _data.RemoveRange(0, length);

                        AsyncResponsePacket packet = new AsyncResponsePacket(responseArray);
                        DispatchAsyncResponse(packet);
                    }
                }
                else
                {
                    // Acknowledgement
                    int length = 5 + _data[4];
                    if (_data.Count >= length)
                    {
                        byte[] responseArray = new byte[length];
                        _data.CopyTo(0, responseArray, 0, length);
                        _data.RemoveRange(0, length);
                        response = new ResponsePacket(responseArray);
                    }
                }
            }


            return(response);
        }
Exemple #3
0
        internal ResponsePacket ParseResponse(byte[] data)
        {
            ResponsePacket response = null;

            _data.AddRange(data);
            if (_data.Count >= 6)
            {
                if (_data[0] != 255 || _data[1] != 255)
                {
                    // Bad message case
                    if (_data[0] != 255 || _data[1] != 254)
                    {
                        // No Sphero Message
                        // Clean data until the next message
                        int nextMessageIndex = _data.IndexOf(255);
                        if (nextMessageIndex >= 0)
                            _data.RemoveRange(0, nextMessageIndex);
                        else
                            _data.Clear();
                    }

                    // Asynchronous message case

                    byte lengthMSB = _data[3], lengthLSB = _data[4];
                    int length = BitConverter.ToUInt16(new byte[] { lengthLSB, lengthMSB }, 0) + 5;
                    if (_data.Count >= length)
                    {

                        byte[] responseArray = new byte[length];
                        _data.CopyTo(0, responseArray, 0, length);
                        _data.RemoveRange(0, length);

                        AsyncResponsePacket packet = new AsyncResponsePacket(responseArray);
                        DispatchAsyncResponse(packet);
                    }

                }
                else
                {
                    // Acknowledgement
                    int length = 5 + _data[4];
                    if (_data.Count >= length)
                    {
                        byte[] responseArray = new byte[length];
                        _data.CopyTo(0, responseArray, 0, length);
                        _data.RemoveRange(0, length);
                        response = new ResponsePacket(responseArray);
                    }

                }
            }


            return response;
        }
Exemple #4
0
        internal void DispatchAsyncResponse(AsyncResponsePacket response)
        {
           
            switch(response.ResponseCode)
            {
                case AsynchronousId.POWER_NOTIFICATION:
                   
                    if(_core != null)
                    {
                        _core.RaisePowerNotification(_core, (PowerState)response.Data[0]);
                    }

                    break;
                case AsynchronousId.SENSOR_DATA_STREAMING:
                    if (_sphero != null)
                    {
                        SensorData sensorData = new SensorData(_sphero.Mask, _sphero.Mask2, response.Data);

                        _sphero.RaiseSensorDataNotification(sensorData);
                    }
                    break;
                case AsynchronousId.SSB_DATA:
                    string data = Encoding.UTF8.GetString(response.Data, 0, response.Data.Length);
                    Debug.WriteLine("Async SSB message : {0}", BitConverter.ToString(response.ToArray()));

                    break;
                case AsynchronousId.XP_UPDATE:
                    if (_sphero != null)
                    {
                        _sphero.RaiseXpNotification(response.Data[0]);
                    }
                    break;
                case AsynchronousId.BOOST_UPDATE:
                    if (_sphero != null)
                    {
                        _sphero.RaiseBoostNotification(response.Data[0]);
                    }
                    break;
                case AsynchronousId.COLLISION_DETECTED:
                    if (_sphero != null)
                    {
                        _sphero.RaiseCollisionDetected(new Collisions.CollisionData(response.Data));
                    }
                    break;
                default:
                    if (Verbose)
                        Debug.WriteLine("Async message : {0}", BitConverter.ToString(response.ToArray()));
                    break;
            }
        }