mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-09 01:35:02 +00:00
Compare commits
1 Commits
v2.0.0
...
feature/bu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf27e995c2 |
@@ -1,21 +0,0 @@
|
|||||||
name: Build PepperDash Essentials
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- '**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
getVersion:
|
|
||||||
uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-getversion.yml@main
|
|
||||||
secrets: inherit
|
|
||||||
build-4Series:
|
|
||||||
uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-4Series-builds.yml@main
|
|
||||||
secrets: inherit
|
|
||||||
needs: getVersion
|
|
||||||
if: needs.getVersion.outputs.newVersion == 'true'
|
|
||||||
with:
|
|
||||||
newVersion: ${{ needs.getVersion.outputs.newVersion }}
|
|
||||||
version: ${{ needs.getVersion.outputs.version }}
|
|
||||||
tag: ${{ needs.getVersion.outputs.tag }}
|
|
||||||
channel: ${{ needs.getVersion.outputs.channel }}
|
|
||||||
96
.github/workflows/docker.yml
vendored
Normal file
96
.github/workflows/docker.yml
vendored
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
name: Branch Build Using Docker
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- feature-2.0.0/*
|
||||||
|
- hotfix-2.0.0/*
|
||||||
|
- release-2.0.0/*
|
||||||
|
- development-2.0.0
|
||||||
|
|
||||||
|
env:
|
||||||
|
# solution path doesn't need slashes unless there it is multiple folders deep
|
||||||
|
# solution name does not include extension. .sln is assumed
|
||||||
|
SOLUTION_PATH: .
|
||||||
|
SOLUTION_FILE: PepperDash.Essentials
|
||||||
|
# Do not edit this, we're just creating it here
|
||||||
|
VERSION: 0.0.0-buildtype-buildnumber
|
||||||
|
# Defaults to debug for build type
|
||||||
|
BUILD_TYPE: Debug
|
||||||
|
# Defaults to main as the release branch. Change as necessary
|
||||||
|
RELEASE_BRANCH: main
|
||||||
|
jobs:
|
||||||
|
Build_Project_4-Series:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set Version Number
|
||||||
|
id: setVersion
|
||||||
|
shell: powershell
|
||||||
|
run: |
|
||||||
|
$latestVersion = [version]"2.0.0"
|
||||||
|
|
||||||
|
$newVersion = [version]$latestVersion
|
||||||
|
$phase = ""
|
||||||
|
$newVersionString = ""
|
||||||
|
|
||||||
|
switch -regex ($Env:GITHUB_REF) {
|
||||||
|
'^refs\/pull\/*.' {
|
||||||
|
$phase = 'beta';
|
||||||
|
$newVersionString = "{0}-{1}-{2}" -f $newVersion, $phase, $Env:GITHUB_RUN_NUMBER
|
||||||
|
}
|
||||||
|
'^refs\/heads\/hotfix-2.0.0\/*.' {
|
||||||
|
$phase = 'hotfix'
|
||||||
|
$newVersionString = "{0}-{1}-{2}" -f $newVersion, $phase, $Env:GITHUB_RUN_NUMBER
|
||||||
|
}
|
||||||
|
'^refs\/heads\/release-2.0.0\/*.' {
|
||||||
|
$splitRef = $Env:GITHUB_REF -split "/"
|
||||||
|
$version = [version]($splitRef[-1] -replace "v", "")
|
||||||
|
$phase = 'rc'
|
||||||
|
$newVersionString = "{0}-{1}-{2}" -f $version, $phase, $Env:GITHUB_RUN_NUMBER
|
||||||
|
}
|
||||||
|
'^refs\/heads\/feature-2.0.0\/*.' {
|
||||||
|
$phase = 'alpha'
|
||||||
|
$newVersionString = "{0}-{1}-{2}" -f $newVersion, $phase, $Env:GITHUB_RUN_NUMBER
|
||||||
|
}
|
||||||
|
'development-2.0.0' {
|
||||||
|
$phase = 'beta'
|
||||||
|
$newVersionString = "{0}-{1}-{2}" -f $newVersion, $phase, $Env:GITHUB_RUN_NUMBER
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo "version=$newVersionString" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||||
|
- name: Setup MS Build
|
||||||
|
uses: microsoft/setup-msbuild@v1.1
|
||||||
|
- name: restore Nuget Packages
|
||||||
|
run: nuget restore .\$($Env:SOLUTION_FILE).sln
|
||||||
|
# Build the solutions in the docker image
|
||||||
|
- name: Build Solution
|
||||||
|
run: msbuild .\$($Env:SOLUTION_FILE).sln /p:Platform="Any CPU" /p:Configuration="Debug" /p:Version="${{ steps.setVersion.outputs.version }}" -m
|
||||||
|
- name: Pack Solution
|
||||||
|
run: dotnet pack .\$($Env:SOLUTION_FILE).sln --configuration $env:BUILD_TYPE --output ./output /p:Version="${{ steps.setVersion.outputs.version }}"
|
||||||
|
- name: Create tag for non-rc builds
|
||||||
|
if: contains(steps.setVersion.outputs.version, 'alpha')
|
||||||
|
run: |
|
||||||
|
git tag ${{ steps.setVersion.outputs.version }}
|
||||||
|
git push --tags origin
|
||||||
|
# Create the release on the source repo
|
||||||
|
- name: Create Release
|
||||||
|
id: create_release
|
||||||
|
# if: contains(steps.setVersion.outputs.version,'-rc-') ||
|
||||||
|
# contains(steps.setVersion.outputs.version,'-hotfix-') ||
|
||||||
|
# contains(steps.setVersion.outputs.version, '-beta-')
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
artifacts: 'output\**\*.*(cpz|cplz)'
|
||||||
|
generateReleaseNotes: true
|
||||||
|
prerelease: ${{contains('debug', env.BUILD_TYPE)}}
|
||||||
|
tag: ${{ steps.setVersion.outputs.version }}
|
||||||
|
- name: Setup Nuget
|
||||||
|
run: |
|
||||||
|
nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash/index.json -username pepperdash -password ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
nuget setApiKey ${{ secrets.GITHUB_TOKEN }} -Source github
|
||||||
|
nuget setApiKey ${{ secrets.NUGET_API_KEY }} -Source https://api.nuget.org/v3/index.json
|
||||||
|
- name: Publish to Nuget
|
||||||
|
run: nuget push .\output\*.nupkg -Source https://api.nuget.org/v3/index.json
|
||||||
|
- name: Publish to Github Nuget
|
||||||
|
run: nuget push .\output\*.nupkg -Source github
|
||||||
57
.github/workflows/main.yml
vendored
Normal file
57
.github/workflows/main.yml
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
name: main Build using Docker
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- published
|
||||||
|
branches:
|
||||||
|
- main-2.0.0
|
||||||
|
env:
|
||||||
|
# solution path doesn't need slashes unless there it is multiple folders deep
|
||||||
|
# solution name does not include extension. .sln is assumed
|
||||||
|
SOLUTION_PATH: PepperDashEssentials
|
||||||
|
SOLUTION_FILE: PepperDashEssentials
|
||||||
|
# Do not edit this, we're just creating it here
|
||||||
|
VERSION: 0.0.0-buildtype-buildnumber
|
||||||
|
# Defaults to debug for build type
|
||||||
|
BUILD_TYPE: Release
|
||||||
|
# Defaults to main as the release branch. Change as necessary
|
||||||
|
RELEASE_BRANCH: main
|
||||||
|
jobs:
|
||||||
|
Build_Project:
|
||||||
|
runs-on: windows-2019
|
||||||
|
steps:
|
||||||
|
# First we checkout the source repo
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
# Generate the appropriate version number
|
||||||
|
- name: Set Version Number
|
||||||
|
shell: powershell
|
||||||
|
id: setVersion
|
||||||
|
env:
|
||||||
|
TAG_NAME: ${{ github.event.release.tag_name }}
|
||||||
|
run: echo "VERSION=$($Env:TAG_NAME)" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||||
|
- name: Setup MS Build
|
||||||
|
uses: microsoft/setup-msbuild@v1.1
|
||||||
|
- name: restore Nuget Packages
|
||||||
|
run: nuget restore .\$($Env:SOLUTION_FILE).sln
|
||||||
|
- name: Build Solution
|
||||||
|
run: msbuild .\$($Env:SOLUTION_FILE).sln /p:Platform="Any CPU" /p:Configuration="Debug" /p:Version="${{ steps.setVersion.outputs.version }}" -m
|
||||||
|
- name: Pack Solution
|
||||||
|
run: dotnet pack .\$($Env:SOLUTION_FILE).sln --configuration $env:BUILD_TYPE --output ./output /p:Version="${{ steps.setVersion.outputs.version }}"
|
||||||
|
- name: Upload Release
|
||||||
|
id: create_release
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
updateRelease: true
|
||||||
|
artifacts: 'output\**\*.*(cpz|cplz)'
|
||||||
|
tag: ${{ steps.setVersion.outputs.version }}
|
||||||
|
- name: Setup Nuget
|
||||||
|
run: |
|
||||||
|
nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash/index.json -username pepperdash -password ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
nuget setApiKey ${{ secrets.GITHUB_TOKEN }} -Source github
|
||||||
|
nuget setApiKey ${{ secrets.NUGET_API_KEY }} -Source https://api.nuget.org/v3/index.json
|
||||||
|
- name: Publish to Nuget
|
||||||
|
run: nuget push .\output\*.nupkg -Source https://api.nuget.org/v3/index.json
|
||||||
|
- name: Publish to Github Nuget
|
||||||
|
run: nuget push .\output\*.nupkg -Source github
|
||||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "Essentials-Template-UI"]
|
||||||
|
path = Essentials-Template-UI
|
||||||
|
url = https://github.com/PepperDash/Essentials-Template-UI.git
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
{
|
|
||||||
"plugins": [
|
|
||||||
[
|
|
||||||
"@semantic-release/commit-analyzer",
|
|
||||||
{
|
|
||||||
"releaseRules": [
|
|
||||||
{ "scope": "force-patch", "release": "patch" },
|
|
||||||
{ "scope": "no-release", "release": false }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"@semantic-release/release-notes-generator",
|
|
||||||
["@semantic-release/changelog",
|
|
||||||
{
|
|
||||||
"changelogFile": "CHANGELOG.md"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"@semantic-release/exec",
|
|
||||||
{
|
|
||||||
"verifyReleaseCmd": "echo \"newVersion=true\" >> $GITHUB_OUTPUT",
|
|
||||||
"publishCmd": "echo \"version=${nextRelease.version}\" >> $GITHUB_OUTPUT && echo \"tag=${nextRelease.gitTag}\" >> $GITHUB_OUTPUT && echo \"type=${nextRelease.type}\" >> $GITHUB_OUTPUT && echo \"channel=${nextRelease.channel}\" >> $GITHUB_OUTPUT"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"branches": [
|
|
||||||
"main",
|
|
||||||
{"name": "development", "prerelease": "beta", "channel": "beta"},
|
|
||||||
{"name": "release", "prerelease": "rc", "channel": "rc"},
|
|
||||||
{
|
|
||||||
"name": "replace-me-feature-branch",
|
|
||||||
"prerelease": "replace-me-prerelease",
|
|
||||||
"channel": "replace-me-prerelease"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -91,8 +91,8 @@ we receive and the availability of resources to evaluate contributions, we antic
|
|||||||
project remains dynamic and relevant. This may affect our responsiveness and ability to accept pull requests
|
project remains dynamic and relevant. This may affect our responsiveness and ability to accept pull requests
|
||||||
quickly. This does not mean we are ignoring them.
|
quickly. This does not mean we are ignoring them.
|
||||||
- Not all innovative ideas need to be accepted as pull requests into this GitHub project to be valuable to the community.
|
- Not all innovative ideas need to be accepted as pull requests into this GitHub project to be valuable to the community.
|
||||||
There may be times when we recommend that you just share your code for some enhancement to Essentials from your own
|
There may be times when we recommend that you just share your code for some enhancement to Ghidra from your own
|
||||||
repository. As we identify and recognize extensions that are of general interest to Essentials, we
|
repository. As we identify and recognize extensions that are of general interest to the reverse engineering community, we
|
||||||
may seek to incorporate them with our baseline.
|
may seek to incorporate them with our baseline.
|
||||||
|
|
||||||
## Legal
|
## Legal
|
||||||
|
|||||||
1
Essentials-Template-UI
Submodule
1
Essentials-Template-UI
Submodule
Submodule Essentials-Template-UI added at 8eaf88791b
@@ -61,3 +61,5 @@ For detailed documentation, see the [Wiki](https://github.com/PepperDash/Essenti
|
|||||||
## How-To (Getting Started)
|
## How-To (Getting Started)
|
||||||
|
|
||||||
See [Getting Started](https://github.com/PepperDash/Essentials/wiki/Get-started#how-to-get-started)
|
See [Getting Started](https://github.com/PepperDash/Essentials/wiki/Get-started#how-to-get-started)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,85 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Wrapper class for CEN-IO-COM-Xxx expander module
|
|
||||||
/// </summary>
|
|
||||||
[Description("Wrapper class for the CEN-IO-COM-102 & CEN-IO-COM-202 expander module")]
|
|
||||||
public class CenIoComController : CrestronGenericBaseDevice, IComPorts
|
|
||||||
{
|
|
||||||
private readonly CenIoCom _cenIoCom;
|
|
||||||
|
|
||||||
public CenIoComController(string key, string name, CenIoCom cenIo)
|
|
||||||
:base(key, name, cenIo)
|
|
||||||
{
|
|
||||||
_cenIoCom = cenIo;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Implementation of IComPorts
|
|
||||||
|
|
||||||
public CrestronCollection<ComPort> ComPorts
|
|
||||||
{
|
|
||||||
get { return _cenIoCom.ComPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfComPorts
|
|
||||||
{
|
|
||||||
get { return _cenIoCom.NumberOfComPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CenIoCom102ControllerFactory : EssentialsDeviceFactory<CenIoComController>
|
|
||||||
{
|
|
||||||
private const string CenIoCom102Type = "ceniocom102";
|
|
||||||
private const string CenIoCom202Type = "ceniocom202";
|
|
||||||
|
|
||||||
public CenIoCom102ControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string> { CenIoCom102Type, CenIoCom202Type };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new CEN-IO-COM-Xxx Device");
|
|
||||||
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
if (control == null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-COM-Xxx Device, control properties not found");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var ipid = control.IpIdInt;
|
|
||||||
if (ipid < 2)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-COM-Xxx Device, invalid IP-ID found");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (dc.Type)
|
|
||||||
{
|
|
||||||
case CenIoCom102Type:
|
|
||||||
{
|
|
||||||
return new CenIoComController(dc.Key, dc.Name, new CenIoCom102(ipid, Global.ControlSystem));
|
|
||||||
}
|
|
||||||
case CenIoCom202Type:
|
|
||||||
{
|
|
||||||
return new CenIoComController(dc.Key, dc.Name, new CenIoCom202(ipid, Global.ControlSystem));
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-COM-Xxx Device, invalid type '{0}'", dc.Type);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,185 +0,0 @@
|
|||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
using Crestron.SimplSharpPro.DM;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
|
|
||||||
namespace PepperDash_Essentials_DM.Chassis
|
|
||||||
{
|
|
||||||
public class HdPsXxxAnalogAuxMixerController : IKeyed,
|
|
||||||
IHasVolumeControlWithFeedback, IHasMuteControlWithFeedback
|
|
||||||
{
|
|
||||||
public string Key { get; private set; }
|
|
||||||
|
|
||||||
private readonly HdPsXxxAnalogAuxMixer _mixer;
|
|
||||||
|
|
||||||
public HdPsXxxAnalogAuxMixerController(string parent, uint mixer, HdPsXxx chassis)
|
|
||||||
{
|
|
||||||
Key = string.Format("{0}-analogMixer{1}", parent, mixer);
|
|
||||||
|
|
||||||
_mixer = chassis.AnalogAuxiliaryMixer[mixer];
|
|
||||||
|
|
||||||
_mixer.AuxMixerPropertyChange += OnAuxMixerPropertyChange;
|
|
||||||
_mixer.AuxiliaryMuteControl.MuteAndVolumeControlPropertyChange += OnMuteAndVolumeControlPropertyChange;
|
|
||||||
|
|
||||||
VolumeLevelFeedback = new IntFeedback(() => VolumeLevel);
|
|
||||||
MuteFeedback = new BoolFeedback(() => IsMuted);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Volume
|
|
||||||
|
|
||||||
private void OnAuxMixerPropertyChange(object sender, GenericEventArgs args)
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "OnAuxMixerPropertyChange: {0} > Index-{1}, EventId-{2}", sender.ToString(), args.Index, args.EventId);
|
|
||||||
|
|
||||||
switch (args.EventId)
|
|
||||||
{
|
|
||||||
case MuteAndVolumeContorlEventIds.VolumeFeedbackEventId:
|
|
||||||
{
|
|
||||||
VolumeLevel = _mixer.VolumeFeedback.ShortValue;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case MuteAndVolumeContorlEventIds.MuteOnEventId:
|
|
||||||
case MuteAndVolumeContorlEventIds.MuteOffEventId:
|
|
||||||
{
|
|
||||||
IsMuted = _mixer.AuxiliaryMuteControl.MuteOnFeedback.BoolValue;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "OnAuxMixerPropertyChange: {0} > Index-{1}, EventId-{2} - unhandled eventId", sender.ToString(), args.Index, args.EventId);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private const ushort CrestronLevelMin = 0;
|
|
||||||
private const ushort CrestronLevelMax = 65535;
|
|
||||||
|
|
||||||
private const int DeviceLevelMin = -800;
|
|
||||||
private const int DeviceLevelMax = 200;
|
|
||||||
|
|
||||||
private const int RampTime = 5000;
|
|
||||||
|
|
||||||
private int _volumeLevel;
|
|
||||||
|
|
||||||
public int VolumeLevel
|
|
||||||
{
|
|
||||||
get { return _volumeLevel; }
|
|
||||||
private set
|
|
||||||
{
|
|
||||||
var level = value;
|
|
||||||
|
|
||||||
_volumeLevel = CrestronEnvironment.ScaleWithLimits(level, DeviceLevelMax, DeviceLevelMin, CrestronLevelMax, CrestronLevelMin);
|
|
||||||
|
|
||||||
Debug.Console(1, this, "VolumeFeedback: level-'{0}', scaled-'{1}'", level, _volumeLevel);
|
|
||||||
|
|
||||||
VolumeLevelFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public IntFeedback VolumeLevelFeedback { get; private set; }
|
|
||||||
|
|
||||||
public void SetVolume(ushort level)
|
|
||||||
{
|
|
||||||
var levelScaled = CrestronEnvironment.ScaleWithLimits(level, CrestronLevelMax, CrestronLevelMin, DeviceLevelMax, DeviceLevelMin);
|
|
||||||
|
|
||||||
Debug.Console(1, this, "SetVolume: level-'{0}', levelScaled-'{1}'", level, levelScaled);
|
|
||||||
|
|
||||||
_mixer.Volume.ShortValue = (short)levelScaled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void VolumeUp(bool pressRelease)
|
|
||||||
{
|
|
||||||
if (pressRelease)
|
|
||||||
{
|
|
||||||
_mixer.Volume.CreateSignedRamp(DeviceLevelMax, RampTime);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_mixer.Volume.StopRamp();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void VolumeDown(bool pressRelease)
|
|
||||||
{
|
|
||||||
if (pressRelease)
|
|
||||||
{
|
|
||||||
_mixer.Volume.CreateSignedRamp(DeviceLevelMin, RampTime);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_mixer.Volume.StopRamp();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region Mute
|
|
||||||
|
|
||||||
private void OnMuteAndVolumeControlPropertyChange(MuteControl device, GenericEventArgs args)
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "OnMuteAndVolumeControlPropertyChange: {0} > Index-{1}, EventId-{2}", device.ToString(), args.Index, args.EventId);
|
|
||||||
|
|
||||||
switch (args.EventId)
|
|
||||||
{
|
|
||||||
case MuteAndVolumeContorlEventIds.VolumeFeedbackEventId:
|
|
||||||
{
|
|
||||||
VolumeLevel = _mixer.VolumeFeedback.ShortValue;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case MuteAndVolumeContorlEventIds.MuteOnEventId:
|
|
||||||
case MuteAndVolumeContorlEventIds.MuteOffEventId:
|
|
||||||
{
|
|
||||||
IsMuted = _mixer.AuxiliaryMuteControl.MuteOnFeedback.BoolValue;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "OnMuteAndVolumeControlPropertyChange: {0} > Index-{1}, EventId-{2} - unhandled eventId", device.ToString(), args.Index, args.EventId);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool _isMuted;
|
|
||||||
|
|
||||||
public bool IsMuted
|
|
||||||
{
|
|
||||||
get { return _isMuted; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_isMuted = value;
|
|
||||||
|
|
||||||
Debug.Console(1, this, "IsMuted: _isMuted-'{0}'", _isMuted);
|
|
||||||
|
|
||||||
MuteFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public BoolFeedback MuteFeedback { get; private set; }
|
|
||||||
|
|
||||||
public void MuteOn()
|
|
||||||
{
|
|
||||||
_mixer.AuxiliaryMuteControl.MuteOn();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void MuteOff()
|
|
||||||
{
|
|
||||||
_mixer.AuxiliaryMuteControl.MuteOff();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void MuteToggle()
|
|
||||||
{
|
|
||||||
if (IsMuted)
|
|
||||||
MuteOff();
|
|
||||||
else
|
|
||||||
MuteOn();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,167 +0,0 @@
|
|||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro.DM;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
|
|
||||||
namespace PepperDash_Essentials_DM.Chassis
|
|
||||||
{
|
|
||||||
public class HdPsXxxOutputAudioController : IKeyed,
|
|
||||||
IHasVolumeControlWithFeedback, IHasMuteControlWithFeedback
|
|
||||||
{
|
|
||||||
public string Key { get; private set; }
|
|
||||||
|
|
||||||
private readonly HdPsXxxHdmiDmLiteOutputMixer _mixer; // volume/volumeFeedback
|
|
||||||
private readonly HdPsXxxOutputPort _port; // mute/muteFeedback
|
|
||||||
|
|
||||||
public HdPsXxxOutputAudioController(string parent, uint output, HdPsXxx chassis)
|
|
||||||
{
|
|
||||||
Key = string.Format("{0}-audioOut{1}", parent, output);
|
|
||||||
|
|
||||||
_port = chassis.HdmiDmLiteOutputs[output].OutputPort;
|
|
||||||
_mixer = chassis.HdmiDmLiteOutputs[output].Mixer;
|
|
||||||
|
|
||||||
chassis.DMOutputChange += ChassisOnDmOutputChange;
|
|
||||||
|
|
||||||
VolumeLevelFeedback = new IntFeedback(() => VolumeLevel);
|
|
||||||
MuteFeedback = new BoolFeedback(() => IsMuted);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ChassisOnDmOutputChange(Switch device, DMOutputEventArgs args)
|
|
||||||
{
|
|
||||||
switch (args.EventId)
|
|
||||||
{
|
|
||||||
case (DMOutputEventIds.VolumeEventId):
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "HdPsXxxOutputAudioController: {0} > Index-{1}, Number-{3}, EventId-{2} - AudioMute/UnmuteEventId",
|
|
||||||
device.ToString(), args.Index, args.EventId, args.Number);
|
|
||||||
|
|
||||||
VolumeLevel = _mixer.VolumeFeedback.ShortValue;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case DMOutputEventIds.MuteOnEventId:
|
|
||||||
case DMOutputEventIds.MuteOffEventId:
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "HdPsXxxOutputAudioController: {0} > Index-{1}, Number-{3}, EventId-{2} - MuteOnEventId/MuteOffEventId",
|
|
||||||
device.ToString(), args.Index, args.EventId, args.Number);
|
|
||||||
|
|
||||||
IsMuted = _port.MuteOnFeedback.BoolValue;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "HdPsXxxOutputAudioController: {0} > Index-{1}, Number-{3}, EventId-{2} - unhandled eventId",
|
|
||||||
device.ToString(), args.Index, args.EventId, args.Number);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Volume
|
|
||||||
|
|
||||||
private const ushort CrestronLevelMin = 0;
|
|
||||||
private const ushort CrestronLevelMax = 65535;
|
|
||||||
|
|
||||||
private const int DeviceLevelMin = -800;
|
|
||||||
private const int DeviceLevelMax = 200;
|
|
||||||
|
|
||||||
private const int RampTime = 5000;
|
|
||||||
|
|
||||||
private int _volumeLevel;
|
|
||||||
|
|
||||||
public int VolumeLevel
|
|
||||||
{
|
|
||||||
get { return _volumeLevel; }
|
|
||||||
private set
|
|
||||||
{
|
|
||||||
var level = value;
|
|
||||||
|
|
||||||
_volumeLevel = CrestronEnvironment.ScaleWithLimits(level, DeviceLevelMax, DeviceLevelMin, CrestronLevelMax, CrestronLevelMin);
|
|
||||||
|
|
||||||
Debug.Console(2, this, "VolumeFeedback: level-'{0}', scaled-'{1}'", level, _volumeLevel);
|
|
||||||
|
|
||||||
VolumeLevelFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public IntFeedback VolumeLevelFeedback { get; private set; }
|
|
||||||
|
|
||||||
public void SetVolume(ushort level)
|
|
||||||
{
|
|
||||||
var levelScaled = CrestronEnvironment.ScaleWithLimits(level, CrestronLevelMax, CrestronLevelMin, DeviceLevelMax, DeviceLevelMin);
|
|
||||||
|
|
||||||
Debug.Console(1, this, "SetVolume: level-'{0}', levelScaled-'{1}'", level, levelScaled);
|
|
||||||
|
|
||||||
_mixer.Volume.ShortValue = (short)levelScaled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void VolumeUp(bool pressRelease)
|
|
||||||
{
|
|
||||||
if (pressRelease)
|
|
||||||
{
|
|
||||||
_mixer.Volume.CreateSignedRamp(DeviceLevelMax, RampTime);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_mixer.Volume.StopRamp();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void VolumeDown(bool pressRelease)
|
|
||||||
{
|
|
||||||
if (pressRelease)
|
|
||||||
{
|
|
||||||
_mixer.Volume.CreateSignedRamp(DeviceLevelMin, RampTime);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_mixer.Volume.StopRamp();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region Mute
|
|
||||||
|
|
||||||
private bool _isMuted;
|
|
||||||
|
|
||||||
public bool IsMuted
|
|
||||||
{
|
|
||||||
get { return _isMuted; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_isMuted = value;
|
|
||||||
|
|
||||||
Debug.Console(1, this, "IsMuted: _isMuted-'{0}'", _isMuted);
|
|
||||||
|
|
||||||
MuteFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public BoolFeedback MuteFeedback { get; private set; }
|
|
||||||
|
|
||||||
public void MuteOn()
|
|
||||||
{
|
|
||||||
_port.MuteOn();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void MuteOff()
|
|
||||||
{
|
|
||||||
_port.MuteOff();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void MuteToggle()
|
|
||||||
{
|
|
||||||
if (IsMuted)
|
|
||||||
MuteOff();
|
|
||||||
else
|
|
||||||
MuteOn();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,41 +1,26 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="$(TargetDir)$(TargetName).$(Version).$(TargetFramework).cpz" Condition="$(ProjectType) == 'Program'">
|
<None Include="$(PackageOutputPath)\$(AssemblyName)\*.cpz" Condition="$(ProjectType) == 'Program'">
|
||||||
<Pack>true</Pack>
|
<Pack>true</Pack>
|
||||||
<PackagePath>build;</PackagePath>
|
<PackagePath>build;</PackagePath>
|
||||||
</None>
|
</None>
|
||||||
<None Include="$(TargetDir)$(TargetName).$(Version).$(TargetFramework).cplz" Condition="$(ProjectType) == 'ProgramLibrary'">
|
<None Include="$(PackageOutputPath)\$(AssemblyName)\*.cplz" Condition="$(ProjectType) == 'ProgramLibrary'">
|
||||||
<Pack>true</Pack>
|
<Pack>true</Pack>
|
||||||
<PackagePath>build;</PackagePath>
|
<PackagePath>build;</PackagePath>
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Condition="$(ProjectType) == 'ProgramLibrary'">
|
<Target Name="Create CPLZ" AfterTargets="Build; AfterRebuild" Condition="$(ProjectType) == 'ProgramLibrary' And $(TargetDir) != ''">
|
||||||
<FileName>$(TargetDir)$(TargetName).$(Version).$(TargetFramework).cplz</FileName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="$(ProjectType) == 'Program'">
|
|
||||||
<FileName>$(TargetDir)$(TargetName).$(Version).$(TargetFramework).cpz</FileName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Target Name="DeleteCPLZ" BeforeTargets="PreBuildEvent" Condition="$(ProjectType) == 'ProgramLibrary' And $(TargetDir) != '' And Exists($(FileName))">
|
|
||||||
<Delete Files="$(TargetDir)$(TargetName).$(Version).$(TargetFramework).cplz">
|
|
||||||
<Output TaskParameter="DeletedFiles" ItemName="DeletedList"/>
|
|
||||||
</Delete>
|
|
||||||
<Message Text="Deleted files: '@(DeletedList)'" />
|
|
||||||
</Target>
|
|
||||||
<Target Name="CreateCPLZ" AfterTargets="Build" Condition="$(ProjectType) == 'ProgramLibrary' And $(TargetDir) != ''" DependsOnTargets="DeleteCPLZ">
|
|
||||||
<Message Text="Creating CPLZ $(TargetDir)"></Message>
|
<Message Text="Creating CPLZ $(TargetDir)"></Message>
|
||||||
<MakeDir Directories="$(PackageOutputPath)" Condition="!Exists($(PackageOutputPath))" />
|
<MakeDir Directories="$(PackageOutputPath)" Condition="!Exists($(PackageOutputPath))" />
|
||||||
<ZipDirectory SourceDirectory="$(TargetDir)" DestinationFile="$(PackageOutputPath)\$(TargetName).$(Version).$(TargetFramework).cplz" Overwrite="true"/>
|
<MakeDir Directories="$(PackageOutputPath)\$(AssemblyName)" Condition="!Exists('$(PackageOutputPath)\$(AssemblyName)')" />
|
||||||
<Copy SourceFiles="$(PackageOutputPath)\$(TargetName).$(Version).$(TargetFramework).cplz" DestinationFiles="$(TargetDir)$(TargetName).$(Version).$(TargetFramework).cplz" />
|
<ZipDirectory SourceDirectory="$(TargetDir)" DestinationFile="$(PackageOutputPath)\$(AssemblyName)\$(TargetName).$(Version).$(TargetFramework).cplz" Overwrite="true"/>
|
||||||
</Target>
|
</Target>
|
||||||
<Target Name="DeleteCPZ" BeforeTargets="PreBuildEvent" Condition="$(ProjectType) == 'Program' And $(TargetDir) != '' And Exists($(FileName))">
|
<Target Name="Copy CPZ NET6" AfterTargets="SimplSharpPostProcess" Condition="($(ProjectType) == 'Program' And ( '$(TargetFramework)' == 'net6.0' ) Or ( '$(TargetFramework)' == 'net8.0' ))">
|
||||||
<Delete Files="$(TargetDir)$(TargetName).$(Version).$(TargetFramework).cpz">
|
|
||||||
<Output TaskParameter="DeletedFiles" ItemName="DeletedList"/>
|
|
||||||
</Delete>
|
|
||||||
<Message Text="Deleted files: '@(DeletedList)'" />
|
|
||||||
</Target>
|
|
||||||
<Target Name="Copy CPZ" AfterTargets="SimplSharpPostProcess" Condition="($(ProjectType) == 'Program' And ( '$(TargetFramework)' != 'net6.0' ) And ( '$(TargetFramework)' != 'net8.0' ))">
|
|
||||||
<Message Text="Copying CPZ"></Message>
|
<Message Text="Copying CPZ"></Message>
|
||||||
<Move SourceFiles="$(TargetDir)$(TargetName).cpz" DestinationFiles="$(TargetDir)$(TargetName).$(Version).$(TargetFramework).cpz" />
|
<Move SourceFiles="$(TargetDir)$(TargetName).cpz" DestinationFiles="$(PackageOutputPath)\$(AssemblyName)\$(TargetName).$(Version).$(TargetFramework).cpz" />
|
||||||
<Copy SourceFiles="$(TargetDir)$(TargetName).$(Version).$(TargetFramework).cpz" DestinationFiles="$(PackageOutputPath)\$(TargetName).$(Version).$(TargetFramework).cpz" />
|
</Target>
|
||||||
|
<Target Name="Copy CPZ NET47" AfterTargets="SimplSharpPostProcess47" Condition="($(ProjectType) == 'Program' And ( '$(TargetFramework)' != 'net6.0' ) And ( '$(TargetFramework)' != 'net8.0' ))">
|
||||||
|
<Message Text="Copying CPZ"></Message>
|
||||||
|
<Move SourceFiles="$(TargetDir)$(TargetName).cpz" DestinationFiles="$(PackageOutputPath)\$(AssemblyName)\$(TargetName).$(Version).$(TargetFramework).cpz" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.Bridges
|
namespace PepperDash.Essentials.Core.Bridges
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.Bridges
|
namespace PepperDash.Essentials.Core.Bridges
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents a generic digital input deviced tied to a versiport
|
/// Represents a generic digital input deviced tied to a versiport
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class GenericVersiportDigitalInputDevice : EssentialsBridgeableDevice, IDigitalInput, IPartitionStateProvider
|
public class GenericVersiportDigitalInputDevice : EssentialsBridgeableDevice, IDigitalInput
|
||||||
{
|
{
|
||||||
public Versiport InputPort { get; private set; }
|
public Versiport InputPort { get; private set; }
|
||||||
|
|
||||||
@@ -35,15 +35,10 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BoolFeedback PartitionPresentFeedback { get; }
|
|
||||||
|
|
||||||
public bool PartitionPresent => !InputStateFeedbackFunc();
|
|
||||||
|
|
||||||
public GenericVersiportDigitalInputDevice(string key, string name, Func<IOPortConfig, Versiport> postActivationFunc, IOPortConfig config) :
|
public GenericVersiportDigitalInputDevice(string key, string name, Func<IOPortConfig, Versiport> postActivationFunc, IOPortConfig config) :
|
||||||
base(key, name)
|
base(key, name)
|
||||||
{
|
{
|
||||||
InputStateFeedback = new BoolFeedback(InputStateFeedbackFunc);
|
InputStateFeedback = new BoolFeedback(InputStateFeedbackFunc);
|
||||||
PartitionPresentFeedback = new BoolFeedback(() => !InputStateFeedbackFunc());
|
|
||||||
|
|
||||||
AddPostActivationAction(() =>
|
AddPostActivationAction(() =>
|
||||||
{
|
{
|
||||||
@@ -57,8 +52,7 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
|
|
||||||
InputPort.VersiportChange += InputPort_VersiportChange;
|
InputPort.VersiportChange += InputPort_VersiportChange;
|
||||||
|
|
||||||
InputStateFeedback.FireUpdate();
|
|
||||||
PartitionPresentFeedback.FireUpdate();
|
|
||||||
|
|
||||||
Debug.LogMessage(LogEventLevel.Debug, this, "Created GenericVersiportDigitalInputDevice on port '{0}'. DisablePullUpResistor: '{1}'", config.PortNumber, InputPort.DisablePullUpResistor);
|
Debug.LogMessage(LogEventLevel.Debug, this, "Created GenericVersiportDigitalInputDevice on port '{0}'. DisablePullUpResistor: '{1}'", config.PortNumber, InputPort.DisablePullUpResistor);
|
||||||
|
|
||||||
@@ -71,10 +65,7 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
Debug.LogMessage(LogEventLevel.Debug, this, "Versiport change: {0}", args.Event);
|
Debug.LogMessage(LogEventLevel.Debug, this, "Versiport change: {0}", args.Event);
|
||||||
|
|
||||||
if(args.Event == eVersiportEvent.DigitalInChange)
|
if(args.Event == eVersiportEvent.DigitalInChange)
|
||||||
{
|
|
||||||
InputStateFeedback.FireUpdate();
|
InputStateFeedback.FireUpdate();
|
||||||
PartitionPresentFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
|
||||||
{
|
|
||||||
public interface IEmergencyOSD
|
|
||||||
{
|
|
||||||
void ShowEmergencyMessage(string url);
|
|
||||||
void HideEmergencyMessage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
@@ -9,6 +11,7 @@ using System.Linq;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
namespace PepperDash.Essentials.Core
|
||||||
{
|
{
|
||||||
public class DeviceJsonApi
|
public class DeviceJsonApi
|
||||||
@@ -138,26 +141,18 @@ namespace PepperDash.Essentials.Core
|
|||||||
.Select((p, i) => ConvertType(action.Params[i], p.ParameterType))
|
.Select((p, i) => ConvertType(action.Params[i], p.ParameterType))
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
try
|
await Task.Run(() =>
|
||||||
{
|
{
|
||||||
Debug.LogMessage(LogEventLevel.Verbose, "Calling method {methodName} on device {deviceKey} with {@params}", null, method.Name, action.DeviceKey, action.Params);
|
try
|
||||||
var result = method.Invoke(obj, convertedParams);
|
|
||||||
|
|
||||||
// If the method returns a Task, await it
|
|
||||||
if (result is Task task)
|
|
||||||
{
|
{
|
||||||
await task;
|
Debug.LogMessage(LogEventLevel.Verbose, "Calling method {methodName} on device {deviceKey} with {@params}", null, method.Name, action.DeviceKey, action.Params);
|
||||||
|
method.Invoke(obj, convertedParams);
|
||||||
}
|
}
|
||||||
// If the method returns a Task<T>, await it
|
catch (Exception e)
|
||||||
else if (result != null && result.GetType().IsGenericType && result.GetType().GetGenericTypeDefinition() == typeof(Task<>))
|
|
||||||
{
|
{
|
||||||
await (Task)result;
|
Debug.LogMessage(e, "Error invoking method {methodName} on device {deviceKey}", null, method.Name, action.DeviceKey);
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Debug.LogMessage(e, "Error invoking method {methodName} on device {deviceKey}", null, method.Name, action.DeviceKey);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<Configurations>Debug;Release;Debug 4.7.2</Configurations>
|
<Configurations>Debug;Release;Debug 4.7.2</Configurations>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net472</TargetFramework>
|
<TargetFrameworks>net472;net6</TargetFrameworks>
|
||||||
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
|
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
|
||||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||||
<AssemblyName>PepperDash_Essentials_Core</AssemblyName>
|
<AssemblyName>PepperDash_Essentials_Core</AssemblyName>
|
||||||
@@ -25,8 +25,8 @@
|
|||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Crestron.SimplSharp.SDK.ProgramLibrary" Version="2.21.90" />
|
<PackageReference Include="Crestron.SimplSharp.SDK.ProgramLibrary" Version="2.20.66" />
|
||||||
<PackageReference Include="PepperDashCore" Version="2.0.1" />
|
<PackageReference Include="PepperDashCore" Version="2.0.0-alpha-424" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Crestron\CrestronGenericBaseDevice.cs.orig" />
|
<None Include="Crestron\CrestronGenericBaseDevice.cs.orig" />
|
||||||
|
|||||||
432
src/PepperDash.Essentials.Core/PepperDash_Essentials_Core.csproj
Normal file
432
src/PepperDash.Essentials.Core/PepperDash_Essentials_Core.csproj
Normal file
@@ -0,0 +1,432 @@
|
|||||||
|
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProductVersion>9.0.30729</ProductVersion>
|
||||||
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
|
<ProjectGuid>{A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>PepperDash.Essentials.Core</RootNamespace>
|
||||||
|
<AssemblyName>PepperDash_Essentials_Core</AssemblyName>
|
||||||
|
<ProjectTypeGuids>{0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
|
<PlatformFamilyName>WindowsCE</PlatformFamilyName>
|
||||||
|
<PlatformID>E2BECB1F-8C8C-41ba-B736-9BE7D946A398</PlatformID>
|
||||||
|
<OSVersion>5.0</OSVersion>
|
||||||
|
<DeployDirSuffix>SmartDeviceProject1</DeployDirSuffix>
|
||||||
|
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||||
|
<NativePlatformName>Windows CE</NativePlatformName>
|
||||||
|
<FormFactorID>
|
||||||
|
</FormFactorID>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<AllowedReferenceRelatedFileExtensions>.allowedReferenceRelatedFileExtensions</AllowedReferenceRelatedFileExtensions>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE;</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<NoStdLib>true</NoStdLib>
|
||||||
|
<NoConfig>true</NoConfig>
|
||||||
|
<GenerateSerializationAssemblies>off</GenerateSerializationAssemblies>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<AllowedReferenceRelatedFileExtensions>.allowedReferenceRelatedFileExtensions</AllowedReferenceRelatedFileExtensions>
|
||||||
|
<DebugType>none</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\</OutputPath>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<NoStdLib>true</NoStdLib>
|
||||||
|
<NoConfig>true</NoConfig>
|
||||||
|
<GenerateSerializationAssemblies>off</GenerateSerializationAssemblies>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Crestron.SimplSharpPro.DeviceSupport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Crestron.SimplSharpPro.DM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DM.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Crestron.SimplSharpPro.EthernetCommunications, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.EthernetCommunications.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Crestron.SimplSharpPro.Fusion, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Fusion.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Crestron.SimplSharpPro.Gateways, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Gateways.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Crestron.SimplSharpPro.GeneralIO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.GeneralIO.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Crestron.SimplSharpPro.Remotes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Remotes.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Crestron.SimplSharpPro.ThreeSeriesCards, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.ThreeSeriesCards.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Crestron.SimplSharpPro.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="mscorlib" />
|
||||||
|
<Reference Include="PepperDash_Core, Version=1.2.1.30543, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\packages\PepperDashCore\lib\net35\PepperDash_Core.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SimplSharpCustomAttributesInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll</HintPath>
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SimplSharpCWSHelperInterface, Version=2.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCWSHelperInterface.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SimplSharpHelperInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll</HintPath>
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SimplSharpNewtonsoft, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SimplSharpPro, Version=1.5.3.17, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe</HintPath>
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SimplSharpReflectionInterface, Version=1.0.5583.25238, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SimplSharpTimerEventInterface, Version=1.0.6197.20052, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpTimerEventInterface.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Bridges\BridgeBase.cs" />
|
||||||
|
<Compile Include="Bridges\IBridge.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\AirMediaControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\AppleTvJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\GenericIrControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\HdPsXxxControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\IAnalogInputJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\IDigitalOutputJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\PduJoinMapBase.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\C2nRthsControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\CameraControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\CenOdtOccupancySensorBaseJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\DigitalLoggerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\DisplayControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\DmBladeChassisControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\DmChassisControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\DmpsAudioOutputControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\DmpsMicrophoneControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\DmpsRoutingControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\DmRmcControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\DmTxControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\GenericLightingJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\GenericRelayControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\GlsOccupancySensorBaseJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\GlsPartitionSensorJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\HdMdNxM4kEControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\HdMdxxxCEControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\Hrxxx0WirelessRemoteControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\IBasicCommunicationJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\IDigitalInputJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\IRBlurayBaseJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\SetTopBoxControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\StatusSignControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\SystemMonitorJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\VideoCodecControllerJoinMap.cs" />
|
||||||
|
<Compile Include="Comm and IR\CecPortController.cs" />
|
||||||
|
<Compile Include="Comm and IR\CommFactory.cs" />
|
||||||
|
<Compile Include="Comm and IR\CommunicationExtras.cs" />
|
||||||
|
<Compile Include="Comm and IR\ComPortController.cs" />
|
||||||
|
<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\GenericHttpClient.cs" />
|
||||||
|
<Compile Include="Comm and IR\IRPortHelper.cs" />
|
||||||
|
<Compile Include="Config\Essentials\ConfigUpdater.cs" />
|
||||||
|
<Compile Include="Config\Essentials\ConfigReader.cs" />
|
||||||
|
<Compile Include="Config\Essentials\ConfigWriter.cs" />
|
||||||
|
<Compile Include="Config\Essentials\EssentialsConfig.cs" />
|
||||||
|
<Compile Include="Config\SourceDevicePropertiesConfigBase.cs" />
|
||||||
|
<Compile Include="Crestron IO\C2nIo\C2nIoController.cs" />
|
||||||
|
<Compile Include="Crestron IO\C2nRts\C2nRthsController.cs" />
|
||||||
|
<Compile Include="Crestron IO\Cards\C3CardControllerBase.cs" />
|
||||||
|
<Compile Include="Crestron IO\Cards\C3Com3Controller.cs" />
|
||||||
|
<Compile Include="Crestron IO\Cards\C3Io16Controller.cs" />
|
||||||
|
<Compile Include="Crestron IO\Cards\C3Ir8Controller.cs" />
|
||||||
|
<Compile Include="Crestron IO\Cards\C3Ry16Controller.cs" />
|
||||||
|
<Compile Include="Crestron IO\Cards\C3Ry8Controller.cs" />
|
||||||
|
<Compile Include="Crestron IO\Cards\CenCi31Controller.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Crestron IO\Cards\CenCi33Controller.cs" />
|
||||||
|
<Compile Include="Crestron IO\Cards\InternalCardCageController.cs" />
|
||||||
|
<Compile Include="Crestron IO\DinCenCn\DinCenCnController.cs" />
|
||||||
|
<Compile Include="Crestron IO\DinCenCn\IHasCresnetBranches.cs" />
|
||||||
|
<Compile Include="Crestron IO\DinIo8\DinIo8Controller.cs" />
|
||||||
|
<Compile Include="Crestron IO\Inputs\CenIoDigIn104Controller.cs" />
|
||||||
|
<Compile Include="Crestron IO\Inputs\GenericVersiportAnalogInputDevice.cs" />
|
||||||
|
<Compile Include="Crestron IO\Inputs\GenericDigitalInputDevice.cs" />
|
||||||
|
<Compile Include="Crestron IO\Inputs\GenericVersiportInputDevice.cs" />
|
||||||
|
<Compile Include="Crestron IO\Inputs\IAnalogInput.cs" />
|
||||||
|
<Compile Include="Crestron IO\Inputs\IDigitalInput.cs" />
|
||||||
|
<Compile Include="Crestron IO\IOPortConfig.cs" />
|
||||||
|
<Compile Include="Crestron IO\Ir\CenIoIr104Controller.cs" />
|
||||||
|
<Compile Include="Crestron IO\Outputs\GenericVersiportOutputDevice.cs" />
|
||||||
|
<Compile Include="Crestron IO\Outputs\IDigitalOutput.cs" />
|
||||||
|
<Compile Include="Crestron IO\Relay\CenIoRy104Controller.cs" />
|
||||||
|
<Compile Include="Crestron IO\Relay\GenericRelayDevice.cs" />
|
||||||
|
<Compile Include="Crestron IO\Relay\ISwitchedOutput.cs" />
|
||||||
|
<Compile Include="Crestron IO\StatusSign\StatusSignController.cs" />
|
||||||
|
<Compile Include="Device Info\NetworkDeviceHelpers.cs" />
|
||||||
|
<Compile Include="Devices\PowerInterfaces.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\AppDebugRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\GetFeedbacksForDeviceRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\EssentialsWebApiHelpers.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\GetTypesByFilterRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\GetJoinMapForDeviceKeyRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\DefaultRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\DevListRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\DevPropsRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\DevJsonRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\SetDeviceStreamDebugRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\DisableAllStreamDebugRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\ShowConfigRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\GetTypesRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\GetJoinMapForBridgeKeyRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\EssemtialsWebApi.cs" />
|
||||||
|
<Compile Include="Web\EssentialsWebApiFactory.cs" />
|
||||||
|
<Compile Include="Web\EssentialsWebApiPropertiesConfig.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\ReportVersionsRequestHandler.cs" />
|
||||||
|
<Compile Include="Device Info\DeviceInfo.cs" />
|
||||||
|
<Compile Include="Device Info\DeviceInfoEventArgs.cs" />
|
||||||
|
<Compile Include="Device Info\IDeviceInfoProvider.cs" />
|
||||||
|
<Compile Include="Devices\CodecInterfaces.cs" />
|
||||||
|
<Compile Include="Devices\CrestronProcessor.cs" />
|
||||||
|
<Compile Include="Devices\DestinationListItem.cs" />
|
||||||
|
<Compile Include="Devices\DeviceApiBase.cs" />
|
||||||
|
<Compile Include="Devices\DeviceFeedbackExtensions.cs" />
|
||||||
|
<Compile Include="Devices\EssentialsBridgeableDevice.cs" />
|
||||||
|
<Compile Include="Devices\EssentialsDevice.cs" />
|
||||||
|
<Compile Include="Devices\GenericIRController.cs" />
|
||||||
|
<Compile Include="Devices\IDspPreset.cs" />
|
||||||
|
<Compile Include="Devices\IProjectorInterfaces.cs" />
|
||||||
|
<Compile Include="Devices\IReconfigurableDevice.cs" />
|
||||||
|
<Compile Include="Devices\PC\InRoomPc.cs" />
|
||||||
|
<Compile Include="Devices\PC\Laptop.cs" />
|
||||||
|
<Compile Include="Devices\PduInterfaces.cs" />
|
||||||
|
<Compile Include="Devices\ReconfigurableDevice.cs" />
|
||||||
|
<Compile Include="Devices\VolumeDeviceChangeEventArgs.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IPasswordPrompt.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\ITvPresetsProvider.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\LanguageLabel.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\ILanguageProvider.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IHasBranding.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\ILanguageDefinition.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IHasFarEndContentStatus.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IHasPhoneDialing.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IMobileControl.cs" />
|
||||||
|
<Compile Include="Extensions\JsonExtensions.cs" />
|
||||||
|
<Compile Include="Extensions\StringExtensions.cs" />
|
||||||
|
<Compile Include="Factory\DeviceFactory.cs" />
|
||||||
|
<Compile Include="Factory\IDeviceFactory.cs" />
|
||||||
|
<Compile Include="Factory\ReadyEventArgs.cs" />
|
||||||
|
<Compile Include="Feedbacks\BoolFeedback.cs" />
|
||||||
|
<Compile Include="Feedbacks\FeedbackCollection.cs" />
|
||||||
|
<Compile Include="Feedbacks\FeedbackEventArgs.cs" />
|
||||||
|
<Compile Include="Feedbacks\IntFeedback.cs" />
|
||||||
|
<Compile Include="Feedbacks\SerialFeedback.cs" />
|
||||||
|
<Compile Include="Feedbacks\StringFeedback.cs" />
|
||||||
|
<Compile Include="File\FileIO.cs" />
|
||||||
|
<Compile Include="Fusion\EssentialsHuddleSpaceFusionSystemControllerBase.cs" />
|
||||||
|
<Compile Include="Fusion\FusionCustomPropertiesBridge.cs" />
|
||||||
|
<Compile Include="Fusion\FusionEventHandlers.cs" />
|
||||||
|
<Compile Include="Fusion\FusionProcessorQueries.cs" />
|
||||||
|
<Compile Include="Fusion\EssentialsHuddleSpaceRoomFusionRoomJoinMap.cs" />
|
||||||
|
<Compile Include="Fusion\FusionRviDataClasses.cs" />
|
||||||
|
<Compile Include="Gateways\CenRfgwController.cs" />
|
||||||
|
<Compile Include="Gateways\EssentialsRfGatewayConfig.cs" />
|
||||||
|
<Compile Include="Global\EthernetAdapterInfo.cs" />
|
||||||
|
<Compile Include="Interfaces\ILogStrings.cs" />
|
||||||
|
<Compile Include="Interfaces\ILogStringsWithLevel.cs" />
|
||||||
|
<Compile Include="Occupancy\GlsOccupancySensorPropertiesConfig.cs" />
|
||||||
|
<Compile Include="Occupancy\GlsOirOccupancySensorController.cs" />
|
||||||
|
<Compile Include="PartitionSensor\EssentialsPartitionController.cs" />
|
||||||
|
<Compile Include="PartitionSensor\GlsPartitionSensorPropertiesConfig.cs" />
|
||||||
|
<Compile Include="PartitionSensor\IPartitionStateProvider.cs" />
|
||||||
|
<Compile Include="Occupancy\OccupancyAggregatorConfig.cs" />
|
||||||
|
<Compile Include="Queues\ComsMessage.cs" />
|
||||||
|
<Compile Include="Queues\ProcessStringMessage.cs" />
|
||||||
|
<Compile Include="Queues\GenericQueue.cs" />
|
||||||
|
<Compile Include="Global\JobTimer.cs" />
|
||||||
|
<Compile Include="Global\Scheduler.cs" />
|
||||||
|
<Compile Include="Queues\IQueue.cs" />
|
||||||
|
<Compile Include="JoinMaps\JoinMapBase.cs" />
|
||||||
|
<Compile Include="Lighting\Lighting Interfaces.cs" />
|
||||||
|
<Compile Include="Lighting\LightingBase.cs" />
|
||||||
|
<Compile Include="Monitoring\SystemMonitorController.cs" />
|
||||||
|
<Compile Include="Microphone Privacy\MicrophonePrivacyController.cs" />
|
||||||
|
<Compile Include="Microphone Privacy\MicrophonePrivacyControllerConfig.cs" />
|
||||||
|
<Compile Include="Occupancy\CenOdtOccupancySensorBaseController.cs" />
|
||||||
|
<Compile Include="Occupancy\GlsOccupancySensorBaseController.cs" />
|
||||||
|
<Compile Include="Occupancy\GlsOdtOccupancySensorController.cs" />
|
||||||
|
<Compile Include="Occupancy\IOccupancyStatusProviderAggregator.cs" />
|
||||||
|
<Compile Include="PartitionSensor\GlsPartitionSensorController.cs" />
|
||||||
|
<Compile Include="Plugins\PluginLoader.cs" />
|
||||||
|
<Compile Include="Presets\PresetBase.cs" />
|
||||||
|
<Compile Include="Plugins\IPluginDeviceFactory.cs" />
|
||||||
|
<Compile Include="Queues\IQueueMessage.cs" />
|
||||||
|
<Compile Include="Ramps and Increments\ActionIncrementer.cs" />
|
||||||
|
<Compile Include="Config\BasicConfig.cs" />
|
||||||
|
<Compile Include="Config\ConfigPropertiesHelpers.cs" />
|
||||||
|
<Compile Include="Config\InfoConfig.cs" />
|
||||||
|
<Compile Include="Config\DeviceConfig.cs" />
|
||||||
|
<Compile Include="Devices\DisplayUiConstants.cs" />
|
||||||
|
<Compile Include="Devices\IUsageTracking.cs" />
|
||||||
|
<Compile Include="Devices\DeviceJsonApi.cs" />
|
||||||
|
<Compile Include="Devices\SourceListItem.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IDisplayBasic.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IDumbSource.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IWarmingCooling.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IDiscPlayerControls.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IPower.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IUiDisplayInfo.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\ISetTopBoxControls.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IChannel.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IColorFunctions.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IDPad.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\IDvr.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\Template.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\ITransport.cs" />
|
||||||
|
<Compile Include="Devices\GenericMonitoredTcpDevice.cs" />
|
||||||
|
<Compile Include="DeviceTypeInterfaces\INumeric.cs" />
|
||||||
|
<Compile Include="Devices\IVolumeAndAudioInterfaces.cs" />
|
||||||
|
<Compile Include="Display\BasicIrDisplay.cs" />
|
||||||
|
<Compile Include="Feedbacks\BoolFeedbackOneShot.cs" />
|
||||||
|
<Compile Include="Ramps and Increments\NumericalHelpers.cs" />
|
||||||
|
<Compile Include="Ramps and Increments\UshortSigIncrementer.cs" />
|
||||||
|
<Compile Include="Remotes\ButtonExtensions.cs" />
|
||||||
|
<Compile Include="Remotes\CrestronRemotePropertiesConfig.cs" />
|
||||||
|
<Compile Include="Remotes\Hrxx0WirelessRemoteController.cs" />
|
||||||
|
<Compile Include="Room\Behaviours\RoomOnToDefaultSourceWhenOccupied.cs" />
|
||||||
|
<Compile Include="Room\Combining\EssentialsRoomCombiner.cs" />
|
||||||
|
<Compile Include="Room\Combining\EssentialsRoomCombinerPropertiesConfig.cs" />
|
||||||
|
<Compile Include="Room\Combining\IEssentialsRoomCombiner.cs" />
|
||||||
|
<Compile Include="Room\Combining\RoomCombinationScenario.cs" />
|
||||||
|
<Compile Include="Room\EssentialsRoomBase.cs" />
|
||||||
|
<Compile Include="Room\Config\EssentialsRoomScheduledEventsConfig.cs" />
|
||||||
|
<Compile Include="Room\IEssentialsRoom.cs" />
|
||||||
|
<Compile Include="Room\Interfaces.cs" />
|
||||||
|
<Compile Include="Room\iOccupancyStatusProvider.cs" />
|
||||||
|
<Compile Include="Routing\DummyRoutingInputsDevice.cs" />
|
||||||
|
<Compile Include="Routing\ICardPortsDevice.cs" />
|
||||||
|
<Compile Include="InUseTracking\IInUseTracking.cs" />
|
||||||
|
<Compile Include="InUseTracking\InUseTracking.cs" />
|
||||||
|
<Compile Include="Routing\IRoutingInputsExtensions.cs" />
|
||||||
|
<Compile Include="Monitoring\StatusMonitorCollection.cs" />
|
||||||
|
<Compile Include="Monitoring\CrestronGenericBaseCommunicationMonitor.cs" />
|
||||||
|
<Compile Include="Monitoring\StatusMonitorBase.cs" />
|
||||||
|
<Compile Include="Monitoring\Interfaces.cs" />
|
||||||
|
<Compile Include="Monitoring\GenericCommunicationMonitor.cs" />
|
||||||
|
<Compile Include="Devices\AudioInterfaces.cs" />
|
||||||
|
<Compile Include="Devices\IAttachVideoStatusExtensions.cs" />
|
||||||
|
<Compile Include="Devices\IHasFeedbacks.cs" />
|
||||||
|
<Compile Include="Devices\SmartObjectBaseTypes.cs" />
|
||||||
|
<Compile Include="Devices\PresentationDeviceType.cs" />
|
||||||
|
<Compile Include="Display\MockDisplay.cs" />
|
||||||
|
<Compile Include="Ethernet\EthernetStatistics.cs" />
|
||||||
|
<Compile Include="Global\Global.cs" />
|
||||||
|
<Compile Include="License\EssentialsLicenseManager.cs" />
|
||||||
|
<Compile Include="Feedbacks\BoolOutputLogicals.cs" />
|
||||||
|
<Compile Include="Presets\Interfaces.cs" />
|
||||||
|
<Compile Include="Presets\PresetsListSubpageReferenceListItem.cs" />
|
||||||
|
<Compile Include="Presets\DevicePresetsView.cs" />
|
||||||
|
<Compile Include="Presets\PresetChannel.cs" />
|
||||||
|
<Compile Include="Presets\DevicePresets.cs" />
|
||||||
|
<Compile Include="Routing\RoutingInterfaces.cs" />
|
||||||
|
<Compile Include="Routing\RoutingPort.cs" />
|
||||||
|
<Compile Include="Routing\RoutingPortCollection.cs" />
|
||||||
|
<Compile Include="Feedbacks\BoolFeedbackPulseExtender.cs" />
|
||||||
|
<Compile Include="Routing\RoutingPortNames.cs" />
|
||||||
|
<Compile Include="Routing\TieLineConfig.cs" />
|
||||||
|
<Compile Include="Secrets\CrestronGlobalSecretsProvider.cs" />
|
||||||
|
<Compile Include="Secrets\CrestronLocalSecretsProvider.cs" />
|
||||||
|
<Compile Include="Secrets\CrestronSecret.cs" />
|
||||||
|
<Compile Include="Secrets\Interfaces.cs" />
|
||||||
|
<Compile Include="Secrets\SecretsManager.cs" />
|
||||||
|
<Compile Include="Secrets\SecretsPropertiesConfig.cs" />
|
||||||
|
<Compile Include="Shades\Shade Interfaces.cs" />
|
||||||
|
<Compile Include="Shades\ShadeBase.cs" />
|
||||||
|
<Compile Include="Shades\ShadeController.cs" />
|
||||||
|
<Compile Include="SmartObjects\SmartObjectNumeric.cs" />
|
||||||
|
<Compile Include="SmartObjects\SmartObjectDynamicList.cs" />
|
||||||
|
<Compile Include="SmartObjects\SmartObjectDPad.cs" />
|
||||||
|
<Compile Include="SmartObjects\SmartObjectHelperBase.cs" />
|
||||||
|
<Compile Include="Routing\TieLine.cs" />
|
||||||
|
<Compile Include="Queues\StringResponseProcessor.cs" />
|
||||||
|
<Compile Include="Timers\CountdownTimer.cs" />
|
||||||
|
<Compile Include="Timers\RetriggerableTimer.cs" />
|
||||||
|
<Compile Include="Touchpanels\CrestronTouchpanelPropertiesConfig.cs" />
|
||||||
|
<Compile Include="Touchpanels\Interfaces.cs" />
|
||||||
|
<Compile Include="Touchpanels\Keyboards\HabaneroKeyboardController.cs" />
|
||||||
|
<Compile Include="Touchpanels\Mpc3Touchpanel.cs" />
|
||||||
|
<Compile Include="Touchpanels\TriListExtensions.cs" />
|
||||||
|
<Compile Include="UI PageManagers\BlurayPageManager.cs" />
|
||||||
|
<Compile Include="UI PageManagers\SetTopBoxThreePanelPageManager.cs" />
|
||||||
|
<Compile Include="UI PageManagers\SinglePageManager.cs" />
|
||||||
|
<Compile Include="UI PageManagers\PageManager.cs" />
|
||||||
|
<Compile Include="UI PageManagers\SetTopBoxTwoPanelPageManager.cs" />
|
||||||
|
<Compile Include="UI\TouchpanelBase.cs" />
|
||||||
|
<Compile Include="Utilities\ActionSequence.cs" />
|
||||||
|
<Compile Include="VideoStatus\VideoStatusOutputs.cs" />
|
||||||
|
<Compile Include="Crestron\CrestronGenericBaseDevice.cs" />
|
||||||
|
<Compile Include="DeviceControlsParentInterfaces\IPresentationSource.cs" />
|
||||||
|
<Compile Include="Devices\DeviceManager.cs" />
|
||||||
|
<Compile Include="Devices\IrOutputPortController.cs" />
|
||||||
|
<Compile Include="Display\DisplayBase.cs" />
|
||||||
|
<Compile Include="Feedbacks\FeedbackBase.cs" />
|
||||||
|
<Compile Include="Room\Room.cs" />
|
||||||
|
<Compile Include="SmartObjects\SubpageReferencList\SourceListSubpageReferenceList.cs" />
|
||||||
|
<Compile Include="Touchpanels\ModalDialog.cs" />
|
||||||
|
<Compile Include="TriListBridges\HandlerBridge.cs" />
|
||||||
|
<Compile Include="Devices\FIND HOMES Interfaces.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="SigHelper.cs" />
|
||||||
|
<Compile Include="SmartObjects\SubpageReferencList\SubpageReferenceList.cs" />
|
||||||
|
<Compile Include="SmartObjects\SubpageReferencList\SubpageReferenceListItem.cs" />
|
||||||
|
<None Include="app.config" />
|
||||||
|
<None Include="Properties\ControlSystem.cfg" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />
|
||||||
|
<ProjectExtensions>
|
||||||
|
<VisualStudio>
|
||||||
|
</VisualStudio>
|
||||||
|
</ProjectExtensions>
|
||||||
|
<PropertyGroup>
|
||||||
|
<PostBuildEvent>rem S# Pro preparation will execute after these operations</PostBuildEvent>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -81,10 +81,12 @@ namespace PepperDash.Essentials.Core
|
|||||||
foreach (var action in activationActions)
|
foreach (var action in activationActions)
|
||||||
{
|
{
|
||||||
this.LogInformation("Running Activation action {@action}", action);
|
this.LogInformation("Running Activation action {@action}", action);
|
||||||
await DeviceJsonApi.DoDeviceActionAsync(action);
|
tasks.Add(DeviceJsonApi.DoDeviceActionAsync(action));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await Task.WhenAll(tasks);
|
||||||
|
|
||||||
IsActive = true;
|
IsActive = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,10 +101,12 @@ namespace PepperDash.Essentials.Core
|
|||||||
foreach (var action in deactivationActions)
|
foreach (var action in deactivationActions)
|
||||||
{
|
{
|
||||||
this.LogInformation("Running deactivation action {actionDeviceKey}:{actionMethod}", action.DeviceKey, action.MethodName);
|
this.LogInformation("Running deactivation action {actionDeviceKey}:{actionMethod}", action.DeviceKey, action.MethodName);
|
||||||
await DeviceJsonApi.DoDeviceActionAsync(action);
|
tasks.Add( DeviceJsonApi.DoDeviceActionAsync(action));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await Task.WhenAll(tasks);
|
||||||
|
|
||||||
IsActive = false;
|
IsActive = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
//switch on emergency type here. Right now only contact and shutdown
|
//switch on emergency type here. Right now only contact and shutdown
|
||||||
var e = new EssentialsRoomEmergencyContactClosure(room.Key + "-emergency", props.Emergency, room);
|
var e = new EssentialsRoomEmergencyContactClosure(room.Key + "-emergency", props.Emergency, room);
|
||||||
DeviceManager.AddDevice(e);
|
DeviceManager.AddDevice(e);
|
||||||
return e;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
public class EssentialsRoomEmergencyTriggerConfig
|
public class EssentialsRoomEmergencyTriggerConfig
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// contact,versiport
|
/// contact,
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Type { get; set; }
|
public string Type { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -4,16 +4,12 @@ using PepperDash.Essentials.Room.Config;
|
|||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
namespace PepperDash.Essentials.Core
|
||||||
{
|
{
|
||||||
public class EssentialsRoomEmergencyContactClosure : EssentialsRoomEmergencyBase, IEssentialsRoomEmergency
|
public class EssentialsRoomEmergencyContactClosure : EssentialsRoomEmergencyBase
|
||||||
{
|
{
|
||||||
public event EventHandler<EventArgs> EmergencyStateChange;
|
|
||||||
|
|
||||||
IEssentialsRoom Room;
|
IEssentialsRoom Room;
|
||||||
string Behavior;
|
string Behavior;
|
||||||
bool TriggerOnClose;
|
bool TriggerOnClose;
|
||||||
|
|
||||||
public bool InEmergency { get; private set; }
|
|
||||||
|
|
||||||
public EssentialsRoomEmergencyContactClosure(string key, EssentialsRoomEmergencyConfig config, IEssentialsRoom room) :
|
public EssentialsRoomEmergencyContactClosure(string key, EssentialsRoomEmergencyConfig config, IEssentialsRoom room) :
|
||||||
base(key)
|
base(key)
|
||||||
{
|
{
|
||||||
@@ -29,49 +25,14 @@ namespace PepperDash.Essentials.Core
|
|||||||
cs.DigitalInputPorts[portNum].StateChange += EsentialsRoomEmergencyContactClosure_StateChange;
|
cs.DigitalInputPorts[portNum].StateChange += EsentialsRoomEmergencyContactClosure_StateChange;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (config.Trigger.Type.Equals("versiport", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
var portNum = (uint)config.Trigger.Number;
|
|
||||||
if (portNum <= cs.NumberOfVersiPorts)
|
|
||||||
{
|
|
||||||
cs.VersiPorts[portNum].Register();
|
|
||||||
cs.VersiPorts[portNum].SetVersiportConfiguration(eVersiportConfiguration.DigitalInput);
|
|
||||||
cs.VersiPorts[portNum].DisablePullUpResistor = true;
|
|
||||||
cs.VersiPorts[portNum].VersiportChange += EssentialsRoomEmergencyContactClosure_VersiportChange;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Behavior = config.Behavior;
|
Behavior = config.Behavior;
|
||||||
TriggerOnClose = config.Trigger.TriggerOnClose;
|
TriggerOnClose = config.Trigger.TriggerOnClose;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void EssentialsRoomEmergencyContactClosure_VersiportChange(Versiport port, VersiportEventArgs args)
|
|
||||||
{
|
|
||||||
if (args.Event == eVersiportEvent.DigitalInChange)
|
|
||||||
{
|
|
||||||
ContactClosure_StateChange(port.DigitalIn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void EsentialsRoomEmergencyContactClosure_StateChange(DigitalInput digitalInput, DigitalInputEventArgs args)
|
void EsentialsRoomEmergencyContactClosure_StateChange(DigitalInput digitalInput, DigitalInputEventArgs args)
|
||||||
{
|
{
|
||||||
ContactClosure_StateChange(args.State);
|
if (args.State && TriggerOnClose || !args.State && !TriggerOnClose)
|
||||||
}
|
|
||||||
|
|
||||||
void ContactClosure_StateChange(bool portState)
|
|
||||||
{
|
|
||||||
if (portState && TriggerOnClose || !portState && !TriggerOnClose)
|
|
||||||
{
|
|
||||||
InEmergency = true;
|
|
||||||
if (EmergencyStateChange != null)
|
|
||||||
EmergencyStateChange(this, new EventArgs());
|
|
||||||
RunEmergencyBehavior();
|
RunEmergencyBehavior();
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
InEmergency = false;
|
|
||||||
if (EmergencyStateChange != null)
|
|
||||||
EmergencyStateChange(this, new EventArgs());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -83,14 +44,4 @@ namespace PepperDash.Essentials.Core
|
|||||||
Room.Shutdown();
|
Room.Shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Describes the functionality of a room emergency contact closure
|
|
||||||
/// </summary>
|
|
||||||
public interface IEssentialsRoomEmergency
|
|
||||||
{
|
|
||||||
event EventHandler<EventArgs> EmergencyStateChange;
|
|
||||||
|
|
||||||
bool InEmergency { get; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
using PepperDash.Essentials.Core.Queues;
|
using Serilog.Events;
|
||||||
using PepperDash.Essentials.Core.Routing;
|
|
||||||
using Serilog.Events;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
@@ -19,8 +17,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
{
|
{
|
||||||
private static readonly Dictionary<string, RouteRequest> RouteRequests = new Dictionary<string, RouteRequest>();
|
private static readonly Dictionary<string, RouteRequest> RouteRequests = new Dictionary<string, RouteRequest>();
|
||||||
|
|
||||||
private static readonly GenericQueue routeRequestQueue = new GenericQueue("routingQueue");
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets any existing RouteDescriptor for a destination, clears it using ReleaseRoute
|
/// Gets any existing RouteDescriptor for a destination, clears it using ReleaseRoute
|
||||||
/// and then attempts a new Route and if sucessful, stores that RouteDescriptor
|
/// and then attempts a new Route and if sucessful, stores that RouteDescriptor
|
||||||
@@ -37,15 +33,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
|
|
||||||
ReleaseAndMakeRoute(destination, source, signalType, inputPort, outputPort);
|
ReleaseAndMakeRoute(destination, source, signalType, inputPort, outputPort);
|
||||||
}
|
}
|
||||||
public static void ReleaseRoute(this IRoutingInputs destination)
|
|
||||||
{
|
|
||||||
routeRequestQueue.Enqueue(new ReleaseRouteQueueItem(ReleaseRouteInternal, destination, string.Empty));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void ReleaseRoute(this IRoutingInputs destination, string inputPortKey)
|
|
||||||
{
|
|
||||||
routeRequestQueue.Enqueue(new ReleaseRouteQueueItem(ReleaseRouteInternal, destination, inputPortKey));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void RemoveRouteRequestForDestination(string destinationKey)
|
public static void RemoveRouteRequestForDestination(string destinationKey)
|
||||||
{
|
{
|
||||||
@@ -58,6 +45,122 @@ namespace PepperDash.Essentials.Core
|
|||||||
Debug.LogMessage(LogEventLevel.Information, messageTemplate, null, destinationKey);
|
Debug.LogMessage(LogEventLevel.Information, messageTemplate, null, destinationKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void ReleaseAndMakeRoute(IRoutingInputs destination, IRoutingOutputs source, eRoutingSignalType signalType, RoutingInputPort destinationPort = null, RoutingOutputPort sourcePort = null)
|
||||||
|
{
|
||||||
|
if (destination == null) throw new ArgumentNullException(nameof(destination));
|
||||||
|
if (source == null) throw new ArgumentNullException(nameof(source));
|
||||||
|
if (destinationPort == null) Debug.LogMessage(LogEventLevel.Information, "Destination port is null");
|
||||||
|
if (sourcePort == null) Debug.LogMessage(LogEventLevel.Information, "Source port is null");
|
||||||
|
|
||||||
|
var routeRequest = new RouteRequest
|
||||||
|
{
|
||||||
|
Destination = destination,
|
||||||
|
DestinationPort = destinationPort,
|
||||||
|
Source = source,
|
||||||
|
SourcePort = sourcePort,
|
||||||
|
SignalType = signalType
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var coolingDevice = destination as IWarmingCooling;
|
||||||
|
|
||||||
|
//We already have a route request for this device, and it's a cooling device and is cooling
|
||||||
|
if (RouteRequests.TryGetValue(destination.Key, out RouteRequest existingRouteRequest) && coolingDevice != null && coolingDevice.IsCoolingDownFeedback.BoolValue == true)
|
||||||
|
{
|
||||||
|
coolingDevice.IsCoolingDownFeedback.OutputChange -= existingRouteRequest.HandleCooldown;
|
||||||
|
|
||||||
|
coolingDevice.IsCoolingDownFeedback.OutputChange += routeRequest.HandleCooldown;
|
||||||
|
|
||||||
|
RouteRequests[destination.Key] = routeRequest;
|
||||||
|
|
||||||
|
Debug.LogMessage(LogEventLevel.Information, "Device: {destination} is cooling down and already has a routing request stored. Storing new route request to route to source key: {sourceKey}", null, destination.Key, routeRequest.Source.Key);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//New Request
|
||||||
|
if (coolingDevice != null && coolingDevice.IsCoolingDownFeedback.BoolValue == true)
|
||||||
|
{
|
||||||
|
coolingDevice.IsCoolingDownFeedback.OutputChange += routeRequest.HandleCooldown;
|
||||||
|
|
||||||
|
RouteRequests.Add(destination.Key, routeRequest);
|
||||||
|
|
||||||
|
Debug.LogMessage(LogEventLevel.Information, "Device: {destination} is cooling down. Storing route request to route to source key: {sourceKey}", null, destination.Key, routeRequest.Source.Key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RouteRequests.ContainsKey(destination.Key) && coolingDevice != null && coolingDevice.IsCoolingDownFeedback.BoolValue == false)
|
||||||
|
{
|
||||||
|
var handledRequest = RouteRequests[destination.Key];
|
||||||
|
|
||||||
|
coolingDevice.IsCoolingDownFeedback.OutputChange -= handledRequest.HandleCooldown;
|
||||||
|
|
||||||
|
RouteRequests.Remove(destination.Key);
|
||||||
|
|
||||||
|
Debug.LogMessage(LogEventLevel.Information, "Device: {destination} is NOT cooling down. Removing stored route request and routing to source key: {sourceKey}", null, destination.Key, routeRequest.Source.Key);
|
||||||
|
}
|
||||||
|
|
||||||
|
destination.ReleaseRoute(destinationPort?.Key ?? string.Empty);
|
||||||
|
|
||||||
|
RunRouteRequest(routeRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void RunRouteRequest(RouteRequest request)
|
||||||
|
{
|
||||||
|
if (request.Source == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var (audioOrSingleRoute, videoRoute) = request.Destination.GetRouteToSource(request.Source, request.SignalType, request.DestinationPort, request.SourcePort);
|
||||||
|
|
||||||
|
if (audioOrSingleRoute == null && videoRoute == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(audioOrSingleRoute);
|
||||||
|
|
||||||
|
if (videoRoute != null)
|
||||||
|
{
|
||||||
|
RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(videoRoute);
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.LogMessage(LogEventLevel.Verbose, "Executing full route", request.Destination);
|
||||||
|
|
||||||
|
audioOrSingleRoute.ExecuteRoutes();
|
||||||
|
videoRoute?.ExecuteRoutes();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ReleaseRoute(this IRoutingInputs destination)
|
||||||
|
{
|
||||||
|
ReleaseRoute(destination, string.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Will release the existing route on the destination, if it is found in
|
||||||
|
/// RouteDescriptorCollection.DefaultCollection
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="destination"></param>
|
||||||
|
public static void ReleaseRoute(this IRoutingInputs destination, string inputPortKey)
|
||||||
|
{
|
||||||
|
|
||||||
|
Debug.LogMessage(LogEventLevel.Information, "Release route for {inputPortKey}", destination, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey);
|
||||||
|
|
||||||
|
if (RouteRequests.TryGetValue(destination.Key, out RouteRequest existingRequest) && destination is IWarmingCooling)
|
||||||
|
{
|
||||||
|
var coolingDevice = destination as IWarmingCooling;
|
||||||
|
|
||||||
|
coolingDevice.IsCoolingDownFeedback.OutputChange -= existingRequest.HandleCooldown;
|
||||||
|
}
|
||||||
|
|
||||||
|
RouteRequests.Remove(destination.Key);
|
||||||
|
|
||||||
|
var current = RouteDescriptorCollection.DefaultCollection.RemoveRouteDescriptor(destination, inputPortKey);
|
||||||
|
if (current != null)
|
||||||
|
{
|
||||||
|
Debug.LogMessage(LogEventLevel.Debug, "Releasing current route: {0}", destination, current.Source.Key);
|
||||||
|
current.ReleaseRoutes();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Builds a RouteDescriptor that contains the steps necessary to make a route between devices.
|
/// Builds a RouteDescriptor that contains the steps necessary to make a route between devices.
|
||||||
/// Routes of type AudioVideo will be built as two separate routes, audio and video. If
|
/// Routes of type AudioVideo will be built as two separate routes, audio and video. If
|
||||||
@@ -76,8 +179,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
if (!destination.GetRouteToSource(source, null, null, signalType, 0, singleTypeRouteDescriptor, destinationPort, sourcePort))
|
if (!destination.GetRouteToSource(source, null, null, signalType, 0, singleTypeRouteDescriptor, destinationPort, sourcePort))
|
||||||
singleTypeRouteDescriptor = null;
|
singleTypeRouteDescriptor = null;
|
||||||
|
|
||||||
var routes = singleTypeRouteDescriptor?.Routes ?? new List<RouteSwitchDescriptor>();
|
foreach (var route in singleTypeRouteDescriptor.Routes)
|
||||||
foreach (var route in routes)
|
|
||||||
{
|
{
|
||||||
Debug.LogMessage(LogEventLevel.Verbose, "Route for device: {route}", destination, route.ToString());
|
Debug.LogMessage(LogEventLevel.Verbose, "Route for device: {route}", destination, route.ToString());
|
||||||
}
|
}
|
||||||
@@ -120,126 +222,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
return (audioRouteDescriptor, videoRouteDescriptor);
|
return (audioRouteDescriptor, videoRouteDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ReleaseAndMakeRoute(IRoutingInputs destination, IRoutingOutputs source, eRoutingSignalType signalType, RoutingInputPort destinationPort = null, RoutingOutputPort sourcePort = null)
|
|
||||||
{
|
|
||||||
if (destination == null) throw new ArgumentNullException(nameof(destination));
|
|
||||||
if (source == null) throw new ArgumentNullException(nameof(source));
|
|
||||||
if (destinationPort == null) Debug.LogMessage(LogEventLevel.Information, "Destination port is null");
|
|
||||||
if (sourcePort == null) Debug.LogMessage(LogEventLevel.Information, "Source port is null");
|
|
||||||
|
|
||||||
var routeRequest = new RouteRequest
|
|
||||||
{
|
|
||||||
Destination = destination,
|
|
||||||
DestinationPort = destinationPort,
|
|
||||||
Source = source,
|
|
||||||
SourcePort = sourcePort,
|
|
||||||
SignalType = signalType
|
|
||||||
};
|
|
||||||
|
|
||||||
var coolingDevice = destination as IWarmingCooling;
|
|
||||||
|
|
||||||
//We already have a route request for this device, and it's a cooling device and is cooling
|
|
||||||
if (RouteRequests.TryGetValue(destination.Key, out RouteRequest existingRouteRequest) && coolingDevice != null && coolingDevice.IsCoolingDownFeedback.BoolValue == true)
|
|
||||||
{
|
|
||||||
coolingDevice.IsCoolingDownFeedback.OutputChange -= existingRouteRequest.HandleCooldown;
|
|
||||||
|
|
||||||
coolingDevice.IsCoolingDownFeedback.OutputChange += routeRequest.HandleCooldown;
|
|
||||||
|
|
||||||
RouteRequests[destination.Key] = routeRequest;
|
|
||||||
|
|
||||||
Debug.LogMessage(LogEventLevel.Information, "Device: {destination} is cooling down and already has a routing request stored. Storing new route request to route to source key: {sourceKey}", null, destination.Key, routeRequest.Source.Key);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//New Request
|
|
||||||
if (coolingDevice != null && coolingDevice.IsCoolingDownFeedback.BoolValue == true)
|
|
||||||
{
|
|
||||||
coolingDevice.IsCoolingDownFeedback.OutputChange += routeRequest.HandleCooldown;
|
|
||||||
|
|
||||||
RouteRequests.Add(destination.Key, routeRequest);
|
|
||||||
|
|
||||||
Debug.LogMessage(LogEventLevel.Information, "Device: {destination} is cooling down. Storing route request to route to source key: {sourceKey}", null, destination.Key, routeRequest.Source.Key);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RouteRequests.ContainsKey(destination.Key) && coolingDevice != null && coolingDevice.IsCoolingDownFeedback.BoolValue == false)
|
|
||||||
{
|
|
||||||
var handledRequest = RouteRequests[destination.Key];
|
|
||||||
|
|
||||||
coolingDevice.IsCoolingDownFeedback.OutputChange -= handledRequest.HandleCooldown;
|
|
||||||
|
|
||||||
RouteRequests.Remove(destination.Key);
|
|
||||||
|
|
||||||
Debug.LogMessage(LogEventLevel.Information, "Device: {destination} is NOT cooling down. Removing stored route request and routing to source key: {sourceKey}", null, destination.Key, routeRequest.Source.Key);
|
|
||||||
}
|
|
||||||
|
|
||||||
routeRequestQueue.Enqueue(new ReleaseRouteQueueItem(ReleaseRouteInternal, destination,destinationPort?.Key ?? string.Empty));
|
|
||||||
|
|
||||||
routeRequestQueue.Enqueue(new RouteRequestQueueItem(RunRouteRequest, routeRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void RunRouteRequest(RouteRequest request)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (request.Source == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var (audioOrSingleRoute, videoRoute) = request.Destination.GetRouteToSource(request.Source, request.SignalType, request.DestinationPort, request.SourcePort);
|
|
||||||
|
|
||||||
if (audioOrSingleRoute == null && videoRoute == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(audioOrSingleRoute);
|
|
||||||
|
|
||||||
if (videoRoute != null)
|
|
||||||
{
|
|
||||||
RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(videoRoute);
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.LogMessage(LogEventLevel.Verbose, "Executing full route", request.Destination);
|
|
||||||
|
|
||||||
audioOrSingleRoute.ExecuteRoutes();
|
|
||||||
videoRoute?.ExecuteRoutes();
|
|
||||||
} catch(Exception ex)
|
|
||||||
{
|
|
||||||
Debug.LogMessage(ex, "Exception Running Route Request {request}", null, request);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Will release the existing route on the destination, if it is found in
|
|
||||||
/// RouteDescriptorCollection.DefaultCollection
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="destination"></param>
|
|
||||||
private static void ReleaseRouteInternal(IRoutingInputs destination, string inputPortKey)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Debug.LogMessage(LogEventLevel.Information, "Release route for '{destination}':'{inputPortKey}'", destination?.Key ?? null, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey);
|
|
||||||
|
|
||||||
if (RouteRequests.TryGetValue(destination.Key, out RouteRequest existingRequest) && destination is IWarmingCooling)
|
|
||||||
{
|
|
||||||
var coolingDevice = destination as IWarmingCooling;
|
|
||||||
|
|
||||||
coolingDevice.IsCoolingDownFeedback.OutputChange -= existingRequest.HandleCooldown;
|
|
||||||
}
|
|
||||||
|
|
||||||
RouteRequests.Remove(destination.Key);
|
|
||||||
|
|
||||||
var current = RouteDescriptorCollection.DefaultCollection.RemoveRouteDescriptor(destination, inputPortKey);
|
|
||||||
if (current != null)
|
|
||||||
{
|
|
||||||
Debug.LogMessage(LogEventLevel.Information, "Releasing current route: {0}", destination, current.Source.Key);
|
|
||||||
current.ReleaseRoutes();
|
|
||||||
}
|
|
||||||
} catch (Exception ex)
|
|
||||||
{
|
|
||||||
Debug.LogMessage(ex, "Exception releasing route for '{destination}':'{inputPortKey}'",null, destination?.Key ?? null, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The recursive part of this. Will stop on each device, search its inputs for the
|
/// The recursive part of this. Will stop on each device, search its inputs for the
|
||||||
/// desired source and if not found, invoke this function for the each input port
|
/// desired source and if not found, invoke this function for the each input port
|
||||||
|
|||||||
@@ -12,19 +12,19 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// Represents an collection of individual route steps between Source and Destination
|
/// Represents an collection of individual route steps between Source and Destination
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class RouteDescriptor
|
public class RouteDescriptor
|
||||||
{
|
{
|
||||||
public IRoutingInputs Destination { get; private set; }
|
public IRoutingInputs Destination { get; private set; }
|
||||||
|
|
||||||
public RoutingInputPort InputPort { get; private set; }
|
public RoutingInputPort InputPort { get; private set; }
|
||||||
|
|
||||||
public IRoutingOutputs Source { get; private set; }
|
public IRoutingOutputs Source { get; private set; }
|
||||||
public eRoutingSignalType SignalType { get; private set; }
|
public eRoutingSignalType SignalType { get; private set; }
|
||||||
public List<RouteSwitchDescriptor> Routes { get; private set; }
|
public List<RouteSwitchDescriptor> Routes { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
public RouteDescriptor(IRoutingOutputs source, IRoutingInputs destination, eRoutingSignalType signalType) : this(source, destination, null, signalType)
|
public RouteDescriptor(IRoutingOutputs source, IRoutingInputs destination, eRoutingSignalType signalType):this(source,destination, null, signalType)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public RouteDescriptor(IRoutingOutputs source, IRoutingInputs destination, RoutingInputPort inputPort, eRoutingSignalType signalType)
|
public RouteDescriptor(IRoutingOutputs source, IRoutingInputs destination, RoutingInputPort inputPort, eRoutingSignalType signalType)
|
||||||
{
|
{
|
||||||
@@ -35,15 +35,15 @@ namespace PepperDash.Essentials.Core
|
|||||||
Routes = new List<RouteSwitchDescriptor>();
|
Routes = new List<RouteSwitchDescriptor>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Executes all routes described in this collection. Typically called via
|
/// Executes all routes described in this collection. Typically called via
|
||||||
/// extension method IRoutingInputs.ReleaseAndMakeRoute()
|
/// extension method IRoutingInputs.ReleaseAndMakeRoute()
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void ExecuteRoutes()
|
public void ExecuteRoutes()
|
||||||
{
|
{
|
||||||
foreach (var route in Routes)
|
foreach (var route in Routes)
|
||||||
{
|
{
|
||||||
Debug.LogMessage(LogEventLevel.Verbose, "ExecuteRoutes: {0}", null, route.ToString());
|
Debug.LogMessage(LogEventLevel.Verbose, "ExecuteRoutes: {0}",null, route.ToString());
|
||||||
|
|
||||||
if (route.SwitchingDevice is IRoutingSinkWithSwitching sink)
|
if (route.SwitchingDevice is IRoutingSinkWithSwitching sink)
|
||||||
{
|
{
|
||||||
@@ -59,15 +59,15 @@ namespace PepperDash.Essentials.Core
|
|||||||
|
|
||||||
Debug.LogMessage(LogEventLevel.Verbose, "Output port {0} routing. Count={1}", null, route.OutputPort.Key, route.OutputPort.InUseTracker.InUseCountFeedback.UShortValue);
|
Debug.LogMessage(LogEventLevel.Verbose, "Output port {0} routing. Count={1}", null, route.OutputPort.Key, route.OutputPort.InUseTracker.InUseCountFeedback.UShortValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Releases all routes in this collection. Typically called via
|
/// Releases all routes in this collection. Typically called via
|
||||||
/// extension method IRoutingInputs.ReleaseAndMakeRoute()
|
/// extension method IRoutingInputs.ReleaseAndMakeRoute()
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void ReleaseRoutes()
|
public void ReleaseRoutes()
|
||||||
{
|
{
|
||||||
foreach (var route in Routes.Where(r => r.SwitchingDevice is IRouting))
|
foreach (var route in Routes.Where(r => r.SwitchingDevice is IRouting))
|
||||||
{
|
{
|
||||||
if (route.SwitchingDevice is IRouting switchingDevice)
|
if (route.SwitchingDevice is IRouting switchingDevice)
|
||||||
@@ -77,6 +77,8 @@ namespace PepperDash.Essentials.Core
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switchingDevice.ExecuteSwitch(null, route.OutputPort.Selector, SignalType);
|
||||||
|
|
||||||
if (route.OutputPort.InUseTracker != null)
|
if (route.OutputPort.InUseTracker != null)
|
||||||
{
|
{
|
||||||
route.OutputPort.InUseTracker.RemoveUser(Destination, "destination-" + SignalType);
|
route.OutputPort.InUseTracker.RemoveUser(Destination, "destination-" + SignalType);
|
||||||
@@ -90,12 +92,12 @@ namespace PepperDash.Essentials.Core
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
var routesText = Routes.Select(r => r.ToString()).ToArray();
|
var routesText = Routes.Select(r => r.ToString()).ToArray();
|
||||||
return string.Format("Route table from {0} to {1}:\r{2}", Source.Key, Destination.Key, string.Join("\r", routesText));
|
return string.Format("Route table from {0} to {1}:\r{2}", Source.Key, Destination.Key, string.Join("\r", routesText));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*/// <summary>
|
/*/// <summary>
|
||||||
/// Represents an collection of individual route steps between Source and Destination
|
/// Represents an collection of individual route steps between Source and Destination
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
&& RouteDescriptors.Any(t => t.Destination == descriptor.Destination && t.InputPort != null && descriptor.InputPort != null && t.InputPort.Key == descriptor.InputPort.Key))
|
&& RouteDescriptors.Any(t => t.Destination == descriptor.Destination && t.InputPort != null && descriptor.InputPort != null && t.InputPort.Key == descriptor.InputPort.Key))
|
||||||
{
|
{
|
||||||
Debug.LogMessage(LogEventLevel.Debug, descriptor.Destination,
|
Debug.LogMessage(LogEventLevel.Debug, descriptor.Destination,
|
||||||
"Route to [{0}] already exists in global routes table", descriptor?.Source?.Key);
|
"Route to [{0}] already exists in global routes table", descriptor.Source.Key);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RouteDescriptors.Add(descriptor);
|
RouteDescriptors.Add(descriptor);
|
||||||
@@ -53,14 +53,14 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// <returns>null if no RouteDescriptor for a destination exists</returns>
|
/// <returns>null if no RouteDescriptor for a destination exists</returns>
|
||||||
public RouteDescriptor GetRouteDescriptorForDestination(IRoutingInputs destination)
|
public RouteDescriptor GetRouteDescriptorForDestination(IRoutingInputs destination)
|
||||||
{
|
{
|
||||||
Debug.LogMessage(LogEventLevel.Information, "Getting route descriptor for '{destination}'", destination?.Key ?? null);
|
Debug.LogMessage(LogEventLevel.Debug, "Getting route descriptor", destination);
|
||||||
|
|
||||||
return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination);
|
return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RouteDescriptor GetRouteDescriptorForDestinationAndInputPort(IRoutingInputs destination, string inputPortKey)
|
public RouteDescriptor GetRouteDescriptorForDestinationAndInputPort(IRoutingInputs destination, string inputPortKey)
|
||||||
{
|
{
|
||||||
Debug.LogMessage(LogEventLevel.Information, "Getting route descriptor for '{destination}':'{inputPortKey}'", destination?.Key ?? null, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey);
|
Debug.LogMessage(LogEventLevel.Debug, "Getting route descriptor for {inputPortKey}", destination, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey);
|
||||||
return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination && rd.InputPort != null && rd.InputPort.Key == inputPortKey);
|
return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination && rd.InputPort != null && rd.InputPort.Key == inputPortKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public RouteDescriptor RemoveRouteDescriptor(IRoutingInputs destination, string inputPortKey = "")
|
public RouteDescriptor RemoveRouteDescriptor(IRoutingInputs destination, string inputPortKey = "")
|
||||||
{
|
{
|
||||||
Debug.LogMessage(LogEventLevel.Information, "Removing route descriptor for '{destination}':'{inputPortKey}'", destination.Key ?? null, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey);
|
Debug.LogMessage(LogEventLevel.Debug, "Removing route descriptor for {inputPortKey}", destination, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey);
|
||||||
|
|
||||||
var descr = string.IsNullOrEmpty(inputPortKey)
|
var descr = string.IsNullOrEmpty(inputPortKey)
|
||||||
? GetRouteDescriptorForDestination(destination)
|
? GetRouteDescriptorForDestination(destination)
|
||||||
@@ -78,7 +78,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
if (descr != null)
|
if (descr != null)
|
||||||
RouteDescriptors.Remove(descr);
|
RouteDescriptors.Remove(descr);
|
||||||
|
|
||||||
Debug.LogMessage(LogEventLevel.Information, "Found route descriptor {routeDescriptor}", destination, descr);
|
Debug.LogMessage(LogEventLevel.Debug, "Found route descriptor {routeDescriptor}", destination, descr);
|
||||||
|
|
||||||
return descr;
|
return descr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,10 +38,5 @@ namespace PepperDash.Essentials.Core
|
|||||||
Debug.LogMessage(ex, "Exception handling cooldown", Destination);
|
Debug.LogMessage(ex, "Exception handling cooldown", Destination);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
|
||||||
{
|
|
||||||
return $"Route {Source?.Key ?? "No Source Device"}:{SourcePort?.Key ?? "auto"} to {Destination?.Key ?? "No Destination Device"}:{DestinationPort?.Key ?? "auto"}";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Queues;
|
|
||||||
using System;
|
|
||||||
using Serilog.Events;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.Routing
|
|
||||||
{
|
|
||||||
public class RouteRequestQueueItem : IQueueMessage
|
|
||||||
{
|
|
||||||
private readonly Action<RouteRequest> action;
|
|
||||||
private readonly RouteRequest routeRequest;
|
|
||||||
|
|
||||||
public RouteRequestQueueItem(Action<RouteRequest> routeAction, RouteRequest request)
|
|
||||||
{
|
|
||||||
action = routeAction;
|
|
||||||
routeRequest = request;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispatch()
|
|
||||||
{
|
|
||||||
Debug.LogMessage(LogEventLevel.Information, "Dispatching route request {routeRequest}", null, routeRequest);
|
|
||||||
action(routeRequest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ReleaseRouteQueueItem : IQueueMessage
|
|
||||||
{
|
|
||||||
private readonly Action<IRoutingInputs, string> action;
|
|
||||||
private readonly IRoutingInputs destination;
|
|
||||||
private readonly string inputPortKey;
|
|
||||||
|
|
||||||
public ReleaseRouteQueueItem(Action<IRoutingInputs, string> action, IRoutingInputs destination, string inputPortKey)
|
|
||||||
{
|
|
||||||
this.action = action;
|
|
||||||
this.destination = destination;
|
|
||||||
this.inputPortKey = inputPortKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispatch()
|
|
||||||
{
|
|
||||||
Debug.LogMessage(LogEventLevel.Information, "Dispatching release route request for {destination}:{inputPortKey}", null, destination?.Key ?? "no destination", string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey);
|
|
||||||
action(destination, inputPortKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -56,8 +56,6 @@ namespace PepperDash.Essentials.Core.Touchpanels
|
|||||||
InitializeButton(buttonKey, buttonConfig);
|
InitializeButton(buttonKey, buttonConfig);
|
||||||
InitializeButtonFeedback(buttonKey, buttonConfig);
|
InitializeButtonFeedback(buttonKey, buttonConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
ListButtons();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,23 +319,6 @@ namespace PepperDash.Essentials.Core.Touchpanels
|
|||||||
|
|
||||||
foreach (var eventType in button.EventTypes[type]) DeviceJsonApi.DoDeviceAction(eventType);
|
foreach (var eventType in button.EventTypes[type]) DeviceJsonApi.DoDeviceAction(eventType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void ListButtons()
|
|
||||||
{
|
|
||||||
var line = new string('-', 35);
|
|
||||||
|
|
||||||
Debug.Console(0, this, line);
|
|
||||||
|
|
||||||
Debug.Console(0, this, "MPC3 Controller {0} - Available Butons", Key);
|
|
||||||
|
|
||||||
foreach (var button in _buttons)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Key: {0}", button.Key);
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(0, this, line);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<Configurations>Debug;Release;Debug 4.7.2</Configurations>
|
<Configurations>Debug;Release;Debug 4.7.2</Configurations>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net472</TargetFramework>
|
<TargetFrameworks>net472;net6</TargetFrameworks>
|
||||||
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
|
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
|
||||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||||
<AssemblyName>Essentials Devices Common</AssemblyName>
|
<AssemblyName>Essentials Devices Common</AssemblyName>
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
<ProjectReference Include="..\PepperDash.Essentials.Core\PepperDash.Essentials.Core.csproj" />
|
<ProjectReference Include="..\PepperDash.Essentials.Core\PepperDash.Essentials.Core.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Crestron.SimplSharp.SDK.ProgramLibrary" Version="2.21.90" />
|
<PackageReference Include="Crestron.SimplSharp.SDK.ProgramLibrary" Version="2.20.66" />
|
||||||
<PackageReference Include="PepperDashCore" Version="2.0.1" />
|
<PackageReference Include="PepperDashCore" Version="2.0.0-alpha-424" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -28,14 +28,14 @@ namespace PepperDash.Essentials.Devices.Common.SoftCodec
|
|||||||
|
|
||||||
for(var i = 1; i <= props.OutputCount; i++)
|
for(var i = 1; i <= props.OutputCount; i++)
|
||||||
{
|
{
|
||||||
var outputPort = new RoutingOutputPort($"output{i}", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this);
|
var outputPort = new RoutingOutputPort($"{Key}-output{i}", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this);
|
||||||
|
|
||||||
OutputPorts.Add(outputPort);
|
OutputPorts.Add(outputPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var i = 1; i<= props.ContentInputCount; i++)
|
for(var i = 1; i<= props.ContentInputCount; i++)
|
||||||
{
|
{
|
||||||
var inputPort = new RoutingInputPort($"contentInput{i}", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, $"contentInput{i}", this);
|
var inputPort = new RoutingInputPort($"{Key}-contentInput{i}", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, $"contentInput{i}", this);
|
||||||
|
|
||||||
InputPorts.Add(inputPort);
|
InputPorts.Add(inputPort);
|
||||||
}
|
}
|
||||||
@@ -47,7 +47,7 @@ namespace PepperDash.Essentials.Devices.Common.SoftCodec
|
|||||||
|
|
||||||
for(var i = 1; i <=props.CameraInputCount; i++)
|
for(var i = 1; i <=props.CameraInputCount; i++)
|
||||||
{
|
{
|
||||||
var cameraPort = new RoutingInputPort($"cameraInput{i}", eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, $"cameraInput{i}", this);
|
var cameraPort = new RoutingInputPort($"{Key}-cameraInput{i}", eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, $"cameraInput{i}", this);
|
||||||
|
|
||||||
InputPorts.Add(cameraPort);
|
InputPorts.Add(cameraPort);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
using Crestron.SimplSharp.CrestronIO;
|
using Crestron.SimplSharp.CrestronIO;
|
||||||
using Crestron.SimplSharp.Reflection;
|
using Crestron.SimplSharp.Reflection;
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
@@ -20,7 +21,6 @@ using PepperDash.Essentials.Core.Bridges.JoinMaps;
|
|||||||
using Feedback = PepperDash.Essentials.Core.Feedback;
|
using Feedback = PepperDash.Essentials.Core.Feedback;
|
||||||
using Serilog.Events;
|
using Serilog.Events;
|
||||||
using PepperDash.Essentials.Core.Routing;
|
using PepperDash.Essentials.Core.Routing;
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<RootNamespace>PepperDash.Essentials</RootNamespace>
|
<RootNamespace>PepperDash.Essentials</RootNamespace>
|
||||||
<AssemblyName>PepperDashEssentials</AssemblyName>
|
<AssemblyName>PepperDashEssentials</AssemblyName>
|
||||||
<TargetFramework>net472</TargetFramework>
|
<TargetFrameworks>net472;net6</TargetFrameworks>
|
||||||
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
|
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
|
||||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||||
<Title>PepperDash Essentials</Title>
|
<Title>PepperDash Essentials</Title>
|
||||||
@@ -48,8 +48,8 @@
|
|||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Crestron.SimplSharp.SDK.Program" Version="2.21.90" />
|
<PackageReference Include="Crestron.SimplSharp.SDK.Program" Version="2.20.66" />
|
||||||
<PackageReference Include="PepperDashCore" Version="2.0.1" />
|
<PackageReference Include="PepperDashCore" Version="2.0.0-alpha-424" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\PepperDash.Essentials.Core\PepperDash.Essentials.Core.csproj" />
|
<ProjectReference Include="..\PepperDash.Essentials.Core\PepperDash.Essentials.Core.csproj" />
|
||||||
|
|||||||
Reference in New Issue
Block a user