feat(wip): seeds feature for IR signal bridge map

This commit is contained in:
jdevito
2023-10-07 16:51:27 -05:00
parent 8612fab4fe
commit c0b0b35f6d
4 changed files with 48 additions and 25 deletions

View File

@@ -224,12 +224,18 @@ namespace PepperDash.Essentials.Core
/// </summary> /// </summary>
public class IrOutPortConfig public class IrOutPortConfig
{ {
[JsonProperty("port")]
public IROutputPort Port { get; set; } public IROutputPort Port { get; set; }
[JsonProperty("fileName")]
public string FileName { get; set; } public string FileName { get; set; }
[JsonProperty("useBridgeJoinMap")]
public bool UseBridgeJoinMap { get; set; }
public IrOutPortConfig() public IrOutPortConfig()
{ {
FileName = ""; FileName = "";
} }
} }
} }

View File

@@ -1,11 +1,11 @@
using System; using System.Collections.Generic;
using System.Collections.Generic; using System.Linq;
using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DeviceSupport;
using Newtonsoft.Json; using Newtonsoft.Json;
using PepperDash.Core; using PepperDash.Core;
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges; using PepperDash.Essentials.Core.Bridges;
using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.Config;
using PepperDash_Essentials_Core.Bridges.JoinMaps;
namespace PepperDash.Essentials.Core.Devices namespace PepperDash.Essentials.Core.Devices
{ {
@@ -21,9 +21,12 @@ namespace PepperDash.Essentials.Core.Devices
public string[] IrCommands {get { return _port.IrFileCommands; }} public string[] IrCommands {get { return _port.IrFileCommands; }}
public Dictionary<string, JoinDataComplete> BridgeJoins;
public GenericIrController(string key, string name, IrOutputPortController irPort) : base(key, name) public GenericIrController(string key, string name, IrOutputPortController irPort) : base(key, name)
{ {
_port = irPort; _port = irPort;
if(_port.UseBridgeJoinMap) BridgeJoins = new Dictionary<string, JoinDataComplete>();
if (_port == null) if (_port == null)
{ {
@@ -71,23 +74,39 @@ namespace PepperDash.Essentials.Core.Devices
if (!string.IsNullOrEmpty(joinMapSerialized)) if (!string.IsNullOrEmpty(joinMapSerialized))
joinMap = JsonConvert.DeserializeObject<GenericIrControllerJoinMap>(joinMapSerialized); joinMap = JsonConvert.DeserializeObject<GenericIrControllerJoinMap>(joinMapSerialized);
for (uint i = 0; i < _port.IrFileCommands.Length; i++) if (_port.UseBridgeJoinMap)
{ {
var cmd = _port.IrFileCommands[i]; Debug.Console(0, this, "Using new IR bridge join map");
var joinData = new JoinDataComplete(new JoinData {JoinNumber = i, JoinSpan = 1},
new JoinMetadata
{
Description = cmd,
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
joinData.SetJoinOffset(joinStart); var joins = BridgeJoins.Where((kv) => _port.IrFileCommands.Any(cmd => cmd == kv.Key)).ToDictionary(kv => kv.Key, kv=> kv.Value);
foreach (var join in joins)
{
Debug.Console(0, this, "_useBridgeJoinMap: {0}: {1}", join.Key, join.Value);
}
//joinMap.Joins = joins.Select(kv => kv.Value.SetJoinOffset(joinStart)).ToString();
}
else
{
Debug.Console(0, this, "Using legacy IR join mapping based on available IR commands");
joinMap.Joins.Add(cmd,joinData); for (uint i = 0; i < _port.IrFileCommands.Length; i++)
{
var cmd = _port.IrFileCommands[i];
var joinData = new JoinDataComplete(new JoinData { JoinNumber = i, JoinSpan = 1 },
new JoinMetadata
{
Description = cmd,
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
trilist.SetBoolSigAction(joinData.JoinNumber, (b) => Press(cmd, b)); joinData.SetJoinOffset(joinStart);
}
joinMap.Joins.Add(cmd, joinData);
trilist.SetBoolSigAction(joinData.JoinNumber, (b) => Press(cmd, b));
}
}
joinMap.PrintJoinMapInfo(); joinMap.PrintJoinMapInfo();
@@ -109,13 +128,6 @@ namespace PepperDash.Essentials.Core.Devices
} }
} }
public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced
{
public GenericIrControllerJoinMap(uint joinStart) : base(joinStart)
{
}
}
public class GenericIrControllerFactory : EssentialsDeviceFactory<GenericIrController> public class GenericIrControllerFactory : EssentialsDeviceFactory<GenericIrController>
{ {
public GenericIrControllerFactory() public GenericIrControllerFactory()

View File

@@ -29,6 +29,8 @@ namespace PepperDash.Essentials.Core
public string[] IrFileCommands { get { return IrPort.AvailableStandardIRCmds(IrPortUid); } } public string[] IrFileCommands { get { return IrPort.AvailableStandardIRCmds(IrPortUid); } }
public bool UseBridgeJoinMap { get; private set; }
/// <summary> /// <summary>
/// Constructor for IrDevice base class. If a null port is provided, this class will /// Constructor for IrDevice base class. If a null port is provided, this class will
/// still function without trying to talk to a port. /// still function without trying to talk to a port.
@@ -62,6 +64,8 @@ namespace PepperDash.Essentials.Core
Debug.Console(0, this, "WARNING No valid IR Port assigned to controller. IR will not function"); Debug.Console(0, this, "WARNING No valid IR Port assigned to controller. IR will not function");
return; return;
} }
UseBridgeJoinMap = config.Properties["control"]["useBridgeJoinMap"].Value<bool>();
var filePath = Global.FilePathPrefix + "ir" + Global.DirectorySeparator + config.Properties["control"]["irFile"].Value<string>(); var filePath = Global.FilePathPrefix + "ir" + Global.DirectorySeparator + config.Properties["control"]["irFile"].Value<string>();
Debug.Console(1, "*************Attempting to load IR file: {0}***************", filePath); Debug.Console(1, "*************Attempting to load IR file: {0}***************", filePath);

View File

@@ -127,6 +127,7 @@
<Compile Include="Bridges\IBridge.cs" /> <Compile Include="Bridges\IBridge.cs" />
<Compile Include="Bridges\JoinMaps\AirMediaControllerJoinMap.cs" /> <Compile Include="Bridges\JoinMaps\AirMediaControllerJoinMap.cs" />
<Compile Include="Bridges\JoinMaps\AppleTvJoinMap.cs" /> <Compile Include="Bridges\JoinMaps\AppleTvJoinMap.cs" />
<Compile Include="Bridges\JoinMaps\GenericIrControllerJoinMap.cs" />
<Compile Include="Bridges\JoinMaps\IAnalogInputJoinMap.cs" /> <Compile Include="Bridges\JoinMaps\IAnalogInputJoinMap.cs" />
<Compile Include="Bridges\JoinMaps\IDigitalOutputJoinMap.cs" /> <Compile Include="Bridges\JoinMaps\IDigitalOutputJoinMap.cs" />
<Compile Include="Bridges\JoinMaps\PduJoinMapBase.cs" /> <Compile Include="Bridges\JoinMaps\PduJoinMapBase.cs" />