OBD-II Engine RPM Fit File

Hello, I am trying to generate a Fit File from an already existing CSV file from some vehicle data.

I am able to get most fields working such as engine speed, however, engine RPM refuses to display in Virb.

I've mostly followed the C++ example code, and I set a constant value for the RPM For the time being but nothing seems to work.

#include <cstdlib>
#include <fstream>
#include <iostream>

#include "csv.h"
#include "fit_date_time.hpp"
#include "fit_encode.hpp"
#include "fit_file_id_mesg.hpp"
#include "fit_mesg_broadcaster.hpp"

int EncodeActivityFile() {
  fit::Encode encode(fit::ProtocolVersion::V20);
  std::fstream file;
  

  file.open("ExampleActivity.fit",
            std::ios::in | std::ios::out | std::ios::binary | std::ios::trunc);

  if (!file.is_open()) {
    printf("Error opening file ExampleActivity.fit\n");
    return -1;
  }

  fit::FileIdMesg fileIdMesg;  // Every FIT file requires a File ID message
  fileIdMesg.SetType(FIT_FILE_ACTIVITY);
  fileIdMesg.SetManufacturer(FIT_MANUFACTURER_DYNASTREAM);
  fileIdMesg.SetProduct(1231);
  fileIdMesg.SetSerialNumber(12345);

  fit::DeveloperDataIdMesg devIdMesg;

  /* 16-byte identifier. */
  for (FIT_UINT8 i = 0; i < 16; i++) {
    devIdMesg.SetApplicationId(i, i);
  }
  /* Developer index that maps to DataIdMsg. */
  devIdMesg.SetDeveloperDataIndex(0);

  fit::FieldDescriptionMesg fieldDescMesg;
  /* Developer index source. */
  fieldDescMesg.SetDeveloperDataIndex(0);
  fieldDescMesg.SetFieldDefinitionNumber(0);
  fieldDescMesg.SetFitBaseTypeId(FIT_BASE_TYPE_UINT16);
  fieldDescMesg.SetFieldName(0, L"motor_speed");
  fieldDescMesg.SetUnits(0, L"rpm");

  /* TEST = VIRB_22 */
  io::CSVReader<3> in("test.csv");
  in.read_header(io::ignore_extra_column, "Time",
                 "Vehicle Speed (km/h) *OBD", "Engine Speed (RPM) *OBD");
  double time;
  /* Engine data */
  double speed;
  double rpm;

  std::list<fit::Mesg> records;
  while (in.read_row(time, speed, rpm)) {

    fit::ObdiiDataMesg rpmb;
    rpmb.SetLocalNum(8);
    rpmb.SetTimestamp(time);
    rpmb.SetSystemTime(0, time);
    rpmb.SetPid(12);  // RPM

    rpmb.SetRawData(0, 0xFF);
    rpmb.SetRawData(1, 0x00);
    
    records.push_back(rpmb);
  }
  encode.Open(file);
  encode.Write(fileIdMesg);
  encode.Write(devIdMesg);
  //encode.Write(fieldDescMesg);

  for (auto record : records) {
    encode.Write(record);
  }

  if (!encode.Close()) {
    printf("Error closing encode.\n");
    return -1;
  }
  file.close();

  printf("Encoded FIT file ExampleActivity.fit.\n");
  return 0;
}

int main() {
  printf("FIT Encode Example Application\n");

  int returnValue = 0;

  returnValue += EncodeActivityFile();

  return returnValue;
}