156 lines
4.0 KiB
C
156 lines
4.0 KiB
C
#pragma once
|
|
|
|
#ifndef __INTELLISENSE__
|
|
# define MODULE_EXPORT __attribute__( ( visibility( "default" ) ) )
|
|
# define MODULE_WASM_MODNAME(mod) __attribute__((import_module(mod)))
|
|
#else
|
|
# define MODULE_EXPORT
|
|
# define MODULE_WASM_MODNAME(mod)
|
|
# define __attribute__(x)
|
|
# define __restrict__
|
|
#endif
|
|
|
|
#include <MSFS/MSFS.h>
|
|
#include <MSFS/MSFS_CommBus.h>
|
|
#include <MSFS/MSFS_Core.h>
|
|
#include <MSFS/MSFS_Render.h>
|
|
#include <MSFS/Legacy/gauges.h>
|
|
|
|
#include <rapidjson/document.h>
|
|
#include <rapidjson/writer.h>
|
|
|
|
#include <SimConnect.h>
|
|
|
|
#define MODULE_NAME "[KHOFMANN TFDi MD-11 Load Manager]"
|
|
|
|
#define COMM_BUS_LIVE_DATA_EVENT "khofmann_tfdi_md-11_load_manager_live_data"
|
|
#define COMM_BUS_UPDATE_TARGET_EVENT "khofmann_tfdi_md-11_load_manager_update_target"
|
|
|
|
//TODO: Make User adjustable
|
|
#define PAX_WEIGHT(IS_IMPERIAL) ((IS_IMPERIAL) ? (190) : (86))
|
|
#define BAG_WEIGHT(IS_IMPERIAL) ((IS_IMPERIAL) ? (23) : (50))
|
|
|
|
#define PILOT_WEIGHT(IS_IMPERIAL) ((IS_IMPERIAL) ? (190) : (86))
|
|
#define FRONT_CREW_WEIGHT(IS_IMPERIAL) ((IS_IMPERIAL) ? (380) : (172))
|
|
#define REAR_CREW_WEIGHT(IS_IMPERIAL) ((IS_IMPERIAL) ? (950) : (430))
|
|
#define AUX_WEIGHT(IS_IMPERIAL) ((IS_IMPERIAL) ? (200) : (91))
|
|
|
|
// Conversions
|
|
#define TO_POUNDS(IS_IMPERIAL, VALUE) ((IS_IMPERIAL) ? (VALUE) : (VALUE) * 2.20462262185)
|
|
#define FROM_POUNDS(IS_IMPERIAL, VALUE) ((IS_IMPERIAL) ? (VALUE) : (VALUE) * (1.0 / 2.20462262185))
|
|
|
|
// Data
|
|
typedef struct {
|
|
double isCargo;
|
|
double isER;
|
|
double isImperial;
|
|
} UserData_t;
|
|
|
|
typedef struct {
|
|
double boardingState; // See manual, 5 => active
|
|
double deboardingState; // See manual, 5 => active
|
|
double passengersBoarded; // Num pax
|
|
double passengersDeboarded; // Num pax
|
|
double cargoBoarded; // In percent
|
|
double cargoDeboarded; // In percent
|
|
} GSXData_t;
|
|
|
|
typedef struct {
|
|
// SimConnect mapped
|
|
double pilot;
|
|
double firstOfficer;
|
|
double engineer;
|
|
double cabinCrewFront;
|
|
double business1Left;
|
|
double business1Center;
|
|
double business1Right;
|
|
double business2Left;
|
|
double business2Center;
|
|
double business2Right;
|
|
double economy1Left;
|
|
double economy1Center;
|
|
double economy1Right;
|
|
double economy2Left;
|
|
double economy2Center;
|
|
double economy2Right;
|
|
double cabinCrewRear;
|
|
double forwardCargo;
|
|
double rearCargo;
|
|
double leftAux;
|
|
double rightAux;
|
|
|
|
// Additional properties
|
|
double empty;
|
|
|
|
struct paxCount {
|
|
unsigned char business1;
|
|
unsigned char business2;
|
|
unsigned char economy1;
|
|
unsigned char economy2;
|
|
unsigned short total;
|
|
} paxCount;
|
|
} paxPayloadData_t;
|
|
|
|
typedef struct {
|
|
// SimConnect mapped
|
|
double pilot;
|
|
double firstOfficer;
|
|
double engineer;
|
|
double upper1Left;
|
|
double upper1Right;
|
|
double upper2Left;
|
|
double upper2Right;
|
|
double upper3Left;
|
|
double upper3Right;
|
|
double upper4Left;
|
|
double upper4Right;
|
|
double lowerForward;
|
|
double lowerRear;
|
|
double leftAux;
|
|
double rightAux;
|
|
|
|
// Additional properties
|
|
double empty;
|
|
} fPayloadData_t;
|
|
|
|
typedef struct {
|
|
// SimConnect mapped
|
|
double poundsPerGallon;
|
|
double main1;
|
|
double main3;
|
|
double main2;
|
|
double upperAux;
|
|
double lowerAux;
|
|
double main1Tip;
|
|
double main3Tip;
|
|
double tail;
|
|
double forwardAux1;
|
|
double forwardAux2;
|
|
} FuelData_t;
|
|
|
|
// SimConnect ENUMs
|
|
enum DATA_DEFINITIONS {
|
|
DATA_DEFINITION_EMPTY_WEIGHT,
|
|
DATA_DEFINITION_PAYLOAD_PAX,
|
|
DATA_DEFINITION_PAYLOAD_F,
|
|
DATA_DEFINITION_FUEL,
|
|
DATA_DEFINITION_GSX,
|
|
DATA_DEFINITION_USER_DATA,
|
|
};
|
|
|
|
enum DATA_REQUESTS {
|
|
DATA_REQUEST_EMPTY_WEIGHT,
|
|
DATA_REQUEST_PAYLOAD_PAX,
|
|
DATA_REQUEST_PAYLOAD_F,
|
|
DATA_REQUEST_FUEL,
|
|
DATA_REQUEST_GSX,
|
|
DATA_REQUEST_USER_DATA,
|
|
};
|
|
|
|
static void commBusUpdateTargetCallback(const char* args, unsigned int size, void* ctx);
|
|
static int parseData(const char* buf);
|
|
static void sendLiveData();
|
|
|
|
void CALLBACK MyDispatchProc(SIMCONNECT_RECV* pData, DWORD cbData, void* pContext);
|
|
void log(FILE* file, const char* format, void* optionalElement = NULL);
|