private bool ProcessPacket0(byte[] data) { _sTelemetryBuffer = data; GCHandle gCHandle = GCHandle.Alloc(_sTelemetryBuffer, GCHandleType.Pinned); try { lock (this) // YUK { _telemetryData = (UDPDataFormat.sTelemetryData)Marshal.PtrToStructure(gCHandle.AddrOfPinnedObject(), typeof(UDPDataFormat.sTelemetryData)); } } finally { gCHandle.Free(); } return(true); }
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(); }