From 316d545bda853569792c2e56b337470a4661c576 Mon Sep 17 00:00:00 2001 From: Jason DeVito Date: Fri, 8 Sep 2023 15:20:29 -0500 Subject: [PATCH] refactor(wip): updates keypad initializeFeedbacks method --- .../Touchpanels/Mpc3Touchpanel.cs | 402 +++++------------- 1 file changed, 118 insertions(+), 284 deletions(-) diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Touchpanels/Mpc3Touchpanel.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Touchpanels/Mpc3Touchpanel.cs index 2cab16e6..f4611a70 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Touchpanels/Mpc3Touchpanel.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Touchpanels/Mpc3Touchpanel.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.Globalization; -using System.Linq; using Crestron.SimplSharpPro; using Newtonsoft.Json; using PepperDash.Core; @@ -29,191 +28,47 @@ namespace PepperDash.Essentials.Core.Touchpanels _touchpanel.ButtonStateChange += _touchpanel_ButtonStateChange; _buttons = buttons; - - AddPostActivationAction(() => - { - SetupButtonsForEvents(); - SetupButtonFeedbacks(); - - // check button config - //foreach (var button in _buttons) - //{ - // var buttonKey = button.Key.ToLower(); - // var buttonConfig = button.Value; - // if (buttonConfig == null) - // { - // Debug.Console(1, this, "Unable to get button config for {0}-{1}", Key, button.Key); - // continue; - // } - - // int buttonNumber; - // if (TryParseInt(buttonKey, out buttonNumber)) - // Debug.Console(0, this, "buttonFeedback: tryIntParse successful, buttonNumber = {0}", buttonNumber); - // else - // Debug.Console(0, this, "buttonFeedback: tryIntParse failed, buttonKey = {0}", buttonKey); - - - // // button event type configuration enables/disables keypad button - // var buttonEventTypes = buttonConfig.EventTypes; - // switch (buttonKey) - // { - // case ("power"): - // { - // if (buttonEventTypes == null) - // _touchpanel.DisablePowerButton(); - // else - // _touchpanel.EnablePowerButton(); - - // break; - // } - // case ("volumeup"): - // { - // if (buttonEventTypes == null) - // _touchpanel.DisableVolumeUpButton(); - - // break; - // } - // case ("volumedown"): - // { - // if(buttonEventTypes == null) - // _touchpanel.DisableVolumeDownButton(); - - // break; - // } - // case ("volumefeedback"): - // { - - // break; - // } - // case ("mute"): - // { - // if(buttonEventTypes == null) - // _touchpanel.DisableMuteButton(); - // else - // _touchpanel.EnableMuteButton(); - - // break; - // } - // default: - // { - // if(buttonNumber == 0) - // break; - - // if (buttonEventTypes == null) - // _touchpanel.DisableNumericalButton((uint)buttonNumber); - // else - // _touchpanel.EnableNumericalButton((uint)buttonNumber); - - // break; - // } - // } - - - // // Link up the button feedbacks to the specified device feedback - // var buttonFeedback = buttonConfig.Feedback; - // if (buttonFeedback == null) - // { - // Debug.Console(1, this, "Button '{0}' feedback not configured, feedback will not be implemented", buttonKey); - // continue; - // } - - // var device = DeviceManager.GetDeviceForKey(buttonFeedback.DeviceKey) as Device; - // if (device == null) - // { - // Debug.Console(1, this, "Unable to get device with key {0}, feedback will not be implemented", - // buttonFeedback.DeviceKey); - // continue; - // } - - // var deviceFeedback = device.GetFeedbackProperty(buttonFeedback.FeedbackName); - // Debug.Console(0, this, "deviceFeedback.GetType().Name: {0}", deviceFeedback.GetType().Name); - // //switch (feedback.GetType().Name.ToLower()) - // //{ - // // case("boolfeedback"): - // // { - - // // break; - // // } - // // case("intfeedback"): - // // { - - // // break; - // // } - // //} - - // var boolFeedback = deviceFeedback as BoolFeedback; - // var intFeedback = deviceFeedback as IntFeedback; - - // switch (buttonKey) - // { - // case ("power"): - // { - // if (boolFeedback != null) boolFeedback.LinkCrestronFeedback(_touchpanel.FeedbackPower); - // break; - // } - // case ("volumeup"): - // { - // break; - // } - // case ("volumedown"): - // { - // break; - // } - // case ("volumefeedback"): - // { - // if (intFeedback != null) - // { - // var volumeFeedback = intFeedback; - // volumeFeedback.LinkInputSig(_touchpanel.VolumeBargraph); - // } - // break; - // } - // case ("mute"): - // { - // if (boolFeedback != null) boolFeedback.LinkCrestronFeedback(_touchpanel.FeedbackMute); - // break; - // } - // default: - // { - // if (boolFeedback != null) boolFeedback.LinkCrestronFeedback(_touchpanel.Feedbacks[(uint)buttonNumber]); - // break; - // } - // } - //} - }); - } - - public void SetupButtonsForEvents() - { if (_buttons == null) { - Debug.Console(1, this, "Button properties are null, failed to setup buttons for events. Verify button configuraiton."); + Debug.Console(1, this, + "Button properties are null, failed to setup MPC3 Touch Controller, check configuration"); return; } - // check button config - foreach (var button in _buttons) + AddPostActivationAction(() => { - var buttonKey = button.Key.ToLower(); - var buttonConfig = button.Value; - if (buttonConfig == null) + foreach (var button in _buttons) { - Debug.Console(1, this, "Unable to get button config for {0}-{1}", Key, button.Key); - continue; + var buttonKey = button.Key.ToLower(); + var buttonConfig = button.Value; + + InitializeButton(buttonKey, buttonConfig); + InitializeButtonFeedback(buttonKey, buttonConfig); } + }); + } - int buttonNumber; - if (TryParseInt(buttonKey, out buttonNumber)) - Debug.Console(0, this, "buttonFeedback: tryIntParse successful, buttonNumber = {0}", buttonNumber); - else - Debug.Console(0, this, "buttonFeedback: tryIntParse failed, buttonKey = {0}", buttonKey); + /// + /// Enables/disables buttons based on event type configuration + /// + /// + /// + public void InitializeButton(string key, KeypadButton config) + { + if (config == null) + { + Debug.Console(1, this, "Button '{0}' config is null, unable to initialize", key); + return; + } + int buttonNumber; + TryParseInt(key, out buttonNumber); - // button event type configuration enables/disables keypad button - var buttonEventTypes = buttonConfig.EventTypes; - switch (buttonKey) - { - case ("power"): + var buttonEventTypes = config.EventTypes; + + switch (key) + { + case ("power"): { if (buttonEventTypes == null) _touchpanel.DisablePowerButton(); @@ -222,26 +77,26 @@ namespace PepperDash.Essentials.Core.Touchpanels break; } - case ("volumeup"): + case ("volumeup"): { if (buttonEventTypes == null) _touchpanel.DisableVolumeUpButton(); break; } - case ("volumedown"): + case ("volumedown"): { if (buttonEventTypes == null) _touchpanel.DisableVolumeDownButton(); break; } - case ("volumefeedback"): + case ("volumefeedback"): { break; } - case ("mute"): + case ("mute"): { if (buttonEventTypes == null) _touchpanel.DisableMuteButton(); @@ -250,120 +105,116 @@ namespace PepperDash.Essentials.Core.Touchpanels break; } - default: + default: { if (buttonNumber == 0) break; if (buttonEventTypes == null) - _touchpanel.DisableNumericalButton((uint) buttonNumber); + _touchpanel.DisableNumericalButton((uint)buttonNumber); else - _touchpanel.EnableNumericalButton((uint) buttonNumber); + _touchpanel.EnableNumericalButton((uint)buttonNumber); break; } - } } + + Debug.Console(1, this, "Button '{0}' {1}", key, buttonEventTypes == null + ? "is disabled, verify eventTypes are configured." + : "is enabled"); } - public void SetupButtonFeedbacks() + /// + /// Links button feedback if configured + /// + /// + /// + public void InitializeButtonFeedback(string key, KeypadButton config) { - if (_buttons == null) + if (config == null) { - Debug.Console(1, this, "Button properties are null, failed to setup buttons for events. Verify button configuraiton."); + Debug.Console(1, this, "Button '{0}' config is null, unable to initialize feedback", key); return; } - // check button config - foreach (var button in _buttons) + int buttonNumber; + TryParseInt(key, out buttonNumber); + + // Link up the button feedbacks to the specified device feedback + var buttonFeedback = config.Feedback; + if (buttonFeedback == null) { - var buttonKey = button.Key.ToLower(); - var buttonConfig = button.Value; - if (buttonConfig == null) - { - Debug.Console(1, this, "Unable to get button config for {0}-{1}", Key, button.Key); - continue; - } + Debug.Console(1, this, "Button '{0}' feedback not configured and will not be implemented. Verify feedback is configured if required.", key); + return; + } - int buttonNumber; - if (TryParseInt(buttonKey, out buttonNumber)) - Debug.Console(0, this, "buttonFeedback: tryIntParse successful, buttonNumber = {0}", buttonNumber); - else - Debug.Console(0, this, "buttonFeedback: tryIntParse failed, buttonKey = {0}", buttonKey); + var device = DeviceManager.GetDeviceForKey(buttonFeedback.DeviceKey) as Device; + if (device == null) + { + Debug.Console(1, this, "Button '{0}' feedback device with key '{0}' not found, feedback will not be implemented. Verify feedback deviceKey is properly configured.", + buttonFeedback.DeviceKey); + return; + } - // Link up the button feedbacks to the specified device feedback - var buttonFeedback = buttonConfig.Feedback; - if (buttonFeedback == null) - { - Debug.Console(1, this, "Button '{0}' feedback not configured, feedback will not be implemented", buttonKey); - continue; - } + // TODO [ ] verify if this can replace the current method + var deviceFeedback = device.GetFeedbackProperty(buttonFeedback.FeedbackName); + Debug.Console(0, this, "deviceFeedback.GetType().Name: '{0}'", deviceFeedback.GetType().Name); + //switch (feedback.GetType().Name.ToLower()) + //{ + // case("boolfeedback"): + // { + // break; + // } + // case("intfeedback"): + // { + // break; + // } + // case("stringfeedback"): + // { + // break; + // } + //} - var device = DeviceManager.GetDeviceForKey(buttonFeedback.DeviceKey) as Device; - if (device == null) - { - Debug.Console(1, this, "Unable to get device with key {0}, feedback will not be implemented", - buttonFeedback.DeviceKey); - continue; - } + var boolFeedback = deviceFeedback as BoolFeedback; + var intFeedback = deviceFeedback as IntFeedback; - var deviceFeedback = device.GetFeedbackProperty(buttonFeedback.FeedbackName); - Debug.Console(0, this, "deviceFeedback.GetType().Name: {0}", deviceFeedback.GetType().Name); - //switch (feedback.GetType().Name.ToLower()) - //{ - // case("boolfeedback"): - // { - - // break; - // } - // case("intfeedback"): - // { - - // break; - // } - //} - - var boolFeedback = deviceFeedback as BoolFeedback; - var intFeedback = deviceFeedback as IntFeedback; - - switch (buttonKey) - { - case ("power"): + switch (key) + { + case ("power"): + { + if (boolFeedback != null) boolFeedback.LinkCrestronFeedback(_touchpanel.FeedbackPower); + break; + } + case ("volumeup"): + case ("volumedown"): + case ("volumefeedback"): + { + if (intFeedback != null) { - if (boolFeedback != null) boolFeedback.LinkCrestronFeedback(_touchpanel.FeedbackPower); - break; + var volumeFeedback = intFeedback; + volumeFeedback.LinkInputSig(_touchpanel.VolumeBargraph); } - case ("volumeup"): - { - break; - } - case ("volumedown"): - { - break; - } - case ("volumefeedback"): - { - if (intFeedback != null) - { - var volumeFeedback = intFeedback; - volumeFeedback.LinkInputSig(_touchpanel.VolumeBargraph); - } - break; - } - case ("mute"): - { - if (boolFeedback != null) boolFeedback.LinkCrestronFeedback(_touchpanel.FeedbackMute); - break; - } - default: - { - if (boolFeedback != null) boolFeedback.LinkCrestronFeedback(_touchpanel.Feedbacks[(uint)buttonNumber]); - break; - } - } + break; + } + case ("mute"): + { + if (boolFeedback != null) boolFeedback.LinkCrestronFeedback(_touchpanel.FeedbackMute); + break; + } + default: + { + if (boolFeedback != null) boolFeedback.LinkCrestronFeedback(_touchpanel.Feedbacks[(uint)buttonNumber]); + break; + } } } + /// + /// Try parse int helper method + /// + /// + /// + /// public bool TryParseInt(string str, out int result) { try @@ -378,24 +229,7 @@ namespace PepperDash.Essentials.Core.Touchpanels } } - public bool TryExtractInt(string str, out int result) - { - result = str.Where(c => c >= '0' && c <= '9').Aggregate(0, (current, c) => current * 10 + (c - '0')); - - //foreach (var c in str) - //{ - // if(c < '0' || c > '9') - // //return false - // continue; - - // result = result*10 + (c - '0'); - //} - - Debug.Console(0, this, "TryParseInt: str-'{0}', result-'{1}'", str, result); - return result != 0; - } - - void _touchpanel_ButtonStateChange(GenericBase device, Crestron.SimplSharpPro.DeviceSupport.ButtonEventArgs args) + private void _touchpanel_ButtonStateChange(GenericBase device, Crestron.SimplSharpPro.DeviceSupport.ButtonEventArgs args) { Debug.Console(1, this, "Button {0} ({1}), {2}", args.Button.Number, args.Button.Name, args.NewButtonState); var type = args.NewButtonState.ToString();