Compare commits
91 Commits
feature/up
...
docs/versi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52a14c1f3a | ||
|
|
bb991544c4 | ||
|
|
663f2483b3 | ||
|
|
ba5d0f33a6 | ||
|
|
4283fb2abd | ||
|
|
4ee211576f | ||
|
|
085a2d7659 | ||
|
|
952d5b61a4 | ||
|
|
c225184021 | ||
|
|
3f2ef80877 | ||
|
|
de4cbcac73 | ||
|
|
61b8c51db2 | ||
|
|
eee7822de0 | ||
|
|
85d2e4e1dc | ||
|
|
7c3c0bea71 | ||
|
|
a427afaf3c | ||
|
|
2264d90372 | ||
|
|
809fb79bf1 | ||
|
|
507ca486ab | ||
|
|
4ec7550625 | ||
|
|
d327f2def8 | ||
|
|
4244b394e7 | ||
|
|
1b3c28da0c | ||
|
|
2586e9502d | ||
|
|
7ba409d64c | ||
|
|
0746d309df | ||
|
|
259a71c562 | ||
|
|
62f959bb25 | ||
|
|
62912451e8 | ||
|
|
ee057ad361 | ||
|
|
af7e9ae659 | ||
|
|
f08741efd6 | ||
|
|
1add0c193c | ||
|
|
3d57ac3560 | ||
|
|
856178d920 | ||
|
|
87872b78e2 | ||
|
|
266bf187d9 | ||
|
|
592400cc90 | ||
|
|
baaf7c4a28 | ||
|
|
57a265d27f | ||
|
|
0cf654ce2d | ||
|
|
24b02b199d | ||
|
|
91ff0d8c83 | ||
|
|
3b7ddac369 | ||
|
|
fcbf710781 | ||
|
|
2ff646e499 | ||
|
|
c323b982ae | ||
|
|
d46444e424 | ||
|
|
6541856958 | ||
|
|
710642bde5 | ||
|
|
587a647d27 | ||
|
|
6fb86d82c8 | ||
|
|
4143783d2e | ||
|
|
dc0b129277 | ||
|
|
26d0497362 | ||
|
|
114d3af162 | ||
|
|
fdf989c472 | ||
|
|
ca893bf07b | ||
|
|
8ed24e7c61 | ||
|
|
33c7922a9b | ||
|
|
f80ccde910 | ||
|
|
d09c5c5f00 | ||
|
|
8041db8b51 | ||
|
|
98bc7b0e5e | ||
|
|
aeb43e6c52 | ||
|
|
b7d9a21d0e | ||
|
|
fd709ba2e1 | ||
|
|
54115a0907 | ||
|
|
a13cfa6d51 | ||
|
|
d78fc1da9d | ||
|
|
10c23fcd40 | ||
|
|
4b4148af02 | ||
|
|
6b93162592 | ||
|
|
ff5ad93c6f | ||
|
|
c67e67b942 | ||
|
|
dd52a4e613 | ||
|
|
d28108a132 | ||
|
|
07019ad6d8 | ||
|
|
d590987143 | ||
|
|
05ba06661c | ||
|
|
f0617f2116 | ||
|
|
03e2e68fea | ||
|
|
057c2cfca9 | ||
|
|
1e4b7be2ff | ||
|
|
b2d7c9d246 | ||
|
|
498248fcc4 | ||
|
|
0a6c163bef | ||
|
|
279a89149f | ||
|
|
13fad8166a | ||
|
|
ddd394e0a5 | ||
|
|
8c4b48e1b8 |
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: "[BUG]-"
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**Stacktrace**
|
||||
|
||||
Include a stack trace of the exception if possible.
|
||||
```
|
||||
Paste stack trace here
|
||||
```
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
17
.github/ISSUE_TEMPLATE/essentials-plugin-request.md
vendored
Normal 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.
|
||||
21
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: "[FEATURE]-"
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
If this is a request for support for a new device or type, be as specific as possible and include any pertinent manufacturer and model information.
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
45
.github/scripts/GenerateVersionNumber.ps1
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
$latestVersions = $(git tag --merged origin/main)
|
||||
$latestVersion = [version]"0.0.0"
|
||||
Foreach ($version in $latestVersions) {
|
||||
Write-Host $version
|
||||
try {
|
||||
if (([version]$version) -ge $latestVersion) {
|
||||
$latestVersion = $version
|
||||
Write-Host "Setting latest version to: $latestVersion"
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-Host "Unable to convert $($version). Skipping"
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$newVersion = [version]$latestVersion
|
||||
$phase = ""
|
||||
$newVersionString = ""
|
||||
switch -regex ($Env:GITHUB_REF) {
|
||||
'^refs\/heads\/main*.' {
|
||||
$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 $version.Major, $version.Minor, $version.Build, $phase, $Env:GITHUB_RUN_NUMBER
|
||||
}
|
||||
'^refs\/heads\/dev*.' {
|
||||
$phase = 'beta'
|
||||
$newVersionString = "{0}.{1}.{2}-{3}-{4}" -f $newVersion.Major, $newVersion.Minor, ($newVersion.Build + 1), $phase, $Env:GITHUB_RUN_NUMBER
|
||||
}
|
||||
'^refs\/heads\/hotfix\/*.' {
|
||||
$phase = 'hotfix'
|
||||
$newVersionString = "{0}.{1}.{2}-{3}-{4}" -f $newVersion.Major, $newVersion.Minor, ($newVersion.Build + 1), $phase, $Env:GITHUB_RUN_NUMBER
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Write-Output $newVersionString
|
||||
40
.github/scripts/UpdateAssemblyVersion.ps1
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
function Update-SourceVersion {
|
||||
Param ([string]$Version)
|
||||
#$fullVersion = $Version
|
||||
$baseVersion = [regex]::Match($Version, "(\d+.\d+.\d+).*").captures.groups[1].value
|
||||
$NewAssemblyVersion = ‘AssemblyVersion("‘ + $baseVersion + ‘.*")’
|
||||
Write-Output "AssemblyVersion = $NewAssemblyVersion"
|
||||
$NewAssemblyInformationalVersion = ‘AssemblyInformationalVersion("‘ + $Version + ‘")’
|
||||
Write-Output "AssemblyInformationalVersion = $NewAssemblyInformationalVersion"
|
||||
|
||||
foreach ($o in $input) {
|
||||
Write-output $o.FullName
|
||||
$TmpFile = $o.FullName + “.tmp”
|
||||
get-content $o.FullName |
|
||||
ForEach-Object {
|
||||
$_ -replace ‘AssemblyVersion\(".*"\)’, $NewAssemblyVersion } |
|
||||
ForEach-Object {
|
||||
$_ -replace ‘AssemblyInformationalVersion\(".*"\)’, $NewAssemblyInformationalVersion
|
||||
} > $TmpFile
|
||||
move-item $TmpFile $o.FullName -force
|
||||
}
|
||||
}
|
||||
|
||||
function Update-AllAssemblyInfoFiles ( $version ) {
|
||||
foreach ($file in “AssemblyInfo.cs”, “AssemblyInfo.vb” ) {
|
||||
get-childitem -Path $Env:GITHUB_WORKSPACE -recurse | Where-Object { $_.Name -eq $file } | Update-SourceVersion $version ;
|
||||
}
|
||||
}
|
||||
|
||||
# validate arguments
|
||||
$r = [System.Text.RegularExpressions.Regex]::Match($args[0], "\d+\.\d+\.\d+.*");
|
||||
if ($r.Success) {
|
||||
Write-Output "Updating Assembly Version to $args ...";
|
||||
Update-AllAssemblyInfoFiles $args[0];
|
||||
}
|
||||
else {
|
||||
Write-Output ” “;
|
||||
Write-Output “Error: Input version does not match x.y.z format!”
|
||||
Write-Output ” “;
|
||||
Write-Output "Unable to apply version to AssemblyInfo.cs files";
|
||||
}
|
||||
42
.github/scripts/ZipBuildOutput.ps1
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
# Uncomment these for local testing
|
||||
# $Env:GITHUB_WORKSPACE = "C:\Working Directories\PD\essentials"
|
||||
# $Env:SOLUTION_FILE = "PepperDashEssentials"
|
||||
# $Env:VERSION = "0.0.0-buildType-test"
|
||||
|
||||
# Sets the root directory for the operation
|
||||
$destination = "$($Env:GITHUB_HOME)\output"
|
||||
New-Item -ItemType Directory -Force -Path ($destination)
|
||||
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 "*.cplz" | ForEach-Object {
|
||||
$allowed = $true;
|
||||
# Exclude any files in submodules
|
||||
foreach ($exclude in $exclusions) {
|
||||
if ((Split-Path $_.FullName -Parent).contains("$($exclude)")) {
|
||||
$allowed = $false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($allowed) {
|
||||
Write-Host "allowing $($_)"
|
||||
$_;
|
||||
}
|
||||
} | Copy-Item -Destination ($destination) -Force
|
||||
Write-Host "Getting matching files..."
|
||||
# Get any files from the output folder that match the following extensions
|
||||
Get-ChildItem -Path $destination | Where-Object {($_.Extension -eq ".clz") -or ($_.Extension -eq ".cpz" -or ($_.Extension -eq ".cplz"))} | ForEach-Object {
|
||||
# Replace the extensions with dll and xml and create an array
|
||||
$filenames = @($($_ -replace "cpz|clz|cplz", "dll"), $($_ -replace "cpz|clz|cplz", "xml"))
|
||||
Write-Host "Filenames:"
|
||||
Write-Host $filenames
|
||||
if ($filenames.length -gt 0) {
|
||||
# Attempt to get the files and return them to the output directory
|
||||
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
|
||||
22
.github/workflows/EssentialsPlugins-builds-caller.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
name: Build Essentials Plugin
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '**'
|
||||
|
||||
jobs:
|
||||
getVersion:
|
||||
uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-getversion.yml@main
|
||||
secrets: inherit
|
||||
|
||||
build-4Series:
|
||||
uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-4Series-builds.yml@main
|
||||
secrets: inherit
|
||||
needs: getVersion
|
||||
if: needs.getVersion.outputs.newVersion == 'true'
|
||||
with:
|
||||
newVersion: ${{ needs.getVersion.outputs.newVersion }}
|
||||
version: ${{ needs.getVersion.outputs.version }}
|
||||
tag: ${{ needs.getVersion.outputs.tag }}
|
||||
channel: ${{ needs.getVersion.outputs.channel }}
|
||||
14
.github/workflows/essentialsplugins-updatereadme-caller.yml
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
name: Generate README
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- 'robot-docs'
|
||||
|
||||
jobs:
|
||||
call-update-readme:
|
||||
uses: PepperDash/workflow-templates/.github/workflows/update-readme.yml@main
|
||||
with:
|
||||
target-branch: ${{ github.ref_name }}
|
||||
|
||||
359
.gitignore
vendored
Normal file
@@ -0,0 +1,359 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*[.json, .xml, .info]
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Crestron Zip Files
|
||||
*.cplz
|
||||
*.clz
|
||||
*.projectinfo
|
||||
*.suo
|
||||
3
.gitmodules
vendored
@@ -1,3 +0,0 @@
|
||||
[submodule "EssentialsBuilds"]
|
||||
path = EssentialsBuilds
|
||||
url=https://github.com/PepperDash/Essentials-Builds.git
|
||||
34
.releaserc.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
2
GetPackages.BAT
Normal file
@@ -0,0 +1,2 @@
|
||||
@Echo ON
|
||||
nuget install .\packages.config -OutputDirectory .\packages -excludeVersion
|
||||
@@ -1,52 +0,0 @@
|
||||
using System;
|
||||
using Crestron.SimplSharp; // For Basic SIMPL# Classes
|
||||
using Crestron.SimplSharpPro; // For Basic SIMPL#Pro classes
|
||||
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
using PepperDash.Essentials;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
using PepperDash.Core;
|
||||
|
||||
namespace EssentialsPluginTemplateEPI
|
||||
{
|
||||
/// <summary>
|
||||
/// This class contains the necessary properties and static methods required to function as an Essentials Plugin
|
||||
/// </summary>
|
||||
public class EssentialsPluginFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// This string is used to define the minimum version of the
|
||||
/// Essentials Framework required for this plugin
|
||||
/// </summary>
|
||||
public static string MinimumEssentialsFrameworkVersion = "1.4.31";
|
||||
|
||||
/// <summary>
|
||||
/// This method will get called by Essentials when this plugin is loaded.
|
||||
/// Use it to add factory methods for all new Device types defined in this plugin
|
||||
/// </summary>
|
||||
public static void LoadPlugin()
|
||||
{
|
||||
PepperDash.Essentials.Core.DeviceFactory.AddFactoryForType("EssentialsPluginTemplate", EssentialsPluginFactory.BuildDevice);
|
||||
|
||||
// Add additional factories for each type here
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds an instance of the device type. There should be method like this defined for each device type your plugin needs
|
||||
/// to be able to build
|
||||
/// </summary>
|
||||
/// <param name="dc">The device configuration</param>
|
||||
/// <returns>The device</returns>
|
||||
public static EssentialsPluginTemplateDevice BuildDevice(DeviceConfig dc)
|
||||
{
|
||||
var config = JsonConvert.DeserializeObject<EssentialsPluginTemplatePropertiesConfig>(dc.Properties.ToString());
|
||||
var newDevice = new EssentialsPluginTemplateDevice(dc.Key, dc.Name, config);
|
||||
return newDevice;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Bridges;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace EssentialsPluginTemplateEPI
|
||||
{
|
||||
public static class EssentialsPluginTemplateBridge
|
||||
{
|
||||
public static void LinkToApiExt(this EssentialsPluginFactory DspDevice, BasicTriList trilist, uint joinStart, string joinMapKey)
|
||||
{
|
||||
// Construct the default join map
|
||||
EssentialsPluginTemplateBridgeJoinMap joinMap = new EssentialsPluginTemplateBridgeJoinMap();
|
||||
|
||||
// Attempt to get a custom join map if specified in config
|
||||
var joinMapSerialized = JoinMapHelper.GetJoinMapForDevice(joinMapKey);
|
||||
|
||||
// If we find a custom join map, deserialize it
|
||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||
joinMap = JsonConvert.DeserializeObject<EssentialsPluginTemplateBridgeJoinMap>(joinMapSerialized);
|
||||
|
||||
// Offset the joins based on the join start
|
||||
joinMap.OffsetJoinNumbers(joinStart);
|
||||
|
||||
|
||||
// Set all your join actions here
|
||||
|
||||
|
||||
// Link all your feedbacks to joins here
|
||||
|
||||
}
|
||||
}
|
||||
public class EssentialsPluginTemplateBridgeJoinMap : JoinMapBase
|
||||
{
|
||||
// Specify your joins here
|
||||
|
||||
|
||||
public EssentialsPluginTemplateBridgeJoinMap()
|
||||
{
|
||||
// Set the values of your joins here
|
||||
}
|
||||
|
||||
public override void OffsetJoinNumbers(uint joinStart)
|
||||
{
|
||||
// Offset the joins from joinStart as applicable
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using PepperDash.Core;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace EssentialsPluginTemplateEPI
|
||||
{
|
||||
/// <summary>
|
||||
/// Example of a config class that represents the structure of the Properties object of a DeviceConfig.
|
||||
/// The BuildDevice method will attempt to deserialize the Properties object into this class.
|
||||
/// Populate with any necssary properties for your device
|
||||
/// </summary>
|
||||
public class EssentialsPluginTemplatePropertiesConfig
|
||||
{
|
||||
// Below are some example properties
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Control properties if needed to communicate with device.
|
||||
/// The JsonProperty attribute has been added to specify the name
|
||||
/// of the object and that it is required
|
||||
/// </summary>
|
||||
[JsonProperty("control", Required = Required.Always)]
|
||||
ControlPropertiesConfig Control { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Add custom properties here
|
||||
/// </summary>
|
||||
[JsonProperty("myDeviceProperty")]
|
||||
string MyDeviceProperty { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
|
||||
using PepperDash.Essentials;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Bridges;
|
||||
|
||||
namespace EssentialsPluginTemplateEPI
|
||||
{
|
||||
/// <summary>
|
||||
/// Example of a plugin device
|
||||
/// </summary>
|
||||
public class EssentialsPluginTemplateDevice : Device, IBridge
|
||||
{
|
||||
/// <summary>
|
||||
/// Device Constructor. Called by BuildDevice
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="config"></param>
|
||||
public EssentialsPluginTemplateDevice(string key, string name, EssentialsPluginTemplatePropertiesConfig config)
|
||||
: base(key, name)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add items to be executed during the Activaction phase
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override bool CustomActivate()
|
||||
{
|
||||
|
||||
return base.CustomActivate();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This method gets called by the EiscApi bridge and calls your bridge extension method
|
||||
/// </summary>
|
||||
/// <param name="trilist"></param>
|
||||
/// <param name="joinStart"></param>
|
||||
/// <param name="joinMapKey"></param>
|
||||
public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey)
|
||||
{
|
||||
this.LinkToApi(trilist, joinStart, joinMapKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<DeployDeviceID>E282E6BE-C7C3-4ece-916A-88FB1CF8AF3C</DeployDeviceID>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -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
|
||||
@@ -1,20 +0,0 @@
|
||||
<ProgramInfo>
|
||||
<RequiredInfo>
|
||||
<FriendlyName>PDTEssentialsPluginT</FriendlyName>
|
||||
<SystemName>PDT.EssentialsPluginTemplate.EPI</SystemName>
|
||||
<EntryPoint>PDT.EssentialsPluginTemplate.EPI</EntryPoint>
|
||||
<MinFirmwareVersion>1.009.0029</MinFirmwareVersion>
|
||||
<ProgramTool>SIMPL# Plugin</ProgramTool>
|
||||
<DesignToolId>5</DesignToolId>
|
||||
<ProgramToolId>5</ProgramToolId>
|
||||
<ArchiveName />
|
||||
</RequiredInfo>
|
||||
<OptionalInfo>
|
||||
<CompiledOn>2020-02-13 3:58:57 PM</CompiledOn>
|
||||
<CompilerRev>1.0.0.28767</CompilerRev>
|
||||
</OptionalInfo>
|
||||
<Plugin>
|
||||
<Version>Crestron.SIMPLSharp, Version=2.0.58.0, Culture=neutral, PublicKeyToken=812d080f93e2de10</Version>
|
||||
<Include4.dat>2.11.030</Include4.dat>
|
||||
</Plugin>
|
||||
</ProgramInfo>
|
||||
@@ -1,78 +0,0 @@
|
||||
MainAssembly=PDT.EssentialsPluginTemplate.EPI.dll:6808b45c8c5d7c4d3852fe284ea334cf
|
||||
MainAssemblyMinFirmwareVersion=1.009.0029
|
||||
MainAssemblyResource=SimplSharpData.dat:820b61c48c8a2cace82957eed4cc377c
|
||||
MainAssemblyResource=SimplSharpData.dat.der:bf862965c00f3e6ec535e4e00e82d30c
|
||||
MainAssemblyResource=SimplSharpData.dat:820b61c48c8a2cace82957eed4cc377c
|
||||
MainAssemblyResource=SimplSharpData.dat.der:bf862965c00f3e6ec535e4e00e82d30c
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.DeviceSupport.dll:caae4b4259aaf619059f0ae34473bfd2
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:Crestron.SimplSharpPro.DeviceSupport.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.DeviceSupport.dll:caae4b4259aaf619059f0ae34473bfd2
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.DM.dll:bdf5acfa80cc3bb87f21deb891128b1d
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:Crestron.SimplSharpPro.DM.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.DM.dll:bdf5acfa80cc3bb87f21deb891128b1d
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.EthernetCommunications.dll:36e663497195140ee6f1b4ebc53f5ea7
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:Crestron.SimplSharpPro.EthernetCommunications.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.EthernetCommunications.dll:36e663497195140ee6f1b4ebc53f5ea7
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.Fusion.dll:2ceb645ad5aa098f78c4b6c963af2df2
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:Crestron.SimplSharpPro.Fusion.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.Fusion.dll:2ceb645ad5aa098f78c4b6c963af2df2
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.Gateways.dll:7242e212aa3843228a5d91eb66829f8a
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:Crestron.SimplSharpPro.Gateways.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.Gateways.dll:7242e212aa3843228a5d91eb66829f8a
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.GeneralIO.dll:8d02fa210764e02ccb11491caf122d53
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:Crestron.SimplSharpPro.GeneralIO.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.GeneralIO.dll:8d02fa210764e02ccb11491caf122d53
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.Lighting.dll:5a4a355db03b075b1e731469c0440a86
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:Crestron.SimplSharpPro.Lighting.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.Lighting.dll:5a4a355db03b075b1e731469c0440a86
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.Shades.dll:7061e8c8e7e8a57e2bc5a156e037f70b
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:Crestron.SimplSharpPro.Shades.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.Shades.dll:7061e8c8e7e8a57e2bc5a156e037f70b
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.UI.dll:089312a0cb0b4537072d4eb234e71e0e
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:Crestron.SimplSharpPro.UI.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.UI.dll:089312a0cb0b4537072d4eb234e71e0e
|
||||
ü
|
||||
DependencySource=Essentials Devices Common.dll:2a3e604271af752bcc3d44a88c413a04
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:Essentials Devices Common.dll
|
||||
DependencyMainAssembly=Essentials Devices Common.dll:2a3e604271af752bcc3d44a88c413a04
|
||||
ü
|
||||
DependencySource=PepperDashEssentials.dll:5f8619a0a04001da41c15402c0865638
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:PepperDashEssentials.dll
|
||||
DependencyMainAssembly=PepperDashEssentials.dll:5f8619a0a04001da41c15402c0865638
|
||||
ü
|
||||
DependencySource=PepperDash_Core.dll:70f5a232b163f80b5d9f30b499a6eb18
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:PepperDash_Core.dll
|
||||
DependencyMainAssembly=PepperDash_Core.dll:70f5a232b163f80b5d9f30b499a6eb18
|
||||
ü
|
||||
DependencySource=PepperDash_Essentials_Core.dll:96e019f9a7bee024e462a74c0594fc6f
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:PepperDash_Essentials_Core.dll
|
||||
DependencyMainAssembly=PepperDash_Essentials_Core.dll:96e019f9a7bee024e462a74c0594fc6f
|
||||
ü
|
||||
DependencySource=PepperDash_Essentials_DM.dll:80c9770b1f20885ea340683270b90501
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:PepperDash_Essentials_DM.dll
|
||||
DependencyMainAssembly=PepperDash_Essentials_DM.dll:80c9770b1f20885ea340683270b90501
|
||||
ü
|
||||
DependencySource=SimplSharpNewtonsoft.dll:9c09c5d30daedddf895c36acbface0d5
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:SimplSharpNewtonsoft.dll
|
||||
DependencyMainAssembly=SimplSharpNewtonsoft.dll:9c09c5d30daedddf895c36acbface0d5
|
||||
ü
|
||||
DependencySource=SimplSharpReflectionInterface.dll:e3ff8edbba84ccd7155b9984e67488b2
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:SimplSharpReflectionInterface.dll
|
||||
DependencyMainAssembly=SimplSharpReflectionInterface.dll:e3ff8edbba84ccd7155b9984e67488b2
|
||||
ü
|
||||
DependencySource=SimplSharpSQLHelperInterface.dll:f0c505ddecd8a783d4b75217501cbb72
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:SimplSharpSQLHelperInterface.dll
|
||||
DependencyMainAssembly=SimplSharpSQLHelperInterface.dll:f0c505ddecd8a783d4b75217501cbb72
|
||||
ü
|
||||
DependencySource=SimplSharpTimerEventInterface.dll:c08c24694aafb0f575a49c66f8491477
|
||||
DependencyPath=PDT.EssentialsPluginTemplate.EPI.cplz:SimplSharpTimerEventInterface.dll
|
||||
DependencyMainAssembly=SimplSharpTimerEventInterface.dll:c08c24694aafb0f575a49c66f8491477
|
||||
@@ -1,23 +0,0 @@
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\obj\Debug\ResolveAssemblyReference.cache
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\NvxUrlRoutingClientEpi.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\NvxUrlRoutingClientEpi.pdb
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\PepperDash_Core.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\PepperDash_Essentials_Core.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\PepperDash_Essentials_DM.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\PepperDashEssentials.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\SimplSharpNewtonsoft.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\SimplSharpReflectionInterface.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\Crestron.SimplSharpPro.Lighting.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\Crestron.SimplSharpPro.Gateways.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\SimplSharpSQLHelperInterface.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\Crestron.SimplSharpPro.Fusion.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\Crestron.SimplSharpPro.Shades.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\Crestron.SimplSharpPro.EthernetCommunications.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\Crestron.SimplSharpPro.DeviceSupport.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\Crestron.SimplSharpPro.UI.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\SimplSharpTimerEventInterface.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\Essentials Devices Common.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\Crestron.SimplSharpPro.GeneralIO.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\bin\Debug\Crestron.SimplSharpPro.DM.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\obj\Debug\NvxUrlRoutingClientEpi.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\KPMG\SLN103-AVNoc\SLN103-AVNoc.Plugins\NvxUrlRoutingClient.Epi\NvxUrlRoutingClientEpi\obj\Debug\NvxUrlRoutingClientEpi.pdb
|
||||
@@ -1,46 +0,0 @@
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\obj\Debug\ResolveAssemblyReference.cache
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\PDT.EssentialsPluginTemplate.EPI.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\PDT.EssentialsPluginTemplate.EPI.pdb
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\PepperDash_Core.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\PepperDash_Essentials_Core.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\PepperDash_Essentials_DM.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\PepperDashEssentials.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\SimplSharpNewtonsoft.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\SimplSharpReflectionInterface.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.Lighting.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.Gateways.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\SimplSharpSQLHelperInterface.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.Fusion.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.Shades.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.EthernetCommunications.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.DeviceSupport.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.UI.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\SimplSharpTimerEventInterface.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Essentials Devices Common.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.GeneralIO.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.DM.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\obj\Debug\PDT.EssentialsPluginTemplate.EPI.dll
|
||||
C:\Users\JTA\Documents\Stash Folder\Frameworks\PDT.EssentialsPluginTemplate.EPI\PDT.EssentialsPluginTemplate.EPI\obj\Debug\PDT.EssentialsPluginTemplate.EPI.pdb
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\obj\Debug\ResolveAssemblyReference.cache
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\obj\Debug\PDT.EssentialsPluginTemplate.EPI.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\obj\Debug\PDT.EssentialsPluginTemplate.EPI.pdb
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\PDT.EssentialsPluginTemplate.EPI.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\PDT.EssentialsPluginTemplate.EPI.pdb
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\PepperDash_Core.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\PepperDash_Essentials_Core.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\PepperDash_Essentials_DM.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\PepperDashEssentials.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\SimplSharpNewtonsoft.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\SimplSharpReflectionInterface.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.Lighting.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.Gateways.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\SimplSharpSQLHelperInterface.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.Fusion.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.Shades.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.EthernetCommunications.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.DeviceSupport.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.UI.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\SimplSharpTimerEventInterface.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Essentials Devices Common.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.GeneralIO.dll
|
||||
C:\Working Directories\PD\EssentialsPluginTemplate\PDT.EssentialsPluginTemplate.EPI\bin\Debug\Crestron.SimplSharpPro.DM.dll
|
||||
60
README.md
@@ -1,2 +1,60 @@
|
||||
# PDT.EssentialsPluginTemplate.EPI
|
||||

|
||||
|
||||
# Essentials Plugin Template (c) 2023
|
||||
|
||||
## License
|
||||
|
||||
Provided under MIT license
|
||||
|
||||
## Overview
|
||||
|
||||
Fork this repo when creating a new plugin for Essentials. For more information about plugins, refer to the Essentials Wiki [Plugins](https://github.com/PepperDash/Essentials/wiki/Plugins) article.
|
||||
|
||||
This repo contains example classes for the three main categories of devices:
|
||||
* `EssentialsPluginTemplateDevice`: Used for most third party devices which require communication over a streaming mechanism such as a Com port, TCP/SSh/UDP socket, CEC, etc
|
||||
* `EssentialsPluginTemplateLogicDevice`: Used for devices that contain logic, but don't require any communication with third parties outside the program
|
||||
* `EssentialsPluginTemplateCrestronDevice`: Used for devices that represent a piece of Crestron hardware
|
||||
|
||||
There are matching factory classes for each of the three categories of devices. The `EssentialsPluginTemplateConfigObject` should be used as a template and modified for any of the categories of device. Same goes for the `EssentialsPluginTemplateBridgeJoinMap`.
|
||||
|
||||
This also illustrates how a plugin can contain multiple devices.
|
||||
|
||||
## Cloning Instructions
|
||||
|
||||
After forking this repository into your own GitHub space, you can create a new repository using this one as the template. Then you must install the necessary dependencies as indicated below.
|
||||
|
||||
## Dependencies
|
||||
|
||||
The [Essentials](https://github.com/PepperDash/Essentials) libraries are required. They referenced via nuget. You must have nuget.exe installed and in the `PATH` environment variable to use the following command. Nuget.exe is available at [nuget.org](https://dist.nuget.org/win-x86-commandline/latest/nuget.exe).
|
||||
|
||||
### Installing Dependencies
|
||||
|
||||
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
|
||||
|
||||
If you need a different version of PepperDash Core, use the command `nuget install .\packages.config -OutputDirectory .\packages -excludeVersion -Version {versionToGet}`. Omitting the `-Version` option will pull the version indicated in the packages.config file.
|
||||
|
||||
### Instructions for Renaming Solution and Files
|
||||
|
||||
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__
|
||||
110
Readme-Upgrade-to-4Series.md
Normal file
@@ -0,0 +1,110 @@
|
||||

|
||||
|
||||
# Upgrading an EPI: Essentials v1.x → v2.x
|
||||
|
||||
## Preparation
|
||||
|
||||
1. **Clone the Template Repo referred to as TR** to your local machine.
|
||||
- [EssentialsPluginTemplate](https://github.com/PepperDash/EssentialsPluginTemplate)
|
||||
2. **Checkout `main` branch** in the TR.
|
||||
|
||||
## Branching
|
||||
|
||||
4. In your EPI repo:
|
||||
- Confirm it does **not already support Essentials v2.x**.
|
||||
- Ensure there is **no existing 4-series update branch**.
|
||||
- Create a new branch (e.g., `feature/4-series-updates`) from `main`.
|
||||
|
||||
## Upgrade Steps
|
||||
|
||||
5. In the new branch:
|
||||
- **Replace** EPI `.github` files/folders with those from TR as needed.
|
||||
- *Note:* Retain any custom workflows if required. Consult with PepperDash Team if unsure.
|
||||
- **Copy** the following from TR to EPI:
|
||||
- `.releaserc.json` (root)
|
||||
- `epi-make-model.4Series.sln` (root)
|
||||
- `src/epi-make-model.4Series.csproj` (create `src` folder if missing)
|
||||
- `images` folder (if your `readme.md` lacks the standard logo)
|
||||
- **Initial Commit:** Commit changes, but do **not** push yet.
|
||||
|
||||
6. **If EPI has a `src/*.nuspec` file:**
|
||||
- Record these values from `Nuspec` for later:
|
||||
- `<id>` (Package ID)
|
||||
- `<projectUrl>` (Project URL)
|
||||
- `<title>` (Assembly Title)
|
||||
|
||||
7. **Open Solution:**
|
||||
- Open `epi-make-model.4Series.sln` in Visual Studio 2022.
|
||||
- If errors occur, ensure the `.csproj` file is located within `src` folder.
|
||||
|
||||
8. **Update Project Properties:**
|
||||
- In `src/epi-make-model.4Series.csproj`, update:
|
||||
- `AssemblyTitle` (from nuspec `<title>`)
|
||||
- `RootNamespace` (from existing EPI, device namespace actual)
|
||||
- `PackageProjectUrl` (from nuspec `<projectUrl>`)
|
||||
- **Rename `make-model` build path references shown below:**
|
||||
|
||||

|
||||
- **Add runtime exclusion:**
|
||||
Add `<ExcludeAssets>runtime</ExcludeAssets>` to the PepperDash Essentials `PackageReference`.
|
||||
|
||||

|
||||
|
||||
9. **Copy Build Files:**
|
||||
- Copy `src/Directory.Build.props` and `src/Directory.Build.targets` from TR.
|
||||
- Update `RepositoryUrl` in `Directory.Build.props` to match nuspec `PackageProjectUrl`.
|
||||
- Remove "template" text from `<Product>` in `Directory.Build.props` as needed.
|
||||
|
||||
10. **Clean Up:**
|
||||
- Delete old Visual Studio 2008 files: `.sln`, `.suo`, `.nuspec`, `.csproj`, `.csproj.user`, `.projectinfo`.
|
||||
- Ensure file structure matches below example:
|
||||
```
|
||||
├── src/
|
||||
│ ├── Directory.Build.props
|
||||
│ ├── Directory.Build.tagets
|
||||
│ ├── *.3Series.csproj
|
||||
│ └── *.4Series.csproj
|
||||
├── .releaserc.json
|
||||
├── *.3Series.sln
|
||||
├── *.4Series.sln
|
||||
├── LICENSE.md
|
||||
└── README.md
|
||||
```
|
||||
|
||||
11. **Rename Solution/Project** as needed.
|
||||
|
||||

|
||||
|
||||
12. **Update Project References and Dependencies**
|
||||
- Remove old PepperDash Essentials dependency.
|
||||
- Add PepperDash Essentials v2.x dependency via Visual Studio 2022 > Project > `Manage Nuget Packages`.
|
||||
|
||||

|
||||
|
||||
13. **Update Factory Class:**
|
||||
Set `MinimumEssentialsFrameworkVersion` to match the Essentials version dependency.
|
||||
|
||||
14. **Build Solution:**
|
||||
Ensure solution compiles (warnings about obsolete `Debug.Console` calls are OK).
|
||||
|
||||
15. **Update Debug Calls:**
|
||||
Replace `Debug.Console` with `Debug.Log` methods as appropriate (see table).
|
||||
|
||||

|
||||
|
||||
## Completion Checklist
|
||||
|
||||
- [ ] EPI compiles with **no warnings**.
|
||||
- [ ] **Obsolete methods** updated to modern equivalents.
|
||||
- [ ] **Workflows** complete successfully; packages generated via GitHub and NuGet.org.
|
||||
- [ ] `readme.md` includes:
|
||||
- Usage/setup instructions
|
||||
- Example SIMPL Windows bridge joinmap
|
||||
- Example device communication structure/properties
|
||||
- [ ] EPI tested against full release Essentials version.
|
||||
- [ ] EPI tested by another developer.
|
||||
- [ ] Full release of EPI.
|
||||
|
||||
---
|
||||
|
||||
*For questions about workflows or customizations, consult with PepperDash Team.*
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
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}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "epi-make-model.3Series", "src\epi-make-model.3Series.csproj", "{9D249E47-8F95-4437-A6BB-563510287AD1}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
25
epi-make-model.4Series.sln
Normal 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}") = "epi-make-model.4Series", "src\epi-make-model.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
|
||||
BIN
images/essentials-plugin-blue.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
images/essentials-plugin-white.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
images/upgrade-to-4Series/addRuntumeExclusion.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
images/upgrade-to-4Series/removeExistingDependencies.png
Normal file
|
After Width: | Height: | Size: 85 KiB |
BIN
images/upgrade-to-4Series/removeObsoleteReferences.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
images/upgrade-to-4Series/renameEpiSolution.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
images/upgrade-to-4Series/replaceExistingDebugConsoleMethods.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
3
packages.config
Normal file
@@ -0,0 +1,3 @@
|
||||
<packages>
|
||||
<package id="PepperDashEssentials" version="1.16.1" targetFramework="net35" allowedVersions="[1.0,2.0)"/>
|
||||
</packages>
|
||||
21
src/Directory.Build.props
Normal file
@@ -0,0 +1,21 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Version>1.0.0-local</Version>
|
||||
<InformationalVersion>$(Version)</InformationalVersion>
|
||||
<Authors>PepperDash Technology</Authors>
|
||||
<Company>PepperDash Technology</Company>
|
||||
<Product>PepperDash Essentials Plugin Template</Product>
|
||||
<Copyright>Copyright © 2025</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>
|
||||
20
src/Directory.Build.targets
Normal 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>
|
||||
101
src/MakeModelBridgeJoinMap.cs
Normal file
@@ -0,0 +1,101 @@
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Plugin
|
||||
{
|
||||
/// <summary>
|
||||
/// Plugin device Bridge Join Map
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Rename the class to match the device plugin being developed. Reference Essentials JoinMaps, if one exists for the device plugin being developed
|
||||
/// </remarks>
|
||||
/// <see cref="PepperDash.Essentials.Core.Bridges"/>
|
||||
/// <example>
|
||||
/// "EssentialsPluginBridgeJoinMapTemplate" renamed to "SamsungMdcBridgeJoinMap"
|
||||
/// </example>
|
||||
public class EssentialsPluginTemplateBridgeJoinMap : JoinMapBaseAdvanced
|
||||
{
|
||||
#region Digital
|
||||
|
||||
// TODO [ ] Add digital joins below plugin being developed
|
||||
|
||||
[JoinName("IsOnline")]
|
||||
public JoinDataComplete IsOnline = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 1,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Is Online",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
[JoinName("Connect")]
|
||||
public JoinDataComplete Connect = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 2,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Connect (Held)/Disconnect (Release) & corresponding feedback",
|
||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Analog
|
||||
|
||||
// TODO [ ] Add analog joins below plugin being developed
|
||||
|
||||
[JoinName("Status")]
|
||||
public JoinDataComplete Status = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 1,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Socket Status",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Analog
|
||||
});
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Serial
|
||||
|
||||
// TODO [ ] Add serial joins below plugin being developed
|
||||
|
||||
public JoinDataComplete DeviceName = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 1,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Device Name",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Serial
|
||||
});
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Plugin device BridgeJoinMap constructor
|
||||
/// </summary>
|
||||
/// <param name="joinStart">This will be the join it starts on the EISC bridge</param>
|
||||
public EssentialsPluginTemplateBridgeJoinMap(uint joinStart)
|
||||
: base(joinStart, typeof(EssentialsPluginTemplateBridgeJoinMap))
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
195
src/MakeModelConfigObject.cs
Normal file
@@ -0,0 +1,195 @@
|
||||
using System.Collections.Generic;
|
||||
using Newtonsoft.Json;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Plugin
|
||||
{
|
||||
/// <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; }
|
||||
}
|
||||
}
|
||||
99
src/MakeModelCrestronDevice.cs
Normal file
@@ -0,0 +1,99 @@
|
||||
// For Basic SIMPL# Classes
|
||||
// For Basic SIMPL#Pro classes
|
||||
|
||||
using Crestron.SimplSharpPro;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Bridges;
|
||||
|
||||
namespace PepperDash.Essentials.Plugin
|
||||
{
|
||||
/// <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 EssentialsPluginTemplateConfigObject _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, EssentialsPluginTemplateConfigObject 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 EssentialsPluginTemplateBridgeJoinMap(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
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
298
src/MakeModelDevice.cs
Normal file
@@ -0,0 +1,298 @@
|
||||
// For Basic SIMPL# Classes
|
||||
// For Basic SIMPL#Pro classes
|
||||
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Bridges;
|
||||
using PepperDash.Essentials.Core.Queues;
|
||||
|
||||
namespace PepperDash.Essentials.Plugin
|
||||
{
|
||||
/// <summary>
|
||||
/// Plugin device template for third party devices that use IBasicCommunication
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Rename the class to match the device plugin being developed.
|
||||
/// </remarks>
|
||||
/// <example>
|
||||
/// "EssentialsPluginDeviceTemplate" renamed to "SamsungMdcDevice"
|
||||
/// </example>
|
||||
public class EssentialsPluginTemplateDevice : EssentialsBridgeableDevice
|
||||
{
|
||||
/// <summary>
|
||||
/// It is often desirable to store the config
|
||||
/// </summary>
|
||||
private EssentialsPluginTemplateConfigObject _config;
|
||||
|
||||
/// <summary>
|
||||
/// Provides a queue and dedicated worker thread for processing feedback messages from a device.
|
||||
/// </summary>
|
||||
private GenericQueue ReceiveQueue;
|
||||
|
||||
#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 = { };
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Connects/disconnects the comms of the plugin device
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// triggers the _comms.Connect/Disconnect as well as thee comms monitor start/stop
|
||||
/// </remarks>
|
||||
public bool Connect
|
||||
{
|
||||
get { return _comms.IsConnected; }
|
||||
set
|
||||
{
|
||||
if (value)
|
||||
{
|
||||
_comms.Connect();
|
||||
_commsMonitor.Start();
|
||||
}
|
||||
else
|
||||
{
|
||||
_comms.Disconnect();
|
||||
_commsMonitor.Stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reports connect feedback through the bridge
|
||||
/// </summary>
|
||||
public BoolFeedback ConnectFeedback { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reports online feedback through the bridge
|
||||
/// </summary>
|
||||
public BoolFeedback OnlineFeedback { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reports socket status feedback through the bridge
|
||||
/// </summary>
|
||||
public IntFeedback StatusFeedback { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Plugin device constructor for devices that need IBasicCommunication
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="config"></param>
|
||||
/// <param name="comms"></param>
|
||||
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.
|
||||
|
||||
ConnectFeedback = new BoolFeedback(() => Connect);
|
||||
OnlineFeedback = new BoolFeedback(() => _commsMonitor.IsOnline);
|
||||
StatusFeedback = new IntFeedback(() => (int)_commsMonitor.Status);
|
||||
|
||||
_comms = comms;
|
||||
_commsMonitor = new GenericCommunicationMonitor(this, _comms, _config.PollTimeMs, _config.WarningTimeoutMs, _config.ErrorTimeoutMs, Poll);
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
private void socket_ConnectionChange(object sender, GenericSocketStatusChageEventArgs args)
|
||||
{
|
||||
if (ConnectFeedback != null)
|
||||
ConnectFeedback.FireUpdate();
|
||||
|
||||
if (StatusFeedback != null)
|
||||
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();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This method should perform any necessary parsing of feedback messages from the device
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
void ProcessFeedbackMessage(string message)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 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)
|
||||
{
|
||||
if (string.IsNullOrEmpty(text)) return;
|
||||
|
||||
_comms.SendText(string.Format("{0}{1}", text, CommsDelimiter));
|
||||
}
|
||||
|
||||
// TODO [ ] If not using an HEX/byte based API, delete the properties below
|
||||
/// <summary>
|
||||
/// Sends bytes 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="bytes">Bytes to be sent</param>
|
||||
public void SendBytes(byte[] bytes)
|
||||
{
|
||||
if (bytes == null) return;
|
||||
|
||||
_comms.SendBytes(bytes);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Polls the device
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Poll method is used by the communication monitor. Update the poll method as needed for the plugin being developed
|
||||
/// </remarks>
|
||||
public void Poll()
|
||||
{
|
||||
// TODO [ ] Update Poll method as needed for the plugin being developed
|
||||
// Example: SendText("getstatus");
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
#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 EssentialsPluginTemplateBridgeJoinMap(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.SetBoolSigAction(joinMap.Connect.JoinNumber, sig => Connect = sig);
|
||||
ConnectFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Connect.JoinNumber]);
|
||||
|
||||
StatusFeedback.LinkInputSig(trilist.UShortInput[joinMap.Status.JoinNumber]);
|
||||
OnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
|
||||
|
||||
UpdateFeedbacks();
|
||||
|
||||
trilist.OnlineStatusChange += (o, a) =>
|
||||
{
|
||||
if (!a.DeviceOnLine) return;
|
||||
|
||||
trilist.SetString(joinMap.DeviceName.JoinNumber, Name);
|
||||
UpdateFeedbacks();
|
||||
};
|
||||
}
|
||||
|
||||
private void UpdateFeedbacks()
|
||||
{
|
||||
// TODO [ ] Update as needed for the plugin being developed
|
||||
ConnectFeedback.FireUpdate();
|
||||
OnlineFeedback.FireUpdate();
|
||||
StatusFeedback.FireUpdate();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
239
src/MakeModelFactory.cs
Normal file
@@ -0,0 +1,239 @@
|
||||
using System.Collections.Generic;
|
||||
using Crestron.SimplSharpPro.UI;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Plugin
|
||||
{
|
||||
/// <summary>
|
||||
/// Plugin device factory for devices that use IBasicCommunication
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Rename the class to match the device plugin being developed
|
||||
/// </remarks>
|
||||
/// <example>
|
||||
/// "EssentialsPluginFactoryTemplate" renamed to "MyDeviceFactory"
|
||||
/// </example>
|
||||
public class EssentialsPluginTemplateFactory : EssentialsPluginDeviceFactory<EssentialsPluginTemplateDevice>
|
||||
{
|
||||
/// <summary>
|
||||
/// Plugin device factory constructor
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Update the MinimumEssentialsFrameworkVersion & TypeNames as needed when creating a plugin
|
||||
/// </remarks>
|
||||
/// <example>
|
||||
/// Set the minimum Essentials Framework Version
|
||||
/// <code>
|
||||
/// MinimumEssentialsFrameworkVersion = "1.6.4;
|
||||
/// </code>
|
||||
/// In the constructor we initialize the list with the typenames that will build an instance of this device
|
||||
/// <code>
|
||||
/// TypeNames = new List<string>() { "SamsungMdc", "SamsungMdcDisplay" };
|
||||
/// </code>
|
||||
/// </example>
|
||||
public EssentialsPluginTemplateFactory()
|
||||
{
|
||||
// Set the minimum Essentials Framework Version
|
||||
// TODO [ ] Update the Essentials minimum framework version which this plugin has been tested against
|
||||
MinimumEssentialsFrameworkVersion = "1.6.4";
|
||||
|
||||
// In the constructor we initialize the list with the typenames that will build an instance of this device
|
||||
// TODO [ ] Update the TypeNames for the plugin being developed
|
||||
TypeNames = new List<string>() { "examplePluginDevice" };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds and returns an instance of EssentialsPluginDeviceTemplate
|
||||
/// </summary>
|
||||
/// <param name="dc">device configuration</param>
|
||||
/// <returns>plugin device or null</returns>
|
||||
/// <remarks>
|
||||
/// The example provided below takes the device key, name, properties config and the comms device created.
|
||||
/// Modify the EssetnialsPlugingDeviceTemplate constructor as needed to meet the requirements of the plugin device.
|
||||
/// </remarks>
|
||||
/// <seealso cref="PepperDash.Core.eControlMethod"/>
|
||||
public override EssentialsDevice BuildDevice(PepperDash.Essentials.Core.Config.DeviceConfig dc)
|
||||
{
|
||||
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<EssentialsPluginTemplateConfigObject>();
|
||||
if (propertiesConfig == null)
|
||||
{
|
||||
Debug.Console(0, "[{0}] Factory: failed to read properties config for {1}", dc.Key, dc.Name);
|
||||
return null;
|
||||
}
|
||||
|
||||
// attempt build the plugin device comms device & check for null
|
||||
// TODO { ] As of PepperDash Core 1.0.41, HTTP and HTTPS are not valid eControlMethods and will throw an exception.
|
||||
var comms = CommFactory.CreateCommForDevice(dc);
|
||||
if (comms == null)
|
||||
{
|
||||
Debug.Console(1, "[{0}] Factory Notice: No control object present for device {1}", dc.Key, dc.Name);
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
return new EssentialsPluginTemplateDevice(dc.Key, dc.Name, propertiesConfig, comms);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Plugin device factory for logic devices that don't communicate
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Rename the class to match the device plugin being developed
|
||||
/// </remarks>
|
||||
/// <example>
|
||||
/// "EssentialsPluginFactoryTemplate" renamed to "MyLogicDeviceFactory"
|
||||
/// </example>
|
||||
public class EssentialsPluginTemplateFactoryLogicDevice : EssentialsPluginDeviceFactory<EssentialsPluginTemplateLogicDevice>
|
||||
{
|
||||
/// <summary>
|
||||
/// Plugin device factory constructor
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Update the MinimumEssentialsFrameworkVersion & TypeNames as needed when creating a plugin
|
||||
/// </remarks>
|
||||
/// <example>
|
||||
/// Set the minimum Essentials Framework Version
|
||||
/// <code>
|
||||
/// MinimumEssentialsFrameworkVersion = "1.6.4;
|
||||
/// </code>
|
||||
/// In the constructor we initialize the list with the typenames that will build an instance of this device
|
||||
/// <code>
|
||||
/// TypeNames = new List<string>() { "SamsungMdc", "SamsungMdcDisplay" };
|
||||
/// </code>
|
||||
/// </example>
|
||||
public EssentialsPluginTemplateFactoryLogicDevice()
|
||||
{
|
||||
// Set the minimum Essentials Framework Version
|
||||
// TODO [ ] Update the Essentials minimum framework version which this plugin has been tested against
|
||||
MinimumEssentialsFrameworkVersion = "1.6.4";
|
||||
|
||||
// In the constructor we initialize the list with the typenames that will build an instance of this device
|
||||
// TODO [ ] Update the TypeNames for the plugin being developed
|
||||
TypeNames = new List<string>() { "examplePluginLogicDevice" };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds and returns an instance of EssentialsPluginTemplateLogicDevice
|
||||
/// </summary>
|
||||
/// <param name="dc">device configuration</param>
|
||||
/// <returns>plugin device or null</returns>
|
||||
/// <remarks>
|
||||
/// The example provided below takes the device key, name, properties config and the comms device created.
|
||||
/// Modify the EssetnialsPlugingDeviceTemplate constructor as needed to meet the requirements of the plugin device.
|
||||
/// </remarks>
|
||||
/// <seealso cref="PepperDash.Core.eControlMethod"/>
|
||||
public override EssentialsDevice BuildDevice(PepperDash.Essentials.Core.Config.DeviceConfig dc)
|
||||
{
|
||||
|
||||
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<EssentialsPluginTemplateConfigObject>();
|
||||
if (propertiesConfig == null)
|
||||
{
|
||||
Debug.Console(0, "[{0}] Factory: failed to read properties config for {1}", dc.Key, dc.Name);
|
||||
return null;
|
||||
}
|
||||
|
||||
var controlConfig = CommFactory.GetControlPropertiesConfig(dc);
|
||||
|
||||
if (controlConfig == null)
|
||||
{
|
||||
return new EssentialsPluginTemplateLogicDevice(dc.Key, dc.Name, propertiesConfig);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(0, "[{0}] Factory: Unable to get control properties from device config for {1}", dc.Key, dc.Name);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Plugin device factory for Crestron wrapper devices
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Rename the class to match the device plugin being developed
|
||||
/// </remarks>
|
||||
/// <example>
|
||||
/// "EssentialsPluginFactoryTemplate" renamed to "MyCrestronDeviceFactory"
|
||||
/// </example>
|
||||
public class EssentialsPluginTemplateFactoryCrestronDevice : EssentialsPluginDeviceFactory<EssentialsPluginTemplateCrestronDevice>
|
||||
{
|
||||
/// <summary>
|
||||
/// Plugin device factory constructor
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Update the MinimumEssentialsFrameworkVersion & TypeNames as needed when creating a plugin
|
||||
/// </remarks>
|
||||
/// <example>
|
||||
/// Set the minimum Essentials Framework Version
|
||||
/// <code>
|
||||
/// MinimumEssentialsFrameworkVersion = "1.6.4;
|
||||
/// </code>
|
||||
/// In the constructor we initialize the list with the typenames that will build an instance of this device
|
||||
/// <code>
|
||||
/// TypeNames = new List<string>() { "SamsungMdc", "SamsungMdcDisplay" };
|
||||
/// </code>
|
||||
/// </example>
|
||||
public EssentialsPluginTemplateFactoryCrestronDevice()
|
||||
{
|
||||
// Set the minimum Essentials Framework Version
|
||||
// TODO [ ] Update the Essentials minimum framework version which this plugin has been tested against
|
||||
MinimumEssentialsFrameworkVersion = "1.7.5";
|
||||
|
||||
// In the constructor we initialize the list with the typenames that will build an instance of this device
|
||||
// TODO [ ] Update the TypeNames for the plugin being developed
|
||||
TypeNames = new List<string>() { "examplePluginCrestronDevice" };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds and returns an instance of EssentialsPluginTemplateCrestronDevice
|
||||
/// </summary>
|
||||
/// <param name="dc">device configuration</param>
|
||||
/// <returns>plugin device or null</returns>
|
||||
/// <remarks>
|
||||
/// The example provided below takes the device key, name, properties config and the comms device created.
|
||||
/// Modify the EssetnialsPlugingDeviceTemplate constructor as needed to meet the requirements of the plugin device.
|
||||
/// </remarks>
|
||||
/// <seealso cref="PepperDash.Core.eControlMethod"/>
|
||||
public override EssentialsDevice BuildDevice(PepperDash.Essentials.Core.Config.DeviceConfig dc)
|
||||
{
|
||||
|
||||
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<EssentialsPluginTemplateConfigObject>();
|
||||
if (propertiesConfig == null)
|
||||
{
|
||||
Debug.Console(0, "[{0}] Factory: failed to read properties config for {1}", dc.Key, dc.Name);
|
||||
return null;
|
||||
}
|
||||
|
||||
var controlConfig = CommFactory.GetControlPropertiesConfig(dc);
|
||||
|
||||
if (controlConfig == null)
|
||||
{
|
||||
var myTouchpanel = new Tsw760(controlConfig.IpIdInt, Global.ControlSystem);
|
||||
|
||||
return new EssentialsPluginTemplateCrestronDevice(dc.Key, dc.Name, propertiesConfig, myTouchpanel);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(0, "[{0}] Factory: Unable to get control properties from device config for {1}", dc.Key, dc.Name);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
86
src/MakeModelLogicDevice.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Bridges;
|
||||
|
||||
namespace PepperDash.Essentials.Plugin
|
||||
{
|
||||
/// <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 EssentialsPluginTemplateConfigObject _config;
|
||||
|
||||
/// <summary>
|
||||
/// Plugin device constructor
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="config"></param>
|
||||
public EssentialsPluginTemplateLogicDevice(string key, string name, EssentialsPluginTemplateConfigObject 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 EssentialsPluginTemplateBridgeJoinMap(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
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.*")]
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
<ProjectGuid>{9D249E47-8F95-4437-A6BB-563510287AD1}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>PDT.EssentialsPluginTemplate.EPI</RootNamespace>
|
||||
<AssemblyName>PDT.EssentialsPluginTemplate.EPI</AssemblyName>
|
||||
<RootNamespace>PepperDash.Essentials.Plugin</RootNamespace>
|
||||
<AssemblyName>MakeModelPlugin</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>
|
||||
@@ -46,56 +46,66 @@
|
||||
<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>C:\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>..\EssentialsBuilds\PepperDashEssentials.dll</HintPath>
|
||||
<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>..\EssentialsBuilds\PepperDash_Core.dll</HintPath>
|
||||
<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>..\EssentialsBuilds\PepperDash_Essentials_Core.dll</HintPath>
|
||||
<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>..\EssentialsBuilds\PepperDash_Essentials_DM.dll</HintPath>
|
||||
<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>
|
||||
<HintPath>C:\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>
|
||||
<HintPath>C:\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>
|
||||
<HintPath>C:\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>
|
||||
<HintPath>C:\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>
|
||||
<HintPath>C:\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="EssentailsPluginTemplate.cs" />
|
||||
<Compile Include="EssentialsPluginTemplateBridge.cs" />
|
||||
<Compile Include="EssentialsPluginTemplateConfigObject.cs" />
|
||||
<Compile Include="MakeModelCrestronDevice.cs" />
|
||||
<Compile Include="MakeModelBridgeJoinMap.cs" />
|
||||
<Compile Include="MakeModelConfigObject.cs" />
|
||||
<Compile Include="MakeModelDevice.cs" />
|
||||
<Compile Include="MakeModelFactory.cs" />
|
||||
<Compile Include="MakeModelLogicDevice.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="EssentialsPluginTemplateDevice.cs" />
|
||||
<None Include="Properties\ControlSystem.cfg" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />
|
||||
50
src/epi-make-model.4Series.csproj
Normal file
@@ -0,0 +1,50 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<ProjectType>ProgramLibrary</ProjectType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<RootNamespace>PepperDash.Essentials.Plugin</RootNamespace>
|
||||
<Deterministic>false</Deterministic>
|
||||
<AssemblyTitle>PepperDash.Essentials.Plugin.Make.Model</AssemblyTitle>
|
||||
<Company>PepperDash Technology</Company>
|
||||
<Description>This software is a template for a PepperDash Essentials Plugin.</Description>
|
||||
<Copyright>Copyright 2025</Copyright>
|
||||
<Version>1.0.0-local</Version>
|
||||
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
|
||||
<InformationalVersion>$(Version)</InformationalVersion>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
<Authors>PepperDash Technology</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="epi-make-model.projectinfo" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="PepperDashEssentials" Version="2.0.0" >
|
||||
<ExcludeAssets>runtime</ExcludeAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="../output\epi-make-model.4Series.1.0.0-local.cplz" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="../output\epi-make-model.4Series.1.0.0-local.cplz" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||