Compare commits

..

40 Commits

Author SHA1 Message Date
Aviv Cohn
788bbd2c6d feat: remove non-xml commentary for readability 2024-10-10 16:55:13 -04:00
Aviv Cohn
45f5bfb8ef feat: use updated string format method 2024-10-10 16:34:13 -04:00
Aviv Cohn
4fd9dd739e chore: remove additional device types 2024-10-10 16:33:06 -04:00
Aviv Cohn
46ba57bac5 docs: Update Readme 2024-10-10 15:51:24 -04:00
Aviv Cohn
7c3c0bea71 feat: add files 2024-10-10 14:27:29 -04:00
Aviv Cohn
a427afaf3c feat: Add Directory.Build.x files 2024-10-10 14:04:26 -04:00
Aviv Cohn
2264d90372 feat: Add 4Series csproj and update info 2024-10-10 13:04:15 -04:00
Jason T Alborough
809fb79bf1 Merge pull request #23 from PepperDash/feature/new-beta-bulds-caller-yaml
Create essentialsplugins-betabuilds-caller.yml
2023-10-06 16:18:18 -04:00
Jason T Alborough
507ca486ab Merge pull request #24 from PepperDash/feature/new-release-bulds-caller-yaml
Create essentialsplugins-releasebuilds-caller.yml
2023-10-06 15:52:59 -04:00
Jason T Alborough
4ec7550625 Merge pull request #22 from PepperDash/feature/readme-logo
feature: adds logo file and updates readme to reference logo
2023-10-06 15:52:50 -04:00
Jason DeVito
d327f2def8 fix: removes old release build action 2023-09-26 09:04:31 -05:00
Jason DeVito
4244b394e7 fix: removes old betabuild action 2023-09-26 09:03:37 -05:00
Jason DeVito
1b3c28da0c Create essentialsplugins-releasebuilds-caller.yml 2023-09-26 08:58:37 -05:00
Jason DeVito
2586e9502d Create essentialsplugins-betabuilds-caller.yml 2023-09-26 08:57:39 -05:00
Jason DeVito
7ba409d64c feature: adds logo file and updates readme to reference logo 2023-08-29 16:27:59 -05:00
Andrew Welker
0746d309df Merge pull request #19 from PepperDash/feature/Conditional-Workflows
Multiple Style and Workflow Updates
2022-07-22 11:06:34 -06:00
Trevor Payne
259a71c562 style: renamed classes for consistency
build: updated essentials version

ci: updated workflows

docs: documentation updated

ci: updated nuspec
2022-07-21 12:07:27 -05:00
Trevor Payne
62f959bb25 test workflow syntax 2022-07-21 10:17:56 -05:00
Trevor Payne
62912451e8 fix: Workflow Syntax 2022-07-20 22:15:48 -05:00
Trevor Payne
ee057ad361 fix: Workflow Syntax 2022-07-20 21:47:09 -05:00
Trevor Payne
af7e9ae659 fix: Workflow Syntax 2022-07-20 21:03:26 -05:00
Trevor Payne
f08741efd6 fix: Workflow Syntax 2022-07-20 20:32:42 -05:00
Trevor Payne
1add0c193c fix: Workflow Syntax 2022-07-20 18:34:20 -05:00
Trevor Payne
3d57ac3560 fix: Workflow Syntax 2022-07-20 18:18:07 -05:00
Trevor Payne
856178d920 fix: Workflow Syntax 2022-07-20 17:53:48 -05:00
Trevor Payne
87872b78e2 fix: Workflow Syntax 2022-07-20 17:29:57 -05:00
Trevor Payne
266bf187d9 fix: Workflow Syntax 2022-07-20 17:15:39 -05:00
Trevor Payne
592400cc90 fix: Workflow Syntax 2022-07-20 17:12:21 -05:00
Trevor Payne
baaf7c4a28 fix: Workflow Syntax 2022-07-20 17:11:15 -05:00
Trevor Payne
57a265d27f Made names of classes more consistent internally
Removed obsolete references
2022-07-20 16:48:50 -05:00
Trevor Payne
0cf654ce2d Selective Nuget Package publish 2022-07-20 16:42:25 -05:00
Jason Alborough
24b02b199d Merge branch 'hotfix/Fix-Build-Actions' of https://github.com/PepperDash/EssentialsPluginTemplate into hotfix/Fix-Build-Actions 2022-07-15 14:06:16 -04:00
Jason Alborough
91ff0d8c83 nuspec-TEMPLATE
fix: #17 changes nuspec to nuspec-TEMPALTE
feature: adds brief configuration instructions for nuspec file to readme
2022-07-15 14:06:00 -04:00
Trevor Payne
3b7ddac369 fix: improper CSProj name in solution 2022-07-15 11:48:33 -05:00
Trevor Payne
fcbf710781 fix: updated AssemblyInfo copyright date 2022-07-13 12:30:15 -05:00
Trevor Payne
2ff646e499 fix: updated github workflows 2022-07-13 12:18:08 -05:00
Trevor Payne
c323b982ae fix: added nuspec file 2022-07-13 12:13:15 -05:00
Trevor Payne
d46444e424 fix: update essentials reference to latest 2022-07-13 12:10:03 -05:00
Andrew Welker
6541856958 Merge pull request #15 from PepperDash/feature/add-plugin-request-template
Update issue templates
2021-02-25 12:58:59 -07:00
Andrew Welker
710642bde5 Update issue templates 2021-02-25 12:12:14 -07:00
29 changed files with 587 additions and 771 deletions

View File

@@ -0,0 +1,17 @@
---
name: Essentials Plugin Request
about: Request an Essentials Plugin
title: "[REQUEST] - "
labels: plugin request
assignees: ''
---
** Describe the Plugin **
What do you want the plugin to do? Is it for a specific device? If it's for a specific device, include the manufacturer and model, along with links to API documentation if available.
** Does it need to be available in SIMPL Windows? **
If it does, describe the functionality that should be exposed to SIMPL Windows via EISC. This may include an example join map, or other way of documenting the layout of the EISC.
** Additional Features or functionality **
Describe additional features or functionality that this plugin should have.

View File

@@ -7,7 +7,8 @@ Foreach ($version in $latestVersions) {
$latestVersion = $version
Write-Host "Setting latest version to: $latestVersion"
}
} catch {
}
catch {
Write-Host "Unable to convert $($version). Skipping"
continue;
}
@@ -18,17 +19,19 @@ $phase = ""
$newVersionString = ""
switch -regex ($Env:GITHUB_REF) {
'^refs\/heads\/main*.' {
$newVersionString = "{0}.{1}.{2}" -f $newVersion.Major, $newVersion.Minor, ($newVersion.Build + 1)
$newVersionString = "{0}.{1}.{2}" -f $newVersion.Major, $newVersion.Minor, $newVersion.Build
}
'^refs\/heads\/feature\/*.' {
$phase = 'alpha'
$newVersionString = "{0}.{1}.{2}-{3}-{4}" -f $newVersion.Major, $newVersion.Minor, ($newVersion.Build + 1), $phase, $Env:GITHUB_RUN_NUMBER
}
'^refs\/heads\/release\/*.' {
$splitRef = $Env:GITHUB_REF -split "/"
$version = [version]($splitRef[-1] -replace "v", "")
$phase = 'rc'
$newVersionString = "{0}.{1}.{2}-{3}-{4}" -f $newVersion.Major, $newVersion.Minor, ($newVersion.Build + 1), $phase, $Env:GITHUB_RUN_NUMBER
$newVersionString = "{0}.{1}.{2}-{3}-{4}" -f $version.Major, $version.Minor, $version.Build, $phase, $Env:GITHUB_RUN_NUMBER
}
'^refs\/heads\/development*.' {
'^refs\/heads\/dev*.' {
$phase = 'beta'
$newVersionString = "{0}.{1}.{2}-{3}-{4}" -f $newVersion.Major, $newVersion.Minor, ($newVersion.Build + 1), $phase, $Env:GITHUB_RUN_NUMBER
}

View File

@@ -10,7 +10,7 @@ Get-ChildItem ($destination)
$exclusions = @(git submodule foreach --quiet 'echo $name')
# Trying to get any .json schema files (not currently working)
# Gets any files with the listed extensions.
Get-ChildItem -recurse -Path "$($Env:GITHUB_WORKSPACE)" -include "*.clz", "*.cpz", "*.cplz" | ForEach-Object {
Get-ChildItem -recurse -Path "$($Env:GITHUB_WORKSPACE)" -include "*.cplz" | ForEach-Object {
$allowed = $true;
# Exclude any files in submodules
foreach ($exclude in $exclusions) {
@@ -36,6 +36,7 @@ Get-ChildItem -Path $destination | Where-Object {($_.Extension -eq ".clz") -or (
Get-ChildItem -Recurse -Path "$($Env:GITHUB_WORKSPACE)" -include $filenames | Copy-Item -Destination ($destination) -Force
}
}
Get-ChildItem -Path $destination\*.cplz | Rename-Item -NewName { "$($_.BaseName)-$($Env:VERSION)$($_.Extension)" }
Compress-Archive -Path $destination -DestinationPath "$($Env:GITHUB_WORKSPACE)\$($Env:SOLUTION_FILE)-$($Env:VERSION).zip" -Force
Write-Host "Output Contents post Zip"
Get-ChildItem -Path $destination

View File

@@ -0,0 +1,31 @@
name: Build Essentials Plugin
on:
push:
branches:
- '**'
jobs:
getVersion:
uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-getversion.yml@main
secrets: inherit
build-3Series:
uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-3Series-builds.yml@main
secrets: inherit
needs: getVersion
if: needs.getVersion.outputs.newVersion == 'true'
with:
newVersion: ${{ needs.getVersion.outputs.newVersion }}
version: ${{ needs.getVersion.outputs.version }}
tag: ${{ needs.getVersion.outputs.tag }}
channel: ${{ needs.getVersion.outputs.channel }}
build-4Series:
uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-4Series-builds.yml@main
secrets: inherit
needs: getVersion
if: needs.getVersion.outputs.newVersion == 'true'
with:
newVersion: ${{ needs.getVersion.outputs.newVersion }}
version: ${{ needs.getVersion.outputs.version }}
tag: ${{ needs.getVersion.outputs.tag }}
channel: ${{ needs.getVersion.outputs.channel }}

View File

@@ -1,103 +0,0 @@
name: Branch Build Using Docker
on:
push:
branches:
- feature/*
- hotfix/*
- release/*
- main
- development
env:
# solution path doesn't need slashes unless there it is multiple folders deep
# solution name does not include extension. .sln is assumed
SOLUTION_PATH: PDT.EssentialsPluginTemplate.EPI
SOLUTION_FILE: PDT.EssentialsPluginTemplate.EPI
# Do not edit this, we're just creating it here
VERSION: 0.0.0-buildtype-buildnumber
# Defaults to debug for build type
BUILD_TYPE: Debug
# Defaults to main as the release branch. Change as necessary
RELEASE_BRANCH: main
jobs:
Build_Project:
runs-on: windows-latest
steps:
# First we checkout the source repo
- name: Checkout repo
uses: actions/checkout@v2
with:
fetch-depth: 0
# And any submodules
- name: Checkout submodules
shell: bash
run: |
git config --global url."https://github.com/".insteadOf "git@github.com:"
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
git submodule sync --recursive
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
# Set the BUILD_TYPE environment variable
- name: Set Build to Release if triggered from main
run: |
if("$($Env:GITHUB_REF)".contains("$($Env:RELEASE_BRANCH)")) {
Write-Host "Setting build type to Release"
Write-Output "echo "BUILD_TYPE='Release'" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append"
}
# Fetch all tags
- name: Fetch tags
run: git fetch --tags
# Generate the appropriate version number
- name: Set Version Number
shell: powershell
run: |
$version = ./.github/scripts/GenerateVersionNumber.ps1
Write-Output "echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append"
# Use the version number to set the version of the assemblies
- name: Update AssemblyInfo.cs
shell: powershell
run: |
Write-Output ${{ env.VERSION }}
./.github/scripts/UpdateAssemblyVersion.ps1 ${{ env.VERSION }}
- name: restore Nuget Packages
run: nuget install .\packages.config -OutputDirectory .\packages -ExcludeVersion
- name: Login to Docker
uses: azure/docker-login@v1
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
# Build the solutions in the docker image
- name: Build Solution
shell: powershell
run: |
Invoke-Expression "docker run --rm --mount type=bind,source=""$($Env:GITHUB_WORKSPACE)"",target=""c:/project"" pepperdash/sspbuilder c:\cihelpers\vsidebuild.exe -Solution ""c:\project\$($Env:SOLUTION_PATH)\$($Env:SOLUTION_FILE).sln"" -BuildSolutionConfiguration $($ENV:BUILD_TYPE)"
# Zip up the output files as needed
- name: Zip Build Output
shell: powershell
run: ./.github/scripts/ZipBuildOutput.ps1
- name: Upload Build Output
uses: actions/upload-artifact@v1
with:
name: Build
path: ./${{ env.SOLUTION_FILE}}-${{ env.VERSION}}.zip
# Create the release on the source repo
- name: Create Release
id: create_release
uses: actions/create-release@v1
with:
tag_name: ${{ env.VERSION }}
release_name: ${{ env.VERSION }}
prerelease: ${{contains('debug', env.BUILD_TYPE)}}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Upload the build package to the release
- name: Upload Release Package
id: upload_release
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./${{ env.SOLUTION_FILE}}-${{ env.VERSION}}.zip
asset_name: ${{ env.SOLUTION_FILE}}-${{ env.VERSION}}.zip
asset_content_type: application/zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

2
GetPackages.BAT Normal file
View File

@@ -0,0 +1,2 @@
@Echo ON
nuget install .\packages.config -OutputDirectory .\packages -excludeVersion

View File

@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.11.35327.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PDT.EssentialsPluginTemplate.EPI.4Series.", "src\PDT.EssentialsPluginTemplate.EPI.4Series..csproj", "{52E6E0A0-A710-4B5F-AF52-08816F5C99BB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{52E6E0A0-A710-4B5F-AF52-08816F5C99BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{52E6E0A0-A710-4B5F-AF52-08816F5C99BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{52E6E0A0-A710-4B5F-AF52-08816F5C99BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{52E6E0A0-A710-4B5F-AF52-08816F5C99BB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {45BE70E2-A4DC-4851-92ED-CE67B99F5D86}
EndGlobalSection
EndGlobal

View File

@@ -1,99 +0,0 @@
// For Basic SIMPL# Classes
// For Basic SIMPL#Pro classes
using Crestron.SimplSharpPro.DeviceSupport;
using Crestron.SimplSharpPro;
using PepperDash.Core;
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges;
namespace EssentialsPluginTemplate
{
/// <summary>
/// Plugin device
/// </summary>
/// <remarks>
/// Rename the class to match the device plugin being developed.
/// </remarks>
/// <example>
/// "EssentialsPluginDeviceTemplate" renamed to "SamsungMdcDevice"
/// </example>
public class EssentialsPluginTemplateCrestronDevice : CrestronGenericBridgeableBaseDevice
{
/// <summary>
/// It is often desirable to store the config
/// </summary>
private EssentialsPluginConfigObjectTemplate _config;
#region Constructor for Devices without IBasicCommunication. Remove if not needed
/// <summary>
/// Plugin device constructor for Crestron devices
/// </summary>
/// <param name="key"></param>
/// <param name="name"></param>
/// <param name="config"></param>
/// <param name="hardware"></param>
public EssentialsPluginTemplateCrestronDevice(string key, string name, EssentialsPluginConfigObjectTemplate config, GenericBase hardware)
: base(key, name, hardware)
{
Debug.Console(0, this, "Constructing new {0} instance", name);
// The base class takes care of registering the hardware device for you
// TODO [ ] Update the constructor as needed for the plugin device being developed
_config = config;
}
#endregion
#region Overrides of EssentialsBridgeableDevice
/// <summary>
/// Links the plugin device to the EISC bridge
/// </summary>
/// <param name="trilist"></param>
/// <param name="joinStart"></param>
/// <param name="joinMapKey"></param>
/// <param name="bridge"></param>
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
var joinMap = new EssentialsPluginBridgeJoinMapTemplate(joinStart);
// This adds the join map to the collection on the bridge
if (bridge != null)
{
bridge.AddJoinMap(Key, joinMap);
}
var customJoins = JoinMapHelper.TryGetJoinMapAdvancedForDevice(joinMapKey);
if (customJoins != null)
{
joinMap.SetCustomJoinData(customJoins);
}
Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
Debug.Console(0, "Linking to Bridge Type {0}", GetType().Name);
// TODO [ ] Implement bridge links as needed
// links to bridge
trilist.SetString(joinMap.DeviceName.JoinNumber, Name);
trilist.OnlineStatusChange += (o, a) =>
{
if (!a.DeviceOnLine) return;
trilist.SetString(joinMap.DeviceName.JoinNumber, Name);
};
}
#endregion
}
}

View File

@@ -1,86 +0,0 @@
using Crestron.SimplSharpPro.DeviceSupport;
using PepperDash.Core;
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges;
namespace EssentialsPluginTemplate
{
/// <summary>
/// Plugin device template for logic devices that don't communicate outside the program
/// </summary>
/// <remarks>
/// Rename the class to match the device plugin being developed.
/// </remarks>
/// <example>
/// "EssentialsPluginTemplateLogicDevice" renamed to "SamsungMdcDevice"
/// </example>
public class EssentialsPluginTemplateLogicDevice : EssentialsBridgeableDevice
{
/// <summary>
/// It is often desirable to store the config
/// </summary>
private EssentialsPluginConfigObjectTemplate _config;
/// <summary>
/// Plugin device constructor
/// </summary>
/// <param name="key"></param>
/// <param name="name"></param>
/// <param name="config"></param>
public EssentialsPluginTemplateLogicDevice(string key, string name, EssentialsPluginConfigObjectTemplate config)
: base(key, name)
{
Debug.Console(0, this, "Constructing new {0} instance", name);
// TODO [ ] Update the constructor as needed for the plugin device being developed
_config = config;
}
#region Overrides of EssentialsBridgeableDevice
/// <summary>
/// Links the plugin device to the EISC bridge
/// </summary>
/// <param name="trilist"></param>
/// <param name="joinStart"></param>
/// <param name="joinMapKey"></param>
/// <param name="bridge"></param>
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
var joinMap = new EssentialsPluginBridgeJoinMapTemplate(joinStart);
// This adds the join map to the collection on the bridge
if (bridge != null)
{
bridge.AddJoinMap(Key, joinMap);
}
var customJoins = JoinMapHelper.TryGetJoinMapAdvancedForDevice(joinMapKey);
if (customJoins != null)
{
joinMap.SetCustomJoinData(customJoins);
}
Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
Debug.Console(0, "Linking to Bridge Type {0}", GetType().Name);
// TODO [ ] Implement bridge links as needed
// links to bridge
trilist.SetString(joinMap.DeviceName.JoinNumber, Name);
trilist.OnlineStatusChange += (o, a) =>
{
if (!a.DeviceOnLine) return;
trilist.SetString(joinMap.DeviceName.JoinNumber, Name);
};
}
#endregion
}
}

View File

@@ -1,5 +0,0 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DeployDeviceID>E282E6BE-C7C3-4ece-916A-88FB1CF8AF3C</DeployDeviceID>
</PropertyGroup>
</Project>

View File

@@ -1,20 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PDT.EssentialsPluginTemplate.EPI", "PDT.EssentialsPluginTemplate.EPI.csproj", "{9D249E47-8F95-4437-A6BB-563510287AD1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9D249E47-8F95-4437-A6BB-563510287AD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9D249E47-8F95-4437-A6BB-563510287AD1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9D249E47-8F95-4437-A6BB-563510287AD1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9D249E47-8F95-4437-A6BB-563510287AD1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -1,63 +0,0 @@
8/30/2019 3:01:01 PM, Info: Initializing SIMPLSharp Services...
8/30/2019 3:01:01 PM, Info: ProjectInfo successfully initialized.
8/30/2019 3:01:02 PM, Info: Saving project information...
8/30/2019 3:01:02 PM, Info: Saving project information...
8/30/2019 3:01:02 PM, Info: Saving project information...
8/30/2019 3:01:02 PM, Info: Saving project information...
8/30/2019 3:01:02 PM, Info: Saving project information...
8/30/2019 3:01:02 PM, Info: Saving project information...
8/30/2019 3:04:48 PM, Info: Validating assembly C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\essentials-builds\PepperDashEssentials.dll...
8/30/2019 3:05:10 PM, Info: Saving project information...
8/30/2019 3:05:10 PM, Info: Saving project information...
8/30/2019 3:05:10 PM, Info: Saving project information...
8/30/2019 3:05:39 PM, Info: Validating assembly C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\essentials-builds\PepperDash_Core.dll...
8/30/2019 3:05:39 PM, Info: Validating assembly C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\essentials-builds\PepperDash_Essentials_Core.dll...
8/30/2019 3:05:40 PM, Info: Validating assembly C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\essentials-builds\PepperDash_Essentials_DM.dll...
8/30/2019 3:06:24 PM, Info: Saving project information...
8/30/2019 3:06:24 PM, Info: Saving project information...
8/30/2019 3:06:24 PM, Info: Saving project information...
8/30/2019 3:06:24 PM, Info: Saving project information...
8/30/2019 3:06:24 PM, Info: Saving project information...
8/30/2019 3:06:24 PM, Info: Saving project information...
8/30/2019 3:06:36 PM, Info: Saving project information...
8/30/2019 3:06:36 PM, Info: Saving project information...
8/30/2019 3:06:36 PM, Info: Saving project information...
8/30/2019 3:06:36 PM, Info: Saving project information...
8/30/2019 3:06:36 PM, Info: Saving project information...
8/30/2019 3:06:36 PM, Info: Saving project information...
8/30/2019 3:08:54 PM, Info: Saving project information...
8/30/2019 3:08:54 PM, Info: Saving project information...
8/30/2019 3:08:54 PM, Info: Saving project information...
8/30/2019 3:08:54 PM, Info: Saving project information...
8/30/2019 3:08:54 PM, Info: Saving project information...
8/30/2019 3:08:54 PM, Info: Saving project information...
8/30/2019 3:09:39 PM, Info: Validating assembly C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\essentials-builds\PepperDash_Essentials_Core.dll...
8/30/2019 3:10:10 PM, Info: Saving project information...
8/30/2019 3:10:10 PM, Info: Saving project information...
8/30/2019 3:10:10 PM, Info: Saving project information...
8/30/2019 3:15:10 PM, Info: Saving project information...
8/30/2019 3:15:10 PM, Info: Saving project information...
8/30/2019 3:15:10 PM, Info: Saving project information...
8/30/2019 3:20:10 PM, Info: Saving project information...
8/30/2019 3:20:10 PM, Info: Saving project information...
8/30/2019 3:20:10 PM, Info: Saving project information...
8/30/2019 3:25:10 PM, Info: Saving project information...
8/30/2019 3:25:10 PM, Info: Saving project information...
8/30/2019 3:25:10 PM, Info: Saving project information...
8/30/2019 3:30:10 PM, Info: Saving project information...
8/30/2019 3:30:10 PM, Info: Saving project information...
8/30/2019 3:30:10 PM, Info: Saving project information...
8/30/2019 3:35:10 PM, Info: Saving project information...
8/30/2019 3:35:10 PM, Info: Saving project information...
8/30/2019 3:35:10 PM, Info: Saving project information...
8/30/2019 3:35:38 PM, Info: Saving project information...
8/30/2019 3:35:38 PM, Info: Saving project information...
8/30/2019 3:35:38 PM, Info: Saving project information...
8/30/2019 3:35:38 PM, Info: Saving project information...
8/30/2019 3:35:38 PM, Info: Saving project information...
8/30/2019 3:35:38 PM, Info: Saving project information...
8/30/2019 3:36:52 PM, Info: Validating assembly C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\NvxUrlRoutingClientEpi.dll...
8/30/2019 3:36:52 PM, Info: Verifying assembly C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\NvxUrlRoutingClientEpi.dll
8/30/2019 3:36:52 PM, Info: Creating Archive C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\NvxUrlRoutingClientEpi.cplz...
8/30/2019 3:36:53 PM, Info: Saving project information...
9/2/2019 8:34:46 AM, Info: Terminating SIMPLSharp Services

View File

@@ -1,4 +1,6 @@
# Essentials Plugin Template (c) 2020
![PepperDash Essentials Pluign Logo](/images/essentials-plugin-blue.png)
# Essentials Plugin Template (c) 2023
## License
@@ -29,6 +31,7 @@ The [Essentials](https://github.com/PepperDash/Essentials) libraries are require
To install dependencies once nuget.exe is installed, run the following command from the root directory of your repository:
`nuget install .\packages.config -OutputDirectory .\packages -excludeVersion`.
Alternatively, you can simply run the `GetPackages.bat` file.
To verify that the packages installed correctly, open the plugin solution in your repo and make sure that all references are found, then try and build it.
### Installing Different versions of PepperDash Core
@@ -37,6 +40,21 @@ If you need a different version of PepperDash Core, use the command `nuget insta
### Instructions for Renaming Solution and Files
See the Task List in Visual Studio for a guide on how to start using the templage. There is extensive inline documentation and examples as well.
See the Task List in Visual Studio for a guide on how to start using the template. There is extensive inline documentation and examples as well.
For renaming instructions in particular, see the XML `remarks` tags on class definitions
## Build Instructions (PepperDash Internal)
## Generating Nuget Package
In the solution folder is a file named "PDT.EssentialsPluginTemplate.nuspec"
1. Rename the file to match your plugin solution name
2. Edit the file to include your project specifics including
1. <id>PepperDash.Essentials.Plugin.MakeModel</id> Convention is to use the prefix "PepperDash.Essentials.Plugin" and include the MakeModel of the device.
2. <projectUrl>https://github.com/PepperDash/EssentialsPluginTemplate</projectUrl> Change to your url to the project repo
There is no longer a requirement to adjust workflow files for nuget generation for private and public repositories. This is now handled automatically in the workflow.
__If you do not make these changes to the nuspec file, the project will not generate a nuget package__

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -1,3 +1,3 @@
<packages>
<package id="PepperDashEssentials" version="1.7.5" targetFramework="net35" allowedVersions="[1.0,2.0)"/>
<package id="PepperDashEssentials" version="1.10.2" targetFramework="net35" allowedVersions="[1.0,2.0)"/>
</packages>

34
releaserc.json Normal file
View File

@@ -0,0 +1,34 @@
{
"plugins": [
[
"@semantic-release/commit-analyzer",
{
"releaseRules": [
{ "scope": "force-patch", "release": "patch" },
{ "scope": "no-release", "release": false }
]
}
],
"@semantic-release/release-notes-generator",
["@semantic-release/changelog",
{
"changelogFile": "CHANGELOG.md"
}
],
[
"@semantic-release/exec",
{
"verifyReleaseCmd": "echo \"newVersion=true\" >> $GITHUB_OUTPUT",
"publishCmd": "echo \"version=${nextRelease.version}\" >> $GITHUB_OUTPUT && echo \"tag=${nextRelease.gitTag}\" >> $GITHUB_OUTPUT && echo \"type=${nextRelease.type}\" >> $GITHUB_OUTPUT && echo \"channel=${nextRelease.channel}\" >> $GITHUB_OUTPUT"
}
]
],
"branches": [
"main",
{
"name": "replace-me-feature-branch",
"prerelease": "replace-me-prerelease",
"channel": "replace-me-prerelease"
}
]
}

21
src/Directory.Build.props Normal file
View File

@@ -0,0 +1,21 @@
<Project>
<PropertyGroup>
<Version>1.0.0-local</Version>
<InformationalVersion>$(Version)</InformationalVersion>
<Authors>PepperDash Technologies</Authors>
<Company>PepperDash Technologies</Company>
<Product>PepperDash Essentials Plugin Template</Product>
<Copyright>Copyright © 2024</Copyright>
<RepositoryUrl>https://github.com/PepperDash/EssentialsPluginTemplate.git</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageTags>Crestron; 4series</PackageTags>
<PackageOutputPath>../output</PackageOutputPath>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageLicenseFile>LICENSE.md</PackageLicenseFile>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<None Include="..\LICENSE.md" Pack="true" PackagePath=""/>
<None Include="..\README.md" Pack="true" PackagePath=""/>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,20 @@
<Project>
<ItemGroup>
<None Include="$(TargetDir)\$(TargetName).$(Version).cpz" Condition="$(ProjectType) == 'Program'">
<Pack>true</Pack>
<PackagePath>content;</PackagePath>
</None>
<None Include="$(PackageOutputPath)\$(TargetName).$(Version).cplz" Condition="$(ProjectType) == 'ProgramLibrary'">
<Pack>true</Pack>
<PackagePath>content;</PackagePath>
</None>
</ItemGroup>
<Target Name="Create CPLZ" AfterTargets="Build; Rebuild" Condition="$(ProjectType) == 'ProgramLibrary'">
<Message Text="Creating CPLZ"></Message>
<MakeDir Directories="$(PackageOutputPath)" Condition="!Exists($(PackageOutputPath))"></MakeDir>
<ZipDirectory SourceDirectory="$(TargetDir)" DestinationFile="$(PackageOutputPath)\$(TargetName).$(Version).cplz" Overwrite="true"/>
</Target>
<Target Name="Clean CPLZ" AfterTargets="AfterClean" Condition="$(ProjectType) == 'ProgramLibrary'">
<Delete Files="$(PackageOutputPath)\$(TargetName).$(Version).cplz"/>
</Target>
</Project>

View File

@@ -12,7 +12,7 @@ namespace EssentialsPluginTemplate
/// <example>
/// "EssentialsPluginBridgeJoinMapTemplate" renamed to "SamsungMdcBridgeJoinMap"
/// </example>
public class EssentialsPluginBridgeJoinMapTemplate : JoinMapBaseAdvanced
public class EssentialsPluginTemplateBridgeJoinMap : JoinMapBaseAdvanced
{
#region Digital
@@ -93,8 +93,8 @@ namespace EssentialsPluginTemplate
/// Plugin device BridgeJoinMap constructor
/// </summary>
/// <param name="joinStart">This will be the join it starts on the EISC bridge</param>
public EssentialsPluginBridgeJoinMapTemplate(uint joinStart)
: base(joinStart, typeof(EssentialsPluginBridgeJoinMapTemplate))
public EssentialsPluginTemplateBridgeJoinMap(uint joinStart)
: base(joinStart, typeof(EssentialsPluginTemplateBridgeJoinMap))
{
}
}

View File

@@ -1,195 +1,195 @@
using System.Collections.Generic;
using Newtonsoft.Json;
using PepperDash.Essentials.Core;
namespace EssentialsPluginTemplate
{
/// <summary>
/// Plugin device configuration object
/// </summary>
/// <remarks>
/// Rename the class to match the device plugin being created
/// </remarks>
/// <example>
/// "EssentialsPluginConfigObjectTemplate" renamed to "SamsungMdcConfig"
/// </example>
[ConfigSnippet("\"properties\":{\"control\":{}")]
public class EssentialsPluginConfigObjectTemplate
{
/// <summary>
/// JSON control object
/// </summary>
/// <remarks>
/// Typically this object is not required, but in some instances it may be needed. For example, when building a
/// plugin that is using Telnet (TCP/IP) communications and requires login, the device will need to handle the login.
/// In order to do so, you will need the username and password in the "tcpSshProperties" object.
/// </remarks>
/// <example>
/// <code>
/// "control": {
/// "method": "tcpIp",
/// "controlPortDevKey": "processor",
/// "controlPortNumber": 1,
/// "comParams": {
/// "baudRate": 9600,
/// "dataBits": 8,
/// "stopBits": 1,
/// "parity": "None",
/// "protocol": "RS232",
/// "hardwareHandshake": "None",
/// "softwareHandshake": "None"
/// },
/// "tcpSshProperties": {
/// "address": "172.22.0.101",
/// "port": 23,
/// "username": "admin",
/// "password": "password",
/// "autoReconnect": true,
/// "autoReconnectIntervalMs": 10000
/// }
/// }
/// </code>
/// </example>
[JsonProperty("control")]
public EssentialsControlPropertiesConfig Control { get; set; }
/// <summary>
/// Serializes the poll time value
/// </summary>
/// <remarks>
/// This is an exmaple device plugin property. This should be modified or deleted as needed for the plugin being built.
/// </remarks>
/// <value>
/// PollTimeMs property gets/sets the value as a long
/// </value>
/// <example>
/// <code>
/// "properties": {
/// "polltimeMs": 30000
/// }
/// </code>
/// </example>
[JsonProperty("pollTimeMs")]
public long PollTimeMs { get; set; }
/// <summary>
/// Serializes the warning timeout value
/// </summary>
/// <remarks>
/// This is an exmaple device plugin property. This should be modified or deleted as needed for the plugin being built.
/// </remarks>
/// <value>
/// WarningTimeoutMs property gets/sets the value as a long
/// </value>
/// <example>
/// <code>
/// "properties": {
/// "warningTimeoutMs": 180000
/// }
/// </code>
/// </example>
[JsonProperty("warningTimeoutMs")]
public long WarningTimeoutMs { get; set; }
/// <summary>
/// Serializes the error timeout value
/// </summary>
/// /// <remarks>
/// This is an exmaple device plugin property. This should be modified or deleted as needed for the plugin being built.
/// </remarks>
/// <value>
/// ErrorTimeoutMs property gets/sets the value as a long
/// </value>
/// <example>
/// <code>
/// "properties": {
/// "errorTimeoutMs": 300000
/// }
/// </code>
/// </example>
[JsonProperty("errorTimeoutMs")]
public long ErrorTimeoutMs { get; set; }
/// <summary>
/// Example dictionary of objects
/// </summary>
/// <remarks>
/// This is an example collection configuration object. This should be modified or deleted as needed for the plugin being built.
/// </remarks>
/// <example>
/// <code>
/// "properties": {
/// "presets": {
/// "preset1": {
/// "enabled": true,
/// "name": "Preset 1"
/// }
/// }
/// }
/// </code>
/// </example>
/// <example>
/// <code>
/// "properties": {
/// "inputNames": {
/// "input1": "Input 1",
/// "input2": "Input 2"
/// }
/// }
/// </code>
/// </example>
[JsonProperty("DeviceDictionary")]
public Dictionary<string, EssentialsPluginConfigObjectDictionaryTemplate> DeviceDictionary { get; set; }
/// <summary>
/// Constuctor
/// </summary>
/// <remarks>
/// If using a collection you must instantiate the collection in the constructor
/// to avoid exceptions when reading the configuration file
/// </remarks>
public EssentialsPluginConfigObjectTemplate()
{
DeviceDictionary = new Dictionary<string, EssentialsPluginConfigObjectDictionaryTemplate>();
}
}
/// <summary>
/// Example plugin configuration dictionary object
/// </summary>
/// <remarks>
/// This is an example collection of configuration objects. This can be modified or deleted as needed for the plugin being built.
/// </remarks>
/// <example>
/// <code>
/// "properties": {
/// "dictionary": {
/// "item1": {
/// "name": "Item 1 Name",
/// "value": "Item 1 Value"
/// }
/// }
/// }
/// </code>
/// </example>
public class EssentialsPluginConfigObjectDictionaryTemplate
{
/// <summary>
/// Serializes collection name property
/// </summary>
/// <remarks>
/// This is an example collection of configuration objects. This can be modified or deleted as needed for the plugin being built.
/// </remarks>
[JsonProperty("name")]
public string Name { get; set; }
/// <summary>
/// Serializes collection value property
/// </summary>
/// <remarks>
/// This is an example collection of configuration objects. This can be modified or deleted as needed for the plugin being built.
/// </remarks>
[JsonProperty("value")]
public uint Value { get; set; }
}
using System.Collections.Generic;
using Newtonsoft.Json;
using PepperDash.Essentials.Core;
namespace EssentialsPluginTemplate
{
/// <summary>
/// Plugin device configuration object
/// </summary>
/// <remarks>
/// Rename the class to match the device plugin being created
/// </remarks>
/// <example>
/// "EssentialsPluginConfigObjectTemplate" renamed to "SamsungMdcConfig"
/// </example>
[ConfigSnippet("\"properties\":{\"control\":{}")]
public class EssentialsPluginTemplateConfigObject
{
/// <summary>
/// JSON control object
/// </summary>
/// <remarks>
/// Typically this object is not required, but in some instances it may be needed. For example, when building a
/// plugin that is using Telnet (TCP/IP) communications and requires login, the device will need to handle the login.
/// In order to do so, you will need the username and password in the "tcpSshProperties" object.
/// </remarks>
/// <example>
/// <code>
/// "control": {
/// "method": "tcpIp",
/// "controlPortDevKey": "processor",
/// "controlPortNumber": 1,
/// "comParams": {
/// "baudRate": 9600,
/// "dataBits": 8,
/// "stopBits": 1,
/// "parity": "None",
/// "protocol": "RS232",
/// "hardwareHandshake": "None",
/// "softwareHandshake": "None"
/// },
/// "tcpSshProperties": {
/// "address": "172.22.0.101",
/// "port": 23,
/// "username": "admin",
/// "password": "password",
/// "autoReconnect": true,
/// "autoReconnectIntervalMs": 10000
/// }
/// }
/// </code>
/// </example>
[JsonProperty("control")]
public EssentialsControlPropertiesConfig Control { get; set; }
/// <summary>
/// Serializes the poll time value
/// </summary>
/// <remarks>
/// This is an exmaple device plugin property. This should be modified or deleted as needed for the plugin being built.
/// </remarks>
/// <value>
/// PollTimeMs property gets/sets the value as a long
/// </value>
/// <example>
/// <code>
/// "properties": {
/// "polltimeMs": 30000
/// }
/// </code>
/// </example>
[JsonProperty("pollTimeMs")]
public long PollTimeMs { get; set; }
/// <summary>
/// Serializes the warning timeout value
/// </summary>
/// <remarks>
/// This is an exmaple device plugin property. This should be modified or deleted as needed for the plugin being built.
/// </remarks>
/// <value>
/// WarningTimeoutMs property gets/sets the value as a long
/// </value>
/// <example>
/// <code>
/// "properties": {
/// "warningTimeoutMs": 180000
/// }
/// </code>
/// </example>
[JsonProperty("warningTimeoutMs")]
public long WarningTimeoutMs { get; set; }
/// <summary>
/// Serializes the error timeout value
/// </summary>
/// /// <remarks>
/// This is an exmaple device plugin property. This should be modified or deleted as needed for the plugin being built.
/// </remarks>
/// <value>
/// ErrorTimeoutMs property gets/sets the value as a long
/// </value>
/// <example>
/// <code>
/// "properties": {
/// "errorTimeoutMs": 300000
/// }
/// </code>
/// </example>
[JsonProperty("errorTimeoutMs")]
public long ErrorTimeoutMs { get; set; }
/// <summary>
/// Example dictionary of objects
/// </summary>
/// <remarks>
/// This is an example collection configuration object. This should be modified or deleted as needed for the plugin being built.
/// </remarks>
/// <example>
/// <code>
/// "properties": {
/// "presets": {
/// "preset1": {
/// "enabled": true,
/// "name": "Preset 1"
/// }
/// }
/// }
/// </code>
/// </example>
/// <example>
/// <code>
/// "properties": {
/// "inputNames": {
/// "input1": "Input 1",
/// "input2": "Input 2"
/// }
/// }
/// </code>
/// </example>
[JsonProperty("DeviceDictionary")]
public Dictionary<string, EssentialsPluginTemplateConfigObjectDictionary> DeviceDictionary { get; set; }
/// <summary>
/// Constuctor
/// </summary>
/// <remarks>
/// If using a collection you must instantiate the collection in the constructor
/// to avoid exceptions when reading the configuration file
/// </remarks>
public EssentialsPluginTemplateConfigObject()
{
DeviceDictionary = new Dictionary<string, EssentialsPluginTemplateConfigObjectDictionary>();
}
}
/// <summary>
/// Example plugin configuration dictionary object
/// </summary>
/// <remarks>
/// This is an example collection of configuration objects. This can be modified or deleted as needed for the plugin being built.
/// </remarks>
/// <example>
/// <code>
/// "properties": {
/// "dictionary": {
/// "item1": {
/// "name": "Item 1 Name",
/// "value": "Item 1 Value"
/// }
/// }
/// }
/// </code>
/// </example>
public class EssentialsPluginTemplateConfigObjectDictionary
{
/// <summary>
/// Serializes collection name property
/// </summary>
/// <remarks>
/// This is an example collection of configuration objects. This can be modified or deleted as needed for the plugin being built.
/// </remarks>
[JsonProperty("name")]
public string Name { get; set; }
/// <summary>
/// Serializes collection value property
/// </summary>
/// <remarks>
/// This is an example collection of configuration objects. This can be modified or deleted as needed for the plugin being built.
/// </remarks>
[JsonProperty("value")]
public uint Value { get; set; }
}
}

View File

@@ -1,11 +1,8 @@
// For Basic SIMPL# Classes
// For Basic SIMPL#Pro classes
using Crestron.SimplSharpPro.DeviceSupport;
using Crestron.SimplSharpPro.DeviceSupport;
using PepperDash.Core;
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges;
using PepperDash_Essentials_Core.Queues;
using PepperDash.Essentials.Core.Queues;
namespace EssentialsPluginTemplate
@@ -21,10 +18,7 @@ namespace EssentialsPluginTemplate
/// </example>
public class EssentialsPluginTemplateDevice : EssentialsBridgeableDevice
{
/// <summary>
/// It is often desirable to store the config
/// </summary>
private EssentialsPluginConfigObjectTemplate _config;
private EssentialsPluginTemplateConfigObject _config;
/// <summary>
/// Provides a queue and dedicated worker thread for processing feedback messages from a device.
@@ -33,21 +27,14 @@ namespace EssentialsPluginTemplate
#region IBasicCommunication Properties and Constructor. Remove if not needed.
// TODO [ ] Add, modify, remove properties and fields as needed for the plugin being developed
private readonly IBasicCommunication _comms;
private readonly GenericCommunicationMonitor _commsMonitor;
// _comms gather for ASCII based API's
// TODO [ ] If not using an ASCII based API, delete the properties below
private readonly CommunicationGather _commsGather;
/// <summary>
/// Set this value to that of the delimiter used by the API (if applicable)
/// </summary>
private const string CommsDelimiter = "\r";
// _comms byte buffer for HEX/byte based API's
// TODO [ ] If not using an HEX/byte based API, delete the properties below
private byte[] _commsByteBuffer = { };
@@ -98,16 +85,14 @@ namespace EssentialsPluginTemplate
/// <param name="name"></param>
/// <param name="config"></param>
/// <param name="comms"></param>
public EssentialsPluginTemplateDevice(string key, string name, EssentialsPluginConfigObjectTemplate config, IBasicCommunication comms)
public EssentialsPluginTemplateDevice(string key, string name, EssentialsPluginTemplateConfigObject config, IBasicCommunication comms)
: base(key, name)
{
Debug.Console(0, this, "Constructing new {0} instance", name);
// TODO [ ] Update the constructor as needed for the plugin device being developed
_config = config;
ReceiveQueue = new GenericQueue(key + "-rxqueue"); // If you need to set the thread priority, use one of the available overloaded constructors.
ReceiveQueue = new GenericQueue(key + "-rxqueue");
ConnectFeedback = new BoolFeedback(() => Connect);
OnlineFeedback = new BoolFeedback(() => _commsMonitor.IsOnline);
@@ -119,26 +104,15 @@ namespace EssentialsPluginTemplate
var socket = _comms as ISocketStatus;
if (socket != null)
{
// device comms is IP **ELSE** device comms is RS232
socket.ConnectionChange += socket_ConnectionChange;
Connect = true;
}
#region Communication data event handlers. Comment out any that don't apply to the API type
// Only one of the below handlers should be necessary.
// _comms gather for any API that has a defined delimiter
// TODO [ ] If not using an ASCII based API, remove the line below
_commsGather = new CommunicationGather(_comms, CommsDelimiter);
_commsGather.LineReceived += Handle_LineRecieved;
// _comms byte buffer for HEX/byte based API's with no delimiter
// TODO [ ] If not using an HEX/byte based API, remove the line below
_comms.BytesReceived += Handle_BytesReceived;
// _comms byte buffer for HEX/byte based API's with no delimiter
// TODO [ ] If not using an HEX/byte based API, remove the line below
_comms.TextReceived += Handle_TextReceived;
#endregion
@@ -154,26 +128,18 @@ namespace EssentialsPluginTemplate
StatusFeedback.FireUpdate();
}
// TODO [ ] If not using an API with a delimeter, delete the method below
private void Handle_LineRecieved(object sender, GenericCommMethodReceiveTextArgs args)
{
// TODO [ ] Implement method
// Enqueues the message to be processed in a dedicated thread, but the specified method
ReceiveQueue.Enqueue(new ProcessStringMessage(args.Text, ProcessFeedbackMessage));
}
// TODO [ ] If not using an HEX/byte based API with no delimeter, delete the method below
private void Handle_BytesReceived(object sender, GenericCommMethodReceiveBytesArgs args)
{
// TODO [ ] Implement method
throw new System.NotImplementedException();
}
// TODO [ ] If not using an ASCII based API with no delimeter, delete the method below
void Handle_TextReceived(object sender, GenericCommMethodReceiveTextArgs e)
{
// TODO [ ] Implement method
throw new System.NotImplementedException();
}
@@ -183,26 +149,23 @@ namespace EssentialsPluginTemplate
/// <param name="message"></param>
void ProcessFeedbackMessage(string message)
{
throw new System.NotImplementedException();
}
// TODO [ ] If not using an ACII based API, delete the properties below
/// <summary>
/// Sends text to the device plugin comms
/// </summary>
/// <remarks>
/// Can be used to test commands with the device plugin using the DEVPROPS and DEVJSON console commands
/// </remarks>
/// <param name="text">Command to be sent</param>
public void SendText(string text)
/// <summary>
/// Sends text to the device plugin comms
/// </summary>
/// <remarks>
/// Can be used to test commands with the device plugin using the DEVPROPS and DEVJSON console commands
/// </remarks>
/// <param name="text">Command to be sent</param>
public void SendText(string text)
{
if (string.IsNullOrEmpty(text)) return;
_comms.SendText(string.Format("{0}{1}", text, CommsDelimiter));
_comms.SendText($"{text}{CommsDelimiter}");
}
// TODO [ ] If not using an HEX/byte based API, delete the properties below
/// <summary>
/// Sends bytes to the device plugin comms
/// </summary>
@@ -225,8 +188,6 @@ namespace EssentialsPluginTemplate
/// </remarks>
public void Poll()
{
// TODO [ ] Update Poll method as needed for the plugin being developed
// Example: SendText("getstatus");
throw new System.NotImplementedException();
}
@@ -244,9 +205,8 @@ namespace EssentialsPluginTemplate
/// <param name="bridge"></param>
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
var joinMap = new EssentialsPluginBridgeJoinMapTemplate(joinStart);
var joinMap = new EssentialsPluginTemplateBridgeJoinMap(joinStart);
// This adds the join map to the collection on the bridge
if (bridge != null)
{
bridge.AddJoinMap(Key, joinMap);
@@ -262,9 +222,7 @@ namespace EssentialsPluginTemplate
Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
Debug.Console(0, "Linking to Bridge Type {0}", GetType().Name);
// TODO [ ] Implement bridge links as needed
// links to bridge
trilist.SetString(joinMap.DeviceName.JoinNumber, Name);
trilist.SetBoolSigAction(joinMap.Connect.JoinNumber, sig => Connect = sig);
@@ -286,7 +244,6 @@ namespace EssentialsPluginTemplate
private void UpdateFeedbacks()
{
// TODO [ ] Update as needed for the plugin being developed
ConnectFeedback.FireUpdate();
OnlineFeedback.FireUpdate();
StatusFeedback.FireUpdate();

View File

@@ -14,7 +14,7 @@ namespace EssentialsPluginTemplate
/// <example>
/// "EssentialsPluginFactoryTemplate" renamed to "MyDeviceFactory"
/// </example>
public class EssentialsPluginFactoryTemplate : EssentialsPluginDeviceFactory<EssentialsPluginTemplateDevice>
public class EssentialsPluginTemplateFactory : EssentialsPluginDeviceFactory<EssentialsPluginTemplateDevice>
{
/// <summary>
/// Plugin device factory constructor
@@ -32,7 +32,7 @@ namespace EssentialsPluginTemplate
/// TypeNames = new List<string>() { "SamsungMdc", "SamsungMdcDisplay" };
/// </code>
/// </example>
public EssentialsPluginFactoryTemplate()
public EssentialsPluginTemplateFactory()
{
// Set the minimum Essentials Framework Version
// TODO [ ] Update the Essentials minimum framework version which this plugin has been tested against
@@ -58,7 +58,7 @@ namespace EssentialsPluginTemplate
Debug.Console(1, "[{0}] Factory Attempting to create new device from type: {1}", dc.Key, dc.Type);
// get the plugin device properties configuration object & check for null
var propertiesConfig = dc.Properties.ToObject<EssentialsPluginConfigObjectTemplate>();
var propertiesConfig = dc.Properties.ToObject<EssentialsPluginTemplateConfigObject>();
if (propertiesConfig == null)
{
Debug.Console(0, "[{0}] Factory: failed to read properties config for {1}", dc.Key, dc.Name);
@@ -91,7 +91,7 @@ namespace EssentialsPluginTemplate
/// <example>
/// "EssentialsPluginFactoryTemplate" renamed to "MyLogicDeviceFactory"
/// </example>
public class EssentialsPluginFactoryLogicDeviceTemplate : EssentialsPluginDeviceFactory<EssentialsPluginTemplateLogicDevice>
public class EssentialsPluginTemplateFactoryLogicDevice : EssentialsPluginDeviceFactory<EssentialsPluginTemplateLogicDevice>
{
/// <summary>
/// Plugin device factory constructor
@@ -109,7 +109,7 @@ namespace EssentialsPluginTemplate
/// TypeNames = new List<string>() { "SamsungMdc", "SamsungMdcDisplay" };
/// </code>
/// </example>
public EssentialsPluginFactoryLogicDeviceTemplate()
public EssentialsPluginTemplateFactoryLogicDevice()
{
// Set the minimum Essentials Framework Version
// TODO [ ] Update the Essentials minimum framework version which this plugin has been tested against
@@ -136,7 +136,7 @@ namespace EssentialsPluginTemplate
Debug.Console(1, "[{0}] Factory Attempting to create new device from type: {1}", dc.Key, dc.Type);
// get the plugin device properties configuration object & check for null
var propertiesConfig = dc.Properties.ToObject<EssentialsPluginConfigObjectTemplate>();
var propertiesConfig = dc.Properties.ToObject<EssentialsPluginTemplateConfigObject>();
if (propertiesConfig == null)
{
Debug.Console(0, "[{0}] Factory: failed to read properties config for {1}", dc.Key, dc.Name);
@@ -166,7 +166,7 @@ namespace EssentialsPluginTemplate
/// <example>
/// "EssentialsPluginFactoryTemplate" renamed to "MyCrestronDeviceFactory"
/// </example>
public class EssentialsPluginFactoryCrestronDeviceTemplate : EssentialsPluginDeviceFactory<EssentialsPluginTemplateCrestronDevice>
public class EssentialsPluginTemplateFactoryCrestronDevice : EssentialsPluginDeviceFactory<EssentialsPluginTemplateCrestronDevice>
{
/// <summary>
/// Plugin device factory constructor
@@ -184,7 +184,7 @@ namespace EssentialsPluginTemplate
/// TypeNames = new List<string>() { "SamsungMdc", "SamsungMdcDisplay" };
/// </code>
/// </example>
public EssentialsPluginFactoryCrestronDeviceTemplate()
public EssentialsPluginTemplateFactoryCrestronDevice()
{
// Set the minimum Essentials Framework Version
// TODO [ ] Update the Essentials minimum framework version which this plugin has been tested against
@@ -211,7 +211,7 @@ namespace EssentialsPluginTemplate
Debug.Console(1, "[{0}] Factory Attempting to create new device from type: {1}", dc.Key, dc.Type);
// get the plugin device properties configuration object & check for null
var propertiesConfig = dc.Properties.ToObject<EssentialsPluginConfigObjectTemplate>();
var propertiesConfig = dc.Properties.ToObject<EssentialsPluginTemplateConfigObject>();
if (propertiesConfig == null)
{
Debug.Console(0, "[{0}] Factory: failed to read properties config for {1}", dc.Key, dc.Name);

View File

@@ -0,0 +1,40 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ProjectType>ProgramLibrary</ProjectType>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<RootNamespace>PDT.EssentialsPluginTemplate.EPI</RootNamespace>
<Deterministic>false</Deterministic>
<AssemblyTitle>PDT.EssentialsPluginTemplate.EPI</AssemblyTitle>
<Company>PepperDash Technologies</Company>
<Description>This software is a template for a PepperDash Essentials Plugin.</Description>
<Copyright>Copyright 2024</Copyright>
<Version>1.0.0-local</Version>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<InformationalVersion>$(Version)</InformationalVersion>
<OutputPath>4Series\bin\$(Configuration)\</OutputPath>
<Authors>PepperDash Technologies</Authors>
<PackageId>Pepperdash.Essentials.Plugins.Template</PackageId>
<PackageProjectUrl>https://github.com/PepperDash/EssentialsPluginTemplate.git</PackageProjectUrl>
<PackageTags>crestron 4series essentials plugin template</PackageTags>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>$(DefineConstants);SERIES4</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Properties\**" />
<EmbeddedResource Remove="Properties\**" />
<None Remove="Properties\**" />
</ItemGroup>
<ItemGroup>
<None Remove="PDT.EssentialsPluginTemplate.projectinfo" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="PepperDashEssentials" Version="2.0.0-beta-2559" />
</ItemGroup>
</Project>

View File

@@ -1,115 +1,115 @@
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{9D249E47-8F95-4437-A6BB-563510287AD1}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>PDT.EssentialsPluginTemplate.EPI</RootNamespace>
<AssemblyName>PDT.EssentialsPluginTemplate.EPI</AssemblyName>
<ProjectTypeGuids>{0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<PlatformFamilyName>WindowsCE</PlatformFamilyName>
<PlatformID>E2BECB1F-8C8C-41ba-B736-9BE7D946A398</PlatformID>
<OSVersion>5.0</OSVersion>
<DeployDirSuffix>SmartDeviceProject1</DeployDirSuffix>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<NativePlatformName>Windows CE</NativePlatformName>
<FormFactorID>
</FormFactorID>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<AllowedReferenceRelatedFileExtensions>.allowedReferenceRelatedFileExtensions</AllowedReferenceRelatedFileExtensions>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<FileAlignment>512</FileAlignment>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<GenerateSerializationAssemblies>off</GenerateSerializationAssemblies>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<AllowedReferenceRelatedFileExtensions>.allowedReferenceRelatedFileExtensions</AllowedReferenceRelatedFileExtensions>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<FileAlignment>512</FileAlignment>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<GenerateSerializationAssemblies>off</GenerateSerializationAssemblies>
</PropertyGroup>
<ItemGroup>
<Reference Include="Crestron.SimplSharpPro.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll</HintPath>
</Reference>
<Reference Include="Essentials Devices Common, Version=1.6.2.33892, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\PepperDashEssentials\lib\net35\Essentials Devices Common.dll</HintPath>
</Reference>
<Reference Include="mscorlib" />
<Reference Include="PepperDashEssentials, Version=1.4.19.29953, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\PepperDashEssentials\lib\net35\PepperDashEssentials.dll</HintPath>
</Reference>
<Reference Include="PepperDash_Core, Version=1.0.20.28344, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\PepperDashEssentials\lib\net35\PepperDash_Core.dll</HintPath>
</Reference>
<Reference Include="PepperDash_Essentials_Core, Version=1.4.19.29946, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\PepperDashEssentials\lib\net35\PepperDash_Essentials_Core.dll</HintPath>
</Reference>
<Reference Include="PepperDash_Essentials_DM, Version=1.3.7177.29951, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\PepperDashEssentials\lib\net35\PepperDash_Essentials_DM.dll</HintPath>
</Reference>
<Reference Include="SimplSharpCustomAttributesInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="SimplSharpHelperInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="SimplSharpNewtonsoft, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll</HintPath>
</Reference>
<Reference Include="SimplSharpPro, Version=1.5.3.17, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="SimplSharpReflectionInterface, Version=1.0.5583.25238, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
</ItemGroup>
<ItemGroup>
<Compile Include="EssentialsPluginTemplateLogicDevice.cs" />
<Compile Include="EssentialsPluginTemplateCrestronDevice.cs" />
<Compile Include="EssentialsPluginTemplateBridgeJoinMap.cs" />
<Compile Include="EssentialsPluginTemplateConfigObject.cs" />
<Compile Include="EssentialsPluginTemplateFactory.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="EssentialsPluginTemplateDevice.cs" />
<None Include="Properties\ControlSystem.cfg" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>rem S# Pro preparation will execute after these operations</PostBuildEvent>
</PropertyGroup>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{9D249E47-8F95-4437-A6BB-563510287AD1}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>PDT.EssentialsPluginTemplate.EPI</RootNamespace>
<AssemblyName>PDT.EssentialsPluginTemplate.EPI</AssemblyName>
<ProjectTypeGuids>{0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<PlatformFamilyName>WindowsCE</PlatformFamilyName>
<PlatformID>E2BECB1F-8C8C-41ba-B736-9BE7D946A398</PlatformID>
<OSVersion>5.0</OSVersion>
<DeployDirSuffix>SmartDeviceProject1</DeployDirSuffix>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<NativePlatformName>Windows CE</NativePlatformName>
<FormFactorID>
</FormFactorID>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<AllowedReferenceRelatedFileExtensions>.allowedReferenceRelatedFileExtensions</AllowedReferenceRelatedFileExtensions>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<FileAlignment>512</FileAlignment>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<GenerateSerializationAssemblies>off</GenerateSerializationAssemblies>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<AllowedReferenceRelatedFileExtensions>.allowedReferenceRelatedFileExtensions</AllowedReferenceRelatedFileExtensions>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<FileAlignment>512</FileAlignment>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<GenerateSerializationAssemblies>off</GenerateSerializationAssemblies>
</PropertyGroup>
<ItemGroup>
<Reference Include="Crestron.SimplSharpPro.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll</HintPath>
</Reference>
<Reference Include="Essentials Devices Common, Version=1.6.2.33892, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\PepperDashEssentials\lib\net35\Essentials Devices Common.dll</HintPath>
</Reference>
<Reference Include="mscorlib" />
<Reference Include="PepperDashEssentials, Version=1.4.19.29953, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\PepperDashEssentials\lib\net35\PepperDashEssentials.dll</HintPath>
</Reference>
<Reference Include="PepperDash_Core, Version=1.0.20.28344, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\PepperDashEssentials\lib\net35\PepperDash_Core.dll</HintPath>
</Reference>
<Reference Include="PepperDash_Essentials_Core, Version=1.4.19.29946, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\PepperDashEssentials\lib\net35\PepperDash_Essentials_Core.dll</HintPath>
</Reference>
<Reference Include="PepperDash_Essentials_DM, Version=1.3.7177.29951, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\PepperDashEssentials\lib\net35\PepperDash_Essentials_DM.dll</HintPath>
</Reference>
<Reference Include="SimplSharpCustomAttributesInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="SimplSharpHelperInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="SimplSharpNewtonsoft, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll</HintPath>
</Reference>
<Reference Include="SimplSharpPro, Version=1.5.3.17, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="SimplSharpReflectionInterface, Version=1.0.5583.25238, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
</ItemGroup>
<ItemGroup>
<Compile Include="EssentialsPluginTemplateLogicDevice.cs" />
<Compile Include="EssentialsPluginTemplateCrestronDevice.cs" />
<Compile Include="EssentialsPluginTemplateBridgeJoinMap.cs" />
<Compile Include="EssentialsPluginTemplateConfigObject.cs" />
<Compile Include="EssentialsPluginTemplateFactory.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="EssentialsPluginTemplateDevice.cs" />
<None Include="Properties\ControlSystem.cfg" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>rem S# Pro preparation will execute after these operations</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<package >
<metadata>
<id>PDT.EssentialsPluginTemplate</id>
<readme>docs\README.md</readme>
<version>2.0.2</version>
<title>Essentials Plugin Template</title>
<authors>PepperDash Technologies</authors>
<owners>pepperdash</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<license type="expression">MIT</license>
<projectUrl>https://github.com/PepperDash/EssentialsPluginTemplate</projectUrl>
<copyright>Copyright 2022</copyright>
<description>This software iserves as a template for generating new Essentials-Compliant plugins</description>
<tags>crestron 3series 4series essentials pepperdash pepperdashessentials epi essentials plugin</tags>
<repository type="git" url="https://github.com/PepperDash/EssentialsPluginTemplate"/>
</metadata>
<files>
<file src="**" target="lib\net35"/>
<file src="**" target="lib\net47"/>
<file src="README.md" target="docs\"/>
</files>
</package>

View File

@@ -1,8 +1,8 @@
using System.Reflection;
[assembly: AssemblyTitle("EssentialsPluginTemplateEpi")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("EssentialsPluginTemplateEpi")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyVersion("1.0.0.*")]
using System.Reflection;
[assembly: AssemblyTitle("EssentialsPluginTemplateEpi")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("EssentialsPluginTemplateEpi")]
[assembly: AssemblyCopyright("Copyright © 2022")]
[assembly: AssemblyVersion("1.0.0.*")]