#include "gauges.h"
#include "SimConnect.h"
#include <tchar.h>
#include <stdio.h>
#include <strsafe.h>
#include "IMPGauge.h"
CALLBACK MyDispatchProcDLL;
HRESULT hr = NULL;
HANDLE hSimConnect = NULL;
int Eng1_ThrPos = 0;
int Eng2_ThrPos = 0;
int Eng1_ThrMod = 0;
int Eng2_ThrMod = 0;
ID Eng1_ThrPos_ID;
ID Eng2_ThrPos_ID;
static enum GROUP_ID {
GROUP_Thr,
};
static enum EVENT_ID {
EVENT_Thr1,
EVENT_Thr2,
};
/////////////////////////////////////////////////////////////////////////////
// IMPGauge Declaration
/////////////////////////////////////////////////////////////////////////////
#define GAUGE_NAME "IMPGauge"
#define GAUGEHDR_VAR_NAME gaugehdr_IMPGauge
#define GAUGE_H 100
#define GAUGE_W 100
char imp_gauge_name[] = GAUGE_NAME;
extern PELEMENT_HEADER gaugeimp_element_list;
GAUGE_CALLBACK cxmlinterface;
GAUGE_HEADER_FS700(GAUGE_W, imp_gauge_name, &gaugeimp_element_list, NULL, cxmlinterface, 0, 0, 0);
MAKE_STATIC(gaugeimp_image,BMP_BACKGROUND,NULL,NULL ,IMAGE_USE_ERASE | IMAGE_USE_TRANSPARENCY | BIT7 | IMAGE_USE_LUMINOUS,0,0,0);
PELEMENT_HEADER gaugeimp_element_list = &gaugeimp_image.header;
#undef GAUGE_NAME
#undef GAUGEHDR_VAR_NAME
#undef GAUGE_H
#undef GAUGE_W
/////////////////////////////////////////////////////////////////////////////
// Gauge table entries
/////////////////////////////////////////////////////////////////////////////
void FSAPI module_init(void);
void FSAPI module_deinit(void);
GAUGESIMPORT ImportTable = {
{ 0x0000000F, (PPANELS)NULL },
{ 0x00000000, NULL }
};
GAUGESLINKAGE Linkage =
{
0x00000013,
module_init,
module_deinit,
0,
0,
FS9LINK_VERSION,
{
&gaugehdr_IMPGauge,
0
}
};
/////////////////////////////////////////////////////////////////////////////
// Callback collecting joystick inputs
/////////////////////////////////////////////////////////////////////////////
void CALLBACK MyDispatchProcDLL(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext)
{
switch(pData->dwID)
{
case SIMCONNECT_RECV_ID_EVENT:
{
SIMCONNECT_RECV_EVENT *evt = (SIMCONNECT_RECV_EVENT*)pData;
switch(evt->uEventID)
{
case EVENT_Thr1:
Eng1_ThrPos = (int)evt->dwData;
Eng1_ThrMod = 1
case EVENT_Thr2:
Eng2_ThrPos = (int)evt->dwData;
Eng2_ThrMod = 1
default:
break;
}
break;
}
case SIMCONNECT_RECV_ID_EXCEPTION:
{
SIMCONNECT_RECV_EXCEPTION* except = (SIMCONNECT_RECV_EXCEPTION*) pData;
switch( except->dwException )
{
case 0:
break;
default:
break;
}
}
default:
break;
}
}
/////////////////////////////////////////////////////////////////////////////
// Gauge DLL Implementation and group definition
/////////////////////////////////////////////////////////////////////////////
void FSAPI module_init(void)
{
hr = SimConnect_Open(&hSimConnect, ("IMPGauge"), NULL, 0, 0, 0);
if( hr == S_OK )
{
printf("\n IMP Gauge Connected...");
hr = SimConnect_MapClientEventToSimEvent(hSimConnect, EVENT_Thr1, "AXIS_THROTTLE1_SET");
hr = SimConnect_AddClientEventToNotificationGroup(hSimConnect, GROUP_Thr, EVENT_Thr1, true);
hr = SimConnect_MapClientEventToSimEvent(hSimConnect, EVENT_Thr2, "AXIS_THROTTLE2_SET");
hr = SimConnect_AddClientEventToNotificationGroup(hSimConnect, GROUP_Thr, EVENT_Thr2, true);
hr = SimConnect_SetNotificationGroupPriority(hSimConnect, GROUP_Thr, SIMCONNECT_GROUP_PRIORITY_HIGHEST_MASKABLE);
hr = SimConnect_CallDispatch(hSimConnect, MyDispatchProcDLL, NULL);
}
}
void FSAPI module_deinit(void)
{
hr = SimConnect_Close(hSimConnect);
};
/////////////////////////////////////////////////////////////////////////////
// DLL C XML Interface
/////////////////////////////////////////////////////////////////////////////
void FSAPI cxmlinterface(PGAUGEHDR pgauge, SINT32 service_id, UINT32 extra_data )
{
switch(service_id)
{
case PANEL_SERVICE_PRE_INITIALIZE:
register_named_variable("Eng1_ThrLeverPos");
register_named_variable("Eng2_ThrLeverPos");
break;
case PANEL_SERVICE_PRE_UPDATE:
Eng1_ThrPos_ID = check_named_variable ("Eng1_ThrLeverPos");
if (Eng1_ThrMod == 1)
{
set_named_variable_value(Eng1_ThrPos_ID,(FLOAT64)Eng1_ThrPos );
Eng1_ThrMod = 0;
}
Eng2_ThrPos_ID = check_named_variable("Eng2_ThrLeverPos");
if (Eng2_ThrMod == 1)
{
set_named_variable_value(Eng2_ThrPos_ID,(FLOAT64)Eng2_ThrPos );
Eng2_ThrMod = 0;
}
break;
default:
break;
}
}