diff --git a/src/xlinuxtrack9.c b/src/xlinuxtrack9.c index 08703091..a4e985d1 100644 --- a/src/xlinuxtrack9.c +++ b/src/xlinuxtrack9.c @@ -75,6 +75,8 @@ static bool active_flag = false; static bool pv_present = false; static XPLMCommandRef run_cmd; +static XPLMCommandRef start_cmd; +static XPLMCommandRef stop_cmd; static XPLMCommandRef pause_cmd; static XPLMCommandRef recenter_cmd; static bool initialized = false; @@ -85,7 +87,7 @@ static int cmd_cbk(XPLMCommandRef inCommand, XPLMCommandPhase inPhase, void * inRefcon); -enum {START, PAUSE, RECENTER}; +enum {START, STOP, TOGGLE, PAUSE, RECENTER}; static float xlinuxtrackCallback(float inElapsedSinceLastCall, float inElapsedTimeSinceLastFlightLoop, @@ -148,13 +150,25 @@ PLUGIN_API int XPluginStart(char *outName, //fprintf(stderr, "XPlane version: %d\n", xplane_ver); run_cmd = XPLMCreateCommand("linuxtrack/ltr_run","Start/stop tracking"); + start_cmd = XPLMCreateCommand("linuxtrack/ltr_start","Start tracking"); + stop_cmd = XPLMCreateCommand("linuxtrack/ltr_stop","Stop tracking"); pause_cmd = XPLMCreateCommand("linuxtrack/ltr_pause","Pause tracking"); recenter_cmd = XPLMCreateCommand("linuxtrack/ltr_recenter","Recenter tracking"); XPLMRegisterCommandHandler( run_cmd, cmd_cbk, true, + (void *)TOGGLE); + XPLMRegisterCommandHandler( + start_cmd, + cmd_cbk, + true, (void *)START); + XPLMRegisterCommandHandler( + stop_cmd, + cmd_cbk, + true, + (void *)STOP); XPLMRegisterCommandHandler( pause_cmd, cmd_cbk, @@ -303,7 +317,17 @@ PLUGIN_API void XPluginStop(void) run_cmd, cmd_cbk, true, + (void *)TOGGLE); + XPLMUnregisterCommandHandler( + start_cmd, + cmd_cbk, + true, (void *)START); + XPLMUnregisterCommandHandler( + stop_cmd, + cmd_cbk, + true, + (void *)STOP); XPLMUnregisterCommandHandler( pause_cmd, cmd_cbk, @@ -433,6 +457,14 @@ static int cmd_cbk(XPLMCommandRef inCommand, }else{ deactivate(); } + }else if(inCommand == start_cmd){ + if(active_flag==false){ + activate(); + } + }else if(inCommand == stop_cmd){ + if(active_flag==true){ + deactivate(); + } }else if(inCommand == pause_cmd){ freeze = (freeze == false)? true : false; }else if(inCommand == recenter_cmd){