mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-01-23 01:15:03 +00:00
Compare commits
7 Commits
1.5.2-alph
...
1.5.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b58b42c496 | ||
|
|
7a7ab33fa4 | ||
|
|
dc9d285de0 | ||
|
|
2519fffb58 | ||
|
|
2eacaec577 | ||
|
|
dbec871500 | ||
|
|
03bcb5f338 |
5
.github/workflows/master.yml
vendored
5
.github/workflows/master.yml
vendored
@@ -31,10 +31,7 @@ jobs:
|
||||
git config --global url."https://github.com/".insteadOf "git@github.com:"
|
||||
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
|
||||
git submodule sync --recursive
|
||||
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
|
||||
# Fetch all tags
|
||||
- name: Fetch tags
|
||||
run: git fetch --tags
|
||||
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=
|
||||
# Generate the appropriate version number
|
||||
- name: Set Version Number
|
||||
shell: powershell
|
||||
|
||||
@@ -38,12 +38,8 @@ namespace PepperDash.Essentials.Bridges
|
||||
/// Reports the EDID serial number value
|
||||
/// </summary>
|
||||
public uint EdidSerialNumber { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Analogs
|
||||
public uint AudioVideoSource { get; set; }
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
public DmRmcControllerJoinMap()
|
||||
{
|
||||
// Digital
|
||||
@@ -55,9 +51,6 @@ namespace PepperDash.Essentials.Bridges
|
||||
EdidName = 3;
|
||||
EdidPrefferedTiming = 4;
|
||||
EdidSerialNumber = 5;
|
||||
|
||||
//Analog
|
||||
AudioVideoSource = 1;
|
||||
}
|
||||
|
||||
public override void OffsetJoinNumbers(uint joinStart)
|
||||
@@ -69,8 +62,7 @@ namespace PepperDash.Essentials.Bridges
|
||||
EdidManufacturer = EdidManufacturer + joinOffset;
|
||||
EdidName = EdidName + joinOffset;
|
||||
EdidPrefferedTiming = EdidPrefferedTiming + joinOffset;
|
||||
EdidSerialNumber = EdidSerialNumber + joinOffset;
|
||||
AudioVideoSource = AudioVideoSource + joinOffset;
|
||||
EdidSerialNumber = EdidSerialNumber + joinOffset;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,182 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core.Bridges
|
||||
{
|
||||
public class CenOdtOccupancySensorBaseJoinMap : JoinMapBaseAdvanced
|
||||
{
|
||||
#region Digitals
|
||||
|
||||
[JoinName("Online")]
|
||||
public JoinDataComplete Online = new JoinDataComplete(new JoinData() { JoinNumber = 1, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("ForceOccupied")]
|
||||
public JoinDataComplete ForceOccupied = new JoinDataComplete(new JoinData() { JoinNumber = 2, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Force Occupied", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("ForceVacant")]
|
||||
public JoinDataComplete ForceVacant = new JoinDataComplete(new JoinData() { JoinNumber = 3, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Force Vacant", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("EnableRawStates")]
|
||||
public JoinDataComplete EnableRawStates = new JoinDataComplete(new JoinData() { JoinNumber = 4, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Enable Raw States", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("RoomOccupiedFeedback")]
|
||||
public JoinDataComplete RoomOccupiedFeedback = new JoinDataComplete(new JoinData() { JoinNumber = 2, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Room Occupied Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("GraceOccupancyDetectedFeedback")]
|
||||
public JoinDataComplete GraceOccupancyDetectedFeedback = new JoinDataComplete(new JoinData() { JoinNumber = 3, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Grace Occupancy Detected Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("RoomVacantFeedback")]
|
||||
public JoinDataComplete RoomVacantFeedback = new JoinDataComplete(new JoinData() { JoinNumber = 4, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Room Vacant Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("RawOccupancyFeedback")]
|
||||
public JoinDataComplete RawOccupancyFeedback = new JoinDataComplete(new JoinData() { JoinNumber = 5, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Raw Occupancy Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("RawOccupancyPirFeedback")]
|
||||
public JoinDataComplete RawOccupancyPirFeedback = new JoinDataComplete(new JoinData() { JoinNumber = 6, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Raw Occupancy Pir Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("RawOccupancyUsFeedback")]
|
||||
public JoinDataComplete RawOccupancyUsFeedback = new JoinDataComplete(new JoinData() { JoinNumber = 7, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Raw Occupancy Us Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("EnableLedFlash")]
|
||||
public JoinDataComplete EnableLedFlash = new JoinDataComplete(new JoinData() { JoinNumber = 11, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Enable Led Flash", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("DisableLedFlash")]
|
||||
public JoinDataComplete DisableLedFlash = new JoinDataComplete(new JoinData() { JoinNumber = 12, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Disable Led Flash", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("EnableShortTimeout")]
|
||||
public JoinDataComplete EnableShortTimeout = new JoinDataComplete(new JoinData() { JoinNumber = 13, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Enable Short Timeout", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("DisableShortTimeout")]
|
||||
public JoinDataComplete DisableShortTimeout = new JoinDataComplete(new JoinData() { JoinNumber = 14, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Disable Short Timeout", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("OrWhenVacated")]
|
||||
public JoinDataComplete OrWhenVacated = new JoinDataComplete(new JoinData() { JoinNumber = 15, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Or When Vacated", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("AndWhenVacated")]
|
||||
public JoinDataComplete AndWhenVacated = new JoinDataComplete(new JoinData() { JoinNumber = 16, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "AndWhenVacated", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("EnableUsA")]
|
||||
public JoinDataComplete EnableUsA = new JoinDataComplete(new JoinData() { JoinNumber = 17, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Enable Us A", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("DisableUsA")]
|
||||
public JoinDataComplete DisableUsA = new JoinDataComplete(new JoinData() { JoinNumber = 18, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Disable Us A", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("EnableUsB")]
|
||||
public JoinDataComplete EnableUsB = new JoinDataComplete(new JoinData() { JoinNumber = 19, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Enable Us B", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("DisableUsB")]
|
||||
public JoinDataComplete DisableUsB = new JoinDataComplete(new JoinData() { JoinNumber = 20, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Disable Us B", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("EnablePir")]
|
||||
public JoinDataComplete EnablePir = new JoinDataComplete(new JoinData() { JoinNumber = 21, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Enable Pir", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("DisablePir")]
|
||||
public JoinDataComplete DisablePir = new JoinDataComplete(new JoinData() { JoinNumber = 22, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Disable Pir", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("IncrementUsInOccupiedState")]
|
||||
public JoinDataComplete IncrementUsInOccupiedState = new JoinDataComplete(new JoinData() { JoinNumber = 23, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Increment Us In OccupiedState", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("DecrementUsInOccupiedState")]
|
||||
public JoinDataComplete DecrementUsInOccupiedState = new JoinDataComplete(new JoinData() { JoinNumber = 24, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Dencrement Us In Occupied State", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("IncrementUsInVacantState")]
|
||||
public JoinDataComplete IncrementUsInVacantState = new JoinDataComplete(new JoinData() { JoinNumber = 25, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Increment Us In VacantState", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("DecrementUsInVacantState")]
|
||||
public JoinDataComplete DecrementUsInVacantState = new JoinDataComplete(new JoinData() { JoinNumber = 26, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Decrement Us In VacantState", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("IncrementPirInOccupiedState")]
|
||||
public JoinDataComplete IncrementPirInOccupiedState = new JoinDataComplete(new JoinData() { JoinNumber = 27, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Increment Pir In Occupied State", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("DecrementPirInOccupiedState")]
|
||||
public JoinDataComplete DecrementPirInOccupiedState = new JoinDataComplete(new JoinData() { JoinNumber = 28, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Decrement Pir In OccupiedState", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("IncrementPirInVacantState")]
|
||||
public JoinDataComplete IncrementPirInVacantState = new JoinDataComplete(new JoinData() { JoinNumber = 29, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Increment Pir In Vacant State", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("DecrementPirInVacantState")]
|
||||
public JoinDataComplete DecrementPirInVacantState = new JoinDataComplete(new JoinData() { JoinNumber = 30, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Decrement Pir In Vacant State", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
#endregion
|
||||
|
||||
#region Analog
|
||||
|
||||
[JoinName("Timeout")]
|
||||
public JoinDataComplete Timeout = new JoinDataComplete(new JoinData() { JoinNumber = 1, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Timeout", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
||||
|
||||
[JoinName("TimeoutLocalFeedback")]
|
||||
public JoinDataComplete TimeoutLocalFeedback = new JoinDataComplete(new JoinData() { JoinNumber = 2, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Timeout Local Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
|
||||
|
||||
[JoinName("InternalPhotoSensorValue")]
|
||||
public JoinDataComplete InternalPhotoSensorValue = new JoinDataComplete(new JoinData() { JoinNumber = 3, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Internal PhotoSensor Value", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
||||
|
||||
[JoinName("UsSensitivityInOccupiedState")]
|
||||
public JoinDataComplete UsSensitivityInOccupiedState = new JoinDataComplete(new JoinData() { JoinNumber = 5, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Us Sensitivity In Occupied State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
|
||||
|
||||
[JoinName("UsSensitivityInVacantState")]
|
||||
public JoinDataComplete UsSensitivityInVacantState = new JoinDataComplete(new JoinData() { JoinNumber = 6, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Us Sensitivity In Vacant State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
|
||||
|
||||
[JoinName("PirSensitivityInOccupiedState")]
|
||||
public JoinDataComplete PirSensitivityInOccupiedState = new JoinDataComplete(new JoinData() { JoinNumber = 7, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Pir Sensitivity In Occupied State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
|
||||
|
||||
[JoinName("PirSensitivityInVacantState")]
|
||||
public JoinDataComplete PirSensitivityInVacantState = new JoinDataComplete(new JoinData() { JoinNumber = 8, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Pir Sensitivity In Vacant State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
|
||||
|
||||
#endregion
|
||||
|
||||
#region Serial
|
||||
|
||||
[JoinName("Name")]
|
||||
public JoinDataComplete Name = new JoinDataComplete(new JoinData() { JoinNumber = 1, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||
|
||||
#endregion
|
||||
|
||||
public CenOdtOccupancySensorBaseJoinMap(uint joinStart)
|
||||
: base(joinStart, typeof(CenOdtOccupancySensorBaseJoinMap))
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,77 +1,117 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core.Bridges
|
||||
{
|
||||
public class DisplayControllerJoinMap : JoinMapBaseAdvanced
|
||||
{
|
||||
[JoinName("Name")]
|
||||
public JoinDataComplete Name = new JoinDataComplete(new JoinData() { JoinNumber = 1, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||
|
||||
[JoinName("PowerOff")]
|
||||
public JoinDataComplete PowerOff = new JoinDataComplete(new JoinData() { JoinNumber = 1, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Power Off", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("PowerOn")]
|
||||
public JoinDataComplete PowerOn = new JoinDataComplete(new JoinData() { JoinNumber = 2, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Power On", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("IsTwoWayDisplay")]
|
||||
public JoinDataComplete IsTwoWayDisplay = new JoinDataComplete(new JoinData() { JoinNumber = 3, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Is Two Way Display", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("VolumeUp")]
|
||||
public JoinDataComplete VolumeUp = new JoinDataComplete(new JoinData() { JoinNumber = 5, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Volume Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("VolumeLevel")]
|
||||
public JoinDataComplete VolumeLevel = new JoinDataComplete(new JoinData() { JoinNumber = 5, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Volume Level", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
||||
|
||||
[JoinName("VolumeDown")]
|
||||
public JoinDataComplete VolumeDown = new JoinDataComplete(new JoinData() { JoinNumber = 6, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Volume Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("VolumeMute")]
|
||||
public JoinDataComplete VolumeMute = new JoinDataComplete(new JoinData() { JoinNumber = 7, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Volume Mute", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("VolumeMuteOn")]
|
||||
public JoinDataComplete VolumeMuteOn = new JoinDataComplete(new JoinData() { JoinNumber = 8, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Volume Mute On", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("VolumeMuteOff")]
|
||||
public JoinDataComplete VolumeMuteOff = new JoinDataComplete(new JoinData() { JoinNumber = 9, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Volume Mute Off", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("InputSelectOffset")]
|
||||
public JoinDataComplete InputSelectOffset = new JoinDataComplete(new JoinData() { JoinNumber = 11, JoinSpan = 10 },
|
||||
new JoinMetadata() { Label = "Input Select", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("InputNamesOffset")]
|
||||
public JoinDataComplete InputNamesOffset = new JoinDataComplete(new JoinData() { JoinNumber = 11, JoinSpan = 10 },
|
||||
new JoinMetadata() { Label = "Input Names Offset", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||
|
||||
[JoinName("InputSelect")]
|
||||
public JoinDataComplete InputSelect = new JoinDataComplete(new JoinData() { JoinNumber = 11, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Input Select", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
||||
|
||||
[JoinName("ButtonVisibilityOffset")]
|
||||
public JoinDataComplete ButtonVisibilityOffset = new JoinDataComplete(new JoinData() { JoinNumber = 41, JoinSpan = 10 },
|
||||
new JoinMetadata() { Label = "Button Visibility Offset", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.DigitalSerial });
|
||||
|
||||
[JoinName("IsOnline")]
|
||||
public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData() { JoinNumber = 50, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Is Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
public DisplayControllerJoinMap(uint joinStart)
|
||||
: base(joinStart, typeof(CameraControllerJoinMap))
|
||||
{
|
||||
}
|
||||
}
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core.Bridges
|
||||
{
|
||||
public class DisplayControllerJoinMap : JoinMapBase
|
||||
{
|
||||
#region Digitals
|
||||
/// <summary>
|
||||
/// Turns the display off and reports power off feedback
|
||||
/// </summary>
|
||||
public uint PowerOff { get; set; }
|
||||
/// <summary>
|
||||
/// Turns the display on and repots power on feedback
|
||||
/// </summary>
|
||||
public uint PowerOn { get; set; }
|
||||
/// <summary>
|
||||
/// Indicates that the display device supports two way communication when high
|
||||
/// </summary>
|
||||
public uint IsTwoWayDisplay { get; set; }
|
||||
/// <summary>
|
||||
/// Increments the volume while high
|
||||
/// </summary>
|
||||
public uint VolumeUp { get; set; }
|
||||
/// <summary>
|
||||
/// Decrements teh volume while high
|
||||
/// </summary>
|
||||
public uint VolumeDown { get; set; }
|
||||
/// <summary>
|
||||
/// Toggles the mute state. Feedback is high when volume is muted
|
||||
/// </summary>
|
||||
public uint VolumeMute { get; set; }
|
||||
/// <summary>
|
||||
/// Range of digital joins to select inputs and report current input as feedback
|
||||
/// </summary>
|
||||
public uint InputSelectOffset { get; set; }
|
||||
/// <summary>
|
||||
/// Range of digital joins to report visibility for input buttons
|
||||
/// </summary>
|
||||
public uint ButtonVisibilityOffset { get; set; }
|
||||
/// <summary>
|
||||
/// High if the device is online
|
||||
/// </summary>
|
||||
public uint IsOnline { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Analogs
|
||||
/// <summary>
|
||||
/// Analog join to set the input and report current input as feedback
|
||||
/// </summary>
|
||||
public uint InputSelect { get; set; }
|
||||
/// <summary>
|
||||
/// Sets the volume level and reports the current level as feedback
|
||||
/// </summary>
|
||||
public uint VolumeLevel { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Serials
|
||||
/// <summary>
|
||||
/// Reports the name of the display as defined in config as feedback
|
||||
/// </summary>
|
||||
public uint Name { get; set; }
|
||||
/// <summary>
|
||||
/// Range of serial joins that reports the names of the inputs as feedback
|
||||
/// </summary>
|
||||
public uint InputNamesOffset { get; set; }
|
||||
#endregion
|
||||
|
||||
public DisplayControllerJoinMap()
|
||||
{
|
||||
// Digital
|
||||
IsOnline = 50;
|
||||
PowerOff = 1;
|
||||
PowerOn = 2;
|
||||
IsTwoWayDisplay = 3;
|
||||
VolumeUp = 5;
|
||||
VolumeDown = 6;
|
||||
VolumeMute = 7;
|
||||
|
||||
ButtonVisibilityOffset = 40;
|
||||
InputSelectOffset = 10;
|
||||
|
||||
// Analog
|
||||
InputSelect = 11;
|
||||
VolumeLevel = 5;
|
||||
|
||||
// Serial
|
||||
Name = 1;
|
||||
InputNamesOffset = 10;
|
||||
}
|
||||
|
||||
public override void OffsetJoinNumbers(uint joinStart)
|
||||
{
|
||||
var joinOffset = joinStart - 1;
|
||||
|
||||
IsOnline = IsOnline + joinOffset;
|
||||
PowerOff = PowerOff + joinOffset;
|
||||
PowerOn = PowerOn + joinOffset;
|
||||
IsTwoWayDisplay = IsTwoWayDisplay + joinOffset;
|
||||
ButtonVisibilityOffset = ButtonVisibilityOffset + joinOffset;
|
||||
Name = Name + joinOffset;
|
||||
InputNamesOffset = InputNamesOffset + joinOffset;
|
||||
InputSelectOffset = InputSelectOffset + joinOffset;
|
||||
|
||||
InputSelect = InputSelect + joinOffset;
|
||||
|
||||
VolumeUp = VolumeUp + joinOffset;
|
||||
VolumeDown = VolumeDown + joinOffset;
|
||||
VolumeMute = VolumeMute + joinOffset;
|
||||
VolumeLevel = VolumeLevel + joinOffset;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -37,39 +37,31 @@ namespace PepperDash.Essentials.Core.Bridges
|
||||
/// Reports the EDID serial number value
|
||||
/// </summary>
|
||||
public uint EdidSerialNumber { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Analogs
|
||||
public uint AudioVideoSource { get; set; }
|
||||
#endregion
|
||||
|
||||
public DmRmcControllerJoinMap()
|
||||
{
|
||||
// Digital
|
||||
IsOnline = 1;
|
||||
|
||||
// Serial
|
||||
CurrentOutputResolution = 1;
|
||||
EdidManufacturer = 2;
|
||||
EdidName = 3;
|
||||
EdidPrefferedTiming = 4;
|
||||
EdidSerialNumber = 5;
|
||||
|
||||
//Analog
|
||||
AudioVideoSource = 1;
|
||||
}
|
||||
|
||||
public override void OffsetJoinNumbers(uint joinStart)
|
||||
{
|
||||
var joinOffset = joinStart - 1;
|
||||
|
||||
IsOnline = IsOnline + joinOffset;
|
||||
CurrentOutputResolution = CurrentOutputResolution + joinOffset;
|
||||
EdidManufacturer = EdidManufacturer + joinOffset;
|
||||
EdidName = EdidName + joinOffset;
|
||||
EdidPrefferedTiming = EdidPrefferedTiming + joinOffset;
|
||||
EdidSerialNumber = EdidSerialNumber + joinOffset;
|
||||
AudioVideoSource = AudioVideoSource + joinOffset;
|
||||
}
|
||||
#endregion
|
||||
|
||||
public DmRmcControllerJoinMap()
|
||||
{
|
||||
// Digital
|
||||
IsOnline = 1;
|
||||
|
||||
// Serial
|
||||
CurrentOutputResolution = 1;
|
||||
EdidManufacturer = 2;
|
||||
EdidName = 3;
|
||||
EdidPrefferedTiming = 4;
|
||||
EdidSerialNumber = 5;
|
||||
}
|
||||
|
||||
public override void OffsetJoinNumbers(uint joinStart)
|
||||
{
|
||||
var joinOffset = joinStart - 1;
|
||||
|
||||
IsOnline = IsOnline + joinOffset;
|
||||
CurrentOutputResolution = CurrentOutputResolution + joinOffset;
|
||||
EdidManufacturer = EdidManufacturer + joinOffset;
|
||||
EdidName = EdidName + joinOffset;
|
||||
EdidPrefferedTiming = EdidPrefferedTiming + joinOffset;
|
||||
EdidSerialNumber = EdidSerialNumber + joinOffset;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,42 +1,67 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core.Bridges
|
||||
{
|
||||
public class IBasicCommunicationJoinMap : JoinMapBaseAdvanced
|
||||
{
|
||||
[JoinName("TextReceived")]
|
||||
public JoinDataComplete TextReceived = new JoinDataComplete(new JoinData() { JoinNumber = 1, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Text Received From Remote Device", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||
|
||||
[JoinName("SendText")]
|
||||
public JoinDataComplete SendText = new JoinDataComplete(new JoinData() { JoinNumber = 1, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Text Sent To Remote Device", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Serial });
|
||||
|
||||
[JoinName("SetPortConfig")]
|
||||
public JoinDataComplete SetPortConfig = new JoinDataComplete(new JoinData() { JoinNumber = 2, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Set Port Config", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Serial });
|
||||
|
||||
[JoinName("Connect")]
|
||||
public JoinDataComplete Connect = new JoinDataComplete(new JoinData() { JoinNumber = 1, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Connect", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("Connected")]
|
||||
public JoinDataComplete Connected = new JoinDataComplete(new JoinData() { JoinNumber = 1, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Connected", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||
|
||||
[JoinName("Status")]
|
||||
public JoinDataComplete Status = new JoinDataComplete(new JoinData() { JoinNumber = 1, JoinSpan = 1 },
|
||||
new JoinMetadata() { Label = "Status", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
|
||||
|
||||
|
||||
public IBasicCommunicationJoinMap(uint joinStart)
|
||||
: base(joinStart, typeof(IBasicCommunicationJoinMap))
|
||||
{
|
||||
}
|
||||
}
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core.Bridges
|
||||
{
|
||||
public class IBasicCommunicationJoinMap : JoinMapBase
|
||||
{
|
||||
#region Digitals
|
||||
/// <summary>
|
||||
/// Set High to connect, Low to disconnect
|
||||
/// </summary>
|
||||
public uint Connect { get; set; }
|
||||
/// <summary>
|
||||
/// Reports Connected State (High = Connected)
|
||||
/// </summary>
|
||||
public uint Connected { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Analogs
|
||||
/// <summary>
|
||||
/// Reports the connections status value
|
||||
/// </summary>
|
||||
public uint Status { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Serials
|
||||
/// <summary>
|
||||
/// Data back from port
|
||||
/// </summary>
|
||||
public uint TextReceived { get; set; }
|
||||
/// <summary>
|
||||
/// Sends data to the port
|
||||
/// </summary>
|
||||
public uint SendText { get; set; }
|
||||
/// <summary>
|
||||
/// Takes a JSON serialized string that sets a COM port's parameters
|
||||
/// </summary>
|
||||
public uint SetPortConfig { get; set; }
|
||||
#endregion
|
||||
|
||||
public IBasicCommunicationJoinMap()
|
||||
{
|
||||
TextReceived = 1;
|
||||
SendText = 1;
|
||||
SetPortConfig = 2;
|
||||
Connect = 1;
|
||||
Connected = 1;
|
||||
Status = 1;
|
||||
}
|
||||
|
||||
public override void OffsetJoinNumbers(uint joinStart)
|
||||
{
|
||||
var joinOffset = joinStart - 1;
|
||||
|
||||
TextReceived = TextReceived + joinOffset;
|
||||
SendText = SendText + joinOffset;
|
||||
SetPortConfig = SetPortConfig + joinOffset;
|
||||
Connect = Connect + joinOffset;
|
||||
Connected = Connected + joinOffset;
|
||||
Status = Status + joinOffset;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,124 +1,125 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Crestron.SimplSharp.CrestronSockets;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core.Bridges;
|
||||
using PepperDash.Essentials.Core.Devices;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
|
||||
|
||||
namespace PepperDash.Essentials.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Serves as a generic wrapper class for all styles of IBasicCommuncation ports
|
||||
/// </summary>
|
||||
[Description("Generic communication wrapper class for any IBasicCommunication type")]
|
||||
public class GenericComm : ReconfigurableBridgableDevice
|
||||
{
|
||||
EssentialsControlPropertiesConfig PropertiesConfig;
|
||||
|
||||
public IBasicCommunication CommPort { get; private set; }
|
||||
|
||||
public GenericComm(DeviceConfig config)
|
||||
: base(config)
|
||||
{
|
||||
PropertiesConfig = CommFactory.GetControlPropertiesConfig(config);
|
||||
|
||||
CommPort = CommFactory.CreateCommForDevice(config);
|
||||
|
||||
}
|
||||
|
||||
public static IKeyed BuildDevice(DeviceConfig dc)
|
||||
{
|
||||
Debug.Console(1, "Factory Attempting to create new Generic Comm Device");
|
||||
return new GenericComm(dc);
|
||||
}
|
||||
|
||||
public void SetPortConfig(string portConfig)
|
||||
{
|
||||
// TODO: Deserialize new EssentialsControlPropertiesConfig and handle as necessary
|
||||
try
|
||||
{
|
||||
PropertiesConfig = JsonConvert.DeserializeObject<EssentialsControlPropertiesConfig>
|
||||
(portConfig);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Console(2, this, "Error deserializing port config: {0}", e);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void CustomSetConfig(DeviceConfig config)
|
||||
{
|
||||
PropertiesConfig = CommFactory.GetControlPropertiesConfig(config);
|
||||
|
||||
ConfigWriter.UpdateDeviceConfig(config);
|
||||
}
|
||||
|
||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||
{
|
||||
var joinMap = new IBasicCommunicationJoinMap(joinStart);
|
||||
|
||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
||||
|
||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||
joinMap = JsonConvert.DeserializeObject<IBasicCommunicationJoinMap>(joinMapSerialized);
|
||||
|
||||
if (CommPort == null)
|
||||
{
|
||||
Debug.Console(1, this, "Unable to link device '{0}'. CommPort is null", Key);
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||
|
||||
// this is a permanent event handler. This cannot be -= from event
|
||||
CommPort.TextReceived += (s, a) =>
|
||||
{
|
||||
Debug.Console(2, this, "RX: {0}", a.Text);
|
||||
trilist.SetString(joinMap.TextReceived.JoinNumber, a.Text);
|
||||
};
|
||||
trilist.SetStringSigAction(joinMap.SendText.JoinNumber, s => CommPort.SendText(s));
|
||||
trilist.SetStringSigAction(joinMap.SetPortConfig.JoinNumber, SetPortConfig);
|
||||
|
||||
|
||||
var sComm = this as ISocketStatus;
|
||||
if (sComm == null) return;
|
||||
sComm.ConnectionChange += (s, a) =>
|
||||
{
|
||||
trilist.SetUshort(joinMap.Status.JoinNumber, (ushort)(a.Client.ClientStatus));
|
||||
trilist.SetBool(joinMap.Connected.JoinNumber, a.Client.ClientStatus ==
|
||||
SocketStatus.SOCKET_STATUS_CONNECTED);
|
||||
};
|
||||
|
||||
trilist.SetBoolSigAction(joinMap.Connect.JoinNumber, b =>
|
||||
{
|
||||
if (b)
|
||||
{
|
||||
sComm.Connect();
|
||||
}
|
||||
else
|
||||
{
|
||||
sComm.Disconnect();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public class GenericCommFactory : EssentialsDeviceFactory<GenericComm>
|
||||
{
|
||||
public GenericCommFactory()
|
||||
{
|
||||
TypeNames = new List<string>() { "genericComm" };
|
||||
}
|
||||
|
||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||
{
|
||||
Debug.Console(1, "Factory Attempting to create new Generic Comm Device");
|
||||
return new GenericComm(dc);
|
||||
}
|
||||
}
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Crestron.SimplSharp.CrestronSockets;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core.Bridges;
|
||||
using PepperDash.Essentials.Core.Devices;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
|
||||
|
||||
namespace PepperDash.Essentials.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Serves as a generic wrapper class for all styles of IBasicCommuncation ports
|
||||
/// </summary>
|
||||
[Description("Generic communication wrapper class for any IBasicCommunication type")]
|
||||
public class GenericComm : ReconfigurableBridgableDevice
|
||||
{
|
||||
EssentialsControlPropertiesConfig PropertiesConfig;
|
||||
|
||||
public IBasicCommunication CommPort { get; private set; }
|
||||
|
||||
public GenericComm(DeviceConfig config)
|
||||
: base(config)
|
||||
{
|
||||
PropertiesConfig = CommFactory.GetControlPropertiesConfig(config);
|
||||
|
||||
CommPort = CommFactory.CreateCommForDevice(config);
|
||||
|
||||
}
|
||||
|
||||
public static IKeyed BuildDevice(DeviceConfig dc)
|
||||
{
|
||||
Debug.Console(1, "Factory Attempting to create new Generic Comm Device");
|
||||
return new GenericComm(dc);
|
||||
}
|
||||
|
||||
public void SetPortConfig(string portConfig)
|
||||
{
|
||||
// TODO: Deserialize new EssentialsControlPropertiesConfig and handle as necessary
|
||||
try
|
||||
{
|
||||
PropertiesConfig = JsonConvert.DeserializeObject<EssentialsControlPropertiesConfig>
|
||||
(portConfig);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Console(2, this, "Error deserializing port config: {0}", e);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void CustomSetConfig(DeviceConfig config)
|
||||
{
|
||||
PropertiesConfig = CommFactory.GetControlPropertiesConfig(config);
|
||||
|
||||
ConfigWriter.UpdateDeviceConfig(config);
|
||||
}
|
||||
|
||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||
{
|
||||
var joinMap = new IBasicCommunicationJoinMap();
|
||||
|
||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
||||
|
||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||
joinMap = JsonConvert.DeserializeObject<IBasicCommunicationJoinMap>(joinMapSerialized);
|
||||
joinMap.OffsetJoinNumbers(joinStart);
|
||||
|
||||
if (CommPort == null)
|
||||
{
|
||||
Debug.Console(1, this, "Unable to link device '{0}'. CommPort is null", Key);
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||
|
||||
// this is a permanent event handler. This cannot be -= from event
|
||||
CommPort.TextReceived += (s, a) =>
|
||||
{
|
||||
Debug.Console(2, this, "RX: {0}", a.Text);
|
||||
trilist.SetString(joinMap.TextReceived, a.Text);
|
||||
};
|
||||
trilist.SetStringSigAction(joinMap.SendText, s => CommPort.SendText(s));
|
||||
trilist.SetStringSigAction(joinMap.SetPortConfig, SetPortConfig);
|
||||
|
||||
|
||||
var sComm = this as ISocketStatus;
|
||||
if (sComm == null) return;
|
||||
sComm.ConnectionChange += (s, a) =>
|
||||
{
|
||||
trilist.SetUshort(joinMap.Status, (ushort)(a.Client.ClientStatus));
|
||||
trilist.SetBool(joinMap.Connected, a.Client.ClientStatus ==
|
||||
SocketStatus.SOCKET_STATUS_CONNECTED);
|
||||
};
|
||||
|
||||
trilist.SetBoolSigAction(joinMap.Connect, b =>
|
||||
{
|
||||
if (b)
|
||||
{
|
||||
sComm.Connect();
|
||||
}
|
||||
else
|
||||
{
|
||||
sComm.Disconnect();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public class GenericCommFactory : EssentialsDeviceFactory<GenericComm>
|
||||
{
|
||||
public GenericCommFactory()
|
||||
{
|
||||
TypeNames = new List<string>() { "genericComm" };
|
||||
}
|
||||
|
||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||
{
|
||||
Debug.Console(1, "Factory Attempting to create new Generic Comm Device");
|
||||
return new GenericComm(dc);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -121,22 +121,24 @@ namespace PepperDash.Essentials.Core
|
||||
var inputNumber = 0;
|
||||
var inputKeys = new List<string>();
|
||||
|
||||
var joinMap = new DisplayControllerJoinMap(joinStart);
|
||||
var joinMap = new DisplayControllerJoinMap();
|
||||
|
||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
||||
|
||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||
joinMap = JsonConvert.DeserializeObject<DisplayControllerJoinMap>(joinMapSerialized);
|
||||
|
||||
joinMap.OffsetJoinNumbers(joinStart);
|
||||
|
||||
Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||
Debug.Console(0, "Linking to Display: {0}", displayDevice.Name);
|
||||
|
||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = displayDevice.Name;
|
||||
trilist.StringInput[joinMap.Name].StringValue = displayDevice.Name;
|
||||
|
||||
var commMonitor = displayDevice as ICommunicationMonitor;
|
||||
if (commMonitor != null)
|
||||
{
|
||||
commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
|
||||
commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
|
||||
}
|
||||
|
||||
var inputNumberFeedback = new IntFeedback(() => inputNumber);
|
||||
@@ -146,16 +148,16 @@ namespace PepperDash.Essentials.Core
|
||||
|
||||
if (twoWayDisplay != null)
|
||||
{
|
||||
trilist.SetBool(joinMap.IsTwoWayDisplay.JoinNumber, true);
|
||||
trilist.SetBool(joinMap.IsTwoWayDisplay, true);
|
||||
|
||||
twoWayDisplay.CurrentInputFeedback.OutputChange += (o, a) => Debug.Console(0, "CurrentInputFeedback_OutputChange {0}", a.StringValue);
|
||||
|
||||
|
||||
inputNumberFeedback.LinkInputSig(trilist.UShortInput[joinMap.InputSelect.JoinNumber]);
|
||||
inputNumberFeedback.LinkInputSig(trilist.UShortInput[joinMap.InputSelect]);
|
||||
}
|
||||
|
||||
// Power Off
|
||||
trilist.SetSigTrueAction(joinMap.PowerOff.JoinNumber, () =>
|
||||
trilist.SetSigTrueAction(joinMap.PowerOff, () =>
|
||||
{
|
||||
inputNumber = 102;
|
||||
inputNumberFeedback.FireUpdate();
|
||||
@@ -177,10 +179,10 @@ namespace PepperDash.Essentials.Core
|
||||
}
|
||||
};
|
||||
|
||||
displayDevice.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.PowerOff.JoinNumber]);
|
||||
displayDevice.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.PowerOff]);
|
||||
|
||||
// PowerOn
|
||||
trilist.SetSigTrueAction(joinMap.PowerOn.JoinNumber, () =>
|
||||
trilist.SetSigTrueAction(joinMap.PowerOn, () =>
|
||||
{
|
||||
inputNumber = 0;
|
||||
inputNumberFeedback.FireUpdate();
|
||||
@@ -188,27 +190,21 @@ namespace PepperDash.Essentials.Core
|
||||
});
|
||||
|
||||
|
||||
displayDevice.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PowerOn.JoinNumber]);
|
||||
displayDevice.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PowerOn]);
|
||||
|
||||
for (int i = 0; i < displayDevice.InputPorts.Count; i++)
|
||||
var count = 1;
|
||||
foreach (var input in displayDevice.InputPorts)
|
||||
{
|
||||
if (i < joinMap.InputNamesOffset.JoinSpan)
|
||||
{
|
||||
inputKeys.Add(displayDevice.InputPorts[i].Key);
|
||||
var tempKey = inputKeys.ElementAt(i);
|
||||
trilist.SetSigTrueAction((ushort)(joinMap.InputSelectOffset.JoinNumber + i),
|
||||
() => displayDevice.ExecuteSwitch(displayDevice.InputPorts[tempKey].Selector));
|
||||
Debug.Console(2, displayDevice, "Setting Input Select Action on Digital Join {0} to Input: {1}",
|
||||
joinMap.InputSelectOffset.JoinNumber + i, displayDevice.InputPorts[tempKey].Key.ToString());
|
||||
trilist.StringInput[(ushort)(joinMap.InputNamesOffset.JoinNumber + i)].StringValue = displayDevice.InputPorts[i].Key.ToString();
|
||||
}
|
||||
else
|
||||
Debug.Console(0, displayDevice, Debug.ErrorLogLevel.Warning, "Device has {0} inputs. The Join Map allows up to {1} inputs. Discarding inputs {2} - {3} from bridge.",
|
||||
displayDevice.InputPorts.Count, joinMap.InputNamesOffset.JoinSpan, i + 1, displayDevice.InputPorts.Count);
|
||||
inputKeys.Add(input.Key);
|
||||
var tempKey = inputKeys.ElementAt(count - 1);
|
||||
trilist.SetSigTrueAction((ushort)(joinMap.InputSelectOffset + count), () => displayDevice.ExecuteSwitch(displayDevice.InputPorts[tempKey].Selector));
|
||||
Debug.Console(2, displayDevice, "Setting Input Select Action on Digital Join {0} to Input: {1}", joinMap.InputSelectOffset + count, displayDevice.InputPorts[tempKey].Key.ToString());
|
||||
trilist.StringInput[(ushort)(joinMap.InputNamesOffset + count)].StringValue = input.Key.ToString();
|
||||
count++;
|
||||
}
|
||||
|
||||
Debug.Console(2, displayDevice, "Setting Input Select Action on Analog Join {0}", joinMap.InputSelect);
|
||||
trilist.SetUShortSigAction(joinMap.InputSelect.JoinNumber, (a) =>
|
||||
trilist.SetUShortSigAction(joinMap.InputSelect, (a) =>
|
||||
{
|
||||
if (a == 0)
|
||||
{
|
||||
@@ -233,22 +229,17 @@ namespace PepperDash.Essentials.Core
|
||||
var volumeDisplay = displayDevice as IBasicVolumeControls;
|
||||
if (volumeDisplay == null) return;
|
||||
|
||||
trilist.SetBoolSigAction(joinMap.VolumeUp.JoinNumber, volumeDisplay.VolumeUp);
|
||||
trilist.SetBoolSigAction(joinMap.VolumeDown.JoinNumber, volumeDisplay.VolumeDown);
|
||||
trilist.SetSigTrueAction(joinMap.VolumeMute.JoinNumber, volumeDisplay.MuteToggle);
|
||||
trilist.SetBoolSigAction(joinMap.VolumeUp, volumeDisplay.VolumeUp);
|
||||
trilist.SetBoolSigAction(joinMap.VolumeDown, volumeDisplay.VolumeDown);
|
||||
trilist.SetSigTrueAction(joinMap.VolumeMute, volumeDisplay.MuteToggle);
|
||||
|
||||
var volumeDisplayWithFeedback = volumeDisplay as IBasicVolumeWithFeedback;
|
||||
|
||||
if (volumeDisplayWithFeedback == null) return;
|
||||
trilist.SetSigTrueAction(joinMap.VolumeMuteOn.JoinNumber, volumeDisplayWithFeedback.MuteOn);
|
||||
trilist.SetSigTrueAction(joinMap.VolumeMuteOff.JoinNumber, volumeDisplayWithFeedback.MuteOff);
|
||||
|
||||
|
||||
trilist.SetUShortSigAction(joinMap.VolumeLevel.JoinNumber, volumeDisplayWithFeedback.SetVolume);
|
||||
volumeDisplayWithFeedback.VolumeLevelFeedback.LinkInputSig(trilist.UShortInput[joinMap.VolumeLevel.JoinNumber]);
|
||||
volumeDisplayWithFeedback.MuteFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VolumeMute.JoinNumber]);
|
||||
volumeDisplayWithFeedback.MuteFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VolumeMuteOn.JoinNumber]);
|
||||
volumeDisplayWithFeedback.MuteFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.VolumeMuteOff.JoinNumber]);
|
||||
trilist.SetUShortSigAction(joinMap.VolumeLevel, volumeDisplayWithFeedback.SetVolume);
|
||||
volumeDisplayWithFeedback.VolumeLevelFeedback.LinkInputSig(trilist.UShortInput[joinMap.VolumeLevel]);
|
||||
volumeDisplayWithFeedback.MuteFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VolumeMute]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,16 @@ namespace PepperDash.Essentials.Core
|
||||
return joinMap;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to get the serialized join map from config
|
||||
/// </summary>
|
||||
/// <param name="joinMapKey"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetJoinMapForDevice(string joinMapKey)
|
||||
{
|
||||
return GetSerializedJoinMapForDevice(joinMapKey);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to find a custom join map by key and returns it deserialized if found
|
||||
/// </summary>
|
||||
|
||||
@@ -117,7 +117,6 @@
|
||||
<Compile Include="Bridges\JoinMaps\AppleTvJoinMap.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" />
|
||||
|
||||
@@ -89,15 +89,6 @@ namespace PepperDash.Essentials.Core
|
||||
IntFeedback VideoSourceNumericFeedback { get; }
|
||||
IntFeedback AudioSourceNumericFeedback { get; }
|
||||
void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Defines a receiver that has internal routing (DM-RMC-4K-Z-SCALER-C)
|
||||
/// </summary>
|
||||
public interface IRmcRouting : IRouting
|
||||
{
|
||||
IntFeedback AudioVideoSourceNumericFeedback { get; }
|
||||
void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -601,6 +601,13 @@ namespace PepperDash.Essentials.DM
|
||||
var cecPort2 = outputCard.Card2.HdmiOutput;
|
||||
AddDmcHdoPorts(number, cecPort1, cecPort2);
|
||||
}
|
||||
else if (type == "dmc4kzhdo")
|
||||
{
|
||||
var outputCard = new Dmc4kzHdoSingle(number, Chassis);
|
||||
var cecPort1 = outputCard.Card1.HdmiOutput;
|
||||
var cecPort2 = outputCard.Card2.HdmiOutput;
|
||||
AddDmcHdoPorts(number, cecPort1, cecPort2);
|
||||
}
|
||||
else if (type == "dmchdo")
|
||||
{
|
||||
var outputCard = new DmcHdoSingle(number, Chassis);
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Crestron.SimplSharpPro.DM;
|
||||
using Crestron.SimplSharpPro.DM.Endpoints;
|
||||
using Crestron.SimplSharpPro.DM.Endpoints.Receivers;
|
||||
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Bridges;
|
||||
|
||||
namespace PepperDash.Essentials.DM
|
||||
{
|
||||
public class DmRmc4kZ100CController : DmRmcX100CController
|
||||
{
|
||||
private readonly DmRmc4kz100C _rmc;
|
||||
|
||||
public DmRmc4kZ100CController(string key, string name, DmRmc4kz100C rmc)
|
||||
: base(key, name, rmc)
|
||||
{
|
||||
_rmc = rmc;
|
||||
|
||||
/* removed this logic because it's done in the base constructor and doesn't need to be duplicated here
|
||||
DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||
eRoutingPortConnectionType.DmCat, 0, this);
|
||||
HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||
eRoutingPortConnectionType.Hdmi, null, this) {Port = _rmc};
|
||||
*/
|
||||
|
||||
// Set Ports for CEC
|
||||
|
||||
//TODO: We need to look at this class inheritance design...not so sure these properties need to be virtual and/or abstract.
|
||||
EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue);
|
||||
EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue);
|
||||
EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue);
|
||||
EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue);
|
||||
|
||||
_rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange;
|
||||
_rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange;
|
||||
}
|
||||
|
||||
void HdmiOutput_OutputStreamChange(EndpointOutputStream outputStream, EndpointOutputStreamEventArgs args)
|
||||
{
|
||||
if (args.EventId == EndpointOutputStreamEventIds.HorizontalResolutionFeedbackEventId || args.EventId == EndpointOutputStreamEventIds.VerticalResolutionFeedbackEventId ||
|
||||
args.EventId == EndpointOutputStreamEventIds.FramesPerSecondFeedbackEventId)
|
||||
{
|
||||
VideoOutputResolutionFeedback.FireUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args)
|
||||
{
|
||||
if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId)
|
||||
{
|
||||
EdidManufacturerFeedback.FireUpdate();
|
||||
}
|
||||
else if (args.EventId == ConnectedDeviceEventIds.NameEventId)
|
||||
{
|
||||
EdidNameFeedback.FireUpdate();
|
||||
}
|
||||
else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId)
|
||||
{
|
||||
EdidPreferredTimingFeedback.FireUpdate();
|
||||
}
|
||||
else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId)
|
||||
{
|
||||
EdidSerialNumberFeedback.FireUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||
{
|
||||
LinkDmRmcToApi(this, trilist, joinStart, joinMapKey, bridge);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,151 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Crestron.SimplSharpPro.DM;
|
||||
using Crestron.SimplSharpPro.DM.Endpoints;
|
||||
using Crestron.SimplSharpPro.DM.Endpoints.Receivers;
|
||||
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Bridges;
|
||||
using PepperDash.Core;
|
||||
|
||||
namespace PepperDash.Essentials.DM
|
||||
{
|
||||
public class DmRmc4kZScalerCController : DmRmcControllerBase, IRmcRouting,
|
||||
IIROutputPorts, IComPorts, ICec
|
||||
{
|
||||
public DmRmc4kzScalerC Rmc { get; private set; }
|
||||
|
||||
public RoutingInputPort DmIn { get; private set; }
|
||||
public RoutingInputPort HdmiIn { get; private set; }
|
||||
public RoutingOutputPort HdmiOut { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The value of the current video source for the HDMI output on the receiver
|
||||
/// </summary>
|
||||
public IntFeedback AudioVideoSourceNumericFeedback { get; private set; }
|
||||
|
||||
public RoutingPortCollection<RoutingInputPort> InputPorts
|
||||
{
|
||||
get { return new RoutingPortCollection<RoutingInputPort> { DmIn, HdmiIn }; }
|
||||
}
|
||||
|
||||
public RoutingPortCollection<RoutingOutputPort> OutputPorts
|
||||
{
|
||||
get { return new RoutingPortCollection<RoutingOutputPort> { HdmiOut }; }
|
||||
}
|
||||
|
||||
public DmRmc4kZScalerCController(string key, string name, DmRmc4kzScalerC rmc)
|
||||
: base(key, name, rmc)
|
||||
{
|
||||
Rmc = rmc;
|
||||
DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||
eRoutingPortConnectionType.DmCat, 0, this);
|
||||
HdmiIn = new RoutingInputPort(DmPortName.HdmiIn, eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||
eRoutingPortConnectionType.Hdmi, 0, this);
|
||||
HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||
eRoutingPortConnectionType.Hdmi, null, this);
|
||||
|
||||
EdidManufacturerFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue);
|
||||
EdidNameFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Name.StringValue);
|
||||
EdidPreferredTimingFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue);
|
||||
EdidSerialNumberFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue);
|
||||
|
||||
VideoOutputResolutionFeedback = new StringFeedback(() => Rmc.HdmiOutput.GetVideoResolutionString());
|
||||
|
||||
Rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange;
|
||||
Rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange;
|
||||
|
||||
// Set Ports for CEC
|
||||
HdmiOut.Port = Rmc.HdmiOutput;
|
||||
|
||||
AudioVideoSourceNumericFeedback = new IntFeedback(() => (ushort)(Rmc.SelectedSourceFeedback));
|
||||
}
|
||||
|
||||
void HdmiOutput_OutputStreamChange(EndpointOutputStream outputStream, EndpointOutputStreamEventArgs args)
|
||||
{
|
||||
if (args.EventId == EndpointOutputStreamEventIds.HorizontalResolutionFeedbackEventId || args.EventId == EndpointOutputStreamEventIds.VerticalResolutionFeedbackEventId ||
|
||||
args.EventId == EndpointOutputStreamEventIds.FramesPerSecondFeedbackEventId)
|
||||
{
|
||||
VideoOutputResolutionFeedback.FireUpdate();
|
||||
}
|
||||
|
||||
if (args.EventId == EndpointOutputStreamEventIds.SelectedSourceFeedbackEventId)
|
||||
{
|
||||
AudioVideoSourceNumericFeedback.FireUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args)
|
||||
{
|
||||
if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId)
|
||||
{
|
||||
EdidManufacturerFeedback.FireUpdate();
|
||||
}
|
||||
else if (args.EventId == ConnectedDeviceEventIds.NameEventId)
|
||||
{
|
||||
EdidNameFeedback.FireUpdate();
|
||||
}
|
||||
else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId)
|
||||
{
|
||||
EdidPreferredTimingFeedback.FireUpdate();
|
||||
}
|
||||
else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId)
|
||||
{
|
||||
EdidSerialNumberFeedback.FireUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CustomActivate()
|
||||
{
|
||||
// Base does register and sets up comm monitoring.
|
||||
return base.CustomActivate();
|
||||
}
|
||||
|
||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||
{
|
||||
LinkDmRmcToApi(this, trilist, joinStart, joinMapKey, bridge);
|
||||
}
|
||||
|
||||
#region IIROutputPorts Members
|
||||
public CrestronCollection<IROutputPort> IROutputPorts { get { return Rmc.IROutputPorts; } }
|
||||
public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } }
|
||||
#endregion
|
||||
|
||||
#region IComPorts Members
|
||||
public CrestronCollection<ComPort> ComPorts { get { return Rmc.ComPorts; } }
|
||||
public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } }
|
||||
#endregion
|
||||
|
||||
#region ICec Members
|
||||
/// <summary>
|
||||
/// Gets the CEC stream directly from the HDMI port.
|
||||
/// </summary>
|
||||
public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } }
|
||||
#endregion
|
||||
|
||||
|
||||
#region IRmcRouting Members
|
||||
public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType)
|
||||
{
|
||||
Debug.Console(2, this, "Attempting a route from input {0} to HDMI Output", inputSelector);
|
||||
|
||||
var number = Convert.ToUInt16(inputSelector);
|
||||
|
||||
Rmc.AudioVideoSource = (DmRmc4kzScalerC.eAudioVideoSource)number;
|
||||
}
|
||||
|
||||
public void ExecuteNumericSwitch(ushort inputSelector, ushort outputSelector, eRoutingSignalType signalType)
|
||||
{
|
||||
Debug.Console(2, this, "Attempting a route from input {0} to HDMI Output", inputSelector);
|
||||
|
||||
Rmc.AudioVideoSource = (DmRmc4kzScalerC.eAudioVideoSource)inputSelector;
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,326 +1,307 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Crestron.SimplSharpPro.DM;
|
||||
using Crestron.SimplSharpPro.DM.Endpoints;
|
||||
using Crestron.SimplSharpPro.DM.Endpoints.Receivers;
|
||||
using Newtonsoft.Json;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Bridges;
|
||||
using PepperDash.Essentials.DM.Config;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
|
||||
namespace PepperDash.Essentials.DM
|
||||
{
|
||||
[Description("Wrapper class for all DM-RMC variants")]
|
||||
public abstract class DmRmcControllerBase : CrestronGenericBridgeableBaseDevice
|
||||
{
|
||||
public virtual StringFeedback VideoOutputResolutionFeedback { get; protected set; }
|
||||
public virtual StringFeedback EdidManufacturerFeedback { get; protected set; }
|
||||
public virtual StringFeedback EdidNameFeedback { get; protected set; }
|
||||
public virtual StringFeedback EdidPreferredTimingFeedback { get; protected set; }
|
||||
public virtual StringFeedback EdidSerialNumberFeedback { get; protected set; }
|
||||
|
||||
protected DmRmcControllerBase(string key, string name, EndpointReceiverBase device)
|
||||
: base(key, name, device)
|
||||
{
|
||||
// if wired to a chassis, skip registration step in base class
|
||||
if (device.DMOutput != null)
|
||||
{
|
||||
this.PreventRegistration = true;
|
||||
}
|
||||
AddToFeedbackList(VideoOutputResolutionFeedback, EdidManufacturerFeedback, EdidSerialNumberFeedback, EdidNameFeedback, EdidPreferredTimingFeedback);
|
||||
}
|
||||
|
||||
protected void LinkDmRmcToApi(DmRmcControllerBase rmc, BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||
{
|
||||
var joinMap = new DmRmcControllerJoinMap();
|
||||
|
||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
||||
|
||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||
joinMap = JsonConvert.DeserializeObject<DmRmcControllerJoinMap>(joinMapSerialized);
|
||||
|
||||
joinMap.OffsetJoinNumbers(joinStart);
|
||||
|
||||
Debug.Console(1, rmc, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||
|
||||
rmc.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
|
||||
if (rmc.VideoOutputResolutionFeedback != null)
|
||||
rmc.VideoOutputResolutionFeedback.LinkInputSig(trilist.StringInput[joinMap.CurrentOutputResolution]);
|
||||
if (rmc.EdidManufacturerFeedback != null)
|
||||
rmc.EdidManufacturerFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidManufacturer]);
|
||||
if (rmc.EdidNameFeedback != null)
|
||||
rmc.EdidNameFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidName]);
|
||||
if (rmc.EdidPreferredTimingFeedback != null)
|
||||
rmc.EdidPreferredTimingFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidPrefferedTiming]);
|
||||
if (rmc.EdidSerialNumberFeedback != null)
|
||||
rmc.EdidSerialNumberFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidSerialNumber]);
|
||||
|
||||
//If the device is an DM-RMC-4K-Z-SCALER-C
|
||||
var routing = rmc as IRmcRouting;
|
||||
|
||||
if (routing != null)
|
||||
{
|
||||
if (routing.AudioVideoSourceNumericFeedback != null)
|
||||
routing.AudioVideoSourceNumericFeedback.LinkInputSig(trilist.UShortInput[joinMap.AudioVideoSource]);
|
||||
|
||||
trilist.SetUShortSigAction(joinMap.AudioVideoSource, (a) => routing.ExecuteNumericSwitch(a, 1, eRoutingSignalType.AudioVideo));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class DmHdBaseTControllerBase : CrestronGenericBaseDevice
|
||||
{
|
||||
public HDBaseTBase Rmc { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Make a Crestron RMC and put it in here
|
||||
/// </summary>
|
||||
public DmHdBaseTControllerBase(string key, string name, HDBaseTBase rmc)
|
||||
: base(key, name, rmc)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class DmRmcHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// A factory method for various DmTxControllers
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="props"></param>
|
||||
/// <returns></returns>
|
||||
public static CrestronGenericBaseDevice GetDmRmcController(string key, string name, string typeName, DmRmcPropertiesConfig props)
|
||||
{
|
||||
// switch on type name... later...
|
||||
|
||||
typeName = typeName.ToLower();
|
||||
uint ipid = props.Control.IpIdInt; // Convert.ToUInt16(props.Id, 16);
|
||||
|
||||
|
||||
|
||||
// right here, we need to grab the tie line that associates this
|
||||
// RMC with a chassis or processor. If the RMC input's tie line is not
|
||||
// connected to a chassis, then it's parent is the processor.
|
||||
// If the RMC is connected to a chassis, then we need to grab the
|
||||
// output number from the tie line and use that to plug it in.
|
||||
// Example of chassis-connected:
|
||||
//{
|
||||
// "sourceKey": "dmMd8x8-1",
|
||||
// "sourcePort": "anyOut2",
|
||||
// "destinationKey": "dmRmc100C-2",
|
||||
// "destinationPort": "DmIn"
|
||||
//}
|
||||
|
||||
// Tx -> RMC link:
|
||||
//{
|
||||
// "sourceKey": "dmTx201C-1",
|
||||
// "sourcePort": "DmOut",
|
||||
// "destinationKey": "dmRmc100C-2",
|
||||
// "destinationPort": "DmIn"
|
||||
//}
|
||||
|
||||
var tlc = TieLineCollection.Default;
|
||||
// grab the tie line that has this key as
|
||||
// THIS DOESN'T WORK BECAUSE THE RMC THAT WE NEED (THIS) HASN'T BEEN MADE
|
||||
// YET AND THUS WILL NOT HAVE A TIE LINE...
|
||||
var inputTieLine = tlc.FirstOrDefault(t =>
|
||||
{
|
||||
var d = t.DestinationPort.ParentDevice;
|
||||
return d.Key.Equals(key, StringComparison.OrdinalIgnoreCase)
|
||||
&& d is DmChassisController;
|
||||
});
|
||||
|
||||
var pKey = props.ParentDeviceKey.ToLower();
|
||||
|
||||
|
||||
|
||||
|
||||
// Non-DM-chassis endpoints
|
||||
if (pKey == "processor")
|
||||
{
|
||||
// Catch constructor failures, mainly dues to IPID
|
||||
try
|
||||
{
|
||||
if (typeName.StartsWith("dmrmc100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc100C(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc100s"))
|
||||
return new DmRmc100SController(key, name, new DmRmc100S(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc4k100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc4k100C(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc4kz100c"))
|
||||
return new DmRmc4kZ100CController(key, name, new DmRmc4kz100C(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc150s"))
|
||||
return new DmRmc150SController(key, name, new DmRmc150S(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc200c"))
|
||||
return new DmRmc200CController(key, name, new DmRmc200C(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc200s"))
|
||||
return new DmRmc200SController(key, name, new DmRmc200S(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc200s2"))
|
||||
return new DmRmc200S2Controller(key, name, new DmRmc200S2(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmcscalerc"))
|
||||
return new DmRmcScalerCController(key, name, new DmRmcScalerC(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmcscalers"))
|
||||
return new DmRmcScalerSController(key, name, new DmRmcScalerS(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmcscalers2"))
|
||||
return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc4kscalerc"))
|
||||
return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc4kscalercdsp"))
|
||||
return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc4kzscalerc"))
|
||||
return new DmRmc4kZScalerCController(key, name, new DmRmc4kzScalerC(ipid, Global.ControlSystem));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message);
|
||||
}
|
||||
|
||||
|
||||
Debug.Console(0, "Cannot create DM-RMC of type: '{0}'", typeName);
|
||||
}
|
||||
// Endpoints attached to DM Chassis
|
||||
else
|
||||
{
|
||||
var parentDev = DeviceManager.GetDeviceForKey(pKey);
|
||||
if (!(parentDev is IDmSwitch))
|
||||
{
|
||||
Debug.Console(0, "Cannot create DM device '{0}'. '{1}' is not a DM Chassis.",
|
||||
key, pKey);
|
||||
return null;
|
||||
}
|
||||
|
||||
var chassis = (parentDev as IDmSwitch).Chassis;
|
||||
var num = props.ParentOutputNumber;
|
||||
if (num <= 0 || num > chassis.NumberOfOutputs)
|
||||
{
|
||||
Debug.Console(0, "Cannot create DM device '{0}'. Output number '{1}' is out of range",
|
||||
key, num);
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
var controller = (parentDev as IDmSwitch);
|
||||
controller.RxDictionary.Add(num, key);
|
||||
}
|
||||
// Catch constructor failures, mainly dues to IPID
|
||||
try
|
||||
{
|
||||
|
||||
// Must use different constructor for CPU3 chassis types. No IPID
|
||||
if (chassis is DmMd8x8Cpu3 || chassis is DmMd16x16Cpu3 ||
|
||||
chassis is DmMd32x32Cpu3 || chassis is DmMd8x8Cpu3rps ||
|
||||
chassis is DmMd16x16Cpu3rps || chassis is DmMd32x32Cpu3rps ||
|
||||
chassis is DmMd128x128 || chassis is DmMd64x64)
|
||||
{
|
||||
if (typeName.StartsWith("hdbasetrx"))
|
||||
return new HDBaseTRxController(key, name, new HDRx3CB(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4k100c1g"))
|
||||
return new DmRmc4k100C1GController(key, name, new DmRmc4K100C1G(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc100C(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc100s"))
|
||||
return new DmRmc100SController(key, name, new DmRmc100S(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4k100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc4k100C(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kz100c"))
|
||||
return new DmRmc4kZ100CController(key, name, new DmRmc4kz100C(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc150s"))
|
||||
return new DmRmc150SController(key, name, new DmRmc150S(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc200c"))
|
||||
return new DmRmc200CController(key, name, new DmRmc200C(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc200s"))
|
||||
return new DmRmc200SController(key, name, new DmRmc200S(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc200s2"))
|
||||
return new DmRmc200S2Controller(key, name, new DmRmc200S2(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmcscalerc"))
|
||||
return new DmRmcScalerCController(key, name, new DmRmcScalerC(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmcscalers"))
|
||||
return new DmRmcScalerSController(key, name, new DmRmcScalerS(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmcscalers2"))
|
||||
return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kscalerc"))
|
||||
return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kscalercdsp"))
|
||||
return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kzscalerc"))
|
||||
return new DmRmc4kZScalerCController(key, name, new DmRmc4kzScalerC(chassis.Outputs[num]));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (typeName.StartsWith("hdbasetrx"))
|
||||
return new HDBaseTRxController(key, name, new HDRx3CB(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4k100c1g"))
|
||||
return new DmRmc4k100C1GController(key, name, new DmRmc4K100C1G(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc100C(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc100s"))
|
||||
return new DmRmc100SController(key, name, new DmRmc100S(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4k100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc4k100C(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kz100c"))
|
||||
return new DmRmc4kZ100CController(key, name, new DmRmc4kz100C(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc150s"))
|
||||
return new DmRmc150SController(key, name, new DmRmc150S(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc200c"))
|
||||
return new DmRmc200CController(key, name, new DmRmc200C(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc200s"))
|
||||
return new DmRmc200SController(key, name, new DmRmc200S(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc200s2"))
|
||||
return new DmRmc200S2Controller(key, name, new DmRmc200S2(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmcscalerc"))
|
||||
return new DmRmcScalerCController(key, name, new DmRmcScalerC(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmcscalers"))
|
||||
return new DmRmcScalerSController(key, name, new DmRmcScalerS(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmcscalers2"))
|
||||
return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kscalerc"))
|
||||
return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kscalercdsp"))
|
||||
return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kzscalerc"))
|
||||
return new DmRmc4kZScalerCController(key, name, new DmRmc4kzScalerC(chassis.Outputs[num]));
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public class DmRmcControllerFactory : EssentialsDeviceFactory<DmRmcControllerBase>
|
||||
{
|
||||
public DmRmcControllerFactory()
|
||||
{
|
||||
TypeNames = new List<string>() { "hdbasetrx", "dmrmc4k100c1g", "dmrmc100c", "dmrmc100s", "dmrmc4k100c", "dmrmc150s",
|
||||
"dmrmc200c", "dmrmc200s", "dmrmc200s2", "dmrmcscalerc", "dmrmcscalers", "dmrmcscalers2", "dmrmc4kscalerc", "dmrmc4kscalercdsp",
|
||||
"dmrmc4kz100c", "dmrmckzscalerc" };
|
||||
}
|
||||
|
||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||
{
|
||||
var type = dc.Type.ToLower();
|
||||
|
||||
Debug.Console(1, "Factory Attempting to create new DM-RMC Device");
|
||||
|
||||
var props = JsonConvert.DeserializeObject
|
||||
<PepperDash.Essentials.DM.Config.DmRmcPropertiesConfig>(dc.Properties.ToString());
|
||||
return PepperDash.Essentials.DM.DmRmcHelper.GetDmRmcController(dc.Key, dc.Name, type, props);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Crestron.SimplSharpPro.DM;
|
||||
using Crestron.SimplSharpPro.DM.Endpoints;
|
||||
using Crestron.SimplSharpPro.DM.Endpoints.Receivers;
|
||||
using Newtonsoft.Json;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Bridges;
|
||||
using PepperDash.Essentials.DM.Config;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
|
||||
namespace PepperDash.Essentials.DM
|
||||
{
|
||||
[Description("Wrapper class for all DM-RMC variants")]
|
||||
public abstract class DmRmcControllerBase : CrestronGenericBridgeableBaseDevice
|
||||
{
|
||||
public virtual StringFeedback VideoOutputResolutionFeedback { get; protected set; }
|
||||
public virtual StringFeedback EdidManufacturerFeedback { get; protected set; }
|
||||
public virtual StringFeedback EdidNameFeedback { get; protected set; }
|
||||
public virtual StringFeedback EdidPreferredTimingFeedback { get; protected set; }
|
||||
public virtual StringFeedback EdidSerialNumberFeedback { get; protected set; }
|
||||
|
||||
public DmRmcControllerBase(string key, string name, EndpointReceiverBase device)
|
||||
: base(key, name, device)
|
||||
{
|
||||
// if wired to a chassis, skip registration step in base class
|
||||
if (device.DMOutput != null)
|
||||
{
|
||||
this.PreventRegistration = true;
|
||||
}
|
||||
AddToFeedbackList(VideoOutputResolutionFeedback, EdidManufacturerFeedback, EdidSerialNumberFeedback, EdidNameFeedback, EdidPreferredTimingFeedback);
|
||||
}
|
||||
|
||||
protected void LinkDmRmcToApi(DmRmcControllerBase rmc, BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||
{
|
||||
var joinMap = new DmRmcControllerJoinMap();
|
||||
|
||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
||||
|
||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||
joinMap = JsonConvert.DeserializeObject<DmRmcControllerJoinMap>(joinMapSerialized);
|
||||
|
||||
joinMap.OffsetJoinNumbers(joinStart);
|
||||
|
||||
Debug.Console(1, rmc, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||
|
||||
rmc.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
|
||||
if (rmc.VideoOutputResolutionFeedback != null)
|
||||
rmc.VideoOutputResolutionFeedback.LinkInputSig(trilist.StringInput[joinMap.CurrentOutputResolution]);
|
||||
if (rmc.EdidManufacturerFeedback != null)
|
||||
rmc.EdidManufacturerFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidManufacturer]);
|
||||
if (rmc.EdidNameFeedback != null)
|
||||
rmc.EdidNameFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidName]);
|
||||
if (rmc.EdidPreferredTimingFeedback != null)
|
||||
rmc.EdidPreferredTimingFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidPrefferedTiming]);
|
||||
if (rmc.EdidSerialNumberFeedback != null)
|
||||
rmc.EdidSerialNumberFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidSerialNumber]);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class DmHdBaseTControllerBase : CrestronGenericBaseDevice
|
||||
{
|
||||
public HDBaseTBase Rmc { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Make a Crestron RMC and put it in here
|
||||
/// </summary>
|
||||
public DmHdBaseTControllerBase(string key, string name, HDBaseTBase rmc)
|
||||
: base(key, name, rmc)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class DmRmcHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// A factory method for various DmTxControllers
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="props"></param>
|
||||
/// <returns></returns>
|
||||
public static CrestronGenericBaseDevice GetDmRmcController(string key, string name, string typeName, DmRmcPropertiesConfig props)
|
||||
{
|
||||
// switch on type name... later...
|
||||
|
||||
typeName = typeName.ToLower();
|
||||
uint ipid = props.Control.IpIdInt; // Convert.ToUInt16(props.Id, 16);
|
||||
|
||||
|
||||
|
||||
// right here, we need to grab the tie line that associates this
|
||||
// RMC with a chassis or processor. If the RMC input's tie line is not
|
||||
// connected to a chassis, then it's parent is the processor.
|
||||
// If the RMC is connected to a chassis, then we need to grab the
|
||||
// output number from the tie line and use that to plug it in.
|
||||
// Example of chassis-connected:
|
||||
//{
|
||||
// "sourceKey": "dmMd8x8-1",
|
||||
// "sourcePort": "anyOut2",
|
||||
// "destinationKey": "dmRmc100C-2",
|
||||
// "destinationPort": "DmIn"
|
||||
//}
|
||||
|
||||
// Tx -> RMC link:
|
||||
//{
|
||||
// "sourceKey": "dmTx201C-1",
|
||||
// "sourcePort": "DmOut",
|
||||
// "destinationKey": "dmRmc100C-2",
|
||||
// "destinationPort": "DmIn"
|
||||
//}
|
||||
|
||||
var tlc = TieLineCollection.Default;
|
||||
// grab the tie line that has this key as
|
||||
// THIS DOESN'T WORK BECAUSE THE RMC THAT WE NEED (THIS) HASN'T BEEN MADE
|
||||
// YET AND THUS WILL NOT HAVE A TIE LINE...
|
||||
var inputTieLine = tlc.FirstOrDefault(t =>
|
||||
{
|
||||
var d = t.DestinationPort.ParentDevice;
|
||||
return d.Key.Equals(key, StringComparison.OrdinalIgnoreCase)
|
||||
&& d is DmChassisController;
|
||||
});
|
||||
|
||||
var pKey = props.ParentDeviceKey.ToLower();
|
||||
|
||||
|
||||
|
||||
|
||||
// Non-DM-chassis endpoints
|
||||
if (pKey == "processor")
|
||||
{
|
||||
// Catch constructor failures, mainly dues to IPID
|
||||
try
|
||||
{
|
||||
if (typeName.StartsWith("dmrmc100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc100C(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc100s"))
|
||||
return new DmRmc100SController(key, name, new DmRmc100S(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc4k100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc4k100C(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc4kz100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc4kz100C(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc150s"))
|
||||
return new DmRmc150SController(key, name, new DmRmc150S(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc200c"))
|
||||
return new DmRmc200CController(key, name, new DmRmc200C(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc200s"))
|
||||
return new DmRmc200SController(key, name, new DmRmc200S(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc200s2"))
|
||||
return new DmRmc200S2Controller(key, name, new DmRmc200S2(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmcscalerc"))
|
||||
return new DmRmcScalerCController(key, name, new DmRmcScalerC(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmcscalers"))
|
||||
return new DmRmcScalerSController(key, name, new DmRmcScalerS(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmcscalers2"))
|
||||
return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc4kscalerc"))
|
||||
return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(ipid, Global.ControlSystem));
|
||||
if (typeName.StartsWith("dmrmc4kscalercdsp"))
|
||||
return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(ipid, Global.ControlSystem));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message);
|
||||
}
|
||||
|
||||
|
||||
Debug.Console(0, "Cannot create DM-RMC of type: '{0}'", typeName);
|
||||
}
|
||||
// Endpoints attached to DM Chassis
|
||||
else
|
||||
{
|
||||
var parentDev = DeviceManager.GetDeviceForKey(pKey);
|
||||
if (!(parentDev is IDmSwitch))
|
||||
{
|
||||
Debug.Console(0, "Cannot create DM device '{0}'. '{1}' is not a DM Chassis.",
|
||||
key, pKey);
|
||||
return null;
|
||||
}
|
||||
|
||||
var chassis = (parentDev as IDmSwitch).Chassis;
|
||||
var num = props.ParentOutputNumber;
|
||||
if (num <= 0 || num > chassis.NumberOfOutputs)
|
||||
{
|
||||
Debug.Console(0, "Cannot create DM device '{0}'. Output number '{1}' is out of range",
|
||||
key, num);
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
var controller = (parentDev as IDmSwitch);
|
||||
controller.RxDictionary.Add(num, key);
|
||||
}
|
||||
// Catch constructor failures, mainly dues to IPID
|
||||
try
|
||||
{
|
||||
|
||||
// Must use different constructor for CPU3 chassis types. No IPID
|
||||
if (chassis is DmMd8x8Cpu3 || chassis is DmMd16x16Cpu3 ||
|
||||
chassis is DmMd32x32Cpu3 || chassis is DmMd8x8Cpu3rps ||
|
||||
chassis is DmMd16x16Cpu3rps || chassis is DmMd32x32Cpu3rps ||
|
||||
chassis is DmMd128x128 || chassis is DmMd64x64)
|
||||
{
|
||||
if (typeName.StartsWith("hdbasetrx"))
|
||||
return new HDBaseTRxController(key, name, new HDRx3CB(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4k100c1g"))
|
||||
return new DmRmc4k100C1GController(key, name, new DmRmc4K100C1G(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc100C(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc100s"))
|
||||
return new DmRmc100SController(key, name, new DmRmc100S(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4k100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc4k100C(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kz100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc4kz100C(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc150s"))
|
||||
return new DmRmc150SController(key, name, new DmRmc150S(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc200c"))
|
||||
return new DmRmc200CController(key, name, new DmRmc200C(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc200s"))
|
||||
return new DmRmc200SController(key, name, new DmRmc200S(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc200s2"))
|
||||
return new DmRmc200S2Controller(key, name, new DmRmc200S2(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmcscalerc"))
|
||||
return new DmRmcScalerCController(key, name, new DmRmcScalerC(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmcscalers"))
|
||||
return new DmRmcScalerSController(key, name, new DmRmcScalerS(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmcscalers2"))
|
||||
return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kscalerc"))
|
||||
return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kscalercdsp"))
|
||||
return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(chassis.Outputs[num]));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (typeName.StartsWith("hdbasetrx"))
|
||||
return new HDBaseTRxController(key, name, new HDRx3CB(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4k100c1g"))
|
||||
return new DmRmc4k100C1GController(key, name, new DmRmc4K100C1G(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc100C(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc100s"))
|
||||
return new DmRmc100SController(key, name, new DmRmc100S(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4k100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc4k100C(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kz100c"))
|
||||
return new DmRmcX100CController(key, name, new DmRmc4kz100C(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc150s"))
|
||||
return new DmRmc150SController(key, name, new DmRmc150S(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc200c"))
|
||||
return new DmRmc200CController(key, name, new DmRmc200C(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc200s"))
|
||||
return new DmRmc200SController(key, name, new DmRmc200S(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc200s2"))
|
||||
return new DmRmc200S2Controller(key, name, new DmRmc200S2(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmcscalerc"))
|
||||
return new DmRmcScalerCController(key, name, new DmRmcScalerC(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmcscalers"))
|
||||
return new DmRmcScalerSController(key, name, new DmRmcScalerS(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmcscalers2"))
|
||||
return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kscalerc"))
|
||||
return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(ipid, chassis.Outputs[num]));
|
||||
if (typeName.StartsWith("dmrmc4kscalercdsp"))
|
||||
return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(ipid, chassis.Outputs[num]));
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public class DmRmcControllerFactory : EssentialsDeviceFactory<DmRmcControllerBase>
|
||||
{
|
||||
public DmRmcControllerFactory()
|
||||
{
|
||||
TypeNames = new List<string>() { "hdbasetrx", "dmrmc4k100c1g", "dmrmc100c", "dmrmc100s", "dmrmc4k100c", "dmrmc150s",
|
||||
"dmrmc200c", "dmrmc200s", "dmrmc200s2", "dmrmcscalerc", "dmrmcscalers", "dmrmcscalers2", "dmrmc4kscalerc", "dmrmc4kscalercdsp" };
|
||||
}
|
||||
|
||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||
{
|
||||
var type = dc.Type.ToLower();
|
||||
|
||||
Debug.Console(1, "Factory Attempting to create new DM-RMC Device");
|
||||
|
||||
var props = JsonConvert.DeserializeObject
|
||||
<PepperDash.Essentials.DM.Config.DmRmcPropertiesConfig>(dc.Properties.ToString());
|
||||
return PepperDash.Essentials.DM.DmRmcHelper.GetDmRmcController(dc.Key, dc.Name, type, props);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -21,10 +21,10 @@ namespace PepperDash.Essentials.DM
|
||||
public class DmRmcX100CController : DmRmcControllerBase, IRoutingInputsOutputs,
|
||||
IIROutputPorts, IComPorts, ICec
|
||||
{
|
||||
public DmRmc100C Rmc { get; protected set; }
|
||||
public DmRmc100C Rmc { get; private set; }
|
||||
|
||||
public RoutingInputPort DmIn { get; protected set; }
|
||||
public RoutingOutputPort HdmiOut { get; protected set; }
|
||||
public RoutingInputPort DmIn { get; private set; }
|
||||
public RoutingOutputPort HdmiOut { get; private set; }
|
||||
|
||||
public RoutingPortCollection<RoutingInputPort> InputPorts
|
||||
{
|
||||
|
||||
@@ -0,0 +1,159 @@
|
||||
<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>{9199CE8A-0C9F-4952-8672-3EED798B284F}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>PepperDash.Essentials.DM</RootNamespace>
|
||||
<AssemblyName>PepperDash_Essentials_DM</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.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.0.26.30384, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\pepperdashcore-builds\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="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="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AirMedia\AirMediaPropertiesConfig.cs" />
|
||||
<Compile Include="AirMedia\AirMediaController.cs" />
|
||||
<Compile Include="Chassis\DmBladeChassisController.cs" />
|
||||
<Compile Include="Chassis\DmCardAudioOutput.cs" />
|
||||
<Compile Include="Chassis\DmChassisController.cs" />
|
||||
<Compile Include="Chassis\DmpsAudioOutputController.cs" />
|
||||
<Compile Include="Chassis\DmpsInternalVirtualDmTxController.cs" />
|
||||
<Compile Include="Chassis\DmpsRoutingController.cs" />
|
||||
<Compile Include="Chassis\HdMdNxM4kEController.cs" />
|
||||
<Compile Include="Endpoints\Transmitters\TxInterfaces.cs" />
|
||||
<Compile Include="IDmSwitch.cs" />
|
||||
<Compile Include="Config\DmpsRoutingConfig.cs" />
|
||||
<Compile Include="Config\DmRmcConfig.cs" />
|
||||
<Compile Include="Config\DmTxConfig.cs" />
|
||||
<Compile Include="Config\DMChassisConfig.cs" />
|
||||
<Compile Include="Config\HdMdNxM4kEPropertiesConfig.cs" />
|
||||
<Compile Include="Config\InputPropertiesConfig.cs" />
|
||||
<Compile Include="DmPortName.cs" />
|
||||
<Compile Include="Endpoints\DGEs\DgeController.cs" />
|
||||
<Compile Include="Endpoints\DGEs\DgePropertiesConfig.cs" />
|
||||
<Compile Include="DmLite\HdMdxxxCEController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmHdBaseTEndpointController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmc100SController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmc150SController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmc200CController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmc200S2Controller.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmc200SController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmc4k100C1GController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmc4KScalerCController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmc4kScalerCDspController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmcScalerCController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmcX100CController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmcHelper.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmcScalerS2Controller.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmcScalerSController.cs" />
|
||||
<Compile Include="Endpoints\Transmitters\DmTx200Controller.cs" />
|
||||
<Compile Include="Endpoints\Transmitters\DmTx401CController.cs" />
|
||||
<Compile Include="Endpoints\Transmitters\DmTx4k100Controller.cs" />
|
||||
<Compile Include="Endpoints\Transmitters\DmTx4k202CController.cs" />
|
||||
<Compile Include="Endpoints\Transmitters\DmTx4k302CController.cs" />
|
||||
<Compile Include="Endpoints\Transmitters\DmTx201CController.cs" />
|
||||
<Compile Include="Endpoints\Transmitters\DmTx4kz302CController.cs" />
|
||||
<Compile Include="Endpoints\Transmitters\DmTxHelpers.cs" />
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="Config\DeviceFactory.cs" />
|
||||
<Compile Include="IDmHdmiInputExtensions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="VideoStatusHelpers.cs" />
|
||||
<None Include="app.config" />
|
||||
<None Include="Properties\ControlSystem.cfg" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\Essentials Core\PepperDashEssentialsBase\PepperDash_Essentials_Core.csproj">
|
||||
<Project>{A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}</Project>
|
||||
<Name>PepperDash_Essentials_Core</Name>
|
||||
</ProjectReference>
|
||||
</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>
|
||||
@@ -100,8 +100,6 @@
|
||||
<Compile Include="Chassis\DmpsInternalVirtualDmTxController.cs" />
|
||||
<Compile Include="Chassis\DmpsRoutingController.cs" />
|
||||
<Compile Include="Chassis\HdMdNxM4kEController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmc4kZ100CController.cs" />
|
||||
<Compile Include="Endpoints\Receivers\DmRmc4kZScalerCController.cs" />
|
||||
<Compile Include="Endpoints\Transmitters\TxInterfaces.cs" />
|
||||
<Compile Include="IDmSwitch.cs" />
|
||||
<Compile Include="Config\DmpsRoutingConfig.cs" />
|
||||
|
||||
@@ -110,7 +110,6 @@
|
||||
<Compile Include="Codec\iCodecAudio.cs" />
|
||||
<Compile Include="ImageProcessors\TVOneCorio.cs" />
|
||||
<Compile Include="ImageProcessors\TVOneCorioPropertiesConfig.cs" />
|
||||
<Compile Include="Occupancy\CenOdtOccupancySensorBaseController.cs" />
|
||||
<Compile Include="Occupancy\GlsOdtOccupancySensorController.cs" />
|
||||
<Compile Include="Power Controllers\Digitallogger.cs" />
|
||||
<Compile Include="Power Controllers\DigitalLoggerPropertiesConfig.cs" />
|
||||
|
||||
@@ -1,564 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Crestron.SimplSharpPro.GeneralIO;
|
||||
using Newtonsoft.Json;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
using PepperDash.Essentials.Core.Bridges;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.Occupancy
|
||||
{
|
||||
public class CenOdtOccupancySensorBaseController : CrestronGenericBridgeableBaseDevice, IOccupancyStatusProvider
|
||||
{
|
||||
public CenOdtCPoe OccSensor { get; private set; }
|
||||
|
||||
public BoolFeedback RoomIsOccupiedFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback GraceOccupancyDetectedFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback RawOccupancyFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback PirSensorEnabledFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback LedFlashEnabledFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback ShortTimeoutEnabledFeedback { get; private set; }
|
||||
|
||||
public IntFeedback PirSensitivityInVacantStateFeedback { get; private set; }
|
||||
|
||||
public IntFeedback PirSensitivityInOccupiedStateFeedback { get; private set; }
|
||||
|
||||
public IntFeedback CurrentTimeoutFeedback { get; private set; }
|
||||
|
||||
public IntFeedback RemoteTimeoutFeedback { get; private set; }
|
||||
|
||||
public IntFeedback InternalPhotoSensorValue { get; set; }
|
||||
|
||||
public IntFeedback ExternalPhotoSensorValue { get; set; }
|
||||
|
||||
public BoolFeedback OrWhenVacatedFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback AndWhenVacatedFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback UltrasonicAEnabledFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback UltrasonicBEnabledFeedback { get; private set; }
|
||||
|
||||
public IntFeedback UltrasonicSensitivityInVacantStateFeedback { get; private set; }
|
||||
|
||||
public IntFeedback UltrasonicSensitivityInOccupiedStateFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback RawOccupancyPirFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback RawOccupancyUsFeedback { get; private set; }
|
||||
|
||||
// Debug properties
|
||||
public bool InTestMode { get; private set; }
|
||||
|
||||
public bool TestRoomIsOccupiedFeedback { get; private set; }
|
||||
|
||||
public Func<bool> RoomIsOccupiedFeedbackFunc
|
||||
{
|
||||
get
|
||||
{
|
||||
return () => InTestMode ? TestRoomIsOccupiedFeedback : OccSensor.OccupancyDetectedFeedback.BoolValue;
|
||||
}
|
||||
}
|
||||
|
||||
public CenOdtOccupancySensorBaseController(string key, string name, CenOdtCPoe sensor)
|
||||
: base(key, name, sensor)
|
||||
{
|
||||
OccSensor = sensor;
|
||||
|
||||
RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc);
|
||||
|
||||
PirSensorEnabledFeedback = new BoolFeedback(() => OccSensor.PassiveInfraredSensorEnabledFeedback.BoolValue);
|
||||
|
||||
LedFlashEnabledFeedback = new BoolFeedback(() => OccSensor.LedFlashEnabledFeedback.BoolValue);
|
||||
|
||||
ShortTimeoutEnabledFeedback = new BoolFeedback(() => OccSensor.ShortTimeoutEnabledFeedback.BoolValue);
|
||||
|
||||
PirSensitivityInVacantStateFeedback = new IntFeedback(() => (int)OccSensor.PassiveInfraredSensorSensitivityInVacantStateFeedback);
|
||||
|
||||
PirSensitivityInOccupiedStateFeedback = new IntFeedback(() => (int)OccSensor.PassiveInfraredSensorSensitivityInOccupiedStateFeedback);
|
||||
|
||||
CurrentTimeoutFeedback = new IntFeedback(() => OccSensor.CurrentTimeoutFeedback.UShortValue);
|
||||
|
||||
RemoteTimeoutFeedback = new IntFeedback(() => OccSensor.RemoteTimeout.UShortValue);
|
||||
|
||||
GraceOccupancyDetectedFeedback = new BoolFeedback(() => OccSensor.GraceOccupancyDetectedFeedback.BoolValue);
|
||||
|
||||
RawOccupancyFeedback = new BoolFeedback(() => OccSensor.RawOccupancyDetectedFeedback.BoolValue);
|
||||
|
||||
InternalPhotoSensorValue = new IntFeedback(() => OccSensor.InternalPhotoSensorValueFeedback.UShortValue);
|
||||
|
||||
//ExternalPhotoSensorValue = new IntFeedback(() => OccSensor.ex.UShortValue);
|
||||
|
||||
AndWhenVacatedFeedback = new BoolFeedback(() => OccSensor.AndWhenVacatedFeedback.BoolValue);
|
||||
|
||||
OrWhenVacatedFeedback = new BoolFeedback(() => OccSensor.OrWhenVacatedFeedback.BoolValue);
|
||||
|
||||
UltrasonicAEnabledFeedback = new BoolFeedback(() => OccSensor.UltrasonicSensorSideAEnabledFeedback.BoolValue);
|
||||
|
||||
UltrasonicBEnabledFeedback = new BoolFeedback(() => OccSensor.UltrasonicSensorSideBEnabledFeedback.BoolValue);
|
||||
|
||||
RawOccupancyPirFeedback = new BoolFeedback(() => OccSensor.RawOccupancyDetectedByPassiveInfraredSensorFeedback.BoolValue);
|
||||
|
||||
RawOccupancyUsFeedback = new BoolFeedback(() => OccSensor.RawOccupancyDetectedByUltrasonicSensorFeedback.BoolValue);
|
||||
|
||||
UltrasonicSensitivityInVacantStateFeedback = new IntFeedback(() => (int)OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback);
|
||||
|
||||
UltrasonicSensitivityInOccupiedStateFeedback = new IntFeedback(() => (int)OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback);
|
||||
|
||||
OccSensor.BaseEvent += new Crestron.SimplSharpPro.BaseEventHandler(OccSensor_BaseEvent);
|
||||
|
||||
OccSensor.CenOccupancySensorChange += new GenericEventHandler(OccSensor_CenOccupancySensorChange);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Catches events for feedbacks on the base class. Any extending wrapper class should call this delegate after it checks for it's own event IDs.
|
||||
/// </summary>
|
||||
/// <param name="device"></param>
|
||||
/// <param name="args"></param>
|
||||
protected virtual void OccSensor_CenOccupancySensorChange(object device, GenericEventArgs args)
|
||||
{
|
||||
if (args.EventId == GlsOccupancySensorBase.PirEnabledFeedbackEventId)
|
||||
PirSensorEnabledFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.LedFlashEnabledFeedbackEventId)
|
||||
LedFlashEnabledFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.ShortTimeoutEnabledFeedbackEventId)
|
||||
ShortTimeoutEnabledFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.PirSensitivityInOccupiedStateFeedbackEventId)
|
||||
PirSensitivityInOccupiedStateFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.PirSensitivityInVacantStateFeedbackEventId)
|
||||
PirSensitivityInVacantStateFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.RawOccupancyPirFeedbackEventId)
|
||||
RawOccupancyPirFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.RawOccupancyUsFeedbackEventId)
|
||||
RawOccupancyUsFeedback.FireUpdate();
|
||||
}
|
||||
|
||||
protected virtual void OccSensor_BaseEvent(Crestron.SimplSharpPro.GenericBase device, Crestron.SimplSharpPro.BaseEventArgs args)
|
||||
{
|
||||
Debug.Console(2, this, "PoEOccupancySensorChange EventId: {0}", args.EventId);
|
||||
|
||||
if (args.EventId == Crestron.SimplSharpPro.GeneralIO.GlsOccupancySensorBase.RoomOccupiedFeedbackEventId
|
||||
|| args.EventId == Crestron.SimplSharpPro.GeneralIO.GlsOccupancySensorBase.RoomVacantFeedbackEventId)
|
||||
{
|
||||
Debug.Console(1, this, "Occupancy State: {0}", OccSensor.OccupancyDetectedFeedback.BoolValue);
|
||||
RoomIsOccupiedFeedback.FireUpdate();
|
||||
}
|
||||
else if (args.EventId == GlsOccupancySensorBase.TimeoutFeedbackEventId)
|
||||
CurrentTimeoutFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.TimeoutLocalFeedbackEventId)
|
||||
RemoteTimeoutFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.GraceOccupancyDetectedFeedbackEventId)
|
||||
GraceOccupancyDetectedFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.RawOccupancyFeedbackEventId)
|
||||
RawOccupancyFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.InternalPhotoSensorValueFeedbackEventId)
|
||||
InternalPhotoSensorValue.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.ExternalPhotoSensorValueFeedbackEventId)
|
||||
ExternalPhotoSensorValue.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.AndWhenVacatedFeedbackEventId)
|
||||
AndWhenVacatedFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.OrWhenVacatedFeedbackEventId)
|
||||
OrWhenVacatedFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.UsAEnabledFeedbackEventId)
|
||||
UltrasonicAEnabledFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.UsBEnabledFeedbackEventId)
|
||||
UltrasonicBEnabledFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.UsSensitivityInOccupiedStateFeedbackEventId)
|
||||
UltrasonicSensitivityInOccupiedStateFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.UsSensitivityInVacantStateFeedbackEventId)
|
||||
UltrasonicSensitivityInVacantStateFeedback.FireUpdate();
|
||||
}
|
||||
|
||||
public void SetTestMode(bool mode)
|
||||
{
|
||||
InTestMode = mode;
|
||||
|
||||
Debug.Console(1, this, "In Mock Mode: '{0}'", InTestMode);
|
||||
}
|
||||
|
||||
public void SetTestOccupiedState(bool state)
|
||||
{
|
||||
if (!InTestMode)
|
||||
Debug.Console(1, "Mock mode not enabled");
|
||||
else
|
||||
{
|
||||
TestRoomIsOccupiedFeedback = state;
|
||||
|
||||
RoomIsOccupiedFeedback.FireUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables the PIR sensor
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetPirEnable(bool state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
OccSensor.EnablePassiveInfraredSensor();
|
||||
}
|
||||
else
|
||||
{
|
||||
OccSensor.DisablePassiveInfraredSensor();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables the LED Flash
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetLedFlashEnable(bool state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
OccSensor.EnableLedFlash();
|
||||
}
|
||||
else
|
||||
{
|
||||
OccSensor.DisableLedFlash();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables short timeout based on state
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetShortTimeoutState(bool state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
OccSensor.EnableShortTimeout();
|
||||
}
|
||||
else
|
||||
{
|
||||
OccSensor.DisableShortTimeout();
|
||||
}
|
||||
}
|
||||
|
||||
public void IncrementPirSensitivityInOccupiedState(bool pressRelease)
|
||||
{
|
||||
if ((int)OccSensor.PassiveInfraredSensorSensitivityInOccupiedStateFeedback != 3)
|
||||
{
|
||||
OccSensor.PassiveInfraredSensorSensitivityInOccupiedState = OccSensor.PassiveInfraredSensorSensitivityInOccupiedStateFeedback + 1;
|
||||
}
|
||||
}
|
||||
|
||||
public void DecrementPirSensitivityInOccupiedState(bool pressRelease)
|
||||
{
|
||||
if ((int)OccSensor.PassiveInfraredSensorSensitivityInOccupiedStateFeedback != 0)
|
||||
{
|
||||
OccSensor.PassiveInfraredSensorSensitivityInOccupiedState = OccSensor.PassiveInfraredSensorSensitivityInOccupiedStateFeedback - 1;
|
||||
}
|
||||
}
|
||||
|
||||
public void IncrementPirSensitivityInVacantState(bool pressRelease)
|
||||
{
|
||||
if ((int)OccSensor.PassiveInfraredSensorSensitivityInVacantStateFeedback != 3)
|
||||
{
|
||||
OccSensor.PassiveInfraredSensorSensitivityInVacantState = OccSensor.PassiveInfraredSensorSensitivityInVacantStateFeedback + 1;
|
||||
}
|
||||
}
|
||||
|
||||
public void DecrementPirSensitivityInVacantState(bool pressRelease)
|
||||
{
|
||||
if ((int)OccSensor.PassiveInfraredSensorSensitivityInVacantStateFeedback != 0)
|
||||
{
|
||||
OccSensor.PassiveInfraredSensorSensitivityInVacantState = OccSensor.PassiveInfraredSensorSensitivityInVacantStateFeedback - 1;
|
||||
}
|
||||
}
|
||||
|
||||
public void IncrementUsSensitivityInOccupiedState(bool pressRelease)
|
||||
{
|
||||
if ((int)OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback < 3)
|
||||
{
|
||||
OccSensor.UltrasonicSensorSensitivityInOccupiedState = OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback + 1;
|
||||
}
|
||||
else if ((int)OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback > 4)
|
||||
{
|
||||
OccSensor.UltrasonicSensorSensitivityInOccupiedState = OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback - 1;
|
||||
}
|
||||
else if ((int)OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback == 4)
|
||||
{
|
||||
OccSensor.UltrasonicSensorSensitivityInOccupiedState = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public void DecrementUsSensitivityInOccupiedState(bool pressRelease)
|
||||
{
|
||||
if ((int)OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback > 0
|
||||
&& (int)OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback < 4)
|
||||
{
|
||||
OccSensor.UltrasonicSensorSensitivityInOccupiedState = OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback - 1;
|
||||
}
|
||||
else if ((int)OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback > 3
|
||||
&& (int)OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback < 7)
|
||||
{
|
||||
OccSensor.UltrasonicSensorSensitivityInOccupiedState = OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback + 1;
|
||||
}
|
||||
}
|
||||
|
||||
public void IncrementUsSensitivityInVacantState(bool pressRelease)
|
||||
{
|
||||
if ((int)OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback < 3)
|
||||
{
|
||||
OccSensor.UltrasonicSensorSensitivityInVacantState = OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback + 1;
|
||||
}
|
||||
else if ((int)OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback > 4)
|
||||
{
|
||||
OccSensor.UltrasonicSensorSensitivityInVacantState = OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback - 1;
|
||||
}
|
||||
else if ((int)OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback == 4)
|
||||
{
|
||||
OccSensor.UltrasonicSensorSensitivityInVacantState = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public void DecrementUsSensitivityInVacantState(bool pressRelease)
|
||||
{
|
||||
if ((int)OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback > 0
|
||||
&& (int)OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback < 4)
|
||||
{
|
||||
OccSensor.UltrasonicSensorSensitivityInVacantState = OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback - 1;
|
||||
}
|
||||
else if ((int)OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback > 3
|
||||
&& (int)OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback < 7)
|
||||
{
|
||||
OccSensor.UltrasonicSensorSensitivityInVacantState = OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback + 1;
|
||||
}
|
||||
}
|
||||
|
||||
public void ForceOccupied()
|
||||
{
|
||||
OccSensor.ForceOccupied();
|
||||
}
|
||||
|
||||
public void ForceVacant()
|
||||
{
|
||||
OccSensor.ForceVacant();
|
||||
}
|
||||
|
||||
public void EnableRawStates(bool state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
OccSensor.EnableRawStates();
|
||||
}
|
||||
else
|
||||
OccSensor.DisableRawStates();
|
||||
}
|
||||
|
||||
public void SetRemoteTimeout(ushort time)
|
||||
{
|
||||
OccSensor.RemoteTimeout.UShortValue = time;
|
||||
}
|
||||
|
||||
public void SetInternalPhotoSensorMinChange(ushort value)
|
||||
{
|
||||
OccSensor.InternalPhotoSensorMinimumChange.UShortValue = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the OrWhenVacated state
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetOrWhenVacatedState(bool state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
OccSensor.OrWhenVacated();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the AndWhenVacated state
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetAndWhenVacatedState(bool state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
OccSensor.AndWhenVacated();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables the Ultrasonic A sensor
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetUsAEnable(bool state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
OccSensor.EnableUltrasonicSensorSideA();
|
||||
}
|
||||
else
|
||||
{
|
||||
OccSensor.DisableUltrasonicSensorSideA();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables the Ultrasonic B sensor
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetUsBEnable(bool state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
OccSensor.EnableUltrasonicSensorSideB();
|
||||
}
|
||||
else
|
||||
{
|
||||
OccSensor.DisableUltrasonicSensorSideB();
|
||||
}
|
||||
}
|
||||
|
||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||
{
|
||||
LinkOccSensorToApi(this, trilist, joinStart, joinMapKey, bridge);
|
||||
}
|
||||
|
||||
protected void LinkOccSensorToApi(CenOdtOccupancySensorBaseController occController,
|
||||
BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||
{
|
||||
CenOdtOccupancySensorBaseJoinMap joinMap = new CenOdtOccupancySensorBaseJoinMap(joinStart);
|
||||
|
||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
||||
|
||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||
joinMap = JsonConvert.DeserializeObject<CenOdtOccupancySensorBaseJoinMap>(joinMapSerialized);
|
||||
|
||||
|
||||
Debug.Console(1, occController, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||
|
||||
occController.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.Online.JoinNumber]);
|
||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = occController.Name;
|
||||
|
||||
trilist.OnlineStatusChange += new Crestron.SimplSharpPro.OnlineStatusChangeEventHandler((d, args) =>
|
||||
{
|
||||
if (args.DeviceOnLine)
|
||||
{
|
||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = occController.Name;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// Occupied status
|
||||
trilist.SetSigTrueAction(joinMap.ForceOccupied.JoinNumber, new Action(() => occController.ForceOccupied()));
|
||||
trilist.SetSigTrueAction(joinMap.ForceVacant.JoinNumber, new Action(() => occController.ForceVacant()));
|
||||
occController.RoomIsOccupiedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RoomOccupiedFeedback.JoinNumber]);
|
||||
occController.RoomIsOccupiedFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.RoomVacantFeedback.JoinNumber]);
|
||||
occController.RawOccupancyFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RawOccupancyFeedback.JoinNumber]);
|
||||
trilist.SetBoolSigAction(joinMap.EnableRawStates.JoinNumber, new Action<bool>((b) => occController.EnableRawStates(b)));
|
||||
|
||||
// Timouts
|
||||
trilist.SetUShortSigAction(joinMap.Timeout.JoinNumber, new Action<ushort>((u) => occController.SetRemoteTimeout(u)));
|
||||
occController.CurrentTimeoutFeedback.LinkInputSig(trilist.UShortInput[joinMap.Timeout.JoinNumber]);
|
||||
occController.RemoteTimeoutFeedback.LinkInputSig(trilist.UShortInput[joinMap.TimeoutLocalFeedback.JoinNumber]);
|
||||
|
||||
// LED Flash
|
||||
trilist.SetSigTrueAction(joinMap.EnableLedFlash.JoinNumber, new Action(() => occController.SetLedFlashEnable(true)));
|
||||
trilist.SetSigTrueAction(joinMap.DisableLedFlash.JoinNumber, new Action(() => occController.SetLedFlashEnable(false)));
|
||||
occController.LedFlashEnabledFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.EnableLedFlash.JoinNumber]);
|
||||
|
||||
// Short Timeout
|
||||
trilist.SetSigTrueAction(joinMap.EnableShortTimeout.JoinNumber, new Action(() => occController.SetShortTimeoutState(true)));
|
||||
trilist.SetSigTrueAction(joinMap.DisableShortTimeout.JoinNumber, new Action(() => occController.SetShortTimeoutState(false)));
|
||||
occController.ShortTimeoutEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnableShortTimeout.JoinNumber]);
|
||||
|
||||
// PIR Sensor
|
||||
trilist.SetSigTrueAction(joinMap.EnablePir.JoinNumber, new Action(() => occController.SetPirEnable(true)));
|
||||
trilist.SetSigTrueAction(joinMap.DisablePir.JoinNumber, new Action(() => occController.SetPirEnable(false)));
|
||||
occController.PirSensorEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnablePir.JoinNumber]);
|
||||
|
||||
// PIR Sensitivity in Occupied State
|
||||
trilist.SetBoolSigAction(joinMap.IncrementPirInOccupiedState.JoinNumber, new Action<bool>((b) => occController.IncrementPirSensitivityInOccupiedState(b)));
|
||||
trilist.SetBoolSigAction(joinMap.DecrementPirInOccupiedState.JoinNumber, new Action<bool>((b) => occController.DecrementPirSensitivityInOccupiedState(b)));
|
||||
occController.PirSensitivityInOccupiedStateFeedback.LinkInputSig(trilist.UShortInput[joinMap.PirSensitivityInOccupiedState.JoinNumber]);
|
||||
|
||||
// PIR Sensitivity in Vacant State
|
||||
trilist.SetBoolSigAction(joinMap.IncrementPirInVacantState.JoinNumber, new Action<bool>((b) => occController.IncrementPirSensitivityInVacantState(b)));
|
||||
trilist.SetBoolSigAction(joinMap.DecrementPirInVacantState.JoinNumber, new Action<bool>((b) => occController.DecrementPirSensitivityInVacantState(b)));
|
||||
occController.PirSensitivityInVacantStateFeedback.LinkInputSig(trilist.UShortInput[joinMap.PirSensitivityInVacantState.JoinNumber]);
|
||||
|
||||
// OR When Vacated
|
||||
trilist.SetBoolSigAction(joinMap.OrWhenVacated.JoinNumber, new Action<bool>((b) => occController.SetOrWhenVacatedState(b)));
|
||||
occController.OrWhenVacatedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.OrWhenVacated.JoinNumber]);
|
||||
|
||||
// AND When Vacated
|
||||
trilist.SetBoolSigAction(joinMap.AndWhenVacated.JoinNumber, new Action<bool>((b) => occController.SetAndWhenVacatedState(b)));
|
||||
occController.AndWhenVacatedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.AndWhenVacated.JoinNumber]);
|
||||
|
||||
// Ultrasonic A Sensor
|
||||
trilist.SetSigTrueAction(joinMap.EnableUsA.JoinNumber, new Action(() => occController.SetUsAEnable(true)));
|
||||
trilist.SetSigTrueAction(joinMap.DisableUsA.JoinNumber, new Action(() => occController.SetUsAEnable(false)));
|
||||
occController.UltrasonicAEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnableUsA.JoinNumber]);
|
||||
|
||||
// Ultrasonic B Sensor
|
||||
trilist.SetSigTrueAction(joinMap.EnableUsB.JoinNumber, new Action(() => occController.SetUsBEnable(true)));
|
||||
trilist.SetSigTrueAction(joinMap.DisableUsB.JoinNumber, new Action(() => occController.SetUsBEnable(false)));
|
||||
occController.UltrasonicAEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnableUsB.JoinNumber]);
|
||||
|
||||
// US Sensitivity in Occupied State
|
||||
trilist.SetBoolSigAction(joinMap.IncrementUsInOccupiedState.JoinNumber, new Action<bool>((b) => occController.IncrementUsSensitivityInOccupiedState(b)));
|
||||
trilist.SetBoolSigAction(joinMap.DecrementUsInOccupiedState.JoinNumber, new Action<bool>((b) => occController.DecrementUsSensitivityInOccupiedState(b)));
|
||||
occController.UltrasonicSensitivityInOccupiedStateFeedback.LinkInputSig(trilist.UShortInput[joinMap.UsSensitivityInOccupiedState.JoinNumber]);
|
||||
|
||||
// US Sensitivity in Vacant State
|
||||
trilist.SetBoolSigAction(joinMap.IncrementUsInVacantState.JoinNumber, new Action<bool>((b) => occController.IncrementUsSensitivityInVacantState(b)));
|
||||
trilist.SetBoolSigAction(joinMap.DecrementUsInVacantState.JoinNumber, new Action<bool>((b) => occController.DecrementUsSensitivityInVacantState(b)));
|
||||
occController.UltrasonicSensitivityInVacantStateFeedback.LinkInputSig(trilist.UShortInput[joinMap.UsSensitivityInVacantState.JoinNumber]);
|
||||
|
||||
//Sensor Raw States
|
||||
occController.RawOccupancyPirFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RawOccupancyPirFeedback.JoinNumber]);
|
||||
occController.RawOccupancyUsFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RawOccupancyUsFeedback.JoinNumber]);
|
||||
|
||||
}
|
||||
|
||||
public class CenOdtOccupancySensorBaseControllerFactory : EssentialsDeviceFactory<CenOdtOccupancySensorBaseController>
|
||||
{
|
||||
public CenOdtOccupancySensorBaseControllerFactory()
|
||||
{
|
||||
TypeNames = new List<string>() { "cenodtcpoe", "cenodtocc" };
|
||||
}
|
||||
|
||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||
{
|
||||
Debug.Console(1, "Factory Attempting to create new GlsOccupancySensorBaseController Device");
|
||||
|
||||
var typeName = dc.Type.ToLower();
|
||||
var key = dc.Key;
|
||||
var name = dc.Name;
|
||||
var comm = CommFactory.GetControlPropertiesConfig(dc);
|
||||
|
||||
var occSensor = new CenOdtCPoe(comm.IpIdInt, Global.ControlSystem);
|
||||
|
||||
if (occSensor == null)
|
||||
{
|
||||
Debug.Console(0, "ERROR: Unable to create Occupancy Sensor Device. Key: '{0}'", key);
|
||||
return null;
|
||||
}
|
||||
|
||||
return new CenOdtOccupancySensorBaseController(key, name, occSensor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user