// ********************************************************************
// String variables
char SC_AIRCRAFT_TITLE[128] = "";
char SC_AIRCRAFT_REG[10] = "";
// ********************************************************************
// -----------------
// Receiving structs
// -----------------
struct STRING_DATA
{
char title[128];
char reg[10];
};
STRING_DATA pStrings;
struct AIRCRAFT_DATA
{
bool acftOnGnd;
};
AIRCRAFT_DATA pAD;
struct FUEL_DATA
{
double leftAuxTank;
double rightAuxTank;
double centreTank;
double centreTank2;
double centreTank3;
double externalTank1;
double externalTank2;
double rightTipTank;
double leftTipTank;
double leftMainTank;
double rightMainTank;
};
FUEL_DATA pFLD = {0}; // Levels
FUEL_DATA pFLC = {0}; // Capacity
// ********************************************************************
enum DATA
{
// ----------------------------
// Data requests
// ----------------------------
REQUEST_NONE = 0,
REQUEST_AIRCRAFT_DATA,
REQUEST_FUEL_LEVEL,
REQUEST_FUEL_CAPACITY,
REQUEST_STRINGS,
// -----------------------------
// Defines for read
// ----------------------------
DEFINE_AIRCRAFT_DATA,
DEFINE_TANK_FUEL_LEVELS,
DEFINE_TANK_FUEL_CAPACITY,
DEFINE_STRINGS
};
// ********************************************************************
// --------------------
// AddToDataDefinitions
// --------------------
// String data
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_STRINGS, "Title", "", SIMCONNECT_DATATYPE_STRING128);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_STRINGS, "ATC ID", "", SIMCONNECT_DATATYPE_STRING32);
// On ground
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_AIRCRAFT_DATA, "Sim On Ground", "bool", SIMCONNECT_DATATYPE_INT32);
// Assign all tanks *capacity* to one definition for read
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_CAPACITY, "FUEL TANK LEFT AUX CAPACITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_CAPACITY, "FUEL TANK RIGHT AUX CAPACITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_CAPACITY, "FUEL TANK CENTER CAPACITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_CAPACITY, "FUEL TANK CENTER2 CAPACITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_CAPACITY, "FUEL TANK CENTER3 CAPACITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_CAPACITY, "FUEL TANK EXTERNAL1 CAPACITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_CAPACITY, "FUEL TANK EXTERNAL2 CAPACITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_CAPACITY, "FUEL TANK RIGHT TIP CAPACITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_CAPACITY, "FUEL TANK LEFT TIP CAPACITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_CAPACITY, "FUEL TANK LEFT MAIN CAPACITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_CAPACITY, "FUEL TANK RIGHT MAIN CAPACITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
// Assign all tanks **levels** to one definition for read
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_LEVELS, "FUEL TANK LEFT AUX QUANTITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_LEVELS, "FUEL TANK RIGHT AUX QUANTITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_LEVELS, "FUEL TANK CENTER QUANTITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_LEVELS, "FUEL TANK CENTER2 QUANTITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_LEVELS, "FUEL TANK CENTER3 QUANTITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_LEVELS, "FUEL TANK EXTERNAL1 QUANTITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_LEVELS, "FUEL TANK EXTERNAL2 QUANTITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_LEVELS, "FUEL TANK RIGHT TIP QUANTITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_LEVELS, "FUEL TANK LEFT TIP QUANTITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_LEVELS, "FUEL TANK LEFT MAIN QUANTITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINE_TANK_FUEL_LEVELS, "FUEL TANK RIGHT MAIN QUANTITY", "GALLONS", SIMCONNECT_DATATYPE_FLOAT64);
// --------------------------------------------------------------------------------------------------------------------------------------------------
// Register requests with SimConnect
// --------------------------------------------------------------------------------------------------------------------------------------------------
hr = SimConnect_RequestDataOnSimObject(hSimConnect, REQUEST_AIRCRAFT_DATA, DEFINE_AIRCRAFT_DATA, SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD_SECOND, NULL, NULL, NULL, NULL);
hr = SimConnect_RequestDataOnSimObject(hSimConnect, REQUEST_STRINGS, DEFINE_STRINGS, SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD_SECOND, NULL, NULL, NULL, NULL);
hr = SimConnect_RequestDataOnSimObject(hSimConnect, REQUEST_FUEL_CAPACITY, DEFINE_TANK_FUEL_CAPACITY, SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD_ONCE, NULL, NULL, NULL, NULL);
hr = SimConnect_RequestDataOnSimObject(hSimConnect, REQUEST_FUEL_LEVEL, DEFINE_TANK_FUEL_LEVELS, SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD_SECOND, NULL, NULL, NULL, NULL);
// ********************************************************************
// -------------------------
// On receive SimObjectData
// -------------------------
//-----------------------------------------------------
// String data
//-----------------------------------------------------
if (pObjData->dwRequestID == REQUEST_STRINGS)
{
string_data* pStringData = (string_data*)&pObjData->dwData;
pStrings = *pStringData;
}
// The aircraft title and registration is now available in pStringData e.g.
//
// memset(SC_AIRCRAFT_TITLE, 0, 128);
// strncpy(SC_AIRCRAFT_TITLE, pStrings.title, strlen(pStrings.title) + 1);
//
// memset(SC_AIRCRAFT_REG, 0, 10);
// strncpy(SC_AIRCRAFT_REG, pStrings.reg, strlen(pStrings.reg) + 1);
//
// Note the use of strlen() and not sizeof(). sizeof() barfs on any spaces
//-----------------------------------------------------
// Aircraft data
//-----------------------------------------------------
if (pObjData->dwRequestID == REQUEST_AIRCRAFT_DATA)
{
aircraft_data* pAircraftData = (aircraft_data*)&pObjData->dwData;
pAD = *pAircraftData;
// aircraft on ground is now available in pAD.acftOnGnd as a boolean
}
//-----------------------------------------------------
// Fuel
//-----------------------------------------------------
// Fuel capacity
if (pObjData->dwDefineID == DEFINE_TANK_FUEL_CAPACITY)
{
FUEL_CAPACITY_DATA* pFuelCapacity = (FUEL_CAPACITY_DATA*)&pObjData->dwData;
pFLC = *pFuelCapacity;
}
// Fuel levels
if (pObjData->dwDefineID == DEFINE_TANK_FUEL_LEVELS)
{
FUEL_LEVEL_DATA *pFuelLevelData = (FUEL_LEVEL_DATA*)&pObjData->dwData;
pFLD = *pFuelLevelData;
}
// Fuel levels and fuel capacity are now available in the pFLD and pFLC structs.