Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <tchar.h>
- #include <stdio.h>
- #include <strsafe.h>
- #include "SimConnect.h"
- HANDLE hSimConnect = NULL;
- bool quit = false;
- bool flightLoaded = false;
- static enum EVENT_ID {
- EVENT_FLIGHT_LOAD,
- EVENT_RECUR_1SEC,
- EVENT_RECUR_FRAME,
- EVENT_SIM_START,
- EVENT_SIM
- };
- static enum DEFINE_ID {
- POSITION_PLANE
- };
- static enum REQUEST_ID {
- REQUEST_PLANE_POSITION
- };
- struct PlanePosition {
- double latitude;
- double longitude;
- double altitude;
- double heading;
- bool onGround;
- };
- void CALLBACK MyDispatchProc(SIMCONNECT_RECV* pData, DWORD cbData, void* pContext)
- {
- switch (pData->dwID) {
- case SIMCONNECT_RECV_ID_QUIT: {
- quit = true;
- break;
- }
- case SIMCONNECT_RECV_ID_EVENT: {
- SIMCONNECT_RECV_EVENT* evt = (SIMCONNECT_RECV_EVENT*)pData;
- if (evt->uEventID == EVENT_SIM_START) {
- printf("\nSim started");
- flightLoaded = true;
- }
- if (evt->uEventID == EVENT_SIM) {
- printf("\nSim started");
- flightLoaded = true;
- }
- break;
- }
- case SIMCONNECT_RECV_ID_EVENT_FILENAME: {
- SIMCONNECT_RECV_EVENT_FILENAME* evt = (SIMCONNECT_RECV_EVENT_FILENAME*)pData;
- if (evt->uEventID == EVENT_FLIGHT_LOAD) {
- printf("\nFlight loaded");
- flightLoaded = true;
- }
- break;
- }
- case SIMCONNECT_RECV_ID_SIMOBJECT_DATA: {
- SIMCONNECT_RECV_SIMOBJECT_DATA* pObjData = (SIMCONNECT_RECV_SIMOBJECT_DATA*)pData;
- switch (pObjData->dwRequestID) {
- case REQUEST_PLANE_POSITION:
- PlanePosition* planePos = (PlanePosition*)&pObjData->dwData;
- printf("\nPlane Position: Latitude: %f, Longitude: %f, Altitude: %f, Heading: %f, On Ground: %d ",
- planePos->latitude, planePos->longitude, planePos->altitude, planePos->heading, planePos->onGround);
- break;
- };
- break;
- }
- }
- };
- void addDataDefinition()
- {
- SimConnect_AddToDataDefinition(hSimConnect, POSITION_PLANE, "Plane Latitude", "degrees");
- SimConnect_AddToDataDefinition(hSimConnect, POSITION_PLANE, "Plane Longitude", "degrees");
- SimConnect_AddToDataDefinition(hSimConnect, POSITION_PLANE, "Plane Altitude", "feet");
- SimConnect_AddToDataDefinition(hSimConnect, POSITION_PLANE, "PLANE HEADING DEGREES TRUE", "degrees");
- SimConnect_AddToDataDefinition(hSimConnect, POSITION_PLANE, "SIM ON GROUND", "bool");
- SimConnect_RequestDataOnSimObject(hSimConnect, REQUEST_PLANE_POSITION, POSITION_PLANE, SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD_SECOND);
- SimConnect_CallDispatch(hSimConnect, MyDispatchProc, NULL);
- }
- void testOpenClose()
- {
- HRESULT hr;
- hr = SimConnect_Open(&hSimConnect, "GSX Backend", NULL, 0, 0, 0);
- if (SUCCEEDED(hr))
- {
- printf("\nConnected to Flight Simulator!");
- while (!quit)
- {
- HRESULT hrConnect = SimConnect_CallDispatch(hSimConnect, MyDispatchProc, NULL);
- Sleep(1);
- if (FAILED(hrConnect)) {
- quit = true;
- break;
- }
- SimConnect_SubscribeToSystemEvent(hSimConnect, EVENT_FLIGHT_LOAD, "FlightLoaded");
- ////SimConnect_SubscribeToSystemEvent(hSimConnect, EVENT_SIM_START, "SimStart");
- //SimConnect_SubscribeToSystemEvent(hSimConnect, EVENT_SIM, "Sim");
- if (flightLoaded) {
- addDataDefinition();
- }
- }
- SimConnect_Close(hSimConnect);
- printf("\nDisconnected from Flight Simulator!");
- }
- else {
- printf("\nFailed to connect to Flight Simulator!");
- }
- }
- int __cdecl _tmain(int argc, _TCHAR* argv[])
- {
- testOpenClose();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment