Compare commits

...

53 Commits

Author SHA1 Message Date
Jonathan Arndt
52a14c1f3a docs: update cleanup section with detailed file structure example 2025-05-27 08:48:03 -07:00
Jonathan Arndt
bb991544c4 docs: add checklist items for upgrade-to-4-series.md 2025-05-25 15:03:13 -07:00
Jonathan Arndt
663f2483b3 docs: 📝 Add readme.md for guidance to upgrade plugins v1 to v2 or 4series. 2025-05-22 17:14:29 -07:00
Jason DeVito
ba5d0f33a6 Merge pull request #32 from PepperDash/hotfix/robot-docs
fix: Update README workflow to use main branch and correct author/company names in Directory.Build.props
2025-05-21 11:36:01 -05:00
Jonathan Arndt
4283fb2abd fix: Update README workflow to use main branch and correct author/company names in Directory.Build.props 2025-05-21 09:31:49 -07:00
Andrew Welker
4ee211576f Merge pull request #30 from PepperDash/4series-csproj-updates
Update epi-make-model.4Series.csproj
2025-03-25 16:19:46 -05:00
Jason DeVito
085a2d7659 Merge pull request #31 from PepperDash/jtalborough-patch-1
Rename releaserc.json to .releaserc.json
2025-03-25 16:16:41 -05:00
Jason DeVito
952d5b61a4 Update epi-make-model.4Series.csproj
Update PepperDash Essentials version to 2.0.0
2025-03-25 15:54:31 -05:00
Jason T Alborough
c225184021 Rename releaserc.json to .releaserc.json 2025-03-25 16:43:00 -04:00
Jason DeVito
3f2ef80877 Update epi-make-model.4Series.csproj
Update 4Series.csproj to exlcude assets and change local bid output path.
2025-03-25 10:53:56 -05:00
Jason T Alborough
de4cbcac73 Merge pull request #28 from PepperDash/feature/4-series
Feature/4 series
2025-03-12 10:13:33 -04:00
jdevito
61b8c51db2 chore: remove deleted file reference 2025-01-31 08:23:54 -06:00
jdevito
eee7822de0 feat: add updatedoc caller 2025-01-31 08:23:32 -06:00
jdevito
85d2e4e1dc fix: update template repo
1. update workflow files
2. Add 3-series SLN and csproj files
- Remove from project when using the template if not needed
3. Update 4-series SLN and csproj files
4. Moved SLN's to root of project
5. Rename *.cs files to identify naming convention of 'MakeModel'
6. Upate packages.config to reference latest Essentials v1 release
2025-01-30 16:39:56 -06:00
Aviv Cohn
7c3c0bea71 feat: add files 2024-10-10 14:27:29 -04:00
Aviv Cohn
a427afaf3c feat: Add Directory.Build.x files 2024-10-10 14:04:26 -04:00
Aviv Cohn
2264d90372 feat: Add 4Series csproj and update info 2024-10-10 13:04:15 -04:00
Jason T Alborough
809fb79bf1 Merge pull request #23 from PepperDash/feature/new-beta-bulds-caller-yaml
Create essentialsplugins-betabuilds-caller.yml
2023-10-06 16:18:18 -04:00
Jason T Alborough
507ca486ab Merge pull request #24 from PepperDash/feature/new-release-bulds-caller-yaml
Create essentialsplugins-releasebuilds-caller.yml
2023-10-06 15:52:59 -04:00
Jason T Alborough
4ec7550625 Merge pull request #22 from PepperDash/feature/readme-logo
feature: adds logo file and updates readme to reference logo
2023-10-06 15:52:50 -04:00
Jason DeVito
d327f2def8 fix: removes old release build action 2023-09-26 09:04:31 -05:00
Jason DeVito
4244b394e7 fix: removes old betabuild action 2023-09-26 09:03:37 -05:00
Jason DeVito
1b3c28da0c Create essentialsplugins-releasebuilds-caller.yml 2023-09-26 08:58:37 -05:00
Jason DeVito
2586e9502d Create essentialsplugins-betabuilds-caller.yml 2023-09-26 08:57:39 -05:00
Jason DeVito
7ba409d64c feature: adds logo file and updates readme to reference logo 2023-08-29 16:27:59 -05:00
Andrew Welker
0746d309df Merge pull request #19 from PepperDash/feature/Conditional-Workflows
Multiple Style and Workflow Updates
2022-07-22 11:06:34 -06:00
Trevor Payne
259a71c562 style: renamed classes for consistency
build: updated essentials version

ci: updated workflows

docs: documentation updated

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

View File

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

View File

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

View File

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

View 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 }}

View File

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

View 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 }}

34
.releaserc.json Normal file
View File

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

2
GetPackages.BAT Normal file
View File

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

View File

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

View File

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

View File

@@ -1,4 +1,6 @@
# Essentials Plugin Template (c) 2020 ![PepperDash Essentials Pluign Logo](/images/essentials-plugin-blue.png)
# Essentials Plugin Template (c) 2023
## License ## License
@@ -29,6 +31,7 @@ The [Essentials](https://github.com/PepperDash/Essentials) libraries are require
To install dependencies once nuget.exe is installed, run the following command from the root directory of your repository: 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`. `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. 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 ### Installing Different versions of PepperDash Core
@@ -37,6 +40,21 @@ If you need a different version of PepperDash Core, use the command `nuget insta
### Instructions for Renaming Solution and Files ### Instructions for Renaming Solution and Files
See the Task List in Visual Studio for a guide on how to start using the templage. There is extensive inline documentation and examples as well. See the Task List in Visual Studio for a guide on how to start using the template. There is extensive inline documentation and examples as well.
For renaming instructions in particular, see the XML `remarks` tags on class definitions 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__

View File

@@ -0,0 +1,110 @@
![PepperDash Essentials Plugin Logo](/images/essentials-plugin-blue.png)
# 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:**
![defineBuildObjectstoRemove](/images/upgrade-to-4Series/removeObsoleteReferences.png)
- **Add runtime exclusion:**
Add `<ExcludeAssets>runtime</ExcludeAssets>` to the PepperDash Essentials `PackageReference`.
![addRuntimeExclusion](/images/upgrade-to-4Series/addRuntumeExclusion.png)
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.
![renameEpiSolution](/images/upgrade-to-4Series/renameEpiSolution.png)
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`.
![removeExistingReferences](/images/upgrade-to-4Series/removeExistingDependencies.png)
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).
![replaceDebugConsoleMethods](/images/upgrade-to-4Series/replaceExistingDebugConsoleMethods.png)
## 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.*

View File

@@ -1,7 +1,7 @@
 
Microsoft Visual Studio Solution File, Format Version 10.00 Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008 # 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 EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution

View File

@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.11.35327.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

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

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

@@ -0,0 +1,21 @@
<Project>
<PropertyGroup>
<Version>1.0.0-local</Version>
<InformationalVersion>$(Version)</InformationalVersion>
<Authors>PepperDash 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>

View File

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

View File

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

View File

@@ -2,7 +2,7 @@
using Newtonsoft.Json; using Newtonsoft.Json;
using PepperDash.Essentials.Core; using PepperDash.Essentials.Core;
namespace EssentialsPluginTemplate namespace PepperDash.Essentials.Plugin
{ {
/// <summary> /// <summary>
/// Plugin device configuration object /// Plugin device configuration object
@@ -14,7 +14,7 @@ namespace EssentialsPluginTemplate
/// "EssentialsPluginConfigObjectTemplate" renamed to "SamsungMdcConfig" /// "EssentialsPluginConfigObjectTemplate" renamed to "SamsungMdcConfig"
/// </example> /// </example>
[ConfigSnippet("\"properties\":{\"control\":{}")] [ConfigSnippet("\"properties\":{\"control\":{}")]
public class EssentialsPluginConfigObjectTemplate public class EssentialsPluginTemplateConfigObject
{ {
/// <summary> /// <summary>
/// JSON control object /// JSON control object
@@ -139,7 +139,7 @@ namespace EssentialsPluginTemplate
/// </code> /// </code>
/// </example> /// </example>
[JsonProperty("DeviceDictionary")] [JsonProperty("DeviceDictionary")]
public Dictionary<string, EssentialsPluginConfigObjectDictionaryTemplate> DeviceDictionary { get; set; } public Dictionary<string, EssentialsPluginTemplateConfigObjectDictionary> DeviceDictionary { get; set; }
/// <summary> /// <summary>
/// Constuctor /// Constuctor
@@ -148,9 +148,9 @@ namespace EssentialsPluginTemplate
/// If using a collection you must instantiate the collection in the constructor /// If using a collection you must instantiate the collection in the constructor
/// to avoid exceptions when reading the configuration file /// to avoid exceptions when reading the configuration file
/// </remarks> /// </remarks>
public EssentialsPluginConfigObjectTemplate() public EssentialsPluginTemplateConfigObject()
{ {
DeviceDictionary = new Dictionary<string, EssentialsPluginConfigObjectDictionaryTemplate>(); DeviceDictionary = new Dictionary<string, EssentialsPluginTemplateConfigObjectDictionary>();
} }
} }
@@ -172,7 +172,7 @@ namespace EssentialsPluginTemplate
/// } /// }
/// </code> /// </code>
/// </example> /// </example>
public class EssentialsPluginConfigObjectDictionaryTemplate public class EssentialsPluginTemplateConfigObjectDictionary
{ {
/// <summary> /// <summary>
/// Serializes collection name property /// Serializes collection name property

View File

@@ -1,13 +1,13 @@
// For Basic SIMPL# Classes // For Basic SIMPL# Classes
// For Basic SIMPL#Pro classes // For Basic SIMPL#Pro classes
using Crestron.SimplSharpPro.DeviceSupport;
using Crestron.SimplSharpPro; using Crestron.SimplSharpPro;
using Crestron.SimplSharpPro.DeviceSupport;
using PepperDash.Core; using PepperDash.Core;
using PepperDash.Essentials.Core; using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges; using PepperDash.Essentials.Core.Bridges;
namespace EssentialsPluginTemplate namespace PepperDash.Essentials.Plugin
{ {
/// <summary> /// <summary>
/// Plugin device /// Plugin device
@@ -23,7 +23,7 @@ namespace EssentialsPluginTemplate
/// <summary> /// <summary>
/// It is often desirable to store the config /// It is often desirable to store the config
/// </summary> /// </summary>
private EssentialsPluginConfigObjectTemplate _config; private EssentialsPluginTemplateConfigObject _config;
#region Constructor for Devices without IBasicCommunication. Remove if not needed #region Constructor for Devices without IBasicCommunication. Remove if not needed
@@ -34,7 +34,7 @@ namespace EssentialsPluginTemplate
/// <param name="name"></param> /// <param name="name"></param>
/// <param name="config"></param> /// <param name="config"></param>
/// <param name="hardware"></param> /// <param name="hardware"></param>
public EssentialsPluginTemplateCrestronDevice(string key, string name, EssentialsPluginConfigObjectTemplate config, GenericBase hardware) public EssentialsPluginTemplateCrestronDevice(string key, string name, EssentialsPluginTemplateConfigObject config, GenericBase hardware)
: base(key, name, hardware) : base(key, name, hardware)
{ {
Debug.Console(0, this, "Constructing new {0} instance", name); Debug.Console(0, this, "Constructing new {0} instance", name);
@@ -60,7 +60,7 @@ namespace EssentialsPluginTemplate
/// <param name="bridge"></param> /// <param name="bridge"></param>
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{ {
var joinMap = new EssentialsPluginBridgeJoinMapTemplate(joinStart); var joinMap = new EssentialsPluginTemplateBridgeJoinMap(joinStart);
// This adds the join map to the collection on the bridge // This adds the join map to the collection on the bridge
if (bridge != null) if (bridge != null)

View File

@@ -5,8 +5,9 @@ using Crestron.SimplSharpPro.DeviceSupport;
using PepperDash.Core; using PepperDash.Core;
using PepperDash.Essentials.Core; using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges; using PepperDash.Essentials.Core.Bridges;
using PepperDash.Essentials.Core.Queues;
namespace EssentialsPluginTemplate namespace PepperDash.Essentials.Plugin
{ {
/// <summary> /// <summary>
/// Plugin device template for third party devices that use IBasicCommunication /// Plugin device template for third party devices that use IBasicCommunication
@@ -22,7 +23,12 @@ namespace EssentialsPluginTemplate
/// <summary> /// <summary>
/// It is often desirable to store the config /// It is often desirable to store the config
/// </summary> /// </summary>
private EssentialsPluginConfigObjectTemplate _config; 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. #region IBasicCommunication Properties and Constructor. Remove if not needed.
@@ -91,7 +97,7 @@ namespace EssentialsPluginTemplate
/// <param name="name"></param> /// <param name="name"></param>
/// <param name="config"></param> /// <param name="config"></param>
/// <param name="comms"></param> /// <param name="comms"></param>
public EssentialsPluginTemplateDevice(string key, string name, EssentialsPluginConfigObjectTemplate config, IBasicCommunication comms) public EssentialsPluginTemplateDevice(string key, string name, EssentialsPluginTemplateConfigObject config, IBasicCommunication comms)
: base(key, name) : base(key, name)
{ {
Debug.Console(0, this, "Constructing new {0} instance", name); Debug.Console(0, this, "Constructing new {0} instance", name);
@@ -100,6 +106,8 @@ namespace EssentialsPluginTemplate
_config = config; _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); ConnectFeedback = new BoolFeedback(() => Connect);
OnlineFeedback = new BoolFeedback(() => _commsMonitor.IsOnline); OnlineFeedback = new BoolFeedback(() => _commsMonitor.IsOnline);
StatusFeedback = new IntFeedback(() => (int)_commsMonitor.Status); StatusFeedback = new IntFeedback(() => (int)_commsMonitor.Status);
@@ -149,7 +157,9 @@ namespace EssentialsPluginTemplate
private void Handle_LineRecieved(object sender, GenericCommMethodReceiveTextArgs args) private void Handle_LineRecieved(object sender, GenericCommMethodReceiveTextArgs args)
{ {
// TODO [ ] Implement method // TODO [ ] Implement method
throw new System.NotImplementedException();
// 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 // TODO [ ] If not using an HEX/byte based API with no delimeter, delete the method below
@@ -166,6 +176,15 @@ namespace EssentialsPluginTemplate
throw new System.NotImplementedException(); 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 // TODO [ ] If not using an ACII based API, delete the properties below
/// <summary> /// <summary>
@@ -224,7 +243,7 @@ namespace EssentialsPluginTemplate
/// <param name="bridge"></param> /// <param name="bridge"></param>
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{ {
var joinMap = new EssentialsPluginBridgeJoinMapTemplate(joinStart); var joinMap = new EssentialsPluginTemplateBridgeJoinMap(joinStart);
// This adds the join map to the collection on the bridge // This adds the join map to the collection on the bridge
if (bridge != null) if (bridge != null)

View File

@@ -1,9 +1,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using Crestron.SimplSharpPro.UI;
using PepperDash.Core; using PepperDash.Core;
using PepperDash.Essentials.Core; using PepperDash.Essentials.Core;
using Crestron.SimplSharpPro.UI;
namespace EssentialsPluginTemplate namespace PepperDash.Essentials.Plugin
{ {
/// <summary> /// <summary>
/// Plugin device factory for devices that use IBasicCommunication /// Plugin device factory for devices that use IBasicCommunication
@@ -14,7 +14,7 @@ namespace EssentialsPluginTemplate
/// <example> /// <example>
/// "EssentialsPluginFactoryTemplate" renamed to "MyDeviceFactory" /// "EssentialsPluginFactoryTemplate" renamed to "MyDeviceFactory"
/// </example> /// </example>
public class EssentialsPluginFactoryTemplate : EssentialsPluginDeviceFactory<EssentialsPluginTemplateDevice> public class EssentialsPluginTemplateFactory : EssentialsPluginDeviceFactory<EssentialsPluginTemplateDevice>
{ {
/// <summary> /// <summary>
/// Plugin device factory constructor /// Plugin device factory constructor
@@ -32,7 +32,7 @@ namespace EssentialsPluginTemplate
/// TypeNames = new List<string>() { "SamsungMdc", "SamsungMdcDisplay" }; /// TypeNames = new List<string>() { "SamsungMdc", "SamsungMdcDisplay" };
/// </code> /// </code>
/// </example> /// </example>
public EssentialsPluginFactoryTemplate() public EssentialsPluginTemplateFactory()
{ {
// Set the minimum Essentials Framework Version // Set the minimum Essentials Framework Version
// TODO [ ] Update the Essentials minimum framework version which this plugin has been tested against // TODO [ ] Update the Essentials minimum framework version which this plugin has been tested against
@@ -58,7 +58,7 @@ namespace EssentialsPluginTemplate
Debug.Console(1, "[{0}] Factory Attempting to create new device from type: {1}", dc.Key, dc.Type); 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 // get the plugin device properties configuration object & check for null
var propertiesConfig = dc.Properties.ToObject<EssentialsPluginConfigObjectTemplate>(); var propertiesConfig = dc.Properties.ToObject<EssentialsPluginTemplateConfigObject>();
if (propertiesConfig == null) if (propertiesConfig == null)
{ {
Debug.Console(0, "[{0}] Factory: failed to read properties config for {1}", dc.Key, dc.Name); Debug.Console(0, "[{0}] Factory: failed to read properties config for {1}", dc.Key, dc.Name);
@@ -91,7 +91,7 @@ namespace EssentialsPluginTemplate
/// <example> /// <example>
/// "EssentialsPluginFactoryTemplate" renamed to "MyLogicDeviceFactory" /// "EssentialsPluginFactoryTemplate" renamed to "MyLogicDeviceFactory"
/// </example> /// </example>
public class EssentialsPluginFactoryLogicDeviceTemplate : EssentialsPluginDeviceFactory<EssentialsPluginTemplateLogicDevice> public class EssentialsPluginTemplateFactoryLogicDevice : EssentialsPluginDeviceFactory<EssentialsPluginTemplateLogicDevice>
{ {
/// <summary> /// <summary>
/// Plugin device factory constructor /// Plugin device factory constructor
@@ -109,7 +109,7 @@ namespace EssentialsPluginTemplate
/// TypeNames = new List<string>() { "SamsungMdc", "SamsungMdcDisplay" }; /// TypeNames = new List<string>() { "SamsungMdc", "SamsungMdcDisplay" };
/// </code> /// </code>
/// </example> /// </example>
public EssentialsPluginFactoryLogicDeviceTemplate() public EssentialsPluginTemplateFactoryLogicDevice()
{ {
// Set the minimum Essentials Framework Version // Set the minimum Essentials Framework Version
// TODO [ ] Update the Essentials minimum framework version which this plugin has been tested against // TODO [ ] Update the Essentials minimum framework version which this plugin has been tested against
@@ -136,7 +136,7 @@ namespace EssentialsPluginTemplate
Debug.Console(1, "[{0}] Factory Attempting to create new device from type: {1}", dc.Key, dc.Type); 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 // get the plugin device properties configuration object & check for null
var propertiesConfig = dc.Properties.ToObject<EssentialsPluginConfigObjectTemplate>(); var propertiesConfig = dc.Properties.ToObject<EssentialsPluginTemplateConfigObject>();
if (propertiesConfig == null) if (propertiesConfig == null)
{ {
Debug.Console(0, "[{0}] Factory: failed to read properties config for {1}", dc.Key, dc.Name); Debug.Console(0, "[{0}] Factory: failed to read properties config for {1}", dc.Key, dc.Name);
@@ -166,7 +166,7 @@ namespace EssentialsPluginTemplate
/// <example> /// <example>
/// "EssentialsPluginFactoryTemplate" renamed to "MyCrestronDeviceFactory" /// "EssentialsPluginFactoryTemplate" renamed to "MyCrestronDeviceFactory"
/// </example> /// </example>
public class EssentialsPluginFactoryCrestronDeviceTemplate : EssentialsPluginDeviceFactory<EssentialsPluginTemplateCrestronDevice> public class EssentialsPluginTemplateFactoryCrestronDevice : EssentialsPluginDeviceFactory<EssentialsPluginTemplateCrestronDevice>
{ {
/// <summary> /// <summary>
/// Plugin device factory constructor /// Plugin device factory constructor
@@ -184,11 +184,11 @@ namespace EssentialsPluginTemplate
/// TypeNames = new List<string>() { "SamsungMdc", "SamsungMdcDisplay" }; /// TypeNames = new List<string>() { "SamsungMdc", "SamsungMdcDisplay" };
/// </code> /// </code>
/// </example> /// </example>
public EssentialsPluginFactoryCrestronDeviceTemplate() public EssentialsPluginTemplateFactoryCrestronDevice()
{ {
// Set the minimum Essentials Framework Version // Set the minimum Essentials Framework Version
// TODO [ ] Update the Essentials minimum framework version which this plugin has been tested against // TODO [ ] Update the Essentials minimum framework version which this plugin has been tested against
MinimumEssentialsFrameworkVersion = "1.6.4"; MinimumEssentialsFrameworkVersion = "1.7.5";
// In the constructor we initialize the list with the typenames that will build an instance of this device // 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 // TODO [ ] Update the TypeNames for the plugin being developed
@@ -211,7 +211,7 @@ namespace EssentialsPluginTemplate
Debug.Console(1, "[{0}] Factory Attempting to create new device from type: {1}", dc.Key, dc.Type); 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 // get the plugin device properties configuration object & check for null
var propertiesConfig = dc.Properties.ToObject<EssentialsPluginConfigObjectTemplate>(); var propertiesConfig = dc.Properties.ToObject<EssentialsPluginTemplateConfigObject>();
if (propertiesConfig == null) if (propertiesConfig == null)
{ {
Debug.Console(0, "[{0}] Factory: failed to read properties config for {1}", dc.Key, dc.Name); Debug.Console(0, "[{0}] Factory: failed to read properties config for {1}", dc.Key, dc.Name);

View File

@@ -3,7 +3,7 @@ using PepperDash.Core;
using PepperDash.Essentials.Core; using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges; using PepperDash.Essentials.Core.Bridges;
namespace EssentialsPluginTemplate namespace PepperDash.Essentials.Plugin
{ {
/// <summary> /// <summary>
/// Plugin device template for logic devices that don't communicate outside the program /// Plugin device template for logic devices that don't communicate outside the program
@@ -19,7 +19,7 @@ namespace EssentialsPluginTemplate
/// <summary> /// <summary>
/// It is often desirable to store the config /// It is often desirable to store the config
/// </summary> /// </summary>
private EssentialsPluginConfigObjectTemplate _config; private EssentialsPluginTemplateConfigObject _config;
/// <summary> /// <summary>
/// Plugin device constructor /// Plugin device constructor
@@ -27,7 +27,7 @@ namespace EssentialsPluginTemplate
/// <param name="key"></param> /// <param name="key"></param>
/// <param name="name"></param> /// <param name="name"></param>
/// <param name="config"></param> /// <param name="config"></param>
public EssentialsPluginTemplateLogicDevice(string key, string name, EssentialsPluginConfigObjectTemplate config) public EssentialsPluginTemplateLogicDevice(string key, string name, EssentialsPluginTemplateConfigObject config)
: base(key, name) : base(key, name)
{ {
Debug.Console(0, this, "Constructing new {0} instance", name); Debug.Console(0, this, "Constructing new {0} instance", name);
@@ -48,7 +48,7 @@ namespace EssentialsPluginTemplate
/// <param name="bridge"></param> /// <param name="bridge"></param>
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{ {
var joinMap = new EssentialsPluginBridgeJoinMapTemplate(joinStart); var joinMap = new EssentialsPluginTemplateBridgeJoinMap(joinStart);
// This adds the join map to the collection on the bridge // This adds the join map to the collection on the bridge
if (bridge != null) if (bridge != null)

View File

@@ -3,6 +3,6 @@
[assembly: AssemblyTitle("EssentialsPluginTemplateEpi")] [assembly: AssemblyTitle("EssentialsPluginTemplateEpi")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("EssentialsPluginTemplateEpi")] [assembly: AssemblyProduct("EssentialsPluginTemplateEpi")]
[assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyCopyright("Copyright © 2022")]
[assembly: AssemblyVersion("1.0.0.*")] [assembly: AssemblyVersion("1.0.0.*")]

View File

@@ -7,8 +7,8 @@
<ProjectGuid>{9D249E47-8F95-4437-A6BB-563510287AD1}</ProjectGuid> <ProjectGuid>{9D249E47-8F95-4437-A6BB-563510287AD1}</ProjectGuid>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>PDT.EssentialsPluginTemplate.EPI</RootNamespace> <RootNamespace>PepperDash.Essentials.Plugin</RootNamespace>
<AssemblyName>PDT.EssentialsPluginTemplate.EPI</AssemblyName> <AssemblyName>MakeModelPlugin</AssemblyName>
<ProjectTypeGuids>{0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> <ProjectTypeGuids>{0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<PlatformFamilyName>WindowsCE</PlatformFamilyName> <PlatformFamilyName>WindowsCE</PlatformFamilyName>
<PlatformID>E2BECB1F-8C8C-41ba-B736-9BE7D946A398</PlatformID> <PlatformID>E2BECB1F-8C8C-41ba-B736-9BE7D946A398</PlatformID>
@@ -48,7 +48,7 @@
<ItemGroup> <ItemGroup>
<Reference Include="Crestron.SimplSharpPro.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL"> <Reference Include="Crestron.SimplSharpPro.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll</HintPath> <HintPath>C:\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll</HintPath>
</Reference> </Reference>
<Reference Include="Essentials Devices Common, Version=1.6.2.33892, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Essentials Devices Common, Version=1.6.2.33892, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
@@ -73,39 +73,39 @@
</Reference> </Reference>
<Reference Include="SimplSharpCustomAttributesInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL"> <Reference Include="SimplSharpCustomAttributesInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll</HintPath> <HintPath>C:\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="SimplSharpHelperInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL"> <Reference Include="SimplSharpHelperInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll</HintPath> <HintPath>C:\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="SimplSharpNewtonsoft, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL"> <Reference Include="SimplSharpNewtonsoft, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll</HintPath> <HintPath>C:\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll</HintPath>
</Reference> </Reference>
<Reference Include="SimplSharpPro, Version=1.5.3.17, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL"> <Reference Include="SimplSharpPro, Version=1.5.3.17, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe</HintPath> <HintPath>C:\ProgramData\Crestron\SDK\SimplSharpPro.exe</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="SimplSharpReflectionInterface, Version=1.0.5583.25238, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL"> <Reference Include="SimplSharpReflectionInterface, Version=1.0.5583.25238, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll</HintPath> <HintPath>C:\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="EssentialsPluginTemplateLogicDevice.cs" /> <Compile Include="MakeModelCrestronDevice.cs" />
<Compile Include="EssentialsPluginTemplateCrestronDevice.cs" /> <Compile Include="MakeModelBridgeJoinMap.cs" />
<Compile Include="EssentialsPluginTemplateBridgeJoinMap.cs" /> <Compile Include="MakeModelConfigObject.cs" />
<Compile Include="EssentialsPluginTemplateConfigObject.cs" /> <Compile Include="MakeModelDevice.cs" />
<Compile Include="EssentialsPluginTemplateFactory.cs" /> <Compile Include="MakeModelFactory.cs" />
<Compile Include="MakeModelLogicDevice.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="EssentialsPluginTemplateDevice.cs" />
<None Include="Properties\ControlSystem.cfg" /> <None Include="Properties\ControlSystem.cfg" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

View 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>