Esempio n. 1
0
        private bool ProcessPacket1(byte[] data)
        {
            _participantInfoStringsBuffer = data;
            GCHandle gCHandle = GCHandle.Alloc(_participantInfoStringsBuffer, GCHandleType.Pinned);

            try
            {
                lock (this)     // YUK
                {
                    _participantInfoStrings = (UDPDataFormat.sParticipantInfoStrings)Marshal.PtrToStructure(gCHandle.AddrOfPinnedObject(), typeof(UDPDataFormat.sParticipantInfoStrings));
                }
            }
            finally
            {
                gCHandle.Free();
            }
            return(true);
        }
Esempio n. 2
0
        private void ProcessUDPData()
        {
            lock (_udpReader) // YUK !!!!
            {
                UDPDataFormat.sTelemetryData          _tempTelemetryData         = _udpReader.TelemetryData;
                UDPDataFormat.sParticipantInfoStrings _tempParticipantInfoString = _udpReader.ParticipantInfoStrings;

                _data.MGameState    = (int)_tempTelemetryData.sGameSessionState & 7;
                _data.MSessionState = (int)_tempTelemetryData.sGameSessionState >> 4;
                _data.MRaceState    = (int)_tempTelemetryData.sRaceStateFlags & 7;

                _data.MViewedParticipantIndex = _tempTelemetryData.sViewedParticipantIndex;
                _data.MNumParticipants        = _tempTelemetryData.sNumParticipants;

                _data.MUnfilteredThrottle = _tempTelemetryData.sUnfilteredThrottle;
                _data.MUnfilteredBrake    = _tempTelemetryData.sUnfilteredBrake;
                _data.MUnfilteredSteering = _tempTelemetryData.sUnfilteredSteering;
                _data.MUnfilteredClutch   = _tempTelemetryData.sUnfilteredClutch;

                SetValueIfNotNULL(_data.MCarName, _tempParticipantInfoString.sCarName);
                SetValueIfNotNULL(_data.MCarClassName, _tempParticipantInfoString.sCarClassName);

                _data.MLapsInEvent = _tempTelemetryData.sLapsInEvent;

                SetValueIfNotNULL(_data.MTrackLocation, _tempParticipantInfoString.sTrackLocation);
                SetValueIfNotNULL(_data.MTrackVariation, _tempParticipantInfoString.sTrackVariation);
                _data.MTrackLength = _tempTelemetryData.sTrackLength;

                _data.MLapInvalidated = (_tempTelemetryData.sRaceStateFlags >> 3 & 1) == 1;

                _data.MBestLapTime                = _tempTelemetryData.sBestLapTime;
                _data.MLastLapTime                = _tempTelemetryData.sLastLapTime;
                _data.MCurrentTime                = _tempTelemetryData.sCurrentTime;
                _data.MSplitTimeAhead             = _tempTelemetryData.sSplitTimeAhead;
                _data.MSplitTimeBehind            = _tempTelemetryData.sSplitTimeBehind;
                _data.MSplitTime                  = _tempTelemetryData.sSplitTime;
                _data.MEventTimeRemaining         = _tempTelemetryData.sEventTimeRemaining;
                _data.MPersonalFastestLapTime     = _tempTelemetryData.sPersonalFastestLapTime;
                _data.MWorldFastestLapTime        = _tempTelemetryData.sWorldFastestLapTime;
                _data.MCurrentSector1Time         = _tempTelemetryData.sCurrentSector1Time;
                _data.MCurrentSector2Time         = _tempTelemetryData.sCurrentSector2Time;
                _data.MCurrentSector3Time         = _tempTelemetryData.sCurrentSector3Time;
                _data.MFastestSector1Time         = _tempTelemetryData.sFastestSector1Time;
                _data.MFastestSector2Time         = _tempTelemetryData.sFastestSector2Time;
                _data.MFastestSector3Time         = _tempTelemetryData.sFastestSector3Time;
                _data.MPersonalFastestSector1Time = _tempTelemetryData.sPersonalFastestSector1Time;
                _data.MPersonalFastestSector2Time = _tempTelemetryData.sPersonalFastestSector2Time;
                _data.MPersonalFastestSector3Time = _tempTelemetryData.sPersonalFastestSector3Time;
                _data.MWorldFastestSector1Time    = _tempTelemetryData.sWorldFastestSector1Time;
                _data.MWorldFastestSector2Time    = _tempTelemetryData.sWorldFastestSector2Time;
                _data.MWorldFastestSector3Time    = _tempTelemetryData.sWorldFastestSector3Time;

                _data.MHighestFlagColour = (int)_tempTelemetryData.sHighestFlag & 7;
                _data.MHighestFlagReason = (int)_tempTelemetryData.sHighestFlag >> 3 & 3;

                _data.MPitMode     = (int)_tempTelemetryData.sPitModeSchedule & 7;
                _data.MPitSchedule = (int)_tempTelemetryData.sPitModeSchedule >> 3 & 3;

                _data.MCarFlags         = _tempTelemetryData.sCarFlags;
                _data.MOilTempCelsius   = _tempTelemetryData.sOilTempCelsius;
                _data.MOilPressureKPa   = _tempTelemetryData.sOilPressureKPa;
                _data.MWaterTempCelsius = _tempTelemetryData.sWaterTempCelsius;
                _data.MWaterPressureKPa = _tempTelemetryData.sWaterPressureKpa;
                _data.MFuelPressureKPa  = _tempTelemetryData.sFuelPressureKpa;
                _data.MFuelLevel        = _tempTelemetryData.sFuelLevel;
                _data.MFuelCapacity     = _tempTelemetryData.sFuelCapacity;
                _data.MSpeed            = _tempTelemetryData.sSpeed;
                _data.MRpm            = _tempTelemetryData.sRpm;
                _data.MMaxRpm         = _tempTelemetryData.sMaxRpm;
                _data.MBrake          = (float)_tempTelemetryData.sBrake / 255f;
                _data.MThrottle       = (float)_tempTelemetryData.sThrottle / 255f;
                _data.MClutch         = (float)_tempTelemetryData.sClutch / 255f;
                _data.MSteering       = (float)_tempTelemetryData.sSteering / 127f;
                _data.MGear           = _tempTelemetryData.sGearNumGears & 15;
                _data.MNumGears       = _tempTelemetryData.sGearNumGears >> 4;
                _data.MOdometerKm     = _tempTelemetryData.sOdometerKM;
                _data.MAntiLockActive = (_tempTelemetryData.sRaceStateFlags >> 4 & 1) == 1;
                _data.MBoostActive    = (_tempTelemetryData.sRaceStateFlags >> 5 & 1) == 1;
                _data.MBoostAmount    = _tempTelemetryData.sBoostAmount;

                _data.MOrientation       = _tempTelemetryData.sOrientation;
                _data.MLocalVelocity     = _tempTelemetryData.sLocalVelocity;
                _data.MWorldVelocity     = _tempTelemetryData.sWorldVelocity;
                _data.MAngularVelocity   = _tempTelemetryData.sAngularVelocity;
                _data.MLocalAcceleration = _tempTelemetryData.sLocalAcceleration;
                _data.MWorldAcceleration = _tempTelemetryData.sWorldAcceleration;
                _data.MExtentsCentre     = _tempTelemetryData.sExtentsCentre;

                _data.MTyreFlags = ConvertByteToIntArray(_tempTelemetryData.sTyreFlags);
            }

            ProcessData();
        }