Adds necessary updates to allow feedback for keypad buttons to be defined in config and linked up at runtime

This commit is contained in:
Neil Dorin
2020-03-12 12:35:13 -06:00
parent daa0427b53
commit 7afcbaee61
5 changed files with 143 additions and 8 deletions

View File

@@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crestron.SimplSharp;
using PepperDash.Core;
namespace PepperDash.Essentials.Core
{
public static class DeviceFeedbackExtensions
{
/// <summary>
/// Attempts to get and return a feedback property from a device by name.
/// If unsuccessful, returns null.
/// </summary>
/// <param name="device"></param>
/// <param name="propertyName"></param>
/// <returns></returns>
public static Feedback GetFeedbackProperty(this Device device, string propertyName)
{
var feedback = DeviceJsonApi.GetPropertyByName(device.Key, propertyName) as Feedback;
if (feedback != null)
{
return feedback;
}
return null;
}
}
}

View File

@@ -59,7 +59,7 @@ namespace PepperDash.Essentials.Core
}
/// <summary>
///
/// Gets the properties on a device
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
@@ -75,8 +75,34 @@ namespace PepperDash.Essentials.Core
return JsonConvert.SerializeObject(props, Formatting.Indented);
}
/// <summary>
/// Gets a property from a device path by name
/// </summary>
/// <param name="deviceObjectPath"></param>
/// <param name="propertyName"></param>
/// <returns></returns>
public static object GetPropertyByName(string deviceObjectPath, string propertyName)
{
var obj = FindObjectOnPath(deviceObjectPath);
if(obj == null)
return "{ \"error\":\"No Device\"}";
CType t = obj.GetType();
var prop = t.GetProperty(propertyName);
if (prop != null)
{
return prop;
}
else
{
Debug.Console(1, "Unable to find Property: {0} on Device with path: {1}", propertyName, deviceObjectPath);
return null;
}
}
/// <summary>
///
/// Gets the methods on a device
/// </summary>
/// <param name="key"></param>
/// <returns></returns>