public void Broadcast(PSVRSensor SensorData)
 {
     byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(SensorData));
     client.Send(data, data.Length, ep);
 }
        public void Update(PSVRSensor Data)
        {
            if (samples < 1000)
            {
                drift[0] += ParseAccelerometerData((short)Data.MotionY1);
                drift[1] += ParseAccelerometerData((short)Data.MotionX1);
                drift[2] += ParseAccelerometerData((short)Data.MotionZ1);

                drift[3] += ParseAccelerometerData((short)Data.GyroPitch1);
                drift[4] += ParseAccelerometerData((short)Data.GyroYaw1);
                drift[5] += ParseAccelerometerData((short)Data.GyroRoll1);
                samples++;
                return;
            }
            else if (samples == 1000)
            {
                samples++;

                for (int buc = 0; buc < 6; buc++)
                {
                    drift[buc] = Math.Abs(drift[buc] / 1000.0f);
                }

                drift[1] -= 1;
            }

            SamplePeriod = 1 / (sw.ElapsedTicks / (float)Stopwatch.Frequency);
            sw.Restart();

            float accelX = ParseAccelerometerData((short)Data.MotionY1);
            float accelY = ParseAccelerometerData((short)Data.MotionX1);
            float accelZ = ParseAccelerometerData((short)Data.MotionZ1);

            //float gyroX =  ParseGyroscopeData((short)Data.GyroPitch1);
            //float gyroY =  ParseGyroscopeData((short)Data.GyroRoll1);
            //float gyroZ = ParseGyroscopeData((short)Data.GyroYaw1);

            //float gyroX = ParseGyroscopeData((short)Data.GyroPitch1);
            //float gyroY = ParseGyroscopeData((short)Data.GyroYaw1);
            //float gyroZ = ParseGyroscopeData((short)Data.GyroRoll1);

            //float gyroX = ParseGyroscopeData((short)Data.GyroRoll1);
            //float gyroY = ParseGyroscopeData((short)Data.GyroPitch1);
            //float gyroZ = ParseGyroscopeData((short)Data.GyroYaw1);

            //float gyroX = ParseGyroscopeData((short)Data.GyroRoll1);
            //float gyroY = ParseGyroscopeData((short)Data.GyroYaw1);
            //float gyroZ = ParseGyroscopeData((short)Data.GyroPitch1);


            //float gyroX = ParseGyroscopeData((short)Data.GyroYaw1);
            //float gyroY = ParseGyroscopeData((short)Data.GyroPitch1);
            //float gyroZ = ParseGyroscopeData((short)Data.GyroRoll1);

            float gyroX = ParseGyroscopeData((short)Data.GyroPitch1);
            float gyroY = ParseGyroscopeData((short)Data.GyroYaw1);
            float gyroZ = ParseGyroscopeData((short)Data.GyroRoll1);



            accelX = Math.Sign(accelX) * (Math.Abs(accelX) - drift[0]);
            accelX = Math.Sign(accelY) * (Math.Abs(accelY) - drift[1]);
            accelX = Math.Sign(accelZ) * (Math.Abs(accelZ) - drift[2]);
            accelX = Math.Sign(gyroX) * (Math.Abs(gyroX) - drift[3]);
            accelX = Math.Sign(gyroY) * (Math.Abs(gyroY) - drift[4]);
            accelX = Math.Sign(gyroZ) * (Math.Abs(gyroZ) - drift[5]);

            Update(gyroX, gyroY, gyroZ, accelX, accelY, accelZ);

            //accelX = ParseAccelerometerData((short)Data.MotionY2);
            //accelY = ParseAccelerometerData((short)Data.MotionX2);
            //accelZ = ParseAccelerometerData((short)Data.MotionZ2);

            //gyroX = ParseGyroscopeData((short)Data.GyroYaw2);
            //gyroY = ParseGyroscopeData((short)Data.GyroRoll2);
            //gyroZ = ParseGyroscopeData((short)Data.GyroPitch2);

            //Update(gyroX, gyroY, gyroZ, accelX, accelY, accelZ);
        }