diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json new file mode 100644 index 000000000..79512ebe4 --- /dev/null +++ b/.config/dotnet-tools.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "csharpier": { + "version": "1.2.4", + "commands": [ + "csharpier" + ], + "rollForward": false + } + } +} \ No newline at end of file diff --git a/docs/docfx.json b/docs/docfx.json index 3525cdf24..b3e5487b4 100644 --- a/docs/docfx.json +++ b/docs/docfx.json @@ -52,6 +52,7 @@ "_appLogoPath": "docs/images/favicon-32x32.png", "_appFaviconPath": "docs/images/favicon.ico", "_disableToc": false, + "_enableNewTab": true, "pdf": false } } diff --git a/docs/docs/Get-started.md b/docs/docs/Get-started.md index 73aacb22c..4ca003bf1 100644 --- a/docs/docs/Get-started.md +++ b/docs/docs/Get-started.md @@ -4,23 +4,44 @@ [YouTube Video - Getting Started with PepperDash Essentials](https://youtu.be/FxEZtbpCwiQ) *** -## Download or clone +## Get a CPZ -You may clone Essentials at +### Prerequisites + +* [VS Code](https://code.visualstudio.com/) +* [.NET 9 SDK](https://dotnet.microsoft.com/en-us/download) +* [Git](https://git-scm.com/) + +> Note: Essentials 2.x.x uses .NET Framework 4.7.2 currently. The .NET 9 SDK will build the project with the appropriate references + +### Build From Source + +1. Clone the repo: `git clone https://github.com/PepperDash/Essentials.git` +2. Open the folder in VS Code +3. Build using the dotnet CLI: `dotnet build` + +### Download the latest release + +The latest release can be found on [Github](https://github.com/PepperDash/Essentials/releases/latest) ## How to Get Started -This section assumes knowledge of loading programs to and working with the file system on a Crestron processor. +2. Using an SFTP client or Crestron Toolbox, load the downloaded (or built) cpz to the processor in program slot 1 + 1. If using SFTP, connect via SSH and start the program by sending console command `progload -p:1` +3. On first boot, the Essentials Application will build the necessary configuration folder structure in the user/program1/ path. +4. The application has some example configuration files included. Copy `/Program01/Example Configuration/EssentialsSpaceHuddleRoom/configurationFile-HuddleSpace-2-Source.json` to the `/User/Program1/` folder. +6. Reset the program via console `progreset -p:1`. The program will load the example configuration file. + +Once Essentials is running with a valid configuration, the following console commands can be used to see what's going on: -1. Using an SFTP client, load `PepperDashEssentials1.4.32.cpz` to the processor in program slot 1 and start the program by sending console command `progload -p:1` -1. On first boot, the Essentials Application will build the necessary configuration folder structure in the User/Program1/ path. -1. The application has some example configuration files included. Copy `/Program01/Example Configuration/EssentialsSpaceHuddleRoom/configurationFile-HuddleSpace-2-Source.json` to the `/User/Program1/` folder. -1. Copy the SGD files from `/Program01/SGD` to `/User/Program1/sgd` -1. Reset the program via console `progreset -p:1`. The program will load the example configuration file. -1. Via console, you can run the `devlist:1` command to get some insight into what has been loaded from the configuration file into the system . This will print the basic device information in the form of ["key"] "Name". The "key" value is what we can use to interact with each device uniquely. -1. Run the command `devprops:1 display-1`. This will print the real-time property values of the device with key "display-1". -1. Run the command `devmethods:1 display-1`. This will print the public methods available for the device with key "display-1". -1. Run the command `devjson:1 {"deviceKey":"display-1","methodName":"PowerOn", "params": []}`. This will call the method PowerOn() on the device with key "display-1". -1. Run the provided example XPanel SmartGraphics project and connect to your processor at the appropriate IPID. +* ```devlist:1``` + * Print the list of devices in [{key}] {name} format + * The key of a device can be used with the rest of the commands to get more information +* `devprops:1 {deviceKey}` + * Print the real-time property values of the device with key "display-1". +* `devmethods:1 display-1` + * Print the public methods available for the device with key "display-1". +* `devjson:1 {"deviceKey":"display-1","methodName":"PowerOn", "params": []}` + * Call the method `PowerOn()` on the device with key "display-1". -Next: [Standalone use](~/docs/Standalone-Use.md) +Next: [Standalone use](~/docs/usage/Standalone-Use.md) diff --git a/docs/docs/Home.md b/docs/docs/Home.md index 926bde87f..8e0c163ed 100644 --- a/docs/docs/Home.md +++ b/docs/docs/Home.md @@ -39,7 +39,7 @@ Thanks! ## Collaboration -Essentials is an open-source project and we encourage collaboration on this community project. For features that may not be useful to the greater community, or for just-plain learning, we want to remind developers to try writing plugins for Essentials. More information can be found here: [Plugins](~/docs/Plugins.md) +Essentials is an open-source project and we encourage collaboration on this community project. For features that may not be useful to the greater community, or for just-plain learning, we want to remind developers to try writing plugins for Essentials. More information can be found here: [Plugins](~/docs/technical-docs/Plugins.md) ### Open-source-collaborative workflow diff --git a/docs/docs/Plugins-Deprecated.md b/docs/docs/Plugins-Deprecated.md index 7f98f7da2..c9cb9541d 100644 --- a/docs/docs/Plugins-Deprecated.md +++ b/docs/docs/Plugins-Deprecated.md @@ -1,6 +1,6 @@ # Deprecated -**Note : this entry is out of date - please see [Plugins](~/docs/Plugins.md)** +**Note : this entry is out of date - please see [Plugins](~/docs/technical-docs/Plugins.md)** ## What are Essentials Plugins? diff --git a/docs/docs/SIMPL-Bridging-Deprecated.md b/docs/docs/SIMPL-Bridging-Deprecated.md index e2dfa0c24..ccda7aa6c 100644 --- a/docs/docs/SIMPL-Bridging-Deprecated.md +++ b/docs/docs/SIMPL-Bridging-Deprecated.md @@ -358,7 +358,7 @@ Example device config: The `DeviceManager` is nothing more than a modified collection of things, and technically those things don't have to be Devices, but must at least implement the `IKeyed` (`PepperDash.Core.IKeyed`) interface (simply so items can be looked up by their key.) Items in the `DeviceManager` that are Devices are run through additional steps of [activation](~/docs/Arch-activate.md#2-pre-activation) at startup. This collection of devices is all interrelated by their string keys. +> The `DeviceManager` is nothing more than a modified collection of things, and technically those things don't have to be Devices, but must at least implement the `IKeyed` (`PepperDash.Core.IKeyed`) interface (simply so items can be looked up by their key.) Items in the `DeviceManager` that are Devices are run through additional steps of [activation](~/docs/technical-docs/Arch-activate.md#2-pre-activation) at startup. This collection of devices is all interrelated by their string keys. In this flat design, we spin up devices, and then introduce them to their "coworkers and bosses" - the other devices and logical units that they will interact with - and get them all operating together to form a running unit. For example: A room configuration will contain a "VideoCodecKey" property and a "DefaultDisplayKey" property. The `DeviceManager` provides the room with the codec or displays having the appropriate keys. What the room does with those is dependent on its coding. @@ -38,4 +38,4 @@ This flat structure ensures that every device in a system exists in one place an ![Architecture overview](~/docs/images/arch-overview.png) -Next: [Configurable lifecycle](~/docs/Arch-lifecycle.md) +Next: [Configurable lifecycle](~/docs/technical-docs/Arch-lifecycle.md) diff --git a/docs/docs/Arch-activate.md b/docs/docs/technical-docs/Arch-activate.md similarity index 95% rename from docs/docs/Arch-activate.md rename to docs/docs/technical-docs/Arch-activate.md index dec6806bf..72a9e3eb9 100644 --- a/docs/docs/Arch-activate.md +++ b/docs/docs/technical-docs/Arch-activate.md @@ -105,7 +105,7 @@ Each of the three activation phases operates in a try/catch block for each devic In any real-world system, devices and business logic need to talk to each other, otherwise, what's the point of all this coding? When creating your classes and configuration, it is best practice to _try_ not to "plug" one device into another during construction or activation. For example your touchpanel controller class has a `Display1` property that holds the display-1 object. Rather, it may be better to refer to the device as it is stored in the `DeviceManager` when it's needed using the static `DeviceManager.GetDeviceForKey(key)` method to get a reference to the device, which can be cast using various interfaces/class types, and then interacted with. This prevents objects from being referenced in places where the developer may later forget to dereference them, causing memory leak. This will become more important as Essentials becomes more able to be reconfigured at runtime. -As an example, [connection-based routing](~/docs/Connection-based-routing.md#essentials-connection-based-routing) uses these methods. When a route is requested, the collection of tielines and devices is searched for the devices and paths necessary to complete a route, but there are no devices or tie lines that are object-referenced in running code. It can all be torn down and reconfigured without any memory-management dereferencing, setting things to null. +As an example, [connection-based routing](~/docs/technical-docs/Connection-based-routing.md#essentials-connection-based-routing) uses these methods. When a route is requested, the collection of tielines and devices is searched for the devices and paths necessary to complete a route, but there are no devices or tie lines that are object-referenced in running code. It can all be torn down and reconfigured without any memory-management dereferencing, setting things to null. ## Device Initialization @@ -155,4 +155,4 @@ Robust C#-based system code should not depend on "order" or "time" to get runnin When designing new Device-based classes, be it rooms, devices, port controllers, bridges, make them as independent as possible. They could exist alone in a program with no required partner objects, and just quietly exist without failing. We want the system to be fast and flexible, and keeping the interdependence between objects at a minimum improves this flexibility into the future. -Next: [More architecture](~/docs/Arch-topics.md) +Next: [More architecture](~/docs/technical-docs/Arch-topics.md) diff --git a/docs/docs/Arch-lifecycle.md b/docs/docs/technical-docs/Arch-lifecycle.md similarity index 65% rename from docs/docs/Arch-lifecycle.md rename to docs/docs/technical-docs/Arch-lifecycle.md index 42d11deb5..5c06658bd 100644 --- a/docs/docs/Arch-lifecycle.md +++ b/docs/docs/technical-docs/Arch-lifecycle.md @@ -2,8 +2,8 @@ The diagram below describes how Essentials gets a program up and running. -(The various activation phases are covered in more detail on the [next page](~/docs/Arch-activate.md)) +(The various activation phases are covered in more detail on the [next page](~/docs/technical-docs/Arch-activate.md)) ![Lifecycle](~/docs/images/lifecycle.png) -Next: [Activation phases](~/docs/Arch-activate.md) +Next: [Activation phases](~/docs/technical-docs/Arch-activate.md) diff --git a/docs/docs/Arch-summary.md b/docs/docs/technical-docs/Arch-summary.md similarity index 95% rename from docs/docs/Arch-summary.md rename to docs/docs/technical-docs/Arch-summary.md index 9f7cc014f..470bf9839 100644 --- a/docs/docs/Arch-summary.md +++ b/docs/docs/technical-docs/Arch-summary.md @@ -16,4 +16,4 @@ The diagram below shows the reference dependencies that exist between the differ ![Architecture drawing](~/docs/images/arch-high-level.png) -Next: [Architecture](~/docs/Arch-1.md) +Next: [Architecture](~/docs/technical-docs/Arch-1.md) diff --git a/docs/docs/Arch-topics.md b/docs/docs/technical-docs/Arch-topics.md similarity index 100% rename from docs/docs/Arch-topics.md rename to docs/docs/technical-docs/Arch-topics.md diff --git a/docs/docs/Communication-Basics.md b/docs/docs/technical-docs/Communication-Basics.md similarity index 100% rename from docs/docs/Communication-Basics.md rename to docs/docs/technical-docs/Communication-Basics.md diff --git a/docs/docs/ConfigurationStructure.md b/docs/docs/technical-docs/ConfigurationStructure.md similarity index 100% rename from docs/docs/ConfigurationStructure.md rename to docs/docs/technical-docs/ConfigurationStructure.md diff --git a/docs/docs/Connection-Based-Routing.md b/docs/docs/technical-docs/Connection-Based-Routing.md similarity index 100% rename from docs/docs/Connection-Based-Routing.md rename to docs/docs/technical-docs/Connection-Based-Routing.md diff --git a/docs/docs/Debugging.md b/docs/docs/technical-docs/Debugging.md similarity index 100% rename from docs/docs/Debugging.md rename to docs/docs/technical-docs/Debugging.md diff --git a/docs/docs/Feedback-Classes.md b/docs/docs/technical-docs/Feedback-Classes.md similarity index 100% rename from docs/docs/Feedback-Classes.md rename to docs/docs/technical-docs/Feedback-Classes.md diff --git a/docs/docs/Glossary-of-Terms.md b/docs/docs/technical-docs/Glossary-of-Terms.md similarity index 100% rename from docs/docs/Glossary-of-Terms.md rename to docs/docs/technical-docs/Glossary-of-Terms.md diff --git a/docs/docs/Plugins.md b/docs/docs/technical-docs/Plugins.md similarity index 100% rename from docs/docs/Plugins.md rename to docs/docs/technical-docs/Plugins.md diff --git a/docs/docs/Supported-Devices.md b/docs/docs/technical-docs/Supported-Devices.md similarity index 100% rename from docs/docs/Supported-Devices.md rename to docs/docs/technical-docs/Supported-Devices.md diff --git a/docs/docs/toc.yml b/docs/docs/toc.yml index bccb3aed7..820de9929 100644 --- a/docs/docs/toc.yml +++ b/docs/docs/toc.yml @@ -1,48 +1,52 @@ - name: Get Started With Essentials - href: ../index.md -- href: Get-started.md +- href: Get-started.md +- name: How-to's + items: + - name: How to add an article or doc page + href: how-to/how-to-add-docs.md - name: Usage items: - - href: Standalone-Use.md - - href: SIMPL-Bridging-Updated.md + - href: usage/Standalone-Use.md + - href: usage/SIMPL-Bridging-Updated.md items: - name: Join Maps - href: JoinMaps.md + href: usage/JoinMaps.md - name: Bridging to Hardware Resources - href: Bridging-To-Hardware-Resources.md + href: usage/Bridging-To-Hardware-Resources.md items: - name: GenericComm Bridging - href: GenericComm.md + href: usage/GenericComm.md - name: RelayOutput Bridging - href: RelayOutput.md + href: usage/RelayOutput.md - name: Digital Input Bridging - href: DigitalInput.md + href: usage/DigitalInput.md - name: IR Driver Bridging - href: IR-Driver-Bridging.md + href: usage/IR-Driver-Bridging.md - name: Technical documentation items: - - href: Arch-summary.md + - href: technical-docs/Arch-summary.md - name: Devices and DeviceManager - href: Arch-1.md + href: technical-docs/Arch-1.md - name: Configurable lifecycle - href: Arch-lifecycle.md + href: technical-docs/Arch-lifecycle.md - name: Activation phases - href: Arch-activate.md + href: technical-docs/Arch-activate.md - name: More - href: Arch-topics.md + href: technical-docs/Arch-topics.md - name: Plugins - href: Plugins.md + href: technical-docs/Plugins.md - name: Communication Basics - href: Communication-Basics.md + href: technical-docs/Communication-Basics.md - name: Debugging - href: Debugging.md + href: technical-docs/Debugging.md - name: Feedback Classes - href: Feedback-Classes.md + href: technical-docs/Feedback-Classes.md - name: Connection Based Routing - href: Connection-Based-Routing.md + href: technical-docs/Connection-Based-Routing.md - name: Configuration Structure - href: ConfigurationStructure.md + href: technical-docs/ConfigurationStructure.md - name: Supported Devices - href: Supported-Devices.md + href: technical-docs/Supported-Devices.md - name: Glossary of Terms - href: Glossary-of-Terms.md \ No newline at end of file + href: technical-docs/Glossary-of-Terms.md \ No newline at end of file diff --git a/docs/docs/Bridging-To-Hardware-Resources.md b/docs/docs/usage/Bridging-To-Hardware-Resources.md similarity index 81% rename from docs/docs/Bridging-To-Hardware-Resources.md rename to docs/docs/usage/Bridging-To-Hardware-Resources.md index 1209a5afb..a5f410f9b 100644 --- a/docs/docs/Bridging-To-Hardware-Resources.md +++ b/docs/docs/usage/Bridging-To-Hardware-Resources.md @@ -6,10 +6,10 @@ One of the most powerful features of Essentials is the ability to bridge SIMPL t Follow the links below for examples of bridging to hardware and network resources. -**[GenericComm Bridging](~/docs/GenericComm.md)** +**[GenericComm Bridging](~/docs/usage/GenericComm.md)** -**[RelayOutput Bridging](~/docs/RelayOutput.md)** +**[RelayOutput Bridging](~/docs/usage/RelayOutput.md)** -**[Digital Input Bridging](~/docs/DigitalInput.md)** +**[Digital Input Bridging](~/docs/usage/DigitalInput.md)** **[Card Frame Bridging](~/docs/CardFrame.md)** diff --git a/docs/docs/DigitalInput.md b/docs/docs/usage/DigitalInput.md similarity index 100% rename from docs/docs/DigitalInput.md rename to docs/docs/usage/DigitalInput.md diff --git a/docs/docs/GenericComm.md b/docs/docs/usage/GenericComm.md similarity index 100% rename from docs/docs/GenericComm.md rename to docs/docs/usage/GenericComm.md diff --git a/docs/docs/IR-Driver-Bridging.md b/docs/docs/usage/IR-Driver-Bridging.md similarity index 100% rename from docs/docs/IR-Driver-Bridging.md rename to docs/docs/usage/IR-Driver-Bridging.md diff --git a/docs/docs/JoinMaps.md b/docs/docs/usage/JoinMaps.md similarity index 100% rename from docs/docs/JoinMaps.md rename to docs/docs/usage/JoinMaps.md diff --git a/docs/docs/RelayOutput.md b/docs/docs/usage/RelayOutput.md similarity index 100% rename from docs/docs/RelayOutput.md rename to docs/docs/usage/RelayOutput.md diff --git a/docs/docs/SIMPL-Bridging-Updated.md b/docs/docs/usage/SIMPL-Bridging-Updated.md similarity index 99% rename from docs/docs/SIMPL-Bridging-Updated.md rename to docs/docs/usage/SIMPL-Bridging-Updated.md index bd648cf0e..6ae7642b5 100644 --- a/docs/docs/SIMPL-Bridging-Updated.md +++ b/docs/docs/usage/SIMPL-Bridging-Updated.md @@ -286,7 +286,7 @@ Example device config: - -Thanks! --- ## Collaboration -Essentials is an open-source project and we encourage collaboration on this community project. For features that may not be useful to the greater community, or for just-plain learning, we want to remind developers to try writing plugins for Essentials. More information can be found here: [Plugins](~/docs/Plugins.md) +Essentials is an open-source project and we encourage collaboration on this community project. For features that may not be useful to the greater community, or for just-plain learning, we want to remind developers to try writing plugins for Essentials. More information can be found here: [Plugins](~/docs/technical-docs/Plugins.md) ### Open-source-collaborative workflow @@ -52,7 +43,7 @@ The `main` branch always contain the latest stable version. The `development` br - Example: `feature/add-awesomeness` or `hotfix/really-big-oops` - When working on a new feature or bugfix, branch from the `development` branch. When working on a hotfix, branch from `main`. 3. Make commits as necessary (often is better). And use concise, descriptive language, leveraging issue notation and/or [Closing Keywords](https://help.github.com/articles/closing-issues-using-keywords) to ensure any issues addressed by your work are referenced accordingly. -4. When the scope of the work for your branch is complete, make sure to rebase your branch in case further progress has been made since the repo was forked +4. When the scope of the work for your branch is complete, make sure to update your branch in case further progress has been made since the repo was forked 5. Create a Pull Request to pull your branch into the appropriate branch in the main repository. 6. Your Pull Request will be reviewed by our team and evaluated for inclusion into the main repository. diff --git a/src/PepperDash.Essentials.Core/Bridges/BridgeHelper.cs b/src/PepperDash.Essentials.Core/Bridges/BridgeHelper.cs index 599c06a6b..8d183b77b 100644 --- a/src/PepperDash.Essentials.Core/Bridges/BridgeHelper.cs +++ b/src/PepperDash.Essentials.Core/Bridges/BridgeHelper.cs @@ -10,6 +10,10 @@ namespace PepperDash.Essentials.Core.Bridges /// public static class BridgeHelper { + /// + /// PrintJoinMp method + /// + /// target bridgekey to print join map for public static void PrintJoinMap(string command) { var targets = command.Split(' '); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/AirMediaControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/AirMediaControllerJoinMap.cs index 6975ce3c5..2bd218f6c 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/AirMediaControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/AirMediaControllerJoinMap.cs @@ -7,50 +7,86 @@ namespace PepperDash.Essentials.Core.Bridges /// public class AirMediaControllerJoinMap : JoinMapBaseAdvanced { + /// + /// Air Media Online status + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Air Media Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Air Media In Sharing Session status + /// [JoinName("IsInSession")] public JoinDataComplete IsInSession = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Air Media In Sharing Session", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Air Media Has HDMI Video Sync status + /// [JoinName("HdmiVideoSync")] public JoinDataComplete HdmiVideoSync = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Air Media Has HDMI Video Sync", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Air Media Automatic Input Routing Enable(d) + /// [JoinName("AutomaticInputRoutingEnabled")] public JoinDataComplete AutomaticInputRoutingEnabled = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Air Media Automatic Input Routing Enable(d)", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Air Media Video Route Select / Feedback + /// [JoinName("VideoOut")] public JoinDataComplete VideoOut = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Air Media Video Route Select / Feedback", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); + /// + /// Air Media Error Status Feedback + /// [JoinName("ErrorFB")] public JoinDataComplete ErrorFB = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Air Media Error Status", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); + /// + /// Air Media Number of Users Connected Feedback + /// [JoinName("NumberOfUsersConnectedFB")] public JoinDataComplete NumberOfUsersConnectedFB = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Air Media Number of Users Connected", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); + /// + /// Air Media Login Code Set / Get + /// [JoinName("LoginCode")] public JoinDataComplete LoginCode = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Air Media Login Code Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); + /// + /// Air Media Device Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Air Media Device Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Air Media IP Address Feedback + /// [JoinName("ConnectionAddressFB")] public JoinDataComplete ConnectionAddressFB = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Air Media IP Address", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Air Media Hostname Feedback + /// [JoinName("HostnameFB")] public JoinDataComplete HostnameFB = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Air Media Hostname", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Air Media Serial Number Feedback + /// [JoinName("SerialNumberFeedback")] public JoinDataComplete SerialNumberFeedback = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Air Media Serial Number", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/AppleTvJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/AppleTvJoinMap.cs index 0776f653b..c337f9cfe 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/AppleTvJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/AppleTvJoinMap.cs @@ -7,30 +7,51 @@ namespace PepperDash.Essentials.Core.Bridges /// public class AppleTvJoinMap : JoinMapBaseAdvanced { + /// + /// AppleTv Nav Up + /// [JoinName("UpArrow")] public JoinDataComplete UpArrow = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "AppleTv Nav Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// AppleTv Nav Down + /// [JoinName("DnArrow")] public JoinDataComplete DnArrow = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "AppleTv Nav Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// AppleTv Nav Left + /// [JoinName("LeftArrow")] public JoinDataComplete LeftArrow = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "AppleTv Nav Left", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// AppleTv Nav Right + /// [JoinName("RightArrow")] public JoinDataComplete RightArrow = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "AppleTv Nav Right", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// AppleTv Menu + /// [JoinName("Menu")] public JoinDataComplete Menu = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "AppleTv Menu", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// AppleTv Select + /// [JoinName("Select")] public JoinDataComplete Select = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "AppleTv Select", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// AppleTv Play/Pause + /// [JoinName("PlayPause")] public JoinDataComplete PlayPause = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "AppleTv Play/Pause", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/C2nRthsControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/C2nRthsControllerJoinMap.cs index 3d6d01b1c..bb9da22fc 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/C2nRthsControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/C2nRthsControllerJoinMap.cs @@ -7,22 +7,37 @@ namespace PepperDash.Essentials.Core.Bridges /// public class C2nRthsControllerJoinMap : JoinMapBaseAdvanced { + /// + /// C2nRthsController Online status + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Temp Sensor Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Temperature Format (C/F) + /// [JoinName("TemperatureFormat")] public JoinDataComplete TemperatureFormat = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Temp Sensor Unit Format", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Temperature Sensor Feedbacks + /// [JoinName("Temperature")] public JoinDataComplete Temperature = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Temp Sensor Temperature Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); + /// + /// Humidity Sensor Feedbacks + /// [JoinName("Humidity")] public JoinDataComplete Humidity = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Temp Sensor Humidity Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); + /// + /// Temp Sensor Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Temp Sensor Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/CameraControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/CameraControllerJoinMap.cs index 70f182cbb..aad435133 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/CameraControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/CameraControllerJoinMap.cs @@ -7,46 +7,117 @@ namespace PepperDash.Essentials.Core.Bridges /// public class CameraControllerJoinMap : JoinMapBaseAdvanced { + /// + /// Tilt Up + /// [JoinName("TiltUp")] public JoinDataComplete TiltUp = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Tilt Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + + /// + /// Tilt Down + /// [JoinName("TiltDown")] public JoinDataComplete TiltDown = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Tilt Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + + /// + /// Pan Left + /// [JoinName("PanLeft")] public JoinDataComplete PanLeft = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Pan Left", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + + /// + /// Pan Right + /// [JoinName("PanRight")] public JoinDataComplete PanRight = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Pan Right", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + + /// + /// Zoom In + /// [JoinName("ZoomIn")] public JoinDataComplete ZoomIn = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Zoom In", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + + /// + /// Zoom Out + /// [JoinName("ZoomOut")] public JoinDataComplete ZoomOut = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "Zoom Out", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Is Online + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 9, JoinSpan = 1 }, new JoinMetadata { Description = "Is Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + + /// + /// Power On + /// [JoinName("PowerOn")] public JoinDataComplete PowerOn = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "Power On", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + + /// + /// Power Off + /// [JoinName("PowerOff")] public JoinDataComplete PowerOff = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 }, new JoinMetadata { Description = "Power Off", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Number Of Presets + /// [JoinName("NumberOfPresets")] public JoinDataComplete NumberOfPresets = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "Tells Essentials the number of defined presets", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Analog }); + + /// + /// Preset Recall Start + /// [JoinName("PresetRecallStart")] public JoinDataComplete PresetRecallStart = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 20 }, new JoinMetadata { Description = "Preset Recall Start", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + + /// + /// Preset Label Start + /// [JoinName("PresetLabelStart")] public JoinDataComplete PresetLabelStart = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 20 }, new JoinMetadata { Description = "Preset Label Start", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Serial }); + + /// + /// Preset Save Start + /// [JoinName("PresetSaveStart")] public JoinDataComplete PresetSaveStart = new JoinDataComplete(new JoinData { JoinNumber = 31, JoinSpan = 20 }, new JoinMetadata { Description = "Preset Save Start", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Camera Mode Auto + /// [JoinName("CameraModeAuto")] public JoinDataComplete CameraModeAuto = new JoinDataComplete(new JoinData { JoinNumber = 51, JoinSpan = 1 }, new JoinMetadata { Description = "Camera Mode Auto", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + + /// + /// Camera Mode Manual + /// [JoinName("CameraModeManual")] public JoinDataComplete CameraModeManual = new JoinDataComplete(new JoinData { JoinNumber = 52, JoinSpan = 1 }, new JoinMetadata { Description = "Camera Mode Manual", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + + /// + /// Camera Mode Off + /// [JoinName("CameraModeOff")] public JoinDataComplete CameraModeOff = new JoinDataComplete(new JoinData { JoinNumber = 53, JoinSpan = 1 }, new JoinMetadata { Description = "Camera Mode Off", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Supports Camera Mode Manual + /// [JoinName("SupportsCameraModeAuto")] public JoinDataComplete SupportsCameraModeAuto = new JoinDataComplete(new JoinData { JoinNumber = 55, JoinSpan = 1 }, new JoinMetadata { Description = "Supports Camera Mode Auto", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + + /// + /// Supports Camera Mode Off + /// [JoinName("SupportsCameraModeOff")] public JoinDataComplete SupportsCameraModeOff = new JoinDataComplete(new JoinData { JoinNumber = 56, JoinSpan = 1 }, new JoinMetadata { Description = "Supports Camera Mode Off", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + + /// + /// Supports Presets + /// [JoinName("SupportsPresets")] public JoinDataComplete SupportsPresets = new JoinDataComplete(new JoinData { JoinNumber = 57, JoinSpan = 1 }, new JoinMetadata { Description = "Supports Presets", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/CenOdtOccupancySensorBaseJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/CenOdtOccupancySensorBaseJoinMap.cs index 8ad097e68..b52c53097 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/CenOdtOccupancySensorBaseJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/CenOdtOccupancySensorBaseJoinMap.cs @@ -9,130 +9,226 @@ public class CenOdtOccupancySensorBaseJoinMap : JoinMapBaseAdvanced { #region Digitals + /// + /// Online + /// [JoinName("Online")] public JoinDataComplete Online = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Force Occupied + /// [JoinName("ForceOccupied")] public JoinDataComplete ForceOccupied = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Force Occupied", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Force Vacant + /// [JoinName("ForceVacant")] public JoinDataComplete ForceVacant = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Force Vacant", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Enable Raw States + /// [JoinName("EnableRawStates")] public JoinDataComplete EnableRawStates = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Enable Raw States", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Disable Raw States + /// [JoinName("RoomOccupiedFeedback")] public JoinDataComplete RoomOccupiedFeedback = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Room Occupied Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Grace Occupancy Detected Feedback + /// [JoinName("GraceOccupancyDetectedFeedback")] public JoinDataComplete GraceOccupancyDetectedFeedback = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Grace Occupancy Detected Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Room Vacant Feedback + /// [JoinName("RoomVacantFeedback")] public JoinDataComplete RoomVacantFeedback = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Room Vacant Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Raw Occupancy Feedback + /// [JoinName("RawOccupancyFeedback")] public JoinDataComplete RawOccupancyFeedback = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Raw Occupancy Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Raw Occupancy Pir Feedback + /// [JoinName("RawOccupancyPirFeedback")] public JoinDataComplete RawOccupancyPirFeedback = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "Raw Occupancy Pir Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Raw Occupancy Us Feedback + /// [JoinName("RawOccupancyUsFeedback")] public JoinDataComplete RawOccupancyUsFeedback = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "Raw Occupancy Us Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Identity Mode On + /// [JoinName("IdentityModeOn")] public JoinDataComplete IdentityMode = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 }, new JoinMetadata { Description = "Enable Identity Mode", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Identity Mode Off + /// [JoinName("IdentityModeFeedback")] public JoinDataComplete IdentityModeFeedback = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 }, new JoinMetadata { Description = "Identity Mode Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Enable Led Flash + /// [JoinName("EnableLedFlash")] public JoinDataComplete EnableLedFlash = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "Enable Led Flash", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Disable Led Flash + /// [JoinName("DisableLedFlash")] public JoinDataComplete DisableLedFlash = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 }, new JoinMetadata { Description = "Disable Led Flash", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Enable Short Timeout + /// [JoinName("EnableShortTimeout")] public JoinDataComplete EnableShortTimeout = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 }, new JoinMetadata { Description = "Enable Short Timeout", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Disable Short Timeout + /// [JoinName("DisableShortTimeout")] public JoinDataComplete DisableShortTimeout = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 }, new JoinMetadata { Description = "Disable Short Timeout", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Or When Vacated + /// [JoinName("OrWhenVacated")] public JoinDataComplete OrWhenVacated = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 }, new JoinMetadata { Description = "Or When Vacated", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// And When Vacated + /// [JoinName("AndWhenVacated")] public JoinDataComplete AndWhenVacated = new JoinDataComplete(new JoinData { JoinNumber = 16, JoinSpan = 1 }, new JoinMetadata { Description = "AndWhenVacated", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Enable Us A + /// [JoinName("EnableUsA")] public JoinDataComplete EnableUsA = new JoinDataComplete(new JoinData { JoinNumber = 17, JoinSpan = 1 }, new JoinMetadata { Description = "Enable Us A", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Disable Us A + /// [JoinName("DisableUsA")] public JoinDataComplete DisableUsA = new JoinDataComplete(new JoinData { JoinNumber = 18, JoinSpan = 1 }, new JoinMetadata { Description = "Disable Us A", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Enable Us B + /// [JoinName("EnableUsB")] public JoinDataComplete EnableUsB = new JoinDataComplete(new JoinData { JoinNumber = 19, JoinSpan = 1 }, new JoinMetadata { Description = "Enable Us B", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Disable Us B + /// [JoinName("DisableUsB")] public JoinDataComplete DisableUsB = new JoinDataComplete(new JoinData { JoinNumber = 20, JoinSpan = 1 }, new JoinMetadata { Description = "Disable Us B", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Enable Pir + /// [JoinName("EnablePir")] public JoinDataComplete EnablePir = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 1 }, new JoinMetadata { Description = "Enable Pir", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Disable Pir + /// [JoinName("DisablePir")] public JoinDataComplete DisablePir = new JoinDataComplete(new JoinData { JoinNumber = 22, JoinSpan = 1 }, new JoinMetadata { Description = "Disable Pir", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Increment Us In Occupied State + /// [JoinName("IncrementUsInOccupiedState")] public JoinDataComplete IncrementUsInOccupiedState = new JoinDataComplete(new JoinData { JoinNumber = 23, JoinSpan = 1 }, new JoinMetadata { Description = "Increment Us In OccupiedState", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Decrement Us In Occupied State + /// [JoinName("DecrementUsInOccupiedState")] public JoinDataComplete DecrementUsInOccupiedState = new JoinDataComplete(new JoinData { JoinNumber = 24, JoinSpan = 1 }, new JoinMetadata { Description = "Dencrement Us In Occupied State", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Increment Us In Vacant State + /// [JoinName("IncrementUsInVacantState")] public JoinDataComplete IncrementUsInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 25, JoinSpan = 1 }, new JoinMetadata { Description = "Increment Us In VacantState", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Decrement Us In Vacant State + /// [JoinName("DecrementUsInVacantState")] public JoinDataComplete DecrementUsInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 26, JoinSpan = 1 }, new JoinMetadata { Description = "Decrement Us In VacantState", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Increment Pir In Occupied State + /// [JoinName("IncrementPirInOccupiedState")] public JoinDataComplete IncrementPirInOccupiedState = new JoinDataComplete(new JoinData { JoinNumber = 27, JoinSpan = 1 }, new JoinMetadata { Description = "Increment Pir In Occupied State", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Decrement Pir In Occupied State + /// [JoinName("DecrementPirInOccupiedState")] public JoinDataComplete DecrementPirInOccupiedState = new JoinDataComplete(new JoinData { JoinNumber = 28, JoinSpan = 1 }, new JoinMetadata { Description = "Decrement Pir In OccupiedState", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Increment Pir In Vacant State + /// [JoinName("IncrementPirInVacantState")] public JoinDataComplete IncrementPirInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 29, JoinSpan = 1 }, new JoinMetadata { Description = "Increment Pir In Vacant State", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Decrement Pir In Vacant State + /// [JoinName("DecrementPirInVacantState")] public JoinDataComplete DecrementPirInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 30, JoinSpan = 1 }, new JoinMetadata { Description = "Decrement Pir In Vacant State", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); @@ -140,31 +236,51 @@ public class CenOdtOccupancySensorBaseJoinMap : JoinMapBaseAdvanced #endregion #region Analog - + /// + /// Timeout + /// [JoinName("Timeout")] public JoinDataComplete Timeout = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Timeout", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Timeout Local Feedback + /// [JoinName("TimeoutLocalFeedback")] public JoinDataComplete TimeoutLocalFeedback = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Timeout Local Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Internal PhotoSensor Value + /// [JoinName("InternalPhotoSensorValue")] public JoinDataComplete InternalPhotoSensorValue = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Internal PhotoSensor Value", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// External PhotoSensor Value + /// [JoinName("UsSensitivityInOccupiedState")] public JoinDataComplete UsSensitivityInOccupiedState = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Us Sensitivity In Occupied State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Us Sensitivity In Vacant State + /// [JoinName("UsSensitivityInVacantState")] public JoinDataComplete UsSensitivityInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "Us Sensitivity In Vacant State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Pir Sensitivity In Occupied State + /// [JoinName("PirSensitivityInOccupiedState")] public JoinDataComplete PirSensitivityInOccupiedState = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "Pir Sensitivity In Occupied State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Pir Sensitivity In Vacant State + /// [JoinName("PirSensitivityInVacantState")] public JoinDataComplete PirSensitivityInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 }, new JoinMetadata { Description = "Pir Sensitivity In Vacant State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); @@ -173,6 +289,9 @@ public class CenOdtOccupancySensorBaseJoinMap : JoinMapBaseAdvanced #region Serial + /// + /// Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DisplayControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DisplayControllerJoinMap.cs index d200c591f..3741f951a 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DisplayControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DisplayControllerJoinMap.cs @@ -7,62 +7,107 @@ namespace PepperDash.Essentials.Core.Bridges /// public class DisplayControllerJoinMap : JoinMapBaseAdvanced { + /// + /// Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// Power Off + /// [JoinName("PowerOff")] public JoinDataComplete PowerOff = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Power Off", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Power On + /// [JoinName("PowerOn")] public JoinDataComplete PowerOn = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Power On", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Is Two Way Display + /// [JoinName("IsTwoWayDisplay")] public JoinDataComplete IsTwoWayDisplay = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Is Two Way Display", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Volume Up + /// [JoinName("VolumeUp")] public JoinDataComplete VolumeUp = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Volume Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Volume Level + /// [JoinName("VolumeLevel")] public JoinDataComplete VolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Volume Level", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Volume Down + /// [JoinName("VolumeDown")] public JoinDataComplete VolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "Volume Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Volume Mute + /// [JoinName("VolumeMute")] public JoinDataComplete VolumeMute = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "Volume Mute", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Volume Mute On + /// [JoinName("VolumeMuteOn")] public JoinDataComplete VolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 }, new JoinMetadata { Description = "Volume Mute On", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Volume Mute Off + /// [JoinName("VolumeMuteOff")] public JoinDataComplete VolumeMuteOff = new JoinDataComplete(new JoinData { JoinNumber = 9, JoinSpan = 1 }, new JoinMetadata { Description = "Volume Mute Off", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Input Select Offset + /// [JoinName("InputSelectOffset")] public JoinDataComplete InputSelectOffset = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 10 }, new JoinMetadata { Description = "Input Select", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Input Names Offset + /// [JoinName("InputNamesOffset")] public JoinDataComplete InputNamesOffset = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 10 }, new JoinMetadata { Description = "Input Names Offset", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// Input Select + /// [JoinName("InputSelect")] public JoinDataComplete InputSelect = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "Input Select", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Button Visibility Offset + /// [JoinName("ButtonVisibilityOffset")] public JoinDataComplete ButtonVisibilityOffset = new JoinDataComplete(new JoinData { JoinNumber = 41, JoinSpan = 10 }, new JoinMetadata { Description = "Button Visibility Offset", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.DigitalSerial }); - + + /// + /// Is Online + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 50, JoinSpan = 1 }, new JoinMetadata { Description = "Is Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmBladeChassisControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmBladeChassisControllerJoinMap.cs index 99d59a7cc..c6488bbac 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmBladeChassisControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmBladeChassisControllerJoinMap.cs @@ -6,50 +6,86 @@ namespace PepperDash.Essentials.Core.Bridges { /// public class DmBladeChassisControllerJoinMap : JoinMapBaseAdvanced { + /// + /// DM Blade Chassis Online status + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "DM Blade Chassis Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Blade Input Video Sync + /// [JoinName("VideoSyncStatus")] public JoinDataComplete VideoSyncStatus = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 128 }, new JoinMetadata { Description = "DM Blade Input Video Sync", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Blade Chassis Input Endpoint Online + /// [JoinName("InputEndpointOnline")] public JoinDataComplete InputEndpointOnline = new JoinDataComplete(new JoinData { JoinNumber = 501, JoinSpan = 128 }, new JoinMetadata { Description = "DM Blade Chassis Input Endpoint Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Blade Chassis Output Endpoint Online + /// [JoinName("OutputEndpointOnline")] public JoinDataComplete OutputEndpointOnline = new JoinDataComplete(new JoinData { JoinNumber = 701, JoinSpan = 128 }, new JoinMetadata { Description = "DM Blade Chassis Output Endpoint Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Blade Chassis Tx Advanced Is Present + /// [JoinName("TxAdvancedIsPresent")] public JoinDataComplete TxAdvancedIsPresent = new JoinDataComplete(new JoinData { JoinNumber = 1001, JoinSpan = 128 }, new JoinMetadata { Description = "DM Blade Chassis Tx Advanced Is Present", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Blade Chassis Rx Advanced Is Present + /// [JoinName("OutputVideo")] public JoinDataComplete OutputVideo = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 128 }, new JoinMetadata { Description = "DM Blade Chassis Output Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Blade Chassis Input HDCP Support State + /// [JoinName("HdcpSupportState")] public JoinDataComplete HdcpSupportState = new JoinDataComplete(new JoinData { JoinNumber = 1001, JoinSpan = 128 }, new JoinMetadata { Description = "DM Blade Chassis Input HDCP Support State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Blade Chassis Input HDCP Support Capability + /// [JoinName("HdcpSupportCapability")] public JoinDataComplete HdcpSupportCapability = new JoinDataComplete(new JoinData { JoinNumber = 1201, JoinSpan = 128 }, new JoinMetadata { Description = "DM Blade Chassis Input HDCP Support Capability", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Blade Chassis Input Names + /// [JoinName("InputNames")] public JoinDataComplete InputNames = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 128 }, new JoinMetadata { Description = "DM Blade Chassis Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Blade Chassis Output Names + /// [JoinName("OutputNames")] public JoinDataComplete OutputNames = new JoinDataComplete(new JoinData { JoinNumber = 301, JoinSpan = 128 }, new JoinMetadata { Description = "DM Blade Chassis Output Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Blade Chassis Video Output Currently Routed Video Input Name + /// [JoinName("OutputCurrentVideoInputNames")] public JoinDataComplete OutputCurrentVideoInputNames = new JoinDataComplete(new JoinData { JoinNumber = 2001, JoinSpan = 128 }, new JoinMetadata { Description = "DM Blade Chassis Video Output Currently Routed Video Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Blade Chassis Input Current Resolution + /// [JoinName("InputCurrentResolution")] public JoinDataComplete InputCurrentResolution = new JoinDataComplete(new JoinData { JoinNumber = 2401, JoinSpan = 128 }, new JoinMetadata { Description = "DM Blade Chassis Input Current Resolution", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmChassisControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmChassisControllerJoinMap.cs index 27770d814..9d2217ccc 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmChassisControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmChassisControllerJoinMap.cs @@ -7,6 +7,9 @@ namespace PepperDash.Essentials.Core.Bridges /// public class DmChassisControllerJoinMap : JoinMapBaseAdvanced { + /// + /// DM Chassis enable audio breakaway routing + /// [JoinName("EnableAudioBreakaway")] public JoinDataComplete EnableAudioBreakaway = new JoinDataComplete( new JoinData {JoinNumber = 4, JoinSpan = 1}, @@ -16,7 +19,10 @@ public class DmChassisControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Chassis enable USB breakaway routing + /// [JoinName("EnableUsbBreakaway")] public JoinDataComplete EnableUsbBreakaway = new JoinDataComplete( new JoinData { JoinNumber = 5, JoinSpan = 1 }, @@ -26,83 +32,143 @@ public class DmChassisControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Chassis Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "DM Chassis Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis SystemId Get/Set/Trigger + /// [JoinName("SystemId")] public JoinDataComplete SystemId = new JoinDataComplete(new JoinData { JoinNumber = 10, JoinSpan = 1 }, new JoinMetadata { Description = "DM Chassis SystemId Get/Set/Trigger/", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.DigitalAnalog }); - + + /// + /// DM Chassis Online status + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "DM Chassis Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Input Video Sync + /// [JoinName("VideoSyncStatus")] public JoinDataComplete VideoSyncStatus = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 32 }, new JoinMetadata { Description = "DM Input Video Sync", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Chassis Input Endpoint Online + /// [JoinName("InputEndpointOnline")] public JoinDataComplete InputEndpointOnline = new JoinDataComplete(new JoinData { JoinNumber = 501, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Input Endpoint Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Chassis Output Endpoint Online + /// [JoinName("OutputEndpointOnline")] public JoinDataComplete OutputEndpointOnline = new JoinDataComplete(new JoinData { JoinNumber = 701, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Output Endpoint Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Chassis Tx Advanced Is Present + /// [JoinName("TxAdvancedIsPresent")] public JoinDataComplete TxAdvancedIsPresent = new JoinDataComplete(new JoinData { JoinNumber = 1001, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Tx Advanced Is Present", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Chassis Rx Advanced Is Present + /// [JoinName("OutputDisabledByHdcp")] public JoinDataComplete OutputDisabledByHdcp = new JoinDataComplete(new JoinData { JoinNumber = 1201, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Output Disabled by HDCP", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Chassis Output Set / Get + /// [JoinName("OutputVideo")] public JoinDataComplete OutputVideo = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Output Video Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Chassis Output Audio Set / Get + /// [JoinName("OutputAudio")] public JoinDataComplete OutputAudio = new JoinDataComplete(new JoinData { JoinNumber = 301, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Output Audio Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Chassis Input Set / Get + /// [JoinName("OutputUsb")] public JoinDataComplete OutputUsb = new JoinDataComplete(new JoinData { JoinNumber = 501, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Output USB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Chassis Input Set / Get + /// [JoinName("InputUsb")] public JoinDataComplete InputUsb = new JoinDataComplete(new JoinData { JoinNumber = 701, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Input Usb Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Chassis Input HDCP Support State + /// [JoinName("HdcpSupportState")] public JoinDataComplete HdcpSupportState = new JoinDataComplete(new JoinData { JoinNumber = 1001, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Input HDCP Support State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Chassis Input HDCP Support Capability + /// [JoinName("HdcpSupportCapability")] public JoinDataComplete HdcpSupportCapability = new JoinDataComplete(new JoinData { JoinNumber = 1201, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Input HDCP Support Capability", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Chassis Stream Input Start (1), Stop (2), Pause (3) with Feedback + /// [JoinName("InputStreamCardState")] public JoinDataComplete InputStreamCardState = new JoinDataComplete(new JoinData { JoinNumber = 1501, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Stream Input Start (1), Stop (2), Pause (3) with Feedback", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Chassis Stream Output Start (1), Stop (2), Pause (3) with Feedback + /// [JoinName("OutputStreamCardState")] public JoinDataComplete OutputStreamCardState = new JoinDataComplete(new JoinData { JoinNumber = 1601, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Stream Output Start (1), Stop (2), Pause (3) with Feedback", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Chassis No Route Name + /// [JoinName("NoRouteName")] public JoinDataComplete NoRouteName = new JoinDataComplete(new JoinData { JoinNumber = 100, JoinSpan = 1 }, new JoinMetadata { Description = "DM Chassis Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Input Names + /// [JoinName("InputNames")] public JoinDataComplete InputNames = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Output Names + /// [JoinName("OutputNames")] public JoinDataComplete OutputNames = new JoinDataComplete(new JoinData { JoinNumber = 301, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Output Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Video Input Names + /// [JoinName("InputVideoNames")] public JoinDataComplete InputVideoNames = new JoinDataComplete(new JoinData {JoinNumber = 501, JoinSpan = 200}, new JoinMetadata @@ -111,7 +177,10 @@ public class DmChassisControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Audio Input Names + /// [JoinName("InputAudioNames")] public JoinDataComplete InputAudioNames = new JoinDataComplete(new JoinData { JoinNumber = 701, JoinSpan = 200 }, @@ -121,6 +190,10 @@ public class DmChassisControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Serial }); + + /// + /// DM Chassis Video Output Names + /// [JoinName("OutputVideoNames")] public JoinDataComplete OutputVideoNames = new JoinDataComplete(new JoinData { JoinNumber = 901, JoinSpan = 200 }, @@ -130,6 +203,10 @@ public class DmChassisControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Serial }); + + /// + /// DM Chassis Audio Output Names + /// [JoinName("OutputAudioNames")] public JoinDataComplete OutputAudioNames = new JoinDataComplete(new JoinData { JoinNumber = 1101, JoinSpan = 200 }, @@ -139,15 +216,24 @@ public class DmChassisControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Video Output Currently Routed Video Input Name + /// [JoinName("OutputCurrentVideoInputNames")] public JoinDataComplete OutputCurrentVideoInputNames = new JoinDataComplete(new JoinData { JoinNumber = 2001, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Video Output Currently Routed Video Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Audio Output Currently Routed Audio Input Name + /// [JoinName("OutputCurrentAudioInputNames")] public JoinDataComplete OutputCurrentAudioInputNames = new JoinDataComplete(new JoinData { JoinNumber = 2201, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Audio Output Currently Routed Video Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Input Current Resolution + /// [JoinName("InputCurrentResolution")] public JoinDataComplete InputCurrentResolution = new JoinDataComplete(new JoinData { JoinNumber = 2401, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Input Current Resolution", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmRmcControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmRmcControllerJoinMap.cs index 6eae50374..6f0df1027 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmRmcControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmRmcControllerJoinMap.cs @@ -7,66 +7,114 @@ namespace PepperDash.Essentials.Core.Bridges /// public class DmRmcControllerJoinMap : JoinMapBaseAdvanced { + /// + /// DM RMC Online + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM RMC Mute Video + /// [JoinName("VideoMuteOn")] public JoinDataComplete VideoMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC Mute Video", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM RMC UnMute Video + /// [JoinName("VideoMuteOff")] public JoinDataComplete VideoMuteOff = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC UnMute Video", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM RMC Mute Video Toggle + /// [JoinName("VideoMuteToggle")] public JoinDataComplete VideoMuteToggle = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC Mute Video Toggle", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM RMC Current Output Resolution + /// [JoinName("CurrentOutputResolution")] public JoinDataComplete CurrentOutputResolution = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC Current Output Resolution", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM RMC EDID Manufacturer + /// [JoinName("EdidManufacturer")] public JoinDataComplete EdidManufacturer = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC EDID Manufacturer", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM RMC EDID Name + /// [JoinName("EdidName")] public JoinDataComplete EdidName = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC EDID Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM RMC EDID Preferred Timing + /// [JoinName("EdidPrefferedTiming")] public JoinDataComplete EdidPrefferedTiming = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC EDID Preferred Timing", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM RMC EDID Serial Number + /// [JoinName("EdidSerialNumber")] public JoinDataComplete EdidSerialNumber = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC EDID Serial Number", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM RMC Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM RMC Audio Video Source Set / Get + /// [JoinName("AudioVideoSource")] public JoinDataComplete AudioVideoSource = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC Audio Video Source Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM RMC HDCP Support Capability + /// [JoinName("HdcpSupportCapability")] public JoinDataComplete HdcpSupportCapability = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC HDCP Support Capability", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM RMC Port 1 (DM) HDCP State Set / Get + /// [JoinName("Port1HdcpState")] public JoinDataComplete Port1HdcpState = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC Port 1 (DM) HDCP State Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM RMC Port 2 (HDMI) HDCP State Set / Get + /// [JoinName("Port2HdcpState")] public JoinDataComplete Port2HdcpState = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, - new JoinMetadata { Description = "DM TX Port 2 (HDMI) HDCP State Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + new JoinMetadata { Description = "DM RMC Port 2 (HDMI) HDCP State Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); + + /// + /// DM RMC HDMI Input Sync + /// [JoinName("HdmiInputSync")] public JoinDataComplete HdmiInputSync = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "DM RMC HDMI Input Sync", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM RMC Number of Input Ports that support HDCP + /// [JoinName("HdcpInputPortCount")] public JoinDataComplete HdcpInputPortCount = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Number of Input Ports that support HDCP", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmTxControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmTxControllerJoinMap.cs index 6aec8c33a..ab1299d1b 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmTxControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmTxControllerJoinMap.cs @@ -7,70 +7,121 @@ namespace PepperDash.Essentials.Core.Bridges /// public class DmTxControllerJoinMap : JoinMapBaseAdvanced { + /// + /// DM TX Online + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM TX Video Sync + /// [JoinName("VideoSyncStatus")] public JoinDataComplete VideoSyncStatus = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX Video Sync", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM TX Enable Free Run Set / Get + /// [JoinName("FreeRunEnabled")] public JoinDataComplete FreeRunEnabled = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX Enable Free Run Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Input 1 Video Sync Status + /// [JoinName("Input1VideoSyncStatus")] public JoinDataComplete Input1VideoSyncStatus = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Input 1 Video Sync Status", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Input 2 Video Sync Status + /// [JoinName("Input2VideoSyncStatus")] public JoinDataComplete Input2VideoSyncStatus = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Input 2 Video Sync Status", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Input 3 Video Sync Status + /// [JoinName("Input3VideoSyncStatus")] public JoinDataComplete Input3VideoSyncStatus = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "Input 3 Video Sync Status", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM TX Current Input Resolution + /// [JoinName("CurrentInputResolution")] public JoinDataComplete CurrentInputResolution = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX Current Input Resolution", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM TX Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM TX Video Input Set / Get + /// [JoinName("VideoInput")] public JoinDataComplete VideoInput = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX Video Input Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM TX Audio Input Set / Get + /// [JoinName("AudioInput")] public JoinDataComplete AudioInput = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX Audio Input Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM TX HDCP Support Capability + /// [JoinName("HdcpSupportCapability")] public JoinDataComplete HdcpSupportCapability = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX HDCP Support Capability", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM TX Port 1 HDCP State Set / Get + /// [JoinName("Port1HdcpState")] public JoinDataComplete Port1HdcpState = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX Port 1 HDCP State Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM TX Port 2 HDCP State Set / Get + /// [JoinName("Port2HdcpState")] public JoinDataComplete Port2HdcpState = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX Port 2 HDCP State Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM TX VGA Brightness + /// [JoinName("VgaBrightness")] public JoinDataComplete VgaBrightness = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX VGA Brightness", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM TX VGA Contrast + /// [JoinName("VgaContrast")] public JoinDataComplete VgaContrast = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX Online", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM TX Port 3 HDCP State Set / Get + /// [JoinName("Port3HdcpState")] public JoinDataComplete Port3HdcpState = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 }, new JoinMetadata { Description = "DM TX Port 3 HDCP State Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM TX Number of Input Ports that support HDCP + /// [JoinName("HdcpInputPortCount")] public JoinDataComplete HdcpInputPortCount = new JoinDataComplete(new JoinData { JoinNumber = 9, JoinSpan = 1 }, new JoinMetadata { Description = "Number of Input Ports that support HDCP", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmpsAudioOutputControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmpsAudioOutputControllerJoinMap.cs index 7ab0900d4..ca1d60b4b 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmpsAudioOutputControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmpsAudioOutputControllerJoinMap.cs @@ -8,150 +8,261 @@ namespace PepperDash.Essentials.Core.Bridges public class DmpsAudioOutputControllerJoinMap : JoinMapBaseAdvanced { + /// + /// Master Volume Level Signed dB Set / Get + /// [JoinName("MasterVolumeLevel")] public JoinDataComplete MasterVolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Master Volume Signed dB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Master Volume 16bit Scaled Set / Get + /// [JoinName("MasterVolumeLevelScaled")] public JoinDataComplete MasterVolumeLevelScaled = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Master Volume 16bit Scaled Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Mixer Preset Recall Set + /// [JoinName("MixerPresetRecall")] public JoinDataComplete MixerPresetRecall = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Mixer Preset Recall Set", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Mixer Eq Preset Recall Set + /// [JoinName("MixerEqPresetRecall")] public JoinDataComplete MixerEqPresetRecall = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Mixer Eq Preset Recall Set", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Master Volume Mute On Set / Get + /// [JoinName("MasterVolumeMuteOn")] public JoinDataComplete MasterVolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Master Volume Mute On Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Master Volume Mute Off Set / Get + /// [JoinName("MasterVolumeMuteOff")] public JoinDataComplete MasterVolumeMuteOff = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Master Volume Mute Off Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Master Volume Level Up + /// [JoinName("MasterVolumeUp")] public JoinDataComplete MasterVolumeUp = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Master Volume Level Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Master Volume Level Down + /// [JoinName("MasterVolumeDown")] public JoinDataComplete MasterVolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Master Volume Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Master Volume Scaled Send Enable/Disable + /// [JoinName("MasterVolumeLevelScaledSend")] public JoinDataComplete MasterVolumeLevelScaledSend = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Master Volume Scaled Send Enable/Disable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Source Volume Signed dB Set / Get + /// [JoinName("SourceVolumeLevel")] public JoinDataComplete SourceVolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "Source Volume Signed dB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Source Volume 16bit Scaled Set / Get + /// [JoinName("SourceVolumeLevelScaled")] public JoinDataComplete SourceVolumeLevelScaled = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 }, new JoinMetadata { Description = "Source Volume 16bit Scaled Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Source Volume Mute On Set / Get + /// [JoinName("SourceVolumeMuteOn")] public JoinDataComplete SourceVolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "Source Volume Mute On Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Source Volume Mute Off Set / Get + /// [JoinName("SourceVolumeMuteOff")] public JoinDataComplete SourceVolumeMuteOff = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 }, new JoinMetadata { Description = "Source Volume Mute Off Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Source Volume Level Up + /// [JoinName("SourceVolumeUp")] public JoinDataComplete SourceVolumeUp = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 }, new JoinMetadata { Description = "Source Volume Level Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Source Volume Level Down + /// [JoinName("SourceVolumeDown")] public JoinDataComplete SourceVolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 }, new JoinMetadata { Description = "Source Volume Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Source Volume Scaled Send Enable/Disable + /// [JoinName("SourceVolumeLevelScaledSend")] public JoinDataComplete SourceVolumeLevelScaledSend = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 }, new JoinMetadata { Description = "Source Volume Scaled Send Enable/Disable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Codec1 Volume Signed dB Set / Get + /// [JoinName("Codec1VolumeLevel")] public JoinDataComplete Codec1VolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 1 }, new JoinMetadata { Description = "Codec1 Volume Signed dB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Codec1 Volume 16bit Scaled Set / Get + /// [JoinName("Codec1VolumeLevelScaled")] public JoinDataComplete Codec1VolumeLevelScaled = new JoinDataComplete(new JoinData { JoinNumber = 22, JoinSpan = 1 }, new JoinMetadata { Description = "Codec1 Volume 16bit Scaled Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Codec1 Volume Mute On Set / Get + /// [JoinName("Codec1VolumeMuteOn")] public JoinDataComplete Codec1VolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 1 }, new JoinMetadata { Description = "Codec1 Volume Mute On Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Codec1 Volume Mute Off Set / Get + /// [JoinName("Codec1VolumeMuteOff")] public JoinDataComplete Codec1VolumeMuteOff = new JoinDataComplete(new JoinData { JoinNumber = 22, JoinSpan = 1 }, new JoinMetadata { Description = "Codec1 Volume Mute Off Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Codec1 Volume Level Up + /// [JoinName("Codec1VolumeUp")] public JoinDataComplete Codec1VolumeUp = new JoinDataComplete(new JoinData { JoinNumber = 23, JoinSpan = 1 }, new JoinMetadata { Description = "Codec1 Volume Level Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Codec1 Volume Level Down + /// [JoinName("Codec1VolumeDown")] public JoinDataComplete Codec1VolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 24, JoinSpan = 1 }, new JoinMetadata { Description = "Codec1 Volume Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Codec1 Volume Scaled Send Enable/Disable + /// [JoinName("Codec1VolumeLevelScaledSend")] public JoinDataComplete Codec1VolumeLevelScaledSend = new JoinDataComplete(new JoinData { JoinNumber = 25, JoinSpan = 1 }, new JoinMetadata { Description = "Codec1 Volume Scaled Send Enable/Disable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Codec2 Volume Signed dB Set / Get + /// [JoinName("Codec2VolumeLevel")] public JoinDataComplete Codec2VolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 31, JoinSpan = 1 }, new JoinMetadata { Description = "Codec2 Volume Signed dB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Codec2 Volume 16bit Scaled Set / Get + /// [JoinName("Codec2VolumeLevelScaled")] public JoinDataComplete Codec2VolumeLevelScaled = new JoinDataComplete(new JoinData { JoinNumber = 32, JoinSpan = 1 }, new JoinMetadata { Description = "Codec2 Volume 16bit Scaled Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Codec2 Volume Mute On Set / Get + /// [JoinName("Codec2VolumeMuteOn")] public JoinDataComplete Codec2VolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 31, JoinSpan = 1 }, new JoinMetadata { Description = "Codec2 Volume Mute On Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Codec2 Volume Mute Off Set / Get + /// [JoinName("Codec2VolumeMuteOff")] public JoinDataComplete Codec2VolumeMuteOff = new JoinDataComplete(new JoinData { JoinNumber = 32, JoinSpan = 1 }, new JoinMetadata { Description = "Codec2 Volume Mute Off Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Codec2 Volume Level Up + /// [JoinName("Codec2VolumeUp")] public JoinDataComplete Codec2VolumeUp = new JoinDataComplete(new JoinData { JoinNumber = 33, JoinSpan = 1 }, new JoinMetadata { Description = "Codec2 Volume Level Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Codec2 Volume Level Down + /// [JoinName("Codec2VolumeDown")] public JoinDataComplete Codec2VolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 34, JoinSpan = 1 }, new JoinMetadata { Description = "Codec2 Volume Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Codec2 Volume Scaled Send Enable/Disable + /// [JoinName("Codec2VolumeLevelScaledSend")] public JoinDataComplete Codec2VolumeLevelScaledSend = new JoinDataComplete(new JoinData { JoinNumber = 35, JoinSpan = 1 }, new JoinMetadata { Description = "Codec2 Volume Scaled Send Enable/Disable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// MicsMaster Volume Signed dB Set / Get + /// [JoinName("MicsMasterVolumeLevel")] public JoinDataComplete MicsMasterVolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 41, JoinSpan = 1 }, new JoinMetadata { Description = "MicsMaster Volume Signed dB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// MicsMaster Volume 16bit Scaled Set / Get + /// [JoinName("MicsMasterVolumeLevelScaled")] public JoinDataComplete MicsMasterVolumeLevelScaled = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 1 }, new JoinMetadata { Description = "MicsMaster Volume 16bit Scaled Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// MicsMaster Volume Mute On Set / Get + /// [JoinName("MicsMasterVolumeMuteOn")] public JoinDataComplete MicsMasterVolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 41, JoinSpan = 1 }, new JoinMetadata { Description = "MicsMaster Volume Mute On Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// MicsMaster Volume Mute Off Set / Get + /// [JoinName("MicsMasterVolumeMuteOff")] public JoinDataComplete MicsMasterVolumeMuteOff = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 1 }, new JoinMetadata { Description = "MicsMaster Volume Mute Off Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// MicsMaster Volume Level Up + /// [JoinName("MicsMasterVolumeUp")] public JoinDataComplete MicsMasterVolumeUp = new JoinDataComplete(new JoinData { JoinNumber = 43, JoinSpan = 1 }, new JoinMetadata { Description = "MicsMaster Volume Level Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// MicsMaster Volume Level Down + /// [JoinName("MicsMasterVolumeDown")] public JoinDataComplete MicsMasterVolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 44, JoinSpan = 1 }, new JoinMetadata { Description = "MicsMaster Volume Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// MicsMaster Volume Scaled Send Enable/Disable + /// [JoinName("MicsMasterVolumeLevelScaledSend")] public JoinDataComplete MicsMasterVolumeLevelScaledSend = new JoinDataComplete(new JoinData { JoinNumber = 45, JoinSpan = 1 }, new JoinMetadata { Description = "Mics Master Volume Scaled Send Enable/Disable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmpsMicrophoneControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmpsMicrophoneControllerJoinMap.cs index 91f642bb2..3fba12e5f 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmpsMicrophoneControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmpsMicrophoneControllerJoinMap.cs @@ -7,26 +7,45 @@ namespace PepperDash.Essentials.Core.Bridges /// public class DmpsMicrophoneControllerJoinMap : JoinMapBaseAdvanced { + + /// + /// Mic Gain dB Set / Get + /// [JoinName("MicGain")] public JoinDataComplete MicGain = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Mic Gain dB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Mic Gain 16bit Scaled Set / Get + /// [JoinName("MicGainScaled")] public JoinDataComplete MicGainScaled = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Mic Gain 16bit Scaled Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Mic Mute On Set / Get + /// [JoinName("MicMuteOn")] public JoinDataComplete MicMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Mic Mute On Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Mic Mute Off Set / Get + /// [JoinName("MicMuteOff")] public JoinDataComplete MicMuteOff = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Mic Mute Off Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Mic Gain Scaled Send Enable/Disable + /// [JoinName("MicGainScaledSend")] public JoinDataComplete MicGainScaledSend = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Mic Gain Scaled Send Enable/Disable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Mic Name Get + /// [JoinName("MicName")] public JoinDataComplete MicName = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Mic Name Get", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmpsRoutingControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmpsRoutingControllerJoinMap.cs index 71ce39a6d..8e9a3e979 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmpsRoutingControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/DmpsRoutingControllerJoinMap.cs @@ -7,64 +7,106 @@ namespace PepperDash.Essentials.Core.Bridges /// public class DmpsRoutingControllerJoinMap : JoinMapBaseAdvanced { + /// + /// DMPS Enable Audio and Video Routing + /// [JoinName("EnableRouting")] public JoinDataComplete EnableRouting = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "DMPS Enable Audio and Video Routing", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DMPS Disable Audio and Video Routing + /// [JoinName("SystemPowerOn")] public JoinDataComplete SystemPowerOn = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 }, new JoinMetadata { Description = "DMPS System Power On Get/Set", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DMPS Disable Audio and Video Routing + /// [JoinName("SystemPowerOff")] public JoinDataComplete SystemPowerOff = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 }, new JoinMetadata { Description = "DMPS System Power Off Get/Set", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DMPS Front Panel Lock On Get/Set + /// [JoinName("FrontPanelLockOn")] public JoinDataComplete FrontPanelLockOn = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 }, new JoinMetadata { Description = "DMPS Front Panel Lock On Get/Set", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DMPS Front Panel Lock Off Get/Set + /// [JoinName("FrontPanelLockOff")] public JoinDataComplete FrontPanelLockOff = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 }, new JoinMetadata { Description = "DMPS Front Panel Lock Off Get/Set", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Input Video Sync + /// [JoinName("VideoSyncStatus")] public JoinDataComplete VideoSyncStatus = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 32 }, new JoinMetadata { Description = "DM Input Video Sync", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Chassis Input Endpoint Online + /// [JoinName("InputEndpointOnline")] public JoinDataComplete InputEndpointOnline = new JoinDataComplete(new JoinData { JoinNumber = 501, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Input Endpoint Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Chassis Output Endpoint Online + /// [JoinName("OutputEndpointOnline")] public JoinDataComplete OutputEndpointOnline = new JoinDataComplete(new JoinData { JoinNumber = 701, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Output Endpoint Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DM Chassis Input Video Set / Get + /// [JoinName("OutputVideo")] public JoinDataComplete OutputVideo = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Output Video Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Chassis Input Audio Set / Get + /// [JoinName("OutputAudio")] public JoinDataComplete OutputAudio = new JoinDataComplete(new JoinData { JoinNumber = 301, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Output Audio Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// DM Chassis Input Name + /// [JoinName("InputNames")] public JoinDataComplete InputNames = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Output Name + /// [JoinName("OutputNames")] public JoinDataComplete OutputNames = new JoinDataComplete(new JoinData { JoinNumber = 301, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Output Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Video Input Name + /// [JoinName("InputVideoNames")] public JoinDataComplete InputVideoNames = new JoinDataComplete(new JoinData { JoinNumber = 501, JoinSpan = 32 }, new JoinMetadata { - Description = "Video Input Name", + Description = "DM Chassis Video Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Audio Input Name + /// [JoinName("InputAudioNames")] public JoinDataComplete InputAudioNames = new JoinDataComplete(new JoinData { JoinNumber = 701, JoinSpan = 32 }, @@ -74,6 +116,10 @@ public class DmpsRoutingControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + + /// + /// DM Chassis Video Output Name + /// [JoinName("OutputVideoNames")] public JoinDataComplete OutputVideoNames = new JoinDataComplete(new JoinData { JoinNumber = 901, JoinSpan = 32 }, @@ -83,6 +129,10 @@ public class DmpsRoutingControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + + /// + /// DM Chassis Audio Output Name + /// [JoinName("OutputAudioNames")] public JoinDataComplete OutputAudioNames = new JoinDataComplete(new JoinData { JoinNumber = 1101, JoinSpan = 32 }, @@ -92,15 +142,24 @@ public class DmpsRoutingControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Video Output Currently Routed Video Input Name + /// [JoinName("OutputCurrentVideoInputNames")] public JoinDataComplete OutputCurrentVideoInputNames = new JoinDataComplete(new JoinData { JoinNumber = 2001, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Video Output Currently Routed Video Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Audio Output Currently Routed Video Input Name + /// [JoinName("OutputCurrentAudioInputNames")] public JoinDataComplete OutputCurrentAudioInputNames = new JoinDataComplete(new JoinData { JoinNumber = 2201, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Audio Output Currently Routed Video Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); - + + /// + /// DM Chassis Input Current Resolution + /// [JoinName("InputCurrentResolution")] public JoinDataComplete InputCurrentResolution = new JoinDataComplete(new JoinData { JoinNumber = 2401, JoinSpan = 32 }, new JoinMetadata { Description = "DM Chassis Input Current Resolution", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GenericIrControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GenericIrControllerJoinMap.cs index 388e6ac13..579777370 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GenericIrControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GenericIrControllerJoinMap.cs @@ -2,8 +2,14 @@ namespace PepperDash.Essentials.Core.Bridges.JoinMaps { + /// + /// Represents a GenericIrControllerJoinMap + /// public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced { + /// + /// PLAY + /// [JoinName("PLAY")] public JoinDataComplete Play = new JoinDataComplete( new JoinData @@ -17,7 +23,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// STOP + /// [JoinName("STOP")] public JoinDataComplete Stop = new JoinDataComplete( new JoinData @@ -31,7 +40,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// PAUSE + /// [JoinName("PAUSE")] public JoinDataComplete Pause = new JoinDataComplete( new JoinData @@ -46,6 +58,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// FSCAN + /// [JoinName("FSCAN")] public JoinDataComplete ForwardScan = new JoinDataComplete( new JoinData @@ -60,6 +75,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// RSCAN + /// [JoinName("RSCAN")] public JoinDataComplete ReverseScan = new JoinDataComplete( new JoinData @@ -73,7 +91,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// F_SKIP + /// [JoinName("F_SKIP")] public JoinDataComplete ForwardSkip = new JoinDataComplete( new JoinData @@ -88,6 +109,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// R_SKIP + /// [JoinName("R_SKIP")] public JoinDataComplete ReverseSkip = new JoinDataComplete( new JoinData @@ -101,7 +125,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// RECORD + /// [JoinName("RECORD")] public JoinDataComplete Record = new JoinDataComplete( new JoinData @@ -116,6 +143,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// POWER + /// [JoinName("POWER")] public JoinDataComplete Power = new JoinDataComplete( new JoinData @@ -130,6 +160,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// 0 + /// [JoinName("0")] public JoinDataComplete Kp0 = new JoinDataComplete( new JoinData @@ -143,7 +176,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// 1 + /// [JoinName("1")] public JoinDataComplete Kp1 = new JoinDataComplete( new JoinData @@ -157,7 +193,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// 2 + /// [JoinName("2")] public JoinDataComplete Kp2 = new JoinDataComplete( new JoinData @@ -171,7 +210,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// 3 + /// [JoinName("3")] public JoinDataComplete Kp3 = new JoinDataComplete( new JoinData @@ -185,7 +227,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// 4 + /// [JoinName("4")] public JoinDataComplete Kp4 = new JoinDataComplete( new JoinData @@ -199,7 +244,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// 5 + /// [JoinName("5")] public JoinDataComplete Kp5 = new JoinDataComplete( new JoinData @@ -213,7 +261,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// 6 + /// [JoinName("6")] public JoinDataComplete Kp6 = new JoinDataComplete( new JoinData @@ -227,7 +278,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// 7 + /// [JoinName("7")] public JoinDataComplete Kp7 = new JoinDataComplete( new JoinData @@ -241,7 +295,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// 8 + /// [JoinName("8")] public JoinDataComplete Kp8 = new JoinDataComplete( new JoinData @@ -255,7 +312,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// 9 + /// [JoinName("9")] public JoinDataComplete Kp9 = new JoinDataComplete( new JoinData @@ -283,7 +343,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced // JoinCapabilities = eJoinCapabilities.FromSIMPL, // JoinType = eJoinType.Digital // }); - + + /// + /// ENTER + /// [JoinName("ENTER")] public JoinDataComplete Enter = new JoinDataComplete( new JoinData @@ -297,7 +360,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// CH+ + /// [JoinName("CH+")] public JoinDataComplete ChannelUp = new JoinDataComplete( new JoinData @@ -311,7 +377,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// CH- + /// [JoinName("CH-")] public JoinDataComplete ChannelDown = new JoinDataComplete( new JoinData @@ -325,7 +394,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// * + /// [JoinName("*")] public JoinDataComplete KpStar = new JoinDataComplete( new JoinData @@ -339,7 +411,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// # + /// [JoinName("#")] public JoinDataComplete KpPound = new JoinDataComplete( new JoinData @@ -368,6 +443,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced // JoinType = eJoinType.Digital // }); + /// + /// POWER_ON + /// [JoinName("POWER_ON")] public JoinDataComplete PowerOn = new JoinDataComplete( new JoinData @@ -381,7 +459,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// POWER_OFF + /// [JoinName("POWER_OFF")] public JoinDataComplete PowerOff = new JoinDataComplete( new JoinData @@ -395,7 +476,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// PLAY_PAUSE + /// [JoinName("PLAY_PAUSE")] public JoinDataComplete PlayPause = new JoinDataComplete( new JoinData @@ -409,7 +493,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// LAST + /// [JoinName("LAST")] public JoinDataComplete Last = new JoinDataComplete( new JoinData @@ -424,6 +511,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// HOME + /// [JoinName("HOME")] public JoinDataComplete Home = new JoinDataComplete( new JoinData @@ -438,6 +528,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// BACK + /// [JoinName("BACK")] public JoinDataComplete Back = new JoinDataComplete( new JoinData @@ -452,7 +545,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); - + /// + /// GUIDE + /// [JoinName("GUIDE")] public JoinDataComplete Guide = new JoinDataComplete( new JoinData @@ -466,7 +561,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// INFO + /// [JoinName("INFO")] public JoinDataComplete Info = new JoinDataComplete( new JoinData @@ -480,7 +578,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// MENU + /// [JoinName("MENU")] public JoinDataComplete Menu = new JoinDataComplete( new JoinData @@ -494,7 +595,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// UP_ARROW + /// [JoinName("UP_ARROW")] public JoinDataComplete DpadUp = new JoinDataComplete( new JoinData @@ -508,7 +612,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// DN_ARROW + /// [JoinName("DN_ARROW")] public JoinDataComplete DpadDown = new JoinDataComplete( new JoinData @@ -522,7 +629,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// LEFT_ARROW + /// [JoinName("LEFT_ARROW")] public JoinDataComplete DpadLeft = new JoinDataComplete( new JoinData @@ -536,7 +646,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// RIGHT_ARROW + /// [JoinName("RIGHT_ARROW")] public JoinDataComplete DpadRight = new JoinDataComplete( new JoinData @@ -550,7 +663,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// SELECT + /// [JoinName("SELECT")] public JoinDataComplete DpadSelect = new JoinDataComplete( new JoinData @@ -564,7 +680,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// OPTIONS + /// [JoinName("OPTIONS")] public JoinDataComplete Options = new JoinDataComplete( new JoinData @@ -578,7 +697,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// RETURN + /// [JoinName("RETURN")] public JoinDataComplete Return = new JoinDataComplete( new JoinData @@ -593,6 +715,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DVR + /// [JoinName("DVR")] public JoinDataComplete Dvr = new JoinDataComplete( new JoinData @@ -607,7 +732,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); - + /// + /// ON_DEMAND + /// [JoinName("ON_DEMAND")] public JoinDataComplete OnDemand = new JoinDataComplete( new JoinData @@ -622,7 +749,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); - + /// + /// PAGE_UP + /// [JoinName("PAGE_UP")] public JoinDataComplete PageUp = new JoinDataComplete( new JoinData @@ -636,7 +765,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// PAGE_DOWN + /// [JoinName("PAGE_DOWN")] public JoinDataComplete PageDown = new JoinDataComplete( new JoinData @@ -650,7 +782,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// F_SRCH + /// [JoinName("F_SRCH")] public JoinDataComplete ForwardSearch = new JoinDataComplete( new JoinData @@ -664,7 +799,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// R_SRCH + /// [JoinName("R_SRCH")] public JoinDataComplete ReverseSearch = new JoinDataComplete( new JoinData @@ -678,7 +816,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// TRACK+ + /// [JoinName("TRACK+")] public JoinDataComplete TrackPlus = new JoinDataComplete( new JoinData @@ -692,7 +833,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// TRACK- + /// [JoinName("TRACK-")] public JoinDataComplete TrackMinus = new JoinDataComplete( new JoinData @@ -707,6 +851,9 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// A + /// [JoinName("A")] public JoinDataComplete KpA = new JoinDataComplete( new JoinData @@ -720,7 +867,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// B + /// [JoinName("B")] public JoinDataComplete KpB = new JoinDataComplete( new JoinData @@ -734,7 +884,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// C + /// [JoinName("C")] public JoinDataComplete KpC = new JoinDataComplete( new JoinData @@ -748,7 +901,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// D + /// [JoinName("D")] public JoinDataComplete KpD = new JoinDataComplete( new JoinData @@ -762,7 +918,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// RED + /// [JoinName("RED")] public JoinDataComplete KpRed = new JoinDataComplete( new JoinData @@ -776,7 +935,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// GREEN + /// [JoinName("GREEN")] public JoinDataComplete KpGreen = new JoinDataComplete( new JoinData @@ -790,7 +952,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// YELLOW + /// [JoinName("YELLOW")] public JoinDataComplete KpYellow = new JoinDataComplete( new JoinData @@ -804,7 +969,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// BLUE + /// [JoinName("BLUE")] public JoinDataComplete KpBlue = new JoinDataComplete( new JoinData @@ -819,6 +987,10 @@ public sealed class GenericIrControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Constructor + /// + /// Join this join map will start at public GenericIrControllerJoinMap(uint joinStart) : base(joinStart, typeof(GenericIrControllerJoinMap)) { diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GenericLightingJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GenericLightingJoinMap.cs index e98fdaf33..2b684d9fb 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GenericLightingJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GenericLightingJoinMap.cs @@ -9,22 +9,37 @@ namespace PepperDash.Essentials.Core.Bridges public class GenericLightingJoinMap : JoinMapBaseAdvanced { + /// + /// Lighting Controller Online + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Lighting Controller Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Select Scene By Index + /// [JoinName("SelectScene")] public JoinDataComplete SelectScene = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Lighting Controller Select Scene By Index", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Select Scene Direct + /// [JoinName("SelectSceneDirect")] public JoinDataComplete SelectSceneDirect = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 10 }, new JoinMetadata { Description = "Lighting Controller Select Scene", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.DigitalSerial }); - + + /// + /// Button Visibility + /// [JoinName("ButtonVisibility")] public JoinDataComplete ButtonVisibility = new JoinDataComplete(new JoinData { JoinNumber = 41, JoinSpan = 10 }, new JoinMetadata { Description = "Lighting Controller Button Visibility", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Set Integration Id + /// [JoinName("IntegrationIdSet")] public JoinDataComplete IntegrationIdSet = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Lighting Controller Set Integration Id", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Serial }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GenericRelayControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GenericRelayControllerJoinMap.cs index 65e49843d..470dc4e16 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GenericRelayControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GenericRelayControllerJoinMap.cs @@ -8,6 +8,9 @@ namespace PepperDash.Essentials.Core.Bridges public class GenericRelayControllerJoinMap : JoinMapBaseAdvanced { + /// + /// Device Relay State Set / Get + /// [JoinName("Relay")] public JoinDataComplete Relay = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Device Relay State Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GlsOccupancySensorBaseJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GlsOccupancySensorBaseJoinMap.cs index ca2239214..23341e7eb 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GlsOccupancySensorBaseJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GlsOccupancySensorBaseJoinMap.cs @@ -7,158 +7,275 @@ namespace PepperDash.Essentials.Core.Bridges /// public class GlsOccupancySensorBaseJoinMap : JoinMapBaseAdvanced { + /// + /// Occ Sensor Is Online + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Is Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Set to Occupied + /// [JoinName("ForceOccupied")] public JoinDataComplete ForceOccupied = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Set to Occupied", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Set to Vacant + /// [JoinName("ForceVacant")] public JoinDataComplete ForceVacant = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Set to Vacant", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Enable Raw + /// [JoinName("EnableRawStates")] public JoinDataComplete EnableRawStates = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Enable Raw", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Disable Raw + /// [JoinName("RoomOccupiedFeedback")] public JoinDataComplete RoomOccupiedFeedback = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Room Is Occupied", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Grace Occupancy Detected + /// [JoinName("GraceOccupancyDetectedFeedback")] public JoinDataComplete GraceOccupancyDetectedFeedback = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Grace Occupancy Detected", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Room Is Vacant + /// [JoinName("RoomVacantFeedback")] public JoinDataComplete RoomVacantFeedback = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Room Is Vacant", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Raw Occupancy Detected + /// [JoinName("RawOccupancyFeedback")] public JoinDataComplete RawOccupancyFeedback = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Raw Occupancy Detected", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Raw PIR Occupancy Detected + /// [JoinName("RawOccupancyPirFeedback")] public JoinDataComplete RawOccupancyPirFeedback = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Raw PIR Occupancy Detected", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Raw US Occupancy Detected + /// [JoinName("RawOccupancyUsFeedback")] public JoinDataComplete RawOccupancyUsFeedback = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Raw US Occupancy Detected", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Enable LED Flash + /// [JoinName("EnableLedFlash")] public JoinDataComplete EnableLedFlash = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Enable LED Flash", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Disable LED Flash + /// [JoinName("DisableLedFlash")] public JoinDataComplete DisableLedFlash = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Disable LED Flash", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Enable Short Timeout + /// [JoinName("EnableShortTimeout")] public JoinDataComplete EnableShortTimeout = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Enable Short Timeout", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Disable Short Timeout + /// [JoinName("DisableShortTimeout")] public JoinDataComplete DisableShortTimeout = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Disable Short Timeout", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Set To Vacant when Either Sensor is Vacant + /// [JoinName("OrWhenVacated")] public JoinDataComplete OrWhenVacated = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Set To Vacant when Either Sensor is Vacant", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Set To Vacant when Both Sensors are Vacant + /// [JoinName("AndWhenVacated")] public JoinDataComplete AndWhenVacated = new JoinDataComplete(new JoinData { JoinNumber = 16, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Set To Vacant when Both Sensors are Vacant", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Enable Ultrasonic Sensor A + /// [JoinName("EnableUsA")] public JoinDataComplete EnableUsA = new JoinDataComplete(new JoinData { JoinNumber = 17, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Enable Ultrasonic Sensor A", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Disable Ultrasonic Sensor A + /// [JoinName("DisableUsA")] public JoinDataComplete DisableUsA = new JoinDataComplete(new JoinData { JoinNumber = 18, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Disable Ultrasonic Sensor A", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Enable Ultrasonic Sensor B + /// [JoinName("EnableUsB")] public JoinDataComplete EnableUsB = new JoinDataComplete(new JoinData { JoinNumber = 19, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Enable Ultrasonic Sensor B", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Disable Ultrasonic Sensor B + /// [JoinName("DisableUsB")] public JoinDataComplete DisableUsB = new JoinDataComplete(new JoinData { JoinNumber = 20, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Disable Ultrasonic Sensor B", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Enable IR Sensor + /// [JoinName("EnablePir")] public JoinDataComplete EnablePir = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Enable IR Sensor", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Disable IR Sensor + /// [JoinName("DisablePir")] public JoinDataComplete DisablePir = new JoinDataComplete(new JoinData { JoinNumber = 22, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Disable IR Sensor", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Increment US Occupied State Sensitivity + /// [JoinName("IncrementUsInOccupiedState")] public JoinDataComplete IncrementUsInOccupiedState = new JoinDataComplete(new JoinData { JoinNumber = 23, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Increment US Occupied State Sensitivity", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Decrement US Occupied State Sensitivity + /// [JoinName("DecrementUsInOccupiedState")] public JoinDataComplete DecrementUsInOccupiedState = new JoinDataComplete(new JoinData { JoinNumber = 24, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Decrement US Occupied State Sensitivity", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Increment US Vacant State Sensitivity + /// [JoinName("IncrementUsInVacantState")] public JoinDataComplete IncrementUsInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 25, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Increment US Vacant State Sensitivity", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Decrement US Vacant State Sensitivity + /// [JoinName("DecrementUsInVacantState")] public JoinDataComplete DecrementUsInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 26, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Decrement US Vacant State Sensitivity", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Increment IR Occupied State Sensitivity + /// [JoinName("IncrementPirInOccupiedState")] public JoinDataComplete IncrementPirInOccupiedState = new JoinDataComplete(new JoinData { JoinNumber = 27, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Increment IR Occupied State Sensitivity", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Decrement IR Occupied State Sensitivity + /// [JoinName("DecrementPirInOccupiedState")] public JoinDataComplete DecrementPirInOccupiedState = new JoinDataComplete(new JoinData { JoinNumber = 28, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Decrement IR Occupied State Sensitivity", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Increment IR Vacant State Sensitivity + /// [JoinName("IncrementPirInVacantState")] public JoinDataComplete IncrementPirInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 29, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Increment IR Vacant State Sensitivity", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Decrement IR Vacant State Sensitivity + /// [JoinName("DecrementPirInVacantState")] public JoinDataComplete DecrementPirInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 30, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Decrement IR Vacant State Sensitivity", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + + /// + /// Occ Sensor Timeout Value + /// [JoinName("Timeout")] public JoinDataComplete Timeout = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Timeout Value", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Occ Sensor Local Timeout Value + /// [JoinName("TimeoutLocalFeedback")] public JoinDataComplete TimeoutLocalFeedback = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Local Timeout Value", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Occ Sensor Internal PhotoSensor Value + /// [JoinName("InternalPhotoSensorValue")] public JoinDataComplete InternalPhotoSensorValue = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Internal PhotoSensor Value", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Occ Sensor External PhotoSensor Value + /// [JoinName("ExternalPhotoSensorValue")] public JoinDataComplete ExternalPhotoSensorValue = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor External PhotoSensor Value", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Occ Sensor Ultrasonic Sensitivity in Occupied State + /// [JoinName("UsSensitivityInOccupiedState")] public JoinDataComplete UsSensitivityInOccupiedState = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Ultrasonic Sensitivity in Occupied State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Occ Sensor Ultrasonic Sensitivity in Vacant State + /// [JoinName("UsSensitivityInVacantState")] public JoinDataComplete UsSensitivityInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Ultrasonic Sensitivity in Vacant State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Occ Sensor PIR Sensitivity in Occupied State + /// [JoinName("PirSensitivityInOccupiedState")] public JoinDataComplete PirSensitivityInOccupiedState = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor PIR Sensitivity in Occupied State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Occ Sensor PIR Sensitivity in Vacant State + /// [JoinName("PirSensitivityInVacantState")] public JoinDataComplete PirSensitivityInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor PIR Sensitivity in Vacant State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + + /// + /// Occ Sensor Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Occ Sensor Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GlsPartitionSensorJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GlsPartitionSensorJoinMap.cs index 466d0fed0..98c491ddf 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GlsPartitionSensorJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/GlsPartitionSensorJoinMap.cs @@ -11,6 +11,9 @@ public class GlsPartitionSensorJoinMap : JoinMapBaseAdvanced #region Digital + /// + /// Sensor Is Online + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete( new JoinData @@ -25,7 +28,9 @@ public class GlsPartitionSensorJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); - + /// + /// Sensor Enable + /// [JoinName("Enable")] public JoinDataComplete Enable = new JoinDataComplete( new JoinData @@ -40,6 +45,9 @@ public class GlsPartitionSensorJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Sensor Partition Sensed + /// [JoinName("PartitionSensed")] public JoinDataComplete PartitionSensed = new JoinDataComplete( new JoinData @@ -54,6 +62,9 @@ public class GlsPartitionSensorJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Sensor Partition Not Sensed + /// [JoinName("PartitionNotSensed")] public JoinDataComplete PartitionNotSensed = new JoinDataComplete( new JoinData @@ -68,6 +79,9 @@ public class GlsPartitionSensorJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Sensor Increase Sensitivity + /// [JoinName("IncreaseSensitivity")] public JoinDataComplete IncreaseSensitivity = new JoinDataComplete( new JoinData @@ -82,6 +96,9 @@ public class GlsPartitionSensorJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Sensor Decrease Sensitivity + /// [JoinName("DecreaseSensitivity")] public JoinDataComplete DecreaseSensitivity = new JoinDataComplete( new JoinData @@ -100,6 +117,9 @@ public class GlsPartitionSensorJoinMap : JoinMapBaseAdvanced #region Analog + /// + /// Sensor Sensitivity + /// [JoinName("Sensitivity")] public JoinDataComplete Sensitivity = new JoinDataComplete( new JoinData @@ -119,6 +139,9 @@ public class GlsPartitionSensorJoinMap : JoinMapBaseAdvanced #region Serial + /// + /// Sensor Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete( new JoinData diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/HdMdNxM4kEControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/HdMdNxM4kEControllerJoinMap.cs index cbc5d9ae5..950e3f1e9 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/HdMdNxM4kEControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/HdMdNxM4kEControllerJoinMap.cs @@ -7,42 +7,72 @@ namespace PepperDash.Essentials.Core.Bridges /// public class HdMdNxM4kEControllerJoinMap : JoinMapBaseAdvanced { + /// + /// Device Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Device Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Enable Automatic Routing on 4x1 Switchers + /// [JoinName("EnableAutoRoute")] public JoinDataComplete EnableAutoRoute = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Enable Automatic Routing on 4x1 Switchers", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Device Input Name + /// [JoinName("InputName")] public JoinDataComplete InputName = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 8 }, new JoinMetadata { Description = "Device Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Device Input Sync + /// [JoinName("InputSync")] public JoinDataComplete InputSync = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 8 }, new JoinMetadata { Description = "Device Input Sync", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Device Output Name + /// [JoinName("OutputName")] public JoinDataComplete OutputName = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 2 }, new JoinMetadata { Description = "Device Output Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Device Output Route Set/Get + /// [JoinName("OutputRoute")] public JoinDataComplete OutputRoute = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 2 }, new JoinMetadata { Description = "Device Output Route Set/Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); + /// + /// Device Output Route Name + /// [JoinName("OutputRoutedName")] public JoinDataComplete OutputRoutedName = new JoinDataComplete(new JoinData { JoinNumber = 16, JoinSpan = 2 }, new JoinMetadata { Description = "Device Output Route Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Device Enable Input Hdcp + /// [JoinName("EnableInputHdcp")] public JoinDataComplete EnableInputHdcp = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 8 }, new JoinMetadata { Description = "Device Enable Input Hdcp", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Device Disable Input Hdcp + /// [JoinName("DisableInputHdcp")] public JoinDataComplete DisableInputHdcp = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 8 }, new JoinMetadata { Description = "Device Disnable Input Hdcp", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Device Online Status + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 30, JoinSpan = 1 }, new JoinMetadata { Description = "Device Onlne", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/HdMdxxxCEControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/HdMdxxxCEControllerJoinMap.cs index ea1a9784a..2730a0ead 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/HdMdxxxCEControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/HdMdxxxCEControllerJoinMap.cs @@ -8,50 +8,85 @@ namespace PepperDash.Essentials.Core.Bridges public class HdMdxxxCEControllerJoinMap : JoinMapBaseAdvanced { + /// + /// Device Online + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Device Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Remote End Detected + /// [JoinName("RemoteEndDetected")] public JoinDataComplete RemoteEndDetected = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Device Remote End Detected", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Auto Route On + /// [JoinName("AutoRouteOn")] public JoinDataComplete AutoRouteOn = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Device Auto Route On", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Auto Route Off + /// [JoinName("AutoRouteOff")] public JoinDataComplete AutoRouteOff = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Device Auto Route Off", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Priority Routing On + /// [JoinName("PriorityRoutingOn")] public JoinDataComplete PriorityRoutingOn = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Device Priority Routing On", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Priority Routing Off + /// [JoinName("PriorityRoutingOff")] public JoinDataComplete PriorityRoutingOff = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "Device Priority Routing Off", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Input On Screen Display Enabled + /// [JoinName("InputOnScreenDisplayEnabled")] public JoinDataComplete InputOnScreenDisplayEnabled = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "Device Input OSD Enabled", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Input On Screen Display Disabled + /// [JoinName("InputOnScreenDisplayDisabled")] public JoinDataComplete InputOnScreenDisplayDisabled = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 }, new JoinMetadata { Description = "Device Input OSD Disabled", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Sync Detected + /// [JoinName("SyncDetected")] public JoinDataComplete SyncDetected = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 5 }, new JoinMetadata { Description = "Device Sync Detected", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Video Source + /// [JoinName("VideoSource")] public JoinDataComplete VideoSource = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 5 }, new JoinMetadata { Description = "Device Video Source Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); + /// + /// Source Count + /// [JoinName("SourceCount")] public JoinDataComplete SourceCount = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 5 }, new JoinMetadata { Description = "Device Video Source Count", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); - + /// + /// Source Names + /// [JoinName("SourceNames")] public JoinDataComplete SourceNames = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 5 }, new JoinMetadata { Description = "Device Video Source Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/HdPsXxxControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/HdPsXxxControllerJoinMap.cs index c4cd5dcb4..aee3c2f13 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/HdPsXxxControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/HdPsXxxControllerJoinMap.cs @@ -11,6 +11,9 @@ public class HdPsXxxControllerJoinMap : JoinMapBaseAdvanced #region Digital + /// + /// Enable Automatic Routing on Xx1 Switchers + /// [JoinName("EnableAutoRoute")] public JoinDataComplete EnableAutoRoute = new JoinDataComplete( new JoinData @@ -25,7 +28,9 @@ public class HdPsXxxControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); - + /// + /// Device Input Sync + /// [JoinName("InputSync")] public JoinDataComplete InputSync = new JoinDataComplete( new JoinData @@ -40,7 +45,9 @@ public class HdPsXxxControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); - + /// + /// Device Enable Input Hdcp + /// [JoinName("EnableInputHdcp")] public JoinDataComplete EnableInputHdcp = new JoinDataComplete( new JoinData @@ -55,7 +62,9 @@ public class HdPsXxxControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); - + /// + /// Device Disnable Input Hdcp + /// [JoinName("DisableInputHdcp")] public JoinDataComplete DisableInputHdcp = new JoinDataComplete( new JoinData @@ -70,7 +79,9 @@ public class HdPsXxxControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); - + /// + /// Device Onlne + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete( new JoinData @@ -90,6 +101,9 @@ public class HdPsXxxControllerJoinMap : JoinMapBaseAdvanced #region Analog + /// + /// Device Input Route Set/Get + /// [JoinName("OutputRoute")] public JoinDataComplete OutputRoute = new JoinDataComplete( new JoinData @@ -109,6 +123,9 @@ public class HdPsXxxControllerJoinMap : JoinMapBaseAdvanced #region Serial + /// + /// Device Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete( new JoinData @@ -123,7 +140,9 @@ public class HdPsXxxControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); - + /// + /// Device Input Name + /// [JoinName("InputName")] public JoinDataComplete InputName = new JoinDataComplete( new JoinData @@ -138,7 +157,9 @@ public class HdPsXxxControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); - + /// + /// Device Output Name + /// [JoinName("OutputName")] public JoinDataComplete OutputName = new JoinDataComplete( new JoinData @@ -153,7 +174,9 @@ public class HdPsXxxControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); - + /// + /// Device Output Route Name + /// [JoinName("OutputRoutedName")] public JoinDataComplete OutputRoutedName = new JoinDataComplete( new JoinData diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/Hrxxx0WirelessRemoteControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/Hrxxx0WirelessRemoteControllerJoinMap.cs index c93da2f7f..5c4c858e6 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/Hrxxx0WirelessRemoteControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/Hrxxx0WirelessRemoteControllerJoinMap.cs @@ -7,222 +7,387 @@ namespace PepperDash.Essentials.Core.Bridges /// public class Hrxxx0WirelessRemoteControllerJoinMap : JoinMapBaseAdvanced { + /// + /// Power + /// [JoinName("Power")] public JoinDataComplete Power = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Power", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Menu + /// [JoinName("Menu")] public JoinDataComplete Menu = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Menu", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Guide + /// [JoinName("Guide")] public JoinDataComplete Guide = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Guide", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Info + /// [JoinName("Info")] public JoinDataComplete Info = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Info", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// VolumeUp + /// [JoinName("VolumeUp")] public JoinDataComplete VolumeUp = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "VolumeUp", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// VolumeDown + /// [JoinName("VolumeDown")] public JoinDataComplete VolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "VolumeDown", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// DialPadUp + /// [JoinName("DialPadUp")] public JoinDataComplete DialPadUp = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "DialPadUp", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// DialPadDown + /// [JoinName("DialPadDown")] public JoinDataComplete DialPadDown = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 }, new JoinMetadata { Description = "DialPadDown", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// DialPadLeft + /// [JoinName("DialPadLeft")] public JoinDataComplete DialPadLeft = new JoinDataComplete(new JoinData { JoinNumber = 9, JoinSpan = 1 }, new JoinMetadata { Description = "DialPadLeft", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// DialPadRight + /// [JoinName("DialPadRight")] public JoinDataComplete DialPadRight = new JoinDataComplete(new JoinData { JoinNumber = 10, JoinSpan = 1 }, new JoinMetadata { Description = "DialPadRight", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// DialPadSelect + /// [JoinName("DialPadSelect")] public JoinDataComplete DialPadSelect = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "DialPadSelect", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// ChannelUp + /// [JoinName("ChannelUp")] public JoinDataComplete ChannelUp = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 }, new JoinMetadata { Description = "ChannelUp", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// ChannelDown + /// [JoinName("ChannelDown")] public JoinDataComplete ChannelDown = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 }, new JoinMetadata { Description = "ChannelDown", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Mute + /// [JoinName("Mute")] public JoinDataComplete Mute = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 }, new JoinMetadata { Description = "Mute", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Exit + /// [JoinName("Exit")] public JoinDataComplete Exit = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 }, new JoinMetadata { Description = "Exit", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Last + /// [JoinName("Last")] public JoinDataComplete Last = new JoinDataComplete(new JoinData { JoinNumber = 16, JoinSpan = 1 }, new JoinMetadata { Description = "Last", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Play + /// [JoinName("Play")] public JoinDataComplete Play = new JoinDataComplete(new JoinData { JoinNumber = 17, JoinSpan = 1 }, new JoinMetadata { Description = "Play", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Pause + /// [JoinName("Pause")] public JoinDataComplete Pause = new JoinDataComplete(new JoinData { JoinNumber = 18, JoinSpan = 1 }, new JoinMetadata { Description = "Pause", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Rewind + /// [JoinName("Rewind")] public JoinDataComplete Rewind = new JoinDataComplete(new JoinData { JoinNumber = 19, JoinSpan = 1 }, new JoinMetadata { Description = "Rewind", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// FastForward + /// [JoinName("FastForward")] public JoinDataComplete FastForward = new JoinDataComplete(new JoinData { JoinNumber = 20, JoinSpan = 1 }, new JoinMetadata { Description = "FastForward", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// PreviousTrack + /// [JoinName("PreviousTrack")] public JoinDataComplete PreviousTrack = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 1 }, new JoinMetadata { Description = "PreviousTrack", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// NextTrack + /// [JoinName("NextTrack")] public JoinDataComplete NextTrack = new JoinDataComplete(new JoinData { JoinNumber = 22, JoinSpan = 1 }, new JoinMetadata { Description = "NextTrack", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Stop + /// [JoinName("Stop")] public JoinDataComplete Stop = new JoinDataComplete(new JoinData { JoinNumber = 23, JoinSpan = 1 }, new JoinMetadata { Description = "Stop", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Record + /// [JoinName("Record")] public JoinDataComplete Record = new JoinDataComplete(new JoinData { JoinNumber = 24, JoinSpan = 1 }, new JoinMetadata { Description = "Record", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Dvr + /// [JoinName("Dvr")] public JoinDataComplete Dvr = new JoinDataComplete(new JoinData { JoinNumber = 25, JoinSpan = 1 }, new JoinMetadata { Description = "Dvr", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad1 + /// [JoinName("Keypad1")] public JoinDataComplete Keypad1 = new JoinDataComplete(new JoinData { JoinNumber = 26, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad1", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad2Abc + /// [JoinName("Keypad2Abc")] public JoinDataComplete Keypad2 = new JoinDataComplete(new JoinData { JoinNumber = 27, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad2Abc", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad3Def + /// [JoinName("Keypad3Def")] public JoinDataComplete Keypad3Def = new JoinDataComplete(new JoinData { JoinNumber = 28, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad3Def", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad4Ghi + /// [JoinName("Keypad4Ghi")] public JoinDataComplete Keypad4Ghi = new JoinDataComplete(new JoinData { JoinNumber = 29, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad4Ghi", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad5Jkl + /// [JoinName("Keypad5Jkl")] public JoinDataComplete Keypad5Jkl = new JoinDataComplete(new JoinData { JoinNumber = 30, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad5Jkl", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad6Mno + /// [JoinName("Keypad6Mno")] public JoinDataComplete Keypad6Mno = new JoinDataComplete(new JoinData { JoinNumber = 31, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad6Mno", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad7Pqrs + /// [JoinName("Keypad7Pqrs")] public JoinDataComplete Keypad7Pqrs = new JoinDataComplete(new JoinData { JoinNumber = 32, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad7Pqrs", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad8Tuv + /// [JoinName("Keypad8Tuv")] public JoinDataComplete Keypad8Tuv = new JoinDataComplete(new JoinData { JoinNumber = 33, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad8Tuv", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad9Wxyz + /// [JoinName("Keypad9Wxyz")] public JoinDataComplete Keypad9Wxyz = new JoinDataComplete(new JoinData { JoinNumber = 34, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad9Wxyz", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad0 + /// [JoinName("Keypad0")] public JoinDataComplete Keypad0 = new JoinDataComplete(new JoinData { JoinNumber = 35, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad0", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Clear + /// [JoinName("Clear")] public JoinDataComplete Clear = new JoinDataComplete(new JoinData { JoinNumber = 36, JoinSpan = 1 }, new JoinMetadata { Description = "Clear", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Enter + /// [JoinName("Enter")] public JoinDataComplete Enter = new JoinDataComplete(new JoinData { JoinNumber = 37, JoinSpan = 1 }, new JoinMetadata { Description = "Enter", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Red + /// [JoinName("Red")] public JoinDataComplete Red = new JoinDataComplete(new JoinData { JoinNumber = 38, JoinSpan = 1 }, new JoinMetadata { Description = "Red", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Green + /// [JoinName("Green")] public JoinDataComplete Green = new JoinDataComplete(new JoinData { JoinNumber = 39, JoinSpan = 1 }, new JoinMetadata { Description = "Green", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Yellow + /// [JoinName("Yellow")] public JoinDataComplete Yellow = new JoinDataComplete(new JoinData { JoinNumber = 40, JoinSpan = 1 }, new JoinMetadata { Description = "Yellow", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Blue + /// [JoinName("Blue")] public JoinDataComplete Blue = new JoinDataComplete(new JoinData { JoinNumber = 41, JoinSpan = 1 }, new JoinMetadata { Description = "Blue", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Custom1 + /// [JoinName("Custom1")] public JoinDataComplete Custom1 = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 1 }, new JoinMetadata { Description = "Custom1", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Custom2 + /// [JoinName("Custom2")] public JoinDataComplete Custom2 = new JoinDataComplete(new JoinData { JoinNumber = 43, JoinSpan = 1 }, new JoinMetadata { Description = "Custom2", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Custom3 + /// [JoinName("Custom3")] public JoinDataComplete Custom3 = new JoinDataComplete(new JoinData { JoinNumber = 44, JoinSpan = 1 }, new JoinMetadata { Description = "Custom3", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Custom4 + /// [JoinName("Custom4")] public JoinDataComplete Custom4 = new JoinDataComplete(new JoinData { JoinNumber = 45, JoinSpan = 1 }, new JoinMetadata { Description = "Custom4", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Custom5 + /// [JoinName("Custom5")] public JoinDataComplete Custom5 = new JoinDataComplete(new JoinData { JoinNumber = 46, JoinSpan = 1 }, new JoinMetadata { Description = "Custom5", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Custom6 + /// [JoinName("Custom6")] public JoinDataComplete Custom6 = new JoinDataComplete(new JoinData { JoinNumber = 47, JoinSpan = 1 }, new JoinMetadata { Description = "Custom6", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Custom7 + /// [JoinName("Custom7")] public JoinDataComplete Custom7 = new JoinDataComplete(new JoinData { JoinNumber = 48, JoinSpan = 1 }, new JoinMetadata { Description = "Custom7", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Custom8 + /// [JoinName("Custom8")] public JoinDataComplete Custom8 = new JoinDataComplete(new JoinData { JoinNumber = 49, JoinSpan = 1 }, new JoinMetadata { Description = "Custom8", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Custom9 + /// [JoinName("Custom9")] public JoinDataComplete Custom9 = new JoinDataComplete(new JoinData { JoinNumber = 50, JoinSpan = 1 }, new JoinMetadata { Description = "Custom9", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Fav + /// [JoinName("Fav")] public JoinDataComplete Fav = new JoinDataComplete(new JoinData { JoinNumber = 51, JoinSpan = 1 }, new JoinMetadata { Description = "Fav", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Home + /// [JoinName("Home")] public JoinDataComplete Home = new JoinDataComplete(new JoinData { JoinNumber = 52, JoinSpan = 1 }, new JoinMetadata { Description = "Home", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// BatteryLow + /// [JoinName("BatteryLow")] public JoinDataComplete BatteryLow = new JoinDataComplete(new JoinData { JoinNumber = 53, JoinSpan = 1 }, new JoinMetadata { Description = "BatteryLow", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// BatteryCritical + /// [JoinName("BatteryCritical")] public JoinDataComplete BatteryCritical = new JoinDataComplete(new JoinData { JoinNumber = 54, JoinSpan = 1 }, new JoinMetadata { Description = "BatteryCritical", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// BatteryVoltage + /// [JoinName("BatteryVoltage")] public JoinDataComplete BatteryVoltage = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "BatteryVoltage", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IAnalogInputJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IAnalogInputJoinMap.cs index dc4c29f1b..59f903474 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IAnalogInputJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IAnalogInputJoinMap.cs @@ -8,9 +8,16 @@ namespace PepperDash.Essentials.Core.Bridges public class IAnalogInputJoinMap : JoinMapBaseAdvanced { + /// + /// Input Value + /// [JoinName("InputValue")] public JoinDataComplete InputValue = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Input Value", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); + + /// + /// Minimum Change + /// [JoinName("MinimumChange")] public JoinDataComplete MinimumChange = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Minimum voltage change required to reflect a change", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IBasicCommunicationJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IBasicCommunicationJoinMap.cs index 303f9b1bd..b4c473cb5 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IBasicCommunicationJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IBasicCommunicationJoinMap.cs @@ -7,26 +7,44 @@ namespace PepperDash.Essentials.Core.Bridges /// public class IBasicCommunicationJoinMap : JoinMapBaseAdvanced { + /// + /// Text Received From Remote Device + /// [JoinName("TextReceived")] public JoinDataComplete TextReceived = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Text Received From Remote Device", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Text Sent To Remote Device + /// [JoinName("SendText")] public JoinDataComplete SendText = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Text Sent To Remote Device", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Serial }); + /// + /// Set Port Config + /// [JoinName("SetPortConfig")] public JoinDataComplete SetPortConfig = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Set Port Config", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Serial }); + /// + /// Connect + /// [JoinName("Connect")] public JoinDataComplete Connect = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Connect", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Disconnect + /// [JoinName("Connected")] public JoinDataComplete Connected = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Connected", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Status + /// [JoinName("Status")] public JoinDataComplete Status = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Status", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IDigitalInputJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IDigitalInputJoinMap.cs index 77405182c..0f77fce33 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IDigitalInputJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IDigitalInputJoinMap.cs @@ -7,7 +7,9 @@ namespace PepperDash.Essentials.Core.Bridges /// public class IDigitalInputJoinMap : JoinMapBaseAdvanced { - + /// + /// Input State + /// [JoinName("InputState")] public JoinDataComplete InputState = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Input State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IDigitalOutputJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IDigitalOutputJoinMap.cs index 92d787725..05895acba 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IDigitalOutputJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IDigitalOutputJoinMap.cs @@ -7,7 +7,9 @@ namespace PepperDash.Essentials.Core.Bridges /// public class IDigitalOutputJoinMap : JoinMapBaseAdvanced { - + /// + /// Output State + /// [JoinName("OutputState")] public JoinDataComplete OutputState = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Get / Set state of Digital Input", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IRBlurayBaseJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IRBlurayBaseJoinMap.cs index 991489e9f..3e66eda69 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IRBlurayBaseJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/IRBlurayBaseJoinMap.cs @@ -11,191 +11,331 @@ namespace PepperDash.Essentials.Core.Bridges /// public class IRBlurayBaseJoinMap : JoinMapBaseAdvanced { + /// + /// Power On + /// [JoinName("PowerOn")] public JoinDataComplete PowerOn = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Power On", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Power Off + /// [JoinName("PowerOff")] public JoinDataComplete PowerOff = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Power Off", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Power Toggle + /// [JoinName("PowerToggle")] public JoinDataComplete PowerToggle = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Power Toggle", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Nav Up + /// [JoinName("Up")] public JoinDataComplete Up = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Nav Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Nav Down + /// [JoinName("Down")] public JoinDataComplete Down = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Nav Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Nav Left + /// [JoinName("Left")] public JoinDataComplete Left = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "Nav Left", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Nav Right + /// [JoinName("Right")] public JoinDataComplete Right = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "Nav Right", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Select + /// [JoinName("Select")] public JoinDataComplete Select = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 }, new JoinMetadata { Description = "Select", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Menu + /// [JoinName("Menu")] public JoinDataComplete Menu = new JoinDataComplete(new JoinData { JoinNumber = 9, JoinSpan = 1 }, new JoinMetadata { Description = "Menu", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Exit + /// [JoinName("Exit")] public JoinDataComplete Exit = new JoinDataComplete(new JoinData { JoinNumber = 10, JoinSpan = 1 }, new JoinMetadata { Description = "Exit", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Digit 0 + /// [JoinName("Digit0")] public JoinDataComplete Digit0 = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "Digit 0", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Digit 1 + /// [JoinName("Digit1")] public JoinDataComplete Digit1 = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 }, new JoinMetadata { Description = "Digit 1", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Digit 2 + /// [JoinName("Digit2")] public JoinDataComplete Digit2 = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 }, new JoinMetadata { Description = "Digit 2", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Digit 3 + /// [JoinName("Digit3")] public JoinDataComplete Digit3 = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 }, new JoinMetadata { Description = "Digit 3", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Digit 4 + /// [JoinName("Digit4")] public JoinDataComplete Digit4 = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 }, new JoinMetadata { Description = "Digit 4", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Digit 5 + /// [JoinName("Digit5")] public JoinDataComplete Digit5 = new JoinDataComplete(new JoinData { JoinNumber = 16, JoinSpan = 1 }, new JoinMetadata { Description = "Digit 5", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Digit 6 + /// [JoinName("Digit6")] public JoinDataComplete Digit6 = new JoinDataComplete(new JoinData { JoinNumber = 17, JoinSpan = 1 }, new JoinMetadata { Description = "Digit 6", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Digit 7 + /// [JoinName("Digit7")] public JoinDataComplete Digit7 = new JoinDataComplete(new JoinData { JoinNumber = 18, JoinSpan = 1 }, new JoinMetadata { Description = "Digit 7", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Digit 8 + /// [JoinName("Digit8")] public JoinDataComplete Digit8 = new JoinDataComplete(new JoinData { JoinNumber = 19, JoinSpan = 1 }, new JoinMetadata { Description = "Digit 8", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Digit 9 + /// [JoinName("Digit9")] public JoinDataComplete Digit9 = new JoinDataComplete(new JoinData { JoinNumber = 20, JoinSpan = 1 }, new JoinMetadata { Description = "Digit 9", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad Clear + /// [JoinName("KeypadClear")] public JoinDataComplete KeypadClear = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad Clear", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad Enter + /// [JoinName("KeypadEnter")] public JoinDataComplete KeypadEnter = new JoinDataComplete(new JoinData { JoinNumber = 22, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad Enter", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Channel Up + /// [JoinName("ChannelUp")] public JoinDataComplete ChannelUp = new JoinDataComplete(new JoinData { JoinNumber = 23, JoinSpan = 1 }, new JoinMetadata { Description = "STB Channel Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Channel Down + /// [JoinName("ChannelDown")] public JoinDataComplete ChannelDown = new JoinDataComplete(new JoinData { JoinNumber = 24, JoinSpan = 1 }, new JoinMetadata { Description = "STB Channel Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Last Channel + /// [JoinName("LastChannel")] public JoinDataComplete LastChannel = new JoinDataComplete(new JoinData { JoinNumber = 25, JoinSpan = 1 }, new JoinMetadata { Description = "Last Channel", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Guide + /// [JoinName("Guide")] public JoinDataComplete Guide = new JoinDataComplete(new JoinData { JoinNumber = 26, JoinSpan = 1 }, new JoinMetadata { Description = "Guide", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Info + /// [JoinName("Info")] public JoinDataComplete Info = new JoinDataComplete(new JoinData { JoinNumber = 27, JoinSpan = 1 }, new JoinMetadata { Description = "Info", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Red + /// [JoinName("Red")] public JoinDataComplete Red = new JoinDataComplete(new JoinData { JoinNumber = 28, JoinSpan = 1 }, new JoinMetadata { Description = "Red", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Green + /// [JoinName("Green")] public JoinDataComplete Green = new JoinDataComplete(new JoinData { JoinNumber = 29, JoinSpan = 1 }, new JoinMetadata { Description = "Green", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Yellow + /// [JoinName("Yellow")] public JoinDataComplete Yellow = new JoinDataComplete(new JoinData { JoinNumber = 30, JoinSpan = 1 }, new JoinMetadata { Description = "Yellow", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Blue + /// [JoinName("Blue")] public JoinDataComplete Blue = new JoinDataComplete(new JoinData { JoinNumber = 31, JoinSpan = 1 }, new JoinMetadata { Description = "Blue", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); - + /// + /// Play + /// [JoinName("Play")] public JoinDataComplete Play = new JoinDataComplete(new JoinData { JoinNumber = 33, JoinSpan = 1 }, new JoinMetadata { Description = "Play", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Pause + /// [JoinName("Pause")] public JoinDataComplete Pause = new JoinDataComplete(new JoinData { JoinNumber = 34, JoinSpan = 1 }, new JoinMetadata { Description = "Pause", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Stop + /// [JoinName("Stop")] public JoinDataComplete Stop = new JoinDataComplete(new JoinData { JoinNumber = 35, JoinSpan = 1 }, new JoinMetadata { Description = "Stop", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Fast Forward + /// [JoinName("FFwd")] public JoinDataComplete FFwd = new JoinDataComplete(new JoinData { JoinNumber = 36, JoinSpan = 1 }, new JoinMetadata { Description = "FFwd", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Rewind + /// [JoinName("Rewind")] public JoinDataComplete Rewind = new JoinDataComplete(new JoinData { JoinNumber = 37, JoinSpan = 1 }, new JoinMetadata { Description = "Rewind", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Chapter Plus + /// [JoinName("ChapPlus")] public JoinDataComplete ChapPlus = new JoinDataComplete(new JoinData { JoinNumber = 38, JoinSpan = 1 }, new JoinMetadata { Description = "Chapter Plus", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Chapter Minus + /// [JoinName("ChapMinus")] public JoinDataComplete ChapMinus = new JoinDataComplete(new JoinData { JoinNumber = 39, JoinSpan = 1 }, new JoinMetadata { Description = "Chapter Minus", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Replay + /// [JoinName("Replay")] public JoinDataComplete Replay = new JoinDataComplete(new JoinData { JoinNumber = 40, JoinSpan = 1 }, new JoinMetadata { Description = "Replay", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Record + /// [JoinName("Record")] public JoinDataComplete Record = new JoinDataComplete(new JoinData { JoinNumber = 41, JoinSpan = 1 }, new JoinMetadata { Description = "Record", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Has Keypad Accessory Button 1 + /// [JoinName("HasKeypadAccessoryButton1")] public JoinDataComplete HasKeypadAccessoryButton1 = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 1 }, new JoinMetadata { Description = "Has Keypad Accessory Button 1", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Has Keypad Accessory Button 2 + /// [JoinName("HasKeypadAccessoryButton2")] public JoinDataComplete HasKeypadAccessoryButton2 = new JoinDataComplete(new JoinData { JoinNumber = 43, JoinSpan = 1 }, new JoinMetadata { Description = "Has Keypad Accessory Button 2", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad Accessory Button 1 Press + /// [JoinName("KeypadAccessoryButton1Press")] public JoinDataComplete KeypadAccessoryButton1Press = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 2 }, new JoinMetadata { Description = "Keypad Accessory Button 1 Press", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad Accessory Button 2 Press + /// [JoinName("KeypadAccessoryButton2Press")] public JoinDataComplete KeypadAccessoryButton2Press = new JoinDataComplete(new JoinData { JoinNumber = 43, JoinSpan = 2 }, new JoinMetadata { Description = "Keypad Accessory Button 2 Press", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Keypad Accessory Button 1 Label + /// [JoinName("KeypadAccessoryButton1Label")] public JoinDataComplete KeypadAccessoryButton1Label = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad Accessory Button 1 Label", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Keypad Accessory Button 2 Label + /// [JoinName("KeypadAccessoryButton2Label")] public JoinDataComplete KeypadAccessoryButton2Label = new JoinDataComplete(new JoinData { JoinNumber = 43, JoinSpan = 1 }, new JoinMetadata { Description = "Keypad Accessory Button 1 Label", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/PduJoinMapBase.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/PduJoinMapBase.cs index e50d9b8f5..f52b96c44 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/PduJoinMapBase.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/PduJoinMapBase.cs @@ -7,34 +7,58 @@ namespace PepperDash.Essentials.Core.Bridges /// public class PduJoinMapBase : JoinMapBaseAdvanced { + /// + /// PDU Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "PDU Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// PDU Online Status + /// [JoinName("Online")] public JoinDataComplete Online = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Number of Controlled Outlets + /// [JoinName("OutletCount")] public JoinDataComplete OutletCount = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Number of COntrolled Outlets", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); + /// + /// Outlet Name + /// [JoinName("OutletName")] public JoinDataComplete OutletName = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "Outlet Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Outlet Enabled Status + /// [JoinName("OutletEnabled")] public JoinDataComplete OutletEnabled = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "Outlet Enabled", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Outlet Power State + /// [JoinName("OutletPowerCycle")] public JoinDataComplete OutletPowerCycle = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 }, new JoinMetadata { Description = "Outlet Power Cycle", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Outlet Power On + /// [JoinName("OutletPowerOn")] public JoinDataComplete OutletPowerOn = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 }, new JoinMetadata { Description = "Outlet Power On", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Outlet Power Off + /// [JoinName("OutletPowerOff")] public JoinDataComplete OutletPowerOff = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 }, new JoinMetadata { Description = "Outlet Power Off", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/SetTopBoxControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/SetTopBoxControllerJoinMap.cs index a5e2ea6f5..ce9a42905 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/SetTopBoxControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/SetTopBoxControllerJoinMap.cs @@ -8,214 +8,373 @@ namespace PepperDash.Essentials.Core.Bridges /// public class SetTopBoxControllerJoinMap : JoinMapBaseAdvanced { + /// + /// STB Power On + /// [JoinName("PowerOn")] public JoinDataComplete PowerOn = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "STB Power On", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Power Off + /// [JoinName("PowerOff")] public JoinDataComplete PowerOff = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "STB Power Off", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Power Toggle + /// [JoinName("PowerToggle")] public JoinDataComplete PowerToggle = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "STB Power Toggle", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Has DPad + /// [JoinName("HasDpad")] public JoinDataComplete HasDpad = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "STB Has DPad", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Nav Up + /// [JoinName("Up")] public JoinDataComplete Up = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "STB Nav Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Nav Down + /// [JoinName("Down")] public JoinDataComplete Down = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "STB Nav Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Nav Left + /// [JoinName("Left")] public JoinDataComplete Left = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "STB Nav Left", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Nav Right + /// [JoinName("Right")] public JoinDataComplete Right = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "STB Nav Right", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Select + /// [JoinName("Select")] public JoinDataComplete Select = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 }, new JoinMetadata { Description = "STB Select", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Menu + /// [JoinName("Menu")] public JoinDataComplete Menu = new JoinDataComplete(new JoinData { JoinNumber = 9, JoinSpan = 1 }, new JoinMetadata { Description = "STB Menu", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Exit + /// [JoinName("Exit")] public JoinDataComplete Exit = new JoinDataComplete(new JoinData { JoinNumber = 10, JoinSpan = 1 }, new JoinMetadata { Description = "STB Exit", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Has Numeric + /// [JoinName("HasNumeric")] public JoinDataComplete HasNumeric = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "STB Has Numeric", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Digit 0 + /// [JoinName("Digit0")] public JoinDataComplete Digit0 = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "STB Digit 0", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Digit 1 + /// [JoinName("Digit1")] public JoinDataComplete Digit1 = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 }, new JoinMetadata { Description = "STB Digit 1", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Digit 2 + /// [JoinName("Digit2")] public JoinDataComplete Digit2 = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 }, new JoinMetadata { Description = "STB Digit 2", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Digit 3 + /// [JoinName("Digit3")] public JoinDataComplete Digit3 = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 }, new JoinMetadata { Description = "STB Digit 3", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Digit 4 + /// [JoinName("Digit4")] public JoinDataComplete Digit4 = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 }, new JoinMetadata { Description = "STB Digit 4", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Digit 5 + /// [JoinName("Digit5")] public JoinDataComplete Digit5 = new JoinDataComplete(new JoinData { JoinNumber = 16, JoinSpan = 1 }, new JoinMetadata { Description = "STB Digit 5", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Digit 6 + /// [JoinName("Digit6")] public JoinDataComplete Digit6 = new JoinDataComplete(new JoinData { JoinNumber = 17, JoinSpan = 1 }, new JoinMetadata { Description = "STB Digit 6", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Digit 7 + /// [JoinName("Digit7")] public JoinDataComplete Digit7 = new JoinDataComplete(new JoinData { JoinNumber = 18, JoinSpan = 1 }, new JoinMetadata { Description = "STB Digit 7", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Digit 8 + /// [JoinName("Digit8")] public JoinDataComplete Digit8 = new JoinDataComplete(new JoinData { JoinNumber = 19, JoinSpan = 1 }, new JoinMetadata { Description = "STB Digit 8", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Digit 9 + /// [JoinName("Digit9")] public JoinDataComplete Digit9 = new JoinDataComplete(new JoinData { JoinNumber = 20, JoinSpan = 1 }, new JoinMetadata { Description = "STB Digit 9", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Dash + /// [JoinName("Dash")] public JoinDataComplete Dash = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 1 }, new JoinMetadata { Description = "STB Dash", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Keypad Enter + /// [JoinName("KeypadEnter")] public JoinDataComplete KeypadEnter = new JoinDataComplete(new JoinData { JoinNumber = 22, JoinSpan = 1 }, new JoinMetadata { Description = "STB Keypad Enter", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Channel Up + /// [JoinName("ChannelUp")] public JoinDataComplete ChannelUp = new JoinDataComplete(new JoinData { JoinNumber = 23, JoinSpan = 1 }, new JoinMetadata { Description = "STB Channel Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Channel Down + /// [JoinName("ChannelDown")] public JoinDataComplete ChannelDown = new JoinDataComplete(new JoinData { JoinNumber = 24, JoinSpan = 1 }, new JoinMetadata { Description = "STB Channel Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Last Channel + /// [JoinName("LastChannel")] public JoinDataComplete LastChannel = new JoinDataComplete(new JoinData { JoinNumber = 25, JoinSpan = 1 }, new JoinMetadata { Description = "STB Last Channel", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Guide + /// [JoinName("Guide")] public JoinDataComplete Guide = new JoinDataComplete(new JoinData { JoinNumber = 26, JoinSpan = 1 }, new JoinMetadata { Description = "STB Guide", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Info + /// [JoinName("Info")] public JoinDataComplete Info = new JoinDataComplete(new JoinData { JoinNumber = 27, JoinSpan = 1 }, new JoinMetadata { Description = "STB Info", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Red + /// [JoinName("Red")] public JoinDataComplete Red = new JoinDataComplete(new JoinData { JoinNumber = 28, JoinSpan = 1 }, new JoinMetadata { Description = "STB Red", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Green + /// [JoinName("Green")] public JoinDataComplete Green = new JoinDataComplete(new JoinData { JoinNumber = 29, JoinSpan = 1 }, new JoinMetadata { Description = "STB Green", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Yellow + /// [JoinName("Yellow")] public JoinDataComplete Yellow = new JoinDataComplete(new JoinData { JoinNumber = 30, JoinSpan = 1 }, new JoinMetadata { Description = "STB Yellow", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Blue + /// [JoinName("Blue")] public JoinDataComplete Blue = new JoinDataComplete(new JoinData { JoinNumber = 31, JoinSpan = 1 }, new JoinMetadata { Description = "STB Blue", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Has DVR + /// [JoinName("HasDvr")] public JoinDataComplete HasDvr = new JoinDataComplete(new JoinData { JoinNumber = 32, JoinSpan = 1 }, new JoinMetadata { Description = "STB Has DVR", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Dvr List + /// [JoinName("DvrList")] public JoinDataComplete DvrList = new JoinDataComplete(new JoinData { JoinNumber = 32, JoinSpan = 1 }, new JoinMetadata { Description = "STB DvrList", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Play + /// [JoinName("Play")] public JoinDataComplete Play = new JoinDataComplete(new JoinData { JoinNumber = 33, JoinSpan = 1 }, new JoinMetadata { Description = "STB Play", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Pause + /// [JoinName("Pause")] public JoinDataComplete Pause = new JoinDataComplete(new JoinData { JoinNumber = 34, JoinSpan = 1 }, new JoinMetadata { Description = "STB Pause", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Stop + /// [JoinName("Stop")] public JoinDataComplete Stop = new JoinDataComplete(new JoinData { JoinNumber = 35, JoinSpan = 1 }, new JoinMetadata { Description = "STB Stop", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB FFwd + /// [JoinName("FFwd")] public JoinDataComplete FFwd = new JoinDataComplete(new JoinData { JoinNumber = 36, JoinSpan = 1 }, new JoinMetadata { Description = "STB FFwd", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Rewind + /// [JoinName("Rewind")] public JoinDataComplete Rewind = new JoinDataComplete(new JoinData { JoinNumber = 37, JoinSpan = 1 }, new JoinMetadata { Description = "STB Rewind", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Chapter Plus + /// [JoinName("ChapPlus")] public JoinDataComplete ChapPlus = new JoinDataComplete(new JoinData { JoinNumber = 38, JoinSpan = 1 }, new JoinMetadata { Description = "STB Chapter Plus", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Chapter Minus + /// [JoinName("ChapMinus")] public JoinDataComplete ChapMinus = new JoinDataComplete(new JoinData { JoinNumber = 39, JoinSpan = 1 }, new JoinMetadata { Description = "STB Chapter Minus", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Replay + /// [JoinName("Replay")] public JoinDataComplete Replay = new JoinDataComplete(new JoinData { JoinNumber = 40, JoinSpan = 1 }, new JoinMetadata { Description = "STB Replay", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Record + /// [JoinName("Record")] public JoinDataComplete Record = new JoinDataComplete(new JoinData { JoinNumber = 41, JoinSpan = 1 }, new JoinMetadata { Description = "STB Record", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Has Keypad Accessory Button 1 + /// [JoinName("HasKeypadAccessoryButton1")] public JoinDataComplete HasKeypadAccessoryButton1 = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 1 }, new JoinMetadata { Description = "STB Has Keypad Accessory Button 1", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Has Keypad Accessory Button 2 + /// [JoinName("HasKeypadAccessoryButton2")] public JoinDataComplete HasKeypadAccessoryButton2 = new JoinDataComplete(new JoinData { JoinNumber = 43, JoinSpan = 1 }, new JoinMetadata { Description = "STB Has Keypad Accessory Button 2", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Keypad Accessory Button 1 Press + /// [JoinName("KeypadAccessoryButton1Press")] public JoinDataComplete KeypadAccessoryButton1Press = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 2 }, new JoinMetadata { Description = "STB Keypad Accessory Button 1 Press", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Keypad Accessory Button 2 Press + /// [JoinName("KeypadAccessoryButton2Press")] public JoinDataComplete KeypadAccessoryButton2Press = new JoinDataComplete(new JoinData { JoinNumber = 43, JoinSpan = 2 }, new JoinMetadata { Description = "STB Keypad Accessory Button 2 Press", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "STB Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Keypad Accessory Button 1 Label + /// [JoinName("KeypadAccessoryButton1Label")] public JoinDataComplete KeypadAccessoryButton1Label = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 1 }, new JoinMetadata { Description = "STB Keypad Accessory Button 1 Label", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// STB Keypad Accessory Button 2 Label + /// [JoinName("KeypadAccessoryButton2Label")] public JoinDataComplete KeypadAccessoryButton2Label = new JoinDataComplete(new JoinData { JoinNumber = 43, JoinSpan = 1 }, new JoinMetadata { Description = "STB Keypad Accessory Button 1 Label", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// STB Load Presets + /// [JoinName("LoadPresets")] public JoinDataComplete LoadPresets = new JoinDataComplete(new JoinData { JoinNumber = 50, JoinSpan = 1 }, new JoinMetadata { Description = "STB Load Presets", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// STB Has Presets + /// [JoinName("HasPresets")] public JoinDataComplete HasPresets = new JoinDataComplete(new JoinData { JoinNumber = 50, JoinSpan = 1 }, new JoinMetadata { Description = "STB Load Presets", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/StatusSignControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/StatusSignControllerJoinMap.cs index 60b7e5d8f..79ada2c8e 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/StatusSignControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/StatusSignControllerJoinMap.cs @@ -7,34 +7,58 @@ namespace PepperDash.Essentials.Core.Bridges /// public class StatusSignControllerJoinMap : JoinMapBaseAdvanced { + /// + /// Status Sign Online + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Status Sign Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Status Sign Name + /// [JoinName("Name")] public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Status Sign Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Red LED Control + /// [JoinName("RedControl")] public JoinDataComplete RedControl = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Status Red LED Enable / Disable", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Red LED Intensity + /// [JoinName("RedLed")] public JoinDataComplete RedLed = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Status Red LED Intensity", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); + /// + /// Green LED Control + /// [JoinName("GreenControl")] public JoinDataComplete GreenControl = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Status Green LED Enable / Disable", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Green LED Intensity + /// [JoinName("GreenLed")] public JoinDataComplete GreenLed = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Status Green LED Intensity", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); + /// + /// Blue LED Control + /// [JoinName("BlueControl")] public JoinDataComplete BlueControl = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Status Blue LED Enable / Disable", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Blue LED Intensity + /// [JoinName("BlueLed")] public JoinDataComplete BlueLed = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Status Blue LED Intensity", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/SystemMonitorJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/SystemMonitorJoinMap.cs index b594a6850..c53c9fe61 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/SystemMonitorJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/SystemMonitorJoinMap.cs @@ -7,146 +7,254 @@ namespace PepperDash.Essentials.Core.Bridges /// public class SystemMonitorJoinMap : JoinMapBaseAdvanced { + /// + /// Processor Timezone + /// [JoinName("TimeZone")] public JoinDataComplete TimeZone = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Timezone", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); + /// + /// Processor Timezone Name + /// [JoinName("TimeZoneName")] public JoinDataComplete TimeZoneName = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Timezone Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor OS Version + /// [JoinName("IOControllerVersion")] public JoinDataComplete IOControllerVersion = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Processor IO Controller Version", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor SNMP App Version + /// [JoinName("SnmpAppVersion")] public JoinDataComplete SnmpAppVersion = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 }, new JoinMetadata { Description = "Processor SNMP App Version", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor BACNet App Version + /// [JoinName("BACnetAppVersion")] public JoinDataComplete BACnetAppVersion = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, new JoinMetadata { Description = "Processor BACNet App Version", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Controller Version + /// [JoinName("ControllerVersion")] public JoinDataComplete ControllerVersion = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Controller Version", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Serial Number + /// [JoinName("SerialNumber")] public JoinDataComplete SerialNumber = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Serial Number", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Model + /// [JoinName("Model")] public JoinDataComplete Model = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Model", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Uptime + /// [JoinName("Uptime")] public JoinDataComplete Uptime = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Uptime", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Last Boot Time + /// [JoinName("LastBoot")] public JoinDataComplete LastBoot = new JoinDataComplete(new JoinData { JoinNumber = 9, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Last Boot", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Program Offset Join + /// [JoinName("ProgramOffsetJoin")] public JoinDataComplete ProgramOffsetJoin = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 5 }, new JoinMetadata { Description = "All Program Data is offset between slots by 5 - First Joins Start at 11", JoinCapabilities = eJoinCapabilities.None, JoinType = eJoinType.None }); + /// + /// Processor Program Start + /// [JoinName("ProgramStart")] public JoinDataComplete ProgramStart = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Program Start / Fb", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Processor Program Stop + /// [JoinName("ProgramStop")] public JoinDataComplete ProgramStop = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Program Stop / Fb", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Processor Program Register + /// [JoinName("ProgramRegister")] public JoinDataComplete ProgramRegister = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Program Register / Fb", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Processor Program Unregister + /// [JoinName("ProgramUnregister")] public JoinDataComplete ProgramUnregister = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Program UnRegister / Fb", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Processor Program Name + /// [JoinName("ProgramName")] public JoinDataComplete ProgramName = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Program Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Program Version + /// [JoinName("ProgramCompiledTime")] public JoinDataComplete ProgramCompiledTime = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Program Compile Time", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Program Crestron Database Version + /// [JoinName("ProgramCrestronDatabaseVersion")] public JoinDataComplete ProgramCrestronDatabaseVersion = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Program Database Version", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Program Environment Version + /// [JoinName("ProgramEnvironmentVersion")] public JoinDataComplete ProgramEnvironmentVersion = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Program Environment Version", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Program Aggregate Info + /// [JoinName("AggregatedProgramInfo")] public JoinDataComplete AggregatedProgramInfo = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Program Aggregate Info Json", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Ethernet Offset Join + /// [JoinName("EthernetOffsetJoin")] public JoinDataComplete EthernetOffsetJoin = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 }, new JoinMetadata { Description = "All Ethernet Data is offset between Nics by 5 - First Joins Start at 76", JoinCapabilities = eJoinCapabilities.None, JoinType = eJoinType.None }); + /// + /// Processor Ethernet Hostname + /// [JoinName("HostName")] public JoinDataComplete HostName = new JoinDataComplete(new JoinData { JoinNumber = 76, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Ethernet Hostname", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Ethernet Current Ip Address + /// [JoinName("CurrentIpAddress")] public JoinDataComplete CurrentIpAddress = new JoinDataComplete(new JoinData { JoinNumber = 77, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Ethernet Current Ip Address", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Ethernet Current Subnet Mask + /// [JoinName("CurrentSubnetMask")] public JoinDataComplete CurrentSubnetMask = new JoinDataComplete(new JoinData { JoinNumber = 78, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Ethernet Current Subnet Mask", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Ethernet Current Default Gateway + /// [JoinName("CurrentDefaultGateway")] public JoinDataComplete CurrentDefaultGateway = new JoinDataComplete(new JoinData { JoinNumber = 79, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Ethernet Current Default Gateway", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Ethernet Static Ip Address + /// [JoinName("StaticIpAddress")] public JoinDataComplete StaticIpAddress = new JoinDataComplete(new JoinData { JoinNumber = 80, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Ethernet Static Ip Address", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Ethernet Static Subnet Mask + /// [JoinName("StaticSubnetMask")] public JoinDataComplete StaticSubnetMask = new JoinDataComplete(new JoinData { JoinNumber = 81, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Ethernet Static Subnet Mask", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Ethernet Static Default Gateway + /// [JoinName("StaticDefaultGateway")] public JoinDataComplete StaticDefaultGateway = new JoinDataComplete(new JoinData { JoinNumber = 82, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Ethernet Static Default Gateway", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Ethernet Domain + /// [JoinName("Domain")] public JoinDataComplete Domain = new JoinDataComplete(new JoinData { JoinNumber = 83, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Ethernet Domain", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Ethernet Dns Server + /// [JoinName("DnsServer")] public JoinDataComplete DnsServer = new JoinDataComplete(new JoinData { JoinNumber = 84, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Ethernet Dns Server", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Ethernet Mac Address + /// [JoinName("MacAddress")] public JoinDataComplete MacAddress = new JoinDataComplete(new JoinData { JoinNumber = 85, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Ethernet Mac Address", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Ethernet Dhcp Status + /// [JoinName("DhcpStatus")] public JoinDataComplete DhcpStatus = new JoinDataComplete(new JoinData { JoinNumber = 86, JoinSpan = 1 }, new JoinMetadata { Description = "Processor Ethernet Dhcp Status", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial }); + /// + /// Processor Reboot + /// [JoinName("ProcessorRebot")] public JoinDataComplete ProcessorReboot = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Reboot processor", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); + /// + /// Is Appliance Fb + /// [JoinName("IsAppliance")] public JoinDataComplete IsAppliance = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Is appliance Fb", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Is Server Fb + /// [JoinName("IsServer")] public JoinDataComplete IsServer = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 }, new JoinMetadata { Description = "Is server Fb", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); + /// + /// Program Reset + /// [JoinName("ProgramReset")] public JoinDataComplete ProgramReset = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 }, new JoinMetadata { Description = "Resets the program", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); diff --git a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/VideoCodecControllerJoinMap.cs b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/VideoCodecControllerJoinMap.cs index 463ba4d33..2a7a46c25 100644 --- a/src/PepperDash.Essentials.Core/Bridges/JoinMaps/VideoCodecControllerJoinMap.cs +++ b/src/PepperDash.Essentials.Core/Bridges/JoinMaps/VideoCodecControllerJoinMap.cs @@ -9,6 +9,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced { #region Digital + /// + /// Device is Online + /// [JoinName("IsOnline")] public JoinDataComplete IsOnline = new JoinDataComplete( new JoinData @@ -23,6 +26,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// If High, will send DTMF tones to the call set by SelectCall analog. If low sends DTMF tones to last connected call. + /// [JoinName("SendDtmfToSpecificCallIndex")] public JoinDataComplete SendDtmfToSpecificCallIndex = new JoinDataComplete( new JoinData @@ -37,6 +43,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DTMF 1 + /// [JoinName("Dtmf1")] public JoinDataComplete Dtmf1 = new JoinDataComplete( new JoinData @@ -51,6 +60,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DTMF 2 + /// [JoinName("Dtmf2")] public JoinDataComplete Dtmf2 = new JoinDataComplete( new JoinData @@ -65,6 +77,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DTMF 3 + /// [JoinName("Dtmf3")] public JoinDataComplete Dtmf3 = new JoinDataComplete( new JoinData @@ -79,6 +94,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DTMF 4 + /// [JoinName("Dtmf4")] public JoinDataComplete Dtmf4 = new JoinDataComplete( new JoinData @@ -93,6 +111,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DTMF 5 + /// [JoinName("Dtmf5")] public JoinDataComplete Dtmf5 = new JoinDataComplete( new JoinData @@ -107,6 +128,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DTMF 6 + /// [JoinName("Dtmf6")] public JoinDataComplete Dtmf6 = new JoinDataComplete( new JoinData @@ -121,6 +145,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DTMF 7 + /// [JoinName("Dtmf7")] public JoinDataComplete Dtmf7 = new JoinDataComplete( new JoinData @@ -135,6 +162,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DTMF 8 + /// [JoinName("Dtmf8")] public JoinDataComplete Dtmf8 = new JoinDataComplete( new JoinData @@ -149,6 +179,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DTMF 9 + /// [JoinName("Dtmf9")] public JoinDataComplete Dtmf9 = new JoinDataComplete( new JoinData @@ -163,6 +196,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DTMF 0 + /// [JoinName("Dtmf0")] public JoinDataComplete Dtmf0 = new JoinDataComplete( new JoinData @@ -177,6 +213,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DTMF * + /// [JoinName("DtmfStar")] public JoinDataComplete DtmfStar = new JoinDataComplete( new JoinData @@ -191,6 +230,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// DTMF # + /// [JoinName("DtmfPound")] public JoinDataComplete DtmfPound = new JoinDataComplete( new JoinData @@ -205,6 +247,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// End All Calls + /// [JoinName("EndAllCalls")] public JoinDataComplete EndAllCalls = new JoinDataComplete( new JoinData @@ -219,6 +264,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Current Hook State + /// [JoinName("HookState")] public JoinDataComplete HookState = new JoinDataComplete( new JoinData @@ -233,6 +281,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Speed Dial + /// [JoinName("SpeedDialStart")] public JoinDataComplete SpeedDialStart = new JoinDataComplete( new JoinData @@ -247,6 +298,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Incoming Call + /// [JoinName("IncomingCall")] public JoinDataComplete IncomingCall = new JoinDataComplete( new JoinData @@ -261,6 +315,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Answer Incoming Call + /// [JoinName("IncomingAnswer")] public JoinDataComplete IncomingAnswer = new JoinDataComplete( new JoinData @@ -275,6 +332,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Reject Incoming Call + /// [JoinName("IncomingReject")] public JoinDataComplete IncomingReject = new JoinDataComplete( new JoinData @@ -289,6 +349,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Manual Dial + /// [JoinName("ManualDial")] public JoinDataComplete ManualDial = new JoinDataComplete( new JoinData @@ -303,6 +366,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Dial Phone + /// [JoinName("DialPhone")] public JoinDataComplete DialPhone = new JoinDataComplete( new JoinData @@ -317,6 +383,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Phone Hook State + /// [JoinName("PhoneHookState")] public JoinDataComplete PhoneHookState = new JoinDataComplete( new JoinData @@ -331,6 +400,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Hang Up Phone + /// [JoinName("HangUpPhone")] public JoinDataComplete HangUpPhone = new JoinDataComplete( new JoinData @@ -345,6 +417,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// End Call + /// [JoinName("EndCallStart")] public JoinDataComplete EndCallStart = new JoinDataComplete( new JoinData @@ -359,6 +434,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Join All Calls + /// [JoinName("JoinAllCalls")] public JoinDataComplete JoinAllCalls = new JoinDataComplete( new JoinData @@ -373,6 +451,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Join Call + /// [JoinName("JoinCallStart")] public JoinDataComplete JoinCallStart = new JoinDataComplete( new JoinData @@ -387,6 +468,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Directory Search Busy + /// [JoinName("DirectorySearchBusy")] public JoinDataComplete DirectorySearchBusy = new JoinDataComplete( new JoinData @@ -401,7 +485,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); - + /// + /// Directory Selected Entry Is Contact + /// [JoinName("DirectoryEntryIsContact")] public JoinDataComplete DirectoryEntryIsContact = new JoinDataComplete( new JoinData @@ -416,6 +502,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Directory Line Selected + /// [JoinName("DirectoryLineSelected")] public JoinDataComplete DirectoryLineSelected = new JoinDataComplete( new JoinData @@ -430,6 +519,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Directory Is Root + /// [JoinName("DirectoryIsRoot")] public JoinDataComplete DirectoryIsRoot = new JoinDataComplete( new JoinData @@ -444,6 +536,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Directory Has Changed + /// [JoinName("DirectoryHasChanged")] public JoinDataComplete DirectoryHasChanged = new JoinDataComplete( new JoinData @@ -458,6 +553,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Directory Go to Root + /// [JoinName("DirectoryRoot")] public JoinDataComplete DirectoryRoot = new JoinDataComplete( new JoinData @@ -472,6 +570,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Directory Go Back One Level + /// [JoinName("DirectoryFolderBack")] public JoinDataComplete DirectoryFolderBack = new JoinDataComplete( new JoinData @@ -486,6 +587,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Directory Dial Selected Line + /// [JoinName("DirectoryDialSelectedLine")] public JoinDataComplete DirectoryDialSelectedLine = new JoinDataComplete( new JoinData @@ -500,6 +604,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Directory Disable Auto Dial Selected Line + /// [JoinName("DirectoryDisableAutoDialSelectedLine")] public JoinDataComplete DirectoryDisableAutoDialSelectedLine = new JoinDataComplete( new JoinData @@ -514,6 +621,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Directory Dial Selected Contact Method + /// [JoinName("DirectoryDialSelectedContactMethod")] public JoinDataComplete DirectoryDialSelectedContactMethod = new JoinDataComplete( new JoinData @@ -528,6 +638,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Directory Clear Selected + /// [JoinName("DirectoryClearSelected")] public JoinDataComplete DirectoryClearSelected = new JoinDataComplete( new JoinData @@ -542,7 +655,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); - + /// + /// Camera Tilt Up + /// [JoinName("CameraTiltUp")] public JoinDataComplete CameraTiltUp = new JoinDataComplete( new JoinData @@ -557,6 +672,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Tilt Down + /// [JoinName("CameraTiltDown")] public JoinDataComplete CameraTiltDown = new JoinDataComplete( new JoinData @@ -571,6 +689,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Pan Left + /// [JoinName("CameraPanLeft")] public JoinDataComplete CameraPanLeft = new JoinDataComplete( new JoinData @@ -585,6 +706,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Pan Right + /// [JoinName("CameraPanRight")] public JoinDataComplete CameraPanRight = new JoinDataComplete( new JoinData @@ -599,6 +723,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Zoom In + /// [JoinName("CameraZoomIn")] public JoinDataComplete CameraZoomIn = new JoinDataComplete( new JoinData @@ -613,6 +740,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Zoom Out + /// [JoinName("CameraZoomOut")] public JoinDataComplete CameraZoomOut = new JoinDataComplete( new JoinData @@ -627,6 +757,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Focus Near + /// [JoinName("CameraFocusNear")] public JoinDataComplete CameraFocusNear = new JoinDataComplete( new JoinData @@ -641,6 +774,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Focus Far + /// [JoinName("CameraFocusFar")] public JoinDataComplete CameraFocusFar = new JoinDataComplete( new JoinData @@ -655,6 +791,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Auto Focus + /// [JoinName("CameraFocusAuto")] public JoinDataComplete CameraFocusAuto = new JoinDataComplete( new JoinData @@ -669,6 +808,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Preset Save + /// [JoinName("CameraPresetSave")] public JoinDataComplete CameraPresetSave = new JoinDataComplete( new JoinData @@ -683,6 +825,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Preset Recall + /// [JoinName("CameraModeAuto")] public JoinDataComplete CameraModeAuto = new JoinDataComplete( new JoinData @@ -697,6 +842,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Mode Manual + /// [JoinName("CameraModeManual")] public JoinDataComplete CameraModeManual = new JoinDataComplete( new JoinData @@ -711,6 +859,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Mode Off + /// [JoinName("CameraModeOff")] public JoinDataComplete CameraModeOff = new JoinDataComplete( new JoinData @@ -725,6 +876,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Self View + /// [JoinName("CameraSelfView")] public JoinDataComplete CameraSelfView = new JoinDataComplete( new JoinData @@ -739,6 +893,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Layout + /// [JoinName("CameraLayout")] public JoinDataComplete CameraLayout = new JoinDataComplete( new JoinData @@ -753,6 +910,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Supports Auto Mode + /// [JoinName("CameraSupportsAutoMode")] public JoinDataComplete CameraSupportsAutoMode = new JoinDataComplete( new JoinData @@ -767,6 +927,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Camera Supports Off Mode + /// [JoinName("CameraSupportsOffMode")] public JoinDataComplete CameraSupportsOffMode = new JoinDataComplete( new JoinData @@ -781,6 +944,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Update Meetings + /// [JoinName("UpdateMeetings")] public JoinDataComplete UpdateMeetings = new JoinDataComplete( new JoinData @@ -795,6 +961,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Dial Meeting Start + /// [JoinName("DialMeetingStart")] public JoinDataComplete DialMeetingStart = new JoinDataComplete( new JoinData @@ -809,6 +978,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Mic Mute On + /// [JoinName("MicMuteOn")] public JoinDataComplete MicMuteOn = new JoinDataComplete( new JoinData @@ -823,6 +995,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Mic Mute Off + /// [JoinName("MicMuteOff")] public JoinDataComplete MicMuteOff = new JoinDataComplete( new JoinData @@ -837,6 +1012,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Mic Mute Toggle + /// [JoinName("MicMuteToggle")] public JoinDataComplete MicMuteToggle = new JoinDataComplete( new JoinData @@ -851,6 +1029,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Volume Up + /// [JoinName("VolumeUp")] public JoinDataComplete VolumeUp = new JoinDataComplete( new JoinData @@ -865,6 +1046,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Volume Down + /// [JoinName("VolumeDown")] public JoinDataComplete VolumeDown = new JoinDataComplete( new JoinData @@ -879,6 +1063,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Volume Mute On + /// [JoinName("VolumeMuteOn")] public JoinDataComplete VolumeMuteOn = new JoinDataComplete( new JoinData @@ -893,6 +1080,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Volume Mute Off + /// [JoinName("VolumeMuteOff")] public JoinDataComplete VolumeMuteOff = new JoinDataComplete( new JoinData @@ -907,6 +1097,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Volume Mute Toggle + /// [JoinName("VolumeMuteToggle")] public JoinDataComplete VolumeMuteToggle = new JoinDataComplete( new JoinData @@ -921,6 +1114,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Remove Selected Recent Call Item + /// [JoinName("RemoveSelectedRecentCallItem")] public JoinDataComplete RemoveSelectedRecentCallItem = new JoinDataComplete( new JoinData @@ -935,6 +1131,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Dial Selected Recent Call Item + /// [JoinName("DialSelectedRecentCallItem")] public JoinDataComplete DialSelectedRecentCallItem = new JoinDataComplete( new JoinData @@ -949,6 +1148,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Source Share Start + /// [JoinName("SourceShareStart")] public JoinDataComplete SourceShareStart = new JoinDataComplete( new JoinData @@ -963,6 +1165,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Source Share End + /// [JoinName("SourceShareEnd")] public JoinDataComplete SourceShareEnd = new JoinDataComplete( new JoinData @@ -977,6 +1182,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Source Share Auto Start + /// [JoinName("AutoShareWhileInCall")] public JoinDataComplete SourceShareAutoStart = new JoinDataComplete( new JoinData @@ -991,6 +1199,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Recieving Content + /// [JoinName("RecievingContent")] public JoinDataComplete RecievingContent = new JoinDataComplete( new JoinData @@ -1005,6 +1216,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinCapabilities = eJoinCapabilities.ToSIMPL }); + /// + /// Selfview Position + /// [JoinName("SelfviewPosition")] public JoinDataComplete SelfviewPosition = new JoinDataComplete( new JoinData @@ -1019,6 +1233,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Hold All Calls + /// [JoinName("HoldAllCalls")] public JoinDataComplete HoldAllCalls = new JoinDataComplete( new JoinData @@ -1033,6 +1250,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Hold Call at Index + /// [JoinName("HoldCallsStart")] public JoinDataComplete HoldCallsStart = new JoinDataComplete( new JoinData @@ -1047,6 +1267,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Resume All Calls + /// [JoinName("ResumeCallsStart")] public JoinDataComplete ResumeCallsStart = new JoinDataComplete( new JoinData @@ -1061,6 +1284,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Multi Site Option Is Enabled + /// [JoinName("MultiSiteOptionIsEnabled")] public JoinDataComplete MultiSiteOptionIsEnabled = new JoinDataComplete( new JoinData @@ -1075,6 +1301,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Auto Answer Enabled + /// [JoinName("AutoAnswerEnabled")] public JoinDataComplete AutoAnswerEnabled = new JoinDataComplete( new JoinData @@ -1089,6 +1318,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Participant Audio Mute Toggle + /// [JoinName("ParticipantAudioMuteToggleStart")] public JoinDataComplete ParticipantAudioMuteToggleStart = new JoinDataComplete( new JoinData @@ -1103,6 +1335,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Participant Video Mute Toggle + /// [JoinName("ParticipantVideoMuteToggleStart")] public JoinDataComplete ParticipantVideoMuteToggleStart = new JoinDataComplete( new JoinData @@ -1117,6 +1352,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + /// + /// Participant Pin Toggle + /// [JoinName("ParticipantPinToggleStart")] public JoinDataComplete ParticipantPinToggleStart = new JoinDataComplete( new JoinData @@ -1139,6 +1377,10 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced #region Analog // TODO [ ] hotfix/videocodecbase-max-meeting-xsig-set + + /// + /// Meetings To Display + /// [JoinName("MeetingsToDisplay")] public JoinDataComplete MeetingsToDisplay = new JoinDataComplete( new JoinData @@ -1153,6 +1395,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Select Call + /// [JoinName("SelectCall")] public JoinDataComplete SelectCall = new JoinDataComplete( new JoinData @@ -1167,7 +1412,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); - + /// + /// Connected Call Count + /// [JoinName("ConnectedCallCount")] public JoinDataComplete ConnectedCallCount = new JoinDataComplete( new JoinData @@ -1182,6 +1429,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Minutes Before Meeting Start + /// [JoinName("MinutesBeforeMeetingStart")] public JoinDataComplete MinutesBeforeMeetingStart = new JoinDataComplete( new JoinData @@ -1196,6 +1446,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Camera Number Select + /// [JoinName("CameraNumberSelect")] public JoinDataComplete CameraNumberSelect = new JoinDataComplete( new JoinData @@ -1210,6 +1463,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Camera Count + /// [JoinName("CameraCount")] public JoinDataComplete CameraCount = new JoinDataComplete( new JoinData @@ -1224,6 +1480,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Directory Row Count + /// [JoinName("DirectoryRowCount")] public JoinDataComplete DirectoryRowCount = new JoinDataComplete( new JoinData @@ -1238,6 +1497,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Directory Select Row + /// [JoinName("DirectorySelectRow")] public JoinDataComplete DirectorySelectRow = new JoinDataComplete( new JoinData @@ -1252,7 +1514,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); - + /// + /// Selected Contact Method Count + /// [JoinName("SelectedContactMethodCount")] public JoinDataComplete SelectedContactMethodCount = new JoinDataComplete( new JoinData @@ -1267,6 +1531,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Select Contact Method + /// [JoinName("SelectContactMethod")] public JoinDataComplete SelectContactMethod = new JoinDataComplete( new JoinData @@ -1281,6 +1548,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Directory Select Row Feedback + /// [JoinName("DirectorySelectRowFeedback")] public JoinDataComplete DirectorySelectRowFeedback = new JoinDataComplete( new JoinData @@ -1296,7 +1566,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced }); - + /// + /// Camera Preset Select + /// [JoinName("CameraPresetSelect")] public JoinDataComplete CameraPresetSelect = new JoinDataComplete( new JoinData @@ -1311,6 +1583,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Far End Preset Select + /// [JoinName("FarEndPresetSelect")] public JoinDataComplete FarEndPresetSelect = new JoinDataComplete( new JoinData @@ -1325,6 +1600,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Participant Count + /// [JoinName("ParticipantCount")] public JoinDataComplete ParticipantCount = new JoinDataComplete( new JoinData @@ -1339,6 +1617,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Meeting Count + /// [JoinName("Meeting Count Fb")] public JoinDataComplete MeetingCount = new JoinDataComplete( new JoinData @@ -1353,6 +1634,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Volume Level + /// [JoinName("VolumeLevel")] public JoinDataComplete VolumeLevel = new JoinDataComplete( new JoinData @@ -1367,6 +1651,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Select Recent Call Item + /// [JoinName("SelectRecentCallItem")] public JoinDataComplete SelectRecentCallItem = new JoinDataComplete( new JoinData @@ -1381,6 +1668,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Recent Call Occurrence Type + /// [JoinName("RecentCallOccurrenceType")] public JoinDataComplete RecentCallOccurrenceType = new JoinDataComplete( new JoinData @@ -1395,6 +1685,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Analog }); + /// + /// Recent Call Count + /// [JoinName("RecentCallCount")] public JoinDataComplete RecentCallCount = new JoinDataComplete( new JoinData @@ -1415,6 +1708,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced #region Serials + /// + /// Current Dial String + /// [JoinName("CurrentDialString")] public JoinDataComplete CurrentDialString = new JoinDataComplete( new JoinData @@ -1429,6 +1725,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Phone Dial String + /// [JoinName("PhoneDialString")] public JoinDataComplete PhoneDialString = new JoinDataComplete( new JoinData @@ -1443,6 +1742,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Current Call Data + /// [JoinName("CurrentCallData")] public JoinDataComplete CurrentCallData = new JoinDataComplete( new JoinData @@ -1457,6 +1759,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Call Direction + /// [JoinName("CallDirection")] public JoinDataComplete CallDirection = new JoinDataComplete( new JoinData @@ -1471,6 +1776,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Incoming Call Name + /// [JoinName("IncomingCallName")] public JoinDataComplete IncomingCallName = new JoinDataComplete( new JoinData @@ -1485,6 +1793,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Incoming Call Number + /// [JoinName("IncomingCallNumber")] public JoinDataComplete IncomingCallNumber = new JoinDataComplete( new JoinData @@ -1499,7 +1810,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); - + /// + /// Directory Search String + /// [JoinName("DirectorySearchString")] public JoinDataComplete DirectorySearchString = new JoinDataComplete( new JoinData @@ -1514,6 +1827,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Directory Entries + /// [JoinName("DirectoryEntries")] public JoinDataComplete DirectoryEntries = new JoinDataComplete( new JoinData @@ -1528,6 +1844,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Schedule Data + /// [JoinName("Schedule")] public JoinDataComplete Schedule = new JoinDataComplete( new JoinData @@ -1542,6 +1861,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Contact Methods + /// [JoinName("ContactMethods")] public JoinDataComplete ContactMethods = new JoinDataComplete( new JoinData @@ -1556,6 +1878,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Camera Preset Names + /// [JoinName("CameraPresetNames")] public JoinDataComplete CameraPresetNames = new JoinDataComplete( new JoinData @@ -1570,6 +1895,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Current Layout String + /// [JoinName("CurrentLayoutStringFb")] public JoinDataComplete CurrentLayoutStringFb = new JoinDataComplete( new JoinData @@ -1584,6 +1912,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Available Layouts XSig + /// [JoinName("AvailableLayoutsFb")] public JoinDataComplete AvailableLayoutsFb = new JoinDataComplete( new JoinData @@ -1598,6 +1929,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Select Layout + /// [JoinName("SelectLayout")] public JoinDataComplete SelectLayout = new JoinDataComplete( new JoinData @@ -1613,7 +1947,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced }); - + /// + /// Current Participants XSig + /// [JoinName("CurrentParticipants")] public JoinDataComplete CurrentParticipants = new JoinDataComplete( new JoinData @@ -1628,6 +1964,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Camera Names XSig + /// [JoinName("CameraNamesFb")] public JoinDataComplete CameraNamesFb = new JoinDataComplete( new JoinData @@ -1642,6 +1981,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Selected Recent Call Name + /// [JoinName("SelectedRecentCallName")] public JoinDataComplete SelectedRecentCallName = new JoinDataComplete( new JoinData @@ -1656,6 +1998,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Selected Recent Call Number + /// [JoinName("SelectedRecentCallNumber")] public JoinDataComplete SelectedRecentCallNumber = new JoinDataComplete( new JoinData @@ -1670,6 +2015,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Recent Call Names + /// [JoinName("RecentCallNamesStart")] public JoinDataComplete RecentCallNamesStart = new JoinDataComplete( new JoinData @@ -1684,6 +2032,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Recent Call Numbers + /// [JoinName("RecentCallTimesStart")] public JoinDataComplete RecentCallTimesStart = new JoinDataComplete( new JoinData @@ -1698,6 +2049,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Current Source + /// [JoinName("CurrentSource")] public JoinDataComplete CurrentSource = new JoinDataComplete( new JoinData @@ -1712,6 +2066,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Selfview Position Feedback + /// [JoinName("SelfviewPositionFb")] public JoinDataComplete SelfviewPositionFb = new JoinDataComplete( new JoinData @@ -1726,6 +2083,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Device IP Address + /// [JoinName("DeviceIpAddresss")] public JoinDataComplete DeviceIpAddresss = new JoinDataComplete( new JoinData @@ -1740,6 +2100,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// SIP Phone Number + /// [JoinName("SipPhoneNumber")] public JoinDataComplete SipPhoneNumber = new JoinDataComplete( new JoinData @@ -1754,6 +2117,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// E164 Alias + /// [JoinName("E164Alias")] public JoinDataComplete E164Alias = new JoinDataComplete( new JoinData @@ -1768,6 +2134,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// H323 ID + /// [JoinName("H323Id")] public JoinDataComplete H323Id = new JoinDataComplete( new JoinData @@ -1782,6 +2151,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// SIP URI + /// [JoinName("SipUri")] public JoinDataComplete SipUri = new JoinDataComplete( new JoinData @@ -1796,6 +2168,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Selected Directory Entry Name + /// [JoinName("DirectoryEntrySelectedName")] public JoinDataComplete DirectoryEntrySelectedName = new JoinDataComplete( new JoinData @@ -1810,6 +2185,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Selected Directory Entry Number + /// [JoinName("DirectoryEntrySelectedNumber")] public JoinDataComplete DirectoryEntrySelectedNumber = new JoinDataComplete( new JoinData @@ -1824,6 +2202,9 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Serial }); + /// + /// Selected Directory Folder Name + /// [JoinName("DirectorySelectedFolderName")] public JoinDataComplete DirectorySelectedFolderName = new JoinDataComplete( new JoinData @@ -1841,11 +2222,20 @@ public class VideoCodecControllerJoinMap : JoinMapBaseAdvanced #endregion + /// + /// Constructor for the VideoCodecControllerJoinMap class. + /// + /// Join this join map will start at public VideoCodecControllerJoinMap(uint joinStart) : base(joinStart, typeof(VideoCodecControllerJoinMap)) { } + /// + /// + /// + /// Join this join map will start at + /// Type of the child join map public VideoCodecControllerJoinMap(uint joinStart, Type type) : base(joinStart, type) { diff --git a/src/PepperDash.Essentials.Core/Comm and IR/CecPortController.cs b/src/PepperDash.Essentials.Core/Comm and IR/CecPortController.cs index 2dd4f2ba5..298bbc9b3 100644 --- a/src/PepperDash.Essentials.Core/Comm and IR/CecPortController.cs +++ b/src/PepperDash.Essentials.Core/Comm and IR/CecPortController.cs @@ -22,7 +22,14 @@ public class CecPortController : Device, IBasicCommunicationWithStreamDebugging /// public CommunicationStreamDebugging StreamDebugging { get; private set; } + /// + /// Event raised when bytes are received + /// public event EventHandler BytesReceived; + + /// + /// Event raised when text is received + /// public event EventHandler TextReceived; /// @@ -32,6 +39,12 @@ public class CecPortController : Device, IBasicCommunicationWithStreamDebugging ICec Port; + /// + /// Constructor + /// + /// key of the device + /// post activation function for the device + /// configuration for the device public CecPortController(string key, Func postActivationFunc, EssentialsControlPropertiesConfig config) : base(key) { @@ -45,6 +58,11 @@ public CecPortController(string key, Func + /// Constructor + /// + /// key of the device + /// CEC port public CecPortController(string key, ICec port) : base(key) { diff --git a/src/PepperDash.Essentials.Core/Comm and IR/ComSpecJsonConverter.cs b/src/PepperDash.Essentials.Core/Comm and IR/ComSpecJsonConverter.cs index e2d13f5ff..11e2bc74f 100644 --- a/src/PepperDash.Essentials.Core/Comm and IR/ComSpecJsonConverter.cs +++ b/src/PepperDash.Essentials.Core/Comm and IR/ComSpecJsonConverter.cs @@ -21,6 +21,14 @@ namespace PepperDash.Essentials.Core /// public class ComSpecJsonConverter : JsonConverter { + /// + /// ReadJson method + /// + /// reader to use + /// type of the object being read + /// existing value of the object being read + /// serializer to use + /// deserialized object public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (objectType == typeof(ComPort.ComPortSpec?)) @@ -42,6 +50,9 @@ public override bool CanConvert(Type objectType) return objectType == typeof(ComPort.ComPortSpec?); } + /// + /// Gets or sets the CanRead + /// public override bool CanRead { get { return true; } } /// diff --git a/src/PepperDash.Essentials.Core/Comm and IR/CommFactory.cs b/src/PepperDash.Essentials.Core/Comm and IR/CommFactory.cs index fbc46579f..9318e04b2 100644 --- a/src/PepperDash.Essentials.Core/Comm and IR/CommFactory.cs +++ b/src/PepperDash.Essentials.Core/Comm and IR/CommFactory.cs @@ -15,6 +15,11 @@ namespace PepperDash.Essentials.Core /// public class CommFactory { + /// + /// GetControlPropertiesConfig method + /// + /// The Device config object + /// EssentialsControlPropertiesConfig object public static EssentialsControlPropertiesConfig GetControlPropertiesConfig(DeviceConfig deviceConfig) { try @@ -223,11 +228,16 @@ public static IComPorts GetIComPortsDeviceFromManagedDevice(string ComPortDevKey public class EssentialsControlPropertiesConfig : ControlPropertiesConfig { - + /// + /// Gets or sets the ComParams + /// [JsonProperty("comParams", NullValueHandling = NullValueHandling.Ignore)] [JsonConverter(typeof(ComSpecJsonConverter))] public ComPort.ComPortSpec? ComParams { get; set; } + /// + /// Gets or sets the CresnetId + /// [JsonProperty("cresnetId", NullValueHandling = NullValueHandling.Ignore)] public string CresnetId { get; set; } @@ -250,10 +260,10 @@ public uint CresnetIdInt } } - [JsonProperty("infinetId", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the InfinetId /// + [JsonProperty("infinetId", NullValueHandling = NullValueHandling.Ignore)] public string InfinetId { get; set; } /// diff --git a/src/PepperDash.Essentials.Core/Comm and IR/CommunicationExtras.cs b/src/PepperDash.Essentials.Core/Comm and IR/CommunicationExtras.cs index 995004b96..d9bd09745 100644 --- a/src/PepperDash.Essentials.Core/Comm and IR/CommunicationExtras.cs +++ b/src/PepperDash.Essentials.Core/Comm and IR/CommunicationExtras.cs @@ -20,6 +20,9 @@ namespace PepperDash.Essentials.Core /// public interface IComPortsDevice { + /// + /// Gets the Device + /// IComPorts Device { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Comm and IR/ConsoleCommMockDevice.cs b/src/PepperDash.Essentials.Core/Comm and IR/ConsoleCommMockDevice.cs index 5bc4c8fb8..7c2af9058 100644 --- a/src/PepperDash.Essentials.Core/Comm and IR/ConsoleCommMockDevice.cs +++ b/src/PepperDash.Essentials.Core/Comm and IR/ConsoleCommMockDevice.cs @@ -39,6 +39,13 @@ public class ConsoleCommMockDevice : EssentialsDevice, ICommunicationMonitor /// public bool ShowHexResponse { get; set; } + /// + /// Initializes a new instance of the ConsoleCommMockDevice class. + /// + /// The key of the device. + /// The name of the device. + /// The properties configuration for the device. + /// The communication method for the device. public ConsoleCommMockDevice(string key, string name, ConsoleCommMockDevicePropertiesConfig props, IBasicCommunication comm) :base(key, name) { @@ -72,20 +79,24 @@ void SendLine(string s) } } - /// - /// Represents a ConsoleCommMockDevicePropertiesConfig - /// + /// + /// Represents a ConsoleCommMockDevicePropertiesConfig + /// public class ConsoleCommMockDevicePropertiesConfig { - /// - /// Gets or sets the LineEnding - /// + /// + /// Gets or sets the LineEnding + /// public string LineEnding { get; set; } - /// - /// Gets or sets the CommunicationMonitorProperties - /// + + /// + /// Gets or sets the CommunicationMonitorProperties + /// public CommunicationMonitorConfig CommunicationMonitorProperties { get; set; } + /// + /// Initializes a new instance of the ConsoleCommMockDevicePropertiesConfig class. + /// public ConsoleCommMockDevicePropertiesConfig() { LineEnding = "\x0a"; @@ -97,6 +108,9 @@ public ConsoleCommMockDevicePropertiesConfig() /// public class ConsoleCommMockDeviceFactory : EssentialsDeviceFactory { + /// + /// Initializes a new instance of the ConsoleCommMockDeviceFactory class. + /// public ConsoleCommMockDeviceFactory() { TypeNames = new List() { "commmock" }; diff --git a/src/PepperDash.Essentials.Core/Comm and IR/GenericComm.cs b/src/PepperDash.Essentials.Core/Comm and IR/GenericComm.cs index a9c4df088..069244c38 100644 --- a/src/PepperDash.Essentials.Core/Comm and IR/GenericComm.cs +++ b/src/PepperDash.Essentials.Core/Comm and IR/GenericComm.cs @@ -23,8 +23,15 @@ public class GenericComm : ReconfigurableBridgableDevice { EssentialsControlPropertiesConfig PropertiesConfig; + /// + /// Gets the CommPort + /// public IBasicCommunication CommPort { get; private set; } + /// + /// Constructor + /// + /// the config of the device public GenericComm(DeviceConfig config) : base(config) { @@ -33,7 +40,7 @@ public GenericComm(DeviceConfig config) var commPort = CommFactory.CreateCommForDevice(config); - //Fixing decision to require '-comPorts' in delcaration for DGE in order to get a device with comports included + //Fixing decision to require '-comPorts' in declaration for DGE in order to get a device with comports included if (commPort == null) { config.Key = config.Key + "-comPorts"; @@ -70,6 +77,10 @@ public void SetPortConfig(string portConfig) } } + /// + /// CustomSetConfig method + /// + /// the new device configuration protected override void CustomSetConfig(DeviceConfig config) { PropertiesConfig = CommFactory.GetControlPropertiesConfig(config); @@ -144,6 +155,9 @@ public override void LinkToApi(BasicTriList trilist, uint joinStart, string join /// public class GenericCommFactory : EssentialsDeviceFactory { + /// + /// Initializes a new instance of the GenericCommFactory class. + /// public GenericCommFactory() { TypeNames = new List() { "genericComm" }; diff --git a/src/PepperDash.Essentials.Core/Comm and IR/GenericHttpClient.cs b/src/PepperDash.Essentials.Core/Comm and IR/GenericHttpClient.cs index 3a1ba4d47..e02027b38 100644 --- a/src/PepperDash.Essentials.Core/Comm and IR/GenericHttpClient.cs +++ b/src/PepperDash.Essentials.Core/Comm and IR/GenericHttpClient.cs @@ -4,15 +4,26 @@ namespace PepperDash.Essentials.Core { + + /// + /// Represents a GenericHttpClient + /// [Obsolete("Please use the builtin HttpClient class instead: https://learn.microsoft.com/en-us/dotnet/fundamentals/networking/http/httpclient-guidelines")] - /// - /// Represents a GenericHttpClient - /// public class GenericHttpClient : Device, IBasicCommunication { private readonly HttpClient Client; + + /// + /// Event raised when response is received + /// public event EventHandler ResponseRecived; + /// + /// Constructor + /// + /// key of the device + /// name of the device + /// hostname for the HTTP client public GenericHttpClient(string key, string name, string hostname) : base(key, name) { @@ -25,12 +36,9 @@ public GenericHttpClient(string key, string name, string hostname) } /// - /// + /// SendText method /// - /// - /// - /// SendText method - /// + /// the path to send the request to public void SendText(string path) { HttpClientRequest request = new HttpClientRequest(); @@ -38,6 +46,12 @@ public void SendText(string path) request.Url = new UrlParser(url); HttpClient.DISPATCHASYNC_ERROR error = Client.DispatchAsyncEx(request, Response, request); } + + /// + /// SendText method + /// + /// format for the items + /// items to format public void SendText(string format, params object[] items) { HttpClientRequest request = new HttpClientRequest(); @@ -46,9 +60,11 @@ public void SendText(string format, params object[] items) HttpClient.DISPATCHASYNC_ERROR error = Client.DispatchAsyncEx(request, Response, request); } - /// - /// SendTextNoResponse method - /// + /// + /// SendTextNoResponse method + /// + /// format for the items + /// items to format public void SendTextNoResponse(string format, params object[] items) { HttpClientRequest request = new HttpClientRequest(); @@ -57,6 +73,12 @@ public void SendTextNoResponse(string format, params object[] items) Client.Dispatch(request); } + /// + /// Response method + /// + /// response received from the HTTP client + /// error status of the HTTP callback + /// original HTTP client request private void Response(HttpClientResponse response, HTTP_CALLBACK_ERROR error, object request) { if (error == HTTP_CALLBACK_ERROR.COMPLETED) @@ -74,9 +96,10 @@ private void Response(HttpClientResponse response, HTTP_CALLBACK_ERROR error, ob #region IBasicCommunication Members - /// - /// SendBytes method - /// + /// + /// SendBytes method + /// + /// bytes to send public void SendBytes(byte[] bytes) { throw new NotImplementedException(); @@ -88,50 +111,69 @@ public void SendBytes(byte[] bytes) #region ICommunicationReceiver Members + /// + /// BytesReceived event + /// public event EventHandler BytesReceived; - /// - /// Connect method - /// + /// + /// Connect method + /// public void Connect() { throw new NotImplementedException(); } - /// - /// Disconnect method - /// + /// + /// Disconnect method + /// public void Disconnect() { throw new NotImplementedException(); } + /// + /// IsConnected property + /// public bool IsConnected { get { return true; } } + /// + /// TextReceived event + /// public event EventHandler TextReceived; #endregion } - /// - /// Represents a GenericHttpClientEventArgs - /// + + /// + /// Represents a GenericHttpClientEventArgs + /// public class GenericHttpClientEventArgs : EventArgs { - /// - /// Gets or sets the ResponseText - /// + /// + /// Gets or sets the ResponseText + /// public string ResponseText { get; private set; } - /// - /// Gets or sets the RequestPath - /// + + /// + /// Gets or sets the RequestPath + /// public string RequestPath { get; private set; } - /// - /// Gets or sets the Error - /// + + /// + /// Gets or sets the Error + /// public HTTP_CALLBACK_ERROR Error { get; set; } + + /// + /// Constructor + /// + /// response text + /// request path + /// error status public GenericHttpClientEventArgs(string response, string request, HTTP_CALLBACK_ERROR error) { ResponseText = response; diff --git a/src/PepperDash.Essentials.Core/Comm and IR/IRPortHelper.cs b/src/PepperDash.Essentials.Core/Comm and IR/IRPortHelper.cs index 0655e83b1..6ca4b5337 100644 --- a/src/PepperDash.Essentials.Core/Comm and IR/IRPortHelper.cs +++ b/src/PepperDash.Essentials.Core/Comm and IR/IRPortHelper.cs @@ -15,10 +15,13 @@ namespace PepperDash.Essentials.Core { /// - /// + /// Helper class for IR port operations /// public static class IRPortHelper { + /// + /// Gets the IrDriverPathPrefix + /// public static string IrDriverPathPrefix { get @@ -31,7 +34,7 @@ public static string IrDriverPathPrefix /// Finds either the ControlSystem or a device controller that contains IR ports and /// returns a port from the hardware device /// - /// + /// JSON token containing properties /// IrPortConfig object. The port and or filename will be empty/null /// if valid values don't exist on config public static IrOutPortConfig GetIrPort(JToken propsToken) @@ -83,9 +86,11 @@ public static IrOutPortConfig GetIrPort(JToken propsToken) } } - /// - /// GetIrOutputPort method - /// + /// + /// GetIrOutputPort method + /// + /// DeviceConfig to get the IR port for + /// IROutputPort or null if not found public static IROutputPort GetIrOutputPort(DeviceConfig dc) { var irControllerKey = dc.Key + "-ir"; @@ -145,9 +150,11 @@ public static IROutputPort GetIrOutputPort(DeviceConfig dc) return port; } - /// - /// GetIrOutputPortController method - /// + /// + /// GetIrOutputPortController method + /// + /// DeviceConfig to create the IrOutputPortController for + /// IrOutputPortController object public static IrOutputPortController GetIrOutputPortController(DeviceConfig config) { Debug.LogMessage(LogEventLevel.Debug, "Attempting to create new Ir Port Controller"); @@ -228,23 +235,32 @@ public static IrOutputPortController GetIrOutputPortController(DeviceConfig devC }*/ } - /// - /// Represents a IrOutPortConfig - /// + /// + /// Represents a IrOutPortConfig + /// public class IrOutPortConfig { + /// + /// Gets or sets the Port + /// [JsonProperty("port")] - /// - /// Gets or sets the Port - /// - public IROutputPort Port { get; set; } - + public IROutputPort Port { get; set; } + + /// + /// Gets or sets the FileName + /// [JsonProperty("fileName")] public string FileName { get; set; } + /// + /// Gets or sets a value indicating whether to use bridge join map + /// [JsonProperty("useBridgeJoinMap")] public bool UseBridgeJoinMap { get; set; } + /// + /// Constructor + /// public IrOutPortConfig() { FileName = ""; diff --git a/src/PepperDash.Essentials.Core/Config/AudioControlPointListItem.cs b/src/PepperDash.Essentials.Core/Config/AudioControlPointListItem.cs index 8b2aea54b..54cc35743 100644 --- a/src/PepperDash.Essentials.Core/Config/AudioControlPointListItem.cs +++ b/src/PepperDash.Essentials.Core/Config/AudioControlPointListItem.cs @@ -13,9 +13,15 @@ namespace PepperDash.Essentials.Core.Config /// public class AudioControlPointListItem { + /// + /// Level controls for this audio control point + /// [JsonProperty("levelControls")] public Dictionary LevelControls { get; set; } = new Dictionary(); + /// + /// Presets for this audio control point + /// [JsonProperty("presets")] public Dictionary Presets { get; set; } = new Dictionary(); diff --git a/src/PepperDash.Essentials.Core/Config/BasicConfig.cs b/src/PepperDash.Essentials.Core/Config/BasicConfig.cs index c4cbc63a7..435d448f9 100644 --- a/src/PepperDash.Essentials.Core/Config/BasicConfig.cs +++ b/src/PepperDash.Essentials.Core/Config/BasicConfig.cs @@ -14,33 +14,57 @@ namespace PepperDash.Essentials.Core.Config /// public class BasicConfig { + /// + /// Gets or sets the Info + /// [JsonProperty("info")] public InfoConfig Info { get; set; } + /// + /// Gets or sets the Devices + /// [JsonProperty("devices")] public List Devices { get; set; } + /// + /// Gets or sets the SourceLists + /// [JsonProperty("sourceLists")] public Dictionary> SourceLists { get; set; } + /// + /// Gets or sets the DestinationLists + /// [JsonProperty("destinationLists")] public Dictionary> DestinationLists { get; set; } + /// + /// Gets or sets the AudioControlPointLists + /// [JsonProperty("audioControlPointLists")] public Dictionary AudioControlPointLists { get; set; } + /// + /// Gets or sets the CameraLists + /// [JsonProperty("cameraLists")] public Dictionary> CameraLists { get; set; } + /// + /// Gets or sets the TieLines + /// [JsonProperty("tieLines")] - /// - /// Gets or sets the TieLines - /// - public List TieLines { get; set; } + public List TieLines { get; set; } + /// + /// Gets or sets the JoinMaps + /// [JsonProperty("joinMaps")] public Dictionary JoinMaps { get; set; } + /// + /// BasicConfig Constructor + /// public BasicConfig() { Info = new InfoConfig(); @@ -98,6 +122,7 @@ public AudioControlPointListItem GetAudioControlPointListForKey(string key) /// /// Checks CameraLists for a given list and returns it if found. Otherwise, returns null /// + /// Key of desired camera list public Dictionary GetCameraListForKey(string key) { if (CameraLists == null || string.IsNullOrEmpty(key) || !CameraLists.ContainsKey(key)) @@ -110,10 +135,6 @@ public Dictionary GetCameraListForKey(string key) /// Checks Devices for an item with a Key that matches and returns it if found. Otherwise, retunes null /// /// Key of desired device - /// - /// - /// GetDeviceForKey method - /// public DeviceConfig GetDeviceForKey(string key) { if (string.IsNullOrEmpty(key)) diff --git a/src/PepperDash.Essentials.Core/Config/DeviceConfig.cs b/src/PepperDash.Essentials.Core/Config/DeviceConfig.cs index 230637732..b8620bb94 100644 --- a/src/PepperDash.Essentials.Core/Config/DeviceConfig.cs +++ b/src/PepperDash.Essentials.Core/Config/DeviceConfig.cs @@ -55,6 +55,10 @@ public class DeviceConfig [JsonConverter(typeof(DevicePropertiesConverter))] public JToken Properties { get; set; } + /// + /// Constructor + /// + /// device config public DeviceConfig(DeviceConfig dc) { Key = dc.Key; @@ -68,6 +72,9 @@ public DeviceConfig(DeviceConfig dc) //Properties = JToken.FromObject(dc.Properties); } + /// + /// Default Constructor + /// public DeviceConfig() { } } @@ -85,6 +92,14 @@ public override bool CanConvert(Type objectType) return objectType == typeof(JToken); } + /// + /// ReadJson method + /// + /// reader to use + /// type of object being read + /// existing value for the object + /// serializer to use + /// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { return JToken.ReadFrom(reader); diff --git a/src/PepperDash.Essentials.Core/Config/Essentials/ConfigReader.cs b/src/PepperDash.Essentials.Core/Config/Essentials/ConfigReader.cs index 2591e8aa4..40c6c0cf2 100644 --- a/src/PepperDash.Essentials.Core/Config/Essentials/ConfigReader.cs +++ b/src/PepperDash.Essentials.Core/Config/Essentials/ConfigReader.cs @@ -18,17 +18,23 @@ namespace PepperDash.Essentials.Core.Config /// public class ConfigReader { + /// + /// Local Config Present Message + /// public const string LocalConfigPresent = @" *************************************************** ************* Using Local config file ************* ***************************************************"; + /// + /// The loaded config object + /// public static EssentialsConfig ConfigObject { get; private set; } - /// - /// LoadConfig2 method - /// + /// + /// LoadConfig2 method + /// public static bool LoadConfig2() { Debug.LogMessage(LogEventLevel.Information, "Loading unmerged system/template portal configuration file."); @@ -171,11 +177,8 @@ public static bool LoadConfig2() /// /// Returns all the files from the directory specified. /// - /// - /// - /// - /// GetConfigFiles method - /// + /// path to the directory + /// config files public static FileInfo[] GetConfigFiles(string filePath) { // Get the directory @@ -206,11 +209,8 @@ public static FileInfo[] GetConfigFiles(string filePath) /// /// Returns the group for a given device key in config /// - /// - /// - /// - /// GetGroupForDeviceKey method - /// + /// Key of the device + /// Group name if the device is found, null otherwise public static string GetGroupForDeviceKey(string key) { var dev = ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(key, StringComparison.OrdinalIgnoreCase)); diff --git a/src/PepperDash.Essentials.Core/Config/Essentials/ConfigUpdater.cs b/src/PepperDash.Essentials.Core/Config/Essentials/ConfigUpdater.cs index d7322cc4c..9df673bfc 100644 --- a/src/PepperDash.Essentials.Core/Config/Essentials/ConfigUpdater.cs +++ b/src/PepperDash.Essentials.Core/Config/Essentials/ConfigUpdater.cs @@ -16,13 +16,20 @@ namespace PepperDash.Essentials.Core.Config { + /// + /// ConfigUpdater class + /// public static class ConfigUpdater { + /// + /// ConfigStatusChanged event + /// public static event EventHandler ConfigStatusChanged; /// /// GetConfigFromServer method /// + /// URL of the config server public static void GetConfigFromServer(string url) { Debug.LogMessage(LogEventLevel.Information, "Attempting to get new config from '{0}'", url); @@ -210,13 +217,44 @@ static void RestartProgram() /// public enum eUpdateStatus { + /// + /// UpdateStarted status + /// UpdateStarted, + + /// + /// ConfigFileReceived status + /// ConfigFileReceived, + + /// + /// ArchivingConfigs status + /// ArchivingConfigs, + + /// + /// DeletingLocalConfig status + /// DeletingLocalConfig, + + /// + /// WritingConfigFile status + /// WritingConfigFile, + + /// + /// RestartingProgram status + /// RestartingProgram, + + /// + /// UpdateSucceeded status + /// UpdateSucceeded, + + /// + /// UpdateFailed status + /// UpdateFailed } @@ -230,6 +268,10 @@ public class ConfigStatusEventArgs : EventArgs /// public eUpdateStatus UpdateStatus { get; private set; } + /// + /// ConfigStatusEventArgs Constructor + /// + /// public ConfigStatusEventArgs(eUpdateStatus status) { UpdateStatus = status; diff --git a/src/PepperDash.Essentials.Core/Config/Essentials/ConfigWriter.cs b/src/PepperDash.Essentials.Core/Config/Essentials/ConfigWriter.cs index 665da856a..93517a3ca 100644 --- a/src/PepperDash.Essentials.Core/Config/Essentials/ConfigWriter.cs +++ b/src/PepperDash.Essentials.Core/Config/Essentials/ConfigWriter.cs @@ -18,22 +18,29 @@ namespace PepperDash.Essentials.Core.Config /// public class ConfigWriter { + /// + /// LocalConfigFolder constant + /// public const string LocalConfigFolder = "LocalConfig"; + /// + /// WriteTimeout constant + /// public const long WriteTimeout = 30000; + /// + /// WriteTimer variable + /// public static CTimer WriteTimer; + static CCriticalSection fileLock = new CCriticalSection(); /// /// Updates the config properties of a device /// - /// - /// - /// - /// - /// UpdateDeviceProperties method - /// + /// The key of the device to update + /// The new properties for the device + /// True if the update was successful, otherwise false public static bool UpdateDeviceProperties(string deviceKey, JToken properties) { bool success = false; @@ -59,6 +66,8 @@ public static bool UpdateDeviceProperties(string deviceKey, JToken properties) /// /// UpdateDeviceConfig method /// + /// The new device config + /// True if the update was successful, otherwise false public static bool UpdateDeviceConfig(DeviceConfig config) { bool success = false; @@ -82,6 +91,8 @@ public static bool UpdateDeviceConfig(DeviceConfig config) /// /// UpdateRoomConfig method /// + /// The new room config + /// True if the update was successful, otherwise false public static bool UpdateRoomConfig(DeviceConfig config) { bool success = false; @@ -118,7 +129,6 @@ static void ResetTimer() /// /// Writes the current config to a file in the LocalConfig subfolder /// - /// private static void WriteConfigFile(object o) { var filePath = Global.FilePathPrefix + LocalConfigFolder + Global.DirectorySeparator + "configurationFile.json"; @@ -129,13 +139,10 @@ private static void WriteConfigFile(object o) } /// - /// Writes - /// - /// - /// - /// - /// WriteFile method + /// Writes the current config data to a file /// + /// The file path to write to + /// The config data to write public static void WriteFile(string filePath, string configData) { if (WriteTimer != null) diff --git a/src/PepperDash.Essentials.Core/Config/ILoadConfig.cs b/src/PepperDash.Essentials.Core/Config/ILoadConfig.cs index 9780bd446..ed6ff61f0 100644 --- a/src/PepperDash.Essentials.Core/Config/ILoadConfig.cs +++ b/src/PepperDash.Essentials.Core/Config/ILoadConfig.cs @@ -11,6 +11,9 @@ namespace PepperDash.Essentials.Core /// public interface ILoadConfig { + /// + /// GoWithLoad method + /// void GoWithLoad(); } } diff --git a/src/PepperDash.Essentials.Core/Config/InfoConfig.cs b/src/PepperDash.Essentials.Core/Config/InfoConfig.cs index 8c506f176..1ce2c60bb 100644 --- a/src/PepperDash.Essentials.Core/Config/InfoConfig.cs +++ b/src/PepperDash.Essentials.Core/Config/InfoConfig.cs @@ -12,45 +12,57 @@ namespace PepperDash.Essentials.Core.Config /// public class InfoConfig { + /// + /// Gets or sets the Name + /// [JsonProperty("name")] public string Name { get; set; } + /// + /// Gets or sets the Date + /// [JsonProperty("date")] public DateTime Date { get; set; } + /// + /// Gets or sets the Type + /// [JsonProperty("type")] public string Type { get; set; } + /// + /// Gets or sets the Version + /// [JsonProperty("version")] - /// - /// Gets or sets the Version - /// public string Version { get; set; } - [JsonProperty("runtimeInfo")] /// /// Gets or sets the RuntimeInfo /// + [JsonProperty("runtimeInfo")] public RuntimeInfo RuntimeInfo { get; set; } + /// + /// Gets or sets the Comment + /// [JsonProperty("comment")] - /// - /// Gets or sets the Comment - /// public string Comment { get; set; } - [JsonProperty("hostname")] /// /// Gets or sets the HostName /// + [JsonProperty("hostname")] public string HostName { get; set; } - [JsonProperty("appNumber")] /// /// Gets or sets the AppNumber /// + [JsonProperty("appNumber")] public uint AppNumber { get; set; } + /// + /// InfoConfig Constructor + /// public InfoConfig() { Name = ""; diff --git a/src/PepperDash.Essentials.Core/Crestron/CrestronGenericBaseDevice.cs b/src/PepperDash.Essentials.Core/Crestron/CrestronGenericBaseDevice.cs index 28f840ee2..bdb3e4615 100644 --- a/src/PepperDash.Essentials.Core/Crestron/CrestronGenericBaseDevice.cs +++ b/src/PepperDash.Essentials.Core/Crestron/CrestronGenericBaseDevice.cs @@ -9,8 +9,14 @@ namespace PepperDash.Essentials.Core { + /// + /// Abstract base class for Crestron GenericBase devices + /// public abstract class CrestronGenericBaseDevice : EssentialsDevice, IOnline, IHasFeedback, ICommunicationMonitor, IUsageTracking { + /// + /// Gets or sets the Hardware + /// protected GenericBase Hardware; /// @@ -18,24 +24,32 @@ public abstract class CrestronGenericBaseDevice : EssentialsDevice, IOnline, IHa /// public FeedbackCollection Feedbacks { get; private set; } - /// - /// Gets or sets the IsOnline - /// + /// + /// Gets or sets the IsOnline + /// public BoolFeedback IsOnline { get; private set; } - /// - /// Gets or sets the IsRegistered - /// + + /// + /// Gets or sets the IsRegistered + /// public BoolFeedback IsRegistered { get; private set; } - /// - /// Gets or sets the IpConnectionsText - /// + + /// + /// Gets or sets the IpConnectionsText + /// public StringFeedback IpConnectionsText { get; private set; } - /// - /// Gets or sets the PreventRegistration - /// + /// + /// Gets or sets the PreventRegistration + /// public bool PreventRegistration { get; protected set; } + /// + /// Constructor + /// + /// key of the device + /// name of the device + /// hardware instance protected CrestronGenericBaseDevice(string key, string name, GenericBase hardware) : base(key, name) { @@ -50,6 +64,11 @@ protected CrestronGenericBaseDevice(string key, string name, GenericBase hardwar CommunicationMonitor = new CrestronGenericBaseCommunicationMonitor(this, hardware, 120000, 300000); } + /// + /// Constructor without hardware instance + /// + /// key of the device + /// name of the device protected CrestronGenericBaseDevice(string key, string name) : base(key, name) { @@ -57,6 +76,10 @@ protected CrestronGenericBaseDevice(string key, string name) } + /// + /// Registers the Crestron GenericBase hardware instance + /// + /// hardware instance protected void RegisterCrestronGenericBase(GenericBase hardware) { Hardware = hardware; @@ -68,10 +91,10 @@ protected void RegisterCrestronGenericBase(GenericBase hardware) CommunicationMonitor = new CrestronGenericBaseCommunicationMonitor(this, hardware, 120000, 300000); } - /// - /// CustomActivate method - /// - /// + /// + /// CustomActivate method + /// + /// public override bool CustomActivate() { Debug.LogMessage(LogEventLevel.Information, this, "Activating"); @@ -118,11 +141,7 @@ public override bool CustomActivate() /// /// This disconnects events and unregisters the base hardware device. /// - /// - /// - /// Deactivate method - /// - /// + /// true if successful, otherwise false public override bool Deactivate() { CommunicationMonitor.Stop(); @@ -138,10 +157,7 @@ public override bool Deactivate() /// /// Adds feedback(s) to the list /// - /// - /// - /// AddToFeedbackList method - /// + /// feedback(s) to be added to the list public void AddToFeedbackList(params Feedback[] newFbs) { foreach (var f in newFbs) @@ -173,9 +189,9 @@ void Hardware_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventAr #region IStatusMonitor Members - /// - /// Gets or sets the CommunicationMonitor - /// + /// + /// Gets or sets the CommunicationMonitor + /// public StatusMonitorBase CommunicationMonitor { get; private set; } #endregion @@ -189,29 +205,57 @@ void Hardware_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventAr #endregion } + /// + /// Abstract base class for Crestron GenericBase devices that are bridgeable + /// public abstract class CrestronGenericBridgeableBaseDevice : CrestronGenericBaseDevice, IBridgeAdvanced { + + /// + /// Constructor + /// + /// key of the device + /// name of the device + /// hardware instance protected CrestronGenericBridgeableBaseDevice(string key, string name, GenericBase hardware) : base(key, name, hardware) { } + /// + /// Constructor without hardware instance + /// + /// key of the device + /// name of the device protected CrestronGenericBridgeableBaseDevice(string key, string name) : base(key, name) { } - + /// + /// Links to API + /// + /// the trilist + /// the starting join number + /// the join map key + /// the bridge instance public abstract void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge); } //*********************************************************************************** - /// - /// Represents a CrestronGenericBaseDeviceEventIds - /// + /// + /// Represents a CrestronGenericBaseDeviceEventIds + /// public class CrestronGenericBaseDeviceEventIds { + /// + /// IsOnline event ID + /// public const uint IsOnline = 1; + + /// + /// IpConnectionsText event ID + /// public const uint IpConnectionsText =2; } @@ -220,9 +264,11 @@ public class CrestronGenericBaseDeviceEventIds /// public static class GenericBaseExtensions { - /// - /// RegisterWithLogging method - /// + /// + /// RegisterWithLogging method + /// + /// the GenericBase device + /// the device key public static eDeviceRegistrationUnRegistrationResponse RegisterWithLogging(this GenericBase device, string key) { var result = device.Register(); diff --git a/src/PepperDash.Essentials.Core/CrestronIO/GenericDigitalInputDevice.cs b/src/PepperDash.Essentials.Core/CrestronIO/GenericDigitalInputDevice.cs index 6f8581441..3692d58d2 100644 --- a/src/PepperDash.Essentials.Core/CrestronIO/GenericDigitalInputDevice.cs +++ b/src/PepperDash.Essentials.Core/CrestronIO/GenericDigitalInputDevice.cs @@ -21,6 +21,7 @@ namespace PepperDash.Essentials.Core.CrestronIO public class GenericDigitalInputDevice : EssentialsBridgeableDevice, IDigitalInput, IHasFeedback { private DigitalInput inputPort; + private readonly bool invertState; /// /// Gets or sets the InputStateFeedback @@ -41,7 +42,9 @@ public GenericDigitalInputDevice(string key, string name, Func inputPort.State); + invertState = string.Equals(config.CircuitType, "NC", StringComparison.OrdinalIgnoreCase); + + InputStateFeedback = new BoolFeedback("inputState", () => invertState ? !inputPort.State : inputPort.State); AddPostActivationAction(() => { diff --git a/src/PepperDash.Essentials.Core/CrestronIO/GenericRelayDevice.cs b/src/PepperDash.Essentials.Core/CrestronIO/GenericRelayDevice.cs index 63221fe7b..a41e14113 100644 --- a/src/PepperDash.Essentials.Core/CrestronIO/GenericRelayDevice.cs +++ b/src/PepperDash.Essentials.Core/CrestronIO/GenericRelayDevice.cs @@ -21,11 +21,22 @@ namespace PepperDash.Essentials.Core.CrestronIO [Description("Wrapper class for a Relay")] public class GenericRelayDevice : EssentialsBridgeableDevice, ISwitchedOutput { + /// + /// The RelayOutput controlled by this device + /// public Relay RelayOutput { get; private set; } + /// + /// Feedback to indicate whether the output is on + /// public BoolFeedback OutputIsOnFeedback { get; private set; } //Maintained for compatibility with PepperDash.Essentials.Core.Devices.CrestronProcessor + /// + /// Constructor for GenericRelayDevice + /// + /// key of the device + /// Relay output controlled by this device public GenericRelayDevice(string key, Relay relay) : base(key) { @@ -37,6 +48,13 @@ public GenericRelayDevice(string key, Relay relay) : RelayOutput.StateChange += RelayOutput_StateChange; } + /// + /// Constructor for GenericRelayDevice + /// + /// key of the device + /// name of the device + /// function to get the relay output + /// IO port configuration public GenericRelayDevice(string key, string name, Func postActivationFunc, IOPortConfig config) : base(key, name) @@ -212,6 +230,9 @@ public override void LinkToApi(BasicTriList trilist, uint joinStart, string join /// public class GenericRelayDeviceFactory : EssentialsDeviceFactory { + /// + /// Constructor for GenericRelayDeviceFactory + /// public GenericRelayDeviceFactory() { TypeNames = new List() { "relayoutput" }; diff --git a/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs b/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs index e2c4474ac..47e8aef6c 100644 --- a/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs +++ b/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs @@ -18,6 +18,7 @@ namespace PepperDash.Essentials.Core.CrestronIO public class GenericVersiportDigitalInputDevice : EssentialsBridgeableDevice, IDigitalInput, IPartitionStateProvider, IHasFeedback { private Versiport inputPort; + private readonly bool invertState; /// /// Gets or sets the InputStateFeedback @@ -47,7 +48,10 @@ public class GenericVersiportDigitalInputDevice : EssentialsBridgeableDevice, ID public GenericVersiportDigitalInputDevice(string key, string name, Func postActivationFunc, IOPortConfig config) : base(key, name) { - InputStateFeedback = new BoolFeedback("inputState", () => inputPort.DigitalIn); + var circuitType = string.IsNullOrEmpty(config.CircuitType) ? "NO" : config.CircuitType; + invertState = circuitType.Equals("NC", StringComparison.OrdinalIgnoreCase); + + InputStateFeedback = new BoolFeedback("inputState", () => invertState ? !inputPort.DigitalIn : inputPort.DigitalIn); PartitionPresentFeedback = new BoolFeedback("partitionPresent", () => !inputPort.DigitalIn); AddPostActivationAction(() => diff --git a/src/PepperDash.Essentials.Core/CrestronIO/IDigitalInput.cs b/src/PepperDash.Essentials.Core/CrestronIO/IDigitalInput.cs index 7c63b92c9..8e1b4c187 100644 --- a/src/PepperDash.Essentials.Core/CrestronIO/IDigitalInput.cs +++ b/src/PepperDash.Essentials.Core/CrestronIO/IDigitalInput.cs @@ -11,6 +11,9 @@ namespace PepperDash.Essentials.Core.CrestronIO /// public interface IDigitalInput { + /// + /// Feedback to indicate the state of the input + /// BoolFeedback InputStateFeedback { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/CrestronIO/IDigitalOutput.cs b/src/PepperDash.Essentials.Core/CrestronIO/IDigitalOutput.cs index b41519415..82aa0686b 100644 --- a/src/PepperDash.Essentials.Core/CrestronIO/IDigitalOutput.cs +++ b/src/PepperDash.Essentials.Core/CrestronIO/IDigitalOutput.cs @@ -11,7 +11,15 @@ namespace PepperDash.Essentials.Core.CrestronIO /// public interface IDigitalOutput { + /// + /// Feedback to indicate the state of the output + /// BoolFeedback OutputStateFeedback { get; } + + /// + /// Sets the output state + /// + /// The desired state of the output void SetOutput(bool state); } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/CrestronIO/IHasCresnetBranches.cs b/src/PepperDash.Essentials.Core/CrestronIO/IHasCresnetBranches.cs index 4f70f9145..ee86b5fee 100644 --- a/src/PepperDash.Essentials.Core/CrestronIO/IHasCresnetBranches.cs +++ b/src/PepperDash.Essentials.Core/CrestronIO/IHasCresnetBranches.cs @@ -13,6 +13,9 @@ namespace PepperDash.Essentials.Core /// public interface IHasCresnetBranches { + /// + /// Collection of Cresnet branches + /// CrestronCollection CresnetBranches { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/CrestronIO/IOPortConfig.cs b/src/PepperDash.Essentials.Core/CrestronIO/IOPortConfig.cs index 8641df69e..7b76958b6 100644 --- a/src/PepperDash.Essentials.Core/CrestronIO/IOPortConfig.cs +++ b/src/PepperDash.Essentials.Core/CrestronIO/IOPortConfig.cs @@ -37,5 +37,12 @@ public class IOPortConfig /// [JsonProperty("minimumChange")] public int MinimumChange { get; set; } + + /// + /// Gets or sets the circuit type: "NO" (Normally Open) or "NC" (Normally Closed) + /// If set to "NC", the input state will be inverted. Defaults to "NO" if not specified. + /// + [JsonProperty("circuitType")] + public string CircuitType { get; set; } = "NO"; } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/CrestronIO/ISwitchedOutput.cs b/src/PepperDash.Essentials.Core/CrestronIO/ISwitchedOutput.cs index 19f8e0df6..30b4b8f94 100644 --- a/src/PepperDash.Essentials.Core/CrestronIO/ISwitchedOutput.cs +++ b/src/PepperDash.Essentials.Core/CrestronIO/ISwitchedOutput.cs @@ -13,14 +13,30 @@ namespace PepperDash.Essentials.Core.CrestronIO /// public interface ISwitchedOutput { + /// + /// Feedback to indicate whether the output is on + /// BoolFeedback OutputIsOnFeedback {get;} + /// + /// Turns the output on + /// void On(); + + /// + /// Turns the output off + /// void Off(); } + /// + /// Describes a collection of switched outputs + /// public interface ISwitchedOutputCollection { + /// + /// Dictionary of switched outputs by their port number + /// Dictionary SwitchedOutputs { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Device Info/DeviceInfoEventArgs.cs b/src/PepperDash.Essentials.Core/Device Info/DeviceInfoEventArgs.cs index 22cd3b0da..266b0d0bc 100644 --- a/src/PepperDash.Essentials.Core/Device Info/DeviceInfoEventArgs.cs +++ b/src/PepperDash.Essentials.Core/Device Info/DeviceInfoEventArgs.cs @@ -12,11 +12,18 @@ public class DeviceInfoEventArgs:EventArgs /// public DeviceInfo DeviceInfo { get; set; } + /// + /// Constructor + /// public DeviceInfoEventArgs() { } + /// + /// Constructor with DeviceInfo + /// + /// the DeviceInfo instance public DeviceInfoEventArgs(DeviceInfo devInfo) { DeviceInfo = devInfo; diff --git a/src/PepperDash.Essentials.Core/Device Info/IDeviceInfoProvider.cs b/src/PepperDash.Essentials.Core/Device Info/IDeviceInfoProvider.cs index 4ac9e6c39..3f5a4735b 100644 --- a/src/PepperDash.Essentials.Core/Device Info/IDeviceInfoProvider.cs +++ b/src/PepperDash.Essentials.Core/Device Info/IDeviceInfoProvider.cs @@ -8,10 +8,19 @@ namespace PepperDash.Essentials.Core.DeviceInfo /// public interface IDeviceInfoProvider:IKeyed { + /// + /// Gets the DeviceInfo + /// DeviceInfo DeviceInfo { get; } + /// + /// Event fired when DeviceInfo changes + /// event DeviceInfoChangeHandler DeviceInfoChanged; + /// + /// Updates the DeviceInfo + /// void UpdateDeviceInfo(); } diff --git a/src/PepperDash.Essentials.Core/Device Info/NetworkDeviceHelpers.cs b/src/PepperDash.Essentials.Core/Device Info/NetworkDeviceHelpers.cs index 32c987b33..79eaa0189 100644 --- a/src/PepperDash.Essentials.Core/Device Info/NetworkDeviceHelpers.cs +++ b/src/PepperDash.Essentials.Core/Device Info/NetworkDeviceHelpers.cs @@ -8,6 +8,9 @@ namespace PepperDash.Essentials.Core.DeviceInfo { + /// + /// Static class NetworkDeviceHelpers + /// public static class NetworkDeviceHelpers { /// @@ -167,7 +170,14 @@ public static string ResolveIpFromHostname(string hostName) /// public class ArpEntry { + /// + /// The IP Address of the ARP Entry + /// public readonly IPAddress IpAddress; + + /// + /// The MAC Address of the ARP Entry + /// public readonly string MacAddress; /// diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IAudioZone.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IAudioZone.cs new file mode 100644 index 000000000..0ec65d79f --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IAudioZone.cs @@ -0,0 +1,14 @@ +namespace PepperDash.Essentials.Core +{ + /// + /// Defines minimum functionality for an audio zone + /// + public interface IAudioZone : IBasicVolumeWithFeedback + { + /// + /// Selects the specified input + /// + /// The input to select + void SelectInput(ushort input); + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IAudioZones.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IAudioZones.cs new file mode 100644 index 000000000..540b7a037 --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IAudioZones.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace PepperDash.Essentials.Core +{ + /// + /// Identifies a device that contains audio zones + /// + public interface IAudioZones : IRouting + { + /// + /// Gets the collection of audio zones + /// + Dictionary Zone { get; } + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeControls.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeControls.cs new file mode 100644 index 000000000..3767fa346 --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeControls.cs @@ -0,0 +1,27 @@ +using PepperDash.Core; + +namespace PepperDash.Essentials.Core +{ + /// + /// Defines minimal volume and mute control methods + /// + public interface IBasicVolumeControls : IKeyName + { + /// + /// Increases the volume + /// + /// Indicates whether the volume change is a press and hold action + void VolumeUp(bool pressRelease); + + /// + /// Decreases the volume + /// + /// Indicates whether the volume change is a press and hold action + void VolumeDown(bool pressRelease); + + /// + /// Toggles the mute state + /// + void MuteToggle(); + } +} diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeWithFeedback.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeWithFeedback.cs new file mode 100644 index 000000000..679dce71f --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeWithFeedback.cs @@ -0,0 +1,34 @@ +namespace PepperDash.Essentials.Core +{ + /// + /// Defines the contract for IBasicVolumeWithFeedback + /// + public interface IBasicVolumeWithFeedback : IBasicVolumeControls + { + /// + /// Gets the mute feedback + /// + BoolFeedback MuteFeedback { get; } + + /// + /// Mutes the volume + /// + void MuteOn(); + + /// + /// Unmutes the volume + /// + void MuteOff(); + + /// + /// Sets the volume to the specified level + /// + /// The volume level to set + void SetVolume(ushort level); + + /// + /// Gets the mute feedback + /// + IntFeedback VolumeLevelFeedback { get; } + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeWithFeedbackAdvanced.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeWithFeedbackAdvanced.cs new file mode 100644 index 000000000..f0a018c5a --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeWithFeedbackAdvanced.cs @@ -0,0 +1,18 @@ +namespace PepperDash.Essentials.Core +{ + /// + /// Defines the contract for IBasicVolumeWithFeedbackAdvanced + /// + public interface IBasicVolumeWithFeedbackAdvanced : IBasicVolumeWithFeedback + { + /// + /// Gets the raw volume level + /// + int RawVolumeLevel { get; } + + /// + /// Gets the volume level units + /// + eVolumeLevelUnits Units { get; } + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IChannel.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IChannel.cs index 09e0ac7a5..c8c540069 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IChannel.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IChannel.cs @@ -7,26 +7,56 @@ namespace PepperDash.Essentials.Core { /// - /// + /// Defines the contract for IChannel /// public interface IChannel { + /// + /// Channel up + /// + /// indicates whether this is a press or release + /// void ChannelUp(bool pressRelease); + /// + /// Channel down + /// + /// indicates whether this is a press or release void ChannelDown(bool pressRelease); + + /// + /// Last channel + /// + /// indicates whether this is a press or release void LastChannel(bool pressRelease); + + /// + /// Guide + /// + /// indicates whether this is a press or release + /// void Guide(bool pressRelease); + + /// + /// Info + /// + /// indicates whether this is a press or release void Info(bool pressRelease); + + /// + /// Exit + /// + /// indicates whether this is a press or release void Exit(bool pressRelease); } /// - /// + /// IChannelExtensions class /// public static class IChannelExtensions { - /// - /// LinkButtons method - /// + /// + /// LinkButtons method + /// public static void LinkButtons(this IChannel dev, BasicTriList triList) { triList.SetBoolSigAction(123, dev.ChannelUp); @@ -37,9 +67,9 @@ public static void LinkButtons(this IChannel dev, BasicTriList triList) triList.SetBoolSigAction(134, dev.Exit); } - /// - /// UnlinkButtons method - /// + /// + /// UnlinkButtons method + /// public static void UnlinkButtons(this IChannel dev, BasicTriList triList) { triList.ClearBoolSigAction(123); diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IColorFunctions.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IColorFunctions.cs index 0df2a97dd..69acc8f69 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IColorFunctions.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IColorFunctions.cs @@ -7,24 +7,45 @@ namespace PepperDash.Essentials.Core { /// - /// + /// IColor interface /// public interface IColor { + /// + /// Red button + /// + /// indicates whether this is a press or release void Red(bool pressRelease); + + /// + /// Green button + /// + /// indicates whether this is a press or release void Green(bool pressRelease); + + /// + /// Yellow button + /// + /// indicates whether this is a press or release void Yellow(bool pressRelease); + + /// + /// Blue button + /// + /// indicates whether this is a press or release void Blue(bool pressRelease); } /// - /// + /// IColorExtensions class /// public static class IColorExtensions { - /// - /// LinkButtons method - /// + /// + /// LinkButtons method + /// + /// The IColor device + /// The BasicTriList to link public static void LinkButtons(this IColor dev, BasicTriList TriList) { TriList.SetBoolSigAction(155, dev.Red); @@ -33,9 +54,11 @@ public static void LinkButtons(this IColor dev, BasicTriList TriList) TriList.SetBoolSigAction(158, dev.Blue); } - /// - /// UnlinkButtons method - /// + /// + /// UnlinkButtons method + /// + /// The IColor device + /// The BasicTriList to unlink public static void UnlinkButtons(this IColor dev, BasicTriList triList) { triList.ClearBoolSigAction(155); diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IDPad.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IDPad.cs index 4a070382d..ec9362b85 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IDPad.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IDPad.cs @@ -11,23 +11,57 @@ namespace PepperDash.Essentials.Core /// public interface IDPad : IKeyed { + /// + /// Up button press + /// + /// determines if the button is pressed or released void Up(bool pressRelease); + + /// + /// Down button press + /// + /// determines if the button is pressed or released void Down(bool pressRelease); + + /// + /// Left button press + /// + /// determines if the button is pressed or released void Left(bool pressRelease); + + /// + /// Right button press + /// + /// determines if the button is pressed or released void Right(bool pressRelease); + + /// + /// Select button press + /// + /// determines if the button is pressed or released void Select(bool pressRelease); + + /// + /// Menu button press + /// + /// determines if the button is pressed or released void Menu(bool pressRelease); + + /// + /// Exit button press + /// + /// determines if the button is pressed or released void Exit(bool pressRelease); } /// - /// + /// IDPadExtensions class /// public static class IDPadExtensions { - /// - /// LinkButtons method - /// + /// + /// LinkButtons method + /// public static void LinkButtons(this IDPad dev, BasicTriList triList) { triList.SetBoolSigAction(138, dev.Up); @@ -39,9 +73,9 @@ public static void LinkButtons(this IDPad dev, BasicTriList triList) triList.SetBoolSigAction(134, dev.Exit); } - /// - /// UnlinkButtons method - /// + /// + /// UnlinkButtons method + /// public static void UnlinkButtons(this IDPad dev, BasicTriList triList) { triList.ClearBoolSigAction(138); diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IDisplayBasic.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IDisplayBasic.cs index f191417c4..b76d31450 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IDisplayBasic.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IDisplayBasic.cs @@ -11,15 +11,54 @@ namespace PepperDash.Essentials.Core.Devices.DeviceTypeInterfaces /// public interface IDisplayBasic { + /// + /// Sets the input to HDMI 1 + /// void InputHdmi1(); + + /// + /// Sets the input to HDMI 2 + /// void InputHdmi2(); + + /// + /// Sets the input to HDMI 3 + /// void InputHdmi3(); + + /// + /// Sets the input to HDMI 4 + /// void InputHdmi4(); + + /// + /// Sets the input to DisplayPort 1 + /// void InputDisplayPort1(); + + /// + /// Sets the input to DVI 1 + /// void InputDvi1(); + + /// + /// Sets the input to Video 1 + /// void InputVideo1(); + + /// + /// Sets the input to VGA 1 + /// void InputVga1(); + + /// + /// Sets the input to VGA 2 + /// void InputVga2(); + + /// + /// Sets the input to RGB 1 + /// void InputRgb1(); } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IDvr.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IDvr.cs index 214fa78bc..527e8d46f 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IDvr.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IDvr.cs @@ -16,24 +16,40 @@ namespace PepperDash.Essentials.Core /// public interface IDvr : IDPad { + /// + /// DVR List button press + /// + /// determines if the button is pressed or released void DvrList(bool pressRelease); + + /// + /// Record button press + /// + /// determines if the button is pressed or released void Record(bool pressRelease); } /// - /// + /// IDvrExtensions class /// public static class IDvrExtensions { - /// - /// LinkButtons method - /// + /// + /// LinkButtons method + /// + /// IDvr device + /// BasicTriList to link to public static void LinkButtons(this IDvr dev, BasicTriList triList) { triList.SetBoolSigAction(136, dev.DvrList); triList.SetBoolSigAction(152, dev.Record); } + /// + /// UnlinkButtons method + /// + /// IDvr device + /// BasicTriList to unlink from public static void UnlinkButtons(this IDvr dev, BasicTriList triList) { triList.ClearBoolSigAction(136); diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs index c24e3e7ad..efc068b02 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs @@ -11,7 +11,15 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface IEmergencyOSD { + /// + /// Shows an emergency message on the OSD + /// + /// The URL of the emergency message to display void ShowEmergencyMessage(string url); + + /// + /// Hides the emergency message from the OSD + /// void HideEmergencyMessage(); } } diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IFullAudioSettings.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IFullAudioSettings.cs new file mode 100644 index 000000000..7036551c2 --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IFullAudioSettings.cs @@ -0,0 +1,153 @@ +namespace PepperDash.Essentials.Core +{ + /// + /// Defines the contract for IFullAudioSettings + /// + public interface IFullAudioSettings : IBasicVolumeWithFeedback + { + /// + /// SetBalance method + /// + /// level to set + void SetBalance(ushort level); + + /// + /// BalanceLeft method + /// + /// determines if the button is pressed or released + void BalanceLeft(bool pressRelease); + + /// + /// BalanceRight method + /// + /// determines if the button is pressed or released + void BalanceRight(bool pressRelease); + + /// + /// SetBass method + /// + /// level to set + void SetBass(ushort level); + + /// + /// BassUp method + /// + /// determines if the button is pressed or released + void BassUp(bool pressRelease); + + /// + /// BassDown method + /// + /// determines if the button is pressed or released + void BassDown(bool pressRelease); + + /// + /// SetTreble method + /// + /// level to set + void SetTreble(ushort level); + + /// + /// TrebleUp method + /// + /// determines if the button is pressed or released + void TrebleUp(bool pressRelease); + + /// + /// TrebleDown method + /// + /// determines if the button is pressed or released + void TrebleDown(bool pressRelease); + + /// + /// hasMaxVolume property + /// + bool hasMaxVolume { get; } + + /// + /// SetMaxVolume method + /// + /// level to set + void SetMaxVolume(ushort level); + + /// + /// MaxVolumeUp method + /// + /// determines if the button is pressed or released + void MaxVolumeUp(bool pressRelease); + + /// + /// MaxVolumeDown method + /// + /// determines if the button is pressed or released + void MaxVolumeDown(bool pressRelease); + + /// + /// hasDefaultVolume property + /// + bool hasDefaultVolume { get; } + + /// + /// SetDefaultVolume method + /// + /// level to set + void SetDefaultVolume(ushort level); + + /// + /// DefaultVolumeUp method + /// + /// determines if the button is pressed or released + void DefaultVolumeUp(bool pressRelease); + + /// + /// DefaultVolumeDown method + /// + /// determines if the button is pressed or released + void DefaultVolumeDown(bool pressRelease); + + /// + /// LoudnessToggle method + /// + void LoudnessToggle(); + + /// + /// MonoToggle method + /// + void MonoToggle(); + + /// + /// LoudnessFeedback property + /// + BoolFeedback LoudnessFeedback { get; } + + /// + /// MonoFeedback property + /// + BoolFeedback MonoFeedback { get; } + + /// + /// BalanceFeedback property + /// + IntFeedback BalanceFeedback { get; } + + /// + /// BassFeedback property + /// + IntFeedback BassFeedback { get; } + + /// + /// TrebleFeedback property + /// + IntFeedback TrebleFeedback { get; } + + /// + /// MaxVolumeFeedback property + /// + IntFeedback MaxVolumeFeedback { get; } + + /// + /// DefaultVolumeFeedback property + /// + IntFeedback DefaultVolumeFeedback { get; } + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasBranding.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasBranding.cs index 299f14313..c05ef5728 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasBranding.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasBranding.cs @@ -7,7 +7,15 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface IHasBranding { + /// + /// Gets whether branding is enabled + /// bool BrandingEnabled { get; } + + /// + /// Initializes branding for the device + /// + /// The key identifying the room for branding purposes void InitializeBranding(string roomKey); } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasCurrentVolumeControls.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasCurrentVolumeControls.cs new file mode 100644 index 000000000..8239f2d53 --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasCurrentVolumeControls.cs @@ -0,0 +1,30 @@ +using System; + +namespace PepperDash.Essentials.Core +{ + /// + /// Defines the contract for IHasCurrentVolumeControls + /// + public interface IHasCurrentVolumeControls + { + /// + /// CurrentVolumeControls property + /// + IBasicVolumeControls CurrentVolumeControls { get; } + + /// + /// CurrentVolumeDeviceChange event + /// + event EventHandler CurrentVolumeDeviceChange; + + /// + /// SetDefaultLevels method + /// + void SetDefaultLevels(); + + /// + /// ZeroVolumeWhenSwtichingVolumeDevices property + /// + bool ZeroVolumeWhenSwtichingVolumeDevices { get; } + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasFarEndContentStatus.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasFarEndContentStatus.cs index 114665dba..5a8f66ee4 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasFarEndContentStatus.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasFarEndContentStatus.cs @@ -5,6 +5,9 @@ /// public interface IHasFarEndContentStatus { + /// + /// Gets whether far end content is being received + /// BoolFeedback ReceivingContent { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasInputs.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasInputs.cs index ff9511fa8..42e97b4b4 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasInputs.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasInputs.cs @@ -11,6 +11,9 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface IHasInputs : IKeyName { + /// + /// Gets the collection of inputs + /// ISelectableItems Inputs { get; } } } diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasMuteControl.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasMuteControl.cs new file mode 100644 index 000000000..208678688 --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasMuteControl.cs @@ -0,0 +1,13 @@ +namespace PepperDash.Essentials.Core +{ + /// + /// Defines basic mute control methods + /// + public interface IHasMuteControl + { + /// + /// MuteToggle method + /// + void MuteToggle(); + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasMuteControlWithFeedback.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasMuteControlWithFeedback.cs new file mode 100644 index 000000000..eb71b40f5 --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasMuteControlWithFeedback.cs @@ -0,0 +1,23 @@ +namespace PepperDash.Essentials.Core +{ + /// + /// Defines mute control methods and properties with feedback + /// + public interface IHasMuteControlWithFeedback : IHasMuteControl + { + /// + /// MuteFeedback property + /// + BoolFeedback MuteFeedback { get; } + + /// + /// MuteOn method + /// + void MuteOn(); + + /// + /// MuteOff method + /// + void MuteOff(); + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasPhoneDialing.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasPhoneDialing.cs index 80fdcbe4d..b884092bd 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasPhoneDialing.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasPhoneDialing.cs @@ -8,11 +8,36 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface IHasPhoneDialing { + /// + /// Feedback that indicates whether the phone is off-hook + /// BoolFeedback PhoneOffHookFeedback { get; } + + /// + /// Feedback that provides the caller ID name + /// StringFeedback CallerIdNameFeedback { get; } + + /// + /// Feedback that provides the caller ID number + /// StringFeedback CallerIdNumberFeedback { get; } + + /// + /// Dials a phone call to the specified number + /// + /// the number to dial void DialPhoneCall(string number); + + /// + /// Ends the current phone call + /// void EndPhoneCall(); + + /// + /// Sends a DTMF digit to the phone + /// + /// the DTMF digit to send void SendDtmfToPhone(string digit); } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasSurroundSoundModes.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasSurroundSoundModes.cs index c1c4ec86d..45b24f8bc 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasSurroundSoundModes.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasSurroundSoundModes.cs @@ -11,10 +11,18 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// Describes a device that has selectable surround sound modes /// /// the type to use as the key for each input item. Most likely an enum or string + /// the type used to select an item. Most likely an enum or string public interface IHasSurroundSoundModes: IKeyName { + /// + /// The available surround sound modes + /// ISelectableItems SurroundSoundModes { get; } + /// + /// The currently selected surround sound mode + /// + /// the selector for the surround sound mode void SetSurroundSoundMode(TSelector selector); } } diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasVolumeControl.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasVolumeControl.cs new file mode 100644 index 000000000..aff866deb --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasVolumeControl.cs @@ -0,0 +1,20 @@ +namespace PepperDash.Essentials.Core +{ + /// + /// Defines the contract for IHasVolumeControl + /// + public interface IHasVolumeControl + { + /// + /// VolumeUp method + /// + /// determines if the volume up command is a press or release action + void VolumeUp(bool pressRelease); + + /// + /// VolumeDown method + /// + /// determines if the volume down command is a press or release action + void VolumeDown(bool pressRelease); + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasVolumeControlWithFeedback.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasVolumeControlWithFeedback.cs new file mode 100644 index 000000000..fe3f54404 --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasVolumeControlWithFeedback.cs @@ -0,0 +1,19 @@ +namespace PepperDash.Essentials.Core +{ + /// + /// Defines volume control methods and properties with feedback + /// + public interface IHasVolumeControlWithFeedback : IHasVolumeControl + { + /// + /// SetVolume method + /// + /// The volume level to set + void SetVolume(ushort level); + + /// + /// VolumeLevelFeedback property + /// + IntFeedback VolumeLevelFeedback { get; } + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasVolumeDevice.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasVolumeDevice.cs new file mode 100644 index 000000000..3012da197 --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasVolumeDevice.cs @@ -0,0 +1,13 @@ +namespace PepperDash.Essentials.Core +{ + /// + /// Defines the contract for IHasVolumeDevice + /// + public interface IHasVolumeDevice + { + /// + /// VolumeDevice property + /// + IBasicVolumeControls VolumeDevice { get; } + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasWebView.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasWebView.cs index 3d95504cf..396229ce9 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasWebView.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasWebView.cs @@ -11,12 +11,60 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface IHasWebView { + /// + /// Indicates whether the webview is currently visible + /// bool WebviewIsVisible { get; } + + /// + /// Shows the webview with the specified parameters + /// + /// the URL to display in the webview + /// the display mode for the webview + /// the title to display on the webview + /// the target for the webview void ShowWebView(string url, string mode, string title, string target); + + /// + /// Hides the webview + /// void HideWebView(); + + /// + /// Event raised when the webview status changes + /// event EventHandler WebViewStatusChanged; } + + /// + /// Defines the contract for IHasWebViewWithPwaMode + /// + public interface IHasWebViewWithPwaMode : IHasWebView + { + /// + /// Indicates whether the webview is currently in PWA mode + /// + bool IsInPwaMode { get; } + + /// + /// Gets the BoolFeedback indicating whether the webview is currently in PWA mode + /// + BoolFeedback IsInPwaModeFeedback { get; } + + /// + /// Sends navigators to the specified PWA URL. Accepts an absolute URL or a relative URL for a mobile control app + /// + /// The URL to navigate to + void SendNavigatorsToPwaUrl(string url); + + /// + /// Exits navigators from PWA mode + /// + void ExitNavigatorsPwaMode(); + } + + /// /// Represents a WebViewStatusChangedEventArgs /// @@ -27,6 +75,10 @@ public class WebViewStatusChangedEventArgs : EventArgs /// public string Status { get; } + /// + /// Constructor for WebViewStatusChangedEventArgs + /// + /// the new status of the webview public WebViewStatusChangedEventArgs(string status) { Status = status; diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ILanguageDefinition.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ILanguageDefinition.cs index 6a168f2d7..f02c0e05c 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ILanguageDefinition.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ILanguageDefinition.cs @@ -8,14 +8,49 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface ILanguageDefinition { + /// + /// The locale name for the language definition + /// string LocaleName { get; set; } + + /// + /// The friendly name for the language definition + /// string FriendlyName { get; set; } + + /// + /// Indicates whether the language definition is enabled + /// bool Enable { get; set; } + + /// + /// The UI labels for the language definition + /// List UiLabels { get; set; } + + /// + /// The source and destination labels for the language definition + /// List Sources { get; set; } + + /// + /// The destination labels for the language definition + /// List Destinations { get; set; } + + /// + /// The source group names for the language definition + /// List SourceGroupNames { get; set; } + + /// + /// The destination group names for the language definition + /// List DestinationGroupNames { get; set; } + + /// + /// The room names for the language definition + /// List RoomNames { get; set; } } } diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ILanguageProvider.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ILanguageProvider.cs index ea6afe3b7..9ac22d2bd 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ILanguageProvider.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ILanguageProvider.cs @@ -8,8 +8,14 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface ILanguageProvider { + /// + /// The current language definition + /// ILanguageDefinition CurrentLanguage { get; set; } + /// + /// Event raised when the current language changes + /// event EventHandler CurrentLanguageChanged; } diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ILevelControls.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ILevelControls.cs index 34c87419b..e0a1081f6 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ILevelControls.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ILevelControls.cs @@ -11,6 +11,9 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface ILevelControls { + /// + /// The level control points + /// Dictionary LevelControlPoints { get; } } } diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IMobileControlAction.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IMobileControlAction.cs index 982deaae3..86a3d61a9 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IMobileControlAction.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IMobileControlAction.cs @@ -8,8 +8,14 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface IMobileControlAction { + /// + /// The messenger to use for mobile control actions + /// IMobileControlMessenger Messenger { get; } + /// + /// The action to perform for mobile control actions + /// Action Action { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IMobileControlMessage.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IMobileControlMessage.cs index 41645da2f..326eb38df 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IMobileControlMessage.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IMobileControlMessage.cs @@ -3,14 +3,26 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces { + /// + /// Defines the contract for IMobileControlMessage + /// public interface IMobileControlMessage { + /// + /// The type of mobile control message + /// [JsonProperty("type")] string Type { get; } + /// + /// The client ID for the mobile control message + /// [JsonProperty("clientId", NullValueHandling = NullValueHandling.Ignore)] string ClientId { get; } + /// + /// The content of the mobile control message + /// [JsonProperty("content", NullValueHandling = NullValueHandling.Ignore)] JToken Content { get; } diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IMobileControlRoomMessenger.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IMobileControlRoomMessenger.cs index 6f4d9a171..9a0a55171 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IMobileControlRoomMessenger.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IMobileControlRoomMessenger.cs @@ -8,26 +8,60 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface IMobileControlRoomMessenger : IKeyed { + /// + /// Raised when the user code changes + /// event EventHandler UserCodeChanged; + /// + /// Raised when the user is prompted for the code + /// event EventHandler UserPromptedForCode; + /// + /// Raised when a client joins the room + /// event EventHandler ClientJoined; + /// + /// Raised when the app url changes + /// event EventHandler AppUrlChanged; + /// + /// The user code for joining the room + /// string UserCode { get; } + /// + /// The QR code URL for joining the room + /// string QrCodeUrl { get; } + /// + /// The QR code checksum + /// string QrCodeChecksum { get; } + /// + /// The Mobile Control server URL + /// string McServerUrl { get; } + /// + /// The name of the room + /// string RoomName { get; } + /// + /// The Mobile Control app URL + /// string AppUrl { get; } + /// + /// Updates the url of the Mobile Control app + /// + /// The new URL of the Mobile Control app void UpdateAppUrl(string url); } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/INumeric.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/INumeric.cs index 3adb7f4e4..fc0fca999 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/INumeric.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/INumeric.cs @@ -10,37 +10,119 @@ namespace PepperDash.Essentials.Core /// public interface INumericKeypad:IKeyed { + /// + /// Digit buttons 0 + /// + /// determines if the digit button command is a press or release action void Digit0(bool pressRelease); + + /// + /// Digit buttons 1 + /// + /// determines if the digit button command is a press or release action void Digit1(bool pressRelease); + + /// + /// Digit buttons 2 + /// + /// determines if the digit button command is a press or release action void Digit2(bool pressRelease); + + /// + /// Digit buttons 3 + /// + /// determines if the digit button command is a press or release action void Digit3(bool pressRelease); + + /// + /// Digit buttons 4 + /// + /// void Digit4(bool pressRelease); + + /// + /// Digit buttons 5 + /// + /// determines if the digit button command is a press or release action void Digit5(bool pressRelease); + + /// + /// Digit buttons 6 + /// + /// determines if the digit button command is a press or release action void Digit6(bool pressRelease); + + /// + /// Digit buttons 7 + /// + /// determines if the digit button command is a press or release action void Digit7(bool pressRelease); + + /// + /// Digit buttons 8 + /// + /// determines if the digit button command is a press or release action void Digit8(bool pressRelease); + + /// + /// Digit buttons 9 + /// + /// determines if the digit button command is a press or release action void Digit9(bool pressRelease); /// /// Used to hide/show the button and/or text on the left-hand keypad button /// bool HasKeypadAccessoryButton1 { get; } + + /// + /// Label for the left-hand keypad button + /// string KeypadAccessoryButton1Label { get; } + + /// + /// Left-hand keypad button action + /// + /// determines if the button command is a press or release action void KeypadAccessoryButton1(bool pressRelease); + /// + /// Used to hide/show the button and/or text on the right-hand keypad button + /// bool HasKeypadAccessoryButton2 { get; } + + /// + /// Label for the right-hand keypad button + /// string KeypadAccessoryButton2Label { get; } + + /// + /// Right-hand keypad button action + /// + /// determines if the button command is a press or release action void KeypadAccessoryButton2(bool pressRelease); } + /// + /// Defines the contract for ISetTopBoxNumericKeypad + /// public interface ISetTopBoxNumericKeypad : INumericKeypad { + /// + /// Dash button action + /// + /// determines if the button command is a press or release action void Dash(bool pressRelease); + + /// + /// Keypad Enter button action + /// + /// determines if the button command is a press or release action void KeypadEnter(bool pressRelease); } /// - /// + /// INumericExtensions class /// public static class INumericExtensions { @@ -65,9 +147,9 @@ public static void LinkButtons(this INumericKeypad dev, BasicTriList trilist) trilist.StringInput[111].StringValue = dev.KeypadAccessoryButton2Label; } - /// - /// UnlinkButtons method - /// + /// + /// UnlinkButtons method + /// public static void UnlinkButtons(this INumericKeypad dev, BasicTriList trilist) { trilist.ClearBoolSigAction(110); diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IPasswordPrompt.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IPasswordPrompt.cs index 31e7acaf4..2ee853412 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IPasswordPrompt.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IPasswordPrompt.cs @@ -19,10 +19,13 @@ public interface IPasswordPrompt /// /// Submits the password /// - /// + /// The password to submit void SubmitPassword(string password); } + /// + /// PasswordPromptEventArgs class + /// public class PasswordPromptEventArgs : EventArgs { /// @@ -45,6 +48,13 @@ public class PasswordPromptEventArgs : EventArgs /// public string Message { get; private set; } + /// + /// Constructor + /// + /// indicates if the last submitted password was incorrect + /// indicates if the login attempt failed + /// indicates if the login attempt was cancelled + /// provides a message related to the password prompt public PasswordPromptEventArgs(bool lastAttemptIncorrect, bool loginFailed, bool loginCancelled, string message) { LastAttemptWasIncorrect = lastAttemptIncorrect; diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IPower.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IPower.cs index 79c58fa29..b94a64ed6 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IPower.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IPower.cs @@ -19,6 +19,9 @@ namespace PepperDash.Essentials.Core /// public interface IHasPowerControlWithFeedback : IHasPowerControl { + /// + /// Feedback indicating whether the device is powered on + /// BoolFeedback PowerIsOnFeedback { get; } } @@ -27,13 +30,24 @@ public interface IHasPowerControlWithFeedback : IHasPowerControl /// public interface IHasPowerControl { + /// + /// Powers the device on + /// void PowerOn(); + + /// + /// Powers the device off + /// void PowerOff(); + + /// + /// Toggles the power state of the device + /// void PowerToggle(); } /// - /// + /// IHasPowerControlExtensions class /// public static class IHasPowerControlExtensions { diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IProjectorScreenLiftControl.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IProjectorScreenLiftControl.cs index 1d5d20da3..56aef09ea 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IProjectorScreenLiftControl.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IProjectorScreenLiftControl.cs @@ -5,26 +5,60 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces { - /// - /// Defines the contract for IProjectorScreenLiftControl - /// + /// + /// Defines the contract for IProjectorScreenLiftControl + /// public interface IProjectorScreenLiftControl { + /// + /// Raises the screen/lift + /// void Raise(); + + /// + /// Lowers the screen/lift + /// void Lower(); + + /// + /// Stops the screen/lift + /// BoolFeedback IsInUpPosition { get; } + + /// + /// Gets whether the screen/lift is in the up position + /// bool InUpPosition { get; } + + /// + /// Gets whether the screen/lift is in the down position + /// event EventHandler PositionChanged; + + /// + /// The device key of the display associated with this screen/lift + /// string DisplayDeviceKey { get; } + + /// + /// The type of device + /// eScreenLiftControlType Type { get; } // screen/lift } - /// - /// Enumeration of eScreenLiftControlType values - /// + /// + /// Enumeration of eScreenLiftControlType values + /// public enum eScreenLiftControlType { + /// + /// Lift type device + /// lift, + + /// + /// Screen type device + /// screen } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ISelectableItem.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ISelectableItem.cs index 8d99b959f..ff05188e8 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ISelectableItem.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ISelectableItem.cs @@ -10,10 +10,20 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface ISelectableItem : IKeyName { + /// + /// Raised when the item is updated + /// event EventHandler ItemUpdated; + /// + /// Gets or sets whether the item is selected + /// [JsonProperty("isSelected")] bool IsSelected { get; set; } + + /// + /// Selects the item + /// void Select(); } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ISelectableItems.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ISelectableItems.cs index f3d2beec7..c955a56fe 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ISelectableItems.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ISelectableItems.cs @@ -9,12 +9,25 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface ISelectableItems where TValue : ISelectableItem { + /// + /// Raised when the items are updated + /// event EventHandler ItemsUpdated; + + /// + /// Raised when the current item changes + /// event EventHandler CurrentItemChanged; + /// + /// Gets or sets the collection of selectable items + /// [JsonProperty("items")] Dictionary Items { get; set; } + /// + /// Gets or sets the current selected item key + /// [JsonProperty("currentItem")] TKey CurrentItem { get; set; } @@ -24,9 +37,6 @@ public interface ISelectableItems where TValue : ISelectableItem /// Describes a collection of items that can be selected /// /// type for the keys in the collection. Probably a string or enum - /// - /// Defines the contract for ISelectableItems - /// public interface ISelectableItems : ISelectableItems { } diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ISetTopBoxControls.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ISetTopBoxControls.cs index 646aab93f..d8bf969e2 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ISetTopBoxControls.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ISetTopBoxControls.cs @@ -5,9 +5,9 @@ namespace PepperDash.Essentials.Core { - /// - /// Defines the contract for ISetTopBoxControls - /// + /// + /// Defines the contract for ISetTopBoxControls + /// public interface ISetTopBoxControls : IChannel, IColor, IDPad, ISetTopBoxNumericKeypad, ITransport, IUiDisplayInfo { @@ -31,27 +31,51 @@ public interface ISetTopBoxControls : IChannel, IColor, IDPad, ISetTopBoxNumeric /// bool HasDpad { get; } + /// + /// TV Presets model + /// PepperDash.Essentials.Core.Presets.DevicePresetsModel TvPresets { get; } + + /// + /// LoadPresets method + /// + /// path to file that contains the presets void LoadPresets(string filePath); + /// + /// DvrList button action + /// + /// determines if the button action is a press or release void DvrList(bool pressRelease); + + /// + /// Replay button action + /// + /// determines if the button action is a press or release void Replay(bool pressRelease); } + /// + /// ISetTopBoxControlsExtensions class + /// public static class ISetTopBoxControlsExtensions { - /// - /// LinkButtons method - /// + /// + /// LinkButtons method + /// + /// The ISetTopBoxControls device + /// The BasicTriList to link buttons to public static void LinkButtons(this ISetTopBoxControls dev, BasicTriList triList) { triList.SetBoolSigAction(136, dev.DvrList); triList.SetBoolSigAction(152, dev.Replay); } - /// - /// UnlinkButtons method - /// + /// + /// UnlinkButtons method + /// + /// The ISetTopBoxControls device + /// The BasicTriList to unlink buttons from public static void UnlinkButtons(this ISetTopBoxControls dev, BasicTriList triList) { triList.ClearBoolSigAction(136); diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ITemperatureSensor.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ITemperatureSensor.cs index f77a2ef8b..897855b4a 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ITemperatureSensor.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ITemperatureSensor.cs @@ -17,9 +17,15 @@ public interface ITemperatureSensor /// IntFeedback TemperatureFeedback { get; } - + /// + /// The temperature in Celsius format + /// BoolFeedback TemperatureInCFeedback { get; } + /// + /// Sets the temperature format to Celsius or Fahrenheit + /// + /// If true, sets the format to Celsius; otherwise, sets it to Fahrenheit. void SetTemperatureFormat(bool setToC); } } diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ITransport.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ITransport.cs index 1a8f2a2b5..917a4b19c 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ITransport.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ITransport.cs @@ -7,25 +7,65 @@ namespace PepperDash.Essentials.Core /// public interface ITransport { + /// + /// Play button action + /// + /// determines if the button action is a press or release void Play(bool pressRelease); + + /// + /// Pause button action + /// + /// determines if the button action is a press or release void Pause(bool pressRelease); + + /// + /// Rewind button action + /// + /// determines if the button action is a press or release void Rewind(bool pressRelease); + + /// + /// Fast Forward button action + /// + /// determines if the button action is a press or release void FFwd(bool pressRelease); + + /// + /// Chapter Minus button action + /// + /// determines if the button action is a press or release void ChapMinus(bool pressRelease); + + /// + /// Chapter Plus button action + /// + /// determines if the button action is a press or release void ChapPlus(bool pressRelease); + + /// + /// Stop button action + /// + /// determines if the button action is a press or release void Stop(bool pressRelease); + + /// + /// Record button action + /// + /// determines if the button action is a press or release void Record(bool pressRelease); } /// - /// + /// ITransportExtensions class /// public static class ITransportExtensions { /// /// Attaches to trilist joins: Play:145, Pause:146, Stop:147, ChapPlus:148, ChapMinus:149, Rewind:150, Ffwd:151, Record:154 - /// /// + /// The ITransport device + /// The BasicTriList to link buttons to public static void LinkButtons(this ITransport dev, BasicTriList triList) { triList.SetBoolSigAction(145, dev.Play); @@ -38,9 +78,11 @@ public static void LinkButtons(this ITransport dev, BasicTriList triList) triList.SetBoolSigAction(154, dev.Record); } - /// - /// UnlinkButtons method - /// + /// + /// UnlinkButtons method + /// + /// The ITransport device + /// The BasicTriList to unlink buttons from public static void UnlinkButtons(this ITransport dev, BasicTriList triList) { triList.ClearBoolSigAction(145); diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ITvPresetsProvider.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ITvPresetsProvider.cs index 68650fa46..09b7066c4 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ITvPresetsProvider.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/ITvPresetsProvider.cs @@ -7,6 +7,9 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces /// public interface ITvPresetsProvider { + /// + /// The TV presets model + /// DevicePresetsModel TvPresets { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IUiDisplayInfo.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IUiDisplayInfo.cs index aa0144fef..231abf1f4 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IUiDisplayInfo.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IUiDisplayInfo.cs @@ -2,11 +2,14 @@ namespace PepperDash.Essentials.Core { - /// - /// Defines the contract for IUiDisplayInfo - /// + /// + /// Defines the contract for IUiDisplayInfo + /// public interface IUiDisplayInfo : IKeyed { + /// + /// Display UI Type + /// uint DisplayUiType { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IWarmingCooling.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IWarmingCooling.cs index 2baf15480..e69bf35c7 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IWarmingCooling.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IWarmingCooling.cs @@ -11,7 +11,14 @@ namespace PepperDash.Essentials.Core /// public interface IWarmingCooling { + /// + /// Feedback indicating whether the device is warming up + /// BoolFeedback IsWarmingUpFeedback { get; } + + /// + /// Feedback indicating whether the device is cooling down + /// BoolFeedback IsCoolingDownFeedback { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/eVolumeLevelUnits.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/eVolumeLevelUnits.cs new file mode 100644 index 000000000..b88ea928b --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/eVolumeLevelUnits.cs @@ -0,0 +1,28 @@ +namespace PepperDash.Essentials.Core +{ + /// + /// Volume level units + /// + public enum eVolumeLevelUnits + { + /// + /// Decibels + /// + Decibels, + + /// + /// Percent + /// + Percent, + + /// + /// Relative + /// + Relative, + + /// + /// Absolute + /// + Absolute + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Devices/AudioControlListItemBase.cs b/src/PepperDash.Essentials.Core/Devices/AudioControlListItemBase.cs index 192444695..038f80a75 100644 --- a/src/PepperDash.Essentials.Core/Devices/AudioControlListItemBase.cs +++ b/src/PepperDash.Essentials.Core/Devices/AudioControlListItemBase.cs @@ -7,15 +7,15 @@ namespace PepperDash.Essentials.Core { + /// + /// Base class for audio control list items + /// public abstract class AudioControlListItemBase { /// /// Key of the parent device in the DeviceManager /// [JsonProperty("parentDeviceKey")] - /// - /// Gets or sets the ParentDeviceKey - /// public string ParentDeviceKey { get; set; } /// diff --git a/src/PepperDash.Essentials.Core/Devices/AudioInterfaces.cs b/src/PepperDash.Essentials.Core/Devices/AudioInterfaces.cs index 99b556691..cc886636b 100644 --- a/src/PepperDash.Essentials.Core/Devices/AudioInterfaces.cs +++ b/src/PepperDash.Essentials.Core/Devices/AudioInterfaces.cs @@ -14,23 +14,37 @@ namespace PepperDash.Essentials.Core /// public enum AudioChangeType { - Mute, Volume + /// + /// Mute change + /// + Mute, + + /// + /// Volume change + /// + Volume } - /// - /// Represents a AudioChangeEventArgs - /// + /// + /// Represents a AudioChangeEventArgs + /// public class AudioChangeEventArgs { - /// - /// Gets or sets the ChangeType - /// + /// + /// Gets or sets the ChangeType + /// public AudioChangeType ChangeType { get; private set; } - /// - /// Gets or sets the AudioDevice - /// + + /// + /// Gets or sets the AudioDevice + /// public IBasicVolumeControls AudioDevice { get; private set; } + /// + /// Constructor + /// + /// device that changed + /// type of change public AudioChangeEventArgs(IBasicVolumeControls device, AudioChangeType changeType) { ChangeType = changeType; diff --git a/src/PepperDash.Essentials.Core/Devices/CameraListItem.cs b/src/PepperDash.Essentials.Core/Devices/CameraListItem.cs index 9b45c7281..a154c0832 100644 --- a/src/PepperDash.Essentials.Core/Devices/CameraListItem.cs +++ b/src/PepperDash.Essentials.Core/Devices/CameraListItem.cs @@ -8,10 +8,10 @@ namespace PepperDash.Essentials.Core /// public class CameraListItem { - [JsonProperty("deviceKey")] /// - /// Gets or sets the DeviceKey + /// Key of the camera device /// + [JsonProperty("deviceKey")] public string DeviceKey { get; set; } /// @@ -52,9 +52,6 @@ public string PreferredName /// A name that will override the source's name on the UI /// [JsonProperty("name")] - /// - /// Gets or sets the Name - /// public string Name { get; set; } diff --git a/src/PepperDash.Essentials.Core/Devices/CodecInterfaces.cs b/src/PepperDash.Essentials.Core/Devices/CodecInterfaces.cs index 1c2391bb4..b9d8a28f6 100644 --- a/src/PepperDash.Essentials.Core/Devices/CodecInterfaces.cs +++ b/src/PepperDash.Essentials.Core/Devices/CodecInterfaces.cs @@ -12,11 +12,36 @@ namespace PepperDash.Essentials.Core public interface IReceiveVolume { // Break this out into 3 interfaces + + /// + /// Sets the receive volume level + /// + /// volume level to set void SetReceiveVolume(ushort level); + + /// + /// Mutes the receive audio + /// void ReceiveMuteOn(); + + /// + /// Unmutes the receive audio + /// void ReceiveMuteOff(); + + /// + /// Toggles the receive mute state + /// void ReceiveMuteToggle(); + + /// + /// Feedback for the receive volume level + /// IntFeedback ReceiveLevelFeedback { get; } + + /// + /// Feedback for the receive mute state + /// BoolFeedback ReceiveMuteIsOnFeedback { get; } } @@ -25,11 +50,35 @@ public interface IReceiveVolume /// public interface ITransmitVolume { + /// + /// Sets the transmit volume level + /// + /// volume level to set void SetTransmitVolume(ushort level); + + /// + /// Mutes the transmit audio + /// void TransmitMuteOn(); + + /// + /// Unmutes the transmit audio + /// void TransmitMuteOff(); + + /// + /// Toggles the transmit mute state + /// void TransmitMuteToggle(); + + /// + /// Feedback for the transmit volume level + /// IntFeedback TransmitLevelFeedback { get; } + + /// + /// Feedback for the transmit mute state + /// BoolFeedback TransmitMuteIsOnFeedback { get; } } @@ -38,9 +87,24 @@ public interface ITransmitVolume /// public interface IPrivacy { + /// + /// Enables privacy mode + /// void PrivacyModeOn(); + + /// + /// Disables privacy mode + /// void PrivacyModeOff(); + + /// + /// Toggles privacy mode + /// void PrivacyModeToggle(); + + /// + /// Feedback for the privacy mode state + /// BoolFeedback PrivacyModeIsOnFeedback { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Devices/CrestronProcessor.cs b/src/PepperDash.Essentials.Core/Devices/CrestronProcessor.cs index 57d99df83..8c31d4c6b 100644 --- a/src/PepperDash.Essentials.Core/Devices/CrestronProcessor.cs +++ b/src/PepperDash.Essentials.Core/Devices/CrestronProcessor.cs @@ -15,10 +15,20 @@ namespace PepperDash.Essentials.Core.Devices /// public class CrestronProcessor : Device, ISwitchedOutputCollection { + /// + /// Collection of switched outputs (relays) on the processor + /// public Dictionary SwitchedOutputs { get; private set; } + /// + /// The underlying CrestronControlSystem processor + /// public Crestron.SimplSharpPro.CrestronControlSystem Processor { get; private set; } + /// + /// Constructor + /// + /// key for the processor public CrestronProcessor(string key) : base(key) { diff --git a/src/PepperDash.Essentials.Core/Devices/DestinationListItem.cs b/src/PepperDash.Essentials.Core/Devices/DestinationListItem.cs index 053d38951..5a66c0b30 100644 --- a/src/PepperDash.Essentials.Core/Devices/DestinationListItem.cs +++ b/src/PepperDash.Essentials.Core/Devices/DestinationListItem.cs @@ -52,9 +52,6 @@ public string PreferredName /// If set, this name will be used as the PreferredName instead of the device name. /// [JsonProperty("name")] - /// - /// Gets or sets the Name - /// public string Name { get; set; } /// diff --git a/src/PepperDash.Essentials.Core/Devices/DeviceApiBase.cs b/src/PepperDash.Essentials.Core/Devices/DeviceApiBase.cs index 34669ff5e..28ac13dc4 100644 --- a/src/PepperDash.Essentials.Core/Devices/DeviceApiBase.cs +++ b/src/PepperDash.Essentials.Core/Devices/DeviceApiBase.cs @@ -11,7 +11,14 @@ namespace PepperDash.Essentials.Core.Devices /// public abstract class DeviceApiBase { + /// + /// Action API dictionary + /// public Dictionary ActionApi { get; protected set; } + + /// + /// Feedback API dictionary + /// public Dictionary FeedbackApi { get; protected set; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Devices/DeviceFeedbackExtensions.cs b/src/PepperDash.Essentials.Core/Devices/DeviceFeedbackExtensions.cs index e2ef5d8df..0e7595e19 100644 --- a/src/PepperDash.Essentials.Core/Devices/DeviceFeedbackExtensions.cs +++ b/src/PepperDash.Essentials.Core/Devices/DeviceFeedbackExtensions.cs @@ -8,18 +8,18 @@ namespace PepperDash.Essentials.Core { + /// + /// DeviceFeedbackExtensions class + /// public static class DeviceFeedbackExtensions { /// /// Attempts to get and return a feedback property from a device by name. /// If unsuccessful, returns null. /// - /// - /// - /// - /// - /// GetFeedbackProperty method - /// + /// device to get feedback from + /// name of the feedback property + /// Feedback property if found, otherwise null public static Feedback GetFeedbackProperty(this Device device, string propertyName) { var feedback = DeviceJsonApi.GetPropertyByName(device.Key, propertyName) as Feedback; diff --git a/src/PepperDash.Essentials.Core/Devices/DeviceJsonApi.cs b/src/PepperDash.Essentials.Core/Devices/DeviceJsonApi.cs index a71ca4559..c4ec2ca99 100644 --- a/src/PepperDash.Essentials.Core/Devices/DeviceJsonApi.cs +++ b/src/PepperDash.Essentials.Core/Devices/DeviceJsonApi.cs @@ -16,13 +16,10 @@ namespace PepperDash.Essentials.Core /// public class DeviceJsonApi { - /// - /// - /// - /// /// /// DoDeviceActionWithJson method /// + /// json method public static void DoDeviceActionWithJson(string json) { if (String.IsNullOrEmpty(json)) @@ -45,13 +42,10 @@ public static void DoDeviceActionWithJson(string json) } - /// - /// - /// - /// /// /// DoDeviceAction method /// + /// action method public static void DoDeviceAction(DeviceActionWrapper action) { var key = action.DeviceKey; @@ -111,6 +105,10 @@ public static void DoDeviceAction(DeviceActionWrapper action) } } + /// + /// DoDeviceActionAsync method + /// + /// action method public static async Task DoDeviceActionAsync(DeviceActionWrapper action) { var key = action.DeviceKey; @@ -194,11 +192,8 @@ private static object ConvertType(object value, Type conversionType) /// /// Gets the properties on a device /// - /// - /// - /// - /// GetProperties method - /// + /// The path to the device object + /// A JSON string representing the properties of the device public static string GetProperties(string deviceObjectPath) { var obj = FindObjectOnPath(deviceObjectPath); @@ -214,12 +209,9 @@ public static string GetProperties(string deviceObjectPath) /// /// Gets a property from a device path by name /// - /// - /// - /// - /// - /// GetPropertyByName method - /// + /// The path to the device object + /// The name of the property to get + /// The value of the property public static object GetPropertyByName(string deviceObjectPath, string propertyName) { var dev = FindObjectOnPath(deviceObjectPath); @@ -243,11 +235,8 @@ public static object GetPropertyByName(string deviceObjectPath, string propertyN /// /// Gets the methods on a device /// - /// - /// - /// - /// GetMethods method - /// + /// The path to the device object + /// A JSON string representing the methods of the device public static string GetMethods(string deviceObjectPath) { var obj = FindObjectOnPath(deviceObjectPath); @@ -263,8 +252,10 @@ public static string GetMethods(string deviceObjectPath) } /// - /// GetApiMethods method + /// Gets the API methods on a device /// + /// The path to the device object + /// A JSON string representing the API methods of the device public static string GetApiMethods(string deviceObjectPath) { var obj = FindObjectOnPath(deviceObjectPath); @@ -284,6 +275,8 @@ public static string GetApiMethods(string deviceObjectPath) /// /// FindObjectOnPath method /// + /// The path to the device object + /// The object found at the specified path public static object FindObjectOnPath(string deviceObjectPath) { var path = deviceObjectPath.Split('.'); @@ -369,11 +362,8 @@ public static object FindObjectOnPath(string deviceObjectPath) /// /// Sets a property on an object. /// - /// - /// - /// - /// SetProperty method - /// + /// The path to the device object + /// A JSON string representing the result of setting the property public static string SetProperty(string deviceObjectPath) { throw new NotImplementedException("This could be really useful. Finish it please"); @@ -393,13 +383,21 @@ public static string SetProperty(string deviceObjectPath) } + /// + /// Represents a DeviceActionWrapper + /// public class DeviceActionWrapper { + /// + /// Gets or sets the DeviceKey + /// public string DeviceKey { get; set; } + /// /// Gets or sets the MethodName /// public string MethodName { get; set; } + /// /// Gets or sets the Params /// @@ -413,19 +411,25 @@ public class PropertyNameType { private object Parent; - [JsonIgnore] /// /// Gets or sets the PropInfo /// + [JsonIgnore] public PropertyInfo PropInfo { get; private set; } + /// /// Gets or sets the Name /// public string Name { get { return PropInfo.Name; } } + /// /// Gets or sets the Type /// public string Type { get { return PropInfo.PropertyType.Name; } } + + /// + /// Gets or sets the Value + /// public string Value { get @@ -450,12 +454,17 @@ public string Value /// Gets or sets the CanRead /// public bool CanRead { get { return PropInfo.CanRead; } } + /// /// Gets or sets the CanWrite /// public bool CanWrite { get { return PropInfo.CanWrite; } } - + /// + /// PropertyNameType constructor + /// + /// property info + /// parent object public PropertyNameType(PropertyInfo info, object parent) { PropInfo = info; @@ -468,16 +477,20 @@ public PropertyNameType(PropertyInfo info, object parent) /// public class MethodNameParams { - [JsonIgnore] /// /// Gets or sets the MethodInfo /// + [JsonIgnore] public MethodInfo MethodInfo { get; private set; } /// /// Gets or sets the Name /// public string Name { get { return MethodInfo.Name; } } + + /// + /// Gets or sets the Params + /// public IEnumerable Params { get @@ -487,6 +500,10 @@ public IEnumerable Params } } + /// + /// MethodNameParams constructor + /// + /// method info public MethodNameParams(MethodInfo info) { MethodInfo = info; @@ -508,10 +525,10 @@ public class NameType public string Type { get; set; } } - [AttributeUsage(AttributeTargets.All)] /// /// Represents a ApiAttribute /// + [AttributeUsage(AttributeTargets.All)] public class ApiAttribute : Attribute { diff --git a/src/PepperDash.Essentials.Core/Devices/DisplayUiConstants.cs b/src/PepperDash.Essentials.Core/Devices/DisplayUiConstants.cs index a42239fc4..1c6ae2449 100644 --- a/src/PepperDash.Essentials.Core/Devices/DisplayUiConstants.cs +++ b/src/PepperDash.Essentials.Core/Devices/DisplayUiConstants.cs @@ -13,16 +13,54 @@ namespace PepperDash.Essentials.Core /// public class DisplayUiConstants { + /// + /// TypeRadio constant + /// public const uint TypeRadio = 1; + + /// + /// TypeTv constant + /// public const uint TypeDirecTv = 9; + + /// + /// TypeBluray constant + /// public const uint TypeBluray = 13; + + /// + /// TypeStreamingDevice constant + /// public const uint TypeChromeTv = 15; + + /// + /// TypeStreamingDevice constant + /// public const uint TypeFireTv = 16; + + /// + /// TypeStreamingDevice constant + /// public const uint TypeAppleTv = 17; + + /// + /// TypeStreamingDevice constant + /// public const uint TypeRoku = 18; + + /// + /// TypeLaptop constant + /// public const uint TypeLaptop = 31; + + /// + /// TypePc constant + /// public const uint TypePc = 32; + /// + /// TypeNoControls constant + /// public const uint TypeNoControls = 49; } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Devices/EssentialsPluginDevelopmentDeviceFactory.cs b/src/PepperDash.Essentials.Core/Devices/EssentialsPluginDevelopmentDeviceFactory.cs index 628645510..8bd60124d 100644 --- a/src/PepperDash.Essentials.Core/Devices/EssentialsPluginDevelopmentDeviceFactory.cs +++ b/src/PepperDash.Essentials.Core/Devices/EssentialsPluginDevelopmentDeviceFactory.cs @@ -2,6 +2,10 @@ namespace PepperDash.Essentials.Core { + /// + /// EssentialsPluginDevelopmentDeviceFactory class + /// + /// public abstract class EssentialsPluginDevelopmentDeviceFactory : EssentialsDeviceFactory, IPluginDevelopmentDeviceFactory where T : EssentialsDevice { /// diff --git a/src/PepperDash.Essentials.Core/Devices/GenericIRController.cs b/src/PepperDash.Essentials.Core/Devices/GenericIRController.cs index bbb3c5449..a55235e60 100644 --- a/src/PepperDash.Essentials.Core/Devices/GenericIRController.cs +++ b/src/PepperDash.Essentials.Core/Devices/GenericIRController.cs @@ -31,6 +31,12 @@ public class GenericIrController: EssentialsBridgeableDevice /// public string[] IrCommands {get { return _port.IrFileCommands; }} + /// + /// Constructor + /// + /// key for the device + /// name of the device + /// IR output port controller public GenericIrController(string key, string name, IrOutputPortController irPort) : base(key, name) { _port = irPort; @@ -105,9 +111,9 @@ public override void LinkToApi(BasicTriList trilist, uint joinStart, string join var joinNumber = bridgeJoin.Value.Value.JoinNumber; Debug.LogMessage(LogEventLevel.Verbose, this, @"bridgeJoin: Key-'{0}' -Value.Key-'{1}' -Value.JoinNumber-'{2}' -Value.Metadata.Description-'{3}'", + Value.Key-'{1}' + Value.JoinNumber-'{2}' + Value.Metadata.Description-'{3}'", key, joinDataKey, joinNumber, @@ -172,6 +178,9 @@ public void Press(string command, bool pressRelease) /// public class GenericIrControllerFactory : EssentialsDeviceFactory { + /// + /// Constructor + /// public GenericIrControllerFactory() { TypeNames = new List {"genericIrController"}; diff --git a/src/PepperDash.Essentials.Core/Devices/GenericMonitoredTcpDevice.cs b/src/PepperDash.Essentials.Core/Devices/GenericMonitoredTcpDevice.cs index e4a2b9868..148a9cac3 100644 --- a/src/PepperDash.Essentials.Core/Devices/GenericMonitoredTcpDevice.cs +++ b/src/PepperDash.Essentials.Core/Devices/GenericMonitoredTcpDevice.cs @@ -10,18 +10,28 @@ namespace PepperDash.Essentials.Core.Devices { - /// - /// Represents a GenericCommunicationMonitoredDevice - /// + /// + /// Represents a GenericCommunicationMonitoredDevice + /// public class GenericCommunicationMonitoredDevice : Device, ICommunicationMonitor { IBasicCommunication Client; - /// - /// Gets or sets the CommunicationMonitor - /// + /// + /// Gets or sets the CommunicationMonitor + /// public StatusMonitorBase CommunicationMonitor { get; private set; } + /// + /// Constructor + /// + /// key of the device + /// name of the device + /// communication client + /// poll string + /// poll time + /// warning time + /// error time public GenericCommunicationMonitoredDevice(string key, string name, IBasicCommunication comm, string pollString, long pollTime, long warningTime, long errorTime) : base(key, name) @@ -37,6 +47,13 @@ public GenericCommunicationMonitoredDevice(string key, string name, IBasicCommun } + /// + /// Constructor with default times + /// + /// key of the device + /// name of the device + /// communication client + /// poll string public GenericCommunicationMonitoredDevice(string key, string name, IBasicCommunication comm, string pollString) : this(key, name, comm, pollString, 30000, 120000, 300000) { diff --git a/src/PepperDash.Essentials.Core/Devices/IAttachVideoStatusExtensions.cs b/src/PepperDash.Essentials.Core/Devices/IAttachVideoStatusExtensions.cs index d92f9530e..83914f6fa 100644 --- a/src/PepperDash.Essentials.Core/Devices/IAttachVideoStatusExtensions.cs +++ b/src/PepperDash.Essentials.Core/Devices/IAttachVideoStatusExtensions.cs @@ -6,16 +6,16 @@ namespace PepperDash.Essentials.Core { + /// + /// IAttachVideoStatusExtensions class + /// public static class IAttachVideoStatusExtensions { /// /// Gets the VideoStatusOutputs for the device /// - /// + /// /// Attached VideoStatusOutputs or the default if none attached - /// - /// GetVideoStatuses method - /// public static VideoStatusOutputs GetVideoStatuses(this IAttachVideoStatus attachedDev) { // See if this device is connected to a status-providing port diff --git a/src/PepperDash.Essentials.Core/Devices/IDisplayUsage.cs b/src/PepperDash.Essentials.Core/Devices/IDisplayUsage.cs index 0d74d819a..6d6f8f517 100644 --- a/src/PepperDash.Essentials.Core/Devices/IDisplayUsage.cs +++ b/src/PepperDash.Essentials.Core/Devices/IDisplayUsage.cs @@ -5,6 +5,9 @@ namespace PepperDash.Essentials.Core /// public interface IDisplayUsage { + /// + /// Gets the LampHours + /// IntFeedback LampHours { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Devices/IDspPresets.cs b/src/PepperDash.Essentials.Core/Devices/IDspPresets.cs index 90006b3bc..bfe81658d 100644 --- a/src/PepperDash.Essentials.Core/Devices/IDspPresets.cs +++ b/src/PepperDash.Essentials.Core/Devices/IDspPresets.cs @@ -8,8 +8,15 @@ namespace PepperDash.Essentials.Core /// public interface IDspPresets { + /// + /// Gets the Presets + /// Dictionary Presets { get; } + /// + /// Recalls the preset by key + /// + /// key of preset to recall void RecallPreset(string key); } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Devices/IProjectorInterfaces.cs b/src/PepperDash.Essentials.Core/Devices/IProjectorInterfaces.cs index 5195592d4..d6473e644 100644 --- a/src/PepperDash.Essentials.Core/Devices/IProjectorInterfaces.cs +++ b/src/PepperDash.Essentials.Core/Devices/IProjectorInterfaces.cs @@ -11,6 +11,9 @@ namespace PepperDash.Essentials.Core /// public interface IBasicVideoMute { + /// + /// Toggles the video mute + /// void VideoMuteToggle(); } @@ -19,9 +22,19 @@ public interface IBasicVideoMute /// public interface IBasicVideoMuteWithFeedback : IBasicVideoMute { + /// + /// Gets the VideoMuteIsOn feedback + /// BoolFeedback VideoMuteIsOn { get; } + /// + /// Sets the video mute on + /// void VideoMuteOn(); + + /// + /// Sets the video mute off + /// void VideoMuteOff(); } diff --git a/src/PepperDash.Essentials.Core/Devices/IReconfigurableDevice.cs b/src/PepperDash.Essentials.Core/Devices/IReconfigurableDevice.cs index 6712312dd..245c0a5cf 100644 --- a/src/PepperDash.Essentials.Core/Devices/IReconfigurableDevice.cs +++ b/src/PepperDash.Essentials.Core/Devices/IReconfigurableDevice.cs @@ -13,10 +13,20 @@ namespace PepperDash.Essentials.Core.Devices /// public interface IReconfigurableDevice { + /// + /// Event fired when the configuration changes + /// event EventHandler ConfigChanged; + /// + /// Gets the current DeviceConfig + /// DeviceConfig Config { get; } + /// + /// Sets the DeviceConfig + /// + /// config to set void SetConfig(DeviceConfig config); } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Devices/IUsageTracking.cs b/src/PepperDash.Essentials.Core/Devices/IUsageTracking.cs index 352e736d9..7edce6462 100644 --- a/src/PepperDash.Essentials.Core/Devices/IUsageTracking.cs +++ b/src/PepperDash.Essentials.Core/Devices/IUsageTracking.cs @@ -13,6 +13,9 @@ namespace PepperDash.Essentials.Core /// public interface IUsageTracking { + /// + /// Gets or sets the UsageTracker + /// UsageTracking UsageTracker { get; set; } } @@ -29,6 +32,9 @@ public interface IUsageTracking /// public class UsageTracking { + /// + /// Event fired when device usage ends + /// public event EventHandler DeviceUsageEnded; /// @@ -59,6 +65,10 @@ public class UsageTracking /// public Device Parent { get; private set; } + /// + /// Constructor for UsageTracking class + /// + /// The parent device public UsageTracking(Device parent) { Parent = parent; diff --git a/src/PepperDash.Essentials.Core/Devices/IVolumeAndAudioInterfaces.cs b/src/PepperDash.Essentials.Core/Devices/IVolumeAndAudioInterfaces.cs deleted file mode 100644 index 32a28113d..000000000 --- a/src/PepperDash.Essentials.Core/Devices/IVolumeAndAudioInterfaces.cs +++ /dev/null @@ -1,161 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core -{ - /// - /// Defines minimal volume and mute control methods - /// - public interface IBasicVolumeControls - { - void VolumeUp(bool pressRelease); - void VolumeDown(bool pressRelease); - void MuteToggle(); - } - - /// - /// Defines the contract for IHasVolumeControl - /// - public interface IHasVolumeControl - { - void VolumeUp(bool pressRelease); - void VolumeDown(bool pressRelease); - } - - /// - /// Defines volume control methods and properties with feedback - /// - public interface IHasVolumeControlWithFeedback : IHasVolumeControl - { - void SetVolume(ushort level); - IntFeedback VolumeLevelFeedback { get; } - } - - /// - /// Defines basic mute control methods - /// - public interface IHasMuteControl - { - void MuteToggle(); - } - - /// - /// Defines mute control methods and properties with feedback - /// - public interface IHasMuteControlWithFeedback : IHasMuteControl - { - BoolFeedback MuteFeedback { get; } - void MuteOn(); - void MuteOff(); - } - - /// - /// Defines the contract for IBasicVolumeWithFeedback - /// - public interface IBasicVolumeWithFeedback : IBasicVolumeControls - { - BoolFeedback MuteFeedback { get; } - void MuteOn(); - void MuteOff(); - void SetVolume(ushort level); - IntFeedback VolumeLevelFeedback { get; } - } - - /// - /// Defines the contract for IBasicVolumeWithFeedbackAdvanced - /// - public interface IBasicVolumeWithFeedbackAdvanced : IBasicVolumeWithFeedback - { - int RawVolumeLevel { get; } - - eVolumeLevelUnits Units { get; } - } - - public enum eVolumeLevelUnits - { - Decibels, - Percent, - Relative, - Absolute - } - - /// - /// Defines the contract for IHasCurrentVolumeControls - /// - public interface IHasCurrentVolumeControls - { - IBasicVolumeControls CurrentVolumeControls { get; } - event EventHandler CurrentVolumeDeviceChange; - - void SetDefaultLevels(); - - bool ZeroVolumeWhenSwtichingVolumeDevices { get; } - } - - - /// - /// Defines the contract for IFullAudioSettings - /// - public interface IFullAudioSettings : IBasicVolumeWithFeedback - { - void SetBalance(ushort level); - void BalanceLeft(bool pressRelease); - void BalanceRight(bool pressRelease); - - void SetBass(ushort level); - void BassUp(bool pressRelease); - void BassDown(bool pressRelease); - - void SetTreble(ushort level); - void TrebleUp(bool pressRelease); - void TrebleDown(bool pressRelease); - - bool hasMaxVolume { get; } - void SetMaxVolume(ushort level); - void MaxVolumeUp(bool pressRelease); - void MaxVolumeDown(bool pressRelease); - - bool hasDefaultVolume { get; } - void SetDefaultVolume(ushort level); - void DefaultVolumeUp(bool pressRelease); - void DefaultVolumeDown(bool pressRelease); - - void LoudnessToggle(); - void MonoToggle(); - - BoolFeedback LoudnessFeedback { get; } - BoolFeedback MonoFeedback { get; } - IntFeedback BalanceFeedback { get; } - IntFeedback BassFeedback { get; } - IntFeedback TrebleFeedback { get; } - IntFeedback MaxVolumeFeedback { get; } - IntFeedback DefaultVolumeFeedback { get; } - } - - /// - /// Defines the contract for IHasVolumeDevice - /// - public interface IHasVolumeDevice - { - IBasicVolumeControls VolumeDevice { get; } - } - - /// - /// Identifies a device that contains audio zones - /// - public interface IAudioZones : IRouting - { - Dictionary Zone { get; } - } - - /// - /// Defines minimum functionality for an audio zone - /// - public interface IAudioZone : IBasicVolumeWithFeedback - { - void SelectInput(ushort input); - } -} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Devices/IrOutputPortController.cs b/src/PepperDash.Essentials.Core/Devices/IrOutputPortController.cs index 78e1a7e6c..1f1227355 100644 --- a/src/PepperDash.Essentials.Core/Devices/IrOutputPortController.cs +++ b/src/PepperDash.Essentials.Core/Devices/IrOutputPortController.cs @@ -26,10 +26,24 @@ public class IrOutputPortController : Device uint IrPortUid; IROutputPort IrPort; + /// + /// Gets the DriverLoaded feedback + /// public BoolFeedback DriverLoaded { get; private set; } + /// + /// Gets or sets the StandardIrPulseTime + /// public ushort StandardIrPulseTime { get; set; } + + /// + /// Gets or sets the DriverFilepath + /// public string DriverFilepath { get; private set; } + + /// + /// Gets or sets the DriverIsLoaded + /// public bool DriverIsLoaded { get; private set; } /// @@ -37,9 +51,9 @@ public class IrOutputPortController : Device /// public string[] IrFileCommands { get { return IrPort.AvailableStandardIRCmds(IrPortUid); } } - /// - /// Gets or sets the UseBridgeJoinMap - /// + /// + /// Gets or sets the UseBridgeJoinMap + /// public bool UseBridgeJoinMap { get; private set; } /// @@ -61,6 +75,12 @@ public IrOutputPortController(string key, IROutputPort port, string irDriverFile LoadDriver(irDriverFilepath); } + /// + /// Constructor for IrDevice base class using post activation function to get port + /// + /// key of the device + /// function to call post activation + /// config of the device public IrOutputPortController(string key, Func postActivationFunc, DeviceConfig config) : base(key) @@ -105,9 +125,9 @@ public IrOutputPortController(string key, Func postA }); } - /// - /// PrintAvailableCommands method - /// + /// + /// PrintAvailableCommands method + /// public void PrintAvailableCommands() { Debug.LogMessage(LogEventLevel.Verbose, this, "Available IR Commands in IR File {0}", IrPortUid); @@ -121,10 +141,7 @@ public void PrintAvailableCommands() /// /// Loads the IR driver at path /// - /// - /// - /// LoadDriver method - /// + /// path of the IR driver file public void LoadDriver(string path) { Debug.LogMessage(LogEventLevel.Verbose, this, "***Loading IR File***"); @@ -148,10 +165,12 @@ public void LoadDriver(string path) } - /// - /// PressRelease method - /// - /// + /// + /// PressRelease method + /// + /// IR command to send + /// true to press, false to release + /// public virtual void PressRelease(string command, bool state) { Debug.LogMessage(LogEventLevel.Verbose, this, "IR:'{0}'={1}", command, state); @@ -176,10 +195,12 @@ public virtual void PressRelease(string command, bool state) IrPort.Release(); } - /// - /// Pulse method - /// - /// + /// + /// Pulse method + /// + /// IR command to send + /// time to pulse the command + /// public virtual void Pulse(string command, ushort time) { if (IrPort == null) @@ -201,6 +222,7 @@ public virtual void Pulse(string command, ushort time) /// /// Notifies the console when a bad command is used. /// + /// command that was not found protected void NoIrCommandError(string command) { Debug.LogMessage(LogEventLevel.Verbose, this, "Device {0}: IR Driver {1} does not contain command {2}", diff --git a/src/PepperDash.Essentials.Core/Devices/LevelControlListItem.cs b/src/PepperDash.Essentials.Core/Devices/LevelControlListItem.cs index ea54857e3..821a0c2bf 100644 --- a/src/PepperDash.Essentials.Core/Devices/LevelControlListItem.cs +++ b/src/PepperDash.Essentials.Core/Devices/LevelControlListItem.cs @@ -74,9 +74,6 @@ public string DeviceKey /// [JsonProperty("type")] [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] - /// - /// Gets or sets the Type - /// public eLevelControlType Type { get; set; } diff --git a/src/PepperDash.Essentials.Core/Devices/PowerInterfaces.cs b/src/PepperDash.Essentials.Core/Devices/PowerInterfaces.cs index e09a002d1..ef0173d59 100644 --- a/src/PepperDash.Essentials.Core/Devices/PowerInterfaces.cs +++ b/src/PepperDash.Essentials.Core/Devices/PowerInterfaces.cs @@ -8,12 +8,39 @@ namespace PepperDash.Essentials.Core /// public interface IHasBatteryStats : IKeyName { + /// + /// Gets the BatteryPercentage + /// int BatteryPercentage { get; } + + /// + /// Gets the BatteryCautionThresholdPercentage + /// int BatteryCautionThresholdPercentage { get; } + + /// + /// Gets the BatteryWarningThresholdPercentage + /// int BatteryWarningThresholdPercentage { get; } + + /// + /// Gets the BatteryIsWarningFeedback + /// BoolFeedback BatteryIsWarningFeedback { get; } + + /// + /// Gets the BatteryIsCautionFeedback + /// BoolFeedback BatteryIsCautionFeedback { get; } + + /// + /// Gets the BatteryIsOkFeedback + /// BoolFeedback BatteryIsOkFeedback { get; } + + /// + /// Gets the BatteryPercentageFeedback + /// IntFeedback BatteryPercentageFeedback { get; } } @@ -22,6 +49,9 @@ public interface IHasBatteryStats : IKeyName /// public interface IHasBatteryCharging : IHasBatteryStats { + /// + /// Gets the BatteryIsCharging + /// BoolFeedback BatteryIsCharging { get; } } @@ -30,19 +60,55 @@ public interface IHasBatteryCharging : IHasBatteryStats /// public interface IHasBatteries : IKeyName { + /// + /// Collection of batteries + /// ReadOnlyDictionary Batteries { get; } } + /// + /// Defines the contract for IHasBatteryStatsExtended + /// public interface IHasBatteryStatsExtended : IHasBatteryStats { + /// + /// Gets the InputVoltage in millivolts + /// int InputVoltage { get; } + + /// + /// Gets the OutputVoltage in millivolts + /// int OutputVoltage { get; } + + /// + /// Gets the InputCurrent in milliamps + /// int InptuCurrent { get; } + + /// + /// Gets the OutputCurrent in milliamps + /// int OutputCurrent { get; } + /// + /// Gets the InputVoltageFeedback + /// IntFeedback InputVoltageFeedback { get; } + + /// + /// Gets the OutputVoltageFeedback + /// IntFeedback OutputVoltageFeedback { get; } + + /// + /// Gets the InputCurrentFeedback + /// IntFeedback InputCurrentFeedback { get; } + + /// + /// Gets the OutputCurrentFeedback + /// IntFeedback OutputCurrentFeedback { get; } } diff --git a/src/PepperDash.Essentials.Core/Devices/PresentationDeviceType.cs b/src/PepperDash.Essentials.Core/Devices/PresentationDeviceType.cs index 56367e531..444748322 100644 --- a/src/PepperDash.Essentials.Core/Devices/PresentationDeviceType.cs +++ b/src/PepperDash.Essentials.Core/Devices/PresentationDeviceType.cs @@ -14,6 +14,34 @@ namespace PepperDash.Essentials.Core /// public enum PresentationSourceType { - None, Dvd, Laptop, PC, SetTopBox, VCR + /// + /// No source type assigned + /// + None, + + /// + /// DVD source type + /// + Dvd, + + /// + /// Document Camera source type + /// + Laptop, + + /// + /// PC source type + /// + PC, + + /// + /// Set Top Box source type + /// + SetTopBox, + + /// + /// VCR source type + /// + VCR } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Devices/PresetListItem.cs b/src/PepperDash.Essentials.Core/Devices/PresetListItem.cs index 04a1aeaa4..625dcec9f 100644 --- a/src/PepperDash.Essentials.Core/Devices/PresetListItem.cs +++ b/src/PepperDash.Essentials.Core/Devices/PresetListItem.cs @@ -14,6 +14,9 @@ namespace PepperDash.Essentials.Core /// public class PresetListItem : AudioControlListItemBase { + /// + /// Gets the preset associated with this list item + /// [JsonIgnore] public IKeyName Preset { diff --git a/src/PepperDash.Essentials.Core/Devices/ReconfigurableDevice.cs b/src/PepperDash.Essentials.Core/Devices/ReconfigurableDevice.cs index 3f83640f9..ccb74a399 100644 --- a/src/PepperDash.Essentials.Core/Devices/ReconfigurableDevice.cs +++ b/src/PepperDash.Essentials.Core/Devices/ReconfigurableDevice.cs @@ -19,10 +19,20 @@ namespace PepperDash.Essentials.Core.Devices /// public abstract class ReconfigurableDevice : EssentialsDevice, IReconfigurableDevice { + /// + /// Event fired when the configuration changes + /// public event EventHandler ConfigChanged; + /// + /// Gets the current DeviceConfig + /// public DeviceConfig Config { get; private set; } + /// + /// Constructor + /// + /// config of the device protected ReconfigurableDevice(DeviceConfig config) : base(config.Key) { @@ -64,19 +74,33 @@ void SetNameHelper(DeviceConfig config) /// /// Used by the extending class to allow for any custom actions to be taken (tell the ConfigWriter to write config, etc) /// - /// + /// config of the device protected virtual void CustomSetConfig(DeviceConfig config) { ConfigWriter.UpdateDeviceConfig(config); } } + /// + /// A ReconfigurableDevice that is also bridgeable + /// public abstract class ReconfigurableBridgableDevice : ReconfigurableDevice, IBridgeAdvanced { + /// + /// Constructor + /// + /// config of the device protected ReconfigurableBridgableDevice(DeviceConfig config) : base(config) { } + /// + /// LinkToApi method + /// + /// trilist to link + /// the join to start at + /// key to the join map + /// the bridge to use public abstract void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge); } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Devices/SmartObjectBaseTypes.cs b/src/PepperDash.Essentials.Core/Devices/SmartObjectBaseTypes.cs index 48020690f..55e70de4f 100644 --- a/src/PepperDash.Essentials.Core/Devices/SmartObjectBaseTypes.cs +++ b/src/PepperDash.Essentials.Core/Devices/SmartObjectBaseTypes.cs @@ -6,9 +6,19 @@ namespace PepperDash.Essentials.Core /// public class SmartObjectJoinOffsets { + /// + /// Dpad Join Offset + /// public const ushort Dpad = 1; + + /// + /// Numpad Join Offset + /// public const ushort Numpad = 2; + /// + /// PresetList Join Offset + /// public const ushort PresetList = 6; } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Devices/VolumeDeviceChangeEventArgs.cs b/src/PepperDash.Essentials.Core/Devices/VolumeDeviceChangeEventArgs.cs index 441af0d68..ae2895dbc 100644 --- a/src/PepperDash.Essentials.Core/Devices/VolumeDeviceChangeEventArgs.cs +++ b/src/PepperDash.Essentials.Core/Devices/VolumeDeviceChangeEventArgs.cs @@ -14,10 +14,27 @@ namespace PepperDash.Essentials.Core /// public class VolumeDeviceChangeEventArgs : EventArgs { + /// + /// The old device + /// public IBasicVolumeControls OldDev { get; private set; } + + /// + /// The new device + /// public IBasicVolumeControls NewDev { get; private set; } + + /// + /// The type of change + /// public ChangeType Type { get; private set; } + /// + /// Constructor + /// + /// the old device + /// the new device + /// the type of change public VolumeDeviceChangeEventArgs(IBasicVolumeControls oldDev, IBasicVolumeControls newDev, ChangeType type) { OldDev = oldDev; @@ -31,6 +48,14 @@ public VolumeDeviceChangeEventArgs(IBasicVolumeControls oldDev, IBasicVolumeCont /// public enum ChangeType { - WillChange, DidChange + /// + /// Will change + /// + WillChange, + + /// + /// Did change + /// + DidChange } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Ethernet/EthernetStatistics.cs b/src/PepperDash.Essentials.Core/Ethernet/EthernetStatistics.cs index cbdd06170..0f5c2863a 100644 --- a/src/PepperDash.Essentials.Core/Ethernet/EthernetStatistics.cs +++ b/src/PepperDash.Essentials.Core/Ethernet/EthernetStatistics.cs @@ -8,24 +8,48 @@ namespace PepperDash.Essentials.Core.Ethernet { + /// + /// Ethernet settings feedbacks + /// public static class EthernetSettings { + /// + /// Link active feedback + /// public static readonly BoolFeedback LinkActive = new BoolFeedback("LinkActive", () => true); + + /// + /// DHCP active feedback + /// public static readonly BoolFeedback DhcpActive = new BoolFeedback("DhcpActive", () => CrestronEthernetHelper.GetEthernetParameter( CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_DHCP_STATE, 0) == "ON"); - + /// + /// Hostname feedback + /// public static readonly StringFeedback Hostname = new StringFeedback("Hostname", () => CrestronEthernetHelper.GetEthernetParameter( CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_HOSTNAME, 0)); + + /// + /// IP Address feedback + /// public static readonly StringFeedback IpAddress0 = new StringFeedback("IpAddress0", () => CrestronEthernetHelper.GetEthernetParameter( CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 0)); + + /// + /// Subnet Mask feedback + /// public static readonly StringFeedback SubnetMask0 = new StringFeedback("SubnetMask0", () => CrestronEthernetHelper.GetEthernetParameter( CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, 0)); + + /// + /// Default Gateway feedback + /// public static readonly StringFeedback DefaultGateway0 = new StringFeedback("DefaultGateway0", () => CrestronEthernetHelper.GetEthernetParameter( CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_ROUTER, 0)); diff --git a/src/PepperDash.Essentials.Core/Extensions/JsonExtensions.cs b/src/PepperDash.Essentials.Core/Extensions/JsonExtensions.cs index 43a844437..74697525b 100644 --- a/src/PepperDash.Essentials.Core/Extensions/JsonExtensions.cs +++ b/src/PepperDash.Essentials.Core/Extensions/JsonExtensions.cs @@ -10,11 +10,17 @@ namespace PepperDash.Essentials.Core { + /// + /// JsonExtensions class + /// public static class JsonExtensions { /// /// FindTokens method /// + /// token for the container + /// name of the token to find + /// list of matching tokens public static List FindTokens(this JToken containerToken, string name) { List matches = new List(); diff --git a/src/PepperDash.Essentials.Core/Extensions/StringExtensions.cs b/src/PepperDash.Essentials.Core/Extensions/StringExtensions.cs index 2efa3c181..9dbb62449 100644 --- a/src/PepperDash.Essentials.Core/Extensions/StringExtensions.cs +++ b/src/PepperDash.Essentials.Core/Extensions/StringExtensions.cs @@ -7,6 +7,9 @@ namespace PepperDash.Essentials.Core { + /// + /// StringExtensions class + /// public static class StringExtensions { /// @@ -14,9 +17,6 @@ public static class StringExtensions /// /// string input /// null if the string is emtpy, otherwise returns the string - /// - /// NullIfEmpty method - /// public static string NullIfEmpty(this string s) { return string.IsNullOrEmpty(s) ? null : s; @@ -27,9 +27,6 @@ public static string NullIfEmpty(this string s) /// /// string input /// null if the string is wempty or made of only whitespace characters, otherwise returns the string - /// - /// NullIfWhiteSpace method - /// public static string NullIfWhiteSpace(this string s) { return string.IsNullOrEmpty(s.Trim()) ? null : s; @@ -41,9 +38,6 @@ public static string NullIfWhiteSpace(this string s) /// input string /// string to replace with if input string is empty or whitespace /// returns newString if s is null, emtpy, or made of whitespace characters, otherwise returns s - /// - /// ReplaceIfNullOrEmpty method - /// public static string ReplaceIfNullOrEmpty(this string s, string newString) { return string.IsNullOrEmpty(s) ? newString : s; @@ -56,9 +50,6 @@ public static string ReplaceIfNullOrEmpty(this string s, string newString) /// String to check in Source String /// Comparison parameters /// true of string contains "toCheck" - /// - /// Contains method - /// public static bool Contains(this string source, string toCheck, StringComparison comp) { if (string.IsNullOrEmpty(source)) return false; @@ -70,9 +61,6 @@ public static bool Contains(this string source, string toCheck, StringComparison /// /// String to Trim /// Trimmed String - /// - /// TrimAll method - /// public static string TrimAll(this string source) { return string.IsNullOrEmpty(source) ? string.Empty : source.TrimStart().TrimEnd(); @@ -84,9 +72,6 @@ public static string TrimAll(this string source) /// String to Trim /// Char Array to trim from string /// Trimmed String - /// - /// TrimAll method - /// public static string TrimAll(this string source, char[] chars) { return string.IsNullOrEmpty(source) ? string.Empty : source.TrimStart(chars).TrimEnd(chars); diff --git a/src/PepperDash.Essentials.Core/Factory/ProcessorExtensionDeviceFactory.cs b/src/PepperDash.Essentials.Core/Factory/ProcessorExtensionDeviceFactory.cs index 02bf1bcd5..6336795ca 100644 --- a/src/PepperDash.Essentials.Core/Factory/ProcessorExtensionDeviceFactory.cs +++ b/src/PepperDash.Essentials.Core/Factory/ProcessorExtensionDeviceFactory.cs @@ -15,6 +15,9 @@ namespace PepperDash.Essentials.Core /// public class ProcessorExtensionDeviceFactory { + /// + /// Constructor + /// public ProcessorExtensionDeviceFactory() { var assy = Assembly.GetExecutingAssembly(); PluginLoader.SetEssentialsAssembly(assy.GetName().Name, assy); @@ -50,7 +53,8 @@ public ProcessorExtensionDeviceFactory() { /// /// Adds a plugin factory method /// - /// + /// name fo extension to add + /// method to add /// public static void AddFactoryForType(string extensionName, Func method) { @@ -58,6 +62,13 @@ public static void AddFactoryForType(string extensionName, Func + /// Adds a plugin factory method with type and description + /// + /// name of extension to add + /// description of extension to add + /// type of extension to add + /// method to add public static void AddFactoryForType(string extensionName, string description, Type Type, Func method) { //Debug.LogMessage(LogEventLevel.Debug, "Adding factory method for type '{0}'", typeName); diff --git a/src/PepperDash.Essentials.Core/Factory/ReadyEventArgs.cs b/src/PepperDash.Essentials.Core/Factory/ReadyEventArgs.cs index 1b9176907..544ef5cca 100644 --- a/src/PepperDash.Essentials.Core/Factory/ReadyEventArgs.cs +++ b/src/PepperDash.Essentials.Core/Factory/ReadyEventArgs.cs @@ -17,6 +17,10 @@ public class IsReadyEventArgs : EventArgs /// public bool IsReady { get; set; } + /// + /// Constructor + /// + /// indicates if the object is ready public IsReadyEventArgs(bool data) { IsReady = data; @@ -28,7 +32,14 @@ public IsReadyEventArgs(bool data) /// public interface IHasReady { + /// + /// Fires when the IsReady property changes + /// event EventHandler IsReadyEvent; + + /// + /// indicates whether the object is ready + /// bool IsReady { get; } } } diff --git a/src/PepperDash.Essentials.Core/Feedbacks/BoolFeedback.cs b/src/PepperDash.Essentials.Core/Feedbacks/BoolFeedback.cs index eb3abbb4c..ea222b7f4 100644 --- a/src/PepperDash.Essentials.Core/Feedbacks/BoolFeedback.cs +++ b/src/PepperDash.Essentials.Core/Feedbacks/BoolFeedback.cs @@ -63,6 +63,10 @@ public BoolFeedback(string key, Func valueFunc) ValueFunc = valueFunc; } + /// + /// Sets the ValueFunc + /// + /// New function to set as the ValueFunc public void SetValueFunc(Func newFunc) { ValueFunc = newFunc; @@ -153,6 +157,10 @@ public void UnlinkCrestronFeedback(Crestron.SimplSharpPro.DeviceSupport.Feedback LinkedCrestronFeedbacks.Remove(feedback); } + /// + /// ToString override + /// + /// public override string ToString() { return (InTestMode ? "TEST -- " : "") + BoolValue.ToString(); diff --git a/src/PepperDash.Essentials.Core/Feedbacks/BoolFeedbackOneShot.cs b/src/PepperDash.Essentials.Core/Feedbacks/BoolFeedbackOneShot.cs index 7dca3eaff..6b0b39b8f 100644 --- a/src/PepperDash.Essentials.Core/Feedbacks/BoolFeedbackOneShot.cs +++ b/src/PepperDash.Essentials.Core/Feedbacks/BoolFeedbackOneShot.cs @@ -48,12 +48,8 @@ public BoolFeedbackPulse(uint timeoutMs, bool canRetrigger) } /// - /// Starts the + /// Start method /// - /// - /// - /// Start method - /// public void Start() { if (Timer == null) diff --git a/src/PepperDash.Essentials.Core/Feedbacks/BoolFeedbackPulseExtender.cs b/src/PepperDash.Essentials.Core/Feedbacks/BoolFeedbackPulseExtender.cs index 53a5e559d..3a9dccdee 100644 --- a/src/PepperDash.Essentials.Core/Feedbacks/BoolFeedbackPulseExtender.cs +++ b/src/PepperDash.Essentials.Core/Feedbacks/BoolFeedbackPulseExtender.cs @@ -12,7 +12,14 @@ namespace PepperDash.Essentials.Core /// public class BoolFeedbackPulseExtender { + /// + /// Gets or sets the TimeoutMs + /// public uint TimeoutMs { get; set; } + + /// + /// Gets the Feedback + /// public BoolFeedback Feedback { get; private set; } CTimer Timer; diff --git a/src/PepperDash.Essentials.Core/Feedbacks/BoolOutputLogicals.cs b/src/PepperDash.Essentials.Core/Feedbacks/BoolOutputLogicals.cs index b45629044..901b80dd3 100644 --- a/src/PepperDash.Essentials.Core/Feedbacks/BoolOutputLogicals.cs +++ b/src/PepperDash.Essentials.Core/Feedbacks/BoolOutputLogicals.cs @@ -8,7 +8,9 @@ namespace PepperDash.Essentials.Core { - + /// + /// Abstract base class for BoolOutputLogicals + /// public abstract class BoolFeedbackLogic { /// @@ -21,13 +23,23 @@ public abstract class BoolFeedbackLogic /// protected List OutputsIn = new List(); + /// + /// Gets or sets the ComputedValue + /// protected bool ComputedValue; + /// + /// Constructor + /// protected BoolFeedbackLogic() { Output = new BoolFeedback(() => ComputedValue); } + /// + /// AddOutputIn method + /// + /// feedback to add public void AddOutputIn(BoolFeedback output) { // Don't double up outputs @@ -38,9 +50,10 @@ public void AddOutputIn(BoolFeedback output) Evaluate(); } - /// - /// AddOutputsIn method - /// + /// + /// AddOutputsIn method + /// + /// feedbacks to add public void AddOutputsIn(List outputs) { foreach (var o in outputs.Where(o => !OutputsIn.Contains(o))) @@ -51,9 +64,10 @@ public void AddOutputsIn(List outputs) Evaluate(); } - /// - /// RemoveOutputIn method - /// + /// + /// RemoveOutputIn method + /// + /// feedback to remove public void RemoveOutputIn(BoolFeedback output) { // Don't double up outputs @@ -64,9 +78,10 @@ public void RemoveOutputIn(BoolFeedback output) Evaluate(); } - /// - /// RemoveOutputsIn method - /// + /// + /// RemoveOutputsIn method + /// + /// feedbacks to remove public void RemoveOutputsIn(List outputs) { foreach (var o in outputs) @@ -77,20 +92,28 @@ public void RemoveOutputsIn(List outputs) Evaluate(); } - /// - /// ClearOutputs method - /// + /// + /// ClearOutputs method + /// public void ClearOutputs() { OutputsIn.Clear(); Evaluate(); } + /// + /// AnyInput_OutputChange event handler + /// + /// + /// void AnyInput_OutputChange(object sender, EventArgs e) { Evaluate(); } + /// + /// Evaluate method + /// protected abstract void Evaluate(); } @@ -99,6 +122,9 @@ void AnyInput_OutputChange(object sender, EventArgs e) /// public class BoolFeedbackAnd : BoolFeedbackLogic { + /// + /// Evaluate method + /// protected override void Evaluate() { var prevValue = ComputedValue; @@ -112,11 +138,14 @@ protected override void Evaluate() } } - /// - /// Represents a BoolFeedbackOr - /// + /// + /// Represents a BoolFeedbackOr + /// public class BoolFeedbackOr : BoolFeedbackLogic { + /// + /// Evaluate method + /// protected override void Evaluate() { var prevValue = ComputedValue; @@ -130,19 +159,26 @@ protected override void Evaluate() } } - /// - /// Represents a BoolFeedbackLinq - /// + /// + /// Represents a BoolFeedbackLinq + /// public class BoolFeedbackLinq : BoolFeedbackLogic { readonly Func, bool> _predicate; + /// + /// Constructor + /// + /// public BoolFeedbackLinq(Func, bool> predicate) : base() { _predicate = predicate; } + /// + /// Evaluate method + /// protected override void Evaluate() { var prevValue = ComputedValue; diff --git a/src/PepperDash.Essentials.Core/Feedbacks/FeedbackBase.cs b/src/PepperDash.Essentials.Core/Feedbacks/FeedbackBase.cs index 723d22a6e..0c756ace7 100644 --- a/src/PepperDash.Essentials.Core/Feedbacks/FeedbackBase.cs +++ b/src/PepperDash.Essentials.Core/Feedbacks/FeedbackBase.cs @@ -102,12 +102,19 @@ protected void OnOutputChange(bool value) if (OutputChange != null) OutputChange(this, new FeedbackEventArgs(value)); } + /// + /// Helper method that fires event. Use this intstead of calling OutputChange + /// + /// value to seed eventArgs protected void OnOutputChange(int value) { if (OutputChange != null) OutputChange(this, new FeedbackEventArgs(value)); } - + /// + /// Helper method that fires event. Use this intstead of calling OutputChange + /// + /// value to seed eventArgs protected void OnOutputChange(string value) { if (OutputChange != null) OutputChange(this, new FeedbackEventArgs(value)); diff --git a/src/PepperDash.Essentials.Core/Feedbacks/FeedbackEventArgs.cs b/src/PepperDash.Essentials.Core/Feedbacks/FeedbackEventArgs.cs index d2182245b..e22e93663 100644 --- a/src/PepperDash.Essentials.Core/Feedbacks/FeedbackEventArgs.cs +++ b/src/PepperDash.Essentials.Core/Feedbacks/FeedbackEventArgs.cs @@ -15,10 +15,15 @@ public class FeedbackEventArgs : EventArgs /// Gets or sets the BoolValue /// public bool BoolValue { get; private set; } + /// /// Gets or sets the IntValue /// public int IntValue { get; private set; } + + /// + /// Gets or sets the UShortValue + /// public ushort UShortValue { get @@ -26,27 +31,41 @@ public ushort UShortValue return (ushort)IntValue; } } + /// /// Gets or sets the StringValue /// public string StringValue { get; private set; } + /// /// Gets or sets the Type /// public eFeedbackEventType Type { get; private set; } + /// + /// Constructor for BoolValue + /// + /// value to set public FeedbackEventArgs(bool value) { BoolValue = value; Type = eFeedbackEventType.TypeBool; } + /// + /// Constructor for IntValue + /// + /// value to set public FeedbackEventArgs(int value) { IntValue = value; Type = eFeedbackEventType.TypeInt; } + /// + /// Constructor for StringValue + /// + /// value to set public FeedbackEventArgs(string value) { StringValue = value; @@ -59,8 +78,19 @@ public FeedbackEventArgs(string value) /// public enum eFeedbackEventType { + /// + /// Boolean type feedback event + /// TypeBool, + + /// + /// Integer type feedback event + /// TypeInt, + + /// + /// String type feedback event + /// TypeString } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Feedbacks/IntFeedback.cs b/src/PepperDash.Essentials.Core/Feedbacks/IntFeedback.cs index ee23e310a..4dd0424b7 100644 --- a/src/PepperDash.Essentials.Core/Feedbacks/IntFeedback.cs +++ b/src/PepperDash.Essentials.Core/Feedbacks/IntFeedback.cs @@ -64,6 +64,10 @@ public IntFeedback(string key, Func valueFunc) ValueFunc = valueFunc; } + /// + /// Sets the ValueFunc + /// + /// function to set public void SetValueFunc(Func newFunc) { ValueFunc = newFunc; diff --git a/src/PepperDash.Essentials.Core/Feedbacks/SerialFeedback.cs b/src/PepperDash.Essentials.Core/Feedbacks/SerialFeedback.cs index b26e23e62..1bde5a08d 100644 --- a/src/PepperDash.Essentials.Core/Feedbacks/SerialFeedback.cs +++ b/src/PepperDash.Essentials.Core/Feedbacks/SerialFeedback.cs @@ -13,6 +13,9 @@ namespace PepperDash.Essentials.Core /// public class SerialFeedback : Feedback { + /// + /// Gets the SerialValue + /// public override string SerialValue { get { return _SerialValue; } } string _SerialValue; @@ -25,11 +28,18 @@ public class SerialFeedback : Feedback List LinkedInputSigs = new List(); + /// + /// Constructor + /// [Obsolete("use constructor with Key parameter. This constructor will be removed in a future version")] public SerialFeedback() { } + /// + /// Constructor with Key parameter + /// + /// Key to find this Feedback public SerialFeedback(string key) : base(key) { diff --git a/src/PepperDash.Essentials.Core/Feedbacks/StringFeedback.cs b/src/PepperDash.Essentials.Core/Feedbacks/StringFeedback.cs index f7d594c48..4c4199032 100644 --- a/src/PepperDash.Essentials.Core/Feedbacks/StringFeedback.cs +++ b/src/PepperDash.Essentials.Core/Feedbacks/StringFeedback.cs @@ -59,6 +59,10 @@ public StringFeedback(string key, Func valueFunc) ValueFunc = valueFunc; } + /// + /// Sets the ValueFunc + /// + /// function to set public void SetValueFunc(Func newFunc) { ValueFunc = newFunc; diff --git a/src/PepperDash.Essentials.Core/File/FileIO.cs b/src/PepperDash.Essentials.Core/File/FileIO.cs index 0c41522ba..df1c07501 100644 --- a/src/PepperDash.Essentials.Core/File/FileIO.cs +++ b/src/PepperDash.Essentials.Core/File/FileIO.cs @@ -10,14 +10,23 @@ namespace PepperDash.Essentials.Core { + /// + /// Static class for FileIO operations + /// public static class FileIO { static CCriticalSection fileLock = new CCriticalSection(); - /// - /// Delegate for GotFileEventHandler - /// + /// + /// Delegate for GotFileEventHandler + /// + /// + /// public delegate void GotFileEventHandler(object sender, FileEventArgs e); + + /// + /// Event for GotFileEvent + /// public static event GotFileEventHandler GotFileEvent; /// @@ -297,6 +306,10 @@ public static bool FileIoUnitTest() /// public class FileEventArgs { + /// + /// Constructor + /// + /// public FileEventArgs(string data) { Data = data; } /// /// Gets or sets the Data diff --git a/src/PepperDash.Essentials.Core/Fusion/FusionCustomPropertiesBridge.cs b/src/PepperDash.Essentials.Core/Fusion/FusionCustomPropertiesBridge.cs index a0cd8e6e8..12f5d7e4c 100644 --- a/src/PepperDash.Essentials.Core/Fusion/FusionCustomPropertiesBridge.cs +++ b/src/PepperDash.Essentials.Core/Fusion/FusionCustomPropertiesBridge.cs @@ -1,16 +1,10 @@  using System; -using System.Collections.Generic; using System.Linq; -using System.Text; -using Crestron.SimplSharp; using Newtonsoft.Json; using Newtonsoft.Json.Linq; - using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.Devices; using Serilog.Events; @@ -25,17 +19,25 @@ public class FusionCustomPropertiesBridge /// /// Evaluates the room info and custom properties from Fusion and updates the system properties aa needed /// - /// - public void EvaluateRoomInfo(string roomKey, RoomInformation roomInfo) + /// The room associated with this Fusion instance + /// The room information from Fusion + /// + public void EvaluateRoomInfo(IEssentialsRoom room, RoomInformation roomInfo, bool useFusionRoomName) { try { - var reconfigurableDevices = DeviceManager.AllDevices.Where(d => d is ReconfigurableDevice); + var reconfigurableDevices = DeviceManager.AllDevices.OfType(); foreach (var device in reconfigurableDevices) { // Get the current device config so new values can be overwritten over existing - var deviceConfig = (device as ReconfigurableDevice).Config; + var deviceConfig = device.Config; + + if (device is IEssentialsRoom) + { + // Skipping room name as this will affect ALL room instances in the configuration and cause unintended consequences when multiple rooms are present and multiple Fusion instances are used + continue; + } if (device is RoomOnToDefaultSourceWhenOccupied) { @@ -85,36 +87,49 @@ public void EvaluateRoomInfo(string roomKey, RoomInformation roomInfo) deviceConfig.Properties = JToken.FromObject(devProps); } - else if (device is IEssentialsRoom) - { - // Set the room name - if (!string.IsNullOrEmpty(roomInfo.Name)) - { - Debug.LogMessage(LogEventLevel.Debug, "Current Room Name: {0}. New Room Name: {1}", deviceConfig.Name, roomInfo.Name); - // Set the name in config - deviceConfig.Name = roomInfo.Name; - - Debug.LogMessage(LogEventLevel.Debug, "Room Name Successfully Changed."); - } - - // Set the help message - var helpMessage = roomInfo.FusionCustomProperties.FirstOrDefault(p => p.ID.Equals("RoomHelpMessage")); - if (helpMessage != null) - { - //Debug.LogMessage(LogEventLevel.Debug, "Current Help Message: {0}. New Help Message: {1}", deviceConfig.Properties["help"]["message"].Value(ToString()), helpMessage.CustomFieldValue); - deviceConfig.Properties["helpMessage"] = (string)helpMessage.CustomFieldValue; - } - } // Set the config on the device - (device as ReconfigurableDevice).SetConfig(deviceConfig); + device.SetConfig(deviceConfig); } + if (!(room is ReconfigurableDevice reconfigurable)) + { + Debug.LogWarning("FusionCustomPropertiesBridge: Room is not a ReconfigurableDevice. Cannot map custom properties."); + return; + } + + var roomConfig = reconfigurable.Config; + + var updateConfig = false; + // Set the room name + if (!string.IsNullOrEmpty(roomInfo.Name) && useFusionRoomName) + { + Debug.LogDebug("Current Room Name: {currentName}. New Room Name: {fusionName}", roomConfig.Name, roomInfo.Name); + // Set the name in config + roomConfig.Name = roomInfo.Name; + updateConfig = true; + + Debug.LogDebug("Room Name Successfully Changed."); + } + + // Set the help message + var helpMessage = roomInfo.FusionCustomProperties.FirstOrDefault(p => p.ID.Equals("RoomHelpMessage")); + if (helpMessage != null) + { + roomConfig.Properties["helpMessage"] = helpMessage.CustomFieldValue; + updateConfig = true; + } + + if (updateConfig) + { + reconfigurable.SetConfig(roomConfig); + } } catch (Exception e) { - Debug.LogMessage(LogEventLevel.Debug, "FusionCustomPropetiesBridge: Error mapping properties: {0}", e); + Debug.LogError("FusionCustomPropetiesBridge: Exception mapping properties for {roomKey}: {message}", room.Key, e.Message); + Debug.LogDebug(e, "Stack Trace: "); } } } diff --git a/src/PepperDash.Essentials.Core/Fusion/FusionProcessorQueries.cs b/src/PepperDash.Essentials.Core/Fusion/FusionProcessorQueries.cs index 930483fb9..86ed62f3c 100644 --- a/src/PepperDash.Essentials.Core/Fusion/FusionProcessorQueries.cs +++ b/src/PepperDash.Essentials.Core/Fusion/FusionProcessorQueries.cs @@ -15,6 +15,10 @@ public class ProcessorProgReg { //public static Dictionary Programs { get; private set; } + /// + /// Gets the processor program registry + /// + /// public static Dictionary GetProcessorProgReg() { var programs = new Dictionary(); diff --git a/src/PepperDash.Essentials.Core/Fusion/FusionRviDataClasses.cs b/src/PepperDash.Essentials.Core/Fusion/FusionRviDataClasses.cs index da83d9d71..cef4926f4 100644 --- a/src/PepperDash.Essentials.Core/Fusion/FusionRviDataClasses.cs +++ b/src/PepperDash.Essentials.Core/Fusion/FusionRviDataClasses.cs @@ -17,18 +17,47 @@ namespace PepperDash.Essentials.Core.Fusion /// public class FusionRoomGuids { + /// + /// Gets or sets the RoomName + /// public string RoomName { get; set; } + + /// + /// Gets or sets the IpId + /// public uint IpId { get; set; } + + /// + /// Gets or sets the RoomGuid + /// public string RoomGuid { get; set; } + + /// + /// Gets or sets the OccupancyAsset + /// public FusionOccupancySensorAsset OccupancyAsset { get; set; } + + /// + /// Gets or sets the StaticAssets + /// public Dictionary StaticAssets { get; set; } + /// + /// FusionRoomGuids constructor + /// public FusionRoomGuids() { StaticAssets = new Dictionary(); OccupancyAsset = new FusionOccupancySensorAsset(); } + /// + /// FusionRoomGuids constructor + /// + /// name of the fusion room + /// ipID of the fusion room + /// room GUID + /// dictionary of assets public FusionRoomGuids(string roomName, uint ipId, string roomGuid, Dictionary staticAssets) { RoomName = roomName; @@ -39,6 +68,14 @@ public FusionRoomGuids(string roomName, uint ipId, string roomGuid, Dictionary + /// FusionRoomGuids constructor + /// + /// name of the fusion room + /// ipID of the fusion room + /// room GUID + /// dictionary of assets + /// occupancy asset public FusionRoomGuids(string roomName, uint ipId, string roomGuid, Dictionary staticAssets, FusionOccupancySensorAsset occAsset) { RoomName = roomName; @@ -143,10 +180,17 @@ public class FusionOccupancySensorAsset /// public string InstanceId { get; set; } + /// + /// Default constructor + /// public FusionOccupancySensorAsset() { } + /// + /// FusionOccupancySensorAsset constructor + /// + /// asset type public FusionOccupancySensorAsset(eAssetType type) { Type = type; @@ -177,11 +221,21 @@ public class FusionAsset /// public string InstanceId { get;set; } + /// + /// Default constructor + /// public FusionAsset() { } + /// + /// FusionAsset constructor + /// + /// slot number of asset + /// name of the asset + /// type of the asset + /// instance ID of the asset public FusionAsset(uint slotNum, string assetName, string type, string instanceId) { SlotNumber = slotNum; @@ -210,6 +264,9 @@ public class RoomSchedule /// public List Meetings { get; set; } + /// + /// RoomSchedule constructor + /// public RoomSchedule() { Meetings = new List(); @@ -224,6 +281,9 @@ public RoomSchedule() /// public class LocalTimeRequest { + /// + /// Gets or sets the RequestID + /// public string RequestID { get; set; } } @@ -238,13 +298,30 @@ public class RequestSchedule /// Gets or sets the RequestID /// public string RequestID { get; set; } + //[XmlElement(ElementName = "RoomID")] + /// + /// Gets or sets the RoomID + /// public string RoomID { get; set; } + //[XmlElement(ElementName = "Start")] + /// + /// Gets or sets the Start + /// public DateTime Start { get; set; } + //[XmlElement(ElementName = "HourSpan")] + /// + /// Gets or sets the HourSpan + /// public double HourSpan { get; set; } + /// + /// RequestSchedule constructor + /// + /// id of the request + /// id of the room public RequestSchedule(string requestID, string roomID) { RequestID = requestID; @@ -282,6 +359,12 @@ public class RequestAction /// public List Parameters { get; set; } + /// + /// RequestAction constructor + /// + /// id of the room + /// id of the action + /// list of parameters public RequestAction(string roomID, string actionID, List parameters) { RoomID = roomID; @@ -301,11 +384,13 @@ public class ActionResponse /// Gets or sets the RequestID /// public string RequestID { get; set; } + //[XmlElement(ElementName = "ActionID")] /// /// Gets or sets the ActionID /// public string ActionID { get; set; } + //[XmlElement(ElementName = "Parameters")] /// /// Gets or sets the Parameters @@ -324,6 +409,7 @@ public class Parameter /// Gets or sets the ID /// public string ID { get; set; } + //[XmlAttribute(AttributeName = "Value")] /// /// Gets or sets the Value @@ -345,14 +431,32 @@ public class Parameter public class ScheduleResponse { //[XmlElement(ElementName = "RequestID")] + /// + /// Gets or sets the RequestID + /// public string RequestID { get; set; } + //[XmlElement(ElementName = "RoomID")] + /// + /// Gets or sets the RoomID + /// public string RoomID { get; set; } + //[XmlElement(ElementName = "RoomName")] + /// + /// Gets or sets the RoomName + /// public string RoomName { get; set; } + //[XmlElement("Event")] + /// + /// Gets or sets the Events + /// public List Events { get; set; } + /// + /// ScheduleResponse constructor + /// public ScheduleResponse() { Events = new List(); diff --git a/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionController.cs b/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionController.cs index bcf6509ef..9364a58d1 100644 --- a/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionController.cs +++ b/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionController.cs @@ -1,4 +1,10 @@ -using Crestron.SimplSharp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Timers; +using Crestron.SimplSharp; using Crestron.SimplSharp.CrestronIO; using Crestron.SimplSharp.CrestronXml; using Crestron.SimplSharp.CrestronXml.Serialization; @@ -10,11 +16,6 @@ using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.DeviceTypeInterfaces; using Serilog.Events; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Timers; namespace PepperDash.Essentials.Core.Fusion { @@ -698,18 +699,26 @@ private void GetTouchpanelInfo() /// protected void FusionRoom_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args) { - if (args.DeviceOnLine) + if (!args.DeviceOnLine) { - CrestronInvoke.BeginInvoke((o) => - { - CrestronEnvironment.Sleep(200); + return; + } + + if (!_config.EnableSchedulePushNotifications) + { + return; + } - // Send Push Notification Action request: + Task.Run(() => + { + // CrestronEnvironment.Sleep(200); + + // Send Push Notification Action request: - const string requestId = "InitialPushRequest"; + const string requestId = "InitialPushRequest"; - var actionRequest = + var actionRequest = string.Format("\n{0}\n", requestId) + "RegisterPushModel\n" + "\n" + @@ -734,27 +743,26 @@ protected void FusionRoom_OnlineStatusChange(GenericBase currentDevice, OnlineOf "\n" + "\n"; - Debug.LogMessage(LogEventLevel.Verbose, this, "Sending Fusion ActionRequest: \n{0}", actionRequest); + Debug.LogMessage(LogEventLevel.Verbose, this, "Sending Fusion ActionRequest: \n{0}", actionRequest); - FusionRoom.ExtenderFusionRoomDataReservedSigs.ActionQuery.StringValue = actionRequest; + FusionRoom.ExtenderFusionRoomDataReservedSigs.ActionQuery.StringValue = actionRequest; - GetCustomProperties(); + GetCustomProperties(); - // Request current Fusion Server Time - RequestLocalDateTime(null); + // Request current Fusion Server Time + RequestLocalDateTime(null); - // Setup timer to request time daily - if (_dailyTimeRequestTimer != null && !_dailyTimeRequestTimer.Disposed) - { - _dailyTimeRequestTimer.Stop(); - _dailyTimeRequestTimer.Dispose(); - } + // Setup timer to request time daily + if (_dailyTimeRequestTimer != null && !_dailyTimeRequestTimer.Disposed) + { + _dailyTimeRequestTimer.Stop(); + _dailyTimeRequestTimer.Dispose(); + } - _dailyTimeRequestTimer = new CTimer(RequestLocalDateTime, null, 86400000, 86400000); + _dailyTimeRequestTimer = new CTimer(RequestLocalDateTime, null, 86400000, 86400000); - _dailyTimeRequestTimer.Reset(86400000, 86400000); - }); - } + _dailyTimeRequestTimer.Reset(86400000, 86400000); + }); } /// @@ -785,7 +793,7 @@ public void RequestFullRoomSchedule(object callbackObject) var requestTest = string.Format( - "FullSchedleRequest{0}{1}24", + "FullScheduleRequest{0}{1}24", RoomGuid, currentTime); Debug.LogMessage(LogEventLevel.Verbose, this, "Sending Fusion ScheduleQuery: \n{0}", requestTest); @@ -960,7 +968,7 @@ where parameter.HasAttributes select parameter.Attributes into attributes where attributes["ID"].Value == "Registered" - select Int32.Parse(attributes["Value"].Value)) + select int.Parse(attributes["Value"].Value)) { switch (isRegistered) { @@ -1091,7 +1099,7 @@ select Int32.Parse(attributes["Value"].Value)) } RoomInfoChange?.Invoke(this, new EventArgs()); - CustomPropertiesBridge.EvaluateRoomInfo(Room.Key, roomInformation); + CustomPropertiesBridge.EvaluateRoomInfo(Room, roomInformation, _config.UseFusionRoomName); } } catch (Exception e) @@ -1112,7 +1120,7 @@ select Int32.Parse(attributes["Value"].Value)) protected void FusionRoomSchedule_DeviceExtenderSigChange(DeviceExtender currentDeviceExtender, SigEventArgs args) { - Debug.LogMessage(LogEventLevel.Verbose, this, "Scehdule Response Event: {0}\n Sig: {1}\nFusionResponse:\n{2}", args.Event, + Debug.LogMessage(LogEventLevel.Verbose, this, "Schedule Response Event: {0}\n Sig: {1}\nFusionResponse:\n{2}", args.Event, args.Sig.Name, args.Sig.StringValue); diff --git a/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionControllerPropertiesConfig.cs b/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionControllerPropertiesConfig.cs index c9dea4c3e..2be30b08f 100644 --- a/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionControllerPropertiesConfig.cs +++ b/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionControllerPropertiesConfig.cs @@ -27,7 +27,7 @@ public uint IpIdInt } else { - Debug.LogWarning( "Failed to parse IpId '{0}' as UInt16", IpId); + Debug.LogWarning("Failed to parse IpId '{0}' as UInt16", IpId); return 0; } } @@ -45,6 +45,13 @@ public uint IpIdInt [JsonProperty("roomKey")] public string RoomKey { get; set; } + /// + /// Gets or sets whether to use the Fusion room name for this room + /// + /// Defaults to true to preserve current behavior. Set to false to skip updating the room name from Fusion + [JsonProperty("useFusionRoomName")] + public bool UseFusionRoomName { get; set; } = true; + /// /// Gets or sets whether to use HTML format for help requests /// @@ -68,4 +75,11 @@ public uint IpIdInt /// [JsonProperty("helpRequestTimeoutMs")] public int HelpRequestTimeoutMs { get; set; } = 30000; + + /// + /// Gets or sets whether to enable schedule push notifications + /// + /// Defaults to false to skip getting schedule unless required + [JsonProperty("enableSchedulePushNotifications")] + public bool EnableSchedulePushNotifications { get; set; } = false; } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Global/Global.cs b/src/PepperDash.Essentials.Core/Global/Global.cs index 957738583..37d4472d2 100644 --- a/src/PepperDash.Essentials.Core/Global/Global.cs +++ b/src/PepperDash.Essentials.Core/Global/Global.cs @@ -22,6 +22,9 @@ namespace PepperDash.Essentials.Core { + /// + /// Global static class for Essentials + /// public static class Global { /// @@ -34,6 +37,9 @@ public static class Global /// public static eDevicePlatform Platform { get { return CrestronEnvironment.DevicePlatform; } } + /// + /// Gets the collection of Ethernet Adapter Info + /// public static Dictionary EthernetAdapterInfoCollection { get; private set; } /// @@ -47,6 +53,9 @@ public static class Global public static eCrestronSeries ProcessorSeries { get { return CrestronEnvironment.ProgramCompatibility; } } // TODO: consider making this configurable later + /// + /// The CultureInfo for formatting + /// public static IFormatProvider Culture = CultureInfo.CreateSpecificCulture("en-US"); /// @@ -182,6 +191,13 @@ public static void SetAssemblyVersion(string assemblyVersion) AssemblyVersion = assemblyVersion; } + /// + /// Checks to see if the running version is in the list of development versions. If so, checks to see if it meets the minimum version requirement. + /// If not in the list, returns false. For beta versions (0.xx.yy), will always return true. + /// + /// list of development versions + /// minimum version + /// public static bool IsRunningDevelopmentVersion(List developmentVersions, string minimumVersion) { if (Regex.Match(AssemblyVersion, @"^(\d*).(\d*).(\d*).*").Groups[1].Value == "0") diff --git a/src/PepperDash.Essentials.Core/Global/JobTimer.cs b/src/PepperDash.Essentials.Core/Global/JobTimer.cs index 6a6fd6836..558143681 100644 --- a/src/PepperDash.Essentials.Core/Global/JobTimer.cs +++ b/src/PepperDash.Essentials.Core/Global/JobTimer.cs @@ -6,6 +6,9 @@ namespace PepperDash.Essentials.Core { + /// + /// Represents a JobTimer + /// public static class JobTimer { static CTimer MinuteTimer; @@ -13,25 +16,18 @@ public static class JobTimer static List Items = new List(); /// - /// - /// - /// - /// - /// AddAction method - /// + /// AddAction method + /// + /// action to add public static void AddAction(Action act) { } /// - /// + /// AddJobTimerItem method /// - /// - /// - /// - /// AddJobTimerItem method - /// + /// JobTimerItem to add public static void AddJobTimerItem(JobTimerItem item) { var existing = Items.FirstOrDefault(i => i.Key == item.Key); @@ -62,25 +58,61 @@ static void MinuteTimerCallback() /// public class JobTimerItem { + /// + /// Key property + /// public string Key { get; private set; } + + /// + /// JobAction property + /// public Action JobAction { get; private set; } + + /// + /// CycleType property + /// public eJobTimerCycleTypes CycleType { get; private set; } + /// - /// + /// RunNextAt property /// public DateTime RunNextAt { get; set; } + /// + /// Constructor + /// + /// item key + /// cycle type + /// action to run public JobTimerItem(string key, eJobTimerCycleTypes cycle, Action act) { } } + /// + /// JobTimerCycleTypes enum + /// public enum eJobTimerCycleTypes { + /// + /// RunEveryDay property + /// RunEveryDay, + + /// + /// RunEveryHour property + /// RunEveryHour, + + /// + /// RunEveryHalfHour property + /// RunEveryHalfHour, + + /// + /// RunEveryMinute property + /// RunEveryMinute } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Global/Scheduler.cs b/src/PepperDash.Essentials.Core/Global/Scheduler.cs index aee40cff1..d3641ffcd 100644 --- a/src/PepperDash.Essentials.Core/Global/Scheduler.cs +++ b/src/PepperDash.Essentials.Core/Global/Scheduler.cs @@ -138,6 +138,11 @@ public static void RemoveEventGroup(ScheduledEventGroup eventGroup) EventGroups.Remove(eventGroup.Name); } + /// + /// Gets the event group by key + /// + /// key of the event group + /// public static ScheduledEventGroup GetEventGroup(string key) { ScheduledEventGroup returnValue; @@ -146,6 +151,9 @@ public static ScheduledEventGroup GetEventGroup(string key) } } + /// + /// SchedulerUtilities class + /// public static class SchedulerUtilities { /// diff --git a/src/PepperDash.Essentials.Core/InUseTracking/IInUseTracking.cs b/src/PepperDash.Essentials.Core/InUseTracking/IInUseTracking.cs index 97a7c7f60..59ea87b3f 100644 --- a/src/PepperDash.Essentials.Core/InUseTracking/IInUseTracking.cs +++ b/src/PepperDash.Essentials.Core/InUseTracking/IInUseTracking.cs @@ -11,6 +11,9 @@ namespace PepperDash.Essentials.Core /// public interface IInUseTracking { + /// + /// Gets the InUseTracker + /// InUseTracking InUseTracker { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/InUseTracking/InUseTracking.cs b/src/PepperDash.Essentials.Core/InUseTracking/InUseTracking.cs index 177b1c22b..c0fcdbf69 100644 --- a/src/PepperDash.Essentials.Core/InUseTracking/InUseTracking.cs +++ b/src/PepperDash.Essentials.Core/InUseTracking/InUseTracking.cs @@ -28,6 +28,9 @@ public class InUseTracking /// public IntFeedback InUseCountFeedback { get; private set; } + /// + /// Constructor + /// public InUseTracking() { InUseFeedback = new BoolFeedback(() => _Users.Count > 0); @@ -39,9 +42,7 @@ public InUseTracking() /// multiple times, provided that the label is different /// /// A label to identify the instance of the user. Treated like a "role", etc. - /// - /// AddUser method - /// + /// The object to add public void AddUser(object objectToAdd, string label) { // check if an exact object/label pair exists and ignore if so. No double-registers. @@ -56,9 +57,11 @@ public void AddUser(object objectToAdd, string label) InUseCountFeedback.FireUpdate(); } - /// - /// RemoveUser method - /// + /// + /// RemoveUser method + /// + /// The label of the user to remove + /// The object to remove public void RemoveUser(object objectToRemove, string label) { // Find the user object if exists and remove it @@ -73,14 +76,26 @@ public void RemoveUser(object objectToRemove, string label) } } - /// - /// Represents a InUseTrackingObject - /// + /// + /// Represents a InUseTrackingObject + /// public class InUseTrackingObject { + /// + /// The label of the user + /// public string Label { get; private set; } + + /// + /// The user object + /// public object User { get; private set; } + /// + /// Constructor + /// + /// user using the object + /// label for the object public InUseTrackingObject(object user, string label) { User = user; diff --git a/src/PepperDash.Essentials.Core/JoinMaps/JoinMapBase.cs b/src/PepperDash.Essentials.Core/JoinMaps/JoinMapBase.cs index 01f71098c..d2e7d036f 100644 --- a/src/PepperDash.Essentials.Core/JoinMaps/JoinMapBase.cs +++ b/src/PepperDash.Essentials.Core/JoinMaps/JoinMapBase.cs @@ -17,6 +17,9 @@ namespace PepperDash.Essentials.Core { + /// + /// JoinMapHelper class + /// public static class JoinMapHelper { /// @@ -93,6 +96,9 @@ public static Dictionary TryGetJoinMapAdvancedForDevice(string /// public abstract class JoinMapBaseAdvanced { + /// + /// The join offset + /// protected uint JoinOffset; /// @@ -100,6 +106,10 @@ public abstract class JoinMapBaseAdvanced /// public Dictionary Joins { get; private set; } + /// + /// Constructor + /// + /// join start offset protected JoinMapBaseAdvanced(uint joinStart) { Joins = new Dictionary(); @@ -107,11 +117,20 @@ protected JoinMapBaseAdvanced(uint joinStart) JoinOffset = joinStart - 1; } + /// + /// Constructor + /// + /// join start offset + /// type of joinstart protected JoinMapBaseAdvanced(uint joinStart, Type type):this(joinStart) { AddJoins(type); } + /// + /// AddJoins method + /// + /// type of join to add protected void AddJoins(Type type) { var fields = @@ -303,18 +322,11 @@ public void SetCustomJoinData(Dictionary joinData) PrintJoinMapInfo(); } - /// - /// Returns the join span for the join with the specified key - /// - /// - /// - - - /// - /// Returns the join span for the join with the specified key - /// - /// - /// + // /// + // /// Returns the join span for the join with the specified key + // /// + // /// + // /// //public uint GetJoinSpanForKey(string key) //{ // return Joins.ContainsKey(key) ? Joins[key].JoinSpan : 0; @@ -328,28 +340,86 @@ public void SetCustomJoinData(Dictionary joinData) [Flags] public enum eJoinCapabilities { + /// + /// No capabilities + /// None = 0, + + /// + /// To SIMPL + /// ToSIMPL = 1, + + /// + /// From SIMPL + /// FromSIMPL = 2, + + /// + /// To and From SIMPL + /// ToFromSIMPL = ToSIMPL | FromSIMPL, + + /// + /// To Fusion + /// ToFusion = 4, + + /// + /// From Fusion + /// FromFusion = 8, + + /// + /// To and From Fusion + /// ToFromFusion = ToFusion | FromFusion, } - [Flags] /// /// Enumeration of eJoinType values /// + [Flags] public enum eJoinType { + /// + /// No join type + /// None = 0, + + /// + /// Digital join + /// Digital = 1, + + /// + /// Analog join + /// Analog = 2, + + /// + /// Serial join + /// Serial = 4, + + /// + /// Digital and Analog join + /// DigitalAnalog = Digital | Analog, + + /// + /// Digital and Serial join + /// DigitalSerial = Digital | Serial, + + /// + /// Analog and Serial join + /// AnalogSerial = Analog | Serial, + + /// + /// Digital, Analog and Serial join + /// DigitalAnalogSerial = Digital | Analog | Serial, } @@ -364,29 +434,23 @@ public class JoinMetadata /// [JsonProperty("description")] public string Description { get { return _description; } set { _description = value; } } - /// - /// Signal type(s) - /// - [JsonProperty("joinType")] + /// /// Gets or sets the JoinType /// + [JsonProperty("joinType")] public eJoinType JoinType { get; set; } - /// - /// Indicates whether the join is read and/or write - /// - [JsonProperty("joinCapabilities")] + /// /// Gets or sets the JoinCapabilities /// + [JsonProperty("joinCapabilities")] public eJoinCapabilities JoinCapabilities { get; set; } - /// - /// Indicates a set of valid values (particularly if this translates to an enum - /// - [JsonProperty("validValues")] + /// /// Gets or sets the ValidValues /// + [JsonProperty("validValues")] public string[] ValidValues { get; set; } } @@ -401,18 +465,17 @@ public class JoinData /// [JsonProperty("joinNumber")] public uint JoinNumber { get; set; } + /// /// Join range span. If join indicates the start of a range of joins, this indicated the maximum number of joins in the range /// [JsonProperty("joinSpan")] public uint JoinSpan { get; set; } - /// - /// Fusion Attribute Name (optional) - /// - [JsonProperty("attributeName")] + /// /// Gets or sets the AttributeName /// + [JsonProperty("attributeName")] public string AttributeName { get; set; } } @@ -424,18 +487,34 @@ public class JoinDataComplete private uint _joinOffset; private JoinData _data; + + /// + /// Gets or sets the JoinMetadata + /// public JoinMetadata Metadata { get; set; } + /// /// To store some future information as you please /// public object UserObject { get; private set; } + /// + /// Constructor + /// + /// + /// public JoinDataComplete(JoinData data, JoinMetadata metadata) { _data = data; Metadata = metadata; } + /// + /// GetMarkdownFormattedData method + /// + /// formatter to use + /// length of the description + /// public string GetMarkdownFormattedData(string stringFormatter, int descriptionLen) { @@ -498,9 +577,6 @@ public string GetMarkdownFormattedData(string stringFormatter, int descriptionLe /// Sets the join offset value /// /// - /// - /// SetJoinOffset method - /// public void SetJoinOffset(uint joinOffset) { _joinOffset = joinOffset; @@ -515,11 +591,17 @@ public uint JoinNumber set { _data.JoinNumber = value; } } + /// + /// The join span + /// public uint JoinSpan { get { return _data.JoinSpan; } } + /// + /// The attribute name + /// public string AttributeName { get { return _data.AttributeName; } @@ -551,20 +633,27 @@ public string GetNameAttribute(MemberInfo memberInfo) - [AttributeUsage(AttributeTargets.All)] /// /// Represents a JoinNameAttribute /// + [AttributeUsage(AttributeTargets.All)] public class JoinNameAttribute : Attribute { private string _Name; + /// + /// Constructor + /// + /// name of the attribute public JoinNameAttribute(string name) { Debug.LogMessage(LogEventLevel.Verbose, "Setting Attribute Name: {0}",null, name); _Name = name; } + /// + /// Gets the Name + /// public string Name { get { return _Name; } diff --git a/src/PepperDash.Essentials.Core/License/EssentialsLicenseManager.cs b/src/PepperDash.Essentials.Core/License/EssentialsLicenseManager.cs index f85009960..ded7f699c 100644 --- a/src/PepperDash.Essentials.Core/License/EssentialsLicenseManager.cs +++ b/src/PepperDash.Essentials.Core/License/EssentialsLicenseManager.cs @@ -13,21 +13,29 @@ namespace PepperDash.Essentials.License { + /// + /// Abstract base class for License Managers + /// public abstract class LicenseManager { - /// - /// Gets or sets the LicenseIsValid - /// + /// + /// Gets or sets the LicenseIsValid + /// public BoolFeedback LicenseIsValid { get; protected set; } - /// - /// Gets or sets the LicenseMessage - /// + + /// + /// Gets or sets the LicenseMessage + /// public StringFeedback LicenseMessage { get; protected set; } - /// - /// Gets or sets the LicenseLog - /// + + /// + /// Gets or sets the LicenseLog + /// public StringFeedback LicenseLog { get; protected set; } + /// + /// Constructor + /// protected LicenseManager() { CrestronConsole.AddNewConsoleCommand( @@ -36,12 +44,15 @@ protected LicenseManager() ConsoleAccessLevelEnum.AccessOperator); } + /// + /// Gets the status string for console command + /// protected abstract string GetStatusString(); } - /// - /// Represents a MockEssentialsLicenseManager - /// + /// + /// Represents a MockEssentialsLicenseManager + /// public class MockEssentialsLicenseManager : LicenseManager { /// @@ -91,6 +102,10 @@ void SetFromConsole(bool isValid) SetIsValid(isValid); } + /// + /// Gets the status string for console command + /// + /// license status valid or invalid protected override string GetStatusString() { return string.Format("License Status: {0}", IsValid ? "Valid" : "Not Valid"); diff --git a/src/PepperDash.Essentials.Core/Lighting/Lighting Interfaces.cs b/src/PepperDash.Essentials.Core/Lighting/Lighting Interfaces.cs index de5816811..642ca6f8b 100644 --- a/src/PepperDash.Essentials.Core/Lighting/Lighting Interfaces.cs +++ b/src/PepperDash.Essentials.Core/Lighting/Lighting Interfaces.cs @@ -8,12 +8,25 @@ namespace PepperDash.Essentials.Core.Lighting /// public interface ILightingScenes { + /// + /// Fires when the lighting scene changes + /// event EventHandler LightingSceneChange; + /// + /// Gets the list of LightingScenes + /// List LightingScenes { get; } + /// + /// Selects the given LightingScene + /// + /// scene to select void SelectScene(LightingScene scene); + /// + /// Gets the currently selected LightingScene + /// LightingScene CurrentLightingScene { get; } } @@ -23,6 +36,9 @@ public interface ILightingScenes /// public interface ILightingScenesDynamic : ILightingScenes { + /// + /// Fires when the lighting scenes are updated + /// event EventHandler LightingScenesUpdated; } @@ -31,8 +47,19 @@ public interface ILightingScenesDynamic : ILightingScenes /// public interface ILightingMasterRaiseLower { + /// + /// Raises the master level + /// void MasterRaise(); + + /// + /// Lowers the master level + /// void MasterLower(); + + /// + /// Stops raising or lowering the master level + /// void MasterRaiseLowerStop(); } @@ -41,11 +68,30 @@ public interface ILightingMasterRaiseLower /// public interface ILightingLoad { + /// + /// Sets the load level + /// + /// level to set void SetLoadLevel(int level); + + /// + /// Raises the load level + /// void Raise(); + + /// + /// Lowers the load level + /// void Lower(); + /// + /// feedback of the current load level + /// IntFeedback LoadLevelFeedback { get; } + + /// + /// feedback of whether the load is on + /// BoolFeedback LoadIsOnFeedback { get; } } @@ -59,6 +105,10 @@ public class LightingSceneChangeEventArgs : EventArgs /// public LightingScene CurrentLightingScene { get; private set; } + /// + /// Constructor for LightingSceneChangeEventArgs + /// + /// The lighting scene that changed public LightingSceneChangeEventArgs(LightingScene scene) { CurrentLightingScene = scene; diff --git a/src/PepperDash.Essentials.Core/Lighting/LightingScene.cs b/src/PepperDash.Essentials.Core/Lighting/LightingScene.cs index 788dbb357..15afb8c13 100644 --- a/src/PepperDash.Essentials.Core/Lighting/LightingScene.cs +++ b/src/PepperDash.Essentials.Core/Lighting/LightingScene.cs @@ -10,17 +10,23 @@ namespace PepperDash.Essentials.Core.Lighting /// public class LightingScene { - [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the Name /// + [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] public string Name { get; set; } - [JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)] + /// /// Gets or sets the ID /// + [JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)] public string ID { get; set; } + bool _IsActive; + + /// + /// Gets or sets whether the scene is active + /// [JsonProperty("isActive", NullValueHandling = NullValueHandling.Ignore)] public bool IsActive { @@ -35,18 +41,22 @@ public bool IsActive } } - [JsonProperty("sortOrder", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the SortOrder /// + [JsonProperty("sortOrder", NullValueHandling = NullValueHandling.Ignore)] public int SortOrder { get; set; } - [JsonIgnore] + /// /// Gets or sets the IsActiveFeedback /// + [JsonIgnore] public BoolFeedback IsActiveFeedback { get; set; } + /// + /// Constructor for LightingScene + /// public LightingScene() { IsActiveFeedback = new BoolFeedback(new Func(() => IsActive)); diff --git a/src/PepperDash.Essentials.Core/Microphone Privacy/MicrophonePrivacyController.cs b/src/PepperDash.Essentials.Core/Microphone Privacy/MicrophonePrivacyController.cs index 203d75ed2..a15e0dc47 100644 --- a/src/PepperDash.Essentials.Core/Microphone Privacy/MicrophonePrivacyController.cs +++ b/src/PepperDash.Essentials.Core/Microphone Privacy/MicrophonePrivacyController.cs @@ -23,6 +23,9 @@ public class MicrophonePrivacyController : EssentialsDevice bool initialized; + /// + /// Gets or sets whether LED control is enabled + /// public bool EnableLeds { get @@ -69,6 +72,11 @@ public bool EnableLeds /// public IPrivacy PrivacyDevice { get; private set; } + /// + /// Constructor for MicrophonePrivacyController + /// + /// key of the controller device + /// configuration for the controller device public MicrophonePrivacyController(string key, MicrophonePrivacyControllerConfig config) : base(key) { @@ -264,6 +272,9 @@ void SetRelayStates() /// public class MicrophonePrivacyControllerFactory : EssentialsDeviceFactory { + /// + /// Constructor for MicrophonePrivacyControllerFactory + /// public MicrophonePrivacyControllerFactory() { TypeNames = new List() { "microphoneprivacycontroller" }; diff --git a/src/PepperDash.Essentials.Core/Monitoring/CrestronGenericBaseCommunicationMonitor.cs b/src/PepperDash.Essentials.Core/Monitoring/CrestronGenericBaseCommunicationMonitor.cs index b10be9477..dc9406a3b 100644 --- a/src/PepperDash.Essentials.Core/Monitoring/CrestronGenericBaseCommunicationMonitor.cs +++ b/src/PepperDash.Essentials.Core/Monitoring/CrestronGenericBaseCommunicationMonitor.cs @@ -20,6 +20,13 @@ public class CrestronGenericBaseCommunicationMonitor : StatusMonitorBase { GenericBase Device; + /// + /// Constructor for CrestronGenericBaseCommunicationMonitor + /// + /// parent device + /// device to monitor + /// time before warning status + /// time before error status public CrestronGenericBaseCommunicationMonitor(IKeyed parent, GenericBase device, long warningTime, long errorTime) : base(parent, warningTime, errorTime) { diff --git a/src/PepperDash.Essentials.Core/Monitoring/GenericCommunicationMonitor.cs b/src/PepperDash.Essentials.Core/Monitoring/GenericCommunicationMonitor.cs index eca013c50..34f074d9f 100644 --- a/src/PepperDash.Essentials.Core/Monitoring/GenericCommunicationMonitor.cs +++ b/src/PepperDash.Essentials.Core/Monitoring/GenericCommunicationMonitor.cs @@ -12,6 +12,9 @@ namespace PepperDash.Essentials.Core /// public class GenericCommunicationMonitor : StatusMonitorBase { + /// + /// Gets the Client being monitored + /// public IBasicCommunication Client { get; private set; } /// @@ -281,17 +284,29 @@ private void Poll() } } - /// - /// Represents a CommunicationMonitorConfig - /// + /// + /// Represents a CommunicationMonitorConfig + /// public class CommunicationMonitorConfig { - /// - /// Gets or sets the PollInterval - /// + /// + /// Gets or sets the PollInterval + /// public int PollInterval { get; set; } + + /// + /// Gets or sets the TimeToWarning + /// public int TimeToWarning { get; set; } + + /// + /// Gets or sets the TimeToError + /// public int TimeToError { get; set; } + + /// + /// Gets or sets the PollString + /// public string PollString { get; set; } /// diff --git a/src/PepperDash.Essentials.Core/Monitoring/Interfaces.cs b/src/PepperDash.Essentials.Core/Monitoring/Interfaces.cs index a4d8d2aed..4a3303fe9 100644 --- a/src/PepperDash.Essentials.Core/Monitoring/Interfaces.cs +++ b/src/PepperDash.Essentials.Core/Monitoring/Interfaces.cs @@ -11,12 +11,39 @@ namespace PepperDash.Essentials.Core /// public interface IStatusMonitor { + /// + /// Gets the Parent + /// IKeyed Parent { get; } + + /// + /// Fires when the status changes + /// event EventHandler StatusChange; + + /// + /// Gets the Status + /// MonitorStatus Status { get; } + + /// + /// Gets the Message + /// string Message { get; } + + /// + /// Gets or sets the IsOnlineFeedback + /// BoolFeedback IsOnlineFeedback { get; set; } + + /// + /// Start method + /// void Start(); + + /// + /// Stop method + /// void Stop(); } @@ -26,6 +53,9 @@ public interface IStatusMonitor /// public interface ICommunicationMonitor { + /// + /// Gets the CommunicationMonitor + /// StatusMonitorBase CommunicationMonitor { get; } } @@ -34,29 +64,57 @@ public interface ICommunicationMonitor /// public enum MonitorStatus { + /// + /// Status Unknown + /// StatusUnknown = 0, - IsOk = 1, - InWarning = 2, + + /// + /// Is Ok + /// + IsOk = 1, + + /// + /// In Warning + /// + InWarning = 2, + + /// + /// In Error + /// InError = 3 } + /// + /// Represents a MonitorStatusChangeEventArgs + /// public class MonitorStatusChangeEventArgs : EventArgs { - /// - /// Gets or sets the Status - /// + /// + /// Gets or sets the Status + /// public MonitorStatus Status { get; private set; } - /// - /// Gets or sets the Message - /// + + /// + /// Gets or sets the Message + /// public string Message { get; private set; } + /// + /// Constructor for MonitorStatusChangeEventArgs + /// + /// monitor status public MonitorStatusChangeEventArgs(MonitorStatus status) { Status = status; Message = status == MonitorStatus.IsOk ? "" : status.ToString(); } + /// + /// Constructor for MonitorStatusChangeEventArgs + /// + /// monitor status + /// status message public MonitorStatusChangeEventArgs(MonitorStatus status, string message) { Status = status; diff --git a/src/PepperDash.Essentials.Core/Monitoring/StatusMonitorBase.cs b/src/PepperDash.Essentials.Core/Monitoring/StatusMonitorBase.cs index 1934f9457..7f44fa0f5 100644 --- a/src/PepperDash.Essentials.Core/Monitoring/StatusMonitorBase.cs +++ b/src/PepperDash.Essentials.Core/Monitoring/StatusMonitorBase.cs @@ -13,8 +13,14 @@ namespace PepperDash.Essentials.Core { + /// + /// Base class for status monitors + /// public abstract class StatusMonitorBase : IStatusMonitor, IKeyName { + /// + /// Event fired when status changes + /// public event EventHandler StatusChange; /// @@ -27,15 +33,24 @@ public abstract class StatusMonitorBase : IStatusMonitor, IKeyName /// public string Name { get { return "Comm. monitor"; } } - /// - /// Gets or sets the Parent - /// + /// + /// Gets or sets the Parent + /// public IKeyed Parent { get; private set; } + /// + /// Bool feedback for online status + /// public BoolFeedback IsOnlineFeedback { get; set; } + /// + /// Indicates whether the monitored device is online + /// public bool IsOnline; + /// + /// Current monitor status + /// public MonitorStatus Status { get { return _Status; } @@ -51,6 +66,9 @@ protected set } MonitorStatus _Status; + /// + /// Current status message + /// public string Message { get { return _Message; } @@ -69,6 +87,12 @@ public string Message CTimer WarningTimer; CTimer ErrorTimer; + /// + /// Constructor + /// + /// parent device + /// time in milliseconds before warning status + /// time in milliseconds before error status public StatusMonitorBase(IKeyed parent, long warningTime, long errorTime) { Parent = parent; @@ -83,9 +107,20 @@ public StatusMonitorBase(IKeyed parent, long warningTime, long errorTime) ErrorTime = errorTime; } + /// + /// Starts the monitor + /// public abstract void Start(); + + /// + /// Stops the monitor + /// public abstract void Stop(); + /// + /// Fires the StatusChange event + /// + /// monitor status protected void OnStatusChange(MonitorStatus status) { if (_Status == MonitorStatus.IsOk) @@ -98,6 +133,11 @@ protected void OnStatusChange(MonitorStatus status) handler(this, new MonitorStatusChangeEventArgs(status)); } + /// + /// Fires the StatusChange event with message + /// + /// monitor status + /// status message protected void OnStatusChange(MonitorStatus status, string message) { if (_Status == MonitorStatus.IsOk) @@ -110,12 +150,18 @@ protected void OnStatusChange(MonitorStatus status, string message) handler(this, new MonitorStatusChangeEventArgs(status, message)); } + /// + /// Starts the error timers + /// protected void StartErrorTimers() { if (WarningTimer == null) WarningTimer = new CTimer(o => { Status = MonitorStatus.InWarning; }, WarningTime); if (ErrorTimer == null) ErrorTimer = new CTimer(o => { Status = MonitorStatus.InError; }, ErrorTime); } + /// + /// Stops the error timers + /// protected void StopErrorTimers() { if (WarningTimer != null) WarningTimer.Stop(); @@ -124,6 +170,9 @@ protected void StopErrorTimers() ErrorTimer = null; } + /// + /// Resets the error timers + /// protected void ResetErrorTimers() { if(WarningTimer != null) diff --git a/src/PepperDash.Essentials.Core/Monitoring/StatusMonitorCollection.cs b/src/PepperDash.Essentials.Core/Monitoring/StatusMonitorCollection.cs index a517e5d08..58aba6a1e 100644 --- a/src/PepperDash.Essentials.Core/Monitoring/StatusMonitorCollection.cs +++ b/src/PepperDash.Essentials.Core/Monitoring/StatusMonitorCollection.cs @@ -14,41 +14,51 @@ namespace PepperDash.Essentials.Core { /// - /// + /// Collection class for multiple status monitors /// public class StatusMonitorCollection : IStatusMonitor { + /// + /// Gets or sets the Parent + /// public IKeyed Parent { get; private set; } List Monitors = new List(); #region IStatusMonitor Members + /// + /// Event fired when status changes + /// public event EventHandler StatusChange; - /// - /// Gets or sets the Status - /// + /// + /// Gets or sets the Status + /// public MonitorStatus Status { get; protected set; } - /// - /// Gets or sets the Message - /// + /// + /// Gets or sets the Message + /// public string Message { get; private set; } - /// - /// Gets or sets the IsOnlineFeedback - /// + /// + /// Gets or sets the IsOnlineFeedback + /// public BoolFeedback IsOnlineFeedback { get; set; } + /// + /// Constructor + /// + /// parent device public StatusMonitorCollection(IKeyed parent) { Parent = parent; } - /// - /// Start method - /// + /// + /// Start method + /// public void Start() { foreach (var mon in Monitors) @@ -59,51 +69,61 @@ public void Start() void ProcessStatuses() { - var InError = Monitors.Where(m => m.Status == MonitorStatus.InError); - var InWarning = Monitors.Where(m => m.Status == MonitorStatus.InWarning); - var IsOk = Monitors.Where(m => m.Status == MonitorStatus.IsOk); + var InError = Monitors.Where(m => m.Status == MonitorStatus.InError).ToList(); + var InWarning = Monitors.Where(m => m.Status == MonitorStatus.InWarning).ToList(); + var IsOk = Monitors.Where(m => m.Status == MonitorStatus.IsOk).ToList(); MonitorStatus initialStatus; string prefix = "0:"; - if (InError.Count() > 0) + if (InError.Any()) { initialStatus = MonitorStatus.InError; prefix = "3:"; } - else if (InWarning.Count() > 0) + else if (InWarning.Any()) { initialStatus = MonitorStatus.InWarning; prefix = "2:"; } - else if (IsOk.Count() > 0) + else if (IsOk.Any()) initialStatus = MonitorStatus.IsOk; else initialStatus = MonitorStatus.StatusUnknown; // Build the error message string - if (InError.Count() > 0 || InWarning.Count() > 0) - { - StringBuilder sb = new StringBuilder(prefix); - if (InError.Count() > 0) - { - // Do string splits and joins - sb.Append(string.Format("{0} Errors:", InError.Count())); - foreach (var mon in InError) - sb.Append(string.Format("{0}, ", mon.Parent.Key)); - } - if (InWarning.Count() > 0) - { - sb.Append(string.Format("{0} Warnings:", InWarning.Count())); - foreach (var mon in InWarning) - sb.Append(string.Format("{0}, ", mon.Parent.Key)); - } - Message = sb.ToString(); - } - else - { - Message = "Room Ok."; - } + if (InError.Any() || InWarning.Any()) + { + var errorNames = InError + .Select(mon => mon.Parent is IKeyName keyName ? keyName.Name : mon.Parent.Key) + .ToList(); + var warningNames = InWarning + .Select(mon => mon.Parent is IKeyName keyName ? keyName.Name : mon.Parent.Key) + .ToList(); + + var sb = new StringBuilder(prefix); + + if (errorNames.Count > 0) + { + sb.Append($"{errorNames.Count} Error{(errorNames.Count > 1 ? "s" : "")}: "); + sb.Append(string.Join(", ", errorNames)); + } + if (warningNames.Count > 0) + { + if (errorNames.Count > 0) + sb.Append("; "); + + sb.Append($"{warningNames.Count} Warning{(warningNames.Count > 1 ? "s" : "")}: "); + sb.Append(string.Join(", ", warningNames)); + } + + sb.Append(" Offline"); + Message = sb.ToString(); + } + else + { + Message = "Room Ok."; + } // Want to fire even if status doesn't change because the message may. Status = initialStatus; @@ -135,7 +155,11 @@ public void AddMonitor(IStatusMonitor monitor) Monitors.Add(monitor); } - + /// + /// Fires the StatusChange event + /// + /// monitor status + /// status message protected void OnStatusChange(MonitorStatus status, string message) { var handler = StatusChange; diff --git a/src/PepperDash.Essentials.Core/Monitoring/SystemMonitorController.cs b/src/PepperDash.Essentials.Core/Monitoring/SystemMonitorController.cs index a353a072d..61e701170 100644 --- a/src/PepperDash.Essentials.Core/Monitoring/SystemMonitorController.cs +++ b/src/PepperDash.Essentials.Core/Monitoring/SystemMonitorController.cs @@ -26,15 +26,26 @@ public class SystemMonitorController : EssentialsBridgeableDevice private string _uptime; private string _lastStart; + /// + /// Event fired when any SystemMonitor property changes + /// public event EventHandler SystemMonitorPropertiesChanged; + /// + /// Gets or sets the ProgramStatusFeedbackCollection + /// public Dictionary ProgramStatusFeedbackCollection; + + /// + /// Gets or sets the EthernetStatusFeedbackCollection + /// public Dictionary EthernetStatusFeedbackCollection; /// /// Gets or sets the TimeZoneFeedback /// public IntFeedback TimeZoneFeedback { get; protected set; } + /// /// Gets or sets the TimeZoneTextFeedback /// @@ -44,14 +55,17 @@ public class SystemMonitorController : EssentialsBridgeableDevice /// Gets or sets the IoControllerVersionFeedback /// public StringFeedback IoControllerVersionFeedback { get; protected set; } + /// /// Gets or sets the SnmpVersionFeedback /// public StringFeedback SnmpVersionFeedback { get; protected set; } + /// /// Gets or sets the BaCnetAppVersionFeedback /// public StringFeedback BaCnetAppVersionFeedback { get; protected set; } + /// /// Gets or sets the ControllerVersionFeedback /// @@ -62,6 +76,7 @@ public class SystemMonitorController : EssentialsBridgeableDevice /// Gets or sets the SerialNumberFeedback /// public StringFeedback SerialNumberFeedback { get; protected set; } + /// /// Gets or sets the ModelFeedback /// @@ -71,30 +86,34 @@ public class SystemMonitorController : EssentialsBridgeableDevice /// Gets or sets the UptimeFeedback /// public StringFeedback UptimeFeedback { get; set; } + /// /// Gets or sets the LastStartFeedback /// public StringFeedback LastStartFeedback { get; set; } - /// - /// Gets or sets the IsApplianceFeedback - /// + /// + /// Gets or sets the IsApplianceFeedback + /// public BoolFeedback IsApplianceFeedback { get; protected set; } private bool _isApplianceFb { get { return CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance; } } - /// - /// Gets or sets the IsServerFeedback - /// + /// + /// Gets or sets the IsServerFeedback + /// public BoolFeedback IsServerFeedback { get; protected set; } private bool _isServerFb { get { return CrestronEnvironment.DevicePlatform == eDevicePlatform.Server; } } - + /// + /// Constructor + /// + /// device key public SystemMonitorController(string key) : base(key) { @@ -464,55 +483,71 @@ private void TimeZoneInformation_TimeZoneChange(TimeZoneEventArgs args) OnSystemMonitorPropertiesChanged(); } + /// + /// Represents an EthernetStatusFeedbacks + /// public class EthernetStatusFeedbacks { /// /// Gets or sets the HostNameFeedback /// public StringFeedback HostNameFeedback { get; protected set; } + /// /// Gets or sets the DnsServerFeedback /// public StringFeedback DnsServerFeedback { get; protected set; } + /// /// Gets or sets the DomainFeedback /// public StringFeedback DomainFeedback { get; protected set; } + /// /// Gets or sets the MacAddressFeedback /// public StringFeedback MacAddressFeedback { get; protected set; } + /// /// Gets or sets the DhcpStatusFeedback /// public StringFeedback DhcpStatusFeedback { get; protected set; } + /// /// Gets or sets the CurrentIpAddressFeedback /// public StringFeedback CurrentIpAddressFeedback { get; protected set; } + /// /// Gets or sets the CurrentSubnetMaskFeedback /// public StringFeedback CurrentSubnetMaskFeedback { get; protected set; } + /// /// Gets or sets the CurrentDefaultGatewayFeedback /// public StringFeedback CurrentDefaultGatewayFeedback { get; protected set; } - + /// /// Gets or sets the StaticIpAddressFeedback /// public StringFeedback StaticIpAddressFeedback { get; protected set; } + /// /// Gets or sets the StaticSubnetMaskFeedback /// public StringFeedback StaticSubnetMaskFeedback { get; protected set; } + /// /// Gets or sets the StaticDefaultGatewayFeedback /// public StringFeedback StaticDefaultGatewayFeedback { get; protected set; } + /// + /// Constructor + /// + /// index of the ethernet addapter public EthernetStatusFeedbacks(short adapterIndex) { Debug.LogMessage(LogEventLevel.Verbose, "Ethernet Information for interface {0}", adapterIndex); @@ -621,6 +656,9 @@ public void UpdateEthernetStatus() /// public class ProgramStatusFeedbacks { + /// + /// Event fired when ProgramInfo changes + /// public event EventHandler ProgramInfoChanged; /// @@ -637,14 +675,17 @@ public class ProgramStatusFeedbacks /// Gets or sets the ProgramStartedFeedback /// public BoolFeedback ProgramStartedFeedback; + /// /// Gets or sets the ProgramStoppedFeedback /// public BoolFeedback ProgramStoppedFeedback; + /// /// Gets or sets the ProgramRegisteredFeedback /// public BoolFeedback ProgramRegisteredFeedback; + /// /// Gets or sets the ProgramUnregisteredFeedback /// @@ -654,24 +695,32 @@ public class ProgramStatusFeedbacks /// Gets or sets the ProgramNameFeedback /// public StringFeedback ProgramNameFeedback; + /// /// Gets or sets the ProgramCompileTimeFeedback /// public StringFeedback ProgramCompileTimeFeedback; + /// /// Gets or sets the CrestronDataBaseVersionFeedback /// public StringFeedback CrestronDataBaseVersionFeedback; + // SIMPL windows version /// /// Gets or sets the EnvironmentVersionFeedback /// public StringFeedback EnvironmentVersionFeedback; + /// /// Gets or sets the AggregatedProgramInfoFeedback /// public StringFeedback AggregatedProgramInfoFeedback; + /// + /// Constructor + /// + /// program to get status about public ProgramStatusFeedbacks(Program program) { ProgramInfo = new ProgramInfo(program.Number); @@ -863,38 +912,47 @@ public class ProgramInfo { // Shared properties + /// + /// Gets the ProgramNumber + /// [JsonProperty("programNumber")] public uint ProgramNumber { get; private set; } + /// + /// Gets or sets the OperatingState + /// [JsonConverter(typeof (StringEnumConverter))] [JsonProperty("operatingState")] public eProgramOperatingState OperatingState { get; set; } - [JsonConverter(typeof (StringEnumConverter))] - [JsonProperty("registrationState")] /// /// Gets or sets the RegistrationState /// + [JsonConverter(typeof (StringEnumConverter))] + [JsonProperty("registrationState")] public eProgramRegistrationState RegistrationState { get; set; } - [JsonProperty("programFile")] /// /// Gets or sets the ProgramFile /// + [JsonProperty("programFile")] public string ProgramFile { get; set; } - [JsonProperty("friendlyName")] /// /// Gets or sets the FriendlyName /// + [JsonProperty("friendlyName")] public string FriendlyName { get; set; } - [JsonProperty("compilerRevision")] /// /// Gets or sets the CompilerRevision /// + [JsonProperty("compilerRevision")] public string CompilerRevision { get; set; } + /// + /// Gets the CompilerRevisionInfo + /// [JsonIgnore] public Version CompilerRevisionInfo { @@ -904,69 +962,75 @@ public Version CompilerRevisionInfo } } - [JsonProperty("compileTime")] /// /// Gets or sets the CompileTime /// + [JsonProperty("compileTime")] public string CompileTime { get; set; } - [JsonProperty("include4Dat")] /// /// Gets or sets the Include4Dat /// + [JsonProperty("include4Dat")] public string Include4Dat { get; set; } // SIMPL Windows properties - [JsonProperty("systemName")] + /// /// Gets or sets the SystemName /// + [JsonProperty("systemName")] public string SystemName { get; set; } - [JsonProperty("crestronDb")] /// /// Gets or sets the CrestronDb /// + [JsonProperty("crestronDb")] public string CrestronDb { get; set; } - [JsonProperty("environment")] /// /// Gets or sets the Environment /// + [JsonProperty("environment")] public string Environment { get; set; } - [JsonProperty("programmer")] /// /// Gets or sets the Programmer /// + [JsonProperty("programmer")] public string Programmer { get; set; } // SSP Properties - [JsonProperty("applicationName")] + /// /// Gets or sets the ApplicationName /// + [JsonProperty("applicationName")] public string ApplicationName { get; set; } - [JsonProperty("programTool")] /// /// Gets or sets the ProgramTool /// + [JsonProperty("programTool")] public string ProgramTool { get; set; } - [JsonProperty("minFirmwareVersion")] /// /// Gets or sets the MinFirmwareVersion /// + [JsonProperty("minFirmwareVersion")] public string MinFirmwareVersion { get; set; } - [JsonProperty("plugInVersion")] /// /// Gets or sets the PlugInVersion /// + [JsonProperty("plugInVersion")] public string PlugInVersion { get; set; } + /// + /// Constructor + /// + /// program slot to get info about public ProgramInfo(uint number) { ProgramNumber = number; @@ -999,6 +1063,10 @@ public class ProgramInfoEventArgs : EventArgs /// public ProgramInfo ProgramInfo; + /// + /// Constructor + /// + /// program info public ProgramInfoEventArgs(ProgramInfo progInfo) { ProgramInfo = progInfo; diff --git a/src/PepperDash.Essentials.Core/PartitionSensor/EssentialsPartitionController.cs b/src/PepperDash.Essentials.Core/PartitionSensor/EssentialsPartitionController.cs index f2043dbc3..ee20a22aa 100644 --- a/src/PepperDash.Essentials.Core/PartitionSensor/EssentialsPartitionController.cs +++ b/src/PepperDash.Essentials.Core/PartitionSensor/EssentialsPartitionController.cs @@ -14,10 +14,16 @@ public class EssentialsPartitionController : IPartitionController { private IPartitionStateProvider _partitionSensor; + /// + /// Indicates whether the controller is in Auto mode or Manual mode + /// public bool IsInAutoMode { get; private set; } private bool _partitionPresent; + /// + /// Gets or sets the PartitionPresent state + /// public bool PartitionPresent { get @@ -45,6 +51,14 @@ public bool PartitionPresent } } + /// + /// Constructor + /// + /// key for the partition controller + /// name of the partition controller + /// partition state provider sensor + /// whether to default to manual mode + /// list of adjacent room keys public EssentialsPartitionController(string key, string name, IPartitionStateProvider sensor, bool defaultToManualMode, List adjacentRoomKeys) { Key = key; diff --git a/src/PepperDash.Essentials.Core/PartitionSensor/IPartitionStateProvider.cs b/src/PepperDash.Essentials.Core/PartitionSensor/IPartitionStateProvider.cs index f41a3f35a..5bf403452 100644 --- a/src/PepperDash.Essentials.Core/PartitionSensor/IPartitionStateProvider.cs +++ b/src/PepperDash.Essentials.Core/PartitionSensor/IPartitionStateProvider.cs @@ -9,9 +9,15 @@ namespace PepperDash.Essentials.Core /// public interface IPartitionStateProvider : IKeyName { + /// + /// Feedback indicating whether the partition is present + /// [JsonIgnore] BoolFeedback PartitionPresentFeedback { get; } + /// + /// Indicates whether the partition is present + /// [JsonProperty("partitionPresent")] bool PartitionPresent { get; } } @@ -21,20 +27,41 @@ public interface IPartitionStateProvider : IKeyName /// public interface IPartitionController : IPartitionStateProvider { + /// + /// List of adjacent room keys + /// [JsonProperty("adjacentRoomKeys")] List AdjacentRoomKeys { get; } + /// + /// Indicates whether the controller is in Auto mode or Manual mode + /// [JsonProperty("isInAutoMode")] bool IsInAutoMode { get; } + /// + /// Sets the PartitionPresent state + /// void SetPartitionStatePresent(); + /// + /// Sets the PartitionPresent state to not present + /// void SetPartitionStateNotPresent(); + /// + /// Toggles the PartitionPresent state + /// void ToggglePartitionState(); + /// + /// Sets the controller to Manual mode + /// void SetManualMode(); + /// + /// Sets the controller to Auto mode + /// void SetAutoMode(); } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Plugins/PluginLoader.cs b/src/PepperDash.Essentials.Core/Plugins/PluginLoader.cs index a1dd94136..2f195ba99 100644 --- a/src/PepperDash.Essentials.Core/Plugins/PluginLoader.cs +++ b/src/PepperDash.Essentials.Core/Plugins/PluginLoader.cs @@ -174,9 +174,6 @@ static LoadedAssembly LoadAssembly(string filePath) /// /// /// - /// - /// GetAssemblyVersion method - /// public static string GetAssemblyVersion(Assembly assembly) { var ver = assembly.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false); @@ -198,11 +195,8 @@ public static string GetAssemblyVersion(Assembly assembly) /// /// Checks if the filename matches an already loaded assembly file's name /// - /// + /// name of loaded assembly /// True if file already matches loaded assembly file. - /// - /// CheckIfAssemblyLoaded method - /// public static bool CheckIfAssemblyLoaded(string name) { Debug.LogMessage(LogEventLevel.Verbose, "Checking if assembly: {0} is loaded...", name); @@ -238,9 +232,6 @@ public static void AddLoadedAssembly(string name, Assembly assembly) /// Used by console command to report the currently loaded assemblies and versions /// /// - /// - /// ReportAssemblyVersions method - /// public static void ReportAssemblyVersions(string command) { CrestronConsole.ConsoleCommandResponse("Essentials Version: {0}" + CrestronEnvironment.NewLine, Global.AssemblyVersion); @@ -257,6 +248,7 @@ public static void ReportAssemblyVersions(string command) // CrestronConsole.ConsoleCommandResponse("{0} Version: {1}" + CrestronEnvironment.NewLine, assembly.Name, assembly.Version); //} } + /// /// Moves any .dll assemblies not already loaded from the plugins folder to loadedPlugins folder /// diff --git a/src/PepperDash.Essentials.Core/Presets/DevicePresets.cs b/src/PepperDash.Essentials.Core/Presets/DevicePresets.cs index 81612e920..253a19e12 100644 --- a/src/PepperDash.Essentials.Core/Presets/DevicePresets.cs +++ b/src/PepperDash.Essentials.Core/Presets/DevicePresets.cs @@ -19,8 +19,17 @@ namespace PepperDash.Essentials.Core.Presets /// public class DevicePresetsModel : Device { + /// + /// Delegate for preset recalled event + /// + /// device that recalled a preset + /// channel that was recalled public delegate void PresetRecalledCallback(ISetTopBoxNumericKeypad device, string channel); + /// + /// Delegate for presets saved event + /// + /// list of presets that were saved public delegate void PresetsSavedCallback(List presets); private readonly CCriticalSection _fileOps = new CCriticalSection(); @@ -37,6 +46,12 @@ public class DevicePresetsModel : Device private Action _enterFunction; private string _filePath; + /// + /// Constructor + /// + /// key for the device + /// set top box device + /// file name for presets public DevicePresetsModel(string key, ISetTopBoxNumericKeypad setTopBox, string fileName) : this(key, fileName) { @@ -71,6 +86,11 @@ public DevicePresetsModel(string key, ISetTopBoxNumericKeypad setTopBox, string _enterFunction = setTopBox.KeypadEnter; } + /// + /// Constructor + /// + /// key for the device + /// file name for presets public DevicePresetsModel(string key, string fileName) : base(key) { PulseTime = 150; @@ -88,17 +108,26 @@ public DevicePresetsModel(string key, string fileName) : base(key) _initSuccess = true; } + /// + /// Event fired when a preset is recalled + /// public event PresetRecalledCallback PresetRecalled; + + /// + /// Event fired when presets are saved + /// public event PresetsSavedCallback PresetsSaved; /// /// Gets or sets the PulseTime /// public int PulseTime { get; set; } + /// /// Gets or sets the DigitSpacingMs /// public int DigitSpacingMs { get; set; } + /// /// Gets or sets the PresetsAreLoaded /// @@ -109,6 +138,9 @@ public DevicePresetsModel(string key, string fileName) : base(key) /// public List PresetsList { get; private set; } + /// + /// Gets the Count of presets + /// public int Count { get { return PresetsList != null ? PresetsList.Count : 0; } @@ -118,18 +150,25 @@ public int Count /// Gets or sets the UseLocalImageStorage /// public bool UseLocalImageStorage { get; set; } + /// /// Gets or sets the ImagesLocalHostPrefix /// public string ImagesLocalHostPrefix { get; set; } + /// /// Gets or sets the ImagesPathPrefix /// public string ImagesPathPrefix { get; set; } + /// /// Gets or sets the ListPathPrefix /// public string ListPathPrefix { get; set; } + + /// + /// Event fired when presets are loaded + /// public event EventHandler PresetsLoaded; diff --git a/src/PepperDash.Essentials.Core/Presets/DevicePresetsView.cs b/src/PepperDash.Essentials.Core/Presets/DevicePresetsView.cs index 07fba0788..42761de7f 100644 --- a/src/PepperDash.Essentials.Core/Presets/DevicePresetsView.cs +++ b/src/PepperDash.Essentials.Core/Presets/DevicePresetsView.cs @@ -8,33 +8,42 @@ namespace PepperDash.Essentials.Core.Presets { - /// - /// Represents a DevicePresetsView - /// + /// + /// Represents a DevicePresetsView + /// public class DevicePresetsView { - /// - /// Gets or sets the ShowNumbers - /// + /// + /// Gets or sets the ShowNumbers + /// public bool ShowNumbers { get; set; } - /// - /// Gets or sets the ShowName - /// + + /// + /// Gets or sets the ShowName + /// public bool ShowName { get; set; } - /// - /// Gets or sets the ShowIcon - /// + + /// + /// Gets or sets the ShowIcon + /// public bool ShowIcon { get; set; } /// /// Gets or sets the SRL /// public SubpageReferenceList SRL { get; private set; } - /// - /// Gets or sets the Model - /// + + /// + /// Gets or sets the Model + /// public DevicePresetsModel Model { get; private set; } + /// + /// Constructor + /// + /// trilst + /// device presets model + /// public DevicePresetsView(BasicTriListWithSmartObject tl, DevicePresetsModel model) { if (model == null) @@ -50,9 +59,9 @@ public DevicePresetsView(BasicTriListWithSmartObject tl, DevicePresetsModel mode Model.PresetsLoaded += new EventHandler(Model_PresetsLoaded); } - /// - /// Attach method - /// + /// + /// Attach method + /// public void Attach() { if (Model.PresetsAreLoaded) @@ -67,9 +76,9 @@ public void Attach() } } - /// - /// Detach method - /// + /// + /// Detach method + /// public void Detach() { SRL.Clear(); diff --git a/src/PepperDash.Essentials.Core/Presets/PresetBase.cs b/src/PepperDash.Essentials.Core/Presets/PresetBase.cs index 3e42dd66f..84af0bb90 100644 --- a/src/PepperDash.Essentials.Core/Presets/PresetBase.cs +++ b/src/PepperDash.Essentials.Core/Presets/PresetBase.cs @@ -15,36 +15,37 @@ namespace PepperDash.Essentials.Core.Presets /// public class PresetBase { - [JsonProperty("id")] /// /// Gets or sets the ID /// + [JsonProperty("id")] public int ID { get; set; } - /// - /// Used to store the name of the preset - /// - [JsonProperty("description")] + /// /// Gets or sets the Description /// + [JsonProperty("description")] public string Description { get; set; } + /// - /// Indicates if the preset is defined(stored) in the codec + /// Gets or sets Defined /// [JsonProperty("defined")] - /// - /// Gets or sets the Defined - /// public bool Defined { get; set; } - /// - /// Indicates if the preset has the capability to be defined - /// - [JsonProperty("isDefinable")] + /// /// Gets or sets the IsDefinable /// + [JsonProperty("isDefinable")] public bool IsDefinable { get; set; } + /// + /// Constructor + /// + /// id of the preset + /// description of the preset + /// whether the preset is defined + /// whether the preset is definable public PresetBase(int id, string description, bool def, bool isDef) { ID = id; diff --git a/src/PepperDash.Essentials.Core/Presets/PresetChannel.cs b/src/PepperDash.Essentials.Core/Presets/PresetChannel.cs index b3b885eb5..8fd15105a 100644 --- a/src/PepperDash.Essentials.Core/Presets/PresetChannel.cs +++ b/src/PepperDash.Essentials.Core/Presets/PresetChannel.cs @@ -15,40 +15,40 @@ namespace PepperDash.Essentials.Core.Presets public class PresetChannel { + /// + /// Gets or sets the Name + /// [JsonProperty(Required = Required.Always,PropertyName = "name")] - /// - /// Gets or sets the Name - /// public string Name { get; set; } + /// + /// Gets or sets the IconUrl + /// [JsonProperty(Required = Required.Always, PropertyName = "iconUrl")] - /// - /// Gets or sets the IconUrl - /// public string IconUrl { get; set; } + /// + /// Gets or sets the Channel + /// [JsonProperty(Required = Required.Always, PropertyName = "channel")] - /// - /// Gets or sets the Channel - /// public string Channel { get; set; } } - /// - /// Represents a PresetsList - /// + /// + /// Represents a PresetsList + /// public class PresetsList { + /// + /// Gets or sets the Name + /// [JsonProperty(Required=Required.Always,PropertyName = "name")] - /// - /// Gets or sets the Name - /// public string Name { get; set; } + /// + /// Gets or sets the Channels + /// [JsonProperty(Required = Required.Always, PropertyName = "channels")] - /// - /// Gets or sets the Channels - /// public List Channels { get; set; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Presets/PresetsListSubpageReferenceListItem.cs b/src/PepperDash.Essentials.Core/Presets/PresetsListSubpageReferenceListItem.cs index 826098d13..f7bfa3bd0 100644 --- a/src/PepperDash.Essentials.Core/Presets/PresetsListSubpageReferenceListItem.cs +++ b/src/PepperDash.Essentials.Core/Presets/PresetsListSubpageReferenceListItem.cs @@ -20,6 +20,13 @@ public class PresetsListSubpageReferenceListItem : SubpageReferenceListItem DevicePresetsView View; PresetChannel Channel; + /// + /// Constructor + /// + /// preset channel + /// index of the preset + /// owner of the subpage reference list item + /// device presets view public PresetsListSubpageReferenceListItem(PresetChannel chan, uint index, SubpageReferenceList owner, DevicePresetsView view) : base(index, owner) @@ -30,10 +37,10 @@ public PresetsListSubpageReferenceListItem(PresetChannel chan, uint index, Refresh(); } - /// - /// Clear method - /// - /// + /// + /// Clear method + /// + /// public override void Clear() { Owner.GetBoolFeedbackSig(Index, 1).UserObject = null; @@ -42,10 +49,10 @@ public override void Clear() Owner.StringInputSig(Index, 3).StringValue = ""; } - /// - /// Refresh method - /// - /// + /// + /// Refresh method + /// + /// public override void Refresh() { var name = View.ShowName ? Channel.Name : ""; diff --git a/src/PepperDash.Essentials.Core/Queues/GenericQueue.cs b/src/PepperDash.Essentials.Core/Queues/GenericQueue.cs index ab1b53e0f..af76f10fa 100644 --- a/src/PepperDash.Essentials.Core/Queues/GenericQueue.cs +++ b/src/PepperDash.Essentials.Core/Queues/GenericQueue.cs @@ -14,8 +14,20 @@ namespace PepperDash.Essentials.Core.Queues public class GenericQueue : IQueue { private readonly string _key; + + /// + /// The internal queue + /// protected readonly ConcurrentQueue _queue; + + /// + /// The worker thread + /// protected readonly Thread _worker; + + /// + /// The wait handle for the queue + /// protected readonly CEvent _waitHandle = new CEvent(); private bool _delayEnabled; @@ -256,6 +268,9 @@ protected void Dispose(bool disposing) Disposed = true; } + /// + /// Finalizer + /// ~GenericQueue() { Dispose(true); diff --git a/src/PepperDash.Essentials.Core/Queues/IQueue.cs b/src/PepperDash.Essentials.Core/Queues/IQueue.cs index 502fd0ef0..a8cbbf6a9 100644 --- a/src/PepperDash.Essentials.Core/Queues/IQueue.cs +++ b/src/PepperDash.Essentials.Core/Queues/IQueue.cs @@ -8,7 +8,15 @@ namespace PepperDash.Essentials.Core.Queues /// public interface IQueue : IKeyed, IDisposable where T : class { + /// + /// Enqueues an item + /// + /// item to be queued void Enqueue(T item); + + /// + /// gets the disposed status of the queue + /// bool Disposed { get; } } } diff --git a/src/PepperDash.Essentials.Core/Queues/IQueueMessage.cs b/src/PepperDash.Essentials.Core/Queues/IQueueMessage.cs index 72463da8a..2a050a3bc 100644 --- a/src/PepperDash.Essentials.Core/Queues/IQueueMessage.cs +++ b/src/PepperDash.Essentials.Core/Queues/IQueueMessage.cs @@ -7,6 +7,9 @@ namespace PepperDash.Essentials.Core.Queues /// public interface IQueueMessage { + /// + /// Dispatches the message + /// void Dispatch(); } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Queues/StringResponseProcessor.cs b/src/PepperDash.Essentials.Core/Queues/StringResponseProcessor.cs index 2f03a9d41..207fd597c 100644 --- a/src/PepperDash.Essentials.Core/Queues/StringResponseProcessor.cs +++ b/src/PepperDash.Essentials.Core/Queues/StringResponseProcessor.cs @@ -4,6 +4,9 @@ namespace PepperDash.Essentials.Core.Queues { + /// + /// Processes string responses from a communication port or gather using a queue to ensure thread safety + /// public sealed class StringResponseProcessor : IKeyed, IDisposable { private readonly Action _processStringAction; @@ -98,6 +101,9 @@ private void Dispose(bool disposing) /// public bool Disposed { get; private set; } + /// + /// Finalizer + /// ~StringResponseProcessor() { Dispose(false); diff --git a/src/PepperDash.Essentials.Core/Ramps and Increments/ActionIncrementer.cs b/src/PepperDash.Essentials.Core/Ramps and Increments/ActionIncrementer.cs index 630aa4e9c..544e7d941 100644 --- a/src/PepperDash.Essentials.Core/Ramps and Increments/ActionIncrementer.cs +++ b/src/PepperDash.Essentials.Core/Ramps and Increments/ActionIncrementer.cs @@ -15,10 +15,29 @@ namespace PepperDash.Essentials.Core /// public class ActionIncrementer { + /// + /// The amount to change the value by each increment + /// public int ChangeAmount { get; set; } + + /// + /// The maximum value for the incrementer + /// public int MaxValue { get; set; } + + /// + /// The minimum value for the incrementer + /// public int MinValue { get; set; } + + /// + /// The delay before repeating starts + /// public uint RepeatDelay { get; set; } + + /// + /// The time between repeats + /// public uint RepeatTime { get; set; } Action SetAction; diff --git a/src/PepperDash.Essentials.Core/Ramps and Increments/UshortSigIncrementer.cs b/src/PepperDash.Essentials.Core/Ramps and Increments/UshortSigIncrementer.cs index b516d17a0..02c40f69d 100644 --- a/src/PepperDash.Essentials.Core/Ramps and Increments/UshortSigIncrementer.cs +++ b/src/PepperDash.Essentials.Core/Ramps and Increments/UshortSigIncrementer.cs @@ -16,14 +16,44 @@ namespace PepperDash.Essentials.Core public class UshortSigIncrementer { UShortInputSig TheSig; + + /// + /// The amount to change the value by each increment + /// public ushort ChangeAmount { get; set; } + + /// + /// The maximum value for the incrementer + /// public int MaxValue { get; set; } + + /// + /// The minimum value for the incrementer + /// public int MinValue { get; set; } + + /// + /// The delay before repeating starts + /// public uint RepeatDelay { get; set; } + + /// + /// The time between repeats + /// public uint RepeatTime { get; set; } + bool SignedMode; CTimer Timer; + /// + /// Constructor + /// + /// the signal toi be incremented + /// the amount to increment by + /// the minimum value of the signal + /// the maximum value of the signal + /// the delay before repeating starts + /// the time between repeats public UshortSigIncrementer(UShortInputSig sig, ushort changeAmount, int minValue, int maxValue, uint repeatDelay, uint repeatTime) { TheSig = sig; diff --git a/src/PepperDash.Essentials.Core/Room/Behaviours/RoomOnToDefaultSourceWhenOccupied.cs b/src/PepperDash.Essentials.Core/Room/Behaviours/RoomOnToDefaultSourceWhenOccupied.cs index d6f3c503e..601c35598 100644 --- a/src/PepperDash.Essentials.Core/Room/Behaviours/RoomOnToDefaultSourceWhenOccupied.cs +++ b/src/PepperDash.Essentials.Core/Room/Behaviours/RoomOnToDefaultSourceWhenOccupied.cs @@ -25,8 +25,14 @@ public class RoomOnToDefaultSourceWhenOccupied : ReconfigurableDevice { RoomOnToDefaultSourceWhenOccupiedConfig PropertiesConfig; + /// + /// Gets or sets the FeatureEnabled + /// public bool FeatureEnabled { get; private set; } + /// + /// Gets or sets the FeatureEnabledTime + /// public DateTime FeatureEnabledTime { get; private set; } ScheduledEvent FeatureEnableEvent; @@ -51,6 +57,10 @@ public class RoomOnToDefaultSourceWhenOccupied : ReconfigurableDevice private Fusion.IEssentialsRoomFusionController FusionRoom; + /// + /// Constructor for RoomOnToDefaultSourceWhenOccupied + /// + /// config of the device public RoomOnToDefaultSourceWhenOccupied(DeviceConfig config) : base (config) { @@ -152,7 +162,10 @@ void SetUpDevice() Debug.LogMessage(LogEventLevel.Debug, this, "Unable to get room from Device Manager with key: {0}", PropertiesConfig.RoomKey); } - + /// + /// CustomSetConfig method + /// + /// config of the device protected override void CustomSetConfig(DeviceConfig config) { var newPropertiesConfig = JsonConvert.DeserializeObject(config.Properties.ToString()); @@ -367,7 +380,8 @@ void CalculateAndSetAcknowledgeExpirationTimeout(ScheduledEvent schEvent, DateTi /// /// Checks existing event to see if it matches the execution time /// - /// + /// event we are checking + /// time we are checking against /// bool CheckExistingEventTimeForMatch(ScheduledEvent existingEvent, DateTime newTime) { @@ -520,70 +534,70 @@ void FeatureDisableEvent_UserCallBack(ScheduledEvent SchEvent, ScheduledEventCom /// public class RoomOnToDefaultSourceWhenOccupiedConfig { - [JsonProperty("roomKey")] /// /// Gets or sets the RoomKey /// + [JsonProperty("roomKey")] public string RoomKey { get; set; } - [JsonProperty("enableRoomOnWhenOccupied")] /// /// Gets or sets the EnableRoomOnWhenOccupied /// + [JsonProperty("enableRoomOnWhenOccupied")] public bool EnableRoomOnWhenOccupied { get; set; } - [JsonProperty("occupancyStartTime")] /// /// Gets or sets the OccupancyStartTime /// + [JsonProperty("occupancyStartTime")] public string OccupancyStartTime { get; set; } - [JsonProperty("occupancyEndTime")] /// /// Gets or sets the OccupancyEndTime /// + [JsonProperty("occupancyEndTime")] public string OccupancyEndTime { get; set; } - [JsonProperty("enableSunday")] /// /// Gets or sets the EnableSunday /// + [JsonProperty("enableSunday")] public bool EnableSunday { get; set; } - [JsonProperty("enableMonday")] /// /// Gets or sets the EnableMonday /// + [JsonProperty("enableMonday")] public bool EnableMonday { get; set; } - [JsonProperty("enableTuesday")] /// /// Gets or sets the EnableTuesday /// + [JsonProperty("enableWednesday")] public bool EnableTuesday { get; set; } - [JsonProperty("enableWednesday")] /// /// Gets or sets the EnableWednesday /// + [JsonProperty("enableWednesday")] public bool EnableWednesday { get; set; } - [JsonProperty("enableThursday")] /// /// Gets or sets the EnableThursday /// + [JsonProperty("enableThursday")] public bool EnableThursday { get; set; } - [JsonProperty("enableFriday")] /// /// Gets or sets the EnableFriday /// + [JsonProperty("enableFriday")] public bool EnableFriday { get; set; } - [JsonProperty("enableSaturday")] /// /// Gets or sets the EnableSaturday /// + [JsonProperty("enableSaturday")] public bool EnableSaturday { get; set; } } @@ -592,6 +606,9 @@ public class RoomOnToDefaultSourceWhenOccupiedConfig /// public class RoomOnToDefaultSourceWhenOccupiedFactory : EssentialsDeviceFactory { + /// + /// Constructor for RoomOnToDefaultSourceWhenOccupiedFactory + /// public RoomOnToDefaultSourceWhenOccupiedFactory() { TypeNames = new List() { "roomonwhenoccupancydetectedfeature" }; diff --git a/src/PepperDash.Essentials.Core/Room/Combining/RoomCombinationScenario.cs b/src/PepperDash.Essentials.Core/Room/Combining/RoomCombinationScenario.cs index aa0bdcaac..040251ee2 100644 --- a/src/PepperDash.Essentials.Core/Room/Combining/RoomCombinationScenario.cs +++ b/src/PepperDash.Essentials.Core/Room/Combining/RoomCombinationScenario.cs @@ -53,6 +53,9 @@ public bool HideInUi private bool _isActive; + /// + /// Gets or sets IsActive + /// [JsonProperty("isActive")] public bool IsActive { @@ -69,16 +72,20 @@ public bool IsActive } } - [JsonIgnore] /// /// Gets or sets the IsActiveFeedback /// + [JsonIgnore] public BoolFeedback IsActiveFeedback { get; private set; } private List activationActions; private List deactivationActions; + /// + /// Constructor for RoomCombinationScenario + /// + /// config of the room combine scenario public RoomCombinationScenario(RoomCombinationScenarioConfig config) { Key = config.Key; @@ -98,6 +105,10 @@ public RoomCombinationScenario(RoomCombinationScenarioConfig config) IsActiveFeedback = new BoolFeedback(() => _isActive); } + /// + /// Activates the scenario + /// + /// public async Task Activate() { this.LogInformation("Activating Scenario {name} with {activationActionCount} action(s) defined", Name, activationActions.Count); @@ -116,6 +127,10 @@ public async Task Activate() IsActive = true; } + /// + /// Deactivates the scenario + /// + /// public async Task Deactivate() { this.LogInformation("Deactivating Scenario {name} with {deactivationActionCount} action(s) defined", Name, deactivationActions.Count); diff --git a/src/PepperDash.Essentials.Core/Room/Config/EssentialsHuddleVtc1PropertiesConfig.cs b/src/PepperDash.Essentials.Core/Room/Config/EssentialsHuddleVtc1PropertiesConfig.cs index 72286cec7..c41ed3c20 100644 --- a/src/PepperDash.Essentials.Core/Room/Config/EssentialsHuddleVtc1PropertiesConfig.cs +++ b/src/PepperDash.Essentials.Core/Room/Config/EssentialsHuddleVtc1PropertiesConfig.cs @@ -4,16 +4,16 @@ namespace PepperDash.Essentials.Room.Config { - /// - /// Represents a EssentialsHuddleVtc1PropertiesConfig - /// - public class EssentialsHuddleVtc1PropertiesConfig : EssentialsConferenceRoomPropertiesConfig - { - [JsonProperty("defaultDisplayKey")] /// - /// Gets or sets the DefaultDisplayKey + /// Represents a EssentialsHuddleVtc1PropertiesConfig /// - public string DefaultDisplayKey { get; set; } + public class EssentialsHuddleVtc1PropertiesConfig : EssentialsConferenceRoomPropertiesConfig + { + /// + /// Gets or sets the DefaultDisplayKey + /// + [JsonProperty("defaultDisplayKey")] + public string DefaultDisplayKey { get; set; } - } + } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Room/Config/EssentialsNDisplayRoomPropertiesConfig.cs b/src/PepperDash.Essentials.Core/Room/Config/EssentialsNDisplayRoomPropertiesConfig.cs index 0d5670a94..f65864b8c 100644 --- a/src/PepperDash.Essentials.Core/Room/Config/EssentialsNDisplayRoomPropertiesConfig.cs +++ b/src/PepperDash.Essentials.Core/Room/Config/EssentialsNDisplayRoomPropertiesConfig.cs @@ -11,13 +11,27 @@ namespace PepperDash.Essentials.Room.Config /// public class EssentialsNDisplayRoomPropertiesConfig : EssentialsConferenceRoomPropertiesConfig { + /// + /// Gets or sets the DefaultAudioBehavior + /// [JsonProperty("defaultAudioBehavior")] public string DefaultAudioBehavior { get; set; } + + /// + /// Gets or sets the DefaultVideoBehavior + /// [JsonProperty("defaultVideoBehavior")] public string DefaultVideoBehavior { get; set; } + + /// + /// Gets or sets the Displays + /// [JsonProperty("displays")] public Dictionary Displays { get; set; } + /// + /// Constructor + /// public EssentialsNDisplayRoomPropertiesConfig() { Displays = new Dictionary(); @@ -34,6 +48,7 @@ public class DisplayItem : IKeyName /// Gets or sets the Key /// public string Key { get; set; } + /// /// Gets or sets the Name /// diff --git a/src/PepperDash.Essentials.Core/Room/Config/EssentialsPresentationPropertiesConfig.cs b/src/PepperDash.Essentials.Core/Room/Config/EssentialsPresentationPropertiesConfig.cs index 74a8813eb..8bd471979 100644 --- a/src/PepperDash.Essentials.Core/Room/Config/EssentialsPresentationPropertiesConfig.cs +++ b/src/PepperDash.Essentials.Core/Room/Config/EssentialsPresentationPropertiesConfig.cs @@ -11,15 +11,35 @@ public class EssentialsPresentationRoomPropertiesConfig : EssentialsRoomProperti /// Gets or sets the DefaultAudioBehavior /// public string DefaultAudioBehavior { get; set; } + /// /// Gets or sets the DefaultAudioKey /// public string DefaultAudioKey { get; set; } + + /// + /// Gets or sets the DefaultVideoBehavior + /// public string DefaultVideoBehavior { get; set; } + + /// + /// Gets or sets the DisplayKeys + /// public List DisplayKeys { get; set; } + + /// + /// Gets or sets the SourceListKey + /// public string SourceListKey { get; set; } + + /// + /// Gets or sets a value indicating whether the room has a DSP + /// public bool HasDsp { get; set; } + /// + /// Constructor + /// public EssentialsPresentationRoomPropertiesConfig() { DisplayKeys = new List(); diff --git a/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomConfig.cs b/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomConfig.cs index 8de477f37..7de2405ac 100644 --- a/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomConfig.cs +++ b/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomConfig.cs @@ -285,7 +285,6 @@ public class EssentialsAvRoomPropertiesConfig : EssentialsRoomPropertiesConfig /// /// Gets or sets the SourceListKey /// - /// [JsonProperty("sourceListKey")] public string SourceListKey { get; set; } /// diff --git a/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomEmergencyConfig.cs b/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomEmergencyConfig.cs index ff5b0e5a0..349f44b8b 100644 --- a/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomEmergencyConfig.cs +++ b/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomEmergencyConfig.cs @@ -25,11 +25,15 @@ public class EssentialsRoomEmergencyTriggerConfig /// contact,versiport /// public string Type { get; set; } + /// /// Input number if contact /// public int Number { get; set; } + /// + /// TriggerOnClose indicates if the trigger is on close + /// public bool TriggerOnClose { get; set; } } diff --git a/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomScheduledEventsConfig.cs b/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomScheduledEventsConfig.cs index bb1ec94de..d7cb05146 100644 --- a/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomScheduledEventsConfig.cs +++ b/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomScheduledEventsConfig.cs @@ -13,10 +13,10 @@ namespace PepperDash.Essentials.Room.Config /// public class EssentialsRoomScheduledEventsConfig { - [JsonProperty("scheduledEvents")] /// /// Gets or sets the ScheduledEvents /// + [JsonProperty("scheduledEvents")] public List ScheduledEvents; } @@ -25,49 +25,52 @@ public class EssentialsRoomScheduledEventsConfig /// public class ScheduledEventConfig { - [JsonProperty("key")] /// /// Gets or sets the Key /// + [JsonProperty("key")] public string Key; - [JsonProperty("name")] /// /// Gets or sets the Name /// + [JsonProperty("name")] public string Name; + /// + /// Gets or sets the Days + /// [JsonProperty("days")] public ScheduledEventCommon.eWeekDays Days; - [JsonProperty("time")] /// /// Gets or sets the Time /// + [JsonProperty("time")] public string Time; - [JsonProperty("actions")] /// /// Gets or sets the Actions /// + [JsonProperty("actions")] public List Actions; - [JsonProperty("persistent")] /// /// Gets or sets the Persistent /// + [JsonProperty("persistent")] public bool Persistent; - [JsonProperty("acknowledgeable")] /// /// Gets or sets the Acknowledgeable /// + [JsonProperty("acknowledgeable")] public bool Acknowledgeable; - [JsonProperty("enable")] /// /// Gets or sets the Enable /// + [JsonProperty("enable")] public bool Enable; } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Room/Config/EssentialsTechRoomConfig.cs b/src/PepperDash.Essentials.Core/Room/Config/EssentialsTechRoomConfig.cs index bca777256..dfc3d7a64 100644 --- a/src/PepperDash.Essentials.Core/Room/Config/EssentialsTechRoomConfig.cs +++ b/src/PepperDash.Essentials.Core/Room/Config/EssentialsTechRoomConfig.cs @@ -14,9 +14,6 @@ public class EssentialsTechRoomConfig /// The key of the dummy device used to enable routing /// [JsonProperty("dummySourceKey")] - /// - /// Gets or sets the DummySourceKey - /// public string DummySourceKey { get; set; } /// @@ -26,7 +23,7 @@ public class EssentialsTechRoomConfig public List Displays { get; set; } /// - /// The keys of the tuners assinged to this room + /// The keys of the tuners assigned to this room /// [JsonProperty("tuners")] public List Tuners { get; set; } @@ -49,19 +46,16 @@ public class EssentialsTechRoomConfig [JsonProperty("presetsFileName")] public string PresetsFileName { get; set; } - [JsonProperty("scheduledEvents")] /// /// Gets or sets the ScheduledEvents /// + [JsonProperty("scheduledEvents")] public List ScheduledEvents { get; set; } /// /// Indicates that the room is the primary when true /// [JsonProperty("isPrimary")] - /// - /// Gets or sets the IsPrimary - /// public bool IsPrimary { get; set; } /// @@ -70,21 +64,21 @@ public class EssentialsTechRoomConfig [JsonProperty("mirroredTuners")] public Dictionary MirroredTuners { get; set; } - [JsonProperty("helpMessage")] /// /// Gets or sets the HelpMessage /// + [JsonProperty("helpMessage")] public string HelpMessage { get; set; } - /// - /// Indicates the room - /// - [JsonProperty("isTvPresetsProvider")] /// /// Gets or sets the IsTvPresetsProvider /// + [JsonProperty("isTvPresetsProvider")] public bool IsTvPresetsProvider; + /// + /// Constructor + /// public EssentialsTechRoomConfig() { Displays = new List(); diff --git a/src/PepperDash.Essentials.Core/Room/Config/EssentialsVolumeLevelConfig.cs b/src/PepperDash.Essentials.Core/Room/Config/EssentialsVolumeLevelConfig.cs index 4e3d502f9..51172130a 100644 --- a/src/PepperDash.Essentials.Core/Room/Config/EssentialsVolumeLevelConfig.cs +++ b/src/PepperDash.Essentials.Core/Room/Config/EssentialsVolumeLevelConfig.cs @@ -12,8 +12,20 @@ public class EssentialsRoomVolumesConfig /// Gets or sets the Master /// public EssentialsVolumeLevelConfig Master { get; set; } + + /// + /// Gets or sets the Program + /// public EssentialsVolumeLevelConfig Program { get; set; } + + /// + /// Gets or sets the AudioCallRx + /// public EssentialsVolumeLevelConfig AudioCallRx { get; set; } + + /// + /// Gets or sets the AudioCallTx + /// public EssentialsVolumeLevelConfig AudioCallTx { get; set; } } diff --git a/src/PepperDash.Essentials.Core/Room/Config/SimplRoomPropertiesConfig.cs b/src/PepperDash.Essentials.Core/Room/Config/SimplRoomPropertiesConfig.cs index b37335b97..59628aed8 100644 --- a/src/PepperDash.Essentials.Core/Room/Config/SimplRoomPropertiesConfig.cs +++ b/src/PepperDash.Essentials.Core/Room/Config/SimplRoomPropertiesConfig.cs @@ -8,42 +8,46 @@ namespace PepperDash.Essentials.Room.Config /// public class SimplRoomPropertiesConfig : EssentialsHuddleVtc1PropertiesConfig { + /// + /// Gets or sets the RoomPhoneNumber + /// [JsonProperty("roomPhoneNumber")] - /// - /// Gets or sets the RoomPhoneNumber - /// public string RoomPhoneNumber { get; set; } + + /// + /// Gets or sets the RoomURI + /// [JsonProperty("roomURI")] - /// - /// Gets or sets the RoomURI - /// public string RoomURI { get; set; } + + /// + /// Gets or sets the SpeedDials + /// [JsonProperty("speedDials")] - /// - /// Gets or sets the SpeedDials - /// public List SpeedDials { get; set; } + + /// + /// Gets or sets the VolumeSliderNames + /// [JsonProperty("volumeSliderNames")] - /// - /// Gets or sets the VolumeSliderNames - /// public List VolumeSliderNames { get; set; } } - /// - /// Represents a SimplSpeedDial - /// + /// + /// Represents a SimplSpeedDial + /// public class SimplSpeedDial { + /// + /// Gets or sets the Name + /// [JsonProperty("name")] - /// - /// Gets or sets the Name - /// public string Name { get; set; } + + /// + /// Gets or sets the Number + /// [JsonProperty("number")] - /// - /// Gets or sets the Number - /// public string Number { get; set; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs b/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs index 3a3548131..6582bac3a 100644 --- a/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs +++ b/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs @@ -9,6 +9,9 @@ namespace PepperDash.Essentials.Core /// public class EssentialsRoomEmergencyContactClosure : EssentialsRoomEmergencyBase, IEssentialsRoomEmergency { + /// + /// Event fired when emergency state changes + /// public event EventHandler EmergencyStateChange; IEssentialsRoom Room; @@ -20,6 +23,12 @@ public class EssentialsRoomEmergencyContactClosure : EssentialsRoomEmergencyBase /// public bool InEmergency { get; private set; } + /// + /// Constructor for EssentialsRoomEmergencyContactClosure + /// + /// device key + /// emergency device config + /// the room associated with this emergency contact closure public EssentialsRoomEmergencyContactClosure(string key, EssentialsRoomEmergencyConfig config, IEssentialsRoom room) : base(key) { @@ -95,8 +104,14 @@ public void RunEmergencyBehavior() /// public interface IEssentialsRoomEmergency { + /// + /// Event fired when emergency state changes + /// event EventHandler EmergencyStateChange; + /// + /// Gets or sets the InEmergency + /// bool InEmergency { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Room/EssentialsRoomBase.cs b/src/PepperDash.Essentials.Core/Room/EssentialsRoomBase.cs index 38e4456ea..13ba9d665 100644 --- a/src/PepperDash.Essentials.Core/Room/EssentialsRoomBase.cs +++ b/src/PepperDash.Essentials.Core/Room/EssentialsRoomBase.cs @@ -29,7 +29,14 @@ public abstract class EssentialsRoomBase : ReconfigurableDevice, IEssentialsRoom /// public event EventHandler RoomOccupancyIsSet; + /// + /// Gets or sets the IsWarmingUpFeedback + /// public BoolFeedback IsWarmingUpFeedback { get; private set; } + + /// + /// Gets or sets the IsCoolingDownFeedback + /// public BoolFeedback IsCoolingDownFeedback { get; private set; } /// @@ -37,10 +44,19 @@ public abstract class EssentialsRoomBase : ReconfigurableDevice, IEssentialsRoom /// public IOccupancyStatusProvider RoomOccupancy { get; protected set; } + /// + /// Gets or sets the OccupancyStatusProviderIsRemote + /// public bool OccupancyStatusProviderIsRemote { get; private set; } + /// + /// Gets or sets the EnvironmentalControlDevices + /// public List EnvironmentalControlDevices { get; protected set; } + /// + /// Indicates if the room has any environmental control devices + /// public bool HasEnvironmentalControlDevices { get @@ -49,7 +65,14 @@ public bool HasEnvironmentalControlDevices } } + /// + /// Gets or sets the IsWarmingFeedbackFunc + /// protected abstract Func IsWarmingFeedbackFunc { get; } + + /// + /// Gets or sets the IsCoolingFeedbackFunc + /// protected abstract Func IsCoolingFeedbackFunc { get; } /// @@ -62,6 +85,9 @@ public bool HasEnvironmentalControlDevices /// public IMobileControlRoomMessenger MobileControlRoomBridge { get; private set; } + /// + /// The config name of the default source list + /// protected const string _defaultListKey = "default"; /// @@ -69,6 +95,10 @@ public bool HasEnvironmentalControlDevices /// /// private string _sourceListKey; + + /// + /// Gets or sets the SourceListKey + /// public string SourceListKey { get { @@ -91,6 +121,10 @@ protected set } private string _destinationListKey; + + /// + /// Gets or sets the DestinationListKey + /// public string DestinationListKey { get @@ -114,6 +148,10 @@ protected set } private string _audioControlPointListKey; + + /// + /// Gets or sets the AudioControlPointListKey + /// public string AudioControlPointListKey { get @@ -137,6 +175,10 @@ protected set } private string _cameraListKey; + + /// + /// Gets or sets the CameraListKey + /// public string CameraListKey { get @@ -165,16 +207,33 @@ protected set public SecondsCountdownTimer ShutdownPromptTimer { get; private set; } /// - /// + /// Gets or sets the ShutdownPromptSeconds /// public int ShutdownPromptSeconds { get; set; } + + /// + /// Gets or sets the ShutdownVacancySeconds + /// public int ShutdownVacancySeconds { get; set; } + + /// + /// Gets or sets the ShutdownType + /// public eShutdownType ShutdownType { get; private set; } + /// + /// Gets or sets the Emergency + /// public EssentialsRoomEmergencyBase Emergency { get; set; } + /// + /// Gets or sets the MicrophonePrivacy + /// public Core.Privacy.MicrophonePrivacyController MicrophonePrivacy { get; set; } + /// + /// Gets or sets the LogoUrlLightBkgnd + /// public string LogoUrlLightBkgnd { get; set; } /// @@ -182,6 +241,9 @@ protected set /// public string LogoUrlDarkBkgnd { get; set; } + /// + /// Gets or sets the RoomVacancyShutdownTimer + /// protected SecondsCountdownTimer RoomVacancyShutdownTimer { get; private set; } /// @@ -204,6 +266,9 @@ protected set /// protected abstract Func OnFeedbackFunc { get; } + /// + /// Gets or sets the SavedVolumeLevels + /// protected Dictionary SavedVolumeLevels = new Dictionary(); /// @@ -211,7 +276,10 @@ protected set /// public bool ZeroVolumeWhenSwtichingVolumeDevices { get; private set; } - + /// + /// Constructor for EssentialsRoomBase + /// + /// config of the device public EssentialsRoomBase(DeviceConfig config) : base(config) { @@ -283,6 +351,10 @@ protected void SetSourceListKey(string sourceListKey) } } + /// + /// Sets the DestinationListKey property to the passed in value or the default if no value passed in + /// + /// key of the destination list object protected void SetDestinationListKey(string destinationListKey) { if (!string.IsNullOrEmpty(destinationListKey)) @@ -396,6 +468,7 @@ public void Shutdown() /// Sets the object to be used as the IOccupancyStatusProvider for the room. Can be an Occupancy Aggregator or a specific device /// /// + /// public void SetRoomOccupancy(IOccupancyStatusProvider statusProvider, int timeoutMinutes) { if (statusProvider == null) @@ -479,16 +552,45 @@ protected virtual bool AllowVacancyTimerToStart() /// public enum eShutdownType { + /// + /// No shutdown in progress + /// None = 0, + + /// + /// Manual shutdown initiated + /// External, + + /// + /// Vacancy based shutdown + /// Manual, + + /// + /// Shutdown due to room vacancy + /// Vacancy } + /// + /// Enumeration of eVacancyMode values + /// public enum eVacancyMode { + /// + /// No vacancy detected + /// None = 0, + + /// + /// InInitialVacancy - countdown to warning + /// InInitialVacancy, + + /// + /// InShutdownWarning - countdown to shutdown + /// InShutdownWarning } @@ -497,15 +599,36 @@ public enum eVacancyMode /// public enum eWarmingCoolingMode { + /// + /// None + /// None, + + /// + /// Warming + /// Warming, + + /// + /// Cooling + /// Cooling } + /// + /// Base class for room emergency implementations + /// public abstract class EssentialsRoomEmergencyBase : IKeyed { + /// + /// Key of the room + /// public string Key { get; private set; } + /// + /// Constructor for EssentialsRoomEmergencyBase + /// + /// key of the room public EssentialsRoomEmergencyBase(string key) { Key = key; diff --git a/src/PepperDash.Essentials.Core/Room/IEssentialsRoom.cs b/src/PepperDash.Essentials.Core/Room/IEssentialsRoom.cs index d452c0b93..3ebe28c43 100644 --- a/src/PepperDash.Essentials.Core/Room/IEssentialsRoom.cs +++ b/src/PepperDash.Essentials.Core/Room/IEssentialsRoom.cs @@ -17,34 +17,95 @@ namespace PepperDash.Essentials.Core /// public interface IEssentialsRoom : IKeyName, IReconfigurableDevice, IRunDefaultPresentRoute, IEnvironmentalControls { + /// + /// Gets the PowerFeedback + /// BoolFeedback OnFeedback { get; } + /// + /// Gets the IsOccupiedFeedback + /// BoolFeedback IsWarmingUpFeedback { get; } + + /// + /// Gets the IsCoolingDownFeedback + /// BoolFeedback IsCoolingDownFeedback { get; } + /// + /// Gets a value indicating whether mobile control is enabled for this room + /// bool IsMobileControlEnabled { get; } + + /// + /// Gets the MobileControlRoomBridge + /// IMobileControlRoomMessenger MobileControlRoomBridge { get; } + /// + /// Gets the SourceListKey + /// string SourceListKey { get; } + /// + /// Gets the DestinationListKey + /// string DestinationListKey { get; } + /// + /// Gets the AudioControlPointListKey + /// string AudioControlPointListKey { get; } + /// + /// Gets the CameraListKey + /// string CameraListKey { get; } + /// + /// Gets the ShutdownPromptTimer + /// SecondsCountdownTimer ShutdownPromptTimer { get; } + + /// + /// Gets the ShutdownVacancyTimer + /// int ShutdownPromptSeconds { get; } + + /// + /// Gets the ShutdownVacancySeconds + /// int ShutdownVacancySeconds { get; } + + /// + /// Gets the ShutdownType + /// eShutdownType ShutdownType { get; } + /// + /// Gets the LogoUrlLightBkgnd + /// string LogoUrlLightBkgnd { get; } + + /// + /// Gets the LogoUrlDarkBkgnd + /// string LogoUrlDarkBkgnd { get; } + /// + /// Starts the shutdown process + /// + /// type of shutdown event void StartShutdown(eShutdownType type); + /// + /// Shuts down the room + /// void Shutdown(); + /// + /// Powers on the room to either the default source or the last source used + /// void PowerOnToDefaultOrLastSource(); } diff --git a/src/PepperDash.Essentials.Core/Room/IRoomEventSchedule.cs b/src/PepperDash.Essentials.Core/Room/IRoomEventSchedule.cs index 0ddb61fc6..a42ea505c 100644 --- a/src/PepperDash.Essentials.Core/Room/IRoomEventSchedule.cs +++ b/src/PepperDash.Essentials.Core/Room/IRoomEventSchedule.cs @@ -9,10 +9,21 @@ namespace PepperDash.Essentials.Core /// public interface IRoomEventSchedule { + /// + /// Adds or updates a scheduled event + /// + /// void AddOrUpdateScheduledEvent(ScheduledEventConfig eventConfig); + /// + /// Removes a scheduled event by its key + /// + /// List GetScheduledEvents(); + /// + /// Removes a scheduled event by its key + /// event EventHandler ScheduledEventsChanged; } diff --git a/src/PepperDash.Essentials.Core/Room/Interfaces.cs b/src/PepperDash.Essentials.Core/Room/Interfaces.cs index bffb80a3f..0d2f0850f 100644 --- a/src/PepperDash.Essentials.Core/Room/Interfaces.cs +++ b/src/PepperDash.Essentials.Core/Room/Interfaces.cs @@ -11,6 +11,9 @@ namespace PepperDash.Essentials.Core /// public interface IHasInCallFeedback { + /// + /// Gets the InCallFeedback + /// BoolFeedback InCallFeedback { get; } } @@ -19,6 +22,9 @@ public interface IHasInCallFeedback /// public interface IHasDefaultDisplay { + /// + /// Gets the DefaultDisplay + /// IRoutingSink DefaultDisplay { get; } } @@ -28,6 +34,9 @@ public interface IHasDefaultDisplay [Obsolete("Will be removed in a future version")] public interface IHasMultipleDisplays { + /// + /// Gets the Displays dictionary + /// Dictionary Displays { get; } } @@ -36,8 +45,19 @@ public interface IHasMultipleDisplays /// public interface IRunRouteAction { + /// + /// Runs a route action + /// + /// + /// void RunRouteAction(string routeKey, string sourceListKey); + /// + /// Runs a route action with a success callback + /// + /// + /// + /// void RunRouteAction(string routeKey, string sourceListKey, Action successCallback); } @@ -46,6 +66,12 @@ public interface IRunRouteAction /// public interface IRunDirectRouteAction { + /// + /// Runs a direct route + /// + /// + /// + /// void RunDirectRoute(string sourceKey, string destinationKey, eRoutingSignalType type = eRoutingSignalType.AudioVideo); } @@ -54,8 +80,14 @@ public interface IRunDirectRouteAction /// public interface IHasMatrixRouting { + /// + /// Gets the MatrixRoutingDeviceKey + /// string MatrixRoutingDeviceKey { get; } + /// + /// Gets the EndpointKeys + /// List EndpointKeys { get; } } @@ -64,6 +96,9 @@ public interface IHasMatrixRouting /// public interface IHasRoutingEndpoints { + /// + /// Gets the EndpointKeys + /// List EndpointKeys { get; } } @@ -72,10 +107,21 @@ public interface IHasRoutingEndpoints /// public interface IShutdownPromptTimer { + /// + /// Gets the ShutdownPromptTimer + /// SecondsCountdownTimer ShutdownPromptTimer { get; } + /// + /// Gets the ShutdownPromptSeconds + /// + /// number of seconds to set void SetShutdownPromptSeconds(int seconds); + /// + /// Starts the shutdown process + /// + /// type of shutdown event void StartShutdown(eShutdownType type); } @@ -84,14 +130,32 @@ public interface IShutdownPromptTimer /// public interface ITechPassword { + /// + /// Event fired when tech password validation result is available + /// event EventHandler TechPasswordValidateResult; + /// + /// Event fired when tech password is changed + /// event EventHandler TechPasswordChanged; + /// + /// Gets the TechPasswordLength + /// int TechPasswordLength { get; } + /// + /// Validates the tech password + /// + /// The tech password to validate void ValidateTechPassword(string password); + /// + /// Sets the tech password + /// + /// The current tech password + /// The new tech password to set void SetTechPassword(string oldPassword, string newPassword); } @@ -105,6 +169,10 @@ public class TechPasswordEventArgs : EventArgs /// public bool IsValid { get; private set; } + /// + /// Constructor for TechPasswordEventArgs + /// + /// public TechPasswordEventArgs(bool isValid) { IsValid = isValid; @@ -116,6 +184,10 @@ public TechPasswordEventArgs(bool isValid) /// public interface IRunDefaultPresentRoute { + /// + /// Runs the default present route + /// + /// bool RunDefaultPresentRoute(); } @@ -124,6 +196,10 @@ public interface IRunDefaultPresentRoute /// public interface IRunDefaultCallRoute : IRunDefaultPresentRoute { + /// + /// Runs the default call route + /// + /// bool RunDefaultCallRoute(); } @@ -132,24 +208,59 @@ public interface IRunDefaultCallRoute : IRunDefaultPresentRoute /// public interface IEnvironmentalControls { + /// + /// Gets the EnvironmentalControlDevices + /// List EnvironmentalControlDevices { get; } + /// + /// Gets a value indicating whether the room has environmental control devices + /// bool HasEnvironmentalControlDevices { get; } } + /// + /// Defines the contract for IRoomOccupancy + /// public interface IRoomOccupancy : IKeyed { + /// + /// Gets the RoomOccupancy + /// IOccupancyStatusProvider RoomOccupancy { get; } + + /// + /// Gets a value indicating whether the OccupancyStatusProviderIsRemote + /// bool OccupancyStatusProviderIsRemote { get; } + /// + /// Sets the room occupancy + /// + /// + /// void SetRoomOccupancy(IOccupancyStatusProvider statusProvider, int timeoutMinutes); + /// + /// Called when the room has been vacated for the timeout period + /// + /// void RoomVacatedForTimeoutPeriod(object o); + /// + /// Starts the room vacancy timer + /// + /// vacancy mode void StartRoomVacancyTimer(eVacancyMode mode); + /// + /// Gets the VacancyMode + /// eVacancyMode VacancyMode { get; } + /// + /// Event fired when room occupancy is set + /// event EventHandler RoomOccupancyIsSet; } @@ -158,6 +269,9 @@ public interface IRoomOccupancy : IKeyed /// public interface IEmergency { + /// + /// Gets the Emergency + /// EssentialsRoomEmergencyBase Emergency { get; } } @@ -166,6 +280,9 @@ public interface IEmergency /// public interface IMicrophonePrivacy { + /// + /// Gets the MicrophonePrivacy + /// Core.Privacy.MicrophonePrivacyController MicrophonePrivacy { get; } } @@ -174,6 +291,9 @@ public interface IMicrophonePrivacy /// public interface IHasAccessoryDevices : IKeyName { + /// + /// Gets the AccessoryDeviceKeys + /// List AccessoryDeviceKeys { get; } } @@ -182,6 +302,9 @@ public interface IHasAccessoryDevices : IKeyName /// public interface IHasCiscoNavigatorTouchpanel { + /// + /// Gets the CiscoNavigatorTouchpanelKey + /// string CiscoNavigatorTouchpanelKey { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Room/Room.cs b/src/PepperDash.Essentials.Core/Room/Room.cs index 5ff03d26b..d9c51c9d0 100644 --- a/src/PepperDash.Essentials.Core/Room/Room.cs +++ b/src/PepperDash.Essentials.Core/Room/Room.cs @@ -12,33 +12,54 @@ namespace PepperDash.Essentials.Core { //*************************************************************************************************** + /// + /// Abstract base class for Room + /// public abstract class Room : Device, IHasFeedback { + /// + /// Gets or sets the RoomIsOnFeedback + /// public abstract BoolFeedback RoomIsOnFeedback { get; protected set; } + + /// + /// Gets or sets the IsCoolingDownFeedback + /// public abstract BoolFeedback IsCoolingDownFeedback { get; protected set; } + + /// + /// Gets or sets the IsWarmingUpFeedback + /// public abstract BoolFeedback IsWarmingUpFeedback { get; protected set; } // In concrete classes, these should be computed from the relevant devices - /// - /// Gets or sets the CooldownTime - /// - /// + /// + /// Gets or sets the CooldownTime + /// + /// public virtual uint CooldownTime { get { return 10000; } } - /// - /// Gets or sets the WarmupTime - /// - /// + + /// + /// Gets or sets the WarmupTime + /// + /// public virtual uint WarmupTime { get { return 5000; } } - /// - /// Gets or sets the Description - /// + /// + /// Gets or sets the Description + /// public string Description { get; set; } - /// - /// Gets or sets the HelpMessage - /// + + /// + /// Gets or sets the HelpMessage + /// public string HelpMessage { get; set; } + /// + /// Room Constructor + /// + /// room key + /// room name public Room(string key, string name) : base(key, name) { @@ -59,6 +80,9 @@ public virtual void RoomOff() { } #region IDeviceWithOutputs Members + /// + /// Gets the Feedbacks + /// public virtual FeedbackCollection Feedbacks { get diff --git a/src/PepperDash.Essentials.Core/Room/iOccupancyStatusProvider.cs b/src/PepperDash.Essentials.Core/Room/iOccupancyStatusProvider.cs index 3ac3c6060..8ea858eef 100644 --- a/src/PepperDash.Essentials.Core/Room/iOccupancyStatusProvider.cs +++ b/src/PepperDash.Essentials.Core/Room/iOccupancyStatusProvider.cs @@ -13,6 +13,9 @@ namespace PepperDash.Essentials.Core /// public interface IOccupancyStatusProvider { + /// + /// Gets the RoomIsOccupiedFeedback + /// BoolFeedback RoomIsOccupiedFeedback { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Routing/Extensions.cs b/src/PepperDash.Essentials.Core/Routing/Extensions.cs index 5d09176f8..3797f5e20 100644 --- a/src/PepperDash.Essentials.Core/Routing/Extensions.cs +++ b/src/PepperDash.Essentials.Core/Routing/Extensions.cs @@ -326,6 +326,8 @@ private static void ReleaseRouteInternal(IRoutingInputs destination, string inpu /// This recursive function should not be called with AudioVideo /// Just an informational counter /// The RouteDescriptor being populated as the route is discovered + /// The RoutingOutputPort to use for the route + /// The specific source output port to use (optional) /// true if source is hit private static bool GetRouteToSource(this IRoutingInputs destination, IRoutingOutputs source, RoutingOutputPort outputPortToUse, List alreadyCheckedDevices, diff --git a/src/PepperDash.Essentials.Core/Routing/IInputSync.cs b/src/PepperDash.Essentials.Core/Routing/IInputSync.cs index a4bc25ba6..50f2b5fb5 100644 --- a/src/PepperDash.Essentials.Core/Routing/IInputSync.cs +++ b/src/PepperDash.Essentials.Core/Routing/IInputSync.cs @@ -12,8 +12,14 @@ namespace PepperDash.Essentials.Core.Routing /// public interface IVideoSync : IKeyed { + /// + /// Gets whether or not video sync is detected + /// bool VideoSyncDetected { get; } + /// + /// Event raised when video sync changes + /// event EventHandler VideoSyncChanged; } } diff --git a/src/PepperDash.Essentials.Core/Routing/IMatrixRouting.cs b/src/PepperDash.Essentials.Core/Routing/IMatrixRouting.cs index a262e3df7..d12e704e3 100644 --- a/src/PepperDash.Essentials.Core/Routing/IMatrixRouting.cs +++ b/src/PepperDash.Essentials.Core/Routing/IMatrixRouting.cs @@ -7,9 +7,22 @@ namespace PepperDash.Essentials.Core.Routing /// public interface IMatrixRouting { + /// + /// Gets the input slots + /// Dictionary InputSlots { get; } + + /// + /// Gets the output slots + /// Dictionary OutputSlots { get; } + /// + /// Routes the specified input slot to the specified output slot for the specified signal type + /// + /// key of the input slot + /// key of the output slot + /// signal type void Route(string inputSlotKey, string outputSlotKey, eRoutingSignalType type); } } diff --git a/src/PepperDash.Essentials.Core/Routing/IRmcRouting.cs b/src/PepperDash.Essentials.Core/Routing/IRmcRouting.cs index ec5fe2c4d..f28373503 100644 --- a/src/PepperDash.Essentials.Core/Routing/IRmcRouting.cs +++ b/src/PepperDash.Essentials.Core/Routing/IRmcRouting.cs @@ -5,6 +5,9 @@ /// public interface IRmcRouting : IRoutingNumeric { + /// + /// Feedback for the current Audio/Video source as a number + /// IntFeedback AudioVideoSourceNumericFeedback { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Routing/IRouting.cs b/src/PepperDash.Essentials.Core/Routing/IRouting.cs index e3231858d..64bcd7a52 100644 --- a/src/PepperDash.Essentials.Core/Routing/IRouting.cs +++ b/src/PepperDash.Essentials.Core/Routing/IRouting.cs @@ -11,6 +11,12 @@ namespace PepperDash.Essentials.Core /// public interface IRouting : IRoutingInputsOutputs { + /// + /// Executes a switch on the device + /// + /// input selector + /// output selector + /// type of signal void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType); } diff --git a/src/PepperDash.Essentials.Core/Routing/IRoutingFeedback.cs b/src/PepperDash.Essentials.Core/Routing/IRoutingFeedback.cs index a76f571b9..253ab8ee2 100644 --- a/src/PepperDash.Essentials.Core/Routing/IRoutingFeedback.cs +++ b/src/PepperDash.Essentials.Core/Routing/IRoutingFeedback.cs @@ -10,6 +10,9 @@ namespace PepperDash.Essentials.Core /// public interface IRoutingFeedback : IKeyName { + /// + /// Event raised when a numeric switch changes + /// event EventHandler NumericSwitchChange; //void OnSwitchChange(RoutingNumericEventArgs e); } diff --git a/src/PepperDash.Essentials.Core/Routing/IRoutingHasVideoInputSyncFeedbacks.cs b/src/PepperDash.Essentials.Core/Routing/IRoutingHasVideoInputSyncFeedbacks.cs index 9d344ce90..a2b4c54e4 100644 --- a/src/PepperDash.Essentials.Core/Routing/IRoutingHasVideoInputSyncFeedbacks.cs +++ b/src/PepperDash.Essentials.Core/Routing/IRoutingHasVideoInputSyncFeedbacks.cs @@ -17,6 +17,9 @@ namespace PepperDash.Essentials.Core /// public interface IRoutingHasVideoInputSyncFeedbacks { + /// + /// Video Input Sync Feedbacks + /// FeedbackCollection VideoInputSyncFeedbacks { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Routing/IRoutingInputSlot.cs b/src/PepperDash.Essentials.Core/Routing/IRoutingInputSlot.cs index 94eddd264..f620f8bfb 100644 --- a/src/PepperDash.Essentials.Core/Routing/IRoutingInputSlot.cs +++ b/src/PepperDash.Essentials.Core/Routing/IRoutingInputSlot.cs @@ -5,6 +5,9 @@ /// public interface IRoutingInputSlot: IRoutingSlot, IOnline, IVideoSync { + /// + /// Gets the Tx device key + /// string TxDeviceKey { get; } } } diff --git a/src/PepperDash.Essentials.Core/Routing/IRoutingInputs.cs b/src/PepperDash.Essentials.Core/Routing/IRoutingInputs.cs index 102cf5f94..9543bb549 100644 --- a/src/PepperDash.Essentials.Core/Routing/IRoutingInputs.cs +++ b/src/PepperDash.Essentials.Core/Routing/IRoutingInputs.cs @@ -8,6 +8,9 @@ namespace PepperDash.Essentials.Core /// public interface IRoutingInputs : IKeyed { + /// + /// Collection of Input Ports + /// RoutingPortCollection InputPorts { get; } } diff --git a/src/PepperDash.Essentials.Core/Routing/IRoutingNumeric.cs b/src/PepperDash.Essentials.Core/Routing/IRoutingNumeric.cs index ff7e6cd7f..cd91daa04 100644 --- a/src/PepperDash.Essentials.Core/Routing/IRoutingNumeric.cs +++ b/src/PepperDash.Essentials.Core/Routing/IRoutingNumeric.cs @@ -5,6 +5,12 @@ /// public interface IRoutingNumeric : IRouting { + /// + /// Executes a numeric switch on the device + /// + /// input selector + /// output selector + /// type of signal void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type); } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Routing/IRoutingOutputSlot.cs b/src/PepperDash.Essentials.Core/Routing/IRoutingOutputSlot.cs index 0d590684e..266e0724e 100644 --- a/src/PepperDash.Essentials.Core/Routing/IRoutingOutputSlot.cs +++ b/src/PepperDash.Essentials.Core/Routing/IRoutingOutputSlot.cs @@ -8,10 +8,19 @@ namespace PepperDash.Essentials.Core.Routing /// public interface IRoutingOutputSlot : IRoutingSlot { + /// + /// Event raised when output slot changes + /// event EventHandler OutputSlotChanged; + /// + /// Gets the Rx device key + /// string RxDeviceKey { get; } + /// + /// Gets the current routes + /// Dictionary CurrentRoutes { get; } } } diff --git a/src/PepperDash.Essentials.Core/Routing/IRoutingOutputs.cs b/src/PepperDash.Essentials.Core/Routing/IRoutingOutputs.cs index dbfc29163..c26e7b708 100644 --- a/src/PepperDash.Essentials.Core/Routing/IRoutingOutputs.cs +++ b/src/PepperDash.Essentials.Core/Routing/IRoutingOutputs.cs @@ -9,6 +9,9 @@ namespace PepperDash.Essentials.Core /// public interface IRoutingOutputs : IKeyed { + /// + /// Collection of Output Ports + /// RoutingPortCollection OutputPorts { get; } } diff --git a/src/PepperDash.Essentials.Core/Routing/IRoutingSinkWithSwitching.cs b/src/PepperDash.Essentials.Core/Routing/IRoutingSinkWithSwitching.cs index 773e036e9..5c2029145 100644 --- a/src/PepperDash.Essentials.Core/Routing/IRoutingSinkWithSwitching.cs +++ b/src/PepperDash.Essentials.Core/Routing/IRoutingSinkWithSwitching.cs @@ -12,6 +12,10 @@ namespace PepperDash.Essentials.Core /// public interface IRoutingSinkWithSwitching : IRoutingSink { + /// + /// Executes a switch on the device + /// + /// input selector void ExecuteSwitch(object inputSelector); } @@ -20,6 +24,9 @@ public interface IRoutingSinkWithSwitching : IRoutingSink /// public interface IRoutingSinkWithSwitchingWithInputPort:IRoutingSinkWithSwitching, IRoutingSinkWithInputPort { + /// + /// Event raised when the input changes + /// event InputChangedEventHandler InputChanged; } diff --git a/src/PepperDash.Essentials.Core/Routing/IRoutingSlot.cs b/src/PepperDash.Essentials.Core/Routing/IRoutingSlot.cs index b69228623..2e8c544f8 100644 --- a/src/PepperDash.Essentials.Core/Routing/IRoutingSlot.cs +++ b/src/PepperDash.Essentials.Core/Routing/IRoutingSlot.cs @@ -12,8 +12,14 @@ namespace PepperDash.Essentials.Core.Routing /// public interface IRoutingSlot:IKeyName { + /// + /// Gets the slot number + /// int SlotNumber { get; } + /// + /// Gets the supported signal types + /// eRoutingSignalType SupportedSignalTypes { get; } } } diff --git a/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs b/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs index f389f7194..483ea22ac 100644 --- a/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs +++ b/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs @@ -11,6 +11,9 @@ namespace PepperDash.Essentials.Core /// public class RouteDescriptorCollection { + /// + /// DefaultCollection static property + /// public static RouteDescriptorCollection DefaultCollection { get @@ -57,6 +60,12 @@ public RouteDescriptor GetRouteDescriptorForDestination(IRoutingInputs destinati return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination); } + /// + /// Gets the RouteDescriptor for a destination and input port key. Returns null if no matching RouteDescriptor exists. + /// + /// + /// + /// public RouteDescriptor GetRouteDescriptorForDestinationAndInputPort(IRoutingInputs destination, string inputPortKey) { Debug.LogMessage(LogEventLevel.Information, "Getting route descriptor for '{destination}':'{inputPortKey}'", destination?.Key ?? null, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); diff --git a/src/PepperDash.Essentials.Core/Routing/RoutingFeedbackManager.cs b/src/PepperDash.Essentials.Core/Routing/RoutingFeedbackManager.cs index c51cec581..e37d2d578 100644 --- a/src/PepperDash.Essentials.Core/Routing/RoutingFeedbackManager.cs +++ b/src/PepperDash.Essentials.Core/Routing/RoutingFeedbackManager.cs @@ -1,7 +1,7 @@ -using PepperDash.Core; -using PepperDash.Essentials.Core.Config; -using System; +using System; using System.Linq; +using PepperDash.Core; +using PepperDash.Essentials.Core.Config; namespace PepperDash.Essentials.Core.Routing { @@ -9,20 +9,20 @@ namespace PepperDash.Essentials.Core.Routing /// Manages routing feedback by subscribing to route changes on midpoint and sink devices, /// tracing the route back to the original source, and updating the CurrentSourceInfo on sink devices. /// - public class RoutingFeedbackManager:EssentialsDevice + public class RoutingFeedbackManager : EssentialsDevice { /// /// Initializes a new instance of the class. /// /// The unique key for this manager device. /// The name of this manager device. - public RoutingFeedbackManager(string key, string name): base(key, name) - { + public RoutingFeedbackManager(string key, string name) + : base(key, name) + { AddPreActivationAction(SubscribeForMidpointFeedback); AddPreActivationAction(SubscribeForSinkFeedback); } - /// /// Subscribes to the RouteChanged event on all devices implementing . /// @@ -41,12 +41,13 @@ private void SubscribeForMidpointFeedback() /// private void SubscribeForSinkFeedback() { - var sinkDevices = DeviceManager.AllDevices.OfType(); + var sinkDevices = + DeviceManager.AllDevices.OfType(); - foreach (var device in sinkDevices) - { - device.InputChanged += HandleSinkUpdate; - } + foreach (var device in sinkDevices) + { + device.InputChanged += HandleSinkUpdate; + } } /// @@ -55,11 +56,15 @@ private void SubscribeForSinkFeedback() /// /// The midpoint device that reported a route change. /// The descriptor of the new route. - private void HandleMidpointUpdate(IRoutingWithFeedback midpoint, RouteSwitchDescriptor newRoute) + private void HandleMidpointUpdate( + IRoutingWithFeedback midpoint, + RouteSwitchDescriptor newRoute + ) { try { - var devices = DeviceManager.AllDevices.OfType(); + var devices = + DeviceManager.AllDevices.OfType(); foreach (var device in devices) { @@ -68,7 +73,13 @@ private void HandleMidpointUpdate(IRoutingWithFeedback midpoint, RouteSwitchDesc } catch (Exception ex) { - Debug.LogMessage(ex, "Error handling midpoint update from {midpointKey}:{Exception}", this, midpoint.Key, ex); + Debug.LogMessage( + ex, + "Error handling midpoint update from {midpointKey}:{Exception}", + this, + midpoint.Key, + ex + ); } } @@ -78,7 +89,10 @@ private void HandleMidpointUpdate(IRoutingWithFeedback midpoint, RouteSwitchDesc /// /// The sink device that reported an input change. /// The new input port selected on the sink device. - private void HandleSinkUpdate(IRoutingSinkWithSwitching sender, RoutingInputPort currentInputPort) + private void HandleSinkUpdate( + IRoutingSinkWithSwitching sender, + RoutingInputPort currentInputPort + ) { try { @@ -86,7 +100,13 @@ private void HandleSinkUpdate(IRoutingSinkWithSwitching sender, RoutingInputPort } catch (Exception ex) { - Debug.LogMessage(ex, "Error handling Sink update from {senderKey}:{Exception}", this, sender.Key, ex); + Debug.LogMessage( + ex, + "Error handling Sink update from {senderKey}:{Exception}", + this, + sender.Key, + ex + ); } } @@ -96,13 +116,27 @@ private void HandleSinkUpdate(IRoutingSinkWithSwitching sender, RoutingInputPort /// /// The destination sink device to update. /// The currently selected input port on the destination device. - private void UpdateDestination(IRoutingSinkWithSwitching destination, RoutingInputPort inputPort) - { - Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "Updating destination {destination} with inputPort {inputPort}", this, destination?.Key, inputPort?.Key); - - if(inputPort == null) + private void UpdateDestination( + IRoutingSinkWithSwitching destination, + RoutingInputPort inputPort + ) + { + Debug.LogMessage( + Serilog.Events.LogEventLevel.Debug, + "Updating destination {destination} with inputPort {inputPort}", + this, + destination?.Key, + inputPort?.Key + ); + + if (inputPort == null) { - Debug.LogMessage(Serilog.Events.LogEventLevel.Warning, "Destination {destination} has not reported an input port yet", this,destination.Key); + Debug.LogMessage( + Serilog.Events.LogEventLevel.Debug, + "Destination {destination} has not reported an input port yet", + this, + destination.Key + ); return; } @@ -111,11 +145,19 @@ private void UpdateDestination(IRoutingSinkWithSwitching destination, RoutingInp { var tieLines = TieLineCollection.Default; - firstTieLine = tieLines.FirstOrDefault(tl => tl.DestinationPort.Key == inputPort.Key && tl.DestinationPort.ParentDevice.Key == inputPort.ParentDevice.Key); + firstTieLine = tieLines.FirstOrDefault(tl => + tl.DestinationPort.Key == inputPort.Key + && tl.DestinationPort.ParentDevice.Key == inputPort.ParentDevice.Key + ); if (firstTieLine == null) { - Debug.LogMessage(Serilog.Events.LogEventLevel.Information, "No tieline found for inputPort {inputPort}. Clearing current source", this, inputPort); + Debug.LogMessage( + Serilog.Events.LogEventLevel.Debug, + "No tieline found for inputPort {inputPort}. Clearing current source", + this, + inputPort + ); var tempSourceListItem = new SourceListItem { @@ -123,12 +165,13 @@ private void UpdateDestination(IRoutingSinkWithSwitching destination, RoutingInp Name = inputPort.Key, }; - - destination.CurrentSourceInfo = tempSourceListItem; ; + destination.CurrentSourceInfo = tempSourceListItem; + ; destination.CurrentSourceInfoKey = "$transient"; return; } - } catch (Exception ex) + } + catch (Exception ex) { Debug.LogMessage(ex, "Error getting first tieline: {Exception}", this, ex); return; @@ -143,7 +186,12 @@ private void UpdateDestination(IRoutingSinkWithSwitching destination, RoutingInp if (sourceTieLine == null) { - Debug.LogMessage(Serilog.Events.LogEventLevel.Information, "No route found to source for inputPort {inputPort}. Clearing current source", this, inputPort); + Debug.LogMessage( + Serilog.Events.LogEventLevel.Debug, + "No route found to source for inputPort {inputPort}. Clearing current source", + this, + inputPort + ); var tempSourceListItem = new SourceListItem { @@ -155,32 +203,45 @@ private void UpdateDestination(IRoutingSinkWithSwitching destination, RoutingInp destination.CurrentSourceInfoKey = string.Empty; return; } - } catch(Exception ex) + } + catch (Exception ex) { Debug.LogMessage(ex, "Error getting sourceTieLine: {Exception}", this, ex); return; } - // Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "Found root TieLine {tieLine}", this, sourceTieLine); + // Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "Found root TieLine {tieLine}", this, sourceTieLine); // Does not handle combinable scenarios or other scenarios where a display might be part of multiple rooms yet. - var room = DeviceManager.AllDevices.OfType().FirstOrDefault((r) => { - if(r is IHasMultipleDisplays roomMultipleDisplays) - { - return roomMultipleDisplays.Displays.Any(d => d.Value.Key == destination.Key); - } - - if(r is IHasDefaultDisplay roomDefaultDisplay) - { - return roomDefaultDisplay.DefaultDisplay.Key == destination.Key; - } + var room = DeviceManager + .AllDevices.OfType() + .FirstOrDefault( + (r) => + { + if (r is IHasMultipleDisplays roomMultipleDisplays) + { + return roomMultipleDisplays.Displays.Any(d => + d.Value.Key == destination.Key + ); + } + + if (r is IHasDefaultDisplay roomDefaultDisplay) + { + return roomDefaultDisplay.DefaultDisplay.Key == destination.Key; + } + + return false; + } + ); - return false; - }); - - if(room == null) + if (room == null) { - Debug.LogMessage(Serilog.Events.LogEventLevel.Warning, "No room found for display {destination}", this, destination.Key); + Debug.LogMessage( + Serilog.Events.LogEventLevel.Debug, + "No room found for display {destination}", + this, + destination.Key + ); return; } @@ -190,29 +251,45 @@ private void UpdateDestination(IRoutingSinkWithSwitching destination, RoutingInp if (sourceList == null) { - Debug.LogMessage(Serilog.Events.LogEventLevel.Warning, "No source list found for source list key {key}. Unable to find source for tieLine {sourceTieLine}", this, room.SourceListKey, sourceTieLine); + Debug.LogMessage( + Serilog.Events.LogEventLevel.Debug, + "No source list found for source list key {key}. Unable to find source for tieLine {sourceTieLine}", + this, + room.SourceListKey, + sourceTieLine + ); return; } // Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "Found sourceList for room {room}", this, room.Key); - var sourceListItem = sourceList.FirstOrDefault(sli => { - //// Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, - // "SourceListItem {sourceListItem}:{sourceKey} tieLine sourceport device key {sourcePortDeviceKey}", - // this, - // sli.Key, - // sli.Value.SourceKey, - // sourceTieLine.SourcePort.ParentDevice.Key); - - return sli.Value.SourceKey.Equals(sourceTieLine.SourcePort.ParentDevice.Key,StringComparison.InvariantCultureIgnoreCase); - }); + var sourceListItem = sourceList.FirstOrDefault(sli => + { + //// Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, + // "SourceListItem {sourceListItem}:{sourceKey} tieLine sourceport device key {sourcePortDeviceKey}", + // this, + // sli.Key, + // sli.Value.SourceKey, + // sourceTieLine.SourcePort.ParentDevice.Key); + + return sli.Value.SourceKey.Equals( + sourceTieLine.SourcePort.ParentDevice.Key, + StringComparison.InvariantCultureIgnoreCase + ); + }); var source = sourceListItem.Value; var sourceKey = sourceListItem.Key; if (source == null) { - Debug.LogMessage(Serilog.Events.LogEventLevel.Information, "No source found for device {key}. Creating transient source for {destination}", this, sourceTieLine.SourcePort.ParentDevice.Key, destination); + Debug.LogMessage( + Serilog.Events.LogEventLevel.Debug, + "No source found for device {key}. Creating transient source for {destination}", + this, + sourceTieLine.SourcePort.ParentDevice.Key, + destination + ); var tempSourceListItem = new SourceListItem { @@ -221,7 +298,7 @@ private void UpdateDestination(IRoutingSinkWithSwitching destination, RoutingInp }; destination.CurrentSourceInfoKey = "$transient"; - destination.CurrentSourceInfo = tempSourceListItem; + destination.CurrentSourceInfo = tempSourceListItem; return; } @@ -229,7 +306,6 @@ private void UpdateDestination(IRoutingSinkWithSwitching destination, RoutingInp destination.CurrentSourceInfoKey = sourceKey; destination.CurrentSourceInfo = source; - } /// @@ -249,29 +325,49 @@ private TieLine GetRootTieLine(TieLine tieLine) { // Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "TieLine Source device {sourceDevice} is midpoint", this, midpoint); - if(midpoint.CurrentRoutes == null || midpoint.CurrentRoutes.Count == 0) + if (midpoint.CurrentRoutes == null || midpoint.CurrentRoutes.Count == 0) { - Debug.LogMessage(Serilog.Events.LogEventLevel.Information, "Midpoint {midpointKey} has no routes",this, midpoint.Key); + Debug.LogMessage( + Serilog.Events.LogEventLevel.Debug, + "Midpoint {midpointKey} has no routes", + this, + midpoint.Key + ); return null; } - var currentRoute = midpoint.CurrentRoutes.FirstOrDefault(route => { + var currentRoute = midpoint.CurrentRoutes.FirstOrDefault(route => + { //Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "Checking {route} against {tieLine}", this, route, tieLine); - return route.OutputPort != null && route.InputPort != null && route.OutputPort?.Key == tieLine.SourcePort.Key && route.OutputPort?.ParentDevice.Key == tieLine.SourcePort.ParentDevice.Key; + return route.OutputPort != null + && route.InputPort != null + && route.OutputPort?.Key == tieLine.SourcePort.Key + && route.OutputPort?.ParentDevice.Key + == tieLine.SourcePort.ParentDevice.Key; }); if (currentRoute == null) { - Debug.LogMessage(Serilog.Events.LogEventLevel.Information, "No route through midpoint {midpoint} for outputPort {outputPort}", this, midpoint.Key, tieLine.SourcePort); + Debug.LogMessage( + Serilog.Events.LogEventLevel.Debug, + "No route through midpoint {midpoint} for outputPort {outputPort}", + this, + midpoint.Key, + tieLine.SourcePort + ); return null; } //Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "Found currentRoute {currentRoute} through {midpoint}", this, currentRoute, midpoint); - nextTieLine = TieLineCollection.Default.FirstOrDefault(tl => { + nextTieLine = TieLineCollection.Default.FirstOrDefault(tl => + { //Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "Checking {route} against {tieLine}", tl.DestinationPort.Key, currentRoute.InputPort.Key); - return tl.DestinationPort.Key == currentRoute.InputPort.Key && tl.DestinationPort.ParentDevice.Key == currentRoute.InputPort.ParentDevice.Key; }); + return tl.DestinationPort.Key == currentRoute.InputPort.Key + && tl.DestinationPort.ParentDevice.Key + == currentRoute.InputPort.ParentDevice.Key; + }); if (nextTieLine != null) { @@ -286,19 +382,26 @@ private TieLine GetRootTieLine(TieLine tieLine) //Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "TieLIne Source Device {sourceDeviceKey} is IRoutingSource: {isIRoutingSource}", this, tieLine.SourcePort.ParentDevice.Key, tieLine.SourcePort.ParentDevice is IRoutingSource); //Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "TieLine Source Device interfaces: {typeFullName}:{interfaces}", this, tieLine.SourcePort.ParentDevice.GetType().FullName, tieLine.SourcePort.ParentDevice.GetType().GetInterfaces().Select(i => i.Name)); - if (tieLine.SourcePort.ParentDevice is IRoutingSource || tieLine.SourcePort.ParentDevice is IRoutingOutputs) //end of the chain + if ( + tieLine.SourcePort.ParentDevice is IRoutingSource + || tieLine.SourcePort.ParentDevice is IRoutingOutputs + ) //end of the chain { // Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "Found root: {tieLine}", this, tieLine); return tieLine; } - nextTieLine = TieLineCollection.Default.FirstOrDefault(tl => tl.DestinationPort.Key == tieLine.SourcePort.Key && tl.DestinationPort.ParentDevice.Key == tieLine.SourcePort.ParentDevice.Key ); + nextTieLine = TieLineCollection.Default.FirstOrDefault(tl => + tl.DestinationPort.Key == tieLine.SourcePort.Key + && tl.DestinationPort.ParentDevice.Key == tieLine.SourcePort.ParentDevice.Key + ); if (nextTieLine != null) { return GetRootTieLine(nextTieLine); } - } catch (Exception ex) + } + catch (Exception ex) { Debug.LogMessage(ex, "Error walking tieLines: {Exception}", this, ex); return null; diff --git a/src/PepperDash.Essentials.Core/Routing/RoutingInputPort.cs b/src/PepperDash.Essentials.Core/Routing/RoutingInputPort.cs index 08876121a..4e50f689d 100644 --- a/src/PepperDash.Essentials.Core/Routing/RoutingInputPort.cs +++ b/src/PepperDash.Essentials.Core/Routing/RoutingInputPort.cs @@ -21,6 +21,9 @@ public class RoutingInputPort : RoutingPort /// An object used to refer to this port in the IRouting device's ExecuteSwitch method. /// May be string, number, whatever /// The IRoutingInputs object this lives on + /// key of the port + /// type of the routing signal + /// connection type of the port public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType, object selector, IRoutingInputs parent) : this (key, type, connType, selector, parent, false) @@ -32,6 +35,12 @@ public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnect /// the ports that link a DM card to a DM matrix bus /// /// true for internal ports + /// key of the port + /// type of the routing signal + /// connection type of the port + /// An object used to refer to this port in the IRouting device's ExecuteSwitch method. + /// May be string, number, whatever + /// The IRoutingInputs object this lives on public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType, object selector, IRoutingInputs parent, bool isInternal) : base(key, type, connType, selector, isInternal) diff --git a/src/PepperDash.Essentials.Core/Routing/eRoutingPortConnectionType.cs b/src/PepperDash.Essentials.Core/Routing/eRoutingPortConnectionType.cs index 41e8c81b6..9245dd483 100644 --- a/src/PepperDash.Essentials.Core/Routing/eRoutingPortConnectionType.cs +++ b/src/PepperDash.Essentials.Core/Routing/eRoutingPortConnectionType.cs @@ -5,7 +5,99 @@ /// public enum eRoutingPortConnectionType { - None, BackplaneOnly, DisplayPort, Dvi, Hdmi, Rgb, Vga, LineAudio, DigitalAudio, Sdi, - Composite, Component, DmCat, DmMmFiber, DmSmFiber, Speaker, Streaming, UsbC, HdBaseT + /// + /// No connection type + /// + None, + + /// + /// Backplane only connection + /// + BackplaneOnly, + + /// + /// Connection via cable + /// + DisplayPort, + + /// + /// DVI connection + /// + Dvi, + + /// + /// HDMI connection + /// + Hdmi, + + /// + /// RGB connection + /// + Rgb, + + /// + /// VGA connection + /// + Vga, + + /// + /// Line audio connection + /// + LineAudio, + + /// + /// Digital audio connection + /// + DigitalAudio, + + /// + /// SDI connection + /// + Sdi, + + /// + /// Composite connection + /// + Composite, + + /// + /// Component connection + /// + Component, + + /// + /// DM CAT connection + /// + DmCat, + + /// + /// DM MM Fiber connection + /// + DmMmFiber, + + /// + /// DM SM Fiber connection + /// + DmSmFiber, + + /// + /// Speaker connection + /// + Speaker, + + /// + /// Microphone connection + /// + Streaming, + + /// + /// USB-C connection + /// + UsbC, + + /// + /// HDBaseT connection + /// + HdBaseT } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Routing/eRoutingSignalType.cs b/src/PepperDash.Essentials.Core/Routing/eRoutingSignalType.cs index bab815fc0..9fce9c5bb 100644 --- a/src/PepperDash.Essentials.Core/Routing/eRoutingSignalType.cs +++ b/src/PepperDash.Essentials.Core/Routing/eRoutingSignalType.cs @@ -3,17 +3,40 @@ namespace PepperDash.Essentials.Core { - [Flags] /// /// Enumeration of eRoutingSignalType values /// + [Flags] public enum eRoutingSignalType { + /// + /// Audio signal type + /// Audio = 1, + + /// + /// Video signal type + /// Video = 2, + + /// + /// AudioVideo signal type + /// AudioVideo = Audio | Video, + + /// + /// Control signal type + /// UsbOutput = 8, + + /// + /// Control signal type + /// UsbInput = 16, + + /// + /// Secondary audio signal type + /// SecondaryAudio = 32 } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Secrets/CrestronGlobalSecretsProvider.cs b/src/PepperDash.Essentials.Core/Secrets/CrestronGlobalSecretsProvider.cs index 83d0a0a8e..45983b0cd 100644 --- a/src/PepperDash.Essentials.Core/Secrets/CrestronGlobalSecretsProvider.cs +++ b/src/PepperDash.Essentials.Core/Secrets/CrestronGlobalSecretsProvider.cs @@ -22,6 +22,10 @@ public class CrestronGlobalSecretsProvider : ISecretProvider /// public string Description { get; private set; } + /// + /// Constructor for CrestronGlobalSecretsProvider + /// + /// The key for the secret provider public CrestronGlobalSecretsProvider(string key) { Key = key; diff --git a/src/PepperDash.Essentials.Core/Secrets/CrestronLocalSecretsProvider.cs b/src/PepperDash.Essentials.Core/Secrets/CrestronLocalSecretsProvider.cs index a20d832ed..31a1faa38 100644 --- a/src/PepperDash.Essentials.Core/Secrets/CrestronLocalSecretsProvider.cs +++ b/src/PepperDash.Essentials.Core/Secrets/CrestronLocalSecretsProvider.cs @@ -23,7 +23,10 @@ public class CrestronLocalSecretsProvider : ISecretProvider /// public string Description { get; private set; } - + /// + /// Constructor for CrestronLocalSecretsProvider + /// + /// The key for the secret provider public CrestronLocalSecretsProvider(string key) { Key = key; diff --git a/src/PepperDash.Essentials.Core/Secrets/CrestronSecret.cs b/src/PepperDash.Essentials.Core/Secrets/CrestronSecret.cs index 27fbcdad5..5a6064539 100644 --- a/src/PepperDash.Essentials.Core/Secrets/CrestronSecret.cs +++ b/src/PepperDash.Essentials.Core/Secrets/CrestronSecret.cs @@ -11,11 +11,27 @@ namespace PepperDash.Essentials.Core /// public class CrestronSecret : ISecret { + /// + /// Gets the Provider + /// public ISecretProvider Provider { get; private set; } + + /// + /// Gets the Key + /// public string Key { get; private set; } + /// + /// Gets the Value + /// public object Value { get; private set; } + /// + /// Constructor for CrestronSecret + /// + /// key for the secret + /// value of the secret + /// provider of the secret public CrestronSecret(string key, string value, ISecretProvider provider) { Key = key; diff --git a/src/PepperDash.Essentials.Core/Secrets/SecretsManager.cs b/src/PepperDash.Essentials.Core/Secrets/SecretsManager.cs index 6a08f0e24..382f5d558 100644 --- a/src/PepperDash.Essentials.Core/Secrets/SecretsManager.cs +++ b/src/PepperDash.Essentials.Core/Secrets/SecretsManager.cs @@ -7,8 +7,14 @@ namespace PepperDash.Essentials.Core { + /// + /// SecretsManager static class + /// public static class SecretsManager { + /// + /// Gets the Secrets dictionary + /// public static Dictionary Secrets { get; private set; } /// diff --git a/src/PepperDash.Essentials.Core/Secrets/SecretsPropertiesConfig.cs b/src/PepperDash.Essentials.Core/Secrets/SecretsPropertiesConfig.cs index f092d5d3a..a5a76074e 100644 --- a/src/PepperDash.Essentials.Core/Secrets/SecretsPropertiesConfig.cs +++ b/src/PepperDash.Essentials.Core/Secrets/SecretsPropertiesConfig.cs @@ -14,8 +14,15 @@ namespace PepperDash.Essentials.Core /// public class SecretsPropertiesConfig { + /// + /// Gets or sets the Provider + /// [JsonProperty("provider")] public string Provider { get; set; } + + /// + /// Gets or sets the Key + /// [JsonProperty("key")] public string Key { get; set; } } diff --git a/src/PepperDash.Essentials.Core/Shades/Shade Interfaces.cs b/src/PepperDash.Essentials.Core/Shades/Shade Interfaces.cs index 728a51871..2fb5ffd77 100644 --- a/src/PepperDash.Essentials.Core/Shades/Shade Interfaces.cs +++ b/src/PepperDash.Essentials.Core/Shades/Shade Interfaces.cs @@ -8,6 +8,9 @@ namespace PepperDash.Essentials.Core.Shades /// public interface IShades { + /// + /// List of shades controlled by this device + /// List Shades { get; } } @@ -16,17 +19,47 @@ public interface IShades /// public interface IShadesOpenCloseStop { + /// + /// Opens the shade + /// void Open(); + + /// + /// Closes the shade + /// void Close(); + + /// + /// Stops the shade + /// void Stop(); } + /// + /// Requirements for a device that implements Open/Close/Stop shade control with presets + /// public interface IShadesOpenClosePreset : IShadesOpenCloseStop { + /// + /// Recalls the preset + /// + /// preset number to recall void RecallPreset(uint presetNumber); + + /// + /// Saves the preset + /// + /// preset number to save void SavePreset(uint presetNumber); + + /// + /// Label for the preset button + /// string StopOrPresetButtonLabel { get; } + /// + /// Event raised when a preset is recalled + /// event EventHandler PresetSaved; } @@ -36,7 +69,14 @@ public interface IShadesOpenClosePreset : IShadesOpenCloseStop /// public interface IShadesRaiseLowerFeedback { + /// + /// Feedback to indicate if the shade is lowering + /// BoolFeedback ShadeIsLoweringFeedback { get; } + + /// + /// Feedback to indicate if the shade is raising + /// BoolFeedback ShadeIsRaisingFeedback { get; } } @@ -45,7 +85,14 @@ public interface IShadesRaiseLowerFeedback /// public interface IShadesOpenClosedFeedback: IShadesOpenCloseStop { + /// + /// Feedback to indicate if the shade is open + /// BoolFeedback ShadeIsOpenFeedback { get; } + + /// + /// Feedback to indicate if the shade is closed + /// BoolFeedback ShadeIsClosedFeedback { get; } } @@ -54,8 +101,19 @@ public interface IShadesOpenClosedFeedback: IShadesOpenCloseStop /// public interface IShadesStopOrMove { + /// + /// Raises the shade or stops it if it's already moving + /// void OpenOrStop(); + + /// + /// Lowers the shade or stops it if it's already moving + /// void CloseOrStop(); + + /// + /// Opens, closes, or stops the shade depending on current state + /// void OpenCloseOrStop(); } @@ -64,6 +122,9 @@ public interface IShadesStopOrMove /// public interface IShadesStopFeedback : IShadesOpenCloseStop { + /// + /// Feedback to indicate if the shade is stopped + /// BoolFeedback IsStoppedFeedback { get; } } @@ -72,6 +133,10 @@ public interface IShadesStopFeedback : IShadesOpenCloseStop /// public interface IShadesPosition { + /// + /// Gets the current position of the shade + /// + /// value of the position to set void SetPosition(ushort value); } @@ -80,18 +145,31 @@ public interface IShadesPosition /// public interface IShadesFeedback: IShadesPosition, IShadesStopFeedback { + /// + /// Feedback to indicate the current position of the shade + /// IntFeedback PositionFeedback { get; } } /// - /// + /// Feedback for scenes /// public interface ISceneFeedback { + /// + /// Runs the scene + /// void Run(); + + /// + /// Feedback to indicate if all shades are at the scene position + /// BoolFeedback AllAreAtSceneFeedback { get; } } + /// + /// Combines basic shade interfaces for Crestron Basic shades + /// public interface ICrestronBasicShade : IShadesOpenClosedFeedback, IShadesStopOrMove, IShadesFeedback, IShadesRaiseLowerFeedback { diff --git a/src/PepperDash.Essentials.Core/Shades/ShadeBase.cs b/src/PepperDash.Essentials.Core/Shades/ShadeBase.cs index c44abac64..ce5de98d1 100644 --- a/src/PepperDash.Essentials.Core/Shades/ShadeBase.cs +++ b/src/PepperDash.Essentials.Core/Shades/ShadeBase.cs @@ -9,10 +9,17 @@ namespace PepperDash.Essentials.Core.Shades { - + /// + /// Base class for shades + /// [Obsolete("Please use PepperDash.Essentials.Devices.Common, this will be removed in 2.1")] public abstract class ShadeBase : EssentialsDevice, IShadesOpenCloseStop { + /// + /// Constructor + /// + /// key of the shade device + /// name of the shade device public ShadeBase(string key, string name) : base(key, name) { @@ -21,8 +28,19 @@ public ShadeBase(string key, string name) #region iShadesOpenClose Members + /// + /// Opens the shade + /// public abstract void Open(); + + /// + /// Stops the shade + /// public abstract void Stop(); + + /// + /// Closes the shade + /// public abstract void Close(); #endregion diff --git a/src/PepperDash.Essentials.Core/SigHelper.cs b/src/PepperDash.Essentials.Core/SigHelper.cs index fb14df782..df1ad605b 100644 --- a/src/PepperDash.Essentials.Core/SigHelper.cs +++ b/src/PepperDash.Essentials.Core/SigHelper.cs @@ -17,7 +17,8 @@ public class SigHelper /// /// Runs action when Sig is pressed /// - /// + /// signal pressed + /// action to run public static void Pressed(Sig sig, Action act) { if (sig.BoolValue) act(); } /// diff --git a/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectDPad.cs b/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectDPad.cs index 436f00b45..605b2344e 100644 --- a/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectDPad.cs +++ b/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectDPad.cs @@ -13,27 +13,36 @@ namespace PepperDash.Essentials.Core.SmartObjects /// public class SmartObjectDPad : SmartObjectHelperBase { - /// - /// Gets or sets the SigUp - /// + /// + /// Gets or sets the SigUp + /// public BoolOutputSig SigUp { get { return GetBoolOutputNamed("Up"); } } - /// - /// Gets or sets the SigDown - /// + + /// + /// Gets or sets the SigDown + /// public BoolOutputSig SigDown { get { return GetBoolOutputNamed("Down"); } } - /// - /// Gets or sets the SigLeft - /// + + /// + /// Gets or sets the SigLeft + /// public BoolOutputSig SigLeft { get { return GetBoolOutputNamed("Left"); } } - /// - /// Gets or sets the SigRight - /// + + /// + /// Gets or sets the SigRight + /// public BoolOutputSig SigRight { get { return GetBoolOutputNamed("Right"); } } - /// - /// Gets or sets the SigCenter - /// + + /// + /// Gets or sets the SigCenter + /// public BoolOutputSig SigCenter { get { return GetBoolOutputNamed("Center"); } } + /// + /// Constructor + /// + /// smart object + /// use user object handler if true public SmartObjectDPad(SmartObject so, bool useUserObjectHandler) : base(so, useUserObjectHandler) { diff --git a/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectDynamicList.cs b/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectDynamicList.cs index 2080a07e6..fdf7dc04f 100644 --- a/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectDynamicList.cs +++ b/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectDynamicList.cs @@ -17,14 +17,24 @@ namespace PepperDash.Essentials.Core.SmartObjects /// public class SmartObjectDynamicList : SmartObjectHelperBase { + /// + /// Sig name for Scroll To Item + /// public const string SigNameScrollToItem = "Scroll To Item"; + + /// + /// Sig name for Set Number of Items + /// public const string SigNameSetNumberOfItems = "Set Number of Items"; - /// - /// Gets or sets the NameSigOffset - /// + /// + /// Gets or sets the NameSigOffset + /// public uint NameSigOffset { get; private set; } + /// + /// Gets or sets the Count + /// public ushort Count { get @@ -34,9 +44,9 @@ public ushort Count set { SmartObject.UShortInput[SigNameSetNumberOfItems].UShortValue = value; } } - /// - /// Gets or sets the MaxCount - /// + /// + /// Gets or sets the MaxCount + /// public int MaxCount { get; private set; } /// @@ -62,9 +72,9 @@ public SmartObjectDynamicList(SmartObject so, bool useUserObjectHandler, uint na } } - /// - /// SetItem method - /// + /// + /// SetItem method + /// public void SetItem(uint index, string mainText, string iconName, Action action) { SetItemMainText(index, mainText); @@ -83,9 +93,9 @@ public void SetItem(uint index, string mainText, string iconName, Action a //} } - /// - /// SetItemMainText method - /// + /// + /// SetItemMainText method + /// public void SetItemMainText(uint index, string text) { if (index > MaxCount) return; @@ -93,27 +103,27 @@ public void SetItemMainText(uint index, string text) (SmartObject.Device as BasicTriList).StringInput[NameSigOffset + index].StringValue = text; } - /// - /// SetItemIcon method - /// + /// + /// SetItemIcon method + /// public void SetItemIcon(uint index, string iconName) { if (index > MaxCount) return; SmartObject.StringInput[string.Format("Set Item {0} Icon Serial", index)].StringValue = iconName; } - /// - /// SetItemButtonAction method - /// + /// + /// SetItemButtonAction method + /// public void SetItemButtonAction(uint index, Action action) { if (index > MaxCount) return; SmartObject.BooleanOutput[string.Format("Item {0} Pressed", index)].UserObject = action; } - /// - /// SetFeedback method - /// + /// + /// SetFeedback method + /// public void SetFeedback(uint index, bool interlocked) { if (interlocked) @@ -121,9 +131,9 @@ public void SetFeedback(uint index, bool interlocked) SmartObject.BooleanInput[string.Format("Item {0} Selected", index)].BoolValue = true; } - /// - /// ClearFeedbacks method - /// + /// + /// ClearFeedbacks method + /// public void ClearFeedbacks() { for(int i = 1; i<= Count; i++) diff --git a/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectHelperBase.cs b/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectHelperBase.cs index 031259b00..a86687aaf 100644 --- a/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectHelperBase.cs +++ b/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectHelperBase.cs @@ -11,21 +11,26 @@ namespace PepperDash.Essentials.Core.SmartObjects { - /// - /// Represents a SmartObjectHelperBase - /// + /// + /// Represents a SmartObjectHelperBase + /// public class SmartObjectHelperBase { - /// - /// Gets or sets the SmartObject - /// + /// + /// Gets or sets the SmartObject + /// public SmartObject SmartObject { get; private set; } - /// - /// Gets or sets the Validated - /// + /// + /// Gets or sets the Validated + /// public bool Validated { get; protected set; } + /// + /// Constructor + /// + /// smart object + /// use the user object hadnler if true public SmartObjectHelperBase(SmartObject so, bool useUserObjectHandler) { SmartObject = so; @@ -37,6 +42,9 @@ public SmartObjectHelperBase(SmartObject so, bool useUserObjectHandler) } } + /// + /// Destructor + /// ~SmartObjectHelperBase() { SmartObject.SigChange -= this.SmartObject_SigChange; @@ -47,9 +55,6 @@ public SmartObjectHelperBase(SmartObject so, bool useUserObjectHandler) /// /// /// - /// - /// GetBoolOutputNamed method - /// public BoolOutputSig GetBoolOutputNamed(string name) { if (SmartObject.BooleanOutput.Contains(name)) diff --git a/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectNumeric.cs b/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectNumeric.cs index 493fd2131..2b6e06b81 100644 --- a/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectNumeric.cs +++ b/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectNumeric.cs @@ -8,52 +8,90 @@ namespace PepperDash.Essentials.Core.SmartObjects { - /// - /// Represents a SmartObjectNumeric - /// + /// + /// Represents a SmartObjectNumeric + /// public class SmartObjectNumeric : SmartObjectHelperBase - { - /// - /// Gets or sets the Misc1SigName - /// - public string Misc1SigName { get; set; } - /// - /// Gets or sets the Misc2SigName - /// - public string Misc2SigName { get; set; } - - public BoolOutputSig Digit1 { get { return GetBoolOutputNamed("1"); } } - public BoolOutputSig Digit2 { get { return GetBoolOutputNamed("2"); } } - public BoolOutputSig Digit3 { get { return GetBoolOutputNamed("3"); } } - public BoolOutputSig Digit4 { get { return GetBoolOutputNamed("4"); } } - /// - /// Gets or sets the Digit5 - /// - public BoolOutputSig Digit5 { get { return GetBoolOutputNamed("5"); } } - public BoolOutputSig Digit6 { get { return GetBoolOutputNamed("6"); } } - public BoolOutputSig Digit7 { get { return GetBoolOutputNamed("7"); } } - public BoolOutputSig Digit8 { get { return GetBoolOutputNamed("8"); } } - /// - /// Gets or sets the Digit9 - /// - public BoolOutputSig Digit9 { get { return GetBoolOutputNamed("9"); } } - /// - /// Gets or sets the Digit0 - /// - public BoolOutputSig Digit0 { get { return GetBoolOutputNamed("0"); } } - /// - /// Gets or sets the Misc1 - /// - public BoolOutputSig Misc1 { get { return GetBoolOutputNamed(Misc1SigName); } } - /// - /// Gets or sets the Misc2 - /// - public BoolOutputSig Misc2 { get { return GetBoolOutputNamed(Misc2SigName); } } - - public SmartObjectNumeric(SmartObject so, bool useUserObjectHandler) : base(so, useUserObjectHandler) - { - Misc1SigName = "Misc_1"; - Misc2SigName = "Misc_2"; - } - } + { + /// + /// Gets or sets the Misc1SigName + /// + public string Misc1SigName { get; set; } + + /// + /// Gets or sets the Misc2SigName + /// + public string Misc2SigName { get; set; } + + /// + /// Gets or sets the Digit1 + /// + public BoolOutputSig Digit1 { get { return GetBoolOutputNamed("1"); } } + + /// + /// Gets or sets the Digit2 + /// + public BoolOutputSig Digit2 { get { return GetBoolOutputNamed("2"); } } + + /// + /// Gets or sets the Digit3 + /// + public BoolOutputSig Digit3 { get { return GetBoolOutputNamed("3"); } } + + /// + /// Gets or sets the Digit4 + /// + public BoolOutputSig Digit4 { get { return GetBoolOutputNamed("4"); } } + + /// + /// Gets or sets the Digit5 + /// + public BoolOutputSig Digit5 { get { return GetBoolOutputNamed("5"); } } + + /// + /// Gets or sets the Digit6 + /// + public BoolOutputSig Digit6 { get { return GetBoolOutputNamed("6"); } } + + /// + /// Gets or sets the Digit7 + /// + public BoolOutputSig Digit7 { get { return GetBoolOutputNamed("7"); } } + + /// + /// Gets or sets the Digit8 + /// + public BoolOutputSig Digit8 { get { return GetBoolOutputNamed("8"); } } + + /// + /// Gets or sets the Digit9 + /// + public BoolOutputSig Digit9 { get { return GetBoolOutputNamed("9"); } } + + /// + /// Gets or sets the Digit0 + /// + public BoolOutputSig Digit0 { get { return GetBoolOutputNamed("0"); } } + + /// + /// Gets or sets the Misc1 + /// + public BoolOutputSig Misc1 { get { return GetBoolOutputNamed(Misc1SigName); } } + + /// + /// Gets or sets the Misc2 + /// + public BoolOutputSig Misc2 { get { return GetBoolOutputNamed(Misc2SigName); } } + + /// + /// Constructor + /// + /// smart object + /// use user handler if true + public SmartObjectNumeric(SmartObject so, bool useUserObjectHandler) : base(so, useUserObjectHandler) + { + Misc1SigName = "Misc_1"; + Misc2SigName = "Misc_2"; + } + } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/SmartObjects/SubpageReferencList/SubpageReferenceList.cs b/src/PepperDash.Essentials.Core/SmartObjects/SubpageReferencList/SubpageReferenceList.cs index e82c3a63e..4ed42d497 100644 --- a/src/PepperDash.Essentials.Core/SmartObjects/SubpageReferencList/SubpageReferenceList.cs +++ b/src/PepperDash.Essentials.Core/SmartObjects/SubpageReferencList/SubpageReferenceList.cs @@ -30,35 +30,60 @@ namespace PepperDash.Essentials.Core /// public class SubpageReferenceList { - + /// + /// Gets or sets the Count + /// public ushort Count { get { return SetNumberOfItemsSig.UShortValue; } set { SetNumberOfItemsSig.UShortValue = value; } } + + /// + /// Gets or sets the MaxDefinedItems + /// public ushort MaxDefinedItems { get; private set; } /// /// Gets or sets the ScrollToItemSig /// public UShortInputSig ScrollToItemSig { get; private set; } + UShortInputSig SetNumberOfItemsSig; + /// /// Gets or sets the BoolIncrement /// public uint BoolIncrement { get; protected set; } + /// /// Gets or sets the UShortIncrement /// public uint UShortIncrement { get; protected set; } + /// /// Gets or sets the StringIncrement /// public uint StringIncrement { get; protected set; } + /// + /// Gets or sets the SRL + /// protected readonly SmartObject SRL; + + /// + /// Gets the list of items in the SRL + /// protected readonly List Items = new List(); + /// + /// Constructor + /// + /// trilist for the smart object + /// smart object ID + /// + /// + /// public SubpageReferenceList(BasicTriListWithSmartObject triList, uint smartObjectId, uint boolIncrement, uint ushortIncrement, uint stringIncrement) { diff --git a/src/PepperDash.Essentials.Core/SmartObjects/SubpageReferencList/SubpageReferenceListItem.cs b/src/PepperDash.Essentials.Core/SmartObjects/SubpageReferencList/SubpageReferenceListItem.cs index 4e979a696..e29d0894b 100644 --- a/src/PepperDash.Essentials.Core/SmartObjects/SubpageReferencList/SubpageReferenceListItem.cs +++ b/src/PepperDash.Essentials.Core/SmartObjects/SubpageReferencList/SubpageReferenceListItem.cs @@ -17,8 +17,17 @@ public class SubpageReferenceListItem /// The list that this lives in /// protected SubpageReferenceList Owner; + + /// + /// The index of this item + /// protected uint Index; + /// + /// Constructor + /// + /// index of the item + /// owner of the item public SubpageReferenceListItem(uint index, SubpageReferenceList owner) { Index = index; diff --git a/src/PepperDash.Essentials.Core/Timers/CountdownTimer.cs b/src/PepperDash.Essentials.Core/Timers/CountdownTimer.cs index c00eb0143..24ff6a1a9 100644 --- a/src/PepperDash.Essentials.Core/Timers/CountdownTimer.cs +++ b/src/PepperDash.Essentials.Core/Timers/CountdownTimer.cs @@ -14,8 +14,19 @@ namespace PepperDash.Essentials.Core /// public class SecondsCountdownTimer: IKeyed { + /// + /// Event fired when the timer starts + /// public event EventHandler HasStarted; + + /// + /// Event fired when the timer finishes + /// public event EventHandler HasFinished; + + /// + /// Event fired when the timer is cancelled + /// public event EventHandler WasCancelled; /// @@ -33,6 +44,7 @@ public class SecondsCountdownTimer: IKeyed /// Gets or sets the PercentFeedback /// public IntFeedback PercentFeedback { get; private set; } + /// /// Gets or sets the TimeRemainingFeedback /// diff --git a/src/PepperDash.Essentials.Core/Timers/RetriggerableTimer.cs b/src/PepperDash.Essentials.Core/Timers/RetriggerableTimer.cs index ee7344894..f06ba3cd9 100644 --- a/src/PepperDash.Essentials.Core/Timers/RetriggerableTimer.cs +++ b/src/PepperDash.Essentials.Core/Timers/RetriggerableTimer.cs @@ -27,6 +27,11 @@ public class RetriggerableTimer : EssentialsDevice private CTimer _timer; private long _timerIntervalMs; + /// + /// Constructor + /// + /// key of the timer + /// configuration for the timer public RetriggerableTimer(string key, DeviceConfig config) : base(key, config.Name) { @@ -98,7 +103,7 @@ private DeviceActionWrapper GetActionFromConfig(eRetriggerableTimerEvents eventT /// /// Executes the Elapsed action from confing when the timer elapses /// - /// + /// action to be executed private void TimerElapsedCallback(object action) { Debug.LogMessage(LogEventLevel.Debug, this, "Timer Elapsed. Executing Action"); @@ -144,15 +149,27 @@ private void ExecuteAction(DeviceActionWrapper action) /// public class RetriggerableTimerPropertiesConfig { + /// + /// Start the timer on device activation + /// [JsonProperty("startTimerOnActivation")] public bool StartTimerOnActivation { get; set; } + /// + /// Timer interval in milliseconds + /// [JsonProperty("timerIntervalMs")] public long TimerIntervalMs { get; set; } + /// + /// Events and their associated actions + /// [JsonProperty("events")] public Dictionary Events { get; set; } + /// + /// Constructor + /// public RetriggerableTimerPropertiesConfig() { Events = new Dictionary(); @@ -164,7 +181,14 @@ public RetriggerableTimerPropertiesConfig() /// public enum eRetriggerableTimerEvents { + /// + /// Elapsed event + /// Elapsed, + + /// + /// Stopped event + /// Stopped, } @@ -173,11 +197,19 @@ public enum eRetriggerableTimerEvents /// public class RetriggerableTimerFactory : EssentialsDeviceFactory { + /// + /// Constructor + /// public RetriggerableTimerFactory() { TypeNames = new List() { "retriggerabletimer" }; } + /// + /// BuildDevice method + /// + /// device config + /// public override EssentialsDevice BuildDevice(DeviceConfig dc) { Debug.LogMessage(LogEventLevel.Debug, "Factory Attempting to create new RetriggerableTimer Device"); diff --git a/src/PepperDash.Essentials.Core/Touchpanels/CrestronTouchpanelPropertiesConfig.cs b/src/PepperDash.Essentials.Core/Touchpanels/CrestronTouchpanelPropertiesConfig.cs index 1358b1b99..2cc9ab9aa 100644 --- a/src/PepperDash.Essentials.Core/Touchpanels/CrestronTouchpanelPropertiesConfig.cs +++ b/src/PepperDash.Essentials.Core/Touchpanels/CrestronTouchpanelPropertiesConfig.cs @@ -7,72 +7,93 @@ namespace PepperDash.Essentials.Core /// public class CrestronTouchpanelPropertiesConfig { - [JsonProperty("control")] /// /// Gets or sets the ControlProperties /// + [JsonProperty("control")] public EssentialsControlPropertiesConfig ControlProperties { get; set; } - [JsonProperty("ipId", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the IpId /// + [JsonProperty("ipId", NullValueHandling = NullValueHandling.Ignore)] public string IpId { get; set; } - [JsonProperty("defaultRoomKey", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the DefaultRoomKey /// + [JsonProperty("defaultRoomKey", NullValueHandling = NullValueHandling.Ignore)] public string DefaultRoomKey { get; set; } - [JsonProperty("roomListKey", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the RoomListKey /// + [JsonProperty("roomListKey", NullValueHandling = NullValueHandling.Ignore)] public string RoomListKey { get; set; } - [JsonProperty("sgdFile", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the SgdFile /// + [JsonProperty("sgdFile", NullValueHandling = NullValueHandling.Ignore)] public string SgdFile { get; set; } - [JsonProperty("projectName", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the ProjectName /// + [JsonProperty("projectName", NullValueHandling = NullValueHandling.Ignore)] public string ProjectName { get; set; } + /// + /// Gets or sets the ShowVolumeGauge + /// [JsonProperty("showVolumeGauge", NullValueHandling = NullValueHandling.Ignore)] public bool? ShowVolumeGauge { get; set; } + /// + /// Gets or sets the UsesSplashPage + /// [JsonProperty("usesSplashPage", NullValueHandling = NullValueHandling.Ignore)] public bool? UsesSplashPage { get; set; } + /// + /// Gets or sets the ShowDate + /// [JsonProperty("showDate", NullValueHandling = NullValueHandling.Ignore)] public bool? ShowDate { get; set; } + /// + /// Gets or sets the ShowTime + /// [JsonProperty("showTime", NullValueHandling = NullValueHandling.Ignore)] public bool? ShowTime { get; set; } - [JsonProperty("setup", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the Setup /// + [JsonProperty("setup", NullValueHandling = NullValueHandling.Ignore)] public UiSetupPropertiesConfig Setup { get; set; } - [JsonProperty("headerStyle", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the HeaderStyle /// + [JsonProperty("headerStyle", NullValueHandling = NullValueHandling.Ignore)] public string HeaderStyle { get; set; } + /// + /// Gets or sets the IncludeInFusionRoomHealth + /// [JsonProperty("includeInFusionRoomHealth", NullValueHandling = NullValueHandling.Ignore)] public bool? IncludeInFusionRoomHealth { get; set; } + /// + /// Gets or sets the ScreenSaverTimeoutMin + /// [JsonProperty("screenSaverTimeoutMin", NullValueHandling = NullValueHandling.Ignore)] public uint? ScreenSaverTimeoutMin { get; set; } + /// + /// Gets or sets the ScreenSaverMovePositionIntervalMs + /// [JsonProperty("screenSaverMovePositionIntervalMs", NullValueHandling = NullValueHandling.Ignore)] public uint? ScreenSaverMovePositionIntervalMs { get; set; } @@ -84,8 +105,15 @@ public class CrestronTouchpanelPropertiesConfig [JsonProperty("sourcesOverflowCount", NullValueHandling = NullValueHandling.Ignore)] public int? SourcesOverflowCount { get; set; } + /// + /// Constructor + /// public CrestronTouchpanelPropertiesConfig() : this(false) { } + /// + /// Constructor + /// + /// set values to default if true public CrestronTouchpanelPropertiesConfig(bool setDefaultValues = false) { if(!setDefaultValues) { return; } @@ -112,6 +140,9 @@ public CrestronTouchpanelPropertiesConfig(bool setDefaultValues = false) /// public class UiSetupPropertiesConfig { + /// + /// Gets or sets the IsVisible + /// [JsonProperty("isVisible", NullValueHandling = NullValueHandling.Ignore)] public bool IsVisible { get; set; } } diff --git a/src/PepperDash.Essentials.Core/Touchpanels/Interfaces.cs b/src/PepperDash.Essentials.Core/Touchpanels/Interfaces.cs index 6f59aba11..0e74ed93b 100644 --- a/src/PepperDash.Essentials.Core/Touchpanels/Interfaces.cs +++ b/src/PepperDash.Essentials.Core/Touchpanels/Interfaces.cs @@ -12,6 +12,9 @@ namespace PepperDash.Essentials.Core /// public interface IHasBasicTriListWithSmartObject { + /// + /// Gets the Panel + /// BasicTriListWithSmartObject Panel { get; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Touchpanels/Keyboards/HabaneroKeyboardController.cs b/src/PepperDash.Essentials.Core/Touchpanels/Keyboards/HabaneroKeyboardController.cs index b45ea649e..89346ae7a 100644 --- a/src/PepperDash.Essentials.Core/Touchpanels/Keyboards/HabaneroKeyboardController.cs +++ b/src/PepperDash.Essentials.Core/Touchpanels/Keyboards/HabaneroKeyboardController.cs @@ -27,8 +27,14 @@ public class HabaneroKeyboardController /// public StringFeedback OutputFeedback { get; private set; } + /// + /// Gets or sets the IsVisible + /// public bool IsVisible { get; private set; } + /// + /// Gets or sets the DotComButtonString + /// public string DotComButtonString { get; set; } /// @@ -441,21 +447,33 @@ void OnKeyPress(KeyboardSpecialKey key) } /// - /// + /// Event args for keyboard key presses /// public class KeyboardControllerPressEventArgs : EventArgs { + /// + /// Gets or sets the Text + /// public string Text { get; private set; } + /// /// Gets or sets the SpecialKey /// public KeyboardSpecialKey SpecialKey { get; private set; } + /// + /// Constructor + /// + /// public KeyboardControllerPressEventArgs(string text) { Text = text; } + /// + /// Constructor + /// + /// special keyboard key public KeyboardControllerPressEventArgs(KeyboardSpecialKey key) { SpecialKey = key; @@ -467,6 +485,29 @@ public KeyboardControllerPressEventArgs(KeyboardSpecialKey key) /// public enum KeyboardSpecialKey { - None = 0, Backspace, Clear, GoButton, SecondaryButton + /// + /// None + /// + None = 0, + + /// + /// Backspace + /// + Backspace, + + /// + /// Clear + /// + Clear, + + /// + /// GoButton + /// + GoButton, + + /// + /// SecondaryButton + /// + SecondaryButton } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Touchpanels/ModalDialog.cs b/src/PepperDash.Essentials.Core/Touchpanels/ModalDialog.cs index e094aebbf..e3545cd0b 100644 --- a/src/PepperDash.Essentials.Core/Touchpanels/ModalDialog.cs +++ b/src/PepperDash.Essentials.Core/Touchpanels/ModalDialog.cs @@ -113,8 +113,13 @@ public ModalDialog(BasicTriList triList) /// Shows the dialog /// /// Number of buttons to show. 0, 1, 2 - /// The amount of time to show the dialog. Use 0 for no timeout. - /// If the progress bar gauge needs to count down instead of up + /// Title text + /// Icon name + /// Message text + /// Button 1 text + /// Button 2 text + /// True to show the gauge + /// True to show the cancel "X" button /// The action to run when the dialog is dismissed. Parameter will be 1 or 2 if button pressed, or 0 if dialog times out /// True when modal is created. public bool PresentModalDialog(uint numberOfButtons, string title, string iconName, diff --git a/src/PepperDash.Essentials.Core/Touchpanels/Mpc3Touchpanel.cs b/src/PepperDash.Essentials.Core/Touchpanels/Mpc3Touchpanel.cs index fa20ca849..92764f227 100644 --- a/src/PepperDash.Essentials.Core/Touchpanels/Mpc3Touchpanel.cs +++ b/src/PepperDash.Essentials.Core/Touchpanels/Mpc3Touchpanel.cs @@ -19,6 +19,13 @@ public class Mpc3TouchpanelController : Device readonly Dictionary _buttons; + /// + /// Constructor + /// + /// device key + /// device name + /// control system processor + /// dictionary of keypad buttons public Mpc3TouchpanelController(string key, string name, CrestronControlSystem processor, Dictionary buttons) : base(key, name) { @@ -348,12 +355,21 @@ public void ListButtons() /// public class KeypadButton { + /// + /// Gets or sets the EventTypes + /// [JsonProperty("eventTypes")] public Dictionary EventTypes { get; set; } + /// + /// Gets or sets the Feedback + /// [JsonProperty("feedback")] public KeypadButtonFeedback Feedback { get; set; } + /// + /// Constructor + /// public KeypadButton() { EventTypes = new Dictionary(); @@ -361,17 +377,20 @@ public KeypadButton() } } - /// - /// Represents a KeypadButtonFeedback - /// + /// + /// Represents a KeypadButtonFeedback + /// public class KeypadButtonFeedback { + /// + /// Gets or sets the DeviceKey + /// [JsonProperty("deviceKey")] - /// - /// Gets or sets the DeviceKey - /// public string DeviceKey { get; set; } + /// + /// Gets or sets the FeedbackName + /// [JsonProperty("feedbackName")] public string FeedbackName { get; set; } } diff --git a/src/PepperDash.Essentials.Core/Touchpanels/TriListExtensions.cs b/src/PepperDash.Essentials.Core/Touchpanels/TriListExtensions.cs index 232dff336..2d026dbbe 100644 --- a/src/PepperDash.Essentials.Core/Touchpanels/TriListExtensions.cs +++ b/src/PepperDash.Essentials.Core/Touchpanels/TriListExtensions.cs @@ -44,6 +44,13 @@ public static BoolOutputSig SetBoolSigAction(this BasicTriList tl, uint sigNum, return tl.BooleanOutput[sigNum].SetBoolSigAction(a); } + /// + /// Attaches a void Action to a TriList's output sig's UserObject, to be run on press + /// + /// trilist + /// number of the signal + /// action to run when the signal is true (pressed) + /// public static BoolOutputSig SetSigTrueAction(this BasicTriList tl, uint sigNum, Action a) { return tl.BooleanOutput[sigNum].SetBoolSigAction(b => { if(b) a(); }); @@ -53,9 +60,6 @@ public static BoolOutputSig SetSigTrueAction(this BasicTriList tl, uint sigNum, /// Attaches a void Action to a TriList's output sig's UserObject, to be run on release /// /// The sig - /// - /// SetSigFalseAction method - /// public static BoolOutputSig SetSigFalseAction(this BasicTriList tl, uint sigNum, Action a) { return tl.BooleanOutput[sigNum].SetBoolSigAction(b => { if (!b) a(); }); @@ -143,43 +147,35 @@ public static BoolOutputSig SetSigHeldAction(this BasicTriList tl, uint sigNum, } /// - /// - /// + /// SetUShortSigAction method + /// /// /// /// The Sig - /// - /// SetUShortSigAction method - /// - public static UShortOutputSig SetUShortSigAction(this UShortOutputSig sig, Action a) + public static UShortOutputSig SetUShortSigAction(this UShortOutputSig sig, Action a) { sig.UserObject = a; return sig; } + /// - /// + /// SetUShortSigAction method /// /// /// /// /// - /// - /// SetUShortSigAction method - /// public static UShortOutputSig SetUShortSigAction(this BasicTriList tl, uint sigNum, Action a) { return tl.UShortOutput[sigNum].SetUShortSigAction(a); } /// - /// + /// SetStringSigAction method /// /// /// /// - /// - /// SetStringSigAction method - /// public static StringOutputSig SetStringSigAction(this StringOutputSig sig, Action a) { sig.UserObject = a; @@ -187,50 +183,50 @@ public static StringOutputSig SetStringSigAction(this StringOutputSig sig, Actio } /// - /// + /// SetStringSigAction method /// /// /// /// /// - /// - /// SetStringSigAction method - /// public static StringOutputSig SetStringSigAction(this BasicTriList tl, uint sigNum, Action a) { return tl.StringOutput[sigNum].SetStringSigAction(a); } /// - /// + /// ClearSigAction method /// /// /// - /// - /// ClearSigAction method - /// public static Sig ClearSigAction(this Sig sig) { sig.UserObject = null; return sig; } + /// + /// ClearBoolSigAction method + /// + /// trilist + /// signal number to clear + /// public static BoolOutputSig ClearBoolSigAction(this BasicTriList tl, uint sigNum) { return ClearSigAction(tl.BooleanOutput[sigNum]) as BoolOutputSig; } - /// - /// ClearUShortSigAction method - /// + /// + /// ClearUShortSigAction method + /// public static UShortOutputSig ClearUShortSigAction(this BasicTriList tl, uint sigNum) { return ClearSigAction(tl.UShortOutput[sigNum]) as UShortOutputSig; } - /// - /// ClearStringSigAction method - /// + /// + /// ClearStringSigAction method + /// public static StringOutputSig ClearStringSigAction(this BasicTriList tl, uint sigNum) { return ClearSigAction(tl.StringOutput[sigNum]) as StringOutputSig; @@ -270,9 +266,6 @@ public static void SetBool(this BasicTriList tl, uint sigNum, bool value) /// /// /// - /// - /// PulseBool method - /// public static void PulseBool(this BasicTriList tl, uint sigNum) { tl.BooleanInput[sigNum].Pulse(); @@ -284,9 +277,6 @@ public static void PulseBool(this BasicTriList tl, uint sigNum) /// /// /// - /// - /// PulseBool method - /// public static void PulseBool(this BasicTriList tl, uint sigNum, int ms) { tl.BooleanInput[sigNum].Pulse(ms); @@ -308,6 +298,13 @@ public static void SetString(this BasicTriList tl, uint sigNum, string value) tl.StringInput[sigNum].StringValue = value; } + /// + /// Helper method to set the value of a string Sig on TriList with encoding + /// + /// trilist + /// signal number to set + /// string value to set + /// string encoding to use public static void SetString(this BasicTriList tl, uint sigNum, string value, eStringEncoding encoding) { tl.StringInput[sigNum].StringEncoding = encoding; @@ -320,9 +317,6 @@ public static void SetString(this BasicTriList tl, uint sigNum, string value, eS /// /// /// - /// - /// GetBool method - /// public static bool GetBool(this BasicTriList tl, uint sigNum) { return tl.BooleanOutput[sigNum].BoolValue; @@ -334,9 +328,6 @@ public static bool GetBool(this BasicTriList tl, uint sigNum) /// /// /// - /// - /// GetUshort method - /// public static ushort GetUshort(this BasicTriList tl, uint sigNum) { return tl.UShortOutput[sigNum].UShortValue; @@ -348,9 +339,6 @@ public static ushort GetUshort(this BasicTriList tl, uint sigNum) /// /// /// - /// - /// GetString method - /// public static string GetString(this BasicTriList tl, uint sigNum) { return tl.StringOutput[sigNum].StringValue; diff --git a/src/PepperDash.Essentials.Core/TriListBridges/HandlerBridge.cs b/src/PepperDash.Essentials.Core/TriListBridges/HandlerBridge.cs index 7e887f5b2..13676e2d2 100644 --- a/src/PepperDash.Essentials.Core/TriListBridges/HandlerBridge.cs +++ b/src/PepperDash.Essentials.Core/TriListBridges/HandlerBridge.cs @@ -9,6 +9,9 @@ namespace PepperDash.Essentials.Core { + /// + /// Abstract base class for TriList handler bridges + /// public abstract class HandlerBridge { /// diff --git a/src/PepperDash.Essentials.Core/UI PageManagers/BlurayPageManager.cs b/src/PepperDash.Essentials.Core/UI PageManagers/BlurayPageManager.cs index a18d8b6e7..d14058bd0 100644 --- a/src/PepperDash.Essentials.Core/UI PageManagers/BlurayPageManager.cs +++ b/src/PepperDash.Essentials.Core/UI PageManagers/BlurayPageManager.cs @@ -10,6 +10,11 @@ public class DiscPlayerMediumPageManager : MediumLeftSwitchablePageManager { IDiscPlayerControls Player; + /// + /// Constructor + /// + /// player controls object + /// trilist object public DiscPlayerMediumPageManager(IDiscPlayerControls player, BasicTriListWithSmartObject trilist) : base(player.DisplayUiType) { @@ -17,10 +22,10 @@ public DiscPlayerMediumPageManager(IDiscPlayerControls player, BasicTriListWithS TriList = trilist; } - /// - /// Show method - /// - /// + /// + /// Show method + /// + /// public override void Show() { uint offset = GetOffsetJoin(); @@ -40,10 +45,10 @@ public override void Show() } } - /// - /// Hide method - /// - /// + /// + /// Hide method + /// + /// public override void Hide() { TriList.BooleanInput[BackingPageJoin].BoolValue = false; diff --git a/src/PepperDash.Essentials.Core/UI PageManagers/PageManager.cs b/src/PepperDash.Essentials.Core/UI PageManagers/PageManager.cs index a6f8761fc..ed5f0fff8 100644 --- a/src/PepperDash.Essentials.Core/UI PageManagers/PageManager.cs +++ b/src/PepperDash.Essentials.Core/UI PageManagers/PageManager.cs @@ -10,10 +10,19 @@ namespace PepperDash.Essentials.Core.PageManagers /// public abstract class PageManager { + /// + /// ActiveJoins list + /// protected List ActiveJoins = new List(); + /// + /// Show method + /// public abstract void Show(); + /// + /// Hide method + /// public abstract void Hide(); /// @@ -21,9 +30,6 @@ public abstract class PageManager /// /// 1 through 49, as defined in some constants somewhere! /// - /// - /// GetOffsetJoin method - /// public uint GetOffsetJoin(uint deviceType) { return 10000 + (deviceType * 100); @@ -38,30 +44,40 @@ public class DefaultPageManager : PageManager BasicTriList TriList; uint BackingPageJoin; + /// + /// Constructor + /// + /// device + /// trilist object public DefaultPageManager(IUiDisplayInfo device, BasicTriList trilist) { TriList = trilist; BackingPageJoin = GetOffsetJoin(device.DisplayUiType) + 1; } + /// + /// Constructor + /// + /// back page join + /// trilist object public DefaultPageManager(uint join, BasicTriList trilist) { TriList = trilist; BackingPageJoin = join; } - /// - /// Show method - /// - /// + /// + /// Show method + /// + /// public override void Show() { TriList.BooleanInput[BackingPageJoin].BoolValue = true; } - /// - /// Hide method - /// + /// + /// Hide method + /// public override void Hide() { TriList.BooleanInput[BackingPageJoin].BoolValue = false; @@ -73,17 +89,44 @@ public override void Hide() /// public abstract class MediumLeftSwitchablePageManager : PageManager { + /// + /// TriList object + /// protected BasicTriListWithSmartObject TriList; + + /// + /// Left subpage join + /// protected uint LeftSubpageJoin; + + /// + /// Backing page join + /// protected uint BackingPageJoin; + + /// + /// All left subpages + /// protected uint[] AllLeftSubpages; + + /// + /// Display UI Type + /// protected uint DisplayUiType; + /// + /// Constructor + /// + /// UI type protected MediumLeftSwitchablePageManager(uint displayUiType) { DisplayUiType = displayUiType; } + /// + /// Interlock left subpage + /// + /// protected void InterlockLeftSubpage(uint join) { join = join + GetOffsetJoin(); @@ -92,12 +135,19 @@ protected void InterlockLeftSubpage(uint join) LeftSubpageJoin = join; } + /// + /// Clear left interlock + /// protected void ClearLeftInterlock() { foreach (var p in AllLeftSubpages) TriList.BooleanInput[GetOffsetJoin() + p].BoolValue = false; } + /// + /// Get offset join + /// + /// protected uint GetOffsetJoin() { return GetOffsetJoin(DisplayUiType); diff --git a/src/PepperDash.Essentials.Core/UI PageManagers/SetTopBoxThreePanelPageManager.cs b/src/PepperDash.Essentials.Core/UI PageManagers/SetTopBoxThreePanelPageManager.cs index 7c78464e2..338f47dcf 100644 --- a/src/PepperDash.Essentials.Core/UI PageManagers/SetTopBoxThreePanelPageManager.cs +++ b/src/PepperDash.Essentials.Core/UI PageManagers/SetTopBoxThreePanelPageManager.cs @@ -9,16 +9,19 @@ namespace PepperDash.Essentials.Core.PageManagers { - /// - /// Represents a ThreePanelPlusOnePageManager - /// + /// + /// Represents a ThreePanelPlusOnePageManager + /// public class ThreePanelPlusOnePageManager : PageManager { + /// + /// The trilist + /// protected BasicTriListWithSmartObject TriList; - /// - /// Gets or sets the Position5TabsId - /// + /// + /// Gets or sets the Position5TabsId + /// public uint Position5TabsId { get; set; } /// @@ -32,12 +35,12 @@ public class ThreePanelPlusOnePageManager : PageManager protected uint[] FixedVisibilityJoins; /// - /// + /// Gets or sets the current visible item in position 5 /// protected uint CurrentVisiblePosition5Item; /// - /// + /// Constructor /// /// public ThreePanelPlusOnePageManager(BasicTriListWithSmartObject trilist) @@ -85,10 +88,10 @@ void tabSo_SigChange(Crestron.SimplSharpPro.GenericBase currentDevice, Crestron. (uo as Action)(args.Sig.BoolValue); } - /// - /// Hide method - /// - /// + /// + /// Hide method + /// + /// public override void Hide() { var fixedSigs = FixedVisibilityJoins.Select(u => TriList.BooleanInput[u]).ToList(); @@ -119,25 +122,27 @@ void ShowTab(uint number) - /// - /// Represents a SetTopBoxThreePanelPageManager - /// + /// + /// Represents a SetTopBoxThreePanelPageManager + /// public class SetTopBoxThreePanelPageManager : ThreePanelPlusOnePageManager { ISetTopBoxControls SetTopBox; DevicePresetsView PresetsView; - /// - /// Gets or sets the DpadSmartObjectId - /// + /// + /// Gets or sets the DpadSmartObjectId + /// public uint DpadSmartObjectId { get; set; } - /// - /// Gets or sets the NumberPadSmartObjectId - /// + + /// + /// Gets or sets the NumberPadSmartObjectId + /// public uint NumberPadSmartObjectId { get; set; } - /// - /// Gets or sets the PresetsSmartObjectId - /// + + /// + /// Gets or sets the PresetsSmartObjectId + /// public uint PresetsSmartObjectId { get; set; } /// @@ -198,10 +203,10 @@ public SetTopBoxThreePanelPageManager(ISetTopBoxControls stb, BasicTriListWithSm } } - /// - /// Show method - /// - /// + /// + /// Show method + /// + /// public override void Show() { if(PresetsView != null) @@ -209,10 +214,10 @@ public override void Show() base.Show(); } - /// - /// Hide method - /// - /// + /// + /// Hide method + /// + /// public override void Hide() { if (PresetsView != null) diff --git a/src/PepperDash.Essentials.Core/UI PageManagers/SetTopBoxTwoPanelPageManager.cs b/src/PepperDash.Essentials.Core/UI PageManagers/SetTopBoxTwoPanelPageManager.cs index 73465e578..0e5b520af 100644 --- a/src/PepperDash.Essentials.Core/UI PageManagers/SetTopBoxTwoPanelPageManager.cs +++ b/src/PepperDash.Essentials.Core/UI PageManagers/SetTopBoxTwoPanelPageManager.cs @@ -4,14 +4,19 @@ namespace PepperDash.Essentials.Core.PageManagers { - /// - /// Represents a SetTopBoxMediumPageManager - /// + /// + /// Represents a SetTopBoxMediumPageManager + /// public class SetTopBoxMediumPageManager : MediumLeftSwitchablePageManager { ISetTopBoxControls SetTopBox; DevicePresetsView PresetsView; + /// + /// Constructor + /// + /// set top box controls device + /// trilist device public SetTopBoxMediumPageManager(ISetTopBoxControls stb, BasicTriListWithSmartObject trilist) : base(stb.DisplayUiType) { @@ -21,10 +26,10 @@ public SetTopBoxMediumPageManager(ISetTopBoxControls stb, BasicTriListWithSmartO PresetsView = new DevicePresetsView(trilist, stb.TvPresets); } - /// - /// Show method - /// - /// + /// + /// Show method + /// + /// public override void Show() { if(PresetsView != null) @@ -54,10 +59,10 @@ public override void Show() } } - /// - /// Hide method - /// - /// + /// + /// Hide method + /// + /// public override void Hide() { TriList.BooleanInput[BackingPageJoin].BoolValue = false; diff --git a/src/PepperDash.Essentials.Core/UI PageManagers/SinglePageManager.cs b/src/PepperDash.Essentials.Core/UI PageManagers/SinglePageManager.cs index 4438e89d9..3eb0cf80d 100644 --- a/src/PepperDash.Essentials.Core/UI PageManagers/SinglePageManager.cs +++ b/src/PepperDash.Essentials.Core/UI PageManagers/SinglePageManager.cs @@ -4,32 +4,37 @@ namespace PepperDash.Essentials.Core.PageManagers { - /// - /// Represents a SinglePageManager - /// + /// + /// Represents a SinglePageManager + /// public class SinglePageManager : PageManager { BasicTriList TriList; uint BackingPageJoin; + /// + /// Constructor + /// + /// join for thepage + /// trilist public SinglePageManager(uint pageJoin, BasicTriList trilist) { TriList = trilist; BackingPageJoin = pageJoin; } - /// - /// Show method - /// - /// + /// + /// Show method + /// + /// public override void Show() { TriList.BooleanInput[BackingPageJoin].BoolValue = true; } - /// - /// Hide method - /// + /// + /// Hide method + /// public override void Hide() { TriList.BooleanInput[BackingPageJoin].BoolValue = false; diff --git a/src/PepperDash.Essentials.Core/Utilities/ActionSequence.cs b/src/PepperDash.Essentials.Core/Utilities/ActionSequence.cs index cc83f1714..22c9297c3 100644 --- a/src/PepperDash.Essentials.Core/Utilities/ActionSequence.cs +++ b/src/PepperDash.Essentials.Core/Utilities/ActionSequence.cs @@ -30,6 +30,11 @@ public class ActionSequence : EssentialsDevice private bool _allowActionsToExecute; + /// + /// Constructor + /// + /// + /// public ActionSequence(string key, DeviceConfig config) : base(key, config.Name) { @@ -126,9 +131,15 @@ private void ExecuteAction(DeviceActionWrapper action) /// public class ActionSequencePropertiesConfig { + /// + /// Gets or sets the ActionSequence + /// [JsonProperty("actionSequence")] public List ActionSequence { get; set; } + /// + /// Constructor + /// public ActionSequencePropertiesConfig() { ActionSequence = new List(); @@ -140,10 +151,10 @@ public ActionSequencePropertiesConfig() /// public class SequencedDeviceActionWrapper : DeviceActionWrapper { - [JsonProperty("delayMs")] /// /// Gets or sets the DelayMs /// + [JsonProperty("delayMs")] public int DelayMs { get; set; } } @@ -152,11 +163,19 @@ public class SequencedDeviceActionWrapper : DeviceActionWrapper /// public class ActionSequenceFactory : EssentialsDeviceFactory { + /// + /// Constructor + /// public ActionSequenceFactory() { TypeNames = new List() { "actionsequence" }; } + /// + /// BuildDevice method + /// + /// device config + /// public override EssentialsDevice BuildDevice(DeviceConfig dc) { Debug.LogMessage(LogEventLevel.Debug, "Factory Attempting to create new ActionSequence Device"); diff --git a/src/PepperDash.Essentials.Core/VideoStatus/VideoStatusOutputs.cs b/src/PepperDash.Essentials.Core/VideoStatus/VideoStatusOutputs.cs index 9a9292342..b5151f79f 100644 --- a/src/PepperDash.Essentials.Core/VideoStatus/VideoStatusOutputs.cs +++ b/src/PepperDash.Essentials.Core/VideoStatus/VideoStatusOutputs.cs @@ -14,12 +14,34 @@ namespace PepperDash.Essentials.Core /// public class VideoStatusFuncsWrapper { + /// + /// Gets or sets the HasVideoStatusFunc + /// public Func HasVideoStatusFunc { get; set; } + + /// + /// Gets or sets the HdcpActiveFeedbackFunc + /// public Func HdcpActiveFeedbackFunc { get; set; } + + /// + /// Gets or sets the HdcpStateFeedbackFunc + /// public Func HdcpStateFeedbackFunc { get; set; } + + /// + /// Gets or sets the VideoResolutionFeedbackFunc + /// public Func VideoResolutionFeedbackFunc { get; set; } + + /// + /// Gets or sets the VideoSyncFeedbackFunc + /// public Func VideoSyncFeedbackFunc { get; set; } + /// + /// Constructor + /// public VideoStatusFuncsWrapper() { HasVideoStatusFunc = () => true; @@ -30,32 +52,50 @@ public VideoStatusFuncsWrapper() } } - /// - /// Represents a VideoStatusOutputs - /// + /// + /// Represents a VideoStatusOutputs + /// public class VideoStatusOutputs { - /// - /// Gets or sets the HasVideoStatusFeedback - /// + /// + /// Gets or sets the HasVideoStatusFeedback + /// public BoolFeedback HasVideoStatusFeedback { get; private set; } - /// - /// Gets or sets the HdcpActiveFeedback - /// + + /// + /// Gets or sets the HdcpActiveFeedback + /// public BoolFeedback HdcpActiveFeedback { get; private set; } + + /// + /// Gets or sets the HdcpStateFeedback + /// public StringFeedback HdcpStateFeedback { get; private set; } + + /// + /// Gets or sets the VideoResolutionFeedback + /// public StringFeedback VideoResolutionFeedback { get; private set; } + + /// + /// Gets or sets the VideoSyncFeedback + /// public BoolFeedback VideoSyncFeedback { get; private set; } - /// - /// Gets or sets the NoStatus - /// + /// + /// Gets or sets the NoStatus + /// public static VideoStatusOutputs NoStatus { get { return _Default; } } + static VideoStatusOutputs _Default = new VideoStatusOutputs(new VideoStatusFuncsWrapper { HasVideoStatusFunc = () => false }); + /// + /// Constructor + /// + /// public VideoStatusOutputs(VideoStatusFuncsWrapper funcs) { HasVideoStatusFeedback = new BoolFeedback("HasVideoStatusFeedback", funcs.HasVideoStatusFunc); @@ -66,9 +106,9 @@ public VideoStatusOutputs(VideoStatusFuncsWrapper funcs) VideoSyncFeedback = new BoolFeedback("VideoSyncFeedback", funcs.VideoSyncFeedbackFunc); } - /// - /// FireAll method - /// + /// + /// FireAll method + /// public void FireAll() { HasVideoStatusFeedback.FireUpdate(); @@ -78,9 +118,9 @@ public void FireAll() VideoSyncFeedback.FireUpdate(); } - /// - /// ToList method - /// + /// + /// ToList method + /// public List ToList() { return new List @@ -94,9 +134,9 @@ public List ToList() } } - /// - /// Wraps up the common video statuses exposed on a video input port - /// + // /// + // /// Wraps up the common video statuses exposed on a video input port + // /// //public class BasicVideoStatus : IBasicVideoStatus //{ // public event VideoStatusChangeHandler VideoStatusChange; diff --git a/src/PepperDash.Essentials.Core/Web/EssentialsWebApiFactory.cs b/src/PepperDash.Essentials.Core/Web/EssentialsWebApiFactory.cs index 49a7eb802..16abd349f 100644 --- a/src/PepperDash.Essentials.Core/Web/EssentialsWebApiFactory.cs +++ b/src/PepperDash.Essentials.Core/Web/EssentialsWebApiFactory.cs @@ -10,15 +10,18 @@ namespace PepperDash.Essentials.Core.Web /// public class EssentialsWebApiFactory : EssentialsDeviceFactory { + /// + /// Constructor + /// public EssentialsWebApiFactory() { TypeNames = new List { "EssentialsWebApi" }; } - /// - /// BuildDevice method - /// - /// + /// + /// BuildDevice method + /// + /// public override EssentialsDevice BuildDevice(DeviceConfig dc) { Debug.LogMessage(LogEventLevel.Debug, "Factory Attempting to create new Essentials Web API Server"); diff --git a/src/PepperDash.Essentials.Core/Web/EssentialsWebApiHelpers.cs b/src/PepperDash.Essentials.Core/Web/EssentialsWebApiHelpers.cs index b9411a35a..75f901895 100644 --- a/src/PepperDash.Essentials.Core/Web/EssentialsWebApiHelpers.cs +++ b/src/PepperDash.Essentials.Core/Web/EssentialsWebApiHelpers.cs @@ -7,11 +7,14 @@ namespace PepperDash.Essentials.Core.Web { + /// + /// EssentialsWebApiHelpers class + /// public static class EssentialsWebApiHelpers { - /// - /// GetRequestBody method - /// + /// + /// GetRequestBody method + /// public static string GetRequestBody(this HttpCwsRequest request) { var bytes = new byte[request.ContentLength]; @@ -21,9 +24,9 @@ public static string GetRequestBody(this HttpCwsRequest request) return Encoding.UTF8.GetString(bytes, 0, bytes.Length); } - /// - /// MapToAssemblyObject method - /// + /// + /// MapToAssemblyObject method + /// public static object MapToAssemblyObject(LoadedAssembly assembly) { return new @@ -33,9 +36,9 @@ public static object MapToAssemblyObject(LoadedAssembly assembly) }; } - /// - /// MapToDeviceListObject method - /// + /// + /// MapToDeviceListObject method + /// public static object MapToDeviceListObject(IKeyed device) { return new @@ -47,9 +50,9 @@ public static object MapToDeviceListObject(IKeyed device) }; } - /// - /// MapJoinToObject method - /// + /// + /// MapJoinToObject method + /// public static object MapJoinToObject(string key, JoinMapBaseAdvanced join) { var kp = new KeyValuePair(key, join); @@ -57,9 +60,9 @@ public static object MapJoinToObject(string key, JoinMapBaseAdvanced join) return MapJoinToObject(kp); } - /// - /// MapJoinToObject method - /// + /// + /// MapJoinToObject method + /// public static object MapJoinToObject(KeyValuePair join) { return new @@ -69,9 +72,9 @@ public static object MapJoinToObject(KeyValuePair j }; } - /// - /// MapJoinDataCompleteToObject method - /// + /// + /// MapJoinDataCompleteToObject method + /// public static object MapJoinDataCompleteToObject(KeyValuePair joinData) { return new @@ -85,9 +88,9 @@ public static object MapJoinDataCompleteToObject(KeyValuePair - /// MapDeviceTypeToObject method - /// + /// + /// MapDeviceTypeToObject method + /// public static object MapDeviceTypeToObject(string key, DeviceFactoryWrapper device) { var kp = new KeyValuePair(key, device); @@ -95,9 +98,9 @@ public static object MapDeviceTypeToObject(string key, DeviceFactoryWrapper devi return MapDeviceTypeToObject(kp); } - /// - /// MapDeviceTypeToObject method - /// + /// + /// MapDeviceTypeToObject method + /// public static object MapDeviceTypeToObject(KeyValuePair device) { return new diff --git a/src/PepperDash.Essentials.Core/Web/EssentialsWebApiPropertiesConfig.cs b/src/PepperDash.Essentials.Core/Web/EssentialsWebApiPropertiesConfig.cs index c20aa07ad..9c00fd930 100644 --- a/src/PepperDash.Essentials.Core/Web/EssentialsWebApiPropertiesConfig.cs +++ b/src/PepperDash.Essentials.Core/Web/EssentialsWebApiPropertiesConfig.cs @@ -2,15 +2,15 @@ namespace PepperDash.Essentials.Core.Web { - /// - /// Represents a EssentialsWebApiPropertiesConfig - /// + /// + /// Represents a EssentialsWebApiPropertiesConfig + /// public class EssentialsWebApiPropertiesConfig { + /// + /// Gets or sets the BasePath + /// [JsonProperty("basePath")] - /// - /// Gets or sets the BasePath - /// public string BasePath { get; set; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/AppDebugRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/AppDebugRequestHandler.cs index ac95525ea..3d3302cc6 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/AppDebugRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/AppDebugRequestHandler.cs @@ -80,16 +80,16 @@ protected override void HandlePost(HttpCwsContext context) } } - /// - /// Represents a AppDebug - /// + /// + /// Represents a AppDebug + /// public class AppDebug { - [JsonProperty("minimumLevel", NullValueHandling = NullValueHandling.Ignore)] - [JsonConverter(typeof(StringEnumConverter))] /// /// Gets or sets the MinimumLevel /// + [JsonProperty("minimumLevel", NullValueHandling = NullValueHandling.Ignore)] + [JsonConverter(typeof(StringEnumConverter))] public LogEventLevel MinimumLevel { get; set; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DebugSessionRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DebugSessionRequestHandler.cs index e7d0c69c8..01e388344 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DebugSessionRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DebugSessionRequestHandler.cs @@ -18,6 +18,9 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers /// public class DebugSessionRequestHandler : WebApiBaseRequestHandler { + /// + /// Constructor + /// public DebugSessionRequestHandler() : base(true) { diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DoNotLoadConfigOnNextBootRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DoNotLoadConfigOnNextBootRequestHandler.cs index 5c17e342f..593ce4e71 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DoNotLoadConfigOnNextBootRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DoNotLoadConfigOnNextBootRequestHandler.cs @@ -5,9 +5,9 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers { - /// - /// Represents a DoNotLoadConfigOnNextBootRequestHandler - /// + /// + /// Represents a DoNotLoadConfigOnNextBootRequestHandler + /// public class DoNotLoadConfigOnNextBootRequestHandler : WebApiBaseRequestHandler { /// @@ -79,15 +79,15 @@ protected override void HandlePost(HttpCwsContext context) } } - /// - /// Represents a Data - /// + /// + /// Represents a Data + /// public class Data { + /// + /// Gets or sets the DoNotLoadConfigOnNextBoot + /// [JsonProperty("doNotLoadConfigOnNextBoot", NullValueHandling = NullValueHandling.Ignore)] - /// - /// Gets or sets the DoNotLoadConfigOnNextBoot - /// public bool DoNotLoadConfigOnNextBoot { get; set; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetRoutesHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetRoutesHandler.cs index cc450e117..bd264a7af 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetRoutesHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetRoutesHandler.cs @@ -13,11 +13,20 @@ public class GetRoutesHandler:WebApiBaseRequestHandler private HttpCwsRouteCollection routeCollection; private string basePath; + /// + /// Constructor + /// + /// + /// public GetRoutesHandler(HttpCwsRouteCollection routeCollection, string basePath) { this.routeCollection = routeCollection; this.basePath = basePath; } + /// + /// Handles GET method requests + /// + /// protected override void HandleGet(HttpCwsContext context) { var currentIp = CrestronEthernetHelper.GetEthernetParameter( @@ -49,16 +58,16 @@ protected override void HandleGet(HttpCwsContext context) /// public class RoutesResponseObject { - [JsonProperty("url")] /// /// Gets or sets the Url /// + [JsonProperty("url")] public string Url { set; get; } - [JsonProperty("routes")] /// /// Gets or sets the Routes /// + [JsonProperty("routes")] public HttpCwsRouteCollection Routes { get; set; } } } diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetRoutingPortsHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetRoutingPortsHandler.cs index f11e6dd25..8cee7e9e0 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetRoutingPortsHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetRoutingPortsHandler.cs @@ -12,8 +12,15 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers /// public class GetRoutingPortsHandler : WebApiBaseRequestHandler { + /// + /// Constructor + /// public GetRoutingPortsHandler() : base(true) { } + /// + /// Handles the GET request + /// + /// protected override void HandleGet(HttpCwsContext context) { var routeData = context.Request.RouteData; @@ -63,17 +70,18 @@ protected override void HandleGet(HttpCwsContext context) } } - internal class ReturnValue { - [JsonProperty("inputPorts", NullValueHandling = NullValueHandling.Ignore)] + internal class ReturnValue + { /// /// Gets or sets the InputPorts /// + [JsonProperty("inputPorts", NullValueHandling = NullValueHandling.Ignore)] public List InputPorts { get; set; } - [JsonProperty("outputPorts", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the OutputPorts /// + [JsonProperty("outputPorts", NullValueHandling = NullValueHandling.Ignore)] public List OutputPorts { get; set; } } } diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetTieLinesRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetTieLinesRequestHandler.cs index bc6fb6237..f7088cb2b 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetTieLinesRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetTieLinesRequestHandler.cs @@ -11,8 +11,15 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers /// public class GetTieLinesRequestHandler : WebApiBaseRequestHandler { + /// + /// Constructor + /// public GetTieLinesRequestHandler() : base(true) { } + /// + /// Handles the GET request + /// + /// protected override void HandleGet(HttpCwsContext context) { var tieLineString = JsonConvert.SerializeObject(TieLineCollection.Default.Select((tl) => new diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/SetDeviceStreamDebugRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/SetDeviceStreamDebugRequestHandler.cs index 7c6aea26a..dd4f416fe 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/SetDeviceStreamDebugRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/SetDeviceStreamDebugRequestHandler.cs @@ -195,26 +195,32 @@ protected override void HandleTrace(HttpCwsContext context) } + /// + /// Configuration class for SetDeviceStreamDebugRequestHandler + /// public class SetDeviceStreamDebugConfig { - [JsonProperty("deviceKey", NullValueHandling = NullValueHandling.Include)] /// /// Gets or sets the DeviceKey /// + [JsonProperty("deviceKey", NullValueHandling = NullValueHandling.Include)] public string DeviceKey { get; set; } - [JsonProperty("setting", NullValueHandling = NullValueHandling.Include)] /// /// Gets or sets the Setting /// + [JsonProperty("setting", NullValueHandling = NullValueHandling.Include)] public string Setting { get; set; } - [JsonProperty("timeout")] /// /// Gets or sets the Timeout /// + [JsonProperty("timeout")] public int Timeout { get; set; } + /// + /// Constructor + /// public SetDeviceStreamDebugConfig() { DeviceKey = null; diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/CameraSelectedEventArgs.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/CameraSelectedEventArgs.cs index bb2a85a25..b96a9b3f9 100644 --- a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/CameraSelectedEventArgs.cs +++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/CameraSelectedEventArgs.cs @@ -12,6 +12,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras [Obsolete("Use CameraSelectedEventArgs instead. This class will be removed in a future version")] public class CameraSelectedEventArgs : EventArgs { + /// /// Gets or sets the SelectedCamera /// public CameraBase SelectedCamera { get; private set; } diff --git a/src/PepperDash.Essentials.Devices.Common/DSP/DspBase.cs b/src/PepperDash.Essentials.Devices.Common/DSP/DspBase.cs index e20abc9c3..051f3b1ab 100644 --- a/src/PepperDash.Essentials.Devices.Common/DSP/DspBase.cs +++ b/src/PepperDash.Essentials.Devices.Common/DSP/DspBase.cs @@ -61,13 +61,18 @@ public DspBase(string key, string name) : /// /// Base class for DSP control points /// - public abstract class DspControlPoint : IKeyed + public abstract class DspControlPoint : IKeyName { /// /// Gets or sets the Key /// public string Key { get; } + /// + /// Gets or sets the Name + /// + public string Name { get; private set; } + /// /// Initializes a new instance of the DspControlPoint class /// diff --git a/src/PepperDash.Essentials.Devices.Common/Displays/ScreenLiftController.cs b/src/PepperDash.Essentials.Devices.Common/Displays/ScreenLiftController.cs index 9163c2a32..80c1f8ee6 100644 --- a/src/PepperDash.Essentials.Devices.Common/Displays/ScreenLiftController.cs +++ b/src/PepperDash.Essentials.Devices.Common/Displays/ScreenLiftController.cs @@ -1,15 +1,27 @@ using System; using System.Collections.Generic; +using System.Timers; using Crestron.SimplSharp; using PepperDash.Core; +using PepperDash.Core.Logging; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.CrestronIO; using PepperDash.Essentials.Core.DeviceTypeInterfaces; -using Serilog.Events; +using PepperDash.Essentials.Devices.Common.Displays; namespace PepperDash.Essentials.Devices.Common.Shades { + /// + /// Enumeration for requested state + /// + enum RequestedState + { + None, + Raise, + Lower, + } + /// /// Controls a single shade using three relays /// @@ -20,11 +32,16 @@ public class ScreenLiftController : EssentialsDevice, IProjectorScreenLiftContro readonly ScreenLiftRelaysConfig LowerRelayConfig; readonly ScreenLiftRelaysConfig LatchedRelayConfig; - Displays.DisplayBase DisplayDevice; + DisplayBase DisplayDevice; ISwitchedOutput RaiseRelay; ISwitchedOutput LowerRelay; ISwitchedOutput LatchedRelay; + private bool _isMoving; + private RequestedState _requestedState; + private RequestedState _currentMovement; + private Timer _movementTimer; + /// /// Gets or sets the InUpPosition /// @@ -33,7 +50,8 @@ public bool InUpPosition get { return _isInUpPosition; } set { - if (value == _isInUpPosition) return; + if (value == _isInUpPosition) + return; _isInUpPosition = value; IsInUpPosition.FireUpdate(); PositionChanged?.Invoke(this, new EventArgs()); @@ -70,7 +88,11 @@ public bool InUpPosition /// /// Constructor for ScreenLiftController /// - public ScreenLiftController(string key, string name, ScreenLiftControllerConfigProperties config) + public ScreenLiftController( + string key, + string name, + ScreenLiftControllerConfigProperties config + ) : base(key, name) { Config = config; @@ -80,30 +102,68 @@ public ScreenLiftController(string key, string name, ScreenLiftControllerConfigP IsInUpPosition = new BoolFeedback("isInUpPosition", () => _isInUpPosition); + // Initialize movement timer for reuse + _movementTimer = new Timer(); + _movementTimer.Elapsed += OnMovementComplete; + _movementTimer.AutoReset = false; + switch (Mode) { case eScreenLiftControlMode.momentary: - { - RaiseRelayConfig = Config.Relays["raise"]; - LowerRelayConfig = Config.Relays["lower"]; - break; - } + { + RaiseRelayConfig = Config.Relays["raise"]; + LowerRelayConfig = Config.Relays["lower"]; + break; + } case eScreenLiftControlMode.latched: - { - LatchedRelayConfig = Config.Relays["latched"]; - break; - } + { + LatchedRelayConfig = Config.Relays["latched"]; + break; + } } + + IsInUpPosition.OutputChange += (sender, args) => + { + this.LogDebug( + "ScreenLiftController '{name}' IsInUpPosition changed to {position}", + Name, + IsInUpPosition.BoolValue ? "Up" : "Down" + ); + + if (!Config.MuteOnScreenUp) + { + return; + } + + if (args.BoolValue) + { + return; + } + + if (DisplayDevice is IBasicVideoMuteWithFeedback videoMute) + { + this.LogInformation("Unmuting video because screen is down"); + videoMute.VideoMuteOff(); + } + }; + + IsInUpPosition.FireUpdate(); } private void IsCoolingDownFeedback_OutputChange(object sender, FeedbackEventArgs e) { - if (!DisplayDevice.IsCoolingDownFeedback.BoolValue && Type == eScreenLiftControlType.lift) + if ( + !DisplayDevice.IsCoolingDownFeedback.BoolValue + && Type == eScreenLiftControlType.lift + ) { Raise(); return; } - if (DisplayDevice.IsCoolingDownFeedback.BoolValue && Type == eScreenLiftControlType.screen) + if ( + DisplayDevice.IsCoolingDownFeedback.BoolValue + && Type == eScreenLiftControlType.screen + ) { Raise(); return; @@ -128,29 +188,30 @@ public override bool CustomActivate() switch (Mode) { case eScreenLiftControlMode.momentary: - { - Debug.LogMessage(LogEventLevel.Debug, this, $"Getting relays for {Mode}"); - RaiseRelay = GetSwitchedOutputFromDevice(RaiseRelayConfig.DeviceKey); - LowerRelay = GetSwitchedOutputFromDevice(LowerRelayConfig.DeviceKey); - break; - } + { + this.LogDebug("Getting relays for {mode}", Mode); + RaiseRelay = GetSwitchedOutputFromDevice(RaiseRelayConfig.DeviceKey); + LowerRelay = GetSwitchedOutputFromDevice(LowerRelayConfig.DeviceKey); + break; + } case eScreenLiftControlMode.latched: - { - Debug.LogMessage(LogEventLevel.Debug, this, $"Getting relays for {Mode}"); - LatchedRelay = GetSwitchedOutputFromDevice(LatchedRelayConfig.DeviceKey); - break; - } + { + this.LogDebug("Getting relays for {mode}", Mode); + LatchedRelay = GetSwitchedOutputFromDevice(LatchedRelayConfig.DeviceKey); + break; + } } - Debug.LogMessage(LogEventLevel.Debug, this, $"Getting display with key {DisplayDeviceKey}"); + this.LogDebug("Getting display with key {displayKey}", DisplayDeviceKey); DisplayDevice = GetDisplayBaseFromDevice(DisplayDeviceKey); if (DisplayDevice != null) { - Debug.LogMessage(LogEventLevel.Debug, this, $"Subscribing to {DisplayDeviceKey} feedbacks"); + this.LogDebug("Subscribing to {displayKey} feedbacks", DisplayDeviceKey); DisplayDevice.IsWarmingUpFeedback.OutputChange += IsWarmingUpFeedback_OutputChange; - DisplayDevice.IsCoolingDownFeedback.OutputChange += IsCoolingDownFeedback_OutputChange; + DisplayDevice.IsCoolingDownFeedback.OutputChange += + IsCoolingDownFeedback_OutputChange; } return base.CustomActivate(); @@ -161,24 +222,58 @@ public override bool CustomActivate() /// public void Raise() { - if (RaiseRelay == null && LatchedRelay == null) return; + if (RaiseRelay == null && LatchedRelay == null) + return; + + this.LogDebug("Raise called for {type}", Type); + + if (Config.MuteOnScreenUp && DisplayDevice is IBasicVideoMuteWithFeedback videoMute) + { + this.LogInformation("Muting video because screen is going up"); + videoMute.VideoMuteOn(); + } + + // If device is moving, bank the command + if (_isMoving) + { + this.LogDebug("Device is moving, banking Raise command"); + _requestedState = RequestedState.Raise; + return; + } - Debug.LogMessage(LogEventLevel.Debug, this, $"Raising {Type}"); + this.LogDebug("Raising {type}", Type); switch (Mode) { case eScreenLiftControlMode.momentary: + { + PulseOutput(RaiseRelay, RaiseRelayConfig.PulseTimeInMs); + + // Set moving flag and start timer if movement time is configured + if (RaiseRelayConfig.MoveTimeInMs > 0) { - PulseOutput(RaiseRelay, RaiseRelayConfig.PulseTimeInMs); - break; + _isMoving = true; + _currentMovement = RequestedState.Raise; + if (_movementTimer.Enabled) + { + _movementTimer.Stop(); + } + _movementTimer.Interval = RaiseRelayConfig.MoveTimeInMs; + _movementTimer.Start(); } - case eScreenLiftControlMode.latched: + else { - LatchedRelay.Off(); - break; + InUpPosition = true; } + break; + } + case eScreenLiftControlMode.latched: + { + LatchedRelay.Off(); + InUpPosition = true; + break; + } } - InUpPosition = true; } /// @@ -186,73 +281,162 @@ public void Raise() /// public void Lower() { - if (LowerRelay == null && LatchedRelay == null) return; + if (LowerRelay == null && LatchedRelay == null) + return; - Debug.LogMessage(LogEventLevel.Debug, this, $"Lowering {Type}"); + this.LogDebug("Lower called for {type}", Type); + + // If device is moving, bank the command + if (_isMoving) + { + this.LogDebug("Device is moving, banking Lower command"); + _requestedState = RequestedState.Lower; + return; + } + + this.LogDebug("Lowering {type}", Type); switch (Mode) { case eScreenLiftControlMode.momentary: + { + PulseOutput(LowerRelay, LowerRelayConfig.PulseTimeInMs); + + // Set moving flag and start timer if movement time is configured + if (LowerRelayConfig.MoveTimeInMs > 0) { - PulseOutput(LowerRelay, LowerRelayConfig.PulseTimeInMs); - break; + _isMoving = true; + _currentMovement = RequestedState.Lower; + if (_movementTimer.Enabled) + { + _movementTimer.Stop(); + } + _movementTimer.Interval = LowerRelayConfig.MoveTimeInMs; + _movementTimer.Start(); } - case eScreenLiftControlMode.latched: + else { - LatchedRelay.On(); - break; + InUpPosition = false; } + break; + } + case eScreenLiftControlMode.latched: + { + LatchedRelay.On(); + InUpPosition = false; + break; + } } - InUpPosition = false; } - void PulseOutput(ISwitchedOutput output, int pulseTime) + private void DisposeMovementTimer() { - output.On(); - CTimer pulseTimer = new CTimer(new CTimerCallbackFunction((o) => output.Off()), pulseTime); + if (_movementTimer != null) + { + _movementTimer.Stop(); + _movementTimer.Elapsed -= OnMovementComplete; + _movementTimer.Dispose(); + _movementTimer = null; + } } /// - /// Attempts to get the port on teh specified device from config + /// Called when movement timer completes /// - /// - /// - ISwitchedOutput GetSwitchedOutputFromDevice(string relayKey) + private void OnMovementComplete(object sender, ElapsedEventArgs e) + { + this.LogDebug("Movement complete"); + + // Update position based on completed movement + if (_currentMovement == RequestedState.Raise) + { + InUpPosition = true; + } + else if (_currentMovement == RequestedState.Lower) + { + InUpPosition = false; + } + + _isMoving = false; + _currentMovement = RequestedState.None; + + // Execute banked command if one exists + if (_requestedState != RequestedState.None) + { + this.LogDebug("Executing next command: {command}", _requestedState); + + var commandToExecute = _requestedState; + _requestedState = RequestedState.None; + + // Check if current state matches what the banked command would do and execute if different + switch (commandToExecute) + { + case RequestedState.Raise: + Raise(); + break; + + case RequestedState.Lower: + Lower(); + break; + } + } + } + + private void PulseOutput(ISwitchedOutput output, int pulseTime) { - var portDevice = DeviceManager.GetDeviceForKey(relayKey); + output.On(); + + var timer = new Timer(pulseTime) { AutoReset = false }; + + timer.Elapsed += (sender, e) => + { + output.Off(); + timer.Dispose(); + }; + timer.Start(); + } + + private ISwitchedOutput GetSwitchedOutputFromDevice(string relayKey) + { + var portDevice = DeviceManager.GetDeviceForKey(relayKey); if (portDevice != null) { - return portDevice as ISwitchedOutput; + return portDevice; } else { - Debug.LogMessage(LogEventLevel.Debug, this, "Error: Unable to get relay device with key '{0}'", relayKey); + this.LogWarning( + "Error: Unable to get relay device with key '{relayKey}'", + relayKey + ); return null; } } - Displays.DisplayBase GetDisplayBaseFromDevice(string displayKey) + private DisplayBase GetDisplayBaseFromDevice(string displayKey) { - var displayDevice = DeviceManager.GetDeviceForKey(displayKey); + var displayDevice = DeviceManager.GetDeviceForKey(displayKey); if (displayDevice != null) { - return displayDevice as Displays.DisplayBase; + return displayDevice; } else { - Debug.LogMessage(LogEventLevel.Debug, this, "Error: Unable to get display device with key '{0}'", displayKey); + this.LogWarning( + "Error: Unable to get display device with key '{displayKey}'", + displayKey + ); return null; } } - } /// - /// Represents a ScreenLiftControllerFactory + /// Factory for ScreenLiftController devices /// public class ScreenLiftControllerFactory : EssentialsDeviceFactory { - /// + /// /// Constructor for ScreenLiftControllerFactory /// public ScreenLiftControllerFactory() @@ -260,16 +444,13 @@ public ScreenLiftControllerFactory() TypeNames = new List() { "screenliftcontroller" }; } - /// - /// BuildDevice method - /// /// public override EssentialsDevice BuildDevice(DeviceConfig dc) { - Debug.LogMessage(LogEventLevel.Debug, "Factory Attempting to create new Generic Comm Device"); - var props = Newtonsoft.Json.JsonConvert.DeserializeObject(dc.Properties.ToString()); + Debug.LogDebug("Factory Attempting to create new ScreenLiftController Device"); + var props = dc.Properties.ToObject(); return new ScreenLiftController(dc.Key, dc.Name, props); } } -} \ No newline at end of file +} diff --git a/src/PepperDash.Essentials.Devices.Common/Displays/ScreenLiftControllerConfigProperties.cs b/src/PepperDash.Essentials.Devices.Common/Displays/ScreenLiftControllerConfigProperties.cs index 9de1faa0c..1c4f9906a 100644 --- a/src/PepperDash.Essentials.Devices.Common/Displays/ScreenLiftControllerConfigProperties.cs +++ b/src/PepperDash.Essentials.Devices.Common/Displays/ScreenLiftControllerConfigProperties.cs @@ -5,37 +5,41 @@ namespace PepperDash.Essentials.Devices.Common.Shades { - /// - /// Represents a ScreenLiftControllerConfigProperties - /// - public class ScreenLiftControllerConfigProperties - { - /// - /// Gets or sets the DisplayDeviceKey + /// Represents a ScreenLiftControllerConfigProperties /// - [JsonProperty("displayDeviceKey")] - public string DisplayDeviceKey { get; set; } + public class ScreenLiftControllerConfigProperties + { + /// + /// Gets or sets the DisplayDeviceKey + /// + [JsonProperty("displayDeviceKey")] + public string DisplayDeviceKey { get; set; } - /// - /// Gets or sets the Type - /// - [JsonProperty("type")] - [JsonConverter(typeof(StringEnumConverter))] - public eScreenLiftControlType Type { get; set; } + /// + /// Gets or sets the Type + /// + [JsonProperty("type")] + [JsonConverter(typeof(StringEnumConverter))] + public eScreenLiftControlType Type { get; set; } - /// - /// Gets or sets the Mode - /// - [JsonProperty("mode")] - [JsonConverter(typeof(StringEnumConverter))] - public eScreenLiftControlMode Mode { get; set; } + /// + /// Gets or sets the Mode + /// + [JsonProperty("mode")] + [JsonConverter(typeof(StringEnumConverter))] + public eScreenLiftControlMode Mode { get; set; } - /// - /// Gets or sets the Relays - /// - [JsonProperty("relays")] - public Dictionary Relays { get; set; } + /// + /// Gets or sets the Relays + /// + [JsonProperty("relays")] + public Dictionary Relays { get; set; } - } -} \ No newline at end of file + /// + /// Mutes the display when the screen is in the up position + /// + [JsonProperty("muteOnScreenUp")] + public bool MuteOnScreenUp { get; set; } + } +} diff --git a/src/PepperDash.Essentials.Devices.Common/Displays/ScreenLiftRelaysConfig.cs b/src/PepperDash.Essentials.Devices.Common/Displays/ScreenLiftRelaysConfig.cs index 4de9eb25f..8890ac95d 100644 --- a/src/PepperDash.Essentials.Devices.Common/Displays/ScreenLiftRelaysConfig.cs +++ b/src/PepperDash.Essentials.Devices.Common/Displays/ScreenLiftRelaysConfig.cs @@ -18,5 +18,11 @@ public class ScreenLiftRelaysConfig /// [JsonProperty("pulseTimeInMs")] public int PulseTimeInMs { get; set; } + + /// + /// Gets or sets the MoveTimeInMs - time in milliseconds for the movement to complete + /// + [JsonProperty("moveTimeInMs")] + public int MoveTimeInMs { get; set; } } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs index 800423527..81df6bac6 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs @@ -22,7 +22,7 @@ public class DeviceVolumeMessenger : MessengerBase /// The message path. /// The device. public DeviceVolumeMessenger(string key, string messagePath, IBasicVolumeControls device) - : base(key, messagePath, device as IKeyName) + : base(key, messagePath, device) { this.device = device; } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IMatrixRoutingMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IMatrixRoutingMessenger.cs index 3a1b6a27b..ec7189195 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IMatrixRoutingMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IMatrixRoutingMessenger.cs @@ -62,6 +62,14 @@ protected override void RegisterActions() inputs = matrixDevice.InputSlots.ToDictionary(kvp => kvp.Key, kvp => new RoutingInput(kvp.Value)) })); }; + + inputSlot.IsOnline.OutputChange += (sender, args) => + { + PostStatusMessage(JToken.FromObject(new + { + inputs = matrixDevice.InputSlots.ToDictionary(kvp => kvp.Key, kvp => new RoutingInput(kvp.Value)) + })); + }; } } diff --git a/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs b/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs index 45ff814a2..3adcaf87c 100644 --- a/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs +++ b/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs @@ -1748,7 +1748,7 @@ private void ShowInfo() var clientNo = 1; foreach (var clientContext in _directServer.UiClientContexts) { - var clients = _directServer.UiClients.Values.Where(c => c.Token == clientContext.Value.Token.Token); + var clients = _directServer.UiClients.Values.Where(c => c.TokenKey == clientContext.Key); CrestronConsole.ConsoleCommandResponse( $"\r\nClient {clientNo}:\r\n" + diff --git a/src/PepperDash.Essentials.MobileControl/Utilities.cs b/src/PepperDash.Essentials.MobileControl/Utilities.cs index 8c2abf3ee..ec9acd83c 100644 --- a/src/PepperDash.Essentials.MobileControl/Utilities.cs +++ b/src/PepperDash.Essentials.MobileControl/Utilities.cs @@ -1,3 +1,4 @@ +using System.Threading; using PepperDash.Core; using PepperDash.Core.Logging; using WebSocketSharp; @@ -12,13 +13,12 @@ public static class Utilities private static int nextClientId = 0; /// - /// Get the next unique client ID + /// Get the next unique client ID (thread-safe) /// /// Client ID public static int GetNextClientId() { - nextClientId++; - return nextClientId; + return Interlocked.Increment(ref nextClientId); } /// /// Converts a WebSocketServer LogData object to Essentials logging calls. diff --git a/src/PepperDash.Essentials.MobileControl/WebSocketServer/JoinResponse.cs b/src/PepperDash.Essentials.MobileControl/WebSocketServer/JoinResponse.cs index 1529d0fe8..7f2266a58 100644 --- a/src/PepperDash.Essentials.MobileControl/WebSocketServer/JoinResponse.cs +++ b/src/PepperDash.Essentials.MobileControl/WebSocketServer/JoinResponse.cs @@ -64,6 +64,12 @@ public class JoinResponse [JsonProperty("userAppUrl")] public string UserAppUrl { get; set; } + /// + /// Gets or sets the WebSocketUrl with clientId query parameter + /// + [JsonProperty("webSocketUrl")] + public string WebSocketUrl { get; set; } + /// /// Gets or sets the EnableDebug diff --git a/src/PepperDash.Essentials.MobileControl/WebSocketServer/MobileControlWebsocketServer.cs b/src/PepperDash.Essentials.MobileControl/WebSocketServer/MobileControlWebsocketServer.cs index 0f2fa388a..3b55120fa 100644 --- a/src/PepperDash.Essentials.MobileControl/WebSocketServer/MobileControlWebsocketServer.cs +++ b/src/PepperDash.Essentials.MobileControl/WebSocketServer/MobileControlWebsocketServer.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.IO; @@ -59,12 +60,25 @@ public class MobileControlWebsocketServer : EssentialsDevice /// public Dictionary UiClientContexts { get; private set; } - private readonly Dictionary uiClients = new Dictionary(); + private readonly ConcurrentDictionary uiClients = new ConcurrentDictionary(); + + /// + /// Stores pending client registrations using composite key: token-clientId + /// This ensures the correct client ID is matched even when connections establish out of order + /// + private readonly ConcurrentDictionary pendingClientRegistrations = new ConcurrentDictionary(); + + /// + /// Stores pending client registrations with timestamp for legacy clients + /// Key is token, Value is list of (clientId, timestamp) tuples + /// Most recent registration is used to handle duplicate join requests + /// + private readonly ConcurrentDictionary> legacyClientRegistrations = new ConcurrentDictionary>(); /// /// Gets the collection of UI clients /// - public ReadOnlyDictionary UiClients => new ReadOnlyDictionary(uiClients); + public IReadOnlyDictionary UiClients => uiClients; private readonly MobileControlSystemController _parent; @@ -723,23 +737,155 @@ private void GenerateClientTokenFromConsole(string s) private UiClient BuildUiClient(string roomKey, JoinToken token, string key) { - var c = new UiClient($"uiclient-{key}-{roomKey}-{token.Id}", token.Id, token.Token, token.TouchpanelKey); - this.LogInformation("Constructing UiClient with key {key} and ID {id}", key, token.Id); + // Get the most recent unused clientId for this token (legacy support) + // New clients will override this ID in OnOpen with the validated query parameter value + var clientId = "pending"; + if (legacyClientRegistrations.TryGetValue(key, out var registrations)) + { + // Get most recent registration + var sorted = registrations.OrderByDescending(r => r.timestamp).ToList(); + if (sorted.Any()) + { + clientId = sorted.First().clientId; + // Remove it from the bag + var newBag = new ConcurrentBag<(string, DateTime)>(sorted.Skip(1)); + legacyClientRegistrations.TryUpdate(key, newBag, registrations); + this.LogVerbose("Assigned most recent legacy clientId {clientId} for token {token}", clientId, key); + } + } + + var c = new UiClient($"uiclient-{key}-{roomKey}-{clientId}", clientId, token.Token, token.TouchpanelKey); + this.LogInformation("Constructing UiClient with key {key} and temporary ID (will be set from query param)", key); c.Controller = _parent; c.RoomKey = roomKey; + c.TokenKey = key; // Store the URL token key for filtering + c.Server = this; // Give UiClient access to server for ID registration + + // Don't add to uiClients yet - will be added in OnOpen after ID is set from query param - if (uiClients.ContainsKey(token.Id)) + c.ConnectionClosed += (o, a) => { - this.LogWarning("removing client with duplicate id {id}", token.Id); - uiClients.Remove(token.Id); - } - uiClients.Add(token.Id, c); - // UiClients[key].SetClient(c); - c.ConnectionClosed += (o, a) => uiClients.Remove(a.ClientId); - token.Id = null; + uiClients.TryRemove(a.ClientId, out _); + // Clean up any pending registrations for this token + var keysToRemove = pendingClientRegistrations.Keys + .Where(k => k.StartsWith($"{key}-")) + .ToList(); + foreach (var k in keysToRemove) + { + pendingClientRegistrations.TryRemove(k, out _); + } + + // Clean up legacy registrations if empty + if (legacyClientRegistrations.TryGetValue(key, out var legacyBag) && legacyBag.IsEmpty) + { + legacyClientRegistrations.TryRemove(key, out _); + } + }; return c; } + /// + /// Registers a UiClient with its validated client ID after WebSocket connection + /// + /// The UiClient to register + /// The validated client ID + /// The token key for validation + /// True if registration successful, false if validation failed + public bool RegisterUiClient(UiClient client, string clientId, string tokenKey) + { + var registrationKey = $"{tokenKey}-{clientId}"; + + // Verify this clientId was generated during a join request for this token + if (!pendingClientRegistrations.TryRemove(registrationKey, out _)) + { + this.LogWarning("Client attempted to connect with unregistered or expired clientId {clientId} for token {token}", clientId, tokenKey); + return false; + } + + // Registration is valid - add to active clients + uiClients.AddOrUpdate(clientId, client, (id, existingClient) => + { + this.LogWarning("Replacing existing client with duplicate id {id}", id); + return client; + }); + + this.LogInformation("Successfully registered UiClient with ID {clientId} for token {token}", clientId, tokenKey); + return true; + } + + /// + /// Updates a client's ID when a mismatch is detected between stored ID and message ID + /// + /// The current/old client ID + /// The new client ID from the message + /// The token key for validation + /// True if update successful, false otherwise + public bool UpdateClientId(string oldClientId, string newClientId, string tokenKey) + { + if (string.IsNullOrEmpty(oldClientId) || string.IsNullOrEmpty(newClientId)) + { + this.LogWarning("Cannot update client ID with null or empty values"); + return false; + } + + if (oldClientId == newClientId) + { + return true; // No update needed + } + + // Verify the new clientId was registered for this token + var registrationKey = $"{tokenKey}-{newClientId}"; + if (!pendingClientRegistrations.TryRemove(registrationKey, out _)) + { + this.LogWarning("Cannot update to unregistered clientId {newClientId} for token {token}", newClientId, tokenKey); + return false; + } + + // Get the existing client + if (!uiClients.TryRemove(oldClientId, out var client)) + { + this.LogWarning("Cannot find client with old ID {oldClientId}", oldClientId); + return false; + } + + // Update the client's ID + client.UpdateId(newClientId); + + // Re-add with new ID + if (!uiClients.TryAdd(newClientId, client)) + { + // If add fails, try to restore old entry + uiClients.TryAdd(oldClientId, client); + client.UpdateId(oldClientId); + this.LogError("Failed to update client ID from {oldClientId} to {newClientId}", oldClientId, newClientId); + return false; + } + + this.LogInformation("Successfully updated client ID from {oldClientId} to {newClientId}", oldClientId, newClientId); + return true; + } + + /// + /// Registers a UiClient using legacy flow (for backwards compatibility with older clients) + /// + /// The UiClient to register + public void RegisterLegacyUiClient(UiClient client) + { + if (string.IsNullOrEmpty(client.Id)) + { + this.LogError("Cannot register client with null or empty ID"); + return; + } + + uiClients.AddOrUpdate(client.Id, client, (id, existingClient) => + { + this.LogWarning("Replacing existing client with duplicate id {id} (legacy flow)", id); + return client; + }); + + this.LogInformation("Successfully registered UiClient with ID {clientId} using legacy flow", client.Id); + } + /// /// Prints out the session data for each path /// @@ -1046,10 +1192,23 @@ private void HandleJoinRequest(HttpListenerRequest req, HttpListenerResponse res }); } + // Generate a client ID for this join request var clientId = $"{Utilities.GetNextClientId()}"; - clientContext.Token.Id = clientId; + var now = DateTime.UtcNow; + + // Store in pending registrations for new clients that send clientId via query param + var registrationKey = $"{token}-{clientId}"; + pendingClientRegistrations.TryAdd(registrationKey, clientId); + + // For legacy clients, store with timestamp instead of FIFO queue + var legacyBag = legacyClientRegistrations.GetOrAdd(token, _ => new ConcurrentBag<(string, DateTime)>()); + legacyBag.Add((clientId, now)); + + this.LogVerbose("Assigning ClientId: {clientId} for token: {token} at {timestamp}", clientId, token, now); - this.LogVerbose("Assigning ClientId: {clientId}", clientId); + // Construct WebSocket URL with clientId query parameter + var wsProtocol = "ws"; + var wsUrl = $"{wsProtocol}://{CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 0)}:{Port}{_wsPath}{token}?clientId={clientId}"; // Construct the response object JoinResponse jRes = new JoinResponse @@ -1064,6 +1223,7 @@ private void HandleJoinRequest(HttpListenerRequest req, HttpListenerResponse res UserAppUrl = string.Format("http://{0}:{1}/mc/app", CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 0), Port), + WebSocketUrl = wsUrl, EnableDebug = false, DeviceInterfaceSupport = deviceInterfaces }; diff --git a/src/PepperDash.Essentials.MobileControl/WebSocketServer/UiClient.cs b/src/PepperDash.Essentials.MobileControl/WebSocketServer/UiClient.cs index cf8dd7f9f..607323bae 100644 --- a/src/PepperDash.Essentials.MobileControl/WebSocketServer/UiClient.cs +++ b/src/PepperDash.Essentials.MobileControl/WebSocketServer/UiClient.cs @@ -26,11 +26,25 @@ public class UiClient : WebSocketBehavior, IKeyed /// public string Id { get; private set; } + /// + /// Updates the client ID - only accessible from within the assembly (e.g., by the server) + /// + /// The new client ID + internal void UpdateId(string newId) + { + Id = newId; + } + /// /// Token associated with this client /// public string Token { get; private set; } + /// + /// The URL token key used to connect (from UiClientContexts dictionary key) + /// + public string TokenKey { get; set; } + /// /// Touchpanel Key associated with this client /// @@ -41,6 +55,11 @@ public class UiClient : WebSocketBehavior, IKeyed /// public MobileControlSystemController Controller { get; set; } + /// + /// Gets or sets the server instance for client registration + /// + public MobileControlWebsocketServer Server { get; set; } + /// /// Gets or sets the room key that this client is associated with /// @@ -99,6 +118,50 @@ protected override void OnOpen() Log.Output = (data, message) => Utilities.ConvertWebsocketLog(data, message, this); Log.Level = LogLevel.Trace; + // Get clientId from query parameter + var queryString = Context.QueryString; + var clientId = queryString["clientId"]; + + if (!string.IsNullOrEmpty(clientId)) + { + // New behavior: Validate and register with the server using provided clientId + if (Server == null || !Server.RegisterUiClient(this, clientId, TokenKey)) + { + this.LogError("Failed to register client with ID {clientId}. Invalid or expired registration.", clientId); + Context.WebSocket.Close(CloseStatusCode.PolicyViolation, "Invalid or expired clientId"); + return; + } + + // Update this client's ID to the validated one + Id = clientId; + Key = $"uiclient-{TokenKey}-{RoomKey}-{clientId}"; + + this.LogInformation("Client {clientId} successfully connected and registered (new flow)", clientId); + } + else + { + // Legacy behavior: Use clientId from Token.Id (generated in HandleJoinRequest) + this.LogInformation("Client connected without clientId query parameter. Using legacy registration flow."); + + // Id is already set from Token in constructor, use it + if (string.IsNullOrEmpty(Id)) + { + this.LogError("Legacy client has no ID from token. Connection will be closed."); + Context.WebSocket.Close(CloseStatusCode.PolicyViolation, "No client ID available"); + return; + } + + Key = $"uiclient-{TokenKey}-{RoomKey}-{Id}"; + + // Register directly to active clients (legacy flow) + if (Server != null) + { + Server.RegisterLegacyUiClient(this); + } + + this.LogInformation("Client {clientId} registered using legacy flow", Id); + } + if (Controller == null) { Debug.LogMessage(LogEventLevel.Verbose, "WebSocket UiClient Controller is null"); diff --git a/src/PepperDash.Essentials/ControlSystem.cs b/src/PepperDash.Essentials/ControlSystem.cs index 72d7c27d0..ef19c955a 100644 --- a/src/PepperDash.Essentials/ControlSystem.cs +++ b/src/PepperDash.Essentials/ControlSystem.cs @@ -662,6 +662,7 @@ private static void LoadAssets() if (jsonFiles.Length > 1) { + Debug.LogError("Multiple configuration files found in application directory: {@jsonFiles}", jsonFiles.Select(f => f.FullName).ToArray()); throw new Exception("Multiple configuration files found. Cannot continue."); }