Compare commits

...

15 Commits

Author SHA1 Message Date
Andrew Welker
078f35a91d fix: check EISC for null prior to using 2025-08-15 09:47:56 -05:00
Andrew Welker
dba07dced8 fix: PD Core 1.4.2 and comm factory update 2025-08-14 14:25:36 -05:00
Andrew Welker
5ad232135c feat: CommBridge communication method implementation
In some scenarios, it becomes necessary to have a plugin in Essentials use a Communications method that's defined in
SIMPL and bridged the opposite from what normally happens. The CommBridge method facilitates that sort of operation.

To use it: set the method in the Control configuration for the device to 'comBridge'. The bridge will be built with a key of "{deviceKey}-simpl", so it can be added to a bridge using that key.
2025-08-14 14:22:22 -05:00
Andrew Welker
3f8e72f366 wip: reverse genericcomm 2025-08-14 12:20:03 -05:00
Andrew Welker
307b2f54a7 fix: update Crestron databases 2025-08-13 13:55:24 -05:00
Nick Genovese
f73482e8ed Merge pull request #1302 from PepperDash/ir-join-map
Add Eject to IR Join Map
2025-08-11 16:26:52 -04:00
Andrew Welker
e5a7641564 fix: use correct property name 2025-07-29 13:06:07 -05:00
Andrew Welker
2b845ce4cb fix: add eject to generic IR join map 2025-07-29 12:59:35 -05:00
Andrew Welker
1f095e2fb3 Merge pull request #1272 from PepperDash/3series-caller-reference
ci: update workflow caller reference
2025-05-19 16:53:19 -05:00
jdevito
2a7f491f62 ci: update workflow caller reference 2025-05-15 11:13:26 -05:00
Andrew Welker
2af603013d Merge pull request #1268 from PepperDash/3series-workflow-updates 2025-05-13 17:15:28 -05:00
jdevito
9aa890d404 fix(dependencies): revert PepperDashCore version to 1.4.1 in packages.config and update nuspec dependency range 2025-05-13 16:31:13 -05:00
jdevito
de714f998b fix(dependencies): update PepperDashCore version to 1.4.1-3series-workflow-updates.5 in packages.config 2025-05-13 15:57:01 -05:00
jdevito
bcc07fb4cf ci(force-patch): force version increment for ci updates 2025-05-13 15:15:30 -05:00
jdevito
a3651eac76 fix(nuspec): correct authorship and update copyright year in PepperDash_Essentials_Core.nuspec 2025-05-13 15:13:47 -05:00
7 changed files with 140 additions and 6 deletions

View File

@@ -10,8 +10,7 @@ jobs:
uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-getversion.yml@main
secrets: inherit
build-3Series:
# uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-3Series-builds.yml@main
uses: PepperDash/workflow-templates/.github/workflows/essentials-3Series-builds.yml@plugins-build-workflows
uses: PepperDash/workflow-templates/.github/workflows/essentials-3Series-builds.yml@main
secrets: inherit
needs: getVersion
if: needs.getVersion.outputs.newVersion == 'true'

View File

@@ -1,3 +1,3 @@
<packages>
<package id="PepperDashCore" version="1.4.0" targetFramework="net35" allowedVersions="[1.0,2.0)"/>
<package id="PepperDashCore" version="1.4.2" targetFramework="net35" allowedVersions="[1.0,2.0)"/>
</packages>

View File

