Support of more data values in fit file

Former Member
Former Member
Hi there

First of all I would like to thank you for developing the Virb Edit, I really enjoy using it.

I have made a freeware program for converting data from drones to Garmin Fit file, for generating videos like these:
https://www.youtube.com/watch?v=LJqqZcrhIx8

My program uses a lot of different data fields in the fit files for values that they are actually not meant for, for an example I use the field HeartRate in the fit file for reporting Wifi Signal level and I use Cadance in the fit file for the Battery level of the drone etc.

This approach works very well, and I am able to include a lot of different data in the videos which was never meant to be used that way.

My problem now is that I would like to include even more new data in the video, but it seems like I am running out of supported data fields which Virb does support.

I need to include some new values which should allow values between 0 and 6.000

I am already using the following data fields in the fit file:
Stance Time
Stance Time Percent
Elevation
Engine RPM
Power
Cadance
Aviation Track Angle
Pitch and Roll
HeartRate
verticalOscillation

I have tried to use the following data fields in the fit file, but it seems like these values is not supported in Garmin Virb:
EnhancedAltitude
EnhancedSpeed
Grade
MotorPower
Resistance

Are there any other data fields I could you in the fit file, or is it possible for you to add support for more data values in the future?

Thanks in advance

Best regards
Kenth
  • Former Member
    0 Former Member over 8 years ago
    Hello, I'm a very happy user of that program and I do agree with the request: we need ASL elevation in our videos! And maybe something more...
    So please add value fields or remove values limit for every value, that would help a lot. Thanks!
  • Former Member
    0 Former Member over 8 years ago
    OBDII Engine RPM PID data...

    hello, this is wonderful!!!

    Also I'm working on ANT + library for file generation ".fit" by some custom device (i want use VIRB EDIT).
    I'm finding a problem that I cannot solve, maybe you're skilled.

    This is the question:
    When you write the ".fit" file, there are different classes of messages (OBII, Record, Aviation, etc.) to send to encoder. Where you found the field RPM Engine?

    I discover that in ObdiiDataMesg is possible to choose PID. Where i can find the right PID? is it a integer value? Hex? i'm using java,...

    I'm going crazy and I can not find it...

    Thank you!!!!
    Hello
  • That´s a really cool attemp! Like the video and love your gauges, Kenth!

    Probably that´s a way for me to submit the current gear from my motorbike :D
    Just have to kick something out, which is probably Engineload. There is no such thing on my bike.

    @theolo77: Do you need a Fit-File with OBD-data to analyze?
    RPM is Hex: 0x0C, which is 12 in Int.
    Wiki: Obd II (you can find all PID´s and formula there, but Virb only supports 6 of them)
    Hex2Dec Converter
  • Former Member
    0 Former Member over 8 years ago
    Hello, thanks for the answer.

    I'm writing a program to save a file in ".fit" format so it can be read by virB. i use Java.

    I downloaded the library Ant + and all documentation.

    I managed to make reading by virB virtually all the parameters I need, but the only one that I can not do recognize by virB is "ENGINE RPM".
    my code is as follows:

    ObdiiDataMesg OB = new ObdiiDataMesg();
    //

    //
    Float singlefloatdata=(float) float_vector[ii];

    int num = (Integer.parseInt("0C", 16)); // This for PID code that is in Hex
    OB.setPid((byte) num);

    Byte to_row_data_byte =singlefloatdata.byteValue(); //probably error is here...?

    OB.setRawData(0, to_row_data_byte);

    encode.write(OB);




    the above code works well with the vehicle speed (0D Hex) and other PIDs by 1 byte ... while for ENGINE RPM not... probably because it has 2 byte?

    do you have some possible solutions?

    thank you very much ... I'm going crazy ...



    That´s a really cool attemp! Like the video and love your gauges, Kenth!

    Probably that´s a way for me to submit the current gear from my motorbike :D
    Just have to kick something out, which is probably Engineload. There is no such thing on my bike.

    @theolo77: Do you need a Fit-File with OBD-data to analyze?
    RPM is Hex: 0x0C, which is 12 in Int.
    Wiki: Obd II (you can find all PID´s and formula there, but Virb only supports 6 of them)
    Hex2Dec Converter
  • Yes, RPM is 2 bytes long.
    I´m coding in C but that should not matter :)

    //RPM-Calculation
    unsigned int value = 12483;
    //OBD: (256A + B) / 4
    value *= 4;
    ecuResponse[1] = value % 256;
    if(value >= 256)
    ecuResponse[0] = value / 256;
    else
    ecuResponse[0] = 0x00;

    Now you have 2 bytes ecuResponse 0 and 1. That´s it :)

    Tried to use EngineLoad do display the current gear. But I´ll always receive 0.97, 1.3, 4.8, ect. The calculation is crappy, I probably should go on values of 10 instead of 1. Because the rounding is quite bad on that calculation.
    100 % equals 255. So it´s value = value * 255/100.
    Gear 1 *255/100 = 2,55 = 2. Backwards 2 * 100 / 255 = 0,78.

    At the moment, I have not got familiar with the gauge designer and its calculations...
    Maybe you have an idea how I can make the gauge f.e. round 9,8 to 10 and divide by 10 to receive Gear 1 :)
  • Former Member
    0 Former Member over 8 years ago
    Greaaaatttt!!!!

    HI HerrRiebmann!!!!! Thanks thanks LOTS!!!!! It works very good!!!!! I'm being crazy for this... :-))

    About the use of EngineLoad, i suggest as you think, to jump to another of magnitude.
    unfortunately I don't know very well how gauge works and I cannot help you much. I'm sorry...

    Thanks again for the help



    Yes, RPM is 2 bytes long.
    I´m coding in C but that should not matter :)

    //RPM-Calculation
    unsigned int value = 12483;
    //OBD: (256A + B) / 4
    value *= 4;
    ecuResponse[1] = value % 256;
    if(value >= 256)
    ecuResponse[0] = value / 256;
    else
    ecuResponse[0] = 0x00;

    Now you have 2 bytes ecuResponse 0 and 1. That´s it :)

    Tried to use EngineLoad do display the current gear. But I´ll always receive 0.97, 1.3, 4.8, ect. The calculation is crappy, I probably should go on values of 10 instead of 1. Because the rounding is quite bad on that calculation.
    100 % equals 255. So it´s value = value * 255/100.
    Gear 1 *255/100 = 2,55 = 2. Backwards 2 * 100 / 255 = 0,78.

    At the moment, I have not got familiar with the gauge designer and its calculations...
    Maybe you have an idea how I can make the f.e. round 9,8 to 10 and divide by 10 to receive Gear 1 :)
  • Former Member
    0 Former Member over 8 years ago
    Hi again

    Any news on plans for adding support more data fields from fit files?

    I still neeed this :p

    Br Kenth
  • Hi Kenth,

    +1 for that.
    Currently I let the Virb XE create my fit-File, which only supports 6 OBD values. But I´d like to create another device which calculates lots of engine related data and store it to an SD card.

    Maybe a temporary workaround for you would be to create a second fit-file. Same parameter, different meanings. But then you will have to render the video twice, which takes forever :(

    I´ve also been successful and finally got my gauge running with the current gear.
    Thank you for your great Idea to reuse the values and gauges :)