mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-14 12:15:01 +00:00
feat: removed crestron io devices
This commit is contained in:
@@ -1,106 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO
|
|
||||||
{
|
|
||||||
public class C2NIoController:CrestronGenericBaseDevice, IComPorts, IIROutputPorts, IRelayPorts
|
|
||||||
{
|
|
||||||
private C2nIo _device;
|
|
||||||
|
|
||||||
public C2NIoController(string key, Func<DeviceConfig, C2nIo> preActivationFunc, DeviceConfig config):base(key, config.Name)
|
|
||||||
{
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
_device = preActivationFunc(config);
|
|
||||||
|
|
||||||
RegisterCrestronGenericBase(_device);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Implementation of IComPorts
|
|
||||||
|
|
||||||
public CrestronCollection<ComPort> ComPorts
|
|
||||||
{
|
|
||||||
get { return _device.ComPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfComPorts
|
|
||||||
{
|
|
||||||
get { return _device.NumberOfComPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Implementation of IIROutputPorts
|
|
||||||
|
|
||||||
public CrestronCollection<IROutputPort> IROutputPorts
|
|
||||||
{
|
|
||||||
get { return _device.IROutputPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfIROutputPorts
|
|
||||||
{
|
|
||||||
get { return _device.NumberOfIROutputPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Implementation of IRelayPorts
|
|
||||||
|
|
||||||
public CrestronCollection<Relay> RelayPorts
|
|
||||||
{
|
|
||||||
get { return _device.RelayPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfRelayPorts
|
|
||||||
{
|
|
||||||
get { return _device.NumberOfRelayPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
|
|
||||||
public class C2NIoControllerFactory : EssentialsDeviceFactory<C2NIoController>
|
|
||||||
{
|
|
||||||
public C2NIoControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "c2nio" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new C2N-IO Device");
|
|
||||||
|
|
||||||
return new C2NIoController(dc.Key, GetC2NIoDevice, dc);
|
|
||||||
}
|
|
||||||
|
|
||||||
static C2nIo GetC2NIoDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var cresnetId = control.CresnetIdInt;
|
|
||||||
var branchId = control.ControlPortNumber;
|
|
||||||
var parentKey = string.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
|
||||||
|
|
||||||
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new C2nIo", parentKey);
|
|
||||||
return new C2nIo(cresnetId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
var cresnetBridge = DeviceManager.GetDeviceForKey(parentKey) as IHasCresnetBranches;
|
|
||||||
|
|
||||||
if (cresnetBridge != null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new C2nIo", parentKey);
|
|
||||||
return new C2nIo(cresnetId, cresnetBridge.CresnetBranches[branchId]);
|
|
||||||
}
|
|
||||||
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO
|
|
||||||
{
|
|
||||||
[Description("Wrapper class for the C2N-RTHS sensor")]
|
|
||||||
public class C2nRthsController : CrestronGenericBridgeableBaseDevice
|
|
||||||
{
|
|
||||||
private C2nRths _device;
|
|
||||||
|
|
||||||
public IntFeedback TemperatureFeedback { get; private set; }
|
|
||||||
public IntFeedback HumidityFeedback { get; private set; }
|
|
||||||
|
|
||||||
public C2nRthsController(string key, Func<DeviceConfig, C2nRths> preActivationFunc,
|
|
||||||
DeviceConfig config)
|
|
||||||
: base(key, config.Name)
|
|
||||||
{
|
|
||||||
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
_device = preActivationFunc(config);
|
|
||||||
|
|
||||||
RegisterCrestronGenericBase(_device);
|
|
||||||
|
|
||||||
TemperatureFeedback = new IntFeedback(() => _device.TemperatureFeedback.UShortValue);
|
|
||||||
HumidityFeedback = new IntFeedback(() => _device.HumidityFeedback.UShortValue);
|
|
||||||
|
|
||||||
if (_device != null) _device.BaseEvent += DeviceOnBaseEvent;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void DeviceOnBaseEvent(GenericBase device, BaseEventArgs args)
|
|
||||||
{
|
|
||||||
switch (args.EventId)
|
|
||||||
{
|
|
||||||
case C2nRths.TemperatureFeedbackEventId:
|
|
||||||
TemperatureFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case C2nRths.HumidityFeedbackEventId:
|
|
||||||
HumidityFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetTemperatureFormat(bool setToC)
|
|
||||||
{
|
|
||||||
_device.TemperatureFormat.BoolValue = setToC;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
|
||||||
{
|
|
||||||
var joinMap = new C2nRthsControllerJoinMap(joinStart);
|
|
||||||
|
|
||||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
|
||||||
joinMap = JsonConvert.DeserializeObject<C2nRthsControllerJoinMap>(joinMapSerialized);
|
|
||||||
|
|
||||||
if (bridge != null)
|
|
||||||
{
|
|
||||||
bridge.AddJoinMap(Key, joinMap);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
|
||||||
|
|
||||||
|
|
||||||
trilist.SetBoolSigAction(joinMap.TemperatureFormat.JoinNumber, SetTemperatureFormat);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
|
|
||||||
TemperatureFeedback.LinkInputSig(trilist.UShortInput[joinMap.Temperature.JoinNumber]);
|
|
||||||
HumidityFeedback.LinkInputSig(trilist.UShortInput[joinMap.Humidity.JoinNumber]);
|
|
||||||
|
|
||||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = Name;
|
|
||||||
|
|
||||||
trilist.OnlineStatusChange += (d, args) =>
|
|
||||||
{
|
|
||||||
if (!args.DeviceOnLine) return;
|
|
||||||
|
|
||||||
UpdateFeedbacksWhenOnline();
|
|
||||||
|
|
||||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = Name;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateFeedbacksWhenOnline()
|
|
||||||
{
|
|
||||||
IsOnline.FireUpdate();
|
|
||||||
TemperatureFeedback.FireUpdate();
|
|
||||||
HumidityFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
#region PreActivation
|
|
||||||
|
|
||||||
private static C2nRths GetC2nRthsDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var cresnetId = control.CresnetIdInt;
|
|
||||||
var branchId = control.ControlPortNumber;
|
|
||||||
var parentKey = string.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
|
||||||
|
|
||||||
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new C2nRths", parentKey);
|
|
||||||
return new C2nRths(cresnetId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
var cresnetBridge = DeviceManager.GetDeviceForKey(parentKey) as IHasCresnetBranches;
|
|
||||||
|
|
||||||
if (cresnetBridge != null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new C2nRths", parentKey);
|
|
||||||
return new C2nRths(cresnetId, cresnetBridge.CresnetBranches[branchId]);
|
|
||||||
}
|
|
||||||
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public class C2nRthsControllerFactory : EssentialsDeviceFactory<C2nRthsController>
|
|
||||||
{
|
|
||||||
public C2nRthsControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "c2nrths" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new C2N-RTHS Device");
|
|
||||||
|
|
||||||
return new C2nRthsController(dc.Key, GetC2nRthsDevice, dc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Crestron.SimplSharpProInternal;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO.Cards
|
|
||||||
{
|
|
||||||
public class C3CardControllerBase:CrestronGenericBaseDevice
|
|
||||||
{
|
|
||||||
private readonly C3Card _card;
|
|
||||||
|
|
||||||
public C3CardControllerBase(string key, string name, C3Card hardware) : base(key, name, hardware)
|
|
||||||
{
|
|
||||||
_card = hardware;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Overrides of Object
|
|
||||||
|
|
||||||
public override string ToString()
|
|
||||||
{
|
|
||||||
return String.Format("{0} {1}", Key, _card.ToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.ThreeSeriesCards;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO.Cards
|
|
||||||
{
|
|
||||||
public class C3Com3Controller:C3CardControllerBase, IComPorts
|
|
||||||
{
|
|
||||||
private readonly C3com3 _card;
|
|
||||||
|
|
||||||
public C3Com3Controller(string key, string name, C3com3 hardware) : base(key, name, hardware)
|
|
||||||
{
|
|
||||||
_card = hardware;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Implementation of IComPorts
|
|
||||||
|
|
||||||
public CrestronCollection<ComPort> ComPorts
|
|
||||||
{
|
|
||||||
get { return _card.ComPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfComPorts
|
|
||||||
{
|
|
||||||
get { return _card.NumberOfComPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.ThreeSeriesCards;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO.Cards
|
|
||||||
{
|
|
||||||
public class C3Io16Controller:C3CardControllerBase,IIOPorts
|
|
||||||
{
|
|
||||||
private readonly C3io16 _card;
|
|
||||||
|
|
||||||
public C3Io16Controller(string key, string name, C3io16 hardware) : base(key, name, hardware)
|
|
||||||
{
|
|
||||||
_card = hardware;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Implementation of IIOPorts
|
|
||||||
|
|
||||||
public CrestronCollection<Versiport> VersiPorts
|
|
||||||
{
|
|
||||||
get { return _card.VersiPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfVersiPorts
|
|
||||||
{
|
|
||||||
get { return _card.NumberOfVersiPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.ThreeSeriesCards;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO.Cards
|
|
||||||
{
|
|
||||||
public class C3Ir8Controller:C3CardControllerBase, IIROutputPorts
|
|
||||||
{
|
|
||||||
private readonly C3ir8 _card;
|
|
||||||
|
|
||||||
public C3Ir8Controller(string key, string name, C3ir8 hardware) : base(key, name, hardware)
|
|
||||||
{
|
|
||||||
_card = hardware;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Implementation of IIROutputPorts
|
|
||||||
|
|
||||||
public CrestronCollection<IROutputPort> IROutputPorts
|
|
||||||
{
|
|
||||||
get { return _card.IROutputPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfIROutputPorts
|
|
||||||
{
|
|
||||||
get { return _card.NumberOfIROutputPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.ThreeSeriesCards;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO.Cards
|
|
||||||
{
|
|
||||||
public class C3Ry16Controller:C3CardControllerBase, IRelayPorts
|
|
||||||
{
|
|
||||||
private readonly C3ry16 _card;
|
|
||||||
|
|
||||||
public C3Ry16Controller(string key, string name, C3ry16 hardware) : base(key, name, hardware)
|
|
||||||
{
|
|
||||||
_card = hardware;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Implementation of IRelayPorts
|
|
||||||
|
|
||||||
public CrestronCollection<Relay> RelayPorts
|
|
||||||
{
|
|
||||||
get { return _card.RelayPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfRelayPorts
|
|
||||||
{
|
|
||||||
get { return _card.NumberOfRelayPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.ThreeSeriesCards;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO.Cards
|
|
||||||
{
|
|
||||||
public class C3Ry8Controller:C3CardControllerBase, IRelayPorts
|
|
||||||
{
|
|
||||||
private readonly C3ry8 _card;
|
|
||||||
|
|
||||||
public C3Ry8Controller(string key, string name, C3ry8 hardware) : base(key, name, hardware)
|
|
||||||
{
|
|
||||||
_card = hardware;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Implementation of IRelayPorts
|
|
||||||
|
|
||||||
public CrestronCollection<Relay> RelayPorts
|
|
||||||
{
|
|
||||||
get { return _card.RelayPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfRelayPorts
|
|
||||||
{
|
|
||||||
get { return _card.NumberOfRelayPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro.ThreeSeriesCards;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO.Cards
|
|
||||||
{
|
|
||||||
[ConfigSnippet("\"properties\":{\"card\":\"c3com3\"}")]
|
|
||||||
public class CenCi31Controller : CrestronGenericBaseDevice
|
|
||||||
{
|
|
||||||
private const string CardKeyTemplate = "{0}-card";
|
|
||||||
private const string CardNameTemplate = "{0}:{1}:{2}";
|
|
||||||
private const uint CardSlot = 1;
|
|
||||||
private readonly CenCi31 _cardCage;
|
|
||||||
private readonly CenCi31Configuration _config;
|
|
||||||
|
|
||||||
private readonly Dictionary<string, Func<CenCi31, uint, C3CardControllerBase>> _cardDict;
|
|
||||||
|
|
||||||
public CenCi31Controller(string key, string name, CenCi31Configuration config, CenCi31 hardware) : base(key, name, hardware)
|
|
||||||
{
|
|
||||||
_cardCage = hardware;
|
|
||||||
|
|
||||||
_config = config;
|
|
||||||
|
|
||||||
_cardDict = new Dictionary<string, Func<CenCi31, uint, C3CardControllerBase>>
|
|
||||||
{
|
|
||||||
{
|
|
||||||
"c3com3",
|
|
||||||
(c, s) =>
|
|
||||||
new C3Com3Controller(String.Format(CardKeyTemplate, key),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Com3"), new C3com3(_cardCage))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"c3io16",
|
|
||||||
(c, s) =>
|
|
||||||
new C3Io16Controller(String.Format(CardKeyTemplate, key),
|
|
||||||
String.Format(CardNameTemplate, key, s,"C3Io16"), new C3io16(_cardCage))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"c3ir8",
|
|
||||||
(c, s) =>
|
|
||||||
new C3Ir8Controller(String.Format(CardKeyTemplate, key),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Ir8"), new C3ir8(_cardCage))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"c3ry16",
|
|
||||||
(c, s) =>
|
|
||||||
new C3Ry16Controller(String.Format(CardKeyTemplate, key),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Ry16"), new C3ry16(_cardCage))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"c3ry8",
|
|
||||||
(c, s) =>
|
|
||||||
new C3Ry8Controller(String.Format(CardKeyTemplate, key),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Ry8"), new C3ry8(_cardCage))
|
|
||||||
},
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
GetCards();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void GetCards()
|
|
||||||
{
|
|
||||||
Func<CenCi31, uint, C3CardControllerBase> cardBuilder;
|
|
||||||
|
|
||||||
if (String.IsNullOrEmpty(_config.Card))
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "No card specified");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_cardDict.TryGetValue(_config.Card.ToLower(), out cardBuilder))
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Unable to find factory for 3-Series card type {0}.", _config.Card);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var device = cardBuilder(_cardCage, CardSlot);
|
|
||||||
|
|
||||||
DeviceManager.AddDevice(device);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CenCi31Configuration
|
|
||||||
{
|
|
||||||
[JsonProperty("card")]
|
|
||||||
public string Card { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CenCi31ControllerFactory : EssentialsDeviceFactory<CenCi31Controller>
|
|
||||||
{
|
|
||||||
public CenCi31ControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string> {"cenci31"};
|
|
||||||
}
|
|
||||||
#region Overrides of EssentialsDeviceFactory<CenCi31Controller>
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory attempting to build new CEN-CI-1");
|
|
||||||
|
|
||||||
var controlProperties = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var ipId = controlProperties.IpIdInt;
|
|
||||||
|
|
||||||
var cardCage = new CenCi31(ipId, Global.ControlSystem);
|
|
||||||
var config = dc.Properties.ToObject<CenCi31Configuration>();
|
|
||||||
|
|
||||||
return new CenCi31Controller(dc.Key, dc.Name, config, cardCage);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,133 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro.ThreeSeriesCards;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO.Cards
|
|
||||||
{
|
|
||||||
[ConfigSnippet("\"properties\":{\"cards\":{\"1\":\"c3com3\",\"2\":\"c3ry16\",\"3\":\"c3ry8\"}}")]
|
|
||||||
public class CenCi33Controller : CrestronGenericBaseDevice
|
|
||||||
{
|
|
||||||
private const string CardKeyTemplate = "{0}-card{1}";
|
|
||||||
private const string CardNameTemplate = "{0}:{1}:{2}";
|
|
||||||
private const uint CardSlots = 3;
|
|
||||||
private readonly CenCi33 _cardCage;
|
|
||||||
private readonly CenCi33Configuration _config;
|
|
||||||
|
|
||||||
private readonly Dictionary<string, Func<CenCi33, uint, C3CardControllerBase>> _cardDict;
|
|
||||||
|
|
||||||
public CenCi33Controller(string key, string name, CenCi33Configuration config, CenCi33 hardware) : base(key, name, hardware)
|
|
||||||
{
|
|
||||||
_cardCage = hardware;
|
|
||||||
|
|
||||||
_config = config;
|
|
||||||
|
|
||||||
_cardDict = new Dictionary<string, Func<CenCi33, uint, C3CardControllerBase>>
|
|
||||||
{
|
|
||||||
{
|
|
||||||
"c3com3",
|
|
||||||
(c, s) =>
|
|
||||||
new C3Com3Controller(String.Format(CardKeyTemplate, key, s),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Com3"), new C3com3(s,_cardCage))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"c3io16",
|
|
||||||
(c, s) =>
|
|
||||||
new C3Io16Controller(String.Format(CardKeyTemplate, key, s),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Io16"), new C3io16(s,_cardCage))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"c3ir8",
|
|
||||||
(c, s) =>
|
|
||||||
new C3Ir8Controller(String.Format(CardKeyTemplate, key, s),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Ir8"), new C3ir8(s,_cardCage))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"c3ry16",
|
|
||||||
(c, s) =>
|
|
||||||
new C3Ry16Controller(String.Format(CardKeyTemplate, key, s),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Ry16"), new C3ry16(s,_cardCage))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"c3ry8",
|
|
||||||
(c, s) =>
|
|
||||||
new C3Ry8Controller(String.Format(CardKeyTemplate, key, s),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Ry8"), new C3ry8(s,_cardCage))
|
|
||||||
},
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
GetCards();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void GetCards()
|
|
||||||
{
|
|
||||||
if (_config.Cards == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "No card configuration for this device found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (uint i = 1; i <= CardSlots; i++)
|
|
||||||
{
|
|
||||||
string cardType;
|
|
||||||
if (!_config.Cards.TryGetValue(i, out cardType))
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "No card found for slot {0}", i);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (String.IsNullOrEmpty(cardType))
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "No card specified for slot {0}", i);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Func<CenCi33, uint, C3CardControllerBase> cardBuilder;
|
|
||||||
if (!_cardDict.TryGetValue(cardType.ToLower(), out cardBuilder))
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Unable to find factory for 3-Series card type {0}.", cardType);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var device = cardBuilder(_cardCage, i);
|
|
||||||
|
|
||||||
DeviceManager.AddDevice(device);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CenCi33Configuration
|
|
||||||
{
|
|
||||||
[JsonProperty("cards")]
|
|
||||||
public Dictionary<uint, string> Cards { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CenCi33ControllerFactory : EssentialsDeviceFactory<CenCi33Controller>
|
|
||||||
{
|
|
||||||
public CenCi33ControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string> {"cenci33"};
|
|
||||||
}
|
|
||||||
#region Overrides of EssentialsDeviceFactory<CenCi33Controller>
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory attempting to build new CEN-CI-3");
|
|
||||||
|
|
||||||
var controlProperties = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var ipId = controlProperties.IpIdInt;
|
|
||||||
|
|
||||||
var cardCage = new CenCi33(ipId, Global.ControlSystem);
|
|
||||||
var config = dc.Properties.ToObject<CenCi33Configuration>();
|
|
||||||
|
|
||||||
return new CenCi33Controller(dc.Key, dc.Name, config, cardCage);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,143 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro.ThreeSeriesCards;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO.Cards
|
|
||||||
{
|
|
||||||
[ConfigSnippet("\"properties\":{\"cards\":{\"1\":\"c3com3\",\"2\":\"c3ry16\",\"3\":\"c3ry8\"}}")]
|
|
||||||
public class InternalCardCageController : EssentialsDevice
|
|
||||||
{
|
|
||||||
private const string CardKeyTemplate = "{0}-card{1}";
|
|
||||||
private const string CardNameTemplate = "{0}:{1}:{2}";
|
|
||||||
private const uint CardSlots = 3;
|
|
||||||
|
|
||||||
private readonly InternalCardCageConfiguration _config;
|
|
||||||
|
|
||||||
private readonly Dictionary<string, Func<uint, C3CardControllerBase>> _cardDict;
|
|
||||||
|
|
||||||
public InternalCardCageController(string key, string name, InternalCardCageConfiguration config) : base(key, name)
|
|
||||||
{
|
|
||||||
_config = config;
|
|
||||||
|
|
||||||
_cardDict = new Dictionary<string, Func<uint, C3CardControllerBase>>
|
|
||||||
{
|
|
||||||
{
|
|
||||||
"c3com3",
|
|
||||||
(s) =>
|
|
||||||
new C3Com3Controller(String.Format(CardKeyTemplate, key, s),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Com3"), new C3com3(s,Global.ControlSystem))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"c3io16",
|
|
||||||
(s) =>
|
|
||||||
new C3Io16Controller(String.Format(CardKeyTemplate, key, s),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Io16"), new C3io16(s,Global.ControlSystem))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"c3ir8",
|
|
||||||
(s) =>
|
|
||||||
new C3Ir8Controller(String.Format(CardKeyTemplate, key, s),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Ir8"), new C3ir8(s,Global.ControlSystem))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"c3ry16",
|
|
||||||
(s) =>
|
|
||||||
new C3Ry16Controller(String.Format(CardKeyTemplate, key, s),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Ry16"), new C3ry16(s,Global.ControlSystem))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"c3ry8",
|
|
||||||
(s) =>
|
|
||||||
new C3Ry8Controller(String.Format(CardKeyTemplate, key, s),
|
|
||||||
String.Format(CardNameTemplate, key, s, "C3Ry8"), new C3ry8(s,Global.ControlSystem))
|
|
||||||
},
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
GetCards();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void GetCards()
|
|
||||||
{
|
|
||||||
if (_config.Cards == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "No card configuration for this device found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (uint i = 1; i <= CardSlots; i++)
|
|
||||||
{
|
|
||||||
string cardType;
|
|
||||||
if (!_config.Cards.TryGetValue(i, out cardType))
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "No card found for slot {0}", i);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (String.IsNullOrEmpty(cardType))
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "No card specified for slot {0}", i);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Func<uint, C3CardControllerBase> cardBuilder;
|
|
||||||
if (!_cardDict.TryGetValue(cardType.ToLower(), out cardBuilder))
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Unable to find factory for 3-Series card type {0}.", cardType);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var device = cardBuilder(i);
|
|
||||||
|
|
||||||
|
|
||||||
DeviceManager.AddDevice(device);
|
|
||||||
}
|
|
||||||
catch (InvalidOperationException ex)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, Debug.ErrorLogLevel.Error,
|
|
||||||
"Unable to add card {0} to internal card cage.\r\nError Message: {1}\r\nStack Trace: {2}",
|
|
||||||
cardType, ex.Message, ex.StackTrace);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class InternalCardCageConfiguration
|
|
||||||
{
|
|
||||||
[JsonProperty("cards")]
|
|
||||||
public Dictionary<uint, string> Cards { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class InternalCardCageControllerFactory : EssentialsDeviceFactory<InternalCardCageController>
|
|
||||||
{
|
|
||||||
public InternalCardCageControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string> {"internalcardcage"};
|
|
||||||
}
|
|
||||||
#region Overrides of EssentialsDeviceFactory<InternalCardCageController>
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory attempting to build new Internal Card Cage Controller");
|
|
||||||
|
|
||||||
if (!Global.ControlSystem.SupportsThreeSeriesPlugInCards)
|
|
||||||
{
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Warning, "Current control system does NOT support 3-Series cards. Everything is NOT awesome.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var config = dc.Properties.ToObject<InternalCardCageConfiguration>();
|
|
||||||
|
|
||||||
return new InternalCardCageController(dc.Key, dc.Name, config);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
public class DinCenCn2Controller : CrestronGenericBaseDevice, IHasCresnetBranches
|
|
||||||
{
|
|
||||||
private readonly DinCenCn2 _device;
|
|
||||||
|
|
||||||
public CrestronCollection<CresnetBranch> CresnetBranches
|
|
||||||
{
|
|
||||||
get {
|
|
||||||
return _device != null ? _device.Branches : null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public DinCenCn2Controller(string key, string name, DinCenCn2 device, DeviceConfig config)
|
|
||||||
: base(key, name, device)
|
|
||||||
{
|
|
||||||
_device = device;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class DinCenCn2ControllerFactory : EssentialsDeviceFactory<DinCenCn2Controller>
|
|
||||||
{
|
|
||||||
public DinCenCn2ControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "dincencn2", "dincencn2poe", "din-cencn2", "din-cencn2-poe" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new DIN-CEN-CN2 Device");
|
|
||||||
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var ipid = control.IpIdInt;
|
|
||||||
|
|
||||||
if (dc.Type.ToLower().Contains("poe"))
|
|
||||||
{
|
|
||||||
return new DinCenCn2Controller(dc.Key, dc.Name, new DinCenCn2Poe(ipid, Global.ControlSystem), dc);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new DinCenCn2Controller(dc.Key, dc.Name, new DinCenCn2(ipid, Global.ControlSystem), dc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO
|
|
||||||
{
|
|
||||||
public class DinIo8Controller:CrestronGenericBaseDevice, IIOPorts
|
|
||||||
{
|
|
||||||
private DinIo8 _device;
|
|
||||||
|
|
||||||
public DinIo8Controller(string key, Func<DeviceConfig, DinIo8> preActivationFunc, DeviceConfig config):base(key, config.Name)
|
|
||||||
{
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
_device = preActivationFunc(config);
|
|
||||||
|
|
||||||
RegisterCrestronGenericBase(_device);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Implementation of IIOPorts
|
|
||||||
|
|
||||||
public CrestronCollection<Versiport> VersiPorts
|
|
||||||
{
|
|
||||||
get { return _device.VersiPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfVersiPorts
|
|
||||||
{
|
|
||||||
get { return _device.NumberOfVersiPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public class DinIo8ControllerFactory : EssentialsDeviceFactory<DinIo8Controller>
|
|
||||||
{
|
|
||||||
public DinIo8ControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "DinIo8" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new DinIo8 Device");
|
|
||||||
|
|
||||||
return new DinIo8Controller(dc.Key, GetDinIo8Device, dc);
|
|
||||||
}
|
|
||||||
|
|
||||||
static DinIo8 GetDinIo8Device(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var cresnetId = control.CresnetIdInt;
|
|
||||||
var branchId = control.ControlPortNumber;
|
|
||||||
var parentKey = string.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
|
||||||
|
|
||||||
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new DinIo8", parentKey);
|
|
||||||
return new DinIo8(cresnetId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
var cresnetBridge = DeviceManager.GetDeviceForKey(parentKey) as IHasCresnetBranches;
|
|
||||||
|
|
||||||
if (cresnetBridge != null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new DinIo8", parentKey);
|
|
||||||
return new DinIo8(cresnetId, cresnetBridge.CresnetBranches[branchId]);
|
|
||||||
}
|
|
||||||
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
|
|
||||||
using PepperDash.Core;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Wrapper class for CEN-IO-DIGIN-104 digital input module
|
|
||||||
/// </summary>
|
|
||||||
[Description("Wrapper class for the CEN-IO-DIGIN-104 diginal input module")]
|
|
||||||
public class CenIoDigIn104Controller : CrestronGenericBaseDevice, IDigitalInputPorts
|
|
||||||
{
|
|
||||||
public CenIoDi104 Di104 { get; private set; }
|
|
||||||
|
|
||||||
public CenIoDigIn104Controller(string key, string name, CenIoDi104 di104)
|
|
||||||
: base(key, name)
|
|
||||||
{
|
|
||||||
Di104 = di104;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IDigitalInputPorts Members
|
|
||||||
|
|
||||||
public CrestronCollection<DigitalInput> DigitalInputPorts
|
|
||||||
{
|
|
||||||
get { return Di104.DigitalInputPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfDigitalInputPorts
|
|
||||||
{
|
|
||||||
get { return Di104.NumberOfDigitalInputPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CenIoDigIn104ControllerFactory : EssentialsDeviceFactory<CenIoDigIn104Controller>
|
|
||||||
{
|
|
||||||
public CenIoDigIn104ControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "ceniodigin104" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new CEN-DIGIN-104 Device");
|
|
||||||
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
if (control == null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-DIGIN-104 Device, control properties not found");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var ipid = control.IpIdInt;
|
|
||||||
if (ipid != 0) return new CenIoDigIn104Controller(dc.Key, dc.Name, new CenIoDi104(ipid, Global.ControlSystem));
|
|
||||||
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-IR-104 Device using IP-ID-{0}", ipid);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
|
|
||||||
using PepperDash.Core;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Wrapper class for CEN-IO-IR-104 module
|
|
||||||
/// </summary>
|
|
||||||
[Description("Wrapper class for the CEN-IO-IR-104 module")]
|
|
||||||
public class CenIoIr104Controller : CrestronGenericBaseDevice, IIROutputPorts
|
|
||||||
{
|
|
||||||
private readonly CenIoIr104 _ir104;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Constructor
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="key"></param>
|
|
||||||
/// <param name="name"></param>
|
|
||||||
/// <param name="ir104"></param>
|
|
||||||
public CenIoIr104Controller(string key, string name, CenIoIr104 ir104)
|
|
||||||
: base(key, name, ir104)
|
|
||||||
{
|
|
||||||
_ir104 = ir104;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IDigitalInputPorts Members
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// IR port collection
|
|
||||||
/// </summary>
|
|
||||||
public CrestronCollection<IROutputPort> IROutputPorts
|
|
||||||
{
|
|
||||||
get { return _ir104.IROutputPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Number of relay ports property
|
|
||||||
/// </summary>
|
|
||||||
public int NumberOfIROutputPorts
|
|
||||||
{
|
|
||||||
get { return _ir104.NumberOfIROutputPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// CEN-IO-IR-104 controller fatory
|
|
||||||
/// </summary>
|
|
||||||
public class CenIoIr104ControllerFactory : EssentialsDeviceFactory<CenIoIr104Controller>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Constructor
|
|
||||||
/// </summary>
|
|
||||||
public CenIoIr104ControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "cenioir104" };
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Build device CEN-IO-IR-104
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="dc"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new CEN-IO-IR-104 Device");
|
|
||||||
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
if (control == null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-IR-104 Device, control properties not found");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var ipid = control.IpIdInt;
|
|
||||||
if(ipid != 0) return new CenIoIr104Controller(dc.Key, dc.Name, new CenIoIr104(ipid, Global.ControlSystem));
|
|
||||||
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-IR-104 Device using IP-ID-{0}", ipid);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Wrapper class for CEN-IO-RY-104 relay module
|
|
||||||
/// </summary>
|
|
||||||
[Description("Wrapper class for the CEN-IO-RY-104 relay module")]
|
|
||||||
public class CenIoRy104Controller : CrestronGenericBaseDevice, IRelayPorts
|
|
||||||
{
|
|
||||||
private readonly CenIoRy104 _ry104;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Constructor
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="key"></param>
|
|
||||||
/// <param name="name"></param>
|
|
||||||
/// <param name="ry104"></param>
|
|
||||||
public CenIoRy104Controller(string key, string name, CenIoRy104 ry104)
|
|
||||||
: base(key, name, ry104)
|
|
||||||
{
|
|
||||||
_ry104 = ry104;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Relay port collection
|
|
||||||
/// </summary>
|
|
||||||
public CrestronCollection<Relay> RelayPorts
|
|
||||||
{
|
|
||||||
get { return _ry104.RelayPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Number of relay ports property
|
|
||||||
/// </summary>
|
|
||||||
public int NumberOfRelayPorts
|
|
||||||
{
|
|
||||||
get { return _ry104.NumberOfRelayPorts; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// CEN-IO-RY Controller factory
|
|
||||||
/// </summary>
|
|
||||||
public class CenIoRy104ControllerFactory : EssentialsDeviceFactory<CenIoRy104Controller>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Constructor
|
|
||||||
/// </summary>
|
|
||||||
public CenIoRy104ControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "ceniory104" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create a new CEN-IO-RY-104 Device");
|
|
||||||
|
|
||||||
var controlPropertiesConfig = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
if (controlPropertiesConfig == null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-RY-104 Device, control properties not found");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var ipid = controlPropertiesConfig.IpIdInt;
|
|
||||||
if (ipid != 0) return new CenIoRy104Controller(dc.Key, dc.Name, new CenIoRy104(ipid, Global.ControlSystem));
|
|
||||||
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-RY-104 Device using IP-ID-{0}", ipid);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,225 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO
|
|
||||||
{
|
|
||||||
[Description("Wrapper class for the Crestron StatusSign device")]
|
|
||||||
public class StatusSignController : CrestronGenericBridgeableBaseDevice
|
|
||||||
{
|
|
||||||
private StatusSign _device;
|
|
||||||
|
|
||||||
public BoolFeedback RedLedEnabledFeedback { get; private set; }
|
|
||||||
public BoolFeedback GreenLedEnabledFeedback { get; private set; }
|
|
||||||
public BoolFeedback BlueLedEnabledFeedback { get; private set; }
|
|
||||||
|
|
||||||
public IntFeedback RedLedBrightnessFeedback { get; private set; }
|
|
||||||
public IntFeedback GreenLedBrightnessFeedback { get; private set; }
|
|
||||||
public IntFeedback BlueLedBrightnessFeedback { get; private set; }
|
|
||||||
|
|
||||||
public StatusSignController(string key, Func<DeviceConfig, StatusSign> preActivationFunc, DeviceConfig config) : base(key, config.Name)
|
|
||||||
{
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
_device = preActivationFunc(config);
|
|
||||||
|
|
||||||
RegisterCrestronGenericBase(_device);
|
|
||||||
|
|
||||||
RedLedEnabledFeedback =
|
|
||||||
new BoolFeedback(
|
|
||||||
() =>
|
|
||||||
_device.Leds[(uint)StatusSign.Led.eLedColor.Red]
|
|
||||||
.ControlFeedback.BoolValue);
|
|
||||||
GreenLedEnabledFeedback =
|
|
||||||
new BoolFeedback(
|
|
||||||
() =>
|
|
||||||
_device.Leds[(uint)StatusSign.Led.eLedColor.Green]
|
|
||||||
.ControlFeedback.BoolValue);
|
|
||||||
BlueLedEnabledFeedback =
|
|
||||||
new BoolFeedback(
|
|
||||||
() =>
|
|
||||||
_device.Leds[(uint)StatusSign.Led.eLedColor.Blue]
|
|
||||||
.ControlFeedback.BoolValue);
|
|
||||||
|
|
||||||
RedLedBrightnessFeedback =
|
|
||||||
new IntFeedback(() => (int)_device.Leds[(uint)StatusSign.Led.eLedColor.Red].BrightnessFeedback);
|
|
||||||
GreenLedBrightnessFeedback =
|
|
||||||
new IntFeedback(() => (int)_device.Leds[(uint)StatusSign.Led.eLedColor.Green].BrightnessFeedback);
|
|
||||||
BlueLedBrightnessFeedback =
|
|
||||||
new IntFeedback(() => (int)_device.Leds[(uint)StatusSign.Led.eLedColor.Blue].BrightnessFeedback);
|
|
||||||
|
|
||||||
if (_device != null) _device.BaseEvent += _device_BaseEvent;
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void _device_BaseEvent(GenericBase device, BaseEventArgs args)
|
|
||||||
{
|
|
||||||
switch (args.EventId)
|
|
||||||
{
|
|
||||||
case StatusSign.LedBrightnessFeedbackEventId:
|
|
||||||
RedLedBrightnessFeedback.FireUpdate();
|
|
||||||
GreenLedBrightnessFeedback.FireUpdate();
|
|
||||||
BlueLedBrightnessFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case StatusSign.LedControlFeedbackEventId:
|
|
||||||
RedLedEnabledFeedback.FireUpdate();
|
|
||||||
GreenLedEnabledFeedback.FireUpdate();
|
|
||||||
BlueLedEnabledFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void EnableLedControl(bool red, bool green, bool blue)
|
|
||||||
{
|
|
||||||
_device.Leds[(uint) StatusSign.Led.eLedColor.Red].Control.BoolValue = red;
|
|
||||||
_device.Leds[(uint)StatusSign.Led.eLedColor.Green].Control.BoolValue = green;
|
|
||||||
_device.Leds[(uint)StatusSign.Led.eLedColor.Blue].Control.BoolValue = blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetColor(uint red, uint green, uint blue)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_device.Leds[(uint)StatusSign.Led.eLedColor.Red].Brightness =
|
|
||||||
(StatusSign.Led.eBrightnessPercentageValues)SimplSharpDeviceHelper.PercentToUshort(red);
|
|
||||||
}
|
|
||||||
catch (InvalidOperationException)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Error converting value to Red LED brightness. value: {0}", red);
|
|
||||||
}
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_device.Leds[(uint)StatusSign.Led.eLedColor.Green].Brightness =
|
|
||||||
(StatusSign.Led.eBrightnessPercentageValues)SimplSharpDeviceHelper.PercentToUshort(green);
|
|
||||||
}
|
|
||||||
catch (InvalidOperationException)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Error converting value to Green LED brightness. value: {0}", green);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_device.Leds[(uint)StatusSign.Led.eLedColor.Blue].Brightness =
|
|
||||||
(StatusSign.Led.eBrightnessPercentageValues)SimplSharpDeviceHelper.PercentToUshort(blue);
|
|
||||||
}
|
|
||||||
catch (InvalidOperationException)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Error converting value to Blue LED brightness. value: {0}", blue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
|
||||||
{
|
|
||||||
var joinMap = new StatusSignControllerJoinMap(joinStart);
|
|
||||||
|
|
||||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
|
||||||
joinMap = JsonConvert.DeserializeObject<StatusSignControllerJoinMap>(joinMapSerialized);
|
|
||||||
|
|
||||||
if (bridge != null)
|
|
||||||
{
|
|
||||||
bridge.AddJoinMap(Key, joinMap);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
|
||||||
|
|
||||||
trilist.SetBoolSigAction(joinMap.RedControl.JoinNumber, b => EnableControl(trilist, joinMap, this));
|
|
||||||
trilist.SetBoolSigAction(joinMap.GreenControl.JoinNumber, b => EnableControl(trilist, joinMap, this));
|
|
||||||
trilist.SetBoolSigAction(joinMap.BlueControl.JoinNumber, b => EnableControl(trilist, joinMap, this));
|
|
||||||
|
|
||||||
trilist.SetUShortSigAction(joinMap.RedLed.JoinNumber, u => SetColor(trilist, joinMap, this));
|
|
||||||
trilist.SetUShortSigAction(joinMap.GreenLed.JoinNumber, u => SetColor(trilist, joinMap, this));
|
|
||||||
trilist.SetUShortSigAction(joinMap.BlueLed.JoinNumber, u => SetColor(trilist, joinMap, this));
|
|
||||||
|
|
||||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = Name;
|
|
||||||
|
|
||||||
IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
|
|
||||||
RedLedEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RedControl.JoinNumber]);
|
|
||||||
BlueLedEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.BlueControl.JoinNumber]);
|
|
||||||
GreenLedEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.GreenControl.JoinNumber]);
|
|
||||||
|
|
||||||
RedLedBrightnessFeedback.LinkInputSig(trilist.UShortInput[joinMap.RedLed.JoinNumber]);
|
|
||||||
BlueLedBrightnessFeedback.LinkInputSig(trilist.UShortInput[joinMap.BlueLed.JoinNumber]);
|
|
||||||
GreenLedBrightnessFeedback.LinkInputSig(trilist.UShortInput[joinMap.GreenLed.JoinNumber]);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void EnableControl(BasicTriList triList, StatusSignControllerJoinMap joinMap,
|
|
||||||
StatusSignController device)
|
|
||||||
{
|
|
||||||
var redEnable = triList.BooleanOutput[joinMap.RedControl.JoinNumber].BoolValue;
|
|
||||||
var greenEnable = triList.BooleanOutput[joinMap.GreenControl.JoinNumber].BoolValue;
|
|
||||||
var blueEnable = triList.BooleanOutput[joinMap.BlueControl.JoinNumber].BoolValue;
|
|
||||||
device.EnableLedControl(redEnable, greenEnable, blueEnable);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void SetColor(BasicTriList triList, StatusSignControllerJoinMap joinMap,
|
|
||||||
StatusSignController device)
|
|
||||||
{
|
|
||||||
var redBrightness = triList.UShortOutput[joinMap.RedLed.JoinNumber].UShortValue;
|
|
||||||
var greenBrightness = triList.UShortOutput[joinMap.GreenLed.JoinNumber].UShortValue;
|
|
||||||
var blueBrightness = triList.UShortOutput[joinMap.BlueLed.JoinNumber].UShortValue;
|
|
||||||
|
|
||||||
device.SetColor(redBrightness, greenBrightness, blueBrightness);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region PreActivation
|
|
||||||
|
|
||||||
private static StatusSign GetStatusSignDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var cresnetId = control.CresnetIdInt;
|
|
||||||
var branchId = control.ControlPortNumber;
|
|
||||||
var parentKey = string.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
|
||||||
|
|
||||||
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new StatusSign", parentKey);
|
|
||||||
return new StatusSign(cresnetId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
var cresnetBridge = DeviceManager.GetDeviceForKey(parentKey) as IHasCresnetBranches;
|
|
||||||
|
|
||||||
if (cresnetBridge != null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new StatusSign", parentKey);
|
|
||||||
return new StatusSign(cresnetId, cresnetBridge.CresnetBranches[branchId]);
|
|
||||||
}
|
|
||||||
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public class StatusSignControllerFactory : EssentialsDeviceFactory<StatusSignController>
|
|
||||||
{
|
|
||||||
public StatusSignControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "statussign" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new StatusSign Device");
|
|
||||||
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var cresnetId = control.CresnetIdInt;
|
|
||||||
|
|
||||||
return new StatusSignController(dc.Key, GetStatusSignDevice, dc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.Gateways
|
|
||||||
{
|
|
||||||
public class CenCn2Controller
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,197 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.Gateways;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
|
|
||||||
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
[Description("Wrapper class for Crestron Infinet-EX Gateways")]
|
|
||||||
public class CenRfgwController : CrestronGenericBaseDevice, IHasReady
|
|
||||||
{
|
|
||||||
public event EventHandler<IsReadyEventArgs> IsReadyEvent;
|
|
||||||
|
|
||||||
public bool IsReady { get; private set; }
|
|
||||||
|
|
||||||
private GatewayBase _gateway;
|
|
||||||
|
|
||||||
public GatewayBase GateWay
|
|
||||||
{
|
|
||||||
get { return _gateway; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Constructor for the on-board gateway
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="key"></param>
|
|
||||||
/// <param name="name"></param>
|
|
||||||
/// <param name="gateway"></param>
|
|
||||||
public CenRfgwController(string key, string name, GatewayBase gateway) :
|
|
||||||
base(key, name, gateway)
|
|
||||||
{
|
|
||||||
_gateway = gateway;
|
|
||||||
IsReady = true;
|
|
||||||
FireIsReadyEvent(IsReady);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CenRfgwController(string key, Func<DeviceConfig, GatewayBase> preActivationFunc, DeviceConfig config) :
|
|
||||||
base(key, config.Name)
|
|
||||||
{
|
|
||||||
IsReady = false;
|
|
||||||
FireIsReadyEvent(IsReady);
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
_gateway = preActivationFunc(config);
|
|
||||||
|
|
||||||
IsReady = true;
|
|
||||||
RegisterCrestronGenericBase(_gateway);
|
|
||||||
FireIsReadyEvent(IsReady);
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static GatewayBase GetNewIpRfGateway(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var type = dc.Type;
|
|
||||||
var ipId = control.IpIdInt;
|
|
||||||
|
|
||||||
if (type.Equals("cenrfgwex", StringComparison.InvariantCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
return new CenRfgwEx(ipId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
if (type.Equals("cenerfgwpoe", StringComparison.InvariantCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
return new CenErfgwPoe(ipId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void FireIsReadyEvent(bool data)
|
|
||||||
{
|
|
||||||
var handler = IsReadyEvent;
|
|
||||||
if (handler == null) return;
|
|
||||||
|
|
||||||
handler(this, new IsReadyEventArgs(data));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static GatewayBase GetNewSharedIpRfGateway(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var ipId = control.IpIdInt;
|
|
||||||
|
|
||||||
if (dc.Type.Equals("cenrfgwex", StringComparison.InvariantCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
return new CenRfgwExEthernetSharable(ipId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
if (dc.Type.Equals("cenerfgwpoe", StringComparison.InvariantCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
return new CenErfgwPoeEthernetSharable(ipId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static GatewayBase GetCenRfgwCresnetController(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var type = dc.Type;
|
|
||||||
var cresnetId = control.CresnetIdInt;
|
|
||||||
var branchId = control.ControlPortNumber;
|
|
||||||
var parentKey = string.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
|
||||||
|
|
||||||
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new CenRfgw", parentKey);
|
|
||||||
if (type.Equals("cenerfgwpoe", StringComparison.InvariantCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
return new CenErfgwPoeCresnet(cresnetId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
if (type.Equals("cenrfgwex", StringComparison.InvariantCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
return new CenRfgwExCresnet(cresnetId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var cresnetBridge = DeviceManager.GetDeviceForKey(parentKey) as ICresnetBridge;
|
|
||||||
|
|
||||||
if (cresnetBridge != null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new CenRfgw", parentKey);
|
|
||||||
|
|
||||||
if (type.Equals("cenerfgwpoe", StringComparison.InvariantCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
return new CenErfgwPoeCresnet(cresnetId, cresnetBridge.Branches[branchId]);
|
|
||||||
}
|
|
||||||
if (type.Equals("cenrfgwex", StringComparison.InvariantCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
return new CenRfgwExCresnet(cresnetId, cresnetBridge.Branches[branchId]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public enum EExGatewayType
|
|
||||||
{
|
|
||||||
Ethernet,
|
|
||||||
EthernetShared,
|
|
||||||
Cresnet
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#region Factory
|
|
||||||
|
|
||||||
public class CenRfgwControllerFactory : EssentialsDeviceFactory<CenRfgwController>
|
|
||||||
{
|
|
||||||
public CenRfgwControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string> {"cenrfgwex", "cenerfgwpoe"};
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
|
|
||||||
Debug.Console(1, "Factory Attempting to create new CEN-GWEXER Device");
|
|
||||||
|
|
||||||
var props = JsonConvert.DeserializeObject<EssentialsRfGatewayConfig>(dc.Properties.ToString());
|
|
||||||
|
|
||||||
EExGatewayType gatewayType =
|
|
||||||
(EExGatewayType) Enum.Parse(typeof (EExGatewayType), props.GatewayType, true);
|
|
||||||
|
|
||||||
switch (gatewayType)
|
|
||||||
{
|
|
||||||
case (EExGatewayType.Ethernet):
|
|
||||||
return new CenRfgwController(dc.Key, dc.Name, GetNewIpRfGateway(dc));
|
|
||||||
case (EExGatewayType.EthernetShared):
|
|
||||||
return new CenRfgwController(dc.Key, dc.Name, GetNewSharedIpRfGateway(dc));
|
|
||||||
case (EExGatewayType.Cresnet):
|
|
||||||
return new CenRfgwController(dc.Key, GetCenRfgwCresnetController, dc);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
using Full.Newtonsoft.Json.Linq;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
public class EssentialsRfGatewayConfig
|
|
||||||
{
|
|
||||||
[JsonProperty("control")]
|
|
||||||
public EssentialsControlPropertiesConfig Control { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("gatewayType")]
|
|
||||||
public string GatewayType { get; set; }
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,777 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Resources;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
[Description("Wrapper class for CEN-ODT-C-POE")]
|
|
||||||
[ConfigSnippet("\"properties\": {\"control\": {\"method\": \"cresnet\",\"cresnetId\": \"97\"},\"enablePir\": true,\"enableLedFlash\": true,\"enableRawStates\":true,\"remoteTimeout\": 30,\"internalPhotoSensorMinChange\": 0,\"externalPhotoSensorMinChange\": 0,\"enableUsA\": true,\"enableUsB\": true,\"orWhenVacatedState\": true}")]
|
|
||||||
public class CenOdtOccupancySensorBaseController : CrestronGenericBridgeableBaseDevice, IOccupancyStatusProvider
|
|
||||||
{
|
|
||||||
public CenOdtCPoe OccSensor { get; private set; }
|
|
||||||
|
|
||||||
public GlsOccupancySensorPropertiesConfig PropertiesConfig { 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; }
|
|
||||||
|
|
||||||
public BoolFeedback IdentityModeFeedback { 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, GlsOccupancySensorPropertiesConfig config)
|
|
||||||
: base(key, name, sensor)
|
|
||||||
{
|
|
||||||
PropertiesConfig = config;
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
IdentityModeFeedback = new BoolFeedback(()=>OccSensor.IdentityModeOnFeedback.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);
|
|
||||||
|
|
||||||
AddPostActivationAction(() =>
|
|
||||||
{
|
|
||||||
OccSensor.OnlineStatusChange += (o, a) =>
|
|
||||||
{
|
|
||||||
if (a.DeviceOnLine)
|
|
||||||
{
|
|
||||||
ApplySettingsToSensorFromConfig();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (OccSensor.IsOnline)
|
|
||||||
{
|
|
||||||
ApplySettingsToSensorFromConfig();
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Applies any sensor settings defined in config
|
|
||||||
/// </summary>
|
|
||||||
protected virtual void ApplySettingsToSensorFromConfig()
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Checking config for settings to apply");
|
|
||||||
|
|
||||||
if (PropertiesConfig.EnablePir != null)
|
|
||||||
{
|
|
||||||
SetPirEnable((bool)PropertiesConfig.EnablePir);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.EnableLedFlash != null)
|
|
||||||
{
|
|
||||||
SetLedFlashEnable((bool)PropertiesConfig.EnableLedFlash);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.RemoteTimeout != null)
|
|
||||||
{
|
|
||||||
SetRemoteTimeout((ushort)PropertiesConfig.RemoteTimeout);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.ShortTimeoutState != null)
|
|
||||||
{
|
|
||||||
SetShortTimeoutState((bool)PropertiesConfig.ShortTimeoutState);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.EnableRawStates != null)
|
|
||||||
{
|
|
||||||
EnableRawStates((bool)PropertiesConfig.EnableRawStates);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.InternalPhotoSensorMinChange != null)
|
|
||||||
{
|
|
||||||
SetInternalPhotoSensorMinChange((ushort)PropertiesConfig.InternalPhotoSensorMinChange);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.EnableUsA != null)
|
|
||||||
{
|
|
||||||
SetUsAEnable((bool)PropertiesConfig.EnableUsA);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.EnableUsB != null)
|
|
||||||
{
|
|
||||||
SetUsBEnable((bool)PropertiesConfig.EnableUsB);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.OrWhenVacatedState != null)
|
|
||||||
{
|
|
||||||
SetOrWhenVacatedState((bool)PropertiesConfig.OrWhenVacatedState);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.AndWhenVacatedState != null)
|
|
||||||
{
|
|
||||||
SetAndWhenVacatedState((bool)PropertiesConfig.AndWhenVacatedState);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO [ ] feature/cenoodtcpoe-sensor-sensitivity-configuration
|
|
||||||
if (PropertiesConfig.UsSensitivityOccupied != null)
|
|
||||||
{
|
|
||||||
SetUsSensitivityOccupied((ushort)PropertiesConfig.UsSensitivityOccupied);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.UsSensitivityVacant != null)
|
|
||||||
{
|
|
||||||
SetUsSensitivityVacant((ushort)PropertiesConfig.UsSensitivityVacant);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.PirSensitivityOccupied != null)
|
|
||||||
{
|
|
||||||
SetPirSensitivityOccupied((ushort)PropertiesConfig.PirSensitivityOccupied);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.PirSensitivityVacant != null)
|
|
||||||
{
|
|
||||||
SetPirSensitivityVacant((ushort)PropertiesConfig.PirSensitivityVacant);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <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>
|
|
||||||
/// Sets the identity mode on or off
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="state"></param>
|
|
||||||
public void SetIdentityMode(bool state)
|
|
||||||
{
|
|
||||||
if (state)
|
|
||||||
OccSensor.IdentityModeOn();
|
|
||||||
else
|
|
||||||
OccSensor.IdentityModeOff();
|
|
||||||
|
|
||||||
Debug.Console(1, this, "Identity Mode: {0}", OccSensor.IdentityModeOnFeedback.BoolValue ? "On" : "Off");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the US sensor sensitivity for occupied state
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sensitivity"></param>
|
|
||||||
public void SetUsSensitivityOccupied(ushort sensitivity)
|
|
||||||
{
|
|
||||||
var level = (eSensitivityLevel) sensitivity;
|
|
||||||
if (level == 0) return;
|
|
||||||
|
|
||||||
OccSensor.UltrasonicSensorSensitivityInOccupiedState = level;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the US sensor sensitivity for vacant state
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sensitivity"></param>
|
|
||||||
public void SetUsSensitivityVacant(ushort sensitivity)
|
|
||||||
{
|
|
||||||
var level = (eSensitivityLevel)sensitivity;
|
|
||||||
if (level == 0) return;
|
|
||||||
|
|
||||||
OccSensor.UltrasonicSensorSensitivityInVacantState = level;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the PIR sensor sensitivity for occupied state
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sensitivity"></param>
|
|
||||||
public void SetPirSensitivityOccupied(ushort sensitivity)
|
|
||||||
{
|
|
||||||
var level = (eSensitivityLevel)sensitivity;
|
|
||||||
if (level == 0) return;
|
|
||||||
|
|
||||||
OccSensor.PassiveInfraredSensorSensitivityInOccupiedState = level;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the PIR sensor sensitivity for vacant state
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sensitivity"></param>
|
|
||||||
public void SetPirSensitivityVacant(ushort sensitivity)
|
|
||||||
{
|
|
||||||
var level = (eSensitivityLevel)sensitivity;
|
|
||||||
if (level == 0) return;
|
|
||||||
|
|
||||||
OccSensor.PassiveInfraredSensorSensitivityInVacantState = level;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Method to print current settings to console
|
|
||||||
/// </summary>
|
|
||||||
public void GetSettings()
|
|
||||||
{
|
|
||||||
var dash = new string('*', 50);
|
|
||||||
CrestronConsole.PrintLine(string.Format("{0}\n", dash));
|
|
||||||
|
|
||||||
Debug.Console(0, this, "Vacancy Detected: {0}",
|
|
||||||
OccSensor.VacancyDetectedFeedback.BoolValue);
|
|
||||||
|
|
||||||
Debug.Console(0, Key, "Timeout Current: {0} | Remote: {1}",
|
|
||||||
OccSensor.CurrentTimeoutFeedback.UShortValue,
|
|
||||||
OccSensor.RemoteTimeout.UShortValue);
|
|
||||||
|
|
||||||
Debug.Console(0, Key, "Short Timeout Enabled: {0}",
|
|
||||||
OccSensor.ShortTimeoutEnabledFeedback.BoolValue);
|
|
||||||
|
|
||||||
Debug.Console(0, Key, "PIR Sensor Enabled: {0} | Sensitivity Occupied: {1} | Sensitivity Vacant: {2}",
|
|
||||||
OccSensor.PassiveInfraredSensorEnabledFeedback.BoolValue,
|
|
||||||
OccSensor.PassiveInfraredSensorSensitivityInOccupiedStateFeedback,
|
|
||||||
OccSensor.PassiveInfraredSensorSensitivityInVacantStateFeedback);
|
|
||||||
|
|
||||||
Debug.Console(0, Key, "Ultrasonic Enabled A: {0} | B: {1}",
|
|
||||||
OccSensor.UltrasonicSensorSideAEnabledFeedback.BoolValue,
|
|
||||||
OccSensor.UltrasonicSensorSideBEnabledFeedback.BoolValue);
|
|
||||||
|
|
||||||
Debug.Console(0, Key, "Ultrasonic Sensitivity Occupied: {0} | Vacant: {1}",
|
|
||||||
OccSensor.UltrasonicSensorSensitivityInOccupiedStateFeedback,
|
|
||||||
OccSensor.UltrasonicSensorSensitivityInVacantStateFeedback);
|
|
||||||
|
|
||||||
CrestronConsole.PrintLine(string.Format("{0}\n", dash));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
if (bridge != null)
|
|
||||||
{
|
|
||||||
bridge.AddJoinMap(Key, joinMap);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(1, 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]);
|
|
||||||
|
|
||||||
// Identity mode
|
|
||||||
trilist.SetBoolSigAction(joinMap.IdentityMode.JoinNumber, occController.SetIdentityMode);
|
|
||||||
occController.IdentityModeFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IdentityModeFeedback.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 props = dc.Properties.ToObject<GlsOccupancySensorPropertiesConfig>();
|
|
||||||
|
|
||||||
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, props);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Devices.Common.Occupancy
|
|
||||||
{
|
|
||||||
public class EssentialsGlsOccupancySensorBaseController : CrestronGenericBaseDevice, IOccupancyStatusProvider
|
|
||||||
{
|
|
||||||
public GlsOccupancySensorBase OccSensor { get; private set; }
|
|
||||||
|
|
||||||
public BoolFeedback RoomIsOccupiedFeedback { get; private set; }
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
/// <summary>
|
|
||||||
/// Set by debugging functions
|
|
||||||
/// </summary>
|
|
||||||
public bool InMockMode { get; private set; }
|
|
||||||
|
|
||||||
public bool MockRoomIsOccupiedFeedback { get; private set; }
|
|
||||||
=======
|
|
||||||
// Debug properties
|
|
||||||
public bool InTestMode { get; private set; }
|
|
||||||
|
|
||||||
public bool TestRoomIsOccupiedFeedback { get; private set; }
|
|
||||||
>>>>>>> origin/feature/ecs-342-neil
|
|
||||||
|
|
||||||
public Func<bool> RoomIsOccupiedFeedbackFunc
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
<<<<<<< HEAD
|
|
||||||
return () => InMockMode ? MockRoomIsOccupiedFeedback : OccSensor.OccupancyDetectedFeedback.BoolValue;
|
|
||||||
=======
|
|
||||||
return () => InTestMode ? TestRoomIsOccupiedFeedback : OccSensor.OccupancyDetectedFeedback.BoolValue;
|
|
||||||
>>>>>>> origin/feature/ecs-342-neil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public EssentialsGlsOccupancySensorBaseController(string key, string name, GlsOccupancySensorBase sensor, GlsOccupancySensorConfigurationProperties props)
|
|
||||||
: base(key, name, sensor)
|
|
||||||
{
|
|
||||||
OccSensor = sensor;
|
|
||||||
RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc);
|
|
||||||
|
|
||||||
OccSensor.GlsOccupancySensorChange += new GlsOccupancySensorChangeEventHandler(sensor_GlsOccupancySensorChange);
|
|
||||||
}
|
|
||||||
|
|
||||||
void sensor_GlsOccupancySensorChange(GlsOccupancySensorBase device, GlsOccupancySensorChangeEventArgs args)
|
|
||||||
{
|
|
||||||
RoomIsOccupiedFeedback.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>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public class GlsOccupancySensorConfigurationProperties
|
|
||||||
{
|
|
||||||
public string CresnetId { get; set; }
|
|
||||||
public string Model { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,541 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
[Description("Wrapper class for Single Technology GLS Occupancy Sensors")]
|
|
||||||
[ConfigSnippet("\"properties\": {\"control\": {\"method\": \"cresnet\",\"cresnetId\": \"97\"},\"enablePir\": true,\"enableLedFlash\": true,\"enableRawStates\":true,\"remoteTimeout\": 30,\"internalPhotoSensorMinChange\": 0,\"externalPhotoSensorMinChange\": 0}")]
|
|
||||||
public abstract class GlsOccupancySensorBaseController : CrestronGenericBridgeableBaseDevice, IOccupancyStatusProvider
|
|
||||||
{
|
|
||||||
public GlsOccupancySensorPropertiesConfig PropertiesConfig { get; private set; }
|
|
||||||
|
|
||||||
protected GlsOccupancySensorBase OccSensor;
|
|
||||||
|
|
||||||
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 LocalTimoutFeedback { get; private set; }
|
|
||||||
|
|
||||||
public IntFeedback InternalPhotoSensorValue { get; set; }
|
|
||||||
|
|
||||||
public IntFeedback ExternalPhotoSensorValue { get; 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected GlsOccupancySensorBaseController(string key, DeviceConfig config)
|
|
||||||
: this(key, config.Name, config)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
protected GlsOccupancySensorBaseController(string key, string name, DeviceConfig config)
|
|
||||||
: base(key, name)
|
|
||||||
{
|
|
||||||
|
|
||||||
var props = config.Properties.ToObject<GlsOccupancySensorPropertiesConfig>();
|
|
||||||
|
|
||||||
if (props != null)
|
|
||||||
{
|
|
||||||
PropertiesConfig = props;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "props are null. Unable to deserialize into GlsOccupancySensorPropertiesConfig");
|
|
||||||
}
|
|
||||||
|
|
||||||
AddPostActivationAction(() =>
|
|
||||||
{
|
|
||||||
OccSensor.OnlineStatusChange += (o, a) =>
|
|
||||||
{
|
|
||||||
if (a.DeviceOnLine)
|
|
||||||
{
|
|
||||||
ApplySettingsToSensorFromConfig();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (OccSensor.IsOnline)
|
|
||||||
{
|
|
||||||
ApplySettingsToSensorFromConfig();
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Applies any sensor settings defined in config
|
|
||||||
/// </summary>
|
|
||||||
protected virtual void ApplySettingsToSensorFromConfig()
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Attempting to apply settings to sensor from config");
|
|
||||||
|
|
||||||
if (PropertiesConfig.EnablePir != null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "EnablePir found, attempting to set value from config");
|
|
||||||
SetPirEnable((bool)PropertiesConfig.EnablePir);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "EnablePir null, no value specified in config");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.EnableLedFlash != null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "EnableLedFlash found, attempting to set value from config");
|
|
||||||
SetLedFlashEnable((bool)PropertiesConfig.EnableLedFlash);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.RemoteTimeout != null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "RemoteTimeout found, attempting to set value from config");
|
|
||||||
SetRemoteTimeout((ushort)PropertiesConfig.RemoteTimeout);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "RemoteTimeout null, no value specified in config");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.ShortTimeoutState != null)
|
|
||||||
{
|
|
||||||
SetShortTimeoutState((bool)PropertiesConfig.ShortTimeoutState);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.EnableRawStates != null)
|
|
||||||
{
|
|
||||||
EnableRawStates((bool)PropertiesConfig.EnableRawStates);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.InternalPhotoSensorMinChange != null)
|
|
||||||
{
|
|
||||||
SetInternalPhotoSensorMinChange((ushort)PropertiesConfig.InternalPhotoSensorMinChange);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.ExternalPhotoSensorMinChange != null)
|
|
||||||
{
|
|
||||||
SetExternalPhotoSensorMinChange((ushort)PropertiesConfig.ExternalPhotoSensorMinChange);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void RegisterGlsOccupancySensorBaseController(GlsOccupancySensorBase occSensor)
|
|
||||||
{
|
|
||||||
OccSensor = occSensor;
|
|
||||||
|
|
||||||
RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc);
|
|
||||||
|
|
||||||
PirSensorEnabledFeedback = new BoolFeedback(() => OccSensor.PirEnabledFeedback.BoolValue);
|
|
||||||
|
|
||||||
LedFlashEnabledFeedback = new BoolFeedback(() => OccSensor.LedFlashEnabledFeedback.BoolValue);
|
|
||||||
|
|
||||||
ShortTimeoutEnabledFeedback = new BoolFeedback(() => OccSensor.ShortTimeoutEnabledFeedback.BoolValue);
|
|
||||||
|
|
||||||
PirSensitivityInVacantStateFeedback =
|
|
||||||
new IntFeedback(() => OccSensor.PirSensitivityInVacantStateFeedback.UShortValue);
|
|
||||||
|
|
||||||
PirSensitivityInOccupiedStateFeedback =
|
|
||||||
new IntFeedback(() => OccSensor.PirSensitivityInOccupiedStateFeedback.UShortValue);
|
|
||||||
|
|
||||||
CurrentTimeoutFeedback = new IntFeedback(() => OccSensor.CurrentTimeoutFeedback.UShortValue);
|
|
||||||
|
|
||||||
LocalTimoutFeedback = new IntFeedback(() => OccSensor.LocalTimeoutFeedback.UShortValue);
|
|
||||||
|
|
||||||
GraceOccupancyDetectedFeedback =
|
|
||||||
new BoolFeedback(() => OccSensor.GraceOccupancyDetectedFeedback.BoolValue);
|
|
||||||
|
|
||||||
RawOccupancyFeedback = new BoolFeedback(() => OccSensor.RawOccupancyFeedback.BoolValue);
|
|
||||||
|
|
||||||
InternalPhotoSensorValue = new IntFeedback(() => OccSensor.InternalPhotoSensorValueFeedback.UShortValue);
|
|
||||||
|
|
||||||
ExternalPhotoSensorValue = new IntFeedback(() => OccSensor.ExternalPhotoSensorValueFeedback.UShortValue);
|
|
||||||
|
|
||||||
OccSensor.BaseEvent += OccSensor_BaseEvent;
|
|
||||||
|
|
||||||
OccSensor.GlsOccupancySensorChange += OccSensor_GlsOccupancySensorChange;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <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_GlsOccupancySensorChange(GlsOccupancySensorBase device, GlsOccupancySensorChangeEventArgs args)
|
|
||||||
{
|
|
||||||
switch (args.EventId)
|
|
||||||
{
|
|
||||||
case GlsOccupancySensorBase.PirEnabledFeedbackEventId:
|
|
||||||
PirSensorEnabledFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.LedFlashEnabledFeedbackEventId:
|
|
||||||
LedFlashEnabledFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.ShortTimeoutEnabledFeedbackEventId:
|
|
||||||
ShortTimeoutEnabledFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.PirSensitivityInOccupiedStateFeedbackEventId:
|
|
||||||
PirSensitivityInOccupiedStateFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.PirSensitivityInVacantStateFeedbackEventId:
|
|
||||||
PirSensitivityInVacantStateFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void OccSensor_BaseEvent(Crestron.SimplSharpPro.GenericBase device, Crestron.SimplSharpPro.BaseEventArgs args)
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "GlsOccupancySensorChange EventId: {0}", args.EventId);
|
|
||||||
|
|
||||||
switch (args.EventId)
|
|
||||||
{
|
|
||||||
case GlsOccupancySensorBase.RoomVacantFeedbackEventId:
|
|
||||||
case GlsOccupancySensorBase.RoomOccupiedFeedbackEventId:
|
|
||||||
Debug.Console(1, this, "Occupancy State: {0}", OccSensor.OccupancyDetectedFeedback.BoolValue);
|
|
||||||
RoomIsOccupiedFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.TimeoutFeedbackEventId:
|
|
||||||
CurrentTimeoutFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.TimeoutLocalFeedbackEventId:
|
|
||||||
LocalTimoutFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.GraceOccupancyDetectedFeedbackEventId:
|
|
||||||
GraceOccupancyDetectedFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.RawOccupancyFeedbackEventId:
|
|
||||||
RawOccupancyFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.InternalPhotoSensorValueFeedbackEventId:
|
|
||||||
InternalPhotoSensorValue.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.ExternalPhotoSensorValueFeedbackEventId:
|
|
||||||
ExternalPhotoSensorValue.FireUpdate();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Setting EnablePir to: {0}", state);
|
|
||||||
|
|
||||||
OccSensor.EnablePir.BoolValue = state;
|
|
||||||
OccSensor.DisablePir.BoolValue = !state;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Enables or disables the LED Flash
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="state"></param>
|
|
||||||
public void SetLedFlashEnable(bool state)
|
|
||||||
{
|
|
||||||
OccSensor.EnableLedFlash.BoolValue = state;
|
|
||||||
OccSensor.DisableLedFlash.BoolValue = !state;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Enables or disables short timeout based on state
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="state"></param>
|
|
||||||
public void SetShortTimeoutState(bool state)
|
|
||||||
{
|
|
||||||
OccSensor.EnableShortTimeout.BoolValue = state;
|
|
||||||
OccSensor.DisableShortTimeout.BoolValue = !state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void IncrementPirSensitivityInOccupiedState(bool pressRelease)
|
|
||||||
{
|
|
||||||
OccSensor.IncrementPirSensitivityInOccupiedState.BoolValue = pressRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DecrementPirSensitivityInOccupiedState(bool pressRelease)
|
|
||||||
{
|
|
||||||
OccSensor.DecrementPirSensitivityInOccupiedState.BoolValue = pressRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void IncrementPirSensitivityInVacantState(bool pressRelease)
|
|
||||||
{
|
|
||||||
OccSensor.IncrementPirSensitivityInVacantState.BoolValue = pressRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DecrementPirSensitivityInVacantState(bool pressRelease)
|
|
||||||
{
|
|
||||||
OccSensor.DecrementPirSensitivityInVacantState.BoolValue = pressRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Pulse ForceOccupied on the sensor for .5 seconds
|
|
||||||
/// </summary>
|
|
||||||
public void ForceOccupied()
|
|
||||||
{
|
|
||||||
CrestronInvoke.BeginInvoke((o) =>
|
|
||||||
{
|
|
||||||
ForceOccupied(true);
|
|
||||||
CrestronEnvironment.Sleep(500);
|
|
||||||
ForceOccupied(false);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ForceOccupied(bool value)
|
|
||||||
{
|
|
||||||
OccSensor.ForceOccupied.BoolValue = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Pulse ForceVacant on the sensor for .5 seconds
|
|
||||||
/// </summary>
|
|
||||||
public void ForceVacant()
|
|
||||||
{
|
|
||||||
CrestronInvoke.BeginInvoke((o) =>
|
|
||||||
{
|
|
||||||
ForceVacant(true);
|
|
||||||
CrestronEnvironment.Sleep(500);
|
|
||||||
ForceVacant(false);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ForceVacant(bool value)
|
|
||||||
{
|
|
||||||
OccSensor.ForceVacant.BoolValue = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void EnableRawStates(bool state)
|
|
||||||
{
|
|
||||||
OccSensor.EnableRawStates.BoolValue = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetRemoteTimeout(ushort time)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Setting RemoteTimout to: {0}", time);
|
|
||||||
|
|
||||||
OccSensor.RemoteTimeout.UShortValue = time;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetInternalPhotoSensorMinChange(ushort value)
|
|
||||||
{
|
|
||||||
OccSensor.InternalPhotoSensorMinimumChange.UShortValue = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetExternalPhotoSensorMinChange(ushort value)
|
|
||||||
{
|
|
||||||
OccSensor.ExternalPhotoSensorMinimumChange.UShortValue = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Method to print current occ settings to console.
|
|
||||||
/// </summary>
|
|
||||||
public virtual void GetSettings()
|
|
||||||
{
|
|
||||||
var dash = new string('*', 50);
|
|
||||||
CrestronConsole.PrintLine(string.Format("{0}\n", dash));
|
|
||||||
|
|
||||||
Debug.Console(0, this, "Vacancy Detected: {0}",
|
|
||||||
OccSensor.VacancyDetectedFeedback.BoolValue);
|
|
||||||
|
|
||||||
Debug.Console(0, this, "Timeout Current: {0} | Local: {1}",
|
|
||||||
OccSensor.CurrentTimeoutFeedback.UShortValue,
|
|
||||||
OccSensor.LocalTimeoutFeedback.UShortValue);
|
|
||||||
|
|
||||||
Debug.Console(0, this, "Short Timeout Enabled: {0}",
|
|
||||||
OccSensor.ShortTimeoutEnabledFeedback.BoolValue);
|
|
||||||
|
|
||||||
Debug.Console(0, this, "PIR Sensor Enabled: {0} | Sensitivity Occupied: {1} | Sensitivity Vacant: {2}",
|
|
||||||
OccSensor.PirEnabledFeedback.BoolValue,
|
|
||||||
OccSensor.PirSensitivityInOccupiedStateFeedback.UShortValue,
|
|
||||||
OccSensor.PirSensitivityInVacantStateFeedback.UShortValue);
|
|
||||||
|
|
||||||
CrestronConsole.PrintLine(string.Format("{0}\n", dash));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void LinkOccSensorToApi(GlsOccupancySensorBaseController occController, BasicTriList trilist,
|
|
||||||
uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
|
||||||
{
|
|
||||||
var joinMap = new GlsOccupancySensorBaseJoinMap(joinStart);
|
|
||||||
|
|
||||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
|
||||||
joinMap = JsonConvert.DeserializeObject<GlsOccupancySensorBaseJoinMap>(joinMapSerialized);
|
|
||||||
|
|
||||||
if (bridge != null)
|
|
||||||
{
|
|
||||||
bridge.AddJoinMap(Key, joinMap);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(1, occController, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
|
||||||
|
|
||||||
occController.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
|
|
||||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = occController.Name;
|
|
||||||
|
|
||||||
trilist.OnlineStatusChange += (d, args) =>
|
|
||||||
{
|
|
||||||
if (args.DeviceOnLine)
|
|
||||||
{
|
|
||||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = occController.Name;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
LinkSingleTechSensorToApi(occController, trilist, joinMap);
|
|
||||||
|
|
||||||
LinkDualTechSensorToApi(occController, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void LinkDualTechSensorToApi(GlsOccupancySensorBaseController occController, BasicTriList trilist,
|
|
||||||
GlsOccupancySensorBaseJoinMap joinMap)
|
|
||||||
{
|
|
||||||
var odtOccController = occController as GlsOdtOccupancySensorController;
|
|
||||||
|
|
||||||
if (odtOccController == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// OR When Vacated
|
|
||||||
trilist.SetBoolSigAction(joinMap.OrWhenVacated.JoinNumber, odtOccController.SetOrWhenVacatedState);
|
|
||||||
odtOccController.OrWhenVacatedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.OrWhenVacated.JoinNumber]);
|
|
||||||
|
|
||||||
// AND When Vacated
|
|
||||||
trilist.SetBoolSigAction(joinMap.AndWhenVacated.JoinNumber, odtOccController.SetAndWhenVacatedState);
|
|
||||||
odtOccController.AndWhenVacatedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.AndWhenVacated.JoinNumber]);
|
|
||||||
|
|
||||||
// Ultrasonic A Sensor
|
|
||||||
trilist.SetSigTrueAction(joinMap.EnableUsA.JoinNumber, () => odtOccController.SetUsAEnable(true));
|
|
||||||
trilist.SetSigTrueAction(joinMap.DisableUsA.JoinNumber, () => odtOccController.SetUsAEnable(false));
|
|
||||||
odtOccController.UltrasonicAEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnableUsA.JoinNumber]);
|
|
||||||
|
|
||||||
// Ultrasonic B Sensor
|
|
||||||
trilist.SetSigTrueAction(joinMap.EnableUsB.JoinNumber, () => odtOccController.SetUsBEnable(true));
|
|
||||||
trilist.SetSigTrueAction(joinMap.DisableUsB.JoinNumber, () => odtOccController.SetUsBEnable(false));
|
|
||||||
odtOccController.UltrasonicBEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnableUsB.JoinNumber]);
|
|
||||||
|
|
||||||
// US Sensitivity in Occupied State
|
|
||||||
trilist.SetBoolSigAction(joinMap.IncrementUsInOccupiedState.JoinNumber,
|
|
||||||
odtOccController.IncrementUsSensitivityInOccupiedState);
|
|
||||||
trilist.SetBoolSigAction(joinMap.DecrementUsInOccupiedState.JoinNumber,
|
|
||||||
odtOccController.DecrementUsSensitivityInOccupiedState);
|
|
||||||
odtOccController.UltrasonicSensitivityInOccupiedStateFeedback.LinkInputSig(
|
|
||||||
trilist.UShortInput[joinMap.UsSensitivityInOccupiedState.JoinNumber]);
|
|
||||||
|
|
||||||
// US Sensitivity in Vacant State
|
|
||||||
trilist.SetBoolSigAction(joinMap.IncrementUsInVacantState.JoinNumber,
|
|
||||||
odtOccController.IncrementUsSensitivityInVacantState);
|
|
||||||
trilist.SetBoolSigAction(joinMap.DecrementUsInVacantState.JoinNumber,
|
|
||||||
odtOccController.DecrementUsSensitivityInVacantState);
|
|
||||||
odtOccController.UltrasonicSensitivityInVacantStateFeedback.LinkInputSig(
|
|
||||||
trilist.UShortInput[joinMap.UsSensitivityInVacantState.JoinNumber]);
|
|
||||||
|
|
||||||
//Sensor Raw States
|
|
||||||
odtOccController.RawOccupancyPirFeedback.LinkInputSig(
|
|
||||||
trilist.BooleanInput[joinMap.RawOccupancyPirFeedback.JoinNumber]);
|
|
||||||
odtOccController.RawOccupancyUsFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RawOccupancyUsFeedback.JoinNumber]);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void LinkSingleTechSensorToApi(GlsOccupancySensorBaseController occController, BasicTriList trilist,
|
|
||||||
GlsOccupancySensorBaseJoinMap joinMap)
|
|
||||||
{
|
|
||||||
// Occupied status
|
|
||||||
trilist.SetBoolSigAction(joinMap.ForceOccupied.JoinNumber, occController.ForceOccupied);
|
|
||||||
trilist.SetBoolSigAction(joinMap.ForceVacant.JoinNumber, 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, occController.EnableRawStates);
|
|
||||||
|
|
||||||
// Timouts
|
|
||||||
trilist.SetUShortSigAction(joinMap.Timeout.JoinNumber, occController.SetRemoteTimeout);
|
|
||||||
occController.CurrentTimeoutFeedback.LinkInputSig(trilist.UShortInput[joinMap.Timeout.JoinNumber]);
|
|
||||||
occController.LocalTimoutFeedback.LinkInputSig(trilist.UShortInput[joinMap.TimeoutLocalFeedback.JoinNumber]);
|
|
||||||
|
|
||||||
// LED Flash
|
|
||||||
trilist.SetSigTrueAction(joinMap.EnableLedFlash.JoinNumber, () => occController.SetLedFlashEnable(true));
|
|
||||||
trilist.SetSigTrueAction(joinMap.DisableLedFlash.JoinNumber, () => occController.SetLedFlashEnable(false));
|
|
||||||
occController.LedFlashEnabledFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.EnableLedFlash.JoinNumber]);
|
|
||||||
|
|
||||||
// Short Timeout
|
|
||||||
trilist.SetSigTrueAction(joinMap.EnableShortTimeout.JoinNumber, () => occController.SetShortTimeoutState(true));
|
|
||||||
trilist.SetSigTrueAction(joinMap.DisableShortTimeout.JoinNumber, () => occController.SetShortTimeoutState(false));
|
|
||||||
occController.ShortTimeoutEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnableShortTimeout.JoinNumber]);
|
|
||||||
|
|
||||||
// PIR Sensor
|
|
||||||
trilist.SetSigTrueAction(joinMap.EnablePir.JoinNumber, () => occController.SetPirEnable(true));
|
|
||||||
trilist.SetSigTrueAction(joinMap.DisablePir.JoinNumber, () => occController.SetPirEnable(false));
|
|
||||||
occController.PirSensorEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnablePir.JoinNumber]);
|
|
||||||
|
|
||||||
// PIR Sensitivity in Occupied State
|
|
||||||
trilist.SetBoolSigAction(joinMap.IncrementPirInOccupiedState.JoinNumber,
|
|
||||||
occController.IncrementPirSensitivityInOccupiedState);
|
|
||||||
trilist.SetBoolSigAction(joinMap.DecrementPirInOccupiedState.JoinNumber,
|
|
||||||
occController.DecrementPirSensitivityInOccupiedState);
|
|
||||||
occController.PirSensitivityInOccupiedStateFeedback.LinkInputSig(
|
|
||||||
trilist.UShortInput[joinMap.PirSensitivityInOccupiedState.JoinNumber]);
|
|
||||||
|
|
||||||
// PIR Sensitivity in Vacant State
|
|
||||||
trilist.SetBoolSigAction(joinMap.IncrementPirInVacantState.JoinNumber,
|
|
||||||
occController.IncrementPirSensitivityInVacantState);
|
|
||||||
trilist.SetBoolSigAction(joinMap.DecrementPirInVacantState.JoinNumber,
|
|
||||||
occController.DecrementPirSensitivityInVacantState);
|
|
||||||
occController.PirSensitivityInVacantStateFeedback.LinkInputSig(
|
|
||||||
trilist.UShortInput[joinMap.PirSensitivityInVacantState.JoinNumber]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Defines configuration properties for Crestron GLS series occupancy sensors
|
|
||||||
/// </summary>
|
|
||||||
public class GlsOccupancySensorPropertiesConfig
|
|
||||||
{
|
|
||||||
// Single Technology Sensors (PIR): GlsOccupancySensorBase
|
|
||||||
[JsonProperty("enablePir")]
|
|
||||||
public bool? EnablePir { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("enableLedFlash")]
|
|
||||||
public bool? EnableLedFlash { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("shortTimeoutState")]
|
|
||||||
public bool? ShortTimeoutState { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("enableRawStates")]
|
|
||||||
public bool? EnableRawStates { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("remoteTimeout")]
|
|
||||||
public ushort? RemoteTimeout { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("internalPhotoSensorMinChange")]
|
|
||||||
public ushort? InternalPhotoSensorMinChange { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("externalPhotoSensorMinChange")]
|
|
||||||
public ushort? ExternalPhotoSensorMinChange { get; set; }
|
|
||||||
|
|
||||||
// Dual Technology Sensors: GlsOdtCCn
|
|
||||||
[JsonProperty("enableUsA")]
|
|
||||||
public bool? EnableUsA { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("enableUsB")]
|
|
||||||
public bool? EnableUsB { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("orWhenVacatedState")]
|
|
||||||
public bool? OrWhenVacatedState { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("andWhenVacatedState")]
|
|
||||||
public bool? AndWhenVacatedState { get; set; }
|
|
||||||
|
|
||||||
// PoE Sensors: CenOdtCPoe
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the sensitivity level for US while sensor is in occupied state
|
|
||||||
/// 1 = low; 2 = medium; 3 = high; 4 = xlow; 5 = 2xlow; 6 = 3xlow
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("usSensitivityOccupied")]
|
|
||||||
public ushort? UsSensitivityOccupied { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the sensitivity level for US while sensor is in vacant state
|
|
||||||
/// 1 = low; 2 = medium; 3 = high; 4 = xlow; 5 = 2xlow; 6 = 3xlow
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("usSensitivityVacant")]
|
|
||||||
public ushort? UsSensitivityVacant { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the sensitivity level for PIR while sensor is in occupied state
|
|
||||||
/// 1 = low; 2 = medium; 3 = high
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("pirSensitivityOccupied")]
|
|
||||||
public ushort? PirSensitivityOccupied { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the sensitivity level for PIR while sensor is in vacant state
|
|
||||||
/// 1 = low; 2 = medium; 3 = high
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("pirSensitivityVacant")]
|
|
||||||
public ushort? PirSensitivityVacant { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,284 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
[Description("Wrapper class for Dual Technology GLS Occupancy Sensors")]
|
|
||||||
[ConfigSnippet("\"properties\": {\"control\": {\"method\": \"cresnet\",\"cresnetId\": \"97\"},\"enablePir\": true,\"enableLedFlash\": true,\"enableRawStates\":true,\"remoteTimeout\": 30,\"internalPhotoSensorMinChange\": 0,\"externalPhotoSensorMinChange\": 0,\"enableUsA\": true,\"enableUsB\": true,\"orWhenVacatedState\": true}")]
|
|
||||||
public class GlsOdtOccupancySensorController : GlsOccupancySensorBaseController
|
|
||||||
{
|
|
||||||
private GlsOdtCCn _occSensor;
|
|
||||||
|
|
||||||
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; }
|
|
||||||
|
|
||||||
|
|
||||||
public GlsOdtOccupancySensorController(string key, Func<DeviceConfig, GlsOdtCCn> preActivationFunc,
|
|
||||||
DeviceConfig config)
|
|
||||||
: base(key, config.Name, config)
|
|
||||||
{
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
_occSensor = preActivationFunc(config);
|
|
||||||
|
|
||||||
RegisterCrestronGenericBase(_occSensor);
|
|
||||||
|
|
||||||
RegisterGlsOccupancySensorBaseController(_occSensor);
|
|
||||||
|
|
||||||
AndWhenVacatedFeedback = new BoolFeedback(() => _occSensor.AndWhenVacatedFeedback.BoolValue);
|
|
||||||
|
|
||||||
OrWhenVacatedFeedback = new BoolFeedback(() => _occSensor.OrWhenVacatedFeedback.BoolValue);
|
|
||||||
|
|
||||||
UltrasonicAEnabledFeedback = new BoolFeedback(() => _occSensor.UsAEnabledFeedback.BoolValue);
|
|
||||||
|
|
||||||
UltrasonicBEnabledFeedback = new BoolFeedback(() => _occSensor.UsBEnabledFeedback.BoolValue);
|
|
||||||
|
|
||||||
RawOccupancyPirFeedback = new BoolFeedback(() => _occSensor.RawOccupancyPirFeedback.BoolValue);
|
|
||||||
|
|
||||||
RawOccupancyUsFeedback = new BoolFeedback(() => _occSensor.RawOccupancyUsFeedback.BoolValue);
|
|
||||||
|
|
||||||
UltrasonicSensitivityInVacantStateFeedback = new IntFeedback(() => _occSensor.UsSensitivityInVacantStateFeedback.UShortValue);
|
|
||||||
|
|
||||||
UltrasonicSensitivityInOccupiedStateFeedback = new IntFeedback(() => _occSensor.UsSensitivityInOccupiedStateFeedback.UShortValue);
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void ApplySettingsToSensorFromConfig()
|
|
||||||
{
|
|
||||||
base.ApplySettingsToSensorFromConfig();
|
|
||||||
|
|
||||||
if (PropertiesConfig.EnableUsA != null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "EnableUsA found, attempting to set value from config");
|
|
||||||
SetUsAEnable((bool)PropertiesConfig.EnableUsA);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "EnableUsA null, no value specified in config");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (PropertiesConfig.EnableUsB != null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "EnableUsB found, attempting to set value from config");
|
|
||||||
SetUsBEnable((bool)PropertiesConfig.EnableUsB);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "EnablePir null, no value specified in config");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (PropertiesConfig.OrWhenVacatedState != null)
|
|
||||||
{
|
|
||||||
SetOrWhenVacatedState((bool)PropertiesConfig.OrWhenVacatedState);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.AndWhenVacatedState != null)
|
|
||||||
{
|
|
||||||
SetAndWhenVacatedState((bool)PropertiesConfig.AndWhenVacatedState);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Overrides the base class event delegate to fire feedbacks for event IDs that pertain to this extended class.
|
|
||||||
/// Then calls the base delegate method to ensure any common event IDs are captured.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="device"></param>
|
|
||||||
/// <param name="args"></param>
|
|
||||||
protected override void OccSensor_GlsOccupancySensorChange(GlsOccupancySensorBase device, GlsOccupancySensorChangeEventArgs args)
|
|
||||||
{
|
|
||||||
switch (args.EventId)
|
|
||||||
{
|
|
||||||
case GlsOccupancySensorBase.AndWhenVacatedFeedbackEventId:
|
|
||||||
AndWhenVacatedFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.OrWhenVacatedFeedbackEventId:
|
|
||||||
OrWhenVacatedFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.UsAEnabledFeedbackEventId:
|
|
||||||
UltrasonicAEnabledFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.UsBEnabledFeedbackEventId:
|
|
||||||
UltrasonicBEnabledFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.UsSensitivityInOccupiedStateFeedbackEventId:
|
|
||||||
UltrasonicSensitivityInOccupiedStateFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.UsSensitivityInVacantStateFeedbackEventId:
|
|
||||||
UltrasonicSensitivityInVacantStateFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
base.OccSensor_GlsOccupancySensorChange(device, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Overrides the base class event delegate to fire feedbacks for event IDs that pertain to this extended class.
|
|
||||||
/// Then calls the base delegate method to ensure any common event IDs are captured.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="device"></param>
|
|
||||||
/// <param name="args"></param>
|
|
||||||
protected override void OccSensor_BaseEvent(Crestron.SimplSharpPro.GenericBase device, Crestron.SimplSharpPro.BaseEventArgs args)
|
|
||||||
{
|
|
||||||
switch (args.EventId)
|
|
||||||
{
|
|
||||||
case GlsOccupancySensorBase.RawOccupancyPirFeedbackEventId:
|
|
||||||
RawOccupancyPirFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.RawOccupancyUsFeedbackEventId:
|
|
||||||
RawOccupancyUsFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
base.OccSensor_BaseEvent(device, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the OrWhenVacated state
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="state"></param>
|
|
||||||
public void SetOrWhenVacatedState(bool state)
|
|
||||||
{
|
|
||||||
_occSensor.OrWhenVacated.BoolValue = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the AndWhenVacated state
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="state"></param>
|
|
||||||
public void SetAndWhenVacatedState(bool state)
|
|
||||||
{
|
|
||||||
_occSensor.AndWhenVacated.BoolValue = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Enables or disables the Ultrasonic A sensor
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="state"></param>
|
|
||||||
public void SetUsAEnable(bool state)
|
|
||||||
{
|
|
||||||
_occSensor.EnableUsA.BoolValue = state;
|
|
||||||
_occSensor.DisableUsA.BoolValue = !state;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Enables or disables the Ultrasonic B sensor
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="state"></param>
|
|
||||||
public void SetUsBEnable(bool state)
|
|
||||||
{
|
|
||||||
_occSensor.EnableUsB.BoolValue = state;
|
|
||||||
_occSensor.DisableUsB.BoolValue = !state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void IncrementUsSensitivityInOccupiedState(bool pressRelease)
|
|
||||||
{
|
|
||||||
_occSensor.IncrementUsSensitivityInOccupiedState.BoolValue = pressRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DecrementUsSensitivityInOccupiedState(bool pressRelease)
|
|
||||||
{
|
|
||||||
_occSensor.DecrementUsSensitivityInOccupiedState.BoolValue = pressRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void IncrementUsSensitivityInVacantState(bool pressRelease)
|
|
||||||
{
|
|
||||||
_occSensor.IncrementUsSensitivityInVacantState.BoolValue = pressRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DecrementUsSensitivityInVacantState(bool pressRelease)
|
|
||||||
{
|
|
||||||
_occSensor.DecrementUsSensitivityInVacantState.BoolValue = pressRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
|
||||||
{
|
|
||||||
LinkOccSensorToApi(this, trilist, joinStart, joinMapKey, bridge);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Method to print occ sensor settings to console.
|
|
||||||
/// </summary>
|
|
||||||
public override void GetSettings()
|
|
||||||
{
|
|
||||||
base.GetSettings();
|
|
||||||
|
|
||||||
Debug.Console(0, this, "Ultrasonic Enabled A: {0} | B: {1}",
|
|
||||||
_occSensor.UsAEnabledFeedback.BoolValue,
|
|
||||||
_occSensor.UsBEnabledFeedback.BoolValue);
|
|
||||||
|
|
||||||
Debug.Console(0, this, "Ultrasonic Sensitivity Occupied: {0} | Vacant: {1}",
|
|
||||||
_occSensor.UsSensitivityInOccupiedStateFeedback.UShortValue,
|
|
||||||
_occSensor.UsSensitivityInVacantStateFeedback.UShortValue);
|
|
||||||
|
|
||||||
var dash = new string('*', 50);
|
|
||||||
CrestronConsole.PrintLine(string.Format("{0}\n", dash));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public class GlsOdtOccupancySensorControllerFactory : EssentialsDeviceFactory<GlsOdtOccupancySensorController>
|
|
||||||
{
|
|
||||||
public GlsOdtOccupancySensorControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string> { "glsodtccn" };
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new GlsOccupancySensorBaseController Device");
|
|
||||||
|
|
||||||
return new GlsOdtOccupancySensorController(dc.Key, GetGlsOdtCCn, dc);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static GlsOdtCCn GetGlsOdtCCn(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var cresnetId = control.CresnetIdInt;
|
|
||||||
var branchId = control.ControlPortNumber;
|
|
||||||
var parentKey = String.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
|
||||||
|
|
||||||
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new GlsOdtCCn", parentKey);
|
|
||||||
return new GlsOdtCCn(cresnetId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
var cresnetBridge = DeviceManager.GetDeviceForKey(parentKey) as IHasCresnetBranches;
|
|
||||||
|
|
||||||
if (cresnetBridge != null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new GlsOdtCCn", parentKey);
|
|
||||||
return new GlsOdtCCn(cresnetId, cresnetBridge.CresnetBranches[branchId]);
|
|
||||||
}
|
|
||||||
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
public class GlsOirOccupancySensorController:GlsOccupancySensorBaseController
|
|
||||||
{
|
|
||||||
private GlsOirCCn _occSensor;
|
|
||||||
|
|
||||||
public GlsOirOccupancySensorController(string key, Func<DeviceConfig, GlsOirCCn> preActivationFunc,DeviceConfig config) : this(key,config.Name, preActivationFunc, config)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public GlsOirOccupancySensorController(string key, string name, Func<DeviceConfig, GlsOirCCn> preActivationFunc, DeviceConfig config) : base(key, name, config)
|
|
||||||
{
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
_occSensor = preActivationFunc(config);
|
|
||||||
|
|
||||||
RegisterCrestronGenericBase(_occSensor);
|
|
||||||
|
|
||||||
RegisterGlsOccupancySensorBaseController(_occSensor);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Overrides of CrestronGenericBridgeableBaseDevice
|
|
||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
|
||||||
{
|
|
||||||
LinkOccSensorToApi(this, trilist, joinStart, joinMapKey, bridge);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
|
|
||||||
public class GlsOccupancySensorBaseControllerFactory : EssentialsDeviceFactory<GlsOccupancySensorBaseController>
|
|
||||||
{
|
|
||||||
public GlsOccupancySensorBaseControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string> { "glsoirccn" };
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new GlsOirOccupancySensorController Device");
|
|
||||||
|
|
||||||
return new GlsOirOccupancySensorController(dc.Key, GetGlsOirCCn, dc);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static GlsOirCCn GetGlsOirCCn(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var cresnetId = control.CresnetIdInt;
|
|
||||||
var branchId = control.ControlPortNumber;
|
|
||||||
var parentKey = string.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
|
||||||
|
|
||||||
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new GlsOirCCn", parentKey);
|
|
||||||
return new GlsOirCCn(cresnetId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
var cresnetBridge = DeviceManager.GetDeviceForKey(parentKey) as IHasCresnetBranches;
|
|
||||||
|
|
||||||
if (cresnetBridge != null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new GlsOirCCn", parentKey);
|
|
||||||
return new GlsOirCCn(cresnetId, cresnetBridge.CresnetBranches[branchId]);
|
|
||||||
}
|
|
||||||
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Aggregates the RoomIsOccupied feedbacks of one or more IOccupancyStatusProvider objects
|
|
||||||
/// </summary>
|
|
||||||
public class IOccupancyStatusProviderAggregator : EssentialsDevice, IOccupancyStatusProvider
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Aggregated feedback of all linked IOccupancyStatusProvider devices
|
|
||||||
/// </summary>
|
|
||||||
public BoolFeedback RoomIsOccupiedFeedback
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _aggregatedOccupancyStatus.Output;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private readonly BoolFeedbackOr _aggregatedOccupancyStatus;
|
|
||||||
|
|
||||||
public IOccupancyStatusProviderAggregator(string key, string name)
|
|
||||||
: base(key, name)
|
|
||||||
{
|
|
||||||
_aggregatedOccupancyStatus = new BoolFeedbackOr();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IOccupancyStatusProviderAggregator(string key, string name, OccupancyAggregatorConfig config)
|
|
||||||
: this(key, name)
|
|
||||||
{
|
|
||||||
AddPostActivationAction(() =>
|
|
||||||
{
|
|
||||||
if (config.DeviceKeys.Count == 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var deviceKey in config.DeviceKeys)
|
|
||||||
{
|
|
||||||
var device = DeviceManager.GetDeviceForKey(deviceKey);
|
|
||||||
|
|
||||||
if (device == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, Debug.ErrorLogLevel.Notice,
|
|
||||||
"Unable to retrieve Occupancy provider with key {0}", deviceKey);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var provider = device as IOccupancyStatusProvider;
|
|
||||||
|
|
||||||
if (provider == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, Debug.ErrorLogLevel.Notice,
|
|
||||||
"Device with key {0} does NOT implement IOccupancyStatusProvider. Please check configuration.");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
AddOccupancyStatusProvider(provider);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds an IOccupancyStatusProvider device
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="statusProvider"></param>
|
|
||||||
public void AddOccupancyStatusProvider(IOccupancyStatusProvider statusProvider)
|
|
||||||
{
|
|
||||||
_aggregatedOccupancyStatus.AddOutputIn(statusProvider.RoomIsOccupiedFeedback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RemoveOccupancyStatusProvider(IOccupancyStatusProvider statusProvider)
|
|
||||||
{
|
|
||||||
_aggregatedOccupancyStatus.RemoveOutputIn(statusProvider.RoomIsOccupiedFeedback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ClearOccupancyStatusProviders()
|
|
||||||
{
|
|
||||||
_aggregatedOccupancyStatus.ClearOutputs();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class OccupancyAggregatorFactory : EssentialsDeviceFactory<IOccupancyStatusProviderAggregator>
|
|
||||||
{
|
|
||||||
public OccupancyAggregatorFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string> { "occupancyAggregator", "occAggregate" };
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new GlsOccupancySensorBaseController Device");
|
|
||||||
|
|
||||||
var config = dc.Properties.ToObject<OccupancyAggregatorConfig>();
|
|
||||||
|
|
||||||
return new IOccupancyStatusProviderAggregator(dc.Key, dc.Name, config);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
public class OccupancyAggregatorConfig
|
|
||||||
{
|
|
||||||
[JsonProperty("deviceKeys")] public List<string> DeviceKeys { get; set; }
|
|
||||||
|
|
||||||
public OccupancyAggregatorConfig()
|
|
||||||
{
|
|
||||||
DeviceKeys = new List<string>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,366 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
|
||||||
using PepperDash.Essentials.Core.Bridges.JoinMaps;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
using PepperDash_Essentials_Core.PartitionSensor;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
[Description("Wrapper class for GLS Cresnet Partition Sensor")]
|
|
||||||
public class GlsPartitionSensorController : CrestronGenericBridgeableBaseDevice, IPartitionStateProvider
|
|
||||||
{
|
|
||||||
|
|
||||||
public GlsPartitionSensorPropertiesConfig PropertiesConfig { get; private set; }
|
|
||||||
|
|
||||||
private GlsPartCn _partitionSensor;
|
|
||||||
|
|
||||||
public BoolFeedback EnableFeedback { get; private set; }
|
|
||||||
public BoolFeedback PartitionPresentFeedback { get; private set; }
|
|
||||||
public BoolFeedback PartitionNotSensedFeedback { get; private set; }
|
|
||||||
public IntFeedback SensitivityFeedback { get; private set; }
|
|
||||||
|
|
||||||
public bool InTestMode { get; private set; }
|
|
||||||
public bool TestEnableFeedback { get; private set; }
|
|
||||||
public bool TestPartitionSensedFeedback { get; private set; }
|
|
||||||
public int TestSensitivityFeedback { get; private set; }
|
|
||||||
|
|
||||||
|
|
||||||
public GlsPartitionSensorController(string key, Func<DeviceConfig, GlsPartCn> preActivationFunc, DeviceConfig config)
|
|
||||||
: base(key, config.Name)
|
|
||||||
{
|
|
||||||
|
|
||||||
var props = config.Properties.ToObject<GlsPartitionSensorPropertiesConfig>();
|
|
||||||
if (props != null)
|
|
||||||
{
|
|
||||||
PropertiesConfig = props;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "props are null. Unable to deserialize into GlsPartSensorPropertiesConfig");
|
|
||||||
}
|
|
||||||
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
_partitionSensor = preActivationFunc(config);
|
|
||||||
|
|
||||||
RegisterCrestronGenericBase(_partitionSensor);
|
|
||||||
|
|
||||||
EnableFeedback = new BoolFeedback(() => InTestMode ? TestEnableFeedback : _partitionSensor.EnableFeedback.BoolValue);
|
|
||||||
PartitionPresentFeedback = new BoolFeedback(() => InTestMode ? TestPartitionSensedFeedback : _partitionSensor.PartitionSensedFeedback.BoolValue);
|
|
||||||
PartitionNotSensedFeedback = new BoolFeedback(() => InTestMode ? !TestPartitionSensedFeedback : _partitionSensor.PartitionNotSensedFeedback.BoolValue);
|
|
||||||
SensitivityFeedback = new IntFeedback(() => InTestMode ? TestSensitivityFeedback : _partitionSensor.SensitivityFeedback.UShortValue);
|
|
||||||
|
|
||||||
if (_partitionSensor != null)
|
|
||||||
{
|
|
||||||
_partitionSensor.BaseEvent += PartitionSensor_BaseEvent;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
AddPostActivationAction(() =>
|
|
||||||
{
|
|
||||||
_partitionSensor.OnlineStatusChange += (o, a) =>
|
|
||||||
{
|
|
||||||
if (a.DeviceOnLine)
|
|
||||||
{
|
|
||||||
ApplySettingsToSensorFromConfig();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_partitionSensor.IsOnline)
|
|
||||||
{
|
|
||||||
ApplySettingsToSensorFromConfig();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ApplySettingsToSensorFromConfig()
|
|
||||||
{
|
|
||||||
if (_partitionSensor.IsOnline == false) return;
|
|
||||||
|
|
||||||
// Default to enable
|
|
||||||
_partitionSensor.Enable.BoolValue = true;
|
|
||||||
|
|
||||||
Debug.Console(1, this, "Attempting to apply settings to sensor from config");
|
|
||||||
|
|
||||||
if (PropertiesConfig.Sensitivity != null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Sensitivity found, attempting to set value '{0}' from config",
|
|
||||||
PropertiesConfig.Sensitivity);
|
|
||||||
_partitionSensor.Sensitivity.UShortValue = (ushort)PropertiesConfig.Sensitivity;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Sensitivity null, no value specified in config");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertiesConfig.Enable != null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Enable found, attempting to set value '{0}' from config",
|
|
||||||
PropertiesConfig.Enable);
|
|
||||||
_partitionSensor.Enable.BoolValue = (bool)PropertiesConfig.Enable;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Enable null, no value specified in config");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void PartitionSensor_BaseEvent(GenericBase device, BaseEventArgs args)
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "EventId: {0}, Index: {1}", args.EventId, args.Index);
|
|
||||||
|
|
||||||
switch (args.EventId)
|
|
||||||
{
|
|
||||||
case (GlsPartCn.EnableFeedbackEventId):
|
|
||||||
{
|
|
||||||
EnableFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case (GlsPartCn.PartitionSensedFeedbackEventId):
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Partition Sensed State: {0}", _partitionSensor.PartitionSensedFeedback.BoolValue);
|
|
||||||
PartitionPresentFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case (GlsPartCn.PartitionNotSensedFeedbackEventId):
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Partition Not Sensed State: {0}", _partitionSensor.PartitionNotSensedFeedback.BoolValue);
|
|
||||||
PartitionNotSensedFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case (GlsPartCn.SensitivityFeedbackEventId):
|
|
||||||
{
|
|
||||||
SensitivityFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "Unhandled args.EventId: {0}", args.EventId);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetTestMode(bool mode)
|
|
||||||
{
|
|
||||||
InTestMode = mode;
|
|
||||||
Debug.Console(1, this, "InTestMode: {0}", InTestMode.ToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetTestEnableState(bool state)
|
|
||||||
{
|
|
||||||
if (InTestMode)
|
|
||||||
{
|
|
||||||
TestEnableFeedback = state;
|
|
||||||
|
|
||||||
EnableFeedback.FireUpdate();
|
|
||||||
|
|
||||||
Debug.Console(1, this, "TestEnableFeedback: {0}", TestEnableFeedback.ToString());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(1, this, "InTestMode: {0}, unable to set enable state: {1}", InTestMode.ToString(), state.ToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetTestPartitionSensedState(bool state)
|
|
||||||
{
|
|
||||||
if (InTestMode)
|
|
||||||
{
|
|
||||||
TestPartitionSensedFeedback = state;
|
|
||||||
|
|
||||||
PartitionPresentFeedback.FireUpdate();
|
|
||||||
PartitionNotSensedFeedback.FireUpdate();
|
|
||||||
|
|
||||||
Debug.Console(1, this, "TestPartitionSensedFeedback: {0}", TestPartitionSensedFeedback.ToString());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(1, this, "InTestMode: {0}, unable to set partition state: {1}", InTestMode.ToString(), state.ToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetTestSensitivityValue(int value)
|
|
||||||
{
|
|
||||||
if (InTestMode)
|
|
||||||
{
|
|
||||||
TestSensitivityFeedback = value;
|
|
||||||
|
|
||||||
SensitivityFeedback.FireUpdate();
|
|
||||||
Debug.Console(1, this, "TestSensitivityFeedback: {0}", TestSensitivityFeedback);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(1, this, "InTestMode: {0}, unable to set sensitivity value: {1}", InTestMode.ToString(), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void GetSettings()
|
|
||||||
{
|
|
||||||
var dash = new string('*', 50);
|
|
||||||
CrestronConsole.PrintLine(string.Format("{0}\n", dash));
|
|
||||||
|
|
||||||
Debug.Console(0, this, "Enabled State: {0}", _partitionSensor.EnableFeedback.BoolValue);
|
|
||||||
|
|
||||||
Debug.Console(0, this, "Partition Sensed State: {0}", _partitionSensor.PartitionSensedFeedback.BoolValue);
|
|
||||||
Debug.Console(0, this, "Partition Not Sensed State: {0}", _partitionSensor.PartitionNotSensedFeedback.BoolValue);
|
|
||||||
|
|
||||||
Debug.Console(0, this, "Sensitivity Value: {0}", _partitionSensor.SensitivityFeedback.UShortValue);
|
|
||||||
|
|
||||||
CrestronConsole.PrintLine(string.Format("{0}\n", dash));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetEnableState(bool state)
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "Sensor is {0}, SetEnableState: {1}", _partitionSensor == null ? "null" : "not null", state);
|
|
||||||
if (_partitionSensor == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_partitionSensor.Enable.BoolValue = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void IncreaseSensitivity()
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "Sensor is {0}, IncreaseSensitivity", _partitionSensor == null ? "null" : "not null");
|
|
||||||
if (_partitionSensor == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_partitionSensor.IncreaseSensitivity();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DecreaseSensitivity()
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "Sensor is {0}, DecreaseSensitivity", _partitionSensor == null ? "null" : "not null");
|
|
||||||
if (_partitionSensor == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_partitionSensor.DecreaseSensitivity();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetSensitivity(ushort value)
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "Sensor is {0}, SetSensitivity: {1}", _partitionSensor == null ? "null" : "not null", value);
|
|
||||||
if (_partitionSensor == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_partitionSensor.Sensitivity.UShortValue = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
|
||||||
{
|
|
||||||
var joinMap = new GlsPartitionSensorJoinMap(joinStart);
|
|
||||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
|
||||||
joinMap = JsonConvert.DeserializeObject<GlsPartitionSensorJoinMap>(joinMapSerialized);
|
|
||||||
|
|
||||||
if (bridge != null)
|
|
||||||
{
|
|
||||||
bridge.AddJoinMap(Key, joinMap);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Please update config to use 'type': 'EiscApiAdvanced' to get all join map features for this device");
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
|
||||||
Debug.Console(0, this, "Linking to Bridge Type {0}", GetType().Name);
|
|
||||||
|
|
||||||
IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
|
|
||||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = _partitionSensor.Name;
|
|
||||||
|
|
||||||
trilist.SetBoolSigAction(joinMap.Enable.JoinNumber, SetEnableState);
|
|
||||||
EnableFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Enable.JoinNumber]);
|
|
||||||
|
|
||||||
PartitionPresentFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PartitionSensed.JoinNumber]);
|
|
||||||
PartitionNotSensedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PartitionNotSensed.JoinNumber]);
|
|
||||||
|
|
||||||
trilist.SetSigTrueAction(joinMap.IncreaseSensitivity.JoinNumber, IncreaseSensitivity);
|
|
||||||
trilist.SetSigTrueAction(joinMap.DecreaseSensitivity.JoinNumber, DecreaseSensitivity);
|
|
||||||
|
|
||||||
SensitivityFeedback.LinkInputSig(trilist.UShortInput[joinMap.Sensitivity.JoinNumber]);
|
|
||||||
trilist.SetUShortSigAction(joinMap.Sensitivity.JoinNumber, SetSensitivity);
|
|
||||||
|
|
||||||
FeedbacksFireUpdates();
|
|
||||||
|
|
||||||
// update when device is online
|
|
||||||
_partitionSensor.OnlineStatusChange += (o, a) =>
|
|
||||||
{
|
|
||||||
if (a.DeviceOnLine)
|
|
||||||
{
|
|
||||||
FeedbacksFireUpdates();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// update when trilist is online
|
|
||||||
trilist.OnlineStatusChange += (o, a) =>
|
|
||||||
{
|
|
||||||
if (a.DeviceOnLine)
|
|
||||||
{
|
|
||||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = _partitionSensor.Name;
|
|
||||||
FeedbacksFireUpdates();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private void FeedbacksFireUpdates()
|
|
||||||
{
|
|
||||||
IsOnline.FireUpdate();
|
|
||||||
EnableFeedback.FireUpdate();
|
|
||||||
PartitionPresentFeedback.FireUpdate();
|
|
||||||
PartitionNotSensedFeedback.FireUpdate();
|
|
||||||
SensitivityFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
#region PreActivation
|
|
||||||
|
|
||||||
private static GlsPartCn GetGlsPartCnDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var cresnetId = control.CresnetIdInt;
|
|
||||||
var branchId = control.ControlPortNumber;
|
|
||||||
var parentKey = string.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
|
||||||
|
|
||||||
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new GlsPartCn", parentKey);
|
|
||||||
return new GlsPartCn(cresnetId, Global.ControlSystem);
|
|
||||||
}
|
|
||||||
var cresnetBridge = DeviceManager.GetDeviceForKey(parentKey) as IHasCresnetBranches;
|
|
||||||
|
|
||||||
if (cresnetBridge != null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new GlsPartCn", parentKey);
|
|
||||||
return new GlsPartCn(cresnetId, cresnetBridge.CresnetBranches[branchId]);
|
|
||||||
}
|
|
||||||
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
public class GlsPartitionSensorControllerFactory : EssentialsDeviceFactory<GlsPartitionSensorController>
|
|
||||||
{
|
|
||||||
public GlsPartitionSensorControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string> { "glspartcn" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new GlsPartitionSensorController Device");
|
|
||||||
|
|
||||||
return new GlsPartitionSensorController(dc.Key, GetGlsPartCnDevice, dc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.PartitionSensor
|
|
||||||
{
|
|
||||||
public class GlsPartitionSensorPropertiesConfig
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the sensor sensitivity
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// The sensitivity range shall be between 1(lowest) to 10 (highest).
|
|
||||||
/// </remarks>
|
|
||||||
[JsonProperty("sensitivity")]
|
|
||||||
public ushort? Sensitivity { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("enable")]
|
|
||||||
public bool? Enable { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -35,6 +35,5 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Crestron\CrestronGenericBaseDevice.cs.orig" />
|
<None Include="Crestron\CrestronGenericBaseDevice.cs.orig" />
|
||||||
<None Include="Occupancy\EssentialsGlsOccupancySensorBaseController.cs.orig" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,47 +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 PepperDash.Core;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
public static class ButtonExtensions
|
|
||||||
{
|
|
||||||
public static Button SetButtonAction(this Button button, Action<bool> a)
|
|
||||||
{
|
|
||||||
button.UserObject = a;
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Button SetButtonAction(this CrestronCollection<Button> bc, uint sigNum, Action<bool> a)
|
|
||||||
{
|
|
||||||
return bc[sigNum].SetButtonAction(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool GetBool(this CrestronCollection<Button> bc, uint sigNum)
|
|
||||||
{
|
|
||||||
return bc[sigNum].State == eButtonState.Pressed ? true : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Button SetButtonPressedAction(this CrestronCollection<Button> bc, uint sigNum, Action a)
|
|
||||||
{
|
|
||||||
return bc[sigNum].SetButtonAction(b => { if (b) a(); });
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Button SetButtonReleasedAction(this CrestronCollection<Button> bc, uint sigNum, Action a)
|
|
||||||
{
|
|
||||||
return bc[sigNum].SetButtonAction(b => { if (!b) a(); });
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Button SetButtonFalseAction(this Button button, Action a)
|
|
||||||
{
|
|
||||||
return button.SetButtonAction(b => { if (!b) a(); });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
using Full.Newtonsoft.Json.Converters;
|
|
||||||
using PepperDash.Core;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
public class CrestronRemotePropertiesConfig
|
|
||||||
{
|
|
||||||
[JsonProperty("control")]
|
|
||||||
public EssentialsControlPropertiesConfig Control { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("gatewayDeviceKey")]
|
|
||||||
public string GatewayDeviceKey { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,827 +0,0 @@
|
|||||||
extern alias Full;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.Gateways;
|
|
||||||
using Crestron.SimplSharpPro.Remotes;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
using Crestron.SimplSharp.Reflection;
|
|
||||||
using Full.Newtonsoft.Json;
|
|
||||||
|
|
||||||
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
[Description("Wrapper class for all HR-Series remotes")]
|
|
||||||
public class Hrxx0WirelessRemoteController : EssentialsBridgeableDevice, IHasFeedback, IHR52Button
|
|
||||||
{
|
|
||||||
private CenRfgwController _gateway;
|
|
||||||
|
|
||||||
private GatewayBase _gatewayBase;
|
|
||||||
|
|
||||||
private Hr1x0WirelessRemoteBase _remote;
|
|
||||||
|
|
||||||
public FeedbackCollection<Feedback> Feedbacks { get; set; }
|
|
||||||
|
|
||||||
public CrestronCollection<Button> Buttons { get { return _remote.Button; } }
|
|
||||||
|
|
||||||
private DeviceConfig _config;
|
|
||||||
|
|
||||||
public Hrxx0WirelessRemoteController(string key, Func<DeviceConfig, Hr1x0WirelessRemoteBase> preActivationFunc,
|
|
||||||
DeviceConfig config)
|
|
||||||
: base(key, config.Name)
|
|
||||||
{
|
|
||||||
Feedbacks = new FeedbackCollection<Feedback>();
|
|
||||||
|
|
||||||
var props = JsonConvert.DeserializeObject<CrestronRemotePropertiesConfig>(config.Properties.ToString());
|
|
||||||
|
|
||||||
_config = config;
|
|
||||||
|
|
||||||
if (props.GatewayDeviceKey == "processor")
|
|
||||||
{
|
|
||||||
{
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
_remote = preActivationFunc(config);
|
|
||||||
RegisterEvents();
|
|
||||||
});
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var gatewayDev = DeviceManager.GetDeviceForKey(props.GatewayDeviceKey) as CenRfgwController;
|
|
||||||
if (gatewayDev == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetHr1x0WirelessRemote: Device '{0}' is not a valid device", props.GatewayDeviceKey);
|
|
||||||
}
|
|
||||||
if (gatewayDev != null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetHr1x0WirelessRemote: Device '{0}' is a valid device", props.GatewayDeviceKey);
|
|
||||||
_gateway = gatewayDev;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (_gateway == null) return;
|
|
||||||
|
|
||||||
_gateway.IsReadyEvent += _gateway_IsReadyEvent;
|
|
||||||
if (_gateway.IsReady)
|
|
||||||
{
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
_remote = preActivationFunc(config);
|
|
||||||
|
|
||||||
RegisterEvents();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _gateway_IsReadyEvent(object sender, IsReadyEventArgs e)
|
|
||||||
{
|
|
||||||
if (e.IsReady != true) return;
|
|
||||||
_remote = GetHr1x0WirelessRemote(_config);
|
|
||||||
|
|
||||||
RegisterEvents();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _remote_BaseEvent(GenericBase device, BaseEventArgs args)
|
|
||||||
{
|
|
||||||
if(args.EventId == Hr1x0EventIds.BatteryCriticalFeedbackEventId)
|
|
||||||
Feedbacks["BatteryCritical"].FireUpdate();
|
|
||||||
if(args.EventId == Hr1x0EventIds.BatteryLowFeedbackEventId)
|
|
||||||
Feedbacks["BatteryLow"].FireUpdate();
|
|
||||||
if(args.EventId == Hr1x0EventIds.BatteryVoltageFeedbackEventId)
|
|
||||||
Feedbacks["BatteryVoltage"].FireUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RegisterEvents()
|
|
||||||
{
|
|
||||||
_remote.ButtonStateChange += _remote_ButtonStateChange;
|
|
||||||
|
|
||||||
Feedbacks.Add(new BoolFeedback("BatteryCritical", () => _remote.BatteryCriticalFeedback.BoolValue));
|
|
||||||
Feedbacks.Add(new BoolFeedback("BatteryLow", () => _remote.BatteryLowFeedback.BoolValue));
|
|
||||||
Feedbacks.Add(new IntFeedback("BatteryVoltage", () => _remote.BatteryVoltageFeedback.UShortValue));
|
|
||||||
|
|
||||||
_remote.BaseEvent += _remote_BaseEvent;
|
|
||||||
}
|
|
||||||
|
|
||||||
void _remote_ButtonStateChange(GenericBase device, ButtonEventArgs args)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var handler = args.Button.UserObject;
|
|
||||||
|
|
||||||
if (handler == null) return;
|
|
||||||
|
|
||||||
Debug.Console(1, this, "Executing Action: {0}", handler.ToString());
|
|
||||||
|
|
||||||
if (handler is Action<bool>)
|
|
||||||
{
|
|
||||||
(handler as Action<bool>)(args.Button.State == eButtonState.Pressed ? true : false);
|
|
||||||
}
|
|
||||||
|
|
||||||
var newHandler = ButtonStateChange;
|
|
||||||
if (ButtonStateChange != null)
|
|
||||||
{
|
|
||||||
newHandler(device, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
var newerHandler = EssentialsButtonStateChange;
|
|
||||||
if (EssentialsButtonStateChange != null)
|
|
||||||
{
|
|
||||||
newerHandler(this, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "Error in ButtonStateChange handler: {0}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#region Preactivation
|
|
||||||
|
|
||||||
private static Hr1x0WirelessRemoteBase GetHr1x0WirelessRemote(DeviceConfig config)
|
|
||||||
{
|
|
||||||
var props = JsonConvert.DeserializeObject<CrestronRemotePropertiesConfig>(config.Properties.ToString());
|
|
||||||
|
|
||||||
var type = config.Type;
|
|
||||||
var rfId = (uint)props.Control.InfinetIdInt;
|
|
||||||
|
|
||||||
GatewayBase gateway;
|
|
||||||
|
|
||||||
if (props.GatewayDeviceKey == "processor")
|
|
||||||
{
|
|
||||||
gateway = Global.ControlSystem.ControllerRFGatewayDevice;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var gatewayDev = DeviceManager.GetDeviceForKey(props.GatewayDeviceKey) as CenRfgwController;
|
|
||||||
if (gatewayDev == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetHr1x0WirelessRemote: Device '{0}' is not a valid device", props.GatewayDeviceKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
Debug.Console(0, "GetHr1x0WirelessRemote: Device '{0}' is a valid device", props.GatewayDeviceKey);
|
|
||||||
gateway = gatewayDev.GateWay;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gateway == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetHr1x0WirelessRemote: Device '{0}' is not a valid gateway", props.GatewayDeviceKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Hr1x0WirelessRemoteBase remoteBase;
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case ("hr100"):
|
|
||||||
remoteBase = new Hr100(rfId, gateway);
|
|
||||||
break;
|
|
||||||
case ("hr150"):
|
|
||||||
remoteBase = new Hr150(rfId, gateway);
|
|
||||||
break;
|
|
||||||
case ("hr310"):
|
|
||||||
remoteBase = new Hr310(rfId, gateway);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// register the device when using an internal RF gateway
|
|
||||||
if (props.GatewayDeviceKey == "processor")
|
|
||||||
{
|
|
||||||
remoteBase.RegisterWithLogging(config.Key);
|
|
||||||
}
|
|
||||||
|
|
||||||
return remoteBase;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Factory
|
|
||||||
public class Hrxx0WirelessRemoteControllerFactory : EssentialsDeviceFactory<Hrxx0WirelessRemoteController>
|
|
||||||
{
|
|
||||||
public Hrxx0WirelessRemoteControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "hr100", "hr150", "hr310" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new HR-x00 Remote Device");
|
|
||||||
|
|
||||||
return new Hrxx0WirelessRemoteController(dc.Key, GetHr1x0WirelessRemote, dc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
|
||||||
{
|
|
||||||
var joinMap = new Hrxxx0WirelessRemoteControllerJoinMap(joinStart);
|
|
||||||
|
|
||||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
|
||||||
joinMap = JsonConvert.DeserializeObject<Hrxxx0WirelessRemoteControllerJoinMap>(joinMapSerialized);
|
|
||||||
|
|
||||||
if (bridge != null)
|
|
||||||
{
|
|
||||||
bridge.AddJoinMap(Key, joinMap);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
|
||||||
}
|
|
||||||
|
|
||||||
//List<string> ExcludedKeys = new List<string>();
|
|
||||||
foreach (var feedback in Feedbacks)
|
|
||||||
{
|
|
||||||
var myFeedback = feedback;
|
|
||||||
|
|
||||||
var joinData =
|
|
||||||
joinMap.Joins.FirstOrDefault(
|
|
||||||
x =>
|
|
||||||
x.Key.Equals(myFeedback.Key, StringComparison.InvariantCultureIgnoreCase));
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty((joinData.Key))) continue;
|
|
||||||
|
|
||||||
var name = joinData.Key;
|
|
||||||
var join = joinData.Value;
|
|
||||||
|
|
||||||
if (join.Metadata.JoinType == eJoinType.Digital)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Linking Bool Feedback '{0}' to join {1}", name, join.JoinNumber);
|
|
||||||
var someFeedback = myFeedback as BoolFeedback;
|
|
||||||
if(someFeedback == null) continue;
|
|
||||||
someFeedback.LinkInputSig(trilist.BooleanInput[join.JoinNumber]);
|
|
||||||
}
|
|
||||||
if (join.Metadata.JoinType == eJoinType.Analog)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Linking Analog Feedback '{0}' to join {1}", name, join.JoinNumber);
|
|
||||||
var someFeedback = myFeedback as IntFeedback;
|
|
||||||
if (someFeedback == null) continue;
|
|
||||||
someFeedback.LinkInputSig(trilist.UShortInput[join.JoinNumber]);
|
|
||||||
}
|
|
||||||
if (join.Metadata.JoinType == eJoinType.Serial)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Linking Serial Feedback '{0}' to join {1}", name, join.JoinNumber);
|
|
||||||
var someFeedback = myFeedback as StringFeedback;
|
|
||||||
if (someFeedback == null) continue;
|
|
||||||
someFeedback.LinkInputSig(trilist.StringInput[join.JoinNumber]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//var newJoinKeys = joinMap.Joins.Keys.Except(ExcludedKeys).ToList();
|
|
||||||
|
|
||||||
//var newJoinMap = newJoinKeys.Where(k => joinMap.Joins.ContainsKey(k)).Select(k => joinMap.Joins[k]);
|
|
||||||
|
|
||||||
|
|
||||||
Debug.Console(2, this, "There are {0} remote buttons", _remote.Button.Count);
|
|
||||||
for (uint i = 1; i <= _remote.Button.Count; i++)
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "Attempting to link join index {0}", i);
|
|
||||||
var index = i;
|
|
||||||
var joinData =
|
|
||||||
joinMap.Joins.FirstOrDefault(
|
|
||||||
o =>
|
|
||||||
o.Key.Equals(_remote.Button[index].Name.ToString(),
|
|
||||||
StringComparison.InvariantCultureIgnoreCase));
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty((joinData.Key))) continue;
|
|
||||||
|
|
||||||
var join = joinData.Value;
|
|
||||||
var name = joinData.Key;
|
|
||||||
|
|
||||||
Debug.Console(2, this, "Setting User Object for '{0}'", name);
|
|
||||||
if (join.Metadata.JoinType == eJoinType.Digital)
|
|
||||||
{
|
|
||||||
_remote.Button[i].SetButtonAction((b) => trilist.BooleanInput[join.JoinNumber].BoolValue = b);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
trilist.OnlineStatusChange += (d, args) =>
|
|
||||||
{
|
|
||||||
if (!args.DeviceOnLine) return;
|
|
||||||
|
|
||||||
foreach (var feedback in Feedbacks)
|
|
||||||
{
|
|
||||||
feedback.FireUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
public void SetTrilistBool(BasicTriList trilist, uint join, bool b)
|
|
||||||
{
|
|
||||||
trilist.BooleanInput[join].BoolValue = b;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region IHR52Button Members
|
|
||||||
|
|
||||||
public Button Custom9
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR52Button) _remote;
|
|
||||||
return localRemote == null ? null : localRemote.Custom9;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Favorite
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR52Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Favorite;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Button Home
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR52Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Home;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region IHR49Button Members
|
|
||||||
|
|
||||||
public Button Clear
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Clear;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Custom5
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Custom5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Custom6
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Custom6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Custom7
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Custom7;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Custom8
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Custom8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Enter
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Enter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Keypad0
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Keypad0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Keypad1
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Keypad1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Keypad2Abc
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Keypad2Abc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Keypad3Def
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Keypad3Def;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Keypad4Ghi
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Keypad4Ghi;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Keypad5Jkl
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Keypad5Jkl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Keypad6Mno
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Keypad6Mno;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Keypad7Pqrs
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Keypad7Pqrs;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Keypad8Tuv
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Keypad8Tuv;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Keypad9Wxyz
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR49Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Keypad9Wxyz;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region IHR33Button Members
|
|
||||||
|
|
||||||
public Button Blue
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Blue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button ChannelDown
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.ChannelDown;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button ChannelUp
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.ChannelUp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Custom1
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Custom1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Custom2
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Custom2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Custom3
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Custom3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Custom4
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Custom4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button DialPadDown
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.DialPadDown;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button DialPadEnter
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.DialPadEnter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button DialPadLeft
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.DialPadLeft;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button DialPadRight
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.DialPadRight;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button DialPadUp
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.DialPadUp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Dvr
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Dvr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Exit
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Exit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button FastForward
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.FastForward;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Green
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Green;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Guide
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Blue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Information
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Information;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Last
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Last;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Menu
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Menu;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Mute
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Mute;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button NextTrack
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.NextTrack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Pause
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Pause;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Play
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Play;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Power
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Power;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button PreviousTrack
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.PreviousTrack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Record
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Record;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Red
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Red;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Rewind
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Rewind;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Stop
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Stop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button VolumeDown
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.VolumeDown;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button VolumeUp
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.VolumeUp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Button Yellow
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var localRemote = (IHR33Button)_remote;
|
|
||||||
return localRemote == null ? null : localRemote.Yellow;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region IButton Members
|
|
||||||
|
|
||||||
public CrestronCollection<Button> Button
|
|
||||||
{
|
|
||||||
get { return Buttons; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public event ButtonEventHandler ButtonStateChange;
|
|
||||||
|
|
||||||
public delegate void EssentialsButtonEventHandler(EssentialsDevice device, ButtonEventArgs args);
|
|
||||||
|
|
||||||
public event EssentialsButtonEventHandler EssentialsButtonStateChange;
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user