using System; using System.Collections.Generic; using System.Linq; using System.Text; using Crestron.SimplSharp; using PepperDash.Essentials.Core.Config; using Newtonsoft.Json; namespace PepperDash.Essentials.Core { public static class JoinMapHelper { /// /// Attempts to get the serialized join map from config /// /// /// public static string GetJoinMapForDevice(string joinMapKey) { if (string.IsNullOrEmpty(joinMapKey)) return null; var joinMap = ConfigReader.ConfigObject.JoinMaps[joinMapKey]; if (joinMap != null) { return joinMap; } else return null; } } public abstract class JoinMapBase { /// /// Modifies all the join numbers by adding the offset. This should never be called twice /// /// public abstract void OffsetJoinNumbers(uint joinStart); public Dictionary Joins { get; set; } } /// /// Read = Provides feedback to SIMPL /// Write = Responds to sig values from SIMPL /// public enum eJoinCapabilities { Read = 1, Write = 2 } public enum eJoinType { Digital = 1, Analog = 2, Serial = 4 } /// /// Data describing the join /// public class JoinMetadata { /// /// A label for the join to better describe it's usage /// [JsonProperty("label")] public string Label { get; set; } /// /// Signal type(s) /// [JsonProperty("joinType")] public eJoinType JoinType { get; set; } /// /// Join number (based on join offset value) /// [JsonProperty("joinNumber")] public uint JoinNumber { get; set; } /// /// Join range span. If join indicates the start of a range of joins, this indicated the maximum number of joins in the range /// [JsonProperty("joinSpan")] public uint JoinSpan { get; set; } /// /// Indicates whether the join is read and/or write /// [JsonProperty("joinCapabilities")] public eJoinCapabilities JoinCapabilities { get; set; } } }