/*@!Encoding:1252*/
variables
{
  long gHeading = 3600;  // 360°, divide through 0.0125 to get the heading val
  long gLatitude = 488234070;
  long gLongitude = 90943150;

  int gLatCounter = 0;
}

/****************************************************************/
// Called on simulation start
/****************************************************************/
on start
{
  // register the pre transmit callbacks
  C2xRegisterCallback(1, "OnTxCAM", "CAM") ;
  C2xRegisterCallback(1, "OnTxDENM", "DENM") ;

}

/****************************************************************/
// Callback before sending CAM
/****************************************************************/
void OnTxCAM(LONG packet)
{
  C2xSetTokenInt(packet, "geo_eh", "lpvHeading", gHeading);
  C2xSetTokenInt(packet, "geo_eh", "lpvLatitude", gLatitude);
  C2xSetTokenInt(packet, "geo_eh", "lpvLongitude", gLongitude);
  
  C2xSetSignal("CAM::cam::camParameters::highFrequencyContainer::basicVehicleContainerHighFrequency::heading::headingValue", gHeading) ;
  
  C2xSetSignal("CAM::cam::camParameters::basicContainer::referencePosition::latitude", gLatitude);
  C2xSetSignal("CAM::cam::camParameters::basicContainer::referencePosition::longitude", gLongitude);
  
  gLatitude += 100;
  gLatCounter++;
  
  if(gLatCounter % 10 == 0)
  {
    gLongitude -= 80;
    gHeading -= 3;
  }
  
  // Set values back, so that vehicles drive in a loop
  if(gLatitude >= 488251930)
  {
    gHeading = 3600;
    gLatitude = 488234070;
    gLongitude = 90943150;
    gLatCounter = 0;
  }
}

/****************************************************************/
// Callback before sending DENM
/****************************************************************/
void OnTxDENM(LONG packet)
{
  C2xSetTokenInt(packet, "geo_eh", "lpvHeading", gHeading);
  C2xSetTokenInt(packet, "geo_eh", "lpvLatitude", gLatitude);
  C2xSetTokenInt(packet, "geo_eh", "lpvLongitude", gLongitude);
}