@@ -819,6 +819,20 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital
});
[JoinName("EJECT")]
public JoinDataComplete Eject = new JoinDataComplete(
new JoinData
{
JoinNumber = 69,
JoinSpan = 1
},
new JoinMetadata
{
Description = "EJECT",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
public GenericIrControllerJoinMap(uint joinStart)
: base(joinStart, typeof(GenericIrControllerJoinMap))
{

View File

@@ -0,0 +1,117 @@
using System;
using System.Collections.Generic;
using Crestron.SimplSharp.CrestronSockets;
using Crestron.SimplSharpPro.DeviceSupport;
using Newtonsoft.Json;
using System.Text;
using PepperDash.Core;
using PepperDash.Essentials.Core.Bridges;
using PepperDash.Essentials.Core.Devices;
using PepperDash.Essentials.Core.Config;
namespace PepperDash.Essentials.Core
{
/// <summary>
/// Implements IBasicCommunication and sends all communication through an EISC
/// </summary>
[Description("Generic communication wrapper class for any IBasicCommunication type")]
public class CommBridge : EssentialsBridgeableDevice, IBasicCommunication
{
private EiscApiAdvanced eisc;
private IBasicCommunicationJoinMap joinMap;
public event EventHandler<GenericCommMethodReceiveTextArgs> TextReceived;
public event EventHandler<GenericCommMethodReceiveBytesArgs> BytesReceived;
public bool IsConnected { get; private set; }
public CommBridge(string key, string name)
: base(key, name)
{
}
public void SendBytes(byte[] bytes)
{
if (eisc == null)
{
Debug.Console(0, this, "EISC not linked. Call LinkToApi before sending bytes.");
return;
}
eisc.Eisc.SetString(joinMap.SendText.JoinNumber, Encoding.ASCII.GetString(bytes, 0, bytes.Length));
}
public void SendText(string text)
{
if (eisc == null)
{
Debug.Console(0, this, "EISC not linked. Call LinkToApi before sending text.");
return;
}
eisc.Eisc.SetString(joinMap.SendText.JoinNumber, text);
}
public void Connect() {
if (eisc == null)
{
Debug.Console(0, this, "EISC not linked. Call LinkToApi before connecting.");
return;
}
eisc.Eisc.SetBool(joinMap.Connect.JoinNumber, true);
}
public void Disconnect() {
if (eisc == null)
{
Debug.Console(0, this, "EISC not linked. Call LinkToApi before disconnecting.");
return;
}
eisc.Eisc.SetBool(joinMap.Connect.JoinNumber, false);
}
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
joinMap = new IBasicCommunicationJoinMap(joinStart);
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
if (!string.IsNullOrEmpty(joinMapSerialized))
joinMap = JsonConvert.DeserializeObject<IBasicCommunicationJoinMap>(joinMapSerialized);
if (bridge != null)
{
bridge.AddJoinMap(Key, joinMap);
}
else
{
Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
}
Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
eisc = bridge;
trilist.SetBoolSigAction(joinMap.Connected.JoinNumber, (b) => IsConnected = b);
trilist.SetStringSigAction(joinMap.TextReceived.JoinNumber, (s) => {
var textHandler = TextReceived;
if (textHandler != null)
{
textHandler(this, new GenericCommMethodReceiveTextArgs(s));
}
var bytesHandler = BytesReceived;
if(bytesHandler != null)
{
bytesHandler(this, new GenericCommMethodReceiveBytesArgs(Encoding.ASCII.GetBytes(s)));
}
});
}
}
}

View File

@@ -50,6 +50,9 @@ namespace PepperDash.Essentials.Core
case eControlMethod.Com:
comm = new ComPortController(deviceConfig.Key + "-com", GetComPort, controlConfig.ComParams, controlConfig);
break;
case eControlMethod.ComBridge:
comm = new CommBridge(deviceConfig.Key + "-simpl", deviceConfig.Name + " Simpl");
break;
case eControlMethod.Cec:
comm = new CecPortController(deviceConfig.Key + "-cec", GetCecPort, controlConfig);
break;

View File

@@ -165,6 +165,7 @@
<Compile Include="Comm and IR\ComSpecJsonConverter.cs" />
<Compile Include="Comm and IR\ConsoleCommMockDevice.cs" />
<Compile Include="Comm and IR\GenericComm.cs" />
<Compile Include="Comm and IR\CommBridge.cs" />
<Compile Include="Comm and IR\GenericHttpClient.cs" />
<Compile Include="Comm and IR\IRPortHelper.cs" />
<Compile Include="Config\Essentials\ConfigUpdater.cs" />

View File

@@ -4,17 +4,17 @@
<id>PepperDashEssentials</id>
<version>1.5.6</version>
<title>PepperDash Essentials</title>
<authors>PepperDash Technologies</authors>
<authors>PepperDash Technology</authors>
<owners>pepperdash</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<license type="expression">MIT</license>
<projectUrl>https://github.com/PepperDash/PepperDashCore</projectUrl>
<copyright>Copyright 2020</copyright>
<copyright>Copyright 2025</copyright>
<description>PepperDash Essentials is an open source Crestron framework that can be configured as a standalone program capable of running a wide variety of system designs and can also be utilized as a plug-in architecture to augment other Simpl# Pro and Simpl Windows programs. Essentials Framework is a collection of C# / Simpl# Pro libraries that can be utilized in several different manners. It is currently operating as a 100% configuration-driven system, and can be extended to add different workflows and behaviors, either through the addition of further device "types" or via the plug-in mechanism. The framework is a collection of "things" that are all related and interconnected, but in general do not have dependencies on each other.</description>
<tags>crestron 3series 4series</tags>
<repository type="git" url="https://github.com/PepperDash/Essentials"/>
<dependencies>
<dependency id="PepperDashCore" version="[1.4.0, 2.0.0)"/>
<dependency id="PepperDashCore" version="[1.4.1, 2.0.0)"/>
</dependencies>
</metadata>
<files>