#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 /******************************** Constants ********************************/ // 190lbs default #define PILOT_WEIGHT(IS_IMPERIAL) ((IS_IMPERIAL) ? (190.0) : (86.0)) // 200lbs per tank (one LD3) #define AUX_WEIGHT(IS_IMPERIAL) ((IS_IMPERIAL) ? (200.0) : (91.0)) // PMC pallet due to 104in door #define MAX_FRONT_CARGO(IS_IMPERIAL) ((IS_IMPERIAL) ? (6.0 * 15000.0) : (6.0 * 6804.0)) // LD3s due to 70in door, ER option takes up two slots #define MAX_REAR_CARGO(IS_IMPERIAL, IS_ER) ((IS_IMPERIAL) ? ((IS_ER ? 12.0 : 14.0) * 3500.0) : ((IS_ER ? 12.0 : 14.0) * 1588.0)) // Max TOW #define MAX_TOW(IS_IMPERIAL) ((IS_IMPERIAL) ? (625500) : (283722)) #define MAX_TOW_ER(IS_IMPERIAL) ((IS_IMPERIAL) ? (630500) : (285990)) // Arms Shared #define ARM_EMPTY -120.0 #define ARM_PILOT 984.0 #define ARM_FIRST_OFFICER 984.0 #define ARM_ENGINEER 960.0 #define ARM_FORWARD_CARGO 360.0 #define ARM_REAR_CARGO -360.0 #define ARM_LEFT_AUX 60.0 #define ARM_RIGHT_AUX 60.0 // MAC #define ROOT_CHORD 34.68 #define WING_SPAN 170.5 #define WING_AREA 3648.0 #define QUARTER_MAC -165.0 // aero_center #define TIP_CHORD ((2.0 * WING_AREA) / WING_SPAN - ROOT_CHORD) #define TAPER_RATIO (TIP_CHORD / ROOT_CHORD) #define MAC ((2.0 / 3.0) * ROOT_CHORD * ((1.0 + TAPER_RATIO + (TAPER_RATIO * TAPER_RATIO)) / (1.0 + TAPER_RATIO)) * 12.0) #define LEMAC (QUARTER_MAC + (1.0 / 4.0) * MAC) // CG Limits #define MIN_CG 12.0 #define MAX_CG 34.0 #define CG_TOLERANCE 0.05 // GSX States #define GSX_SERVICE_IDLE 1 #define GSX_SERVICE_CALLED 4 #define GSX_SERVICE_ACTIVE 5 #define GSX_SERVICE_FINISHED 6 /********************************* Macros **********************************/ // 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)) // MAC #define TO_PERCENT_MAC(POS) ((((POS)-LEMAC) / MAC) * -100.0) /********************************** ENUMS **********************************/ enum DATA_DEFINITIONS { DATA_DEFINITION_EMPTY_WEIGHT, DATA_DEFINITION_PAYLOAD_PAX, DATA_DEFINITION_PAYLOAD_F, DATA_DEFINITION_FUEL, DATA_DEFINITION_FUEL_SET, 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_FUEL_SET, DATA_REQUEST_GSX, DATA_REQUEST_USER_DATA, }; enum LOADING_STATES { LOADING_STATE_IDLE, LOADING_STATE_BOARDING, LOADING_STATE_BOARDED, LOADING_STATE_DEBOARDING, LOADING_STATE_DEBOARDED, }; enum FUELING_STATES { FUELING_STATE_IDLE, FUELING_STATE_CALLED, FUELING_STATE_FUELING, FUELING_STATE_FUELED }; enum CALL_MODES { CALL_MODE_SB_SET, CALL_MODE_ZFW_SET, CALL_MODE_STATION_SET, CALL_MODE_LOAD_SET, CALL_MODE_UNLOAD_SET, CALL_MODE_OPTIONS_SET, CALL_MODE_GSX_RESET, }; /***************************** Data structures *****************************/ typedef struct { double isCargo; double isER; double isImperial; } UserData_t; typedef struct { // SimConnect mapped double couatlStarted; // boolean double boardingState; // See manual, 5 => active double deboardingState; // See manual, 5 => active double refuelingState; // See manual, 5 => active double passengersBoarded; // Num pax double passengersDeboarded; // Num pax double cargoBoarded; // In percent double cargoDeboarded; // In percent double fuelConnected; // boolean // Additional properties enum LOADING_STATES loadingState; enum FUELING_STATES fuelingState; } GSXData_t; typedef struct { bool GSXSync; double paxWeightKG; double bagWeightKG; double paxWeightLBS; double bagWeightLBS; } UserOptions_t;