Skip to content

Commit

Permalink
Add event parameter for generic button
Browse files Browse the repository at this point in the history
  • Loading branch information
nguyenquyhy committed Nov 22, 2020
1 parent c2510ca commit 532a113
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 70 deletions.
13 changes: 9 additions & 4 deletions FlightStreamDeck.AddOn/PropertyInspector/GenericToggle.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,20 @@
<input class="sdpi-item-value" id="Header" value="" placeholder="YD">
</div>
<div class="sdpi-item" type="field">
<div class="sdpi-item-label">Toggle value</div>
<input class="sdpi-item-value" id="ToggleValue" value="" placeholder="YAW_DAMPER_TOGGLE" pattern="[A-Z_]">
<div class="sdpi-item-label">Toggle event</div>
<input class="sdpi-item-value" id="ToggleValue" value="" placeholder="e.g. YAW_DAMPER_TOGGLE" pattern="[A-Z_]*">
</div>
<div class="sdpi-item" type="field">
<div class="sdpi-item-label">Toggle parameter</div>
<input class="sdpi-item-value" id="ToggleValueData" value="" placeholder="" pattern="[0-9]*">
</div>
<div class="sdpi-item" type="field">
<div class="sdpi-item-label">Feedback value</div>
<input class="sdpi-item-value" id="FeedbackValue" value="" placeholder="AUTOPILOT YAW DAMPER" pattern="[A-Z0-9: ]">
<input class="sdpi-item-value" id="FeedbackValue" value="" placeholder="e.g. AUTOPILOT YAW DAMPER" pattern="[A-Z0-9: ]*">
</div>
<div class="sdpi-item" type="field">
<div class="sdpi-item-label">Display value</div>
<input class="sdpi-item-value" id="DisplayValue" value="" placeholder="Empty for toggle button" pattern="[A-Z0-9: ]">
<input class="sdpi-item-value" id="DisplayValue" value="" placeholder="Empty for toggle button" pattern="[A-Z0-9: ]*">
</div>
<div type="group" class="sdpi-item" id="messagegroup">
<div class="sdpi-item-label">Custom ON/OFF images</div>
Expand Down Expand Up @@ -52,6 +56,7 @@
function loadSettings(settings) {
if (settings['Header']) { Header.value = settings['Header'] };
if (settings['ToggleValue']) { ToggleValue.value = settings['ToggleValue'] };
if (settings['ToggleValueData']) { ToggleValueData.value = settings['ToggleValueData'] };
if (settings['FeedbackValue']) { FeedbackValue.value = settings['FeedbackValue'] };
if (settings['DisplayValue']) { DisplayValue.value = settings['DisplayValue'] };
if (settings['ImageOn']) {
Expand Down
5 changes: 1 addition & 4 deletions FlightStreamDeck.Core/Structs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1283,11 +1283,8 @@ public enum TOGGLE_EVENT
CAPTURE_SCREENSHOT,
MOUSE_LOOK_TOGGLE,
YAXIS_INVERT_TOGGLE,
AUTORUDDER_TOGGLE
}
AUTORUDDER_TOGGLE,

public enum SET_EVENT
{
NAV1_STBY_SET = 1000,
NAV2_STBY_SET,
COM_STBY_RADIO_SET,
Expand Down
2 changes: 1 addition & 1 deletion FlightStreamDeck.Logics/Actions/GenericGaugeAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ protected override Task OnWillDisappear(ActionEventArgs<AppearancePayload> args)

protected override Task OnKeyDown(ActionEventArgs<KeyPayload> args)
{
if (toggleEvent.HasValue) flightConnector.Toggle(toggleEvent.Value);
if (toggleEvent.HasValue) flightConnector.Trigger(toggleEvent.Value);
return Task.CompletedTask;
}

Expand Down
8 changes: 7 additions & 1 deletion FlightStreamDeck.Logics/Actions/GenericToggleAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public class GenericToggleSettings
{
public string Header { get; set; }
public string ToggleValue { get; set; }
public string ToggleValueData { get; set; }
public string FeedbackValue { get; set; }
public string DisplayValue { get; set; }
public string ImageOn { get; set; }
Expand All @@ -32,6 +33,7 @@ public class GenericToggleAction : StreamDeckAction<GenericToggleSettings>
private GenericToggleSettings settings = null;

private TOGGLE_EVENT? toggleEvent = null;
private uint? toggleEventData = null;
private IEnumerable<TOGGLE_VALUE> feedbackVariables = new List<TOGGLE_VALUE>();
private IExpression expression;
private TOGGLE_VALUE? displayValue = null;
Expand Down Expand Up @@ -66,6 +68,10 @@ private void InitializeSettings(GenericToggleSettings settings)
this.settings = settings;

TOGGLE_EVENT? newToggleEvent = enumConverter.GetEventEnum(settings.ToggleValue);
if (uint.TryParse(settings.ToggleValueData, out var toggleParameter))
{
toggleEventData = toggleParameter;
}
(var newFeedbackVariables, var newExpression) = evaluator.Parse(settings.FeedbackValue);
TOGGLE_VALUE? newDisplayValue = enumConverter.GetVariableEnum(settings.DisplayValue);

Expand Down Expand Up @@ -132,7 +138,7 @@ private void DeRegisterValues()

protected override Task OnKeyDown(ActionEventArgs<KeyPayload> args)
{
if (toggleEvent.HasValue) flightConnector.Toggle(toggleEvent.Value);
if (toggleEvent.HasValue) flightConnector.Trigger(toggleEvent.Value, toggleEventData ?? 0);
return Task.CompletedTask;
}

Expand Down
20 changes: 10 additions & 10 deletions FlightStreamDeck.Logics/Actions/NavComAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public class NavComAction : StreamDeckAction<NavComSettings>
private TOGGLE_VALUE? active;
private TOGGLE_VALUE? standby;
private TOGGLE_EVENT? toggle;
private SET_EVENT? set;
private TOGGLE_EVENT? set;
private string mask;

public NavComAction(ILogger<NavComAction> logger, IImageLogic imageLogic, IFlightConnector flightConnector, EnumConverter enumConverter)
Expand Down Expand Up @@ -125,12 +125,12 @@ await StreamDeck.SwitchToProfileAsync(registration.PluginUUID,
uint digit = (byte)value[i] - (uint)48;
data = data * 16 + digit;
}
flightConnector.Set(set.Value, data);
flightConnector.Trigger(set.Value, data);

if (toggle != null && swap)
{
await Task.Delay(500);
flightConnector.Toggle(toggle.Value);
flightConnector.Trigger(toggle.Value);
}
}
}
Expand Down Expand Up @@ -186,7 +186,7 @@ protected override Task OnKeyUp(ActionEventArgs<KeyPayload> args)
// Transfer
if (toggle != null)
{
flightConnector.Toggle(toggle.Value);
flightConnector.Trigger(toggle.Value);
}
}
}
Expand Down Expand Up @@ -282,35 +282,35 @@ private void SwitchTo(string type)
active = TOGGLE_VALUE.NAV_ACTIVE_FREQUENCY__1;
standby = TOGGLE_VALUE.NAV_STANDBY_FREQUENCY__1;
toggle = TOGGLE_EVENT.NAV1_RADIO_SWAP;
set = SET_EVENT.NAV1_STBY_SET;
set = TOGGLE_EVENT.NAV1_STBY_SET;
mask = "108.00";
break;
case "NAV2":
active = TOGGLE_VALUE.NAV_ACTIVE_FREQUENCY__2;
standby = TOGGLE_VALUE.NAV_STANDBY_FREQUENCY__2;
toggle = TOGGLE_EVENT.NAV2_RADIO_SWAP;
set = SET_EVENT.NAV2_STBY_SET;
set = TOGGLE_EVENT.NAV2_STBY_SET;
mask = "108.00";
break;
case "COM1":
active = TOGGLE_VALUE.COM_ACTIVE_FREQUENCY__1;
standby = TOGGLE_VALUE.COM_STANDBY_FREQUENCY__1;
toggle = TOGGLE_EVENT.COM_STBY_RADIO_SWAP;
set = SET_EVENT.COM_STBY_RADIO_SET;
set = TOGGLE_EVENT.COM_STBY_RADIO_SET;
mask = "118.00";
break;
case "COM2":
active = TOGGLE_VALUE.COM_ACTIVE_FREQUENCY__2;
standby = TOGGLE_VALUE.COM_STANDBY_FREQUENCY__2;
toggle = TOGGLE_EVENT.COM2_RADIO_SWAP;
set = SET_EVENT.COM2_STBY_RADIO_SET;
set = TOGGLE_EVENT.COM2_STBY_RADIO_SET;
mask = "118.00";
break;
case "XPDR":
active = TOGGLE_VALUE.TRANSPONDER_CODE__1;
standby = TOGGLE_VALUE.TRANSPONDER_CODE__1;
toggle = null;
set = SET_EVENT.XPNDR_SET;
set = TOGGLE_EVENT.XPNDR_SET;
mask = "1200";
break;
default:
Expand All @@ -332,7 +332,7 @@ private void SwitchTo(string type)
}
if (set != null)
{
flightConnector.RegisterSetEvent(set.Value);
flightConnector.RegisterToggleEvent(set.Value);
}
if (dependantOnAvionics != null)
{
Expand Down
4 changes: 1 addition & 3 deletions FlightStreamDeck.Logics/IFlightConnector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,9 @@ public interface IFlightConnector

void AvMasterToggle(uint state);

void Toggle(TOGGLE_EVENT toggleAction);
void Set(SET_EVENT setAction, uint data);
void Trigger(TOGGLE_EVENT setAction, uint data = 0);

void RegisterToggleEvent(TOGGLE_EVENT toggleAction);
void RegisterSetEvent(SET_EVENT action);

void RegisterSimValue(TOGGLE_VALUE simValue);
void DeRegisterSimValue(TOGGLE_VALUE simValue);
Expand Down
52 changes: 6 additions & 46 deletions FlightStreamDeck.SimConnectFSX/SimConnectFlightConnector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ public class SimConnectFlightConnector : IFlightConnector

public event EventHandler Closed;

private readonly List<SET_EVENT> setEvents = new List<SET_EVENT>();
private readonly List<TOGGLE_EVENT> genericEvents = new List<TOGGLE_EVENT>();
private readonly HashSet<TOGGLE_VALUE> genericValues = new HashSet<TOGGLE_VALUE>();

Expand Down Expand Up @@ -254,19 +253,7 @@ private void SendCommand(EVENTS sendingEvent, uint data = 0)
}
}

private void SendGenericCommand(TOGGLE_EVENT sendingEvent)
{
try
{
simconnect?.TransmitClientEvent(SimConnect.SIMCONNECT_OBJECT_ID_USER, sendingEvent, 0, GROUPID.MAX, SIMCONNECT_EVENT_FLAG.GROUPID_IS_PRIORITY);
}
catch (COMException ex) when (ex.Message == "0xC00000B0")
{
RecoverFromError(ex);
}
}

private void SendGenericCommand(SET_EVENT sendingEvent, uint dwData)
private void SendGenericCommand(TOGGLE_EVENT sendingEvent, uint dwData = 0)
{
try
{
Expand Down Expand Up @@ -710,25 +697,10 @@ public void RegisterToggleEvent(TOGGLE_EVENT toggleAction)
}

genericEvents.Add(toggleAction);
logger.LogInformation("RegisterEvent {1}", toggleAction);
logger.LogInformation("RegisterEvent {action} {simConnectAction}", toggleAction, toggleAction.ToString());
simconnect.MapClientEventToSimEvent(toggleAction, toggleAction.ToString());
}

public void RegisterSetEvent(SET_EVENT action)
{
if (simconnect == null) return;

if (setEvents.Contains(action))
{
logger.LogInformation("Already registered: {action}", action);
return;
}

setEvents.Add(action);
logger.LogInformation("RegisterEvent {action} {simConnectAction}", action, action.ToString());
simconnect.MapClientEventToSimEvent(action, action.ToString());
}

public void RegisterSimValue(TOGGLE_VALUE simValue)
{
var changed = false;
Expand Down Expand Up @@ -872,27 +844,15 @@ private void RegisterGenericEvents()

foreach (var toggleAction in genericEvents)
{
logger.LogInformation("RegisterEvent {action}", toggleAction);
logger.LogInformation("RegisterEvent {action} {simConnectAction}", toggleAction, toggleAction.ToString());
simconnect.MapClientEventToSimEvent(toggleAction, toggleAction.ToString());
}

foreach (var action in setEvents)
{
logger.LogInformation("RegisterEvent {action} {simConnectAction}", action, action.ToString());
simconnect.MapClientEventToSimEvent(action, action.ToString());
}
}

public void Toggle(TOGGLE_EVENT toggleAction)
{
logger.LogInformation("Toggle {action}", toggleAction);
SendGenericCommand(toggleAction);
}

public void Set(SET_EVENT action, uint data)
public void Trigger(TOGGLE_EVENT toggleAction, uint data = 0)
{
logger.LogInformation("Set {action} to {data}", action, data);
SendGenericCommand(action, data);
logger.LogInformation("Toggle {action} {data}", toggleAction, data);
SendGenericCommand(toggleAction, data);
}

#endregion
Expand Down
3 changes: 2 additions & 1 deletion docs/USERGUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ However, with great power comes great responsibility: you have to do a bit of se
|-----------|-------------|---------|
| Title | This is the built-in title of any Stream Deck button. We hide this by default. You should consider using the next parameter instead. | *Empty* |
| Header | This is similar to title but with a pre-defined font, size and position that looks nice on the button. | HDG |
| Toggle value | The SimConnect event that triggers when the button is tapped on.<br />You can find the supporting event ID in [FlightStreamDeckCore/Structs.cs](/FlightStreamDeck.Core/Structs.cs). Explaination of each ID can be found in [Prepar3D SDK - Event IDs](http://www.prepar3d.com/SDKv2/LearningCenter/utilities/variables/event_ids.html) or MSFS SDK docs. | KEY_AP_PANEL_HEADING_HOLD |
| Toggle event | The SimConnect event that triggers when the button is tapped on.<br />You can find the supporting event ID in [FlightStreamDeckCore/Structs.cs](/FlightStreamDeck.Core/Structs.cs). Explaination of each ID can be found in [Prepar3D SDK - Event IDs](http://www.prepar3d.com/SDKv2/LearningCenter/utilities/variables/event_ids.html) or MSFS SDK docs. | KEY_AP_PANEL_HEADING_HOLD |
| Toggle parameter | The parameter to pass along with the event | 1 |
| Feedback value | The SimConnect variable that indicates if the button is *active* or not. Active state will show a green light or a green number (if `Display value` below is set) on the button.<br />You can find the supporting variables in [FlightStreamDeckCore/Structs.cs](/FlightStreamDeck.Core/Structs.cs). Explaination for each variable can be found in [Prepar3D SDK - Simulation Variables](http://www.prepar3d.com/SDKv2/LearningCenter/utilities/variables/simulation_variables.html) or MSFS SDK docs.<br />You can also use some comparison operators such as "==", "!=", ">", "<", ">=", "<=" between a variable and a value or between 2 variables. | AUTOPILOT HEADING LOCK<br />FLAPS HANDLE INDEX==2 |
| Display value | The SimConnect variable (any numeric unit) to display as a number below the header.<br />You can find the supporting variables in [FlightStreamDeckCore/Structs.cs](/FlightStreamDeck.Core/Structs.cs). Explaination for each variable can be found in [Prepar3D SDK - Simulation Variables](http://www.prepar3d.com/SDKv2/LearningCenter/utilities/variables/simulation_variables.html) or MSFS SDK docs. | AUTOPILOT HEADING LOCK DIR |

Expand Down

0 comments on commit 532a113

Please sign in to comment.