rF2 Telemetry CSV Plugin 4.0.0.0 31 October 2014 * Changed default to enabled on first run, no need to go searching for the ini file in order to get it to do anything. * Removed Terrain Name strings from the output so the commas don't mess up the subsequent columns. * Corrected a couple of column headings. 32-bit and 64-bit DLLs included. Installation ----------- 1. Copy rF2TelemetryCSVPlugin.dll to Bin32\Plugins folder. 2. Copy rF2TelemetryCSVPlugin_x64.dll to Bin64\Plugins folder. 3. Run a session. The CSV files will be written to your UserData\Log\Telemetry folder. rF2 Telemetry CSV Plugin 3.0.0.0 28 June 2014 Rebuilt against v6 of InternalsPlugin.hpp SteeringArmForce changed to SteeringShaftTorque Adds FrontTireCompoundName, RearTireCompoundName and TurboBoostPressure Adds 64-bit DLL for use with 64-bit rFactor2.exe (zip now contains both 32-bit and 64-bit DLLs) 32-bit Plugin requires rF2 build 660 or later 64-bit Plugin requires rF2 build 767_x64 or later rF2 Telemetry CSV Plugin 2.0.0.0 11 Feb 2014 Adds FFB value to the CSV. rF2 Telemetry CSV Plugin 1.0.0.0 7 Feb 2014 Requires rF2 build 382 or later. This rF2 plugin will dump all available telemetry data to a CSV file in UserData\Log\Telemetry. The file is named with the current date & time e.g. 20140207_083233.csv Copy rF2TelemetryCSVPlugin.dll to Plugins to install. On first run an ini file will be written to UserData\rF2TelemetryCSVPlugin.ini, containing a single entry: [Telemetry] Enabled=False To enable telemetry logging edit this to: [Telemetry] Enabled=True One CSV file will be written for each real-time session (exiting back to the monitor ends a session). Logging can be enabled and disabled on the fly using the Toggle Hardware Plugins key (default mapping is G). The CSV file generated can be opened in a wide variety of analysis tools including ATLAS. Please see the attached screen grab showing how to configure ATLAS to read CSV files. Please post any questions or comments below. (I posted the original v1 thread in the wrong forum section, sorry about that!)
I can't share the full source code sorry as it contains a few bits of proprietary code that I'm not allowed to share (such as the ini file reader & writer classes). Other than the proprietary bits there's really not much more to it than what is in the InternalsPlugin sample code provided by ISI at http://rfactor.net/web/rf2/devscorner/, I'm just writing all the available telemetry data out to file rather than just a few selected bits. For example, here's the entire UpdateTelemetry() function: Code: void rF2TelemetryCSVPlugin::UpdateTelemetry( const TelemInfoV01 &info ) { if (logFile != NULL && mEnabled ) { fprintf(logFile, "%.3f, %.3f, %i, %s, %s, ", info.mElapsedTime, info.mDeltaTime, info.mCurrentSector, info.mVehicleName, info.mTrackName ); fprintf(logFile, "%.3f, ", info.mClutchRPM ); fprintf(logFile, "%i, ", info.mDetached ); fprintf(logFile, "%.3f, ", info.mDrag ); fprintf(logFile, "%.3f, ", info.mEngineMaxRPM ); fprintf(logFile, "%.3f, ", info.mEngineRPM ); fprintf(logFile, "%.3f, ", info.mEngineTq ); fprintf(logFile, "%.3f, ", info.mEngineWaterTemp ); fprintf(logFile, "%.3f, ", info.mFilteredBrake ); fprintf(logFile, "%.3f, ", info.mFilteredClutch ); fprintf(logFile, "%.3f, ", info.mFilteredSteering ); fprintf(logFile, "%.3f, ", info.mFilteredThrottle ); fprintf(logFile, "%.3f, ", ffb ); fprintf(logFile, "%.3f, ", info.mFront3rdDeflection ); fprintf(logFile, "%.3f, ", info.mFrontDownforce ); fprintf(logFile, "%u, ", info.mFrontFlapActivated ); fprintf(logFile, "%.3f, ", info.mFrontRideHeight ); fprintf(logFile, "%u, ", info.mFrontTireCompoundIndex ); fprintf(logFile, "%.3f, ", info.mFrontWingHeight ); fprintf(logFile, "%.3f, ", info.mFuel ); fprintf(logFile, "%.3f, ", info.mFuelCapacity ); fprintf(logFile, "%i, ", info.mGear ); fprintf(logFile, "%i, ", info.mHeadlights ); fprintf(logFile, "%u, ", info.mIgnitionStarter ); fprintf(logFile, "%i, ", info.mLapNumber ); fprintf(logFile, "%.3f, ", info.mLapStartET ); fprintf(logFile, "%.3f, ", info.mLastImpactET ); fprintf(logFile, "%.3f, ", info.mLastImpactMagnitude ); fprintf(logFile, "%.3f, ", info.mLastImpactPos.x ); fprintf(logFile, "%.3f, ", info.mLastImpactPos.y ); fprintf(logFile, "%.3f, ", info.mLastImpactPos.z ); fprintf(logFile, "%.3f, ", info.mLocalAccel.x ); fprintf(logFile, "%.3f, ", info.mLocalAccel.y ); fprintf(logFile, "%.3f, ", info.mLocalAccel.z ); fprintf(logFile, "%.3f, ", info.mLocalRot.x ); fprintf(logFile, "%.3f, ", info.mLocalRot.y ); fprintf(logFile, "%.3f, ", info.mLocalRot.z ); fprintf(logFile, "%.3f, ", info.mLocalRotAccel.x ); fprintf(logFile, "%.3f, ", info.mLocalRotAccel.y ); fprintf(logFile, "%.3f, ", info.mLocalRotAccel.z ); fprintf(logFile, "%.3f, ", info.mLocalVel.x ); fprintf(logFile, "%.3f, ", info.mLocalVel.y ); fprintf(logFile, "%.3f, ", info.mLocalVel.z ); fprintf(logFile, "%u, ", info.mMaxGears ); fprintf(logFile, "%.3f, ", info.mOri[0].x ); fprintf(logFile, "%.3f, ", info.mOri[0].y ); fprintf(logFile, "%.3f, ", info.mOri[0].z ); fprintf(logFile, "%.3f, ", info.mOri[1].x ); fprintf(logFile, "%.3f, ", info.mOri[1].y ); fprintf(logFile, "%.3f, ", info.mOri[1].z ); fprintf(logFile, "%.3f, ", info.mOri[2].x ); fprintf(logFile, "%.3f, ", info.mOri[2].y ); fprintf(logFile, "%.3f, ", info.mOri[2].z ); fprintf(logFile, "%.3f, ", info.mPos.x ); fprintf(logFile, "%.3f, ", info.mPos.y ); fprintf(logFile, "%.3f, ", info.mPos.z ); fprintf(logFile, "%i, ", info.mOverheating ); fprintf(logFile, "%.3f, ", info.mRear3rdDeflection ); fprintf(logFile, "%.3f, ", info.mRearDownforce ); fprintf(logFile, "%u, ", info.mRearFlapActivated ); fprintf(logFile, "%u, ", info.mRearFlapLegalStatus ); fprintf(logFile, "%.3f, ", info.mRearRideHeight ); fprintf(logFile, "%u, ", info.mRearTireCompoundIndex ); fprintf(logFile, "%u, ", info.mScheduledStops ); fprintf(logFile, "%u, ", info.mSpeedLimiter ); fprintf(logFile, "%.3f, ", info.mSteeringArmForce ); fprintf(logFile, "%.3f, ", info.mUnfilteredBrake ); fprintf(logFile, "%.3f, ", info.mUnfilteredClutch ); fprintf(logFile, "%.3f, ", info.mUnfilteredSteering ); fprintf(logFile, "%.3f, ", info.mUnfilteredThrottle ); fprintf(logFile, "%.3f, ", info.mWheel[0].mBrakePressure ); fprintf(logFile, "%.3f, ", info.mWheel[0].mBrakeTemp ); fprintf(logFile, "%.3f, ", info.mWheel[0].mCamber ); fprintf(logFile, "%i, ", info.mWheel[0].mDetached ); fprintf(logFile, "%i, ", info.mWheel[0].mFlat ); fprintf(logFile, "%.3f, ", info.mWheel[0].mGripFract ); fprintf(logFile, "%.3f, ", info.mWheel[0].mLateralForce ); fprintf(logFile, "%.3f, ", info.mWheel[0].mLateralGroundVel ); fprintf(logFile, "%.3f, ", info.mWheel[0].mLateralPatchVel ); fprintf(logFile, "%.3f, ", info.mWheel[0].mLongitudinalForce ); fprintf(logFile, "%.3f, ", info.mWheel[0].mLongitudinalGroundVel ); fprintf(logFile, "%.3f, ", info.mWheel[0].mLongitudinalPatchVel ); fprintf(logFile, "%.3f, ", info.mWheel[0].mPressure ); fprintf(logFile, "%.3f, ", info.mWheel[0].mRideHeight ); fprintf(logFile, "%.3f, ", info.mWheel[0].mRotation ); fprintf(logFile, "%u, ", info.mWheel[0].mSurfaceType ); fprintf(logFile, "%.3f, ", info.mWheel[0].mSuspensionDeflection ); fprintf(logFile, "%.3f, ", info.mWheel[0].mSuspForce ); fprintf(logFile, "%.3f, ", info.mWheel[0].mTemperature ); fprintf(logFile, "%s, ", info.mWheel[0].mTerrainName ); fprintf(logFile, "%.3f, ", info.mWheel[0].mTireLoad ); fprintf(logFile, "%.3f, ", info.mWheel[0].mToe ); fprintf(logFile, "%.3f, ", info.mWheel[0].mVerticalTireDeflection ); fprintf(logFile, "%.3f, ", info.mWheel[0].mWear ); fprintf(logFile, "%.3f, ", info.mWheel[0].mWheelYLocation ); fprintf(logFile, "%.3f, ", info.mWheel[1].mBrakePressure ); fprintf(logFile, "%.3f, ", info.mWheel[1].mBrakeTemp ); fprintf(logFile, "%.3f, ", info.mWheel[1].mCamber ); fprintf(logFile, "%i, ", info.mWheel[1].mDetached ); fprintf(logFile, "%i, ", info.mWheel[1].mFlat ); fprintf(logFile, "%.3f, ", info.mWheel[1].mGripFract ); fprintf(logFile, "%.3f, ", info.mWheel[1].mLateralForce ); fprintf(logFile, "%.3f, ", info.mWheel[1].mLateralGroundVel ); fprintf(logFile, "%.3f, ", info.mWheel[1].mLateralPatchVel ); fprintf(logFile, "%.3f, ", info.mWheel[1].mLongitudinalForce ); fprintf(logFile, "%.3f, ", info.mWheel[1].mLongitudinalGroundVel ); fprintf(logFile, "%.3f, ", info.mWheel[1].mLongitudinalPatchVel ); fprintf(logFile, "%.3f, ", info.mWheel[1].mPressure ); fprintf(logFile, "%.3f, ", info.mWheel[1].mRideHeight ); fprintf(logFile, "%.3f, ", info.mWheel[1].mRotation ); fprintf(logFile, "%u, ", info.mWheel[1].mSurfaceType ); fprintf(logFile, "%.3f, ", info.mWheel[1].mSuspensionDeflection ); fprintf(logFile, "%.3f, ", info.mWheel[1].mSuspForce ); fprintf(logFile, "%.3f, ", info.mWheel[1].mTemperature ); fprintf(logFile, "%s, ", info.mWheel[1].mTerrainName ); fprintf(logFile, "%.3f, ", info.mWheel[1].mTireLoad ); fprintf(logFile, "%.3f, ", info.mWheel[1].mToe ); fprintf(logFile, "%.3f, ", info.mWheel[1].mVerticalTireDeflection ); fprintf(logFile, "%.3f, ", info.mWheel[1].mWear ); fprintf(logFile, "%.3f, ", info.mWheel[1].mWheelYLocation ); fprintf(logFile, "%.3f, ", info.mWheel[2].mBrakePressure ); fprintf(logFile, "%.3f, ", info.mWheel[2].mBrakeTemp ); fprintf(logFile, "%.3f, ", info.mWheel[2].mCamber ); fprintf(logFile, "%i, ", info.mWheel[2].mDetached ); fprintf(logFile, "%i, ", info.mWheel[2].mFlat ); fprintf(logFile, "%.3f, ", info.mWheel[2].mGripFract ); fprintf(logFile, "%.3f, ", info.mWheel[2].mLateralForce ); fprintf(logFile, "%.3f, ", info.mWheel[2].mLateralGroundVel ); fprintf(logFile, "%.3f, ", info.mWheel[2].mLateralPatchVel ); fprintf(logFile, "%.3f, ", info.mWheel[2].mLongitudinalForce ); fprintf(logFile, "%.3f, ", info.mWheel[2].mLongitudinalGroundVel ); fprintf(logFile, "%.3f, ", info.mWheel[2].mLongitudinalPatchVel ); fprintf(logFile, "%.3f, ", info.mWheel[2].mPressure ); fprintf(logFile, "%.3f, ", info.mWheel[2].mRideHeight ); fprintf(logFile, "%.3f, ", info.mWheel[2].mRotation ); fprintf(logFile, "%u, ", info.mWheel[2].mSurfaceType ); fprintf(logFile, "%.3f, ", info.mWheel[2].mSuspensionDeflection ); fprintf(logFile, "%.3f, ", info.mWheel[2].mSuspForce ); fprintf(logFile, "%.3f, ", info.mWheel[2].mTemperature ); fprintf(logFile, "%s, ", info.mWheel[2].mTerrainName ); fprintf(logFile, "%.3f, ", info.mWheel[2].mTireLoad ); fprintf(logFile, "%.3f, ", info.mWheel[2].mToe ); fprintf(logFile, "%.3f, ", info.mWheel[2].mVerticalTireDeflection ); fprintf(logFile, "%.3f, ", info.mWheel[2].mWear ); fprintf(logFile, "%.3f, ", info.mWheel[2].mWheelYLocation ); fprintf(logFile, "%.3f, ", info.mWheel[3].mBrakePressure ); fprintf(logFile, "%.3f, ", info.mWheel[3].mBrakeTemp ); fprintf(logFile, "%.3f, ", info.mWheel[3].mCamber ); fprintf(logFile, "%i, ", info.mWheel[3].mDetached ); fprintf(logFile, "%i, ", info.mWheel[3].mFlat ); fprintf(logFile, "%.3f, ", info.mWheel[3].mGripFract ); fprintf(logFile, "%.3f, ", info.mWheel[3].mLateralForce ); fprintf(logFile, "%.3f, ", info.mWheel[3].mLateralGroundVel ); fprintf(logFile, "%.3f, ", info.mWheel[3].mLateralPatchVel ); fprintf(logFile, "%.3f, ", info.mWheel[3].mLongitudinalForce ); fprintf(logFile, "%.3f, ", info.mWheel[3].mLongitudinalGroundVel ); fprintf(logFile, "%.3f, ", info.mWheel[3].mLongitudinalPatchVel ); fprintf(logFile, "%.3f, ", info.mWheel[3].mPressure ); fprintf(logFile, "%.3f, ", info.mWheel[3].mRideHeight ); fprintf(logFile, "%.3f, ", info.mWheel[3].mRotation ); fprintf(logFile, "%u, ", info.mWheel[3].mSurfaceType ); fprintf(logFile, "%.3f, ", info.mWheel[3].mSuspensionDeflection ); fprintf(logFile, "%.3f, ", info.mWheel[3].mSuspForce ); fprintf(logFile, "%.3f, ", info.mWheel[3].mTemperature ); fprintf(logFile, "%s, ", info.mWheel[3].mTerrainName ); fprintf(logFile, "%.3f, ", info.mWheel[3].mTireLoad ); fprintf(logFile, "%.3f, ", info.mWheel[3].mToe ); fprintf(logFile, "%.3f, ", info.mWheel[3].mVerticalTireDeflection ); fprintf(logFile, "%.3f, ", info.mWheel[3].mWear ); fprintf(logFile, "%.3f, ", info.mWheel[3].mWheelYLocation ); fprintf(logFile, "\n" ); } }
Has anybody been able to open the telemetry file with ATLAS? The plugin creates the file but I can't get ATLAS to recognise it.
does anybody have a telemetry file from this plugin that i could have a look at ? I am really interested in this but i am away from my computer atm so i cant create one myself. Just wanted to play with ATLAS and compare it to motec. Thanks Regards Ian
Do I need anything else for this plugin to work ? I installed it in the folder. It created the INI file, which I edited to have Enable in the line. It doesn't seem to create the Telemetry folder and save anything in it. I manually created a Telemetry folder, but that didn't help. I must have missed something.
No, you shouldn't need anything else. What's the full path to your core & data folders? Where did it create the ini file?
Core Path: Local Disk\Program Files (x86)\rFactor2\Core Data Path: C:\Users\John\My Documents\rFactor2\ Location of the ini file: C:\Users\John\My Documents\rFactor2\UserData Shock or FacePalm .... Now as I was verifying the ini location, I found the Telemetry folder in the LOG folder within the UserData folder. I would have bet money there were no new folders in there! I think I even did a Windows search for any "Telemetry" files or folders. I don't know what changed. Restart of rFactor ? Computer restart ? Better reading glasses ? In any case, it works FINE now. Sorry for the questions.
Hi TechAde, Very useful plugin, thank you very much! I would like to ask you, if you can imagine to work on a ``race engineer plugin`` to provide race informations to the driver, like position, time improvements, tire wear warnings etc. ? I have made a GlovePIE script with speech recognition to ``talk`` to an race engineer, but it would be very useful to receive some spontaneous information from your race engineer (rFactor2 program) Please have a look to this and think about it with love ? http://isiforums.net/f/showthread.p...e-on-track-WIP?p=206760&viewfull=1#post206760
I don't think I'd have time for something like that sorry, the plugins I've released for rF2 are all rather simple and very little code at all - that sounds like it would be quite a job.
that`s a pitty ..... please give it a try ! a very simple one .... Let him say something like ``you tire temperatures are in a good range`` when they passed 85 degrees celcius.
that are GREAT news ! you may refer to the spotter from ``carlomaker`` for rFactor1`` as inspiration some ideas for speech output - motivation on race start - position - remaining laps / time - you are chasing a car in front and diminuishing gap - car approximating from behind - tire wear and over/underheating - brake overheating - reminding (planed) pitstop - rain conditions (wet level on track) - general track conditions when leaving pits - comments whats ongoing during pitstop - other cars entering pits during race tbc. I am ready to support you in anyway