mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-01-22 17:05:35 +00:00
Compare commits
82 Commits
0.0.18
...
1.4.33-alp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c5f0bff133 | ||
|
|
bcfd90204b | ||
|
|
475be152a7 | ||
|
|
534110cfbf | ||
|
|
cbe96dbed9 | ||
|
|
e2fe8834c5 | ||
|
|
93e542befd | ||
|
|
3852617270 | ||
|
|
d7a04e202b | ||
|
|
abd6ab121e | ||
|
|
0c274015dd | ||
|
|
ffc0f8f58e | ||
|
|
c47f7ba7e3 | ||
|
|
58c3c4fac7 | ||
|
|
82ddd40953 | ||
|
|
8e05302d78 | ||
|
|
e6904ca91c | ||
|
|
3cc0574487 | ||
|
|
a74a703610 | ||
|
|
e0813354d9 | ||
|
|
96a4af40c9 | ||
|
|
662966d7b4 | ||
|
|
2f3b2adce4 | ||
|
|
8e53c2d804 | ||
|
|
e679b68e30 | ||
|
|
2f0e865740 | ||
|
|
9dd24e1f02 | ||
|
|
a7cab21040 | ||
|
|
9ca5fe7518 | ||
|
|
f8dec30f94 | ||
|
|
4701937fb6 | ||
|
|
dbe4b4cec8 | ||
|
|
e57068cdb6 | ||
|
|
f5e9c4860c | ||
|
|
a050328bb2 | ||
|
|
f0129f7349 | ||
|
|
b3f6d205ea | ||
|
|
4c5849d52c | ||
|
|
c227ea26d1 | ||
|
|
5029f27bc9 | ||
|
|
5e826f4b73 | ||
|
|
39c6f5e5c7 | ||
|
|
085bc97321 | ||
|
|
b1573e99de | ||
|
|
c25901f8c9 | ||
|
|
73918b9294 | ||
|
|
1500f5aabe | ||
|
|
8f52f49884 | ||
|
|
b5251651af | ||
|
|
8716388be4 | ||
|
|
81d9531853 | ||
|
|
1b096de377 | ||
|
|
7afcbaee61 | ||
|
|
daa0427b53 | ||
|
|
dab74e59be | ||
|
|
fd76244add | ||
|
|
bbcf8e5f3b | ||
|
|
0f9e6ca901 | ||
|
|
ddf2bd4c64 | ||
|
|
8bda88dd36 | ||
|
|
cb1115b232 | ||
|
|
c62299aef7 | ||
|
|
1632f5888c | ||
|
|
b5e5eebac6 | ||
|
|
c9ce835786 | ||
|
|
bc004a8764 | ||
|
|
27bae27771 | ||
|
|
05377b06fb | ||
|
|
a875880bc3 | ||
|
|
891feecca1 | ||
|
|
c4a64ab3c2 | ||
|
|
1a2ea3e4a3 | ||
|
|
4126df4720 | ||
|
|
003a2aa76d | ||
|
|
687300811e | ||
|
|
f04f5991d4 | ||
|
|
263e792768 | ||
|
|
1cf5aafa03 | ||
|
|
6c32c6154e | ||
|
|
f565ad9381 | ||
|
|
ab53432197 | ||
|
|
8ecf7ff0db |
45
.github/scripts/GenerateVersionNumber.ps1
vendored
Normal file
45
.github/scripts/GenerateVersionNumber.ps1
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
$latestVersions = $(git tag --merged origin/master)
|
||||
$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\/master*.' {
|
||||
$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\/development*.' {
|
||||
$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
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";
|
||||
}
|
||||
43
.github/scripts/ZipBuildOutput.ps1
vendored
Normal file
43
.github/scripts/ZipBuildOutput.ps1
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
# 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 "*.clz", "*.cpz", "*.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\*.cpz | 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
|
||||
246
.github/workflows/docker.yml
vendored
Normal file
246
.github/workflows/docker.yml
vendored
Normal file
@@ -0,0 +1,246 @@
|
||||
name: Branch Build Using Docker
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- feature/*
|
||||
- hotfix/*
|
||||
- release/*
|
||||
- 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: PepperDashEssentials
|
||||
SOLUTION_FILE: PepperDashEssentials
|
||||
# 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 master as the release branch. Change as necessary
|
||||
RELEASE_BRANCH: master
|
||||
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
|
||||
# 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 }}
|
||||
# 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_FILE).sln"" -BuildSolutionConfiguration $($ENV:BUILD_TYPE)"
|
||||
# Zip up the output files as needed
|
||||
- name: Zip Build Output
|
||||
shell: powershell
|
||||
run: ./.github/scripts/ZipBuildOutput.ps1
|
||||
# Write the version to a file to be consumed by the push jobs
|
||||
- name: Write Version
|
||||
run: Write-Output "$($Env:VERSION)" | Out-File -FilePath "$($Env:GITHUB_HOME)\output\version.txt"
|
||||
# Upload the build output as an artifact
|
||||
- name: Upload Build Output
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: Build
|
||||
path: ./${{ env.SOLUTION_FILE}}-${{ env.VERSION}}.zip
|
||||
# Upload the Version file as an artifact
|
||||
- name: Upload version.txt
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: Version
|
||||
path: ${{env.GITHUB_HOME}}\output\version.txt
|
||||
# Create the release on the source repo
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
# using contributor's version to allow for pointing at the right commit
|
||||
uses: fleskesvor/create-release@feature/support-target-commitish
|
||||
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 }}
|
||||
# This step always runs and pushes the build to the internal build rep
|
||||
Internal_Push_Output:
|
||||
needs: Build_Project
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
# Checkout the repo
|
||||
- name: Checkout Builds Repo
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.BUILDS_TOKEN }}
|
||||
repository: PepperDash-Engineering/essentials-builds
|
||||
ref: ${{ Env.GITHUB_REF }}
|
||||
# Download the version artifact from the build job
|
||||
- name: Download Build Version Info
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: Version
|
||||
- name: Check Directory
|
||||
run: Get-ChildItem "./"
|
||||
# Set the version number environment variable from the file we just downloaded
|
||||
- name: Set Version Number
|
||||
shell: powershell
|
||||
run: |
|
||||
Get-ChildItem "./Version"
|
||||
$version = Get-Content -Path ./Version/version.txt
|
||||
Write-Host "Version: $version"
|
||||
Write-Output "::set-env name=VERSION::$version"
|
||||
Remove-Item -Path ./Version/version.txt
|
||||
Remove-Item -Path ./Version
|
||||
# Checkout/Create the branch
|
||||
- name: Create new branch
|
||||
run: git checkout -b $($Env:GITHUB_REF -replace "refs/heads/")
|
||||
# Download the build output into the repo
|
||||
- name: Download Build output
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: Build
|
||||
path: ./
|
||||
- name: Check directory
|
||||
run: Get-ChildItem ./
|
||||
# Unzip the build package file
|
||||
- name: Unzip Build file
|
||||
run: |
|
||||
Get-ChildItem .\*.zip | Expand-Archive -DestinationPath .\
|
||||
Remove-Item -Path .\*.zip
|
||||
- name: Check directory again
|
||||
run: Get-ChildItem ./
|
||||
# Copy Contents of output folder to root directory
|
||||
- name: Copy Files to root & delete output directory
|
||||
run: |
|
||||
Remove-Item -Path .\ -Include @("*.cpz", "*.dll", "*.cplz", "*.clz", "*.xml", "*.md")
|
||||
Get-ChildItem -Path .\output\*.* | Copy-Item -DestinationPath .\
|
||||
Remove-Item -Path .\output -Recurse
|
||||
# Commits the build output to the branch and tags it with the version
|
||||
- name: Commit build output and tag the commit
|
||||
shell: powershell
|
||||
run: |
|
||||
git config user.email "actions@pepperdash.com"
|
||||
git config user.name "GitHub Actions"
|
||||
git add .
|
||||
$commit = "Build $($Env:GITHUB_RUN_NUMBER) from commit: https://github.com/$($Env:GITHUB_REPOSITORY)/commit/$($Env:GITHUB_SHA)"
|
||||
Write-Host "Commit: $commit"
|
||||
git commit -m $commit
|
||||
git tag $($Env:VERSION)
|
||||
# Push the commit
|
||||
- name: Push to Builds Repo
|
||||
shell: powershell
|
||||
run: |
|
||||
$branch = $($Env:GITHUB_REF) -replace "refs/heads/"
|
||||
Write-Host "Branch: $branch"
|
||||
git push -u origin $($branch) --force
|
||||
# Push the tags
|
||||
- name: Push tags
|
||||
run: git push --tags origin
|
||||
- name: Check Directory
|
||||
run: Get-ChildItem ./
|
||||
# This step only runs if the branch is master or release/ runs and pushes the build to the public build repo
|
||||
Public_Push_Output:
|
||||
needs: Build_Project
|
||||
runs-on: windows-latest
|
||||
if: contains(github.ref, 'master') || contains(github.ref, 'release')
|
||||
steps:
|
||||
# Checkout the repo
|
||||
- name: Checkout Builds Repo
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.BUILDS_TOKEN }}
|
||||
repository: PepperDash/Essentials-Builds
|
||||
ref: ${{ Env.GITHUB_REF }}
|
||||
# Download the version artifact from the build job
|
||||
- name: Download Build Version Info
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: Version
|
||||
- name: Check Directory
|
||||
run: Get-ChildItem "./"
|
||||
# Set the version number environment variable from the file we just downloaded
|
||||
- name: Set Version Number
|
||||
shell: powershell
|
||||
run: |
|
||||
Get-ChildItem "./Version"
|
||||
$version = Get-Content -Path ./Version/version.txt
|
||||
Write-Host "Version: $version"
|
||||
Write-Output "::set-env name=VERSION::$version"
|
||||
Remove-Item -Path ./Version/version.txt
|
||||
Remove-Item -Path ./Version
|
||||
# Checkout/Create the branch
|
||||
- name: Create new branch
|
||||
run: git checkout -b $($Env:GITHUB_REF -replace "refs/heads/")
|
||||
# Download the build output into the repo
|
||||
- name: Download Build output
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: Build
|
||||
path: ./
|
||||
- name: Check directory
|
||||
run: Get-ChildItem ./
|
||||
# Unzip the build package file
|
||||
- name: Unzip Build file
|
||||
run: |
|
||||
Get-ChildItem .\*.zip | Expand-Archive -DestinationPath .\
|
||||
Remove-Item -Path .\*.zip
|
||||
- name: Check directory again
|
||||
run: Get-ChildItem ./
|
||||
# Commits the build output to the branch and tags it with the version
|
||||
- name: Commit build output and tag the commit
|
||||
shell: powershell
|
||||
run: |
|
||||
git config user.email "actions@pepperdash.com"
|
||||
git config user.name "GitHub Actions"
|
||||
git add .
|
||||
$commit = "Build $($Env:GITHUB_RUN_NUMBER) from commit: https://github.com/$($Env:GITHUB_REPOSITORY)/commit/$($Env:GITHUB_SHA)"
|
||||
Write-Host "Commit: $commit"
|
||||
git commit -m $commit
|
||||
git tag $($Env:VERSION)
|
||||
# Push the commit
|
||||
- name: Push to Builds Repo
|
||||
shell: powershell
|
||||
run: |
|
||||
$branch = $($Env:GITHUB_REF) -replace "refs/heads/"
|
||||
Write-Host "Branch: $branch"
|
||||
git push -u origin $($branch) --force
|
||||
# Push the tags
|
||||
- name: Push tags
|
||||
run: git push --tags origin
|
||||
- name: Check Directory
|
||||
run: Get-ChildItem ./
|
||||
74
.github/workflows/master.yml
vendored
Normal file
74
.github/workflows/master.yml
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
name: Master Build using Docker
|
||||
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
- created
|
||||
branches:
|
||||
- master
|
||||
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: PepperDashEssentials
|
||||
SOLUTION_FILE: PepperDashEssentials
|
||||
# Do not edit this, we're just creating it here
|
||||
VERSION: 0.0.0-buildtype-buildnumber
|
||||
# Defaults to debug for build type
|
||||
BUILD_TYPE: Release
|
||||
# Defaults to master as the release branch. Change as necessary
|
||||
RELEASE_BRANCH: master
|
||||
jobs:
|
||||
Build_Project:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
# First we checkout the source repo
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v2
|
||||
# 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
|
||||
# Fetch all tags
|
||||
- name: Fetch tags
|
||||
run: git fetch --tags
|
||||
# Generate the appropriate version number
|
||||
- name: Set Version Number
|
||||
shell: powershell
|
||||
env:
|
||||
TAG_NAME: ${{ github.event.release.tag_name }}
|
||||
run: Write-Output "::set-env name=VERSION::$($Env:TAG_NAME)"
|
||||
# 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 }}
|
||||
# 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_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
|
||||
# Upload the build package to the release
|
||||
- name: Upload Release Package
|
||||
id: upload_release
|
||||
uses: actions/upload-release-asset@v1
|
||||
with:
|
||||
upload_url: ${{ github.event.release.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 }}
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -22,3 +22,6 @@ _ReSharper*/
|
||||
SIMPLSharpLogs/
|
||||
*.projectinfo
|
||||
essentials-framework/EssentialDMTestConfig/
|
||||
output/
|
||||
|
||||
PepperDashEssentials-0.0.0-buildType-test.zip
|
||||
|
||||
@@ -1,11 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core.Monitoring;
|
||||
|
||||
@@ -23,11 +17,11 @@ namespace PepperDash.Essentials.AppServer.Messengers
|
||||
|
||||
SysMon = sysMon;
|
||||
|
||||
SysMon.SystemMonitorPropertiesChanged += new EventHandler<EventArgs>(SysMon_SystemMonitorPropertiesChanged);
|
||||
SysMon.SystemMonitorPropertiesChanged += SysMon_SystemMonitorPropertiesChanged;
|
||||
|
||||
foreach (var p in SysMon.ProgramStatusFeedbackCollection)
|
||||
{
|
||||
p.Value.ProgramInfoChanged += new EventHandler<ProgramInfoEventArgs>(ProgramInfoChanged);
|
||||
p.Value.ProgramInfoChanged += ProgramInfoChanged;
|
||||
}
|
||||
|
||||
CrestronConsole.AddNewConsoleCommand(s => SendFullStatusMessage(), "SendFullSysMonStatus", "Sends the full System Monitor Status", ConsoleAccessLevelEnum.AccessOperator);
|
||||
@@ -72,18 +66,15 @@ namespace PepperDash.Essentials.AppServer.Messengers
|
||||
Debug.Console(1, "Posting System Monitor Status Message.");
|
||||
|
||||
// This takes a while, launch a new thread
|
||||
CrestronInvoke.BeginInvoke((o) =>
|
||||
CrestronInvoke.BeginInvoke(o => PostStatusMessage(new
|
||||
{
|
||||
PostStatusMessage(new
|
||||
{
|
||||
timeZone = SysMon.TimeZoneFeedback.IntValue,
|
||||
timeZoneName = SysMon.TimeZoneTextFeedback.StringValue,
|
||||
ioControllerVersion = SysMon.IOControllerVersionFeedback.StringValue,
|
||||
snmpVersion = SysMon.SnmpVersionFeedback.StringValue,
|
||||
bacnetVersion = SysMon.BACnetAppVersionFeedback.StringValue,
|
||||
controllerVersion = SysMon.ControllerVersionFeedback.StringValue
|
||||
});
|
||||
});
|
||||
timeZone = SysMon.TimeZoneFeedback.IntValue,
|
||||
timeZoneName = SysMon.TimeZoneTextFeedback.StringValue,
|
||||
ioControllerVersion = SysMon.IoControllerVersionFeedback.StringValue,
|
||||
snmpVersion = SysMon.SnmpVersionFeedback.StringValue,
|
||||
bacnetVersion = SysMon.BaCnetAppVersionFeedback.StringValue,
|
||||
controllerVersion = SysMon.ControllerVersionFeedback.StringValue
|
||||
}));
|
||||
}
|
||||
|
||||
protected override void CustomRegisterWithAppServer(MobileControlSystemController appServerController)
|
||||
|
||||
@@ -136,6 +136,11 @@ namespace PepperDash.Essentials.Bridges
|
||||
(device as GenericRelayDevice).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
|
||||
continue;
|
||||
}
|
||||
else if (device is IRSetTopBoxBase)
|
||||
{
|
||||
(device as IRSetTopBoxBase).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
|
||||
continue;
|
||||
}
|
||||
else if (device is IDigitalInput)
|
||||
{
|
||||
(device as IDigitalInput).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
|
||||
|
||||
@@ -1,284 +1,288 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Crestron.SimplSharpPro.DM;
|
||||
using Crestron.SimplSharpPro.DM.Endpoints;
|
||||
using Crestron.SimplSharpPro.DM.Endpoints.Transmitters;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.DM;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace PepperDash.Essentials.Bridges
|
||||
{
|
||||
public static class DmChassisControllerApiExtensions
|
||||
{
|
||||
public static void LinkToApi(this DmChassisController dmChassis, BasicTriList trilist, uint joinStart, string joinMapKey)
|
||||
{
|
||||
DmChassisControllerJoinMap joinMap = new DmChassisControllerJoinMap();
|
||||
|
||||
var joinMapSerialized = JoinMapHelper.GetJoinMapForDevice(joinMapKey);
|
||||
|
||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||
joinMap = JsonConvert.DeserializeObject<DmChassisControllerJoinMap>(joinMapSerialized);
|
||||
|
||||
|
||||
joinMap.OffsetJoinNumbers(joinStart);
|
||||
|
||||
Debug.Console(1, dmChassis, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||
|
||||
var chassis = dmChassis.Chassis as DmMDMnxn;
|
||||
|
||||
dmChassis.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
|
||||
|
||||
trilist.SetUShortSigAction(joinMap.SystemId, new Action<ushort>(o => chassis.SystemId.UShortValue = o));
|
||||
trilist.SetSigTrueAction(joinMap.SystemId, new Action(() => chassis.ApplySystemId()));
|
||||
|
||||
dmChassis.SystemIdFeebdack.LinkInputSig(trilist.UShortInput[joinMap.SystemId]);
|
||||
dmChassis.SystemIdBusyFeedback.LinkInputSig(trilist.BooleanInput[joinMap.SystemId]);
|
||||
|
||||
// Link up outputs
|
||||
for (uint i = 1; i <= dmChassis.Chassis.NumberOfOutputs; i++)
|
||||
{
|
||||
var ioSlot = i;
|
||||
|
||||
// Control
|
||||
trilist.SetUShortSigAction(joinMap.OutputVideo + ioSlot, new Action<ushort>(o => dmChassis.ExecuteSwitch(o, ioSlot, eRoutingSignalType.Video)));
|
||||
trilist.SetUShortSigAction(joinMap.OutputAudio + ioSlot, new Action<ushort>(o => dmChassis.ExecuteSwitch(o, ioSlot, eRoutingSignalType.Audio)));
|
||||
trilist.SetUShortSigAction(joinMap.OutputUsb + ioSlot, new Action<ushort>(o => dmChassis.ExecuteSwitch(o, ioSlot, eRoutingSignalType.UsbOutput)));
|
||||
trilist.SetUShortSigAction(joinMap.InputUsb + ioSlot, new Action<ushort>(o => dmChassis.ExecuteSwitch(o, ioSlot, eRoutingSignalType.UsbInput)));
|
||||
|
||||
if (dmChassis.TxDictionary.ContainsKey(ioSlot))
|
||||
{
|
||||
Debug.Console(2, "Creating Tx Feedbacks {0}", ioSlot);
|
||||
var txKey = dmChassis.TxDictionary[ioSlot];
|
||||
var basicTxDevice = DeviceManager.GetDeviceForKey(txKey) as BasicDmTxControllerBase;
|
||||
|
||||
var advancedTxDevice = basicTxDevice as DmTxControllerBase;
|
||||
|
||||
if (dmChassis.Chassis is DmMd8x8Cpu3 || dmChassis.Chassis is DmMd8x8Cpu3rps
|
||||
|| dmChassis.Chassis is DmMd16x16Cpu3 || dmChassis.Chassis is DmMd16x16Cpu3rps
|
||||
|| dmChassis.Chassis is DmMd32x32Cpu3 || dmChassis.Chassis is DmMd32x32Cpu3rps)
|
||||
{
|
||||
dmChassis.InputEndpointOnlineFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline + ioSlot]);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (advancedTxDevice != null)
|
||||
{
|
||||
advancedTxDevice.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline + ioSlot]);
|
||||
Debug.Console(2, "Linking Tx Online Feedback from Advanced Transmitter at input {0}", ioSlot);
|
||||
}
|
||||
else if (dmChassis.InputEndpointOnlineFeedbacks[ioSlot] != null)
|
||||
{
|
||||
Debug.Console(2, "Linking Tx Online Feedback from Input Card {0}", ioSlot);
|
||||
dmChassis.InputEndpointOnlineFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline + ioSlot]);
|
||||
}
|
||||
}
|
||||
|
||||
if (advancedTxDevice != null) // Advanced TX device
|
||||
{
|
||||
advancedTxDevice.AnyVideoInput.VideoStatus.VideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VideoSyncStatus + ioSlot]);
|
||||
|
||||
// Flag if the TX is an advanced endpoint type
|
||||
trilist.BooleanInput[joinMap.TxAdvancedIsPresent + ioSlot].BoolValue = true;
|
||||
}
|
||||
else if(advancedTxDevice == null || basicTxDevice != null) // Basic TX device
|
||||
{
|
||||
Debug.Console(1, "Setting up actions and feedbacks on input card {0}", ioSlot);
|
||||
dmChassis.VideoInputSyncFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.VideoSyncStatus + ioSlot]);
|
||||
|
||||
var inputPort = dmChassis.InputPorts[string.Format("inputCard{0}--hdmiIn", ioSlot)];
|
||||
if (inputPort != null)
|
||||
{
|
||||
Debug.Console(1, "Port value for input card {0} is set", ioSlot);
|
||||
var port = inputPort.Port;
|
||||
|
||||
if (port != null)
|
||||
{
|
||||
if (port is HdmiInputWithCEC)
|
||||
{
|
||||
Debug.Console(1, "Port is HdmiInputWithCec");
|
||||
|
||||
var hdmiInPortWCec = port as HdmiInputWithCEC;
|
||||
|
||||
if (hdmiInPortWCec.HdcpSupportedLevel != eHdcpSupportedLevel.Unknown)
|
||||
{
|
||||
SetHdcpStateAction(true, hdmiInPortWCec, joinMap.HdcpSupportState + ioSlot, trilist);
|
||||
}
|
||||
|
||||
dmChassis.InputCardHdcpCapabilityFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState + ioSlot]);
|
||||
|
||||
if(dmChassis.InputCardHdcpCapabilityTypes.ContainsKey(ioSlot))
|
||||
trilist.UShortInput[joinMap.HdcpSupportCapability + ioSlot].UShortValue = (ushort)dmChassis.InputCardHdcpCapabilityTypes[ioSlot];
|
||||
else
|
||||
trilist.UShortInput[joinMap.HdcpSupportCapability + ioSlot].UShortValue = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
inputPort = dmChassis.InputPorts[string.Format("inputCard{0}--dmIn", ioSlot)];
|
||||
|
||||
if(inputPort != null)
|
||||
{
|
||||
var port = inputPort.Port;
|
||||
|
||||
if (port is DMInputPortWithCec)
|
||||
{
|
||||
Debug.Console(1, "Port is DMInputPortWithCec");
|
||||
|
||||
var dmInPortWCec = port as DMInputPortWithCec;
|
||||
|
||||
if (dmInPortWCec != null)
|
||||
{
|
||||
SetHdcpStateAction(dmChassis.PropertiesConfig.InputSlotSupportsHdcp2[ioSlot], dmInPortWCec, joinMap.HdcpSupportState + ioSlot, trilist);
|
||||
}
|
||||
|
||||
dmChassis.InputCardHdcpCapabilityFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState + ioSlot]);
|
||||
|
||||
if (dmChassis.InputCardHdcpCapabilityTypes.ContainsKey(ioSlot))
|
||||
trilist.UShortInput[joinMap.HdcpSupportCapability + ioSlot].UShortValue = (ushort)dmChassis.InputCardHdcpCapabilityTypes[ioSlot];
|
||||
else
|
||||
trilist.UShortInput[joinMap.HdcpSupportCapability + ioSlot].UShortValue = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
dmChassis.VideoInputSyncFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.VideoSyncStatus + ioSlot]);
|
||||
|
||||
var inputPort = dmChassis.InputPorts[string.Format("inputCard{0}--hdmiIn", ioSlot)];
|
||||
if (inputPort != null)
|
||||
{
|
||||
var hdmiPort = inputPort.Port as EndpointHdmiInput;
|
||||
|
||||
if (hdmiPort != null)
|
||||
{
|
||||
SetHdcpStateAction(true, hdmiPort, joinMap.HdcpSupportState + ioSlot, trilist);
|
||||
dmChassis.InputCardHdcpCapabilityFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState + ioSlot]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (dmChassis.RxDictionary.ContainsKey(ioSlot))
|
||||
{
|
||||
Debug.Console(2, "Creating Rx Feedbacks {0}", ioSlot);
|
||||
var rxKey = dmChassis.RxDictionary[ioSlot];
|
||||
var rxDevice = DeviceManager.GetDeviceForKey(rxKey) as DmRmcControllerBase;
|
||||
var hdBaseTDevice = DeviceManager.GetDeviceForKey(rxKey) as DmHdBaseTControllerBase;
|
||||
if (dmChassis.Chassis is DmMd8x8Cpu3 || dmChassis.Chassis is DmMd8x8Cpu3rps
|
||||
|| dmChassis.Chassis is DmMd16x16Cpu3 || dmChassis.Chassis is DmMd16x16Cpu3rps
|
||||
|| dmChassis.Chassis is DmMd32x32Cpu3 || dmChassis.Chassis is DmMd32x32Cpu3rps || hdBaseTDevice != null)
|
||||
{
|
||||
dmChassis.OutputEndpointOnlineFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.OutputEndpointOnline + ioSlot]);
|
||||
}
|
||||
else if (rxDevice != null)
|
||||
{
|
||||
rxDevice.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.OutputEndpointOnline + ioSlot]);
|
||||
}
|
||||
}
|
||||
|
||||
// Feedback
|
||||
dmChassis.VideoOutputFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.OutputVideo + ioSlot]);
|
||||
dmChassis.AudioOutputFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.OutputAudio + ioSlot]);
|
||||
dmChassis.UsbOutputRoutedToFeebacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.OutputUsb + ioSlot]);
|
||||
dmChassis.UsbInputRoutedToFeebacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.InputUsb + ioSlot]);
|
||||
|
||||
|
||||
dmChassis.OutputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputNames + ioSlot]);
|
||||
dmChassis.InputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.InputNames + ioSlot]);
|
||||
dmChassis.OutputVideoRouteNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputCurrentVideoInputNames + ioSlot]);
|
||||
dmChassis.OutputAudioRouteNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputCurrentAudioInputNames + ioSlot]);
|
||||
}
|
||||
}
|
||||
|
||||
static void SetHdcpStateAction(bool hdcpTypeSimple, HdmiInputWithCEC port, uint join, BasicTriList trilist)
|
||||
{
|
||||
if (hdcpTypeSimple)
|
||||
{
|
||||
trilist.SetUShortSigAction(join,
|
||||
new Action<ushort>(s =>
|
||||
{
|
||||
if (s == 0)
|
||||
{
|
||||
port.HdcpSupportOff();
|
||||
}
|
||||
else if (s > 0)
|
||||
{
|
||||
port.HdcpSupportOn();
|
||||
}
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
trilist.SetUShortSigAction(join,
|
||||
new Action<ushort>(u =>
|
||||
{
|
||||
port.HdcpReceiveCapability = (eHdcpCapabilityType)u;
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
static void SetHdcpStateAction(bool hdcpTypeSimple, EndpointHdmiInput port, uint join, BasicTriList trilist)
|
||||
{
|
||||
if (hdcpTypeSimple)
|
||||
{
|
||||
trilist.SetUShortSigAction(join,
|
||||
new Action<ushort>(s =>
|
||||
{
|
||||
if (s == 0)
|
||||
{
|
||||
port.HdcpSupportOff();
|
||||
}
|
||||
else if (s > 0)
|
||||
{
|
||||
port.HdcpSupportOn();
|
||||
}
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
trilist.SetUShortSigAction(join,
|
||||
new Action<ushort>(u =>
|
||||
{
|
||||
port.HdcpCapability = (eHdcpCapabilityType)u;
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
static void SetHdcpStateAction(bool supportsHdcp2, DMInputPortWithCec port, uint join, BasicTriList trilist)
|
||||
{
|
||||
if (!supportsHdcp2)
|
||||
{
|
||||
trilist.SetUShortSigAction(join,
|
||||
new Action<ushort>(s =>
|
||||
{
|
||||
if (s == 0)
|
||||
{
|
||||
port.HdcpSupportOff();
|
||||
}
|
||||
else if (s > 0)
|
||||
{
|
||||
port.HdcpSupportOn();
|
||||
}
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
trilist.SetUShortSigAction(join,
|
||||
new Action<ushort>(u =>
|
||||
{
|
||||
port.HdcpReceiveCapability = (eHdcpCapabilityType)u;
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Crestron.SimplSharpPro.DM;
|
||||
using Crestron.SimplSharpPro.DM.Endpoints;
|
||||
using Crestron.SimplSharpPro.DM.Endpoints.Transmitters;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.DM;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace PepperDash.Essentials.Bridges
|
||||
{
|
||||
public static class DmChassisControllerApiExtentions
|
||||
{
|
||||
public static void LinkToApi(this DmChassisController dmChassis, BasicTriList trilist, uint joinStart, string joinMapKey)
|
||||
{
|
||||
DmChassisControllerJoinMap joinMap = new DmChassisControllerJoinMap();
|
||||
|
||||
var joinMapSerialized = JoinMapHelper.GetJoinMapForDevice(joinMapKey);
|
||||
|
||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||
joinMap = JsonConvert.DeserializeObject<DmChassisControllerJoinMap>(joinMapSerialized);
|
||||
|
||||
|
||||
joinMap.OffsetJoinNumbers(joinStart);
|
||||
|
||||
Debug.Console(1, dmChassis, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||
|
||||
var chassis = dmChassis.Chassis as DmMDMnxn;
|
||||
|
||||
dmChassis.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
|
||||
|
||||
trilist.SetUShortSigAction(joinMap.SystemId, new Action<ushort>(o => chassis.SystemId.UShortValue = o));
|
||||
trilist.SetSigTrueAction(joinMap.SystemId, new Action(() => chassis.ApplySystemId()));
|
||||
|
||||
dmChassis.SystemIdFeebdack.LinkInputSig(trilist.UShortInput[joinMap.SystemId]);
|
||||
dmChassis.SystemIdBusyFeedback.LinkInputSig(trilist.BooleanInput[joinMap.SystemId]);
|
||||
|
||||
// Link up outputs
|
||||
for (uint i = 1; i <= dmChassis.Chassis.NumberOfOutputs; i++)
|
||||
{
|
||||
var ioSlot = i;
|
||||
|
||||
// Control
|
||||
trilist.SetUShortSigAction(joinMap.OutputVideo + ioSlot, new Action<ushort>(o => dmChassis.ExecuteSwitch(o, ioSlot, eRoutingSignalType.Video)));
|
||||
trilist.SetUShortSigAction(joinMap.OutputAudio + ioSlot, new Action<ushort>(o => dmChassis.ExecuteSwitch(o, ioSlot, eRoutingSignalType.Audio)));
|
||||
trilist.SetUShortSigAction(joinMap.OutputUsb + ioSlot, new Action<ushort>(o => dmChassis.ExecuteSwitch(o, ioSlot, eRoutingSignalType.UsbOutput)));
|
||||
trilist.SetUShortSigAction(joinMap.InputUsb + ioSlot, new Action<ushort>(o => dmChassis.ExecuteSwitch(o, ioSlot, eRoutingSignalType.UsbInput)));
|
||||
|
||||
if (dmChassis.TxDictionary.ContainsKey(ioSlot))
|
||||
{
|
||||
Debug.Console(2, "Creating Tx Feedbacks {0}", ioSlot);
|
||||
var txKey = dmChassis.TxDictionary[ioSlot];
|
||||
var basicTxDevice = DeviceManager.GetDeviceForKey(txKey) as BasicDmTxControllerBase;
|
||||
|
||||
var advancedTxDevice = basicTxDevice as DmTxControllerBase;
|
||||
|
||||
if (dmChassis.Chassis is DmMd8x8Cpu3 || dmChassis.Chassis is DmMd8x8Cpu3rps
|
||||
|| dmChassis.Chassis is DmMd16x16Cpu3 || dmChassis.Chassis is DmMd16x16Cpu3rps
|
||||
|| dmChassis.Chassis is DmMd32x32Cpu3 || dmChassis.Chassis is DmMd32x32Cpu3rps)
|
||||
{
|
||||
dmChassis.InputEndpointOnlineFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline + ioSlot]);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (advancedTxDevice != null)
|
||||
{
|
||||
advancedTxDevice.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline + ioSlot]);
|
||||
Debug.Console(2, "Linking Tx Online Feedback from Advanced Transmitter at input {0}", ioSlot);
|
||||
}
|
||||
else if (dmChassis.InputEndpointOnlineFeedbacks[ioSlot] != null)
|
||||
{
|
||||
Debug.Console(2, "Linking Tx Online Feedback from Input Card {0}", ioSlot);
|
||||
dmChassis.InputEndpointOnlineFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline + ioSlot]);
|
||||
}
|
||||
}
|
||||
|
||||
if (basicTxDevice != null && advancedTxDevice == null)
|
||||
trilist.BooleanInput[joinMap.TxAdvancedIsPresent + ioSlot].BoolValue = true;
|
||||
|
||||
if (advancedTxDevice != null)
|
||||
{
|
||||
advancedTxDevice.AnyVideoInput.VideoStatus.VideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VideoSyncStatus + ioSlot]);
|
||||
}
|
||||
else if(advancedTxDevice == null || basicTxDevice != null)
|
||||
{
|
||||
Debug.Console(1, "Setting up actions and feedbacks on input card {0}", ioSlot);
|
||||
dmChassis.VideoInputSyncFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.VideoSyncStatus + ioSlot]);
|
||||
|
||||
var inputPort = dmChassis.InputPorts[string.Format("inputCard{0}--hdmiIn", ioSlot)];
|
||||
if (inputPort != null)
|
||||
{
|
||||
Debug.Console(1, "Port value for input card {0} is set", ioSlot);
|
||||
var port = inputPort.Port;
|
||||
|
||||
if (port != null)
|
||||
{
|
||||
if (port is HdmiInputWithCEC)
|
||||
{
|
||||
Debug.Console(1, "Port is HdmiInputWithCec");
|
||||
|
||||
var hdmiInPortWCec = port as HdmiInputWithCEC;
|
||||
|
||||
if (hdmiInPortWCec.HdcpSupportedLevel != eHdcpSupportedLevel.Unknown)
|
||||
{
|
||||
SetHdcpStateAction(true, hdmiInPortWCec, joinMap.HdcpSupportState + ioSlot, trilist);
|
||||
}
|
||||
|
||||
dmChassis.InputCardHdcpCapabilityFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState + ioSlot]);
|
||||
|
||||
if(dmChassis.InputCardHdcpCapabilityTypes.ContainsKey(ioSlot))
|
||||
trilist.UShortInput[joinMap.HdcpSupportCapability + ioSlot].UShortValue = (ushort)dmChassis.InputCardHdcpCapabilityTypes[ioSlot];
|
||||
else
|
||||
trilist.UShortInput[joinMap.HdcpSupportCapability + ioSlot].UShortValue = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
inputPort = dmChassis.InputPorts[string.Format("inputCard{0}--dmIn", ioSlot)];
|
||||
|
||||
if(inputPort != null)
|
||||
{
|
||||
var port = inputPort.Port;
|
||||
|
||||
if (port is DMInputPortWithCec)
|
||||
{
|
||||
Debug.Console(1, "Port is DMInputPortWithCec");
|
||||
|
||||
var dmInPortWCec = port as DMInputPortWithCec;
|
||||
|
||||
if (dmInPortWCec != null)
|
||||
{
|
||||
SetHdcpStateAction(dmChassis.PropertiesConfig.InputSlotSupportsHdcp2[ioSlot], dmInPortWCec, joinMap.HdcpSupportState + ioSlot, trilist);
|
||||
}
|
||||
|
||||
dmChassis.InputCardHdcpCapabilityFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState + ioSlot]);
|
||||
|
||||
if (dmChassis.InputCardHdcpCapabilityTypes.ContainsKey(ioSlot))
|
||||
trilist.UShortInput[joinMap.HdcpSupportCapability + ioSlot].UShortValue = (ushort)dmChassis.InputCardHdcpCapabilityTypes[ioSlot];
|
||||
else
|
||||
trilist.UShortInput[joinMap.HdcpSupportCapability + ioSlot].UShortValue = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
dmChassis.VideoInputSyncFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.VideoSyncStatus + ioSlot]);
|
||||
|
||||
var inputPort = dmChassis.InputPorts[string.Format("inputCard{0}--hdmiIn", ioSlot)];
|
||||
if (inputPort != null)
|
||||
{
|
||||
var hdmiPort = inputPort.Port as EndpointHdmiInput;
|
||||
|
||||
if (hdmiPort != null)
|
||||
{
|
||||
SetHdcpStateAction(true, hdmiPort, joinMap.HdcpSupportState + ioSlot, trilist);
|
||||
dmChassis.InputCardHdcpCapabilityFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState + ioSlot]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (dmChassis.RxDictionary.ContainsKey(ioSlot))
|
||||
{
|
||||
Debug.Console(2, "Creating Rx Feedbacks {0}", ioSlot);
|
||||
var rxKey = dmChassis.RxDictionary[ioSlot];
|
||||
var rxDevice = DeviceManager.GetDeviceForKey(rxKey) as DmRmcControllerBase;
|
||||
var hdBaseTDevice = DeviceManager.GetDeviceForKey(rxKey) as DmHdBaseTControllerBase;
|
||||
if (dmChassis.Chassis is DmMd8x8Cpu3 || dmChassis.Chassis is DmMd8x8Cpu3rps
|
||||
|| dmChassis.Chassis is DmMd16x16Cpu3 || dmChassis.Chassis is DmMd16x16Cpu3rps
|
||||
|| dmChassis.Chassis is DmMd32x32Cpu3 || dmChassis.Chassis is DmMd32x32Cpu3rps || hdBaseTDevice != null)
|
||||
{
|
||||
dmChassis.OutputEndpointOnlineFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.OutputEndpointOnline + ioSlot]);
|
||||
}
|
||||
else if (rxDevice != null)
|
||||
{
|
||||
rxDevice.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.OutputEndpointOnline + ioSlot]);
|
||||
}
|
||||
}
|
||||
|
||||
// Feedback
|
||||
dmChassis.VideoOutputFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.OutputVideo + ioSlot]);
|
||||
dmChassis.AudioOutputFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.OutputAudio + ioSlot]);
|
||||
dmChassis.UsbOutputRoutedToFeebacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.OutputUsb + ioSlot]);
|
||||
dmChassis.UsbInputRoutedToFeebacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.InputUsb + ioSlot]);
|
||||
|
||||
dmChassis.OutputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputNames + ioSlot]);
|
||||
dmChassis.InputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.InputNames + ioSlot]);
|
||||
dmChassis.OutputVideoRouteNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputCurrentVideoInputNames + ioSlot]);
|
||||
dmChassis.OutputAudioRouteNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputCurrentAudioInputNames + ioSlot]);
|
||||
|
||||
dmChassis.OutputDisabledByHdcpFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.OutputDisabledByHdcp + ioSlot]);
|
||||
}
|
||||
}
|
||||
|
||||
static void SetHdcpStateAction(bool hdcpTypeSimple, HdmiInputWithCEC port, uint join, BasicTriList trilist)
|
||||
{
|
||||
if (hdcpTypeSimple)
|
||||
{
|
||||
trilist.SetUShortSigAction(join,
|
||||
new Action<ushort>(s =>
|
||||
{
|
||||
if (s == 0)
|
||||
{
|
||||
port.HdcpSupportOff();
|
||||
}
|
||||
else if (s > 0)
|
||||
{
|
||||
port.HdcpSupportOn();
|
||||
}
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
trilist.SetUShortSigAction(join,
|
||||
new Action<ushort>(u =>
|
||||
{
|
||||
port.HdcpReceiveCapability = (eHdcpCapabilityType)u;
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
static void SetHdcpStateAction(bool hdcpTypeSimple, EndpointHdmiInput port, uint join, BasicTriList trilist)
|
||||
{
|
||||
if (hdcpTypeSimple)
|
||||
{
|
||||
trilist.SetUShortSigAction(join,
|
||||
new Action<ushort>(s =>
|
||||
{
|
||||
if (s == 0)
|
||||
{
|
||||
port.HdcpSupportOff();
|
||||
}
|
||||
else if (s > 0)
|
||||
{
|
||||
port.HdcpSupportOn();
|
||||
}
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
trilist.SetUShortSigAction(join,
|
||||
new Action<ushort>(u =>
|
||||
{
|
||||
port.HdcpCapability = (eHdcpCapabilityType)u;
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
static void SetHdcpStateAction(bool supportsHdcp2, DMInputPortWithCec port, uint join, BasicTriList trilist)
|
||||
{
|
||||
if (!supportsHdcp2)
|
||||
{
|
||||
trilist.SetUShortSigAction(join,
|
||||
new Action<ushort>(s =>
|
||||
{
|
||||
if (s == 0)
|
||||
{
|
||||
port.HdcpSupportOff();
|
||||
}
|
||||
else if (s > 0)
|
||||
{
|
||||
port.HdcpSupportOn();
|
||||
}
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
trilist.SetUShortSigAction(join,
|
||||
new Action<ushort>(u =>
|
||||
{
|
||||
port.HdcpReceiveCapability = (eHdcpCapabilityType)u;
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -31,6 +31,16 @@ namespace PepperDash.Essentials.Bridges
|
||||
|
||||
#region Single and Dual Sensor Stuff
|
||||
occController.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
|
||||
trilist.StringInput[joinMap.Name].StringValue = occController.Name;
|
||||
|
||||
trilist.OnlineStatusChange += new Crestron.SimplSharpPro.OnlineStatusChangeEventHandler((d, args) =>
|
||||
{
|
||||
if (args.DeviceOnLine)
|
||||
{
|
||||
trilist.StringInput[joinMap.Name].StringValue = occController.Name;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// Occupied status
|
||||
trilist.SetSigTrueAction(joinMap.ForceOccupied, new Action(() => occController.ForceOccupied()));
|
||||
@@ -38,6 +48,7 @@ namespace PepperDash.Essentials.Bridges
|
||||
occController.RoomIsOccupiedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RoomOccupiedFeedback]);
|
||||
occController.RoomIsOccupiedFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.RoomVacantFeedback]);
|
||||
occController.RawOccupancyFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RawOccupancyFeedback]);
|
||||
trilist.SetBoolSigAction(joinMap.EnableRawStates, new Action<bool>((b) => occController.EnableRawStates(b)));
|
||||
|
||||
// Timouts
|
||||
trilist.SetUShortSigAction(joinMap.Timeout, new Action<ushort>((u) => occController.SetRemoteTimeout(u)));
|
||||
|
||||
128
PepperDashEssentials/Bridges/IRSetTopBoxBaseBridge.cs
Normal file
128
PepperDashEssentials/Bridges/IRSetTopBoxBaseBridge.cs
Normal file
@@ -0,0 +1,128 @@
|
||||
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.Devices.Common;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace PepperDash.Essentials.Bridges
|
||||
{
|
||||
public static class IRSetTopBoxBaseApiExtensions
|
||||
{
|
||||
public static void LinkToApi(this PepperDash.Essentials.Devices.Common.IRSetTopBoxBase stbDevice, BasicTriList trilist, uint joinStart, string joinMapKey)
|
||||
{
|
||||
SetTopBoxControllerJoinMap joinMap = new SetTopBoxControllerJoinMap();
|
||||
var joinMapSerialized = JoinMapHelper.GetJoinMapForDevice(joinMapKey);
|
||||
|
||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||
joinMap = JsonConvert.DeserializeObject<SetTopBoxControllerJoinMap>(joinMapSerialized);
|
||||
|
||||
joinMap.OffsetJoinNumbers(joinStart);
|
||||
|
||||
Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||
Debug.Console(0, "Linking to Display: {0}", stbDevice.Name);
|
||||
|
||||
trilist.StringInput[joinMap.Name].StringValue = stbDevice.Name;
|
||||
|
||||
var stbBase = stbDevice as ISetTopBoxControls;
|
||||
if (stbBase != null)
|
||||
{
|
||||
trilist.BooleanInput[joinMap.HasDpad].BoolValue = stbBase.HasDpad;
|
||||
trilist.BooleanInput[joinMap.HasNumeric].BoolValue = stbBase.HasNumeric;
|
||||
trilist.BooleanInput[joinMap.HasDvr].BoolValue = stbBase.HasDvr;
|
||||
trilist.BooleanInput[joinMap.HasPresets].BoolValue = stbBase.HasPresets;
|
||||
|
||||
trilist.SetBoolSigAction(joinMap.DvrList, (b) => stbBase.DvrList(b));
|
||||
trilist.SetBoolSigAction(joinMap.Replay, (b) => stbBase.Replay(b));
|
||||
|
||||
trilist.SetStringSigAction(joinMap.LoadPresets, (s) => stbBase.LoadPresets(s));
|
||||
}
|
||||
|
||||
var stbPower = stbDevice as IPower;
|
||||
if (stbPower != null)
|
||||
{
|
||||
trilist.SetSigTrueAction(joinMap.PowerOn, () => stbPower.PowerOn());
|
||||
trilist.SetSigTrueAction(joinMap.PowerOff, () => stbPower.PowerOff());
|
||||
trilist.SetSigTrueAction(joinMap.PowerToggle, () => stbPower.PowerToggle());
|
||||
|
||||
}
|
||||
|
||||
var stbDPad = stbDevice as IDPad;
|
||||
if (stbDPad != null)
|
||||
{
|
||||
trilist.SetBoolSigAction(joinMap.Up, (b) => stbDPad.Up(b));
|
||||
trilist.SetBoolSigAction(joinMap.Down, (b) => stbDPad.Down(b));
|
||||
trilist.SetBoolSigAction(joinMap.Left, (b) => stbDPad.Left(b));
|
||||
trilist.SetBoolSigAction(joinMap.Right, (b) => stbDPad.Right(b));
|
||||
trilist.SetBoolSigAction(joinMap.Select, (b) => stbDPad.Select(b));
|
||||
trilist.SetBoolSigAction(joinMap.Menu, (b) => stbDPad.Menu(b));
|
||||
trilist.SetBoolSigAction(joinMap.Exit, (b) => stbDPad.Exit(b));
|
||||
}
|
||||
|
||||
var stbChannel = stbDevice as IChannel;
|
||||
if (stbChannel != null)
|
||||
{
|
||||
trilist.SetBoolSigAction(joinMap.ChannelUp, (b) => stbChannel.ChannelUp(b));
|
||||
trilist.SetBoolSigAction(joinMap.ChannelDown, (b) => stbChannel.ChannelDown(b));
|
||||
trilist.SetBoolSigAction(joinMap.LastChannel, (b) => stbChannel.LastChannel(b));
|
||||
trilist.SetBoolSigAction(joinMap.Guide, (b) => stbChannel.Guide(b));
|
||||
trilist.SetBoolSigAction(joinMap.Info, (b) => stbChannel.Info(b));
|
||||
trilist.SetBoolSigAction(joinMap.Exit, (b) => stbChannel.Exit(b));
|
||||
}
|
||||
|
||||
var stbColor = stbDevice as IColor;
|
||||
if (stbColor != null)
|
||||
{
|
||||
trilist.SetBoolSigAction(joinMap.Red, (b) => stbColor.Red(b));
|
||||
trilist.SetBoolSigAction(joinMap.Green, (b) => stbColor.Green(b));
|
||||
trilist.SetBoolSigAction(joinMap.Yellow, (b) => stbColor.Yellow(b));
|
||||
trilist.SetBoolSigAction(joinMap.Blue, (b) => stbColor.Blue(b));
|
||||
}
|
||||
|
||||
var stbKeypad = stbDevice as ISetTopBoxNumericKeypad;
|
||||
if (stbKeypad != null)
|
||||
{
|
||||
trilist.StringInput[joinMap.KeypadAccessoryButton1Label].StringValue = stbKeypad.KeypadAccessoryButton1Label;
|
||||
trilist.StringInput[joinMap.KeypadAccessoryButton2Label].StringValue = stbKeypad.KeypadAccessoryButton2Label;
|
||||
|
||||
trilist.BooleanInput[joinMap.HasKeypadAccessoryButton1].BoolValue = stbKeypad.HasKeypadAccessoryButton1;
|
||||
trilist.BooleanInput[joinMap.HasKeypadAccessoryButton2].BoolValue = stbKeypad.HasKeypadAccessoryButton2;
|
||||
|
||||
trilist.SetBoolSigAction(joinMap.Digit0, (b) => stbKeypad.Digit0(b));
|
||||
trilist.SetBoolSigAction(joinMap.Digit1, (b) => stbKeypad.Digit1(b));
|
||||
trilist.SetBoolSigAction(joinMap.Digit2, (b) => stbKeypad.Digit2(b));
|
||||
trilist.SetBoolSigAction(joinMap.Digit3, (b) => stbKeypad.Digit3(b));
|
||||
trilist.SetBoolSigAction(joinMap.Digit4, (b) => stbKeypad.Digit4(b));
|
||||
trilist.SetBoolSigAction(joinMap.Digit5, (b) => stbKeypad.Digit5(b));
|
||||
trilist.SetBoolSigAction(joinMap.Digit6, (b) => stbKeypad.Digit6(b));
|
||||
trilist.SetBoolSigAction(joinMap.Digit7, (b) => stbKeypad.Digit7(b));
|
||||
trilist.SetBoolSigAction(joinMap.Digit8, (b) => stbKeypad.Digit8(b));
|
||||
trilist.SetBoolSigAction(joinMap.Digit9, (b) => stbKeypad.Digit9(b));
|
||||
trilist.SetBoolSigAction(joinMap.KeypadAccessoryButton1Press, (b) => stbKeypad.KeypadAccessoryButton1(b));
|
||||
trilist.SetBoolSigAction(joinMap.KeypadAccessoryButton2Press, (b) => stbKeypad.KeypadAccessoryButton1(b));
|
||||
trilist.SetBoolSigAction(joinMap.Dash, (b) => stbKeypad.Dash(b));
|
||||
trilist.SetBoolSigAction(joinMap.KeypadEnter, (b) => stbKeypad.KeypadEnter(b));
|
||||
}
|
||||
|
||||
var stbTransport = stbDevice as ITransport;
|
||||
if (stbTransport != null)
|
||||
{
|
||||
trilist.SetBoolSigAction(joinMap.Play, (b) => stbTransport.Play(b));
|
||||
trilist.SetBoolSigAction(joinMap.Pause, (b) => stbTransport.Pause(b));
|
||||
trilist.SetBoolSigAction(joinMap.Rewind, (b) => stbTransport.Rewind(b));
|
||||
trilist.SetBoolSigAction(joinMap.FFwd, (b) => stbTransport.FFwd(b));
|
||||
trilist.SetBoolSigAction(joinMap.ChapMinus, (b) => stbTransport.ChapMinus(b));
|
||||
trilist.SetBoolSigAction(joinMap.ChapPlus, (b) => stbTransport.ChapPlus(b));
|
||||
trilist.SetBoolSigAction(joinMap.Stop, (b) => stbTransport.Stop(b));
|
||||
trilist.SetBoolSigAction(joinMap.Record, (b) => stbTransport.Record(b));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
@@ -38,6 +38,10 @@ namespace PepperDash.Essentials.Bridges
|
||||
/// Range reports high if corresponding input's transmitter supports bridging as a separate device for detailed AV switching, HDCP control, etc.
|
||||
/// </summary>
|
||||
public uint TxAdvancedIsPresent { get; set; } // indicates that there is an attached transmitter that should be bridged to be interacted with
|
||||
/// <summary>
|
||||
/// Range reports high if corresponding output is disabled by HDCP.
|
||||
/// </summary>
|
||||
public uint OutputDisabledByHdcp { get; set; } // indicates that there is an attached transmitter that should be bridged to be interacted with
|
||||
#endregion
|
||||
|
||||
#region Analogs
|
||||
@@ -101,6 +105,7 @@ namespace PepperDash.Essentials.Bridges
|
||||
InputEndpointOnline = 500; //501-699
|
||||
OutputEndpointOnline = 700; //701-899
|
||||
TxAdvancedIsPresent = 1000; //1001-1199
|
||||
OutputDisabledByHdcp = 1200; //1201-1399
|
||||
|
||||
//Analog
|
||||
OutputVideo = 100; //101-299
|
||||
@@ -139,6 +144,7 @@ namespace PepperDash.Essentials.Bridges
|
||||
OutputEndpointOnline = OutputEndpointOnline + joinOffset;
|
||||
HdcpSupportState = HdcpSupportState + joinOffset;
|
||||
HdcpSupportCapability = HdcpSupportCapability + joinOffset;
|
||||
OutputDisabledByHdcp = OutputDisabledByHdcp + joinOffset;
|
||||
TxAdvancedIsPresent = TxAdvancedIsPresent + joinOffset;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,6 +137,10 @@ namespace PepperDash.Essentials.Bridges
|
||||
public uint PirSensitivityInVacantState { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Serial
|
||||
public uint Name { get; set; }
|
||||
#endregion
|
||||
|
||||
public GlsOccupancySensorBaseJoinMap()
|
||||
{
|
||||
IsOnline = 1;
|
||||
@@ -177,7 +181,10 @@ namespace PepperDash.Essentials.Bridges
|
||||
UsSensitivityInOccupiedState = 5;
|
||||
UsSensitivityInVacantState = 6;
|
||||
PirSensitivityInOccupiedState = 7;
|
||||
PirSensitivityInVacantState = 8;
|
||||
PirSensitivityInVacantState = 8;
|
||||
|
||||
Name = 1;
|
||||
|
||||
}
|
||||
|
||||
public override void OffsetJoinNumbers(uint joinStart)
|
||||
@@ -206,7 +213,6 @@ namespace PepperDash.Essentials.Bridges
|
||||
DisableUsB = DisableUsB + joinOffset;
|
||||
EnablePir = EnablePir + joinOffset;
|
||||
DisablePir = DisablePir + joinOffset;
|
||||
DisablePir = DisablePir + joinOffset;
|
||||
IncrementUsInOccupiedState = IncrementUsInOccupiedState + joinOffset;
|
||||
DecrementUsInOccupiedState = DecrementUsInOccupiedState + joinOffset;
|
||||
IncrementUsInVacantState = IncrementUsInVacantState + joinOffset;
|
||||
@@ -224,6 +230,8 @@ namespace PepperDash.Essentials.Bridges
|
||||
UsSensitivityInVacantState = UsSensitivityInVacantState + joinOffset;
|
||||
PirSensitivityInOccupiedState = PirSensitivityInOccupiedState + joinOffset;
|
||||
PirSensitivityInVacantState = PirSensitivityInVacantState + joinOffset;
|
||||
|
||||
Name = Name + joinOffset;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,212 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using PepperDash.Essentials.Core;
|
||||
using Crestron.SimplSharp.Reflection;
|
||||
|
||||
|
||||
namespace PepperDash.Essentials.Bridges
|
||||
{
|
||||
public class SetTopBoxControllerJoinMap : JoinMapBase
|
||||
{
|
||||
#region Digitals
|
||||
public uint DvrList { get; set; } //
|
||||
public uint Replay { get; set; }
|
||||
public uint Up { get; set; } //
|
||||
public uint Down { get; set; } //
|
||||
public uint Left { get; set; } //
|
||||
public uint Right { get; set; } //
|
||||
public uint Select { get; set; } //
|
||||
public uint Menu { get; set; } //
|
||||
public uint Exit { get; set; } //
|
||||
public uint Digit0 { get; set; } //
|
||||
public uint Digit1 { get; set; } //
|
||||
public uint Digit2 { get; set; } //
|
||||
public uint Digit3 { get; set; } //
|
||||
public uint Digit4 { get; set; } //
|
||||
public uint Digit5 { get; set; } //
|
||||
public uint Digit6 { get; set; } //
|
||||
public uint Digit7 { get; set; } //
|
||||
public uint Digit8 { get; set; } //
|
||||
public uint Digit9 { get; set; } //
|
||||
public uint Dash { get; set; } //
|
||||
public uint KeypadEnter { get; set; } //
|
||||
public uint ChannelUp { get; set; } //
|
||||
public uint ChannelDown { get; set; } //
|
||||
public uint LastChannel { get; set; } //
|
||||
public uint Guide { get; set; } //
|
||||
public uint Info { get; set; } //
|
||||
public uint Red { get; set; } //
|
||||
public uint Green { get; set; } //
|
||||
public uint Yellow { get; set; } //
|
||||
public uint Blue { get; set; } //
|
||||
public uint ChapMinus { get; set; }
|
||||
public uint ChapPlus { get; set; }
|
||||
public uint FFwd { get; set; } //
|
||||
public uint Pause { get; set; } //
|
||||
public uint Play { get; set; } //
|
||||
public uint Record { get; set; }
|
||||
public uint Rewind { get; set; } //
|
||||
public uint Stop { get; set; } //
|
||||
|
||||
public uint PowerOn { get; set; } //
|
||||
public uint PowerOff { get; set; } //
|
||||
public uint PowerToggle { get; set; } //
|
||||
|
||||
public uint HasKeypadAccessoryButton1 { get; set; }
|
||||
public uint HasKeypadAccessoryButton2 { get; set; }
|
||||
|
||||
public uint KeypadAccessoryButton1Press { get; set; }
|
||||
public uint KeypadAccessoryButton2Press { get; set; }
|
||||
|
||||
|
||||
public uint HasDvr { get; set; }
|
||||
public uint HasPresets { get; set; }
|
||||
public uint HasNumeric { get; set; }
|
||||
public uint HasDpad { get; set; }
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Analogs
|
||||
|
||||
#endregion
|
||||
|
||||
#region Strings
|
||||
public uint Name { get; set; }
|
||||
public uint LoadPresets { get; set; }
|
||||
public uint KeypadAccessoryButton1Label { get; set; }
|
||||
public uint KeypadAccessoryButton2Label { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
public SetTopBoxControllerJoinMap()
|
||||
{
|
||||
PowerOn = 1;
|
||||
PowerOff = 2;
|
||||
PowerToggle = 3;
|
||||
|
||||
HasDpad = 4;
|
||||
Up = 4;
|
||||
Down = 5;
|
||||
Left = 6;
|
||||
Right = 7;
|
||||
Select = 8;
|
||||
Menu = 9;
|
||||
Exit = 10;
|
||||
|
||||
HasNumeric = 11;
|
||||
Digit0 = 11;
|
||||
Digit1 = 12;
|
||||
Digit2 = 13;
|
||||
Digit3 = 14;
|
||||
Digit4 = 15;
|
||||
Digit5 = 16;
|
||||
Digit6 = 17;
|
||||
Digit7 = 18;
|
||||
Digit8 = 19;
|
||||
Digit9 = 20;
|
||||
Dash = 21;
|
||||
KeypadEnter = 22;
|
||||
ChannelUp = 23;
|
||||
ChannelDown = 24;
|
||||
LastChannel = 25;
|
||||
|
||||
Guide = 26;
|
||||
Info = 27;
|
||||
Red = 28;
|
||||
Green = 29;
|
||||
Yellow = 30;
|
||||
Blue = 31;
|
||||
|
||||
HasDvr = 32;
|
||||
DvrList = 32;
|
||||
Play = 33;
|
||||
Pause = 34;
|
||||
Stop = 35;
|
||||
FFwd = 36;
|
||||
Rewind = 37;
|
||||
ChapPlus = 38;
|
||||
ChapMinus = 39;
|
||||
Replay = 40;
|
||||
Record = 41;
|
||||
HasKeypadAccessoryButton1 = 42;
|
||||
KeypadAccessoryButton1Press = 42;
|
||||
HasKeypadAccessoryButton2 = 43;
|
||||
KeypadAccessoryButton2Press = 43;
|
||||
|
||||
Name = 1;
|
||||
KeypadAccessoryButton1Label = 42;
|
||||
KeypadAccessoryButton2Label = 43;
|
||||
|
||||
LoadPresets = 50;
|
||||
}
|
||||
|
||||
public override void OffsetJoinNumbers(uint joinStart)
|
||||
{
|
||||
var joinOffset = joinStart - 1;
|
||||
|
||||
PowerOn += joinOffset;
|
||||
PowerOff += joinOffset;
|
||||
PowerToggle += joinOffset;
|
||||
|
||||
HasDpad += joinOffset;
|
||||
Up += joinOffset;
|
||||
Down += joinOffset;
|
||||
Left += joinOffset;
|
||||
Right += joinOffset;
|
||||
Select += joinOffset;
|
||||
Menu += joinOffset;
|
||||
Exit += joinOffset;
|
||||
|
||||
HasNumeric += joinOffset;
|
||||
Digit0 += joinOffset;
|
||||
Digit1 += joinOffset;
|
||||
Digit2 += joinOffset;
|
||||
Digit3 += joinOffset;
|
||||
Digit4 += joinOffset;
|
||||
Digit5 += joinOffset;
|
||||
Digit6 += joinOffset;
|
||||
Digit7 += joinOffset;
|
||||
Digit8 += joinOffset;
|
||||
Digit9 += joinOffset;
|
||||
Dash += joinOffset;
|
||||
KeypadEnter += joinOffset;
|
||||
ChannelUp += joinOffset;
|
||||
ChannelDown += joinOffset;
|
||||
LastChannel += joinOffset;
|
||||
|
||||
Guide += joinOffset;
|
||||
Info += joinOffset;
|
||||
Red += joinOffset;
|
||||
Green += joinOffset;
|
||||
Yellow += joinOffset;
|
||||
Blue += joinOffset;
|
||||
|
||||
HasDvr += joinOffset;
|
||||
DvrList += joinOffset;
|
||||
Play += joinOffset;
|
||||
Pause += joinOffset;
|
||||
Stop += joinOffset;
|
||||
FFwd += joinOffset;
|
||||
Rewind += joinOffset;
|
||||
ChapPlus += joinOffset;
|
||||
ChapMinus += joinOffset;
|
||||
Replay += joinOffset;
|
||||
Record += joinOffset;
|
||||
HasKeypadAccessoryButton1 += joinOffset;
|
||||
KeypadAccessoryButton1Press += joinOffset;
|
||||
HasKeypadAccessoryButton2 += joinOffset;
|
||||
KeypadAccessoryButton2Press += joinOffset;
|
||||
|
||||
Name += joinOffset;
|
||||
KeypadAccessoryButton1Label += joinOffset;
|
||||
KeypadAccessoryButton2Label += joinOffset;
|
||||
|
||||
LoadPresets += joinOffset;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Bridges
|
||||
{
|
||||
@@ -14,11 +9,21 @@ namespace PepperDash.Essentials.Bridges
|
||||
/// </summary>
|
||||
public uint ProgramStartJoin { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Offset to indicate where the range of iterated Ethernet joins will start
|
||||
/// </summary>
|
||||
public uint EthernetStartJoin { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Offset between each program join set
|
||||
/// </summary>
|
||||
public uint ProgramOffsetJoin { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Offset between each Ethernet Interface join set
|
||||
/// </summary>
|
||||
public uint EthernetOffsetJoin { get; set; }
|
||||
|
||||
#region Digitals
|
||||
/// <summary>
|
||||
/// Range Sets and reports whether the corresponding program slot is started
|
||||
@@ -87,6 +92,68 @@ namespace PepperDash.Essentials.Bridges
|
||||
/// Serialized JSON output that aggregates the program info of the corresponding program
|
||||
/// </summary>
|
||||
public uint AggregatedProgramInfo { get; set; }
|
||||
/// <summary>
|
||||
/// Reports the controller serial number
|
||||
/// </summary>
|
||||
public uint SerialNumber { get; set; }
|
||||
/// <summary>
|
||||
/// Reports the controller model
|
||||
/// </summary>
|
||||
public uint Model { get; set; }
|
||||
/// <summary>
|
||||
/// Reports the Host name set on the corresponding interface
|
||||
/// </summary>
|
||||
public uint HostName { get; set; }
|
||||
/// <summary>
|
||||
/// Reports the Current IP address set on the corresponding interface. If DHCP is enabled, this will be the DHCP assigned address.
|
||||
/// </summary>
|
||||
public uint CurrentIpAddress { get; set; }
|
||||
/// <summary>
|
||||
/// Reporst the Current Default Gateway set on the corresponding interface. If DHCP is enabled, this will be the DHCP assigned gateway
|
||||
/// </summary>
|
||||
public uint CurrentDefaultGateway { get; set; }
|
||||
/// <summary>
|
||||
/// Reports the Current Subnet Mask set on the corresponding interface. If DHCP is enabled, this will be the DHCP assigned subnet mask
|
||||
/// </summary>
|
||||
public uint CurrentSubnetMask { get; set; }
|
||||
/// <summary>
|
||||
/// Reports the Static IP address set on the corresponding interface. If DHCP is disabled, this will match the Current IP address
|
||||
/// </summary>
|
||||
public uint StaticIpAddress { get; set; }
|
||||
/// <summary>
|
||||
/// Reporst the Static Default Gateway set on the corresponding interface. If DHCP is disabled, this will match the Current gateway
|
||||
/// </summary>
|
||||
public uint StaticDefaultGateway { get; set; }
|
||||
/// <summary>
|
||||
/// Reports the Current Subnet Mask set on the corresponding interface. If DHCP is enabled, this will be the DHCP assigned subnet mask
|
||||
/// </summary>
|
||||
public uint StaticSubnetMask { get; set; }
|
||||
/// <summary>
|
||||
/// Reports the current DomainFeedback on the corresponding interface
|
||||
/// </summary>
|
||||
public uint Domain { get; set; }
|
||||
/// <summary>
|
||||
/// Reports the current DNS Servers on the corresponding interface
|
||||
/// </summary>
|
||||
public uint DnsServer { get; set; }
|
||||
/// <summary>
|
||||
/// Reports the MAC Address of the corresponding interface
|
||||
/// </summary>
|
||||
public uint MacAddress { get; set; }
|
||||
/// <summary>
|
||||
/// Reports the DHCP Status of the corresponding interface
|
||||
/// </summary>
|
||||
public uint DhcpStatus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reports the current uptime. Updated in 5 minute intervals.
|
||||
/// </summary>
|
||||
public uint Uptime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reports the date of the last boot
|
||||
/// </summary>
|
||||
public uint LastBoot { get; set; }
|
||||
#endregion
|
||||
|
||||
public SystemMonitorJoinMap()
|
||||
@@ -98,6 +165,10 @@ namespace PepperDash.Essentials.Bridges
|
||||
SnmpAppVersion = 3;
|
||||
BACnetAppVersion = 4;
|
||||
ControllerVersion = 5;
|
||||
SerialNumber = 6;
|
||||
Model = 7;
|
||||
Uptime = 8;
|
||||
LastBoot = 9;
|
||||
|
||||
|
||||
ProgramStartJoin = 10;
|
||||
@@ -115,6 +186,23 @@ namespace PepperDash.Essentials.Bridges
|
||||
ProgramCrestronDatabaseVersion = 3;
|
||||
ProgramEnvironmentVersion = 4;
|
||||
AggregatedProgramInfo = 5;
|
||||
|
||||
EthernetStartJoin = 75;
|
||||
|
||||
EthernetOffsetJoin = 15;
|
||||
|
||||
// Offset in groups of 15
|
||||
HostName = 1;
|
||||
CurrentIpAddress = 2;
|
||||
CurrentSubnetMask = 3;
|
||||
CurrentDefaultGateway = 4;
|
||||
StaticIpAddress = 5;
|
||||
StaticSubnetMask = 6;
|
||||
StaticDefaultGateway = 7;
|
||||
Domain = 8;
|
||||
DnsServer = 9;
|
||||
MacAddress = 10;
|
||||
DhcpStatus = 11;
|
||||
}
|
||||
|
||||
public override void OffsetJoinNumbers(uint joinStart)
|
||||
@@ -131,6 +219,7 @@ namespace PepperDash.Essentials.Bridges
|
||||
|
||||
// Sets the initial join value where the iterated program joins will begin
|
||||
ProgramStartJoin = ProgramStartJoin + joinOffset;
|
||||
EthernetStartJoin = EthernetStartJoin + joinOffset;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Crestron.SimplSharpPro.Diagnostics;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
@@ -17,7 +12,7 @@ namespace PepperDash.Essentials.Bridges
|
||||
{
|
||||
public static void LinkToApi(this SystemMonitorController systemMonitorController, BasicTriList trilist, uint joinStart, string joinMapKey)
|
||||
{
|
||||
SystemMonitorJoinMap joinMap = new SystemMonitorJoinMap();
|
||||
var joinMap = new SystemMonitorJoinMap();
|
||||
|
||||
var joinMapSerialized = JoinMapHelper.GetJoinMapForDevice(joinMapKey);
|
||||
|
||||
@@ -30,36 +25,81 @@ namespace PepperDash.Essentials.Bridges
|
||||
Debug.Console(2, systemMonitorController, "Linking API starting at join: {0}", joinStart);
|
||||
|
||||
systemMonitorController.TimeZoneFeedback.LinkInputSig(trilist.UShortInput[joinMap.TimeZone]);
|
||||
//trilist.SetUShortSigAction(joinMap.TimeZone, new Action<ushort>(u => systemMonitorController.SetTimeZone(u)));
|
||||
systemMonitorController.TimeZoneTextFeedback.LinkInputSig(trilist.StringInput[joinMap.TimeZoneName]);
|
||||
|
||||
systemMonitorController.IOControllerVersionFeedback.LinkInputSig(trilist.StringInput[joinMap.IOControllerVersion]);
|
||||
systemMonitorController.IoControllerVersionFeedback.LinkInputSig(trilist.StringInput[joinMap.IOControllerVersion]);
|
||||
systemMonitorController.SnmpVersionFeedback.LinkInputSig(trilist.StringInput[joinMap.SnmpAppVersion]);
|
||||
systemMonitorController.BACnetAppVersionFeedback.LinkInputSig(trilist.StringInput[joinMap.BACnetAppVersion]);
|
||||
systemMonitorController.BaCnetAppVersionFeedback.LinkInputSig(trilist.StringInput[joinMap.BACnetAppVersion]);
|
||||
systemMonitorController.ControllerVersionFeedback.LinkInputSig(trilist.StringInput[joinMap.ControllerVersion]);
|
||||
systemMonitorController.SerialNumberFeedback.LinkInputSig(trilist.StringInput[joinMap.SerialNumber]);
|
||||
systemMonitorController.ModelFeedback.LinkInputSig(trilist.StringInput[joinMap.Model]);
|
||||
systemMonitorController.UptimeFeedback.LinkInputSig(trilist.StringInput[joinMap.Uptime]);
|
||||
systemMonitorController.LastStartFeedback.LinkInputSig(trilist.StringInput[joinMap.LastBoot]);
|
||||
|
||||
// iterate the program status feedback collection and map all the joins
|
||||
LinkProgramInfoJoins(systemMonitorController, trilist, joinMap);
|
||||
|
||||
LinkEthernetInfoJoins(systemMonitorController, trilist, joinMap);
|
||||
}
|
||||
|
||||
private static void LinkEthernetInfoJoins(SystemMonitorController systemMonitorController, BasicTriList trilist, SystemMonitorJoinMap joinMap)
|
||||
{
|
||||
var ethernetSlotJoinStart = joinMap.EthernetStartJoin;
|
||||
|
||||
foreach (var fb in systemMonitorController.EthernetStatusFeedbackCollection)
|
||||
{
|
||||
fb.Value.CurrentIpAddressFeedback.LinkInputSig(trilist.StringInput[ethernetSlotJoinStart + joinMap.CurrentIpAddress]);
|
||||
fb.Value.CurrentSubnetMaskFeedback.LinkInputSig(trilist.StringInput[ethernetSlotJoinStart + joinMap.CurrentSubnetMask]);
|
||||
fb.Value.CurrentDefaultGatewayFeedback.LinkInputSig(trilist.StringInput[ethernetSlotJoinStart + joinMap.CurrentDefaultGateway]);
|
||||
fb.Value.StaticIpAddressFeedback.LinkInputSig(trilist.StringInput[ethernetSlotJoinStart + joinMap.StaticIpAddress]);
|
||||
fb.Value.StaticSubnetMaskFeedback.LinkInputSig(trilist.StringInput[ethernetSlotJoinStart + joinMap.StaticSubnetMask]);
|
||||
fb.Value.StaticDefaultGatewayFeedback.LinkInputSig(trilist.StringInput[ethernetSlotJoinStart + joinMap.StaticDefaultGateway]);
|
||||
fb.Value.HostNameFeedback.LinkInputSig(trilist.StringInput[ethernetSlotJoinStart + joinMap.HostName]);
|
||||
fb.Value.MacAddressFeedback.LinkInputSig(trilist.StringInput[ethernetSlotJoinStart + joinMap.MacAddress]);
|
||||
fb.Value.DomainFeedback.LinkInputSig(trilist.StringInput[ethernetSlotJoinStart + joinMap.Domain]);
|
||||
fb.Value.DnsServerFeedback.LinkInputSig(trilist.StringInput[ethernetSlotJoinStart + joinMap.DnsServer]);
|
||||
fb.Value.DhcpStatusFeedback.LinkInputSig(trilist.StringInput[ethernetSlotJoinStart + joinMap.DhcpStatus]);
|
||||
|
||||
ethernetSlotJoinStart += joinMap.EthernetOffsetJoin;
|
||||
}
|
||||
}
|
||||
|
||||
private static void LinkProgramInfoJoins(SystemMonitorController systemMonitorController, BasicTriList trilist,
|
||||
SystemMonitorJoinMap joinMap)
|
||||
{
|
||||
var programSlotJoinStart = joinMap.ProgramStartJoin;
|
||||
|
||||
foreach (var p in systemMonitorController.ProgramStatusFeedbackCollection)
|
||||
{
|
||||
var programNumber = p.Value.Program.Number;
|
||||
|
||||
trilist.SetBoolSigAction(programSlotJoinStart + joinMap.ProgramStart, new Action<bool>
|
||||
(b => SystemMonitor.ProgramCollection[programNumber].OperatingState = eProgramOperatingState.Start));
|
||||
trilist.SetBoolSigAction(programSlotJoinStart + joinMap.ProgramStart,
|
||||
b => SystemMonitor.ProgramCollection[programNumber].OperatingState = eProgramOperatingState.Start);
|
||||
p.Value.ProgramStartedFeedback.LinkInputSig(trilist.BooleanInput[programSlotJoinStart + joinMap.ProgramStart]);
|
||||
|
||||
trilist.SetBoolSigAction(programSlotJoinStart + joinMap.ProgramStop, new Action<bool>
|
||||
(b => SystemMonitor.ProgramCollection[programNumber].OperatingState = eProgramOperatingState.Stop));
|
||||
trilist.SetBoolSigAction(programSlotJoinStart + joinMap.ProgramStop,
|
||||
b => SystemMonitor.ProgramCollection[programNumber].OperatingState = eProgramOperatingState.Stop);
|
||||
p.Value.ProgramStoppedFeedback.LinkInputSig(trilist.BooleanInput[programSlotJoinStart + joinMap.ProgramStop]);
|
||||
|
||||
trilist.SetBoolSigAction(programSlotJoinStart + joinMap.ProgramRegister, new Action<bool>
|
||||
(b => SystemMonitor.ProgramCollection[programNumber].RegistrationState = eProgramRegistrationState.Register));
|
||||
p.Value.ProgramRegisteredFeedback.LinkInputSig(trilist.BooleanInput[programSlotJoinStart + joinMap.ProgramRegister]);
|
||||
trilist.SetBoolSigAction(programSlotJoinStart + joinMap.ProgramRegister,
|
||||
b => SystemMonitor.ProgramCollection[programNumber].RegistrationState = eProgramRegistrationState.Register);
|
||||
p.Value.ProgramRegisteredFeedback.LinkInputSig(
|
||||
trilist.BooleanInput[programSlotJoinStart + joinMap.ProgramRegister]);
|
||||
|
||||
trilist.SetBoolSigAction(programSlotJoinStart + joinMap.ProgramUnregister, new Action<bool>
|
||||
(b => SystemMonitor.ProgramCollection[programNumber].RegistrationState = eProgramRegistrationState.Unregister));
|
||||
p.Value.ProgramUnregisteredFeedback.LinkInputSig(trilist.BooleanInput[programSlotJoinStart + joinMap.ProgramUnregister]);
|
||||
trilist.SetBoolSigAction(programSlotJoinStart + joinMap.ProgramUnregister,
|
||||
b => SystemMonitor.ProgramCollection[programNumber].RegistrationState = eProgramRegistrationState.Unregister);
|
||||
p.Value.ProgramUnregisteredFeedback.LinkInputSig(
|
||||
trilist.BooleanInput[programSlotJoinStart + joinMap.ProgramUnregister]);
|
||||
|
||||
p.Value.ProgramNameFeedback.LinkInputSig(trilist.StringInput[programSlotJoinStart + joinMap.ProgramName]);
|
||||
p.Value.ProgramCompileTimeFeedback.LinkInputSig(
|
||||
trilist.StringInput[programSlotJoinStart + joinMap.ProgramCompiledTime]);
|
||||
p.Value.CrestronDataBaseVersionFeedback.LinkInputSig(
|
||||
trilist.StringInput[programSlotJoinStart + joinMap.ProgramCrestronDatabaseVersion]);
|
||||
p.Value.EnvironmentVersionFeedback.LinkInputSig(
|
||||
trilist.StringInput[programSlotJoinStart + joinMap.ProgramEnvironmentVersion]);
|
||||
p.Value.AggregatedProgramInfoFeedback.LinkInputSig(
|
||||
trilist.StringInput[programSlotJoinStart + joinMap.AggregatedProgramInfo]);
|
||||
|
||||
programSlotJoinStart = programSlotJoinStart + joinMap.ProgramOffsetJoin;
|
||||
}
|
||||
|
||||
@@ -96,10 +96,12 @@ namespace PepperDash.Essentials
|
||||
string directoryPrefix;
|
||||
|
||||
directoryPrefix = Crestron.SimplSharp.CrestronIO.Directory.GetApplicationRootDirectory();
|
||||
|
||||
var version = Crestron.SimplSharp.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
|
||||
|
||||
Global.SetAssemblyVersion(string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.Build));
|
||||
var fullVersion = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false);
|
||||
|
||||
AssemblyInformationalVersionAttribute fullVersionAtt = fullVersion[0] as AssemblyInformationalVersionAttribute;
|
||||
|
||||
Global.SetAssemblyVersion(fullVersionAtt.InformationalVersion);
|
||||
|
||||
if (CrestronEnvironment.DevicePlatform != eDevicePlatform.Server) // Handles 3-series running Windows CE OS
|
||||
{
|
||||
@@ -426,11 +428,30 @@ namespace PepperDash.Essentials
|
||||
|
||||
DeviceManager.AddDevice(dmpsRoutingController);
|
||||
}
|
||||
else if (this.ControllerPrompt.IndexOf("mpc3", StringComparison.OrdinalIgnoreCase) > -1)
|
||||
{
|
||||
Debug.Console(2, "MPC3 processor type detected. Adding Mpc3TouchpanelController.");
|
||||
|
||||
var butToken = devConf.Properties["buttons"];
|
||||
if (butToken != null)
|
||||
{
|
||||
var buttons = butToken.ToObject<Dictionary<string, Essentials.Core.Touchpanels.KeypadButton>>();
|
||||
var tpController = new Essentials.Core.Touchpanels.Mpc3TouchpanelController(devConf.Key, devConf.Name, Global.ControlSystem, buttons);
|
||||
DeviceManager.AddDevice(tpController);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(0, Debug.ErrorLogLevel.Error, "Error: Unable to deserialize buttons collection for device: {0}", devConf.Key);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(2, "************Processor is not DMPS type***************");
|
||||
}
|
||||
|
||||
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
<Compile Include="Bridges\CameraControllerBridge.cs" />
|
||||
<Compile Include="Bridges\AirMediaControllerBridge.cs" />
|
||||
<Compile Include="Bridges\DmBladeChassisControllerBridge.cs" />
|
||||
<Compile Include="Bridges\IRSetTopBoxBaseBridge.cs" />
|
||||
<Compile Include="Bridges\JoinMaps\C2nRthsControllerJoinMap.cs" />
|
||||
<Compile Include="Bridges\JoinMaps\DmBladeChassisControllerJoinMap.cs" />
|
||||
<Compile Include="Bridges\DmpsAudioOutputControllerBridge.cs" />
|
||||
@@ -155,6 +156,7 @@
|
||||
<Compile Include="Bridges\JoinMaps\IBasicCommunicationJoinMap.cs" />
|
||||
<Compile Include="Bridges\JoinMaps\IDigitalInputJoinMap.cs" />
|
||||
<Compile Include="Bridges\JoinMaps\GlsOccupancySensorBaseJoinMap.cs" />
|
||||
<Compile Include="Bridges\JoinMaps\SetTopBoxControllerJoinMap.cs" />
|
||||
<Compile Include="Bridges\JoinMaps\StatusSignControllerJoinMap.cs" />
|
||||
<Compile Include="Bridges\JoinMaps\SystemMonitorJoinMap.cs" />
|
||||
<Compile Include="Bridges\StatusSignControllerBridge.cs" />
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
using System.Reflection;
|
||||
using Crestron.SimplSharp.Reflection;
|
||||
|
||||
[assembly: AssemblyTitle("PepperDashEssentials")]
|
||||
[assembly: AssemblyCompany("PepperDash Technology Corp")]
|
||||
[assembly: AssemblyProduct("PepperDashEssentials")]
|
||||
[assembly: AssemblyCopyright("Copyright © PepperDash Technology Corp 2018")]
|
||||
[assembly: AssemblyVersion("1.4.0.*")]
|
||||
|
||||
[assembly: System.Reflection.AssemblyTitle("PepperDashEssentials")]
|
||||
[assembly: System.Reflection.AssemblyCompany("PepperDash Technology Corp")]
|
||||
[assembly: System.Reflection.AssemblyProduct("PepperDashEssentials")]
|
||||
[assembly: System.Reflection.AssemblyCopyright("Copyright © PepperDash Technology Corp 2020")]
|
||||
[assembly: System.Reflection.AssemblyVersion("0.0.0.*")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersion("0.0.0-buildType-buildNumber")]
|
||||
[assembly: Crestron.SimplSharp.Reflection.AssemblyInformationalVersion("0.0.0-buildType-buildNumber")]
|
||||
|
||||
@@ -1,13 +1,23 @@
|
||||
function Update-SourceVersion
|
||||
{
|
||||
Param ([string]$Version)
|
||||
$NewVersion = ‘AssemblyVersion("‘ + $Version + ‘.*")’;
|
||||
$fullVersion = $Version
|
||||
$baseVersion = [regex]::Match($Version, "(\d+.\d+.\d+).*").captures.groups[1].value
|
||||
$NewAssemblyVersion = ‘AssemblyVersion("‘ + $baseVersion + ‘.*")’
|
||||
echo "AssemblyVersion = $NewAssemblyVersion"
|
||||
$NewAssemblyInformationalVersion = ‘AssemblyInformationalVersion("‘ + $Version + ‘")’
|
||||
echo "AssemblyInformationalVersion = $NewAssemblyInformationalVersion"
|
||||
|
||||
foreach ($o in $input)
|
||||
{
|
||||
{
|
||||
Write-output $o.FullName
|
||||
$TmpFile = $o.FullName + “.tmp”
|
||||
get-content $o.FullName |
|
||||
%{$_ -replace ‘AssemblyVersion\("(\d+\.\d+\.\d+)\.\*"\)’, $NewVersion } > $TmpFile
|
||||
%{
|
||||
$_ -replace ‘AssemblyVersion\(".*"\)’, $NewAssemblyVersion} |
|
||||
%{
|
||||
$_ -replace ‘AssemblyInformationalVersion\(".*"\)’, $NewAssemblyInformationalVersion
|
||||
} > $TmpFile
|
||||
move-item $TmpFile $o.FullName -force
|
||||
}
|
||||
}
|
||||
@@ -21,9 +31,10 @@ function Update-AllAssemblyInfoFiles ( $version )
|
||||
}
|
||||
|
||||
# validate arguments
|
||||
$r= [System.Text.RegularExpressions.Regex]::Match($args[0], "^\d+\.\d+\.\d+$");
|
||||
$r= [System.Text.RegularExpressions.Regex]::Match($args[0], "\d+\.\d+\.\d+.*");
|
||||
if ($r.Success)
|
||||
{
|
||||
echo "Updating Assembly Version to $args ...";
|
||||
Update-AllAssemblyInfoFiles $args[0];
|
||||
}
|
||||
else
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,16 +0,0 @@
|
||||
<ProgramInfo>
|
||||
<RequiredInfo>
|
||||
<FriendlyName>PepperDashEssentials</FriendlyName>
|
||||
<SystemName>PepperDashEssentialsBase</SystemName>
|
||||
<EntryPoint>PepperDashEssentialsBase</EntryPoint>
|
||||
<MinFirmwareVersion>1.009.0029</MinFirmwareVersion>
|
||||
<ProgramTool>SIMPL# Plugin</ProgramTool>
|
||||
<DesignToolId>5</DesignToolId>
|
||||
<ProgramToolId>5</ProgramToolId>
|
||||
<ArchiveName />
|
||||
</RequiredInfo>
|
||||
<OptionalInfo>
|
||||
<CompiledOn>1/8/2016 3:03:22 PM</CompiledOn>
|
||||
<CompilerRev>1.0.0.27100</CompilerRev>
|
||||
</OptionalInfo>
|
||||
</ProgramInfo>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,18 +0,0 @@
|
||||
MainAssembly=PepperDashEssentialsBase.dll:5d68a993ab03b4b88d0f95478188a439
|
||||
MainAssemblyMinFirmwareVersion=1.009.0029
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.DeviceSupport.dll:caae4b4259aaf619059f0ae34473bfd2
|
||||
DependencyPath=PepperDashEssentialsBase.cplz:Crestron.SimplSharpPro.DeviceSupport.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.DeviceSupport.dll:caae4b4259aaf619059f0ae34473bfd2
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.DM.dll:bdf5acfa80cc3bb87f21deb891128b1d
|
||||
DependencyPath=PepperDashEssentialsBase.cplz:Crestron.SimplSharpPro.DM.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.DM.dll:bdf5acfa80cc3bb87f21deb891128b1d
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.EthernetCommunications.dll:36e663497195140ee6f1b4ebc53f5ea7
|
||||
DependencyPath=PepperDashEssentialsBase.cplz:Crestron.SimplSharpPro.EthernetCommunications.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.EthernetCommunications.dll:36e663497195140ee6f1b4ebc53f5ea7
|
||||
ü
|
||||
DependencySource=Crestron.SimplSharpPro.UI.dll:089312a0cb0b4537072d4eb234e71e0e
|
||||
DependencyPath=PepperDashEssentialsBase.cplz:Crestron.SimplSharpPro.UI.dll
|
||||
DependencyMainAssembly=Crestron.SimplSharpPro.UI.dll:089312a0cb0b4537072d4eb234e71e0e
|
||||
Binary file not shown.
@@ -40,4 +40,5 @@ devjson:1 {"deviceKey":"commBridge", "methodName":"ExecuteJoinAction", "params":
|
||||
|
||||
devjson:2 {"deviceKey":"display01Comm-com", "methodName":"SendText", "params": [ "I'M GETTING TIRED OF THIS" ]}
|
||||
|
||||
devjson:10 {"deviceKey":"dmLink-ssh", "methodName":"Connect", "params": []}
|
||||
devjson:10 {"deviceKey":"dmLink-ssh", "methodName":"Connect", "params": []}
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using PepperDash.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core
|
||||
{
|
||||
public static class DeviceFeedbackExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Attempts to get and return a feedback property from a device by name.
|
||||
/// If unsuccessful, returns null.
|
||||
/// </summary>
|
||||
/// <param name="device"></param>
|
||||
/// <param name="propertyName"></param>
|
||||
/// <returns></returns>
|
||||
public static Feedback GetFeedbackProperty(this Device device, string propertyName)
|
||||
{
|
||||
var feedback = DeviceJsonApi.GetPropertyByName(device.Key, propertyName) as Feedback;
|
||||
|
||||
if (feedback != null)
|
||||
{
|
||||
return feedback;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -59,7 +59,7 @@ namespace PepperDash.Essentials.Core
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// Gets the properties on a device
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
@@ -75,8 +75,34 @@ namespace PepperDash.Essentials.Core
|
||||
return JsonConvert.SerializeObject(props, Formatting.Indented);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a property from a device path by name
|
||||
/// </summary>
|
||||
/// <param name="deviceObjectPath"></param>
|
||||
/// <param name="propertyName"></param>
|
||||
/// <returns></returns>
|
||||
public static object GetPropertyByName(string deviceObjectPath, string propertyName)
|
||||
{
|
||||
var obj = FindObjectOnPath(deviceObjectPath);
|
||||
if(obj == null)
|
||||
return "{ \"error\":\"No Device\"}";
|
||||
|
||||
CType t = obj.GetType();
|
||||
|
||||
var prop = t.GetProperty(propertyName);
|
||||
if (prop != null)
|
||||
{
|
||||
return prop;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(1, "Unable to find Property: {0} on Device with path: {1}", propertyName, deviceObjectPath);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// Gets the methods on a device
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
|
||||
@@ -9,6 +9,7 @@ using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
using PepperDash.Essentials.Core.CrestronIO;
|
||||
using PepperDash.Essentials.Core.Touchpanels;
|
||||
|
||||
namespace PepperDash.Essentials.Core
|
||||
{
|
||||
@@ -47,13 +48,21 @@ namespace PepperDash.Essentials.Core
|
||||
|
||||
var typeName = dc.Type.ToLower();
|
||||
|
||||
// Check "core" types first
|
||||
|
||||
// Check for types that have been added by plugin dlls.
|
||||
if (FactoryMethods.ContainsKey(typeName))
|
||||
{
|
||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Loading '{0}' from plugin", dc.Type);
|
||||
return FactoryMethods[typeName](dc);
|
||||
}
|
||||
|
||||
// Check "core" types
|
||||
if (typeName == "genericcomm")
|
||||
{
|
||||
Debug.Console(1, "Factory Attempting to create new Generic Comm Device");
|
||||
return new GenericComm(dc);
|
||||
}
|
||||
else if (typeName == "ceniodigin104")
|
||||
if (typeName == "ceniodigin104")
|
||||
{
|
||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
||||
var ipid = control.IpIdInt;
|
||||
@@ -75,13 +84,6 @@ namespace PepperDash.Essentials.Core
|
||||
return new C2nRthsController(key, name, new C2nRths(cresnetId, Global.ControlSystem));
|
||||
}
|
||||
|
||||
// then check for types that have been added by plugin dlls.
|
||||
if (FactoryMethods.ContainsKey(typeName))
|
||||
{
|
||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Loading '{0}' from plugin", dc.Type);
|
||||
return FactoryMethods[typeName](dc);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,18 +32,36 @@ namespace PepperDash.Essentials.Core
|
||||
List<BoolInputSig> LinkedInputSigs = new List<BoolInputSig>();
|
||||
List<BoolInputSig> LinkedComplementInputSigs = new List<BoolInputSig>();
|
||||
|
||||
List<Crestron.SimplSharpPro.DeviceSupport.Feedback> LinkedCrestronFeedbacks = new List<Crestron.SimplSharpPro.DeviceSupport.Feedback>();
|
||||
|
||||
/// <summary>
|
||||
/// Creates the feedback with the Func as described.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// While the linked sig value will be updated with the current value stored when it is linked to a EISC Bridge,
|
||||
/// it will NOT reflect an actual value from a device until <seealso cref="FireUpdate"/> has been called
|
||||
/// </remarks>
|
||||
/// <param name="valueFunc">Delegate to invoke when this feedback needs to be updated</param>
|
||||
public BoolFeedback(Func<bool> valueFunc)
|
||||
: this(null, valueFunc)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the feedback with the Func as described.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// While the linked sig value will be updated with the current value stored when it is linked to a EISC Bridge,
|
||||
/// it will NOT reflect an actual value from a device until <seealso cref="FireUpdate"/> has been called
|
||||
/// </remarks>
|
||||
/// <param name="key">Key to find this Feedback</param>
|
||||
/// <param name="valueFunc">Delegate to invoke when this feedback needs to be updated</param>
|
||||
public BoolFeedback(string key, Func<bool> valueFunc)
|
||||
: base(key)
|
||||
{
|
||||
ValueFunc = valueFunc;
|
||||
}
|
||||
|
||||
|
||||
public override void FireUpdate()
|
||||
{
|
||||
bool newValue = InTestMode ? TestValue : ValueFunc.Invoke();
|
||||
@@ -56,28 +74,63 @@ namespace PepperDash.Essentials.Core
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Links an input sig
|
||||
/// </summary>
|
||||
/// <param name="sig"></param>
|
||||
public void LinkInputSig(BoolInputSig sig)
|
||||
{
|
||||
LinkedInputSigs.Add(sig);
|
||||
UpdateSig(sig);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Unlinks an inputs sig
|
||||
/// </summary>
|
||||
/// <param name="sig"></param>
|
||||
public void UnlinkInputSig(BoolInputSig sig)
|
||||
{
|
||||
LinkedInputSigs.Remove(sig);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Links an input sig to the complement value
|
||||
/// </summary>
|
||||
/// <param name="sig"></param>
|
||||
public void LinkComplementInputSig(BoolInputSig sig)
|
||||
{
|
||||
LinkedComplementInputSigs.Add(sig);
|
||||
UpdateComplementSig(sig);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Unlinks an input sig to the complement value
|
||||
/// </summary>
|
||||
/// <param name="sig"></param>
|
||||
public void UnlinkComplementInputSig(BoolInputSig sig)
|
||||
{
|
||||
LinkedComplementInputSigs.Remove(sig);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Links a Crestron Feedback object
|
||||
/// </summary>
|
||||
/// <param name="feedback"></param>
|
||||
public void LinkCrestronFeedback(Crestron.SimplSharpPro.DeviceSupport.Feedback feedback)
|
||||
{
|
||||
LinkedCrestronFeedbacks.Add(feedback);
|
||||
UpdateCrestronFeedback(feedback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="feedback"></param>
|
||||
public void UnlinkCrestronFeedback(Crestron.SimplSharpPro.DeviceSupport.Feedback feedback)
|
||||
{
|
||||
LinkedCrestronFeedbacks.Remove(feedback);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return (InTestMode ? "TEST -- " : "") + BoolValue.ToString();
|
||||
@@ -103,6 +156,11 @@ namespace PepperDash.Essentials.Core
|
||||
{
|
||||
sig.BoolValue = !_BoolValue;
|
||||
}
|
||||
|
||||
void UpdateCrestronFeedback(Crestron.SimplSharpPro.DeviceSupport.Feedback feedback)
|
||||
{
|
||||
feedback.State = _BoolValue;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -23,11 +23,28 @@ namespace PepperDash.Essentials.Core
|
||||
Func<int> ValueFunc;
|
||||
List<UShortInputSig> LinkedInputSigs = new List<UShortInputSig>();
|
||||
|
||||
/// <summary>
|
||||
/// Creates the feedback with the Func as described.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// While the linked sig value will be updated with the current value stored when it is linked to a EISC Bridge,
|
||||
/// it will NOT reflect an actual value from a device until <seealso cref="FireUpdate"/> has been called
|
||||
/// </remarks>
|
||||
/// <param name="valueFunc">Delegate to invoke when this feedback needs to be updated</param>
|
||||
public IntFeedback(Func<int> valueFunc)
|
||||
: this(null, valueFunc)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the feedback with the Func as described.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// While the linked sig value will be updated with the current value stored when it is linked to a EISC Bridge,
|
||||
/// it will NOT reflect an actual value from a device until <seealso cref="FireUpdate"/> has been called
|
||||
/// </remarks>
|
||||
/// <param name="key">Key to find this Feedback</param>
|
||||
/// <param name="valueFunc">Delegate to invoke when this feedback needs to be updated</param>
|
||||
public IntFeedback(string key, Func<int> valueFunc)
|
||||
: base(key)
|
||||
{
|
||||
|
||||
@@ -7,6 +7,7 @@ using Crestron.SimplSharpPro;
|
||||
|
||||
namespace PepperDash.Essentials.Core
|
||||
{
|
||||
|
||||
public class StringFeedback : Feedback
|
||||
{
|
||||
public override string StringValue { get { return _StringValue; } } // ValueFunc.Invoke(); } }
|
||||
@@ -18,16 +19,33 @@ namespace PepperDash.Essentials.Core
|
||||
public string TestValue { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Evalutated on FireUpdate
|
||||
/// Evaluated on FireUpdate
|
||||
/// </summary>
|
||||
public Func<string> ValueFunc { get; private set; }
|
||||
List<StringInputSig> LinkedInputSigs = new List<StringInputSig>();
|
||||
|
||||
/// <summary>
|
||||
/// Creates the feedback with the Func as described.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// While the linked sig value will be updated with the current value stored when it is linked to a EISC Bridge,
|
||||
/// it will NOT reflect an actual value from a device until <seealso cref="FireUpdate"/> has been called
|
||||
/// </remarks>
|
||||
/// <param name="valueFunc">Delegate to invoke when this feedback needs to be updated</param>
|
||||
public StringFeedback(Func<string> valueFunc)
|
||||
: this(null, valueFunc)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the feedback with the Func as described.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// While the linked sig value will be updated with the current value stored when it is linked to a EISC Bridge,
|
||||
/// it will NOT reflect an actual value from a device until <seealso cref="FireUpdate"/> has been called
|
||||
/// </remarks>
|
||||
/// <param name="key">Key to find this Feedback</param>
|
||||
/// <param name="valueFunc">Delegate to invoke when this feedback needs to be updated</param>
|
||||
public StringFeedback(string key, Func<string> valueFunc)
|
||||
: base(key)
|
||||
{
|
||||
|
||||
@@ -439,7 +439,7 @@ namespace PepperDash.Essentials.Core.Fusion
|
||||
|
||||
void GetTouchpanelInfo()
|
||||
{
|
||||
// TODO Get IP and Project Name from TP
|
||||
// TODO: Get IP and Project Name from TP
|
||||
}
|
||||
|
||||
protected void FusionRoom_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args)
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro.Diagnostics;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
|
||||
@@ -19,18 +14,32 @@ namespace PepperDash.Essentials.Core.Monitoring
|
||||
/// </summary>
|
||||
public class SystemMonitorController : Device
|
||||
{
|
||||
private const long UptimePollTime = 300000;
|
||||
private CTimer _uptimePollTimer;
|
||||
|
||||
private string _uptime;
|
||||
private string _lastStart;
|
||||
|
||||
public event EventHandler<EventArgs> SystemMonitorPropertiesChanged;
|
||||
|
||||
public Dictionary<uint, ProgramStatusFeedbacks> ProgramStatusFeedbackCollection;
|
||||
public Dictionary<short, EthernetStatusFeedbacks> EthernetStatusFeedbackCollection;
|
||||
|
||||
public IntFeedback TimeZoneFeedback { get; set; }
|
||||
public StringFeedback TimeZoneTextFeedback { get; set; }
|
||||
public IntFeedback TimeZoneFeedback { get; protected set; }
|
||||
public StringFeedback TimeZoneTextFeedback { get; protected set; }
|
||||
|
||||
public StringFeedback IoControllerVersionFeedback { get; protected set; }
|
||||
public StringFeedback SnmpVersionFeedback { get; protected set; }
|
||||
public StringFeedback BaCnetAppVersionFeedback { get; protected set; }
|
||||
public StringFeedback ControllerVersionFeedback { get; protected set; }
|
||||
|
||||
//new feedbacks. Issue #50
|
||||
public StringFeedback SerialNumberFeedback { get; protected set; }
|
||||
public StringFeedback ModelFeedback { get; set; }
|
||||
|
||||
public StringFeedback UptimeFeedback { get; set; }
|
||||
public StringFeedback LastStartFeedback { get; set; }
|
||||
|
||||
public StringFeedback IOControllerVersionFeedback { get; set; }
|
||||
public StringFeedback SnmpVersionFeedback { get; set; }
|
||||
public StringFeedback BACnetAppVersionFeedback { get; set; }
|
||||
public StringFeedback ControllerVersionFeedback { get; set; }
|
||||
|
||||
public SystemMonitorController(string key)
|
||||
: base(key)
|
||||
{
|
||||
@@ -38,21 +47,18 @@ namespace PepperDash.Essentials.Core.Monitoring
|
||||
|
||||
SystemMonitor.ProgramInitialization.ProgramInitializationUnderUserControl = true;
|
||||
|
||||
//CrestronConsole.AddNewConsoleCommand(RefreshSystemMonitorData, "RefreshSystemMonitor", "Refreshes System Monitor Feedbacks", ConsoleAccessLevelEnum.AccessOperator);
|
||||
TimeZoneFeedback = new IntFeedback(() => SystemMonitor.TimeZoneInformation.TimeZoneNumber);
|
||||
TimeZoneTextFeedback = new StringFeedback(() => SystemMonitor.TimeZoneInformation.TimeZoneName);
|
||||
|
||||
TimeZoneFeedback = new IntFeedback(new Func<int>( () => SystemMonitor.TimeZoneInformation.TimeZoneNumber));
|
||||
TimeZoneTextFeedback = new StringFeedback(new Func<string>( () => SystemMonitor.TimeZoneInformation.TimeZoneName));
|
||||
IoControllerVersionFeedback = new StringFeedback(() => SystemMonitor.VersionInformation.IOPVersion);
|
||||
SnmpVersionFeedback = new StringFeedback(() => SystemMonitor.VersionInformation.SNMPVersion);
|
||||
BaCnetAppVersionFeedback = new StringFeedback(() => SystemMonitor.VersionInformation.BACNetVersion);
|
||||
ControllerVersionFeedback = new StringFeedback(() => SystemMonitor.VersionInformation.ControlSystemVersion);
|
||||
|
||||
IOControllerVersionFeedback = new StringFeedback(new Func<string>( () => SystemMonitor.VersionInformation.IOPVersion));
|
||||
SnmpVersionFeedback = new StringFeedback(new Func<string>( () => SystemMonitor.VersionInformation.SNMPVersion));
|
||||
BACnetAppVersionFeedback = new StringFeedback(new Func<string>( () => SystemMonitor.VersionInformation.BACNetVersion));
|
||||
ControllerVersionFeedback = new StringFeedback(new Func<string>( () => SystemMonitor.VersionInformation.ControlSystemVersion));
|
||||
|
||||
//var status = string.Format("System Monitor Status: \r TimeZone: {0}\rTimeZoneText: {1}\rIOControllerVersion: {2}\rSnmpAppVersionFeedback: {3}\rBACnetAppVersionFeedback: {4}\rControllerVersionFeedback: {5}",
|
||||
// SystemMonitor.TimeZoneInformation.TimeZoneNumber, SystemMonitor.TimeZoneInformation.TimeZoneName, SystemMonitor.VersionInformation.IOPVersion, SystemMonitor.VersionInformation.SNMPVersion,
|
||||
// SystemMonitor.VersionInformation.BACNetVersion, SystemMonitor.VersionInformation.ControlSystemVersion);
|
||||
|
||||
//Debug.Console(1, this, status);
|
||||
SerialNumberFeedback = new StringFeedback(() => CrestronEnvironment.SystemInfo.SerialNumber);
|
||||
ModelFeedback = new StringFeedback(() => InitialParametersClass.ControllerPromptName);
|
||||
UptimeFeedback = new StringFeedback(() => _uptime);
|
||||
LastStartFeedback = new StringFeedback(()=> _lastStart);
|
||||
|
||||
ProgramStatusFeedbackCollection = new Dictionary<uint, ProgramStatusFeedbacks>();
|
||||
|
||||
@@ -62,43 +68,132 @@ namespace PepperDash.Essentials.Core.Monitoring
|
||||
ProgramStatusFeedbackCollection.Add(prog.Number, program);
|
||||
}
|
||||
|
||||
SystemMonitor.ProgramChange += new ProgramStateChangeEventHandler(SystemMonitor_ProgramChange);
|
||||
SystemMonitor.TimeZoneInformation.TimeZoneChange += new TimeZoneChangeEventHandler(TimeZoneInformation_TimeZoneChange);
|
||||
CreateEthernetStatusFeedbacks();
|
||||
UpdateEthernetStatusFeeedbacks();
|
||||
|
||||
_uptimePollTimer = new CTimer(PollUptime,null,0, UptimePollTime);
|
||||
|
||||
SystemMonitor.ProgramChange += SystemMonitor_ProgramChange;
|
||||
SystemMonitor.TimeZoneInformation.TimeZoneChange += TimeZoneInformation_TimeZoneChange;
|
||||
CrestronEnvironment.EthernetEventHandler += CrestronEnvironmentOnEthernetEventHandler;
|
||||
CrestronEnvironment.ProgramStatusEventHandler += CrestronEnvironmentOnProgramStatusEventHandler;
|
||||
}
|
||||
|
||||
private void CrestronEnvironmentOnProgramStatusEventHandler(eProgramStatusEventType programEventType)
|
||||
{
|
||||
if (programEventType != eProgramStatusEventType.Stopping) return;
|
||||
|
||||
_uptimePollTimer.Stop();
|
||||
_uptimePollTimer.Dispose();
|
||||
_uptimePollTimer = null;
|
||||
}
|
||||
|
||||
private void PollUptime(object obj)
|
||||
{
|
||||
var consoleResponse = string.Empty;
|
||||
|
||||
CrestronConsole.SendControlSystemCommand("uptime", ref consoleResponse);
|
||||
|
||||
ParseUptime(consoleResponse);
|
||||
|
||||
UptimeFeedback.FireUpdate();
|
||||
LastStartFeedback.FireUpdate();
|
||||
}
|
||||
|
||||
private void ParseUptime(string response)
|
||||
{
|
||||
var splitString = response.Trim().Split('\r', '\n');
|
||||
|
||||
var lastStartRaw = splitString[2];
|
||||
var lastStartIndex = lastStartRaw.IndexOf(':');
|
||||
|
||||
_lastStart = lastStartRaw.Substring(lastStartIndex + 1).Trim();
|
||||
|
||||
var uptimeRaw = splitString[0];
|
||||
|
||||
var forIndex = uptimeRaw.IndexOf("for", StringComparison.Ordinal);
|
||||
|
||||
//4 => "for " to get what's on the right
|
||||
_uptime = uptimeRaw.Substring(forIndex + 4);
|
||||
}
|
||||
|
||||
private void CrestronEnvironmentOnEthernetEventHandler(EthernetEventArgs ethernetEventArgs)
|
||||
{
|
||||
if (ethernetEventArgs.EthernetEventType != eEthernetEventType.LinkUp) return;
|
||||
|
||||
foreach (var fb in EthernetStatusFeedbackCollection)
|
||||
{
|
||||
fb.Value.UpdateEthernetStatus();
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateEthernetStatusFeedbacks()
|
||||
{
|
||||
EthernetStatusFeedbackCollection = new Dictionary<short, EthernetStatusFeedbacks>();
|
||||
|
||||
Debug.Console(2, "Creating {0} EthernetStatusFeedbacks", InitialParametersClass.NumberOfEthernetInterfaces);
|
||||
|
||||
for (short i = 0; i < InitialParametersClass.NumberOfEthernetInterfaces; i++)
|
||||
{
|
||||
Debug.Console(2, "Creating EthernetStatusFeedback for Interface {0}", i);
|
||||
var ethernetInterface = new EthernetStatusFeedbacks(i);
|
||||
EthernetStatusFeedbackCollection.Add(i, ethernetInterface);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateEthernetStatusFeeedbacks()
|
||||
{
|
||||
foreach (var iface in EthernetStatusFeedbackCollection)
|
||||
{
|
||||
iface.Value.CurrentIpAddressFeedback.FireUpdate();
|
||||
iface.Value.CurrentSubnetMaskFeedback.FireUpdate();
|
||||
iface.Value.CurrentDefaultGatewayFeedback.FireUpdate();
|
||||
iface.Value.StaticIpAddressFeedback.FireUpdate();
|
||||
iface.Value.StaticSubnetMaskFeedback.FireUpdate();
|
||||
iface.Value.StaticDefaultGatewayFeedback.FireUpdate();
|
||||
iface.Value.HostNameFeedback.FireUpdate();
|
||||
iface.Value.DnsServerFeedback.FireUpdate();
|
||||
iface.Value.DomainFeedback.FireUpdate();
|
||||
iface.Value.DhcpStatusFeedback.FireUpdate();
|
||||
iface.Value.MacAddressFeedback.FireUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets data in separate thread
|
||||
/// </summary>
|
||||
/// <param name="command"></param>
|
||||
void RefreshSystemMonitorData(string command)
|
||||
private void RefreshSystemMonitorData()
|
||||
{
|
||||
// this takes a while, launch a new thread
|
||||
CrestronInvoke.BeginInvoke((o) =>
|
||||
{
|
||||
TimeZoneFeedback.FireUpdate();
|
||||
TimeZoneTextFeedback.FireUpdate();
|
||||
IOControllerVersionFeedback.FireUpdate();
|
||||
SnmpVersionFeedback.FireUpdate();
|
||||
BACnetAppVersionFeedback.FireUpdate();
|
||||
ControllerVersionFeedback.FireUpdate();
|
||||
|
||||
OnSystemMonitorPropertiesChanged();
|
||||
}
|
||||
);
|
||||
CrestronInvoke.BeginInvoke(UpdateFeedback);
|
||||
}
|
||||
|
||||
void OnSystemMonitorPropertiesChanged()
|
||||
private void UpdateFeedback(object o)
|
||||
{
|
||||
TimeZoneFeedback.FireUpdate();
|
||||
TimeZoneTextFeedback.FireUpdate();
|
||||
IoControllerVersionFeedback.FireUpdate();
|
||||
SnmpVersionFeedback.FireUpdate();
|
||||
BaCnetAppVersionFeedback.FireUpdate();
|
||||
ControllerVersionFeedback.FireUpdate();
|
||||
SerialNumberFeedback.FireUpdate();
|
||||
ModelFeedback.FireUpdate();
|
||||
|
||||
OnSystemMonitorPropertiesChanged();
|
||||
}
|
||||
|
||||
private void OnSystemMonitorPropertiesChanged()
|
||||
{
|
||||
var handler = SystemMonitorPropertiesChanged;
|
||||
if (handler != null)
|
||||
{
|
||||
handler(this, new EventArgs());
|
||||
handler(this, new EventArgs());
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CustomActivate()
|
||||
{
|
||||
RefreshSystemMonitorData(null);
|
||||
RefreshSystemMonitorData();
|
||||
|
||||
return base.CustomActivate();
|
||||
}
|
||||
@@ -114,46 +209,41 @@ namespace PepperDash.Essentials.Core.Monitoring
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="args"></param>
|
||||
void SystemMonitor_ProgramChange(Program sender, ProgramEventArgs args)
|
||||
private void SystemMonitor_ProgramChange(Program sender, ProgramEventArgs args)
|
||||
{
|
||||
Debug.Console(2, this, "Program Change Detected for slot: {0}", sender.Number);
|
||||
Debug.Console(2, this, "Event Type: {0}", args.EventType);
|
||||
|
||||
var program = ProgramStatusFeedbackCollection[sender.Number];
|
||||
|
||||
if (args.EventType == eProgramChangeEventType.OperatingState)
|
||||
switch (args.EventType)
|
||||
{
|
||||
program.ProgramStartedFeedback.FireUpdate();
|
||||
program.ProgramStoppedFeedback.FireUpdate();
|
||||
|
||||
program.ProgramInfo.OperatingState = args.OperatingState;
|
||||
|
||||
//program.GetProgramInfo();
|
||||
|
||||
if (args.OperatingState == eProgramOperatingState.Start)
|
||||
program.GetProgramInfo();
|
||||
else
|
||||
{
|
||||
program.AggregatedProgramInfoFeedback.FireUpdate();
|
||||
program.OnProgramInfoChanged();
|
||||
}
|
||||
case eProgramChangeEventType.OperatingState:
|
||||
program.ProgramStartedFeedback.FireUpdate();
|
||||
program.ProgramStoppedFeedback.FireUpdate();
|
||||
program.ProgramInfo.OperatingState = args.OperatingState;
|
||||
if (args.OperatingState == eProgramOperatingState.Start)
|
||||
program.GetProgramInfo();
|
||||
else
|
||||
{
|
||||
program.AggregatedProgramInfoFeedback.FireUpdate();
|
||||
program.OnProgramInfoChanged();
|
||||
}
|
||||
break;
|
||||
case eProgramChangeEventType.RegistrationState:
|
||||
program.ProgramRegisteredFeedback.FireUpdate();
|
||||
program.ProgramUnregisteredFeedback.FireUpdate();
|
||||
program.ProgramInfo.RegistrationState = args.RegistrationState;
|
||||
program.GetProgramInfo();
|
||||
break;
|
||||
}
|
||||
else if (args.EventType == eProgramChangeEventType.RegistrationState)
|
||||
{
|
||||
program.ProgramRegisteredFeedback.FireUpdate();
|
||||
program.ProgramUnregisteredFeedback.FireUpdate();
|
||||
|
||||
program.ProgramInfo.RegistrationState = args.RegistrationState;
|
||||
|
||||
program.GetProgramInfo();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Responds to time zone changes and updates the appropriate feedbacks
|
||||
/// </summary>
|
||||
/// <param name="args"></param>
|
||||
void TimeZoneInformation_TimeZoneChange(TimeZoneEventArgs args)
|
||||
private void TimeZoneInformation_TimeZoneChange(TimeZoneEventArgs args)
|
||||
{
|
||||
Debug.Console(2, this, "Time Zone Change Detected.");
|
||||
TimeZoneFeedback.FireUpdate();
|
||||
@@ -162,6 +252,121 @@ namespace PepperDash.Essentials.Core.Monitoring
|
||||
OnSystemMonitorPropertiesChanged();
|
||||
}
|
||||
|
||||
public class EthernetStatusFeedbacks
|
||||
{
|
||||
public StringFeedback HostNameFeedback { get; protected set; }
|
||||
public StringFeedback DnsServerFeedback { get; protected set; }
|
||||
public StringFeedback DomainFeedback { get; protected set; }
|
||||
public StringFeedback MacAddressFeedback { get; protected set; }
|
||||
public StringFeedback DhcpStatusFeedback { get; protected set; }
|
||||
|
||||
public StringFeedback CurrentIpAddressFeedback { get; protected set; }
|
||||
public StringFeedback CurrentSubnetMaskFeedback { get; protected set; }
|
||||
public StringFeedback CurrentDefaultGatewayFeedback { get; protected set; }
|
||||
|
||||
public StringFeedback StaticIpAddressFeedback { get; protected set; }
|
||||
public StringFeedback StaticSubnetMaskFeedback { get; protected set; }
|
||||
public StringFeedback StaticDefaultGatewayFeedback { get; protected set; }
|
||||
|
||||
public EthernetStatusFeedbacks(short adapterIndex)
|
||||
{
|
||||
Debug.Console(2, "Ethernet Information for interface {0}", adapterIndex);
|
||||
Debug.Console(2, "Adapter Index: {1} Hostname: {0}", CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_HOSTNAME, adapterIndex), adapterIndex);
|
||||
Debug.Console(2, "Adapter Index: {1} Current IP Address: {0}", CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, adapterIndex), adapterIndex);
|
||||
Debug.Console(2, "Adapter Index: {1} Current Subnet Mask: {0}", CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, adapterIndex), adapterIndex);
|
||||
Debug.Console(2, "Adapter Index: {1} Current Router: {0}", CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_ROUTER, adapterIndex), adapterIndex);
|
||||
Debug.Console(2, "Adapter Index: {1} Static IP Address: {0}", CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_STATIC_IPADDRESS, adapterIndex), adapterIndex);
|
||||
Debug.Console(2, "Adapter Index: {1} Static Subnet Mask: {0}", CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_STATIC_IPMASK, adapterIndex), adapterIndex);
|
||||
Debug.Console(2, "Adapter Index: {1} Static Router: {0}", CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_STATIC_ROUTER, adapterIndex), adapterIndex);
|
||||
Debug.Console(2, "Adapter Index: {1} DNS Servers: {0}", CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_DNS_SERVER, adapterIndex), adapterIndex);
|
||||
Debug.Console(2, "Adapter Index: {1} DHCP State: {0}", CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_DHCP_STATE, adapterIndex), adapterIndex);
|
||||
Debug.Console(2, "Adapter Index: {1} Domain Name: {0}", CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_DOMAIN_NAME, adapterIndex), adapterIndex);
|
||||
Debug.Console(2, "Adapter Index: {1} MAC Address: {0}", CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_MAC_ADDRESS, adapterIndex), adapterIndex);
|
||||
HostNameFeedback =
|
||||
new StringFeedback(
|
||||
() =>
|
||||
CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_HOSTNAME, adapterIndex));
|
||||
|
||||
CurrentIpAddressFeedback =
|
||||
new StringFeedback(
|
||||
() =>
|
||||
CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, adapterIndex));
|
||||
CurrentDefaultGatewayFeedback =
|
||||
new StringFeedback(
|
||||
() =>
|
||||
CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_ROUTER, adapterIndex));
|
||||
CurrentSubnetMaskFeedback =
|
||||
new StringFeedback(
|
||||
() =>
|
||||
CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, adapterIndex));
|
||||
StaticIpAddressFeedback =
|
||||
new StringFeedback(
|
||||
() =>
|
||||
CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, adapterIndex));
|
||||
StaticDefaultGatewayFeedback =
|
||||
new StringFeedback(
|
||||
() =>
|
||||
CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_ROUTER, adapterIndex));
|
||||
StaticSubnetMaskFeedback =
|
||||
new StringFeedback(
|
||||
() =>
|
||||
CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, adapterIndex));
|
||||
DomainFeedback =
|
||||
new StringFeedback(
|
||||
() =>
|
||||
CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_DOMAIN_NAME, adapterIndex));
|
||||
DnsServerFeedback =
|
||||
new StringFeedback(
|
||||
() =>
|
||||
CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_DNS_SERVER, adapterIndex));
|
||||
MacAddressFeedback =
|
||||
new StringFeedback(
|
||||
() =>
|
||||
CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_MAC_ADDRESS, adapterIndex));
|
||||
|
||||
DhcpStatusFeedback = new StringFeedback(
|
||||
() =>
|
||||
CrestronEthernetHelper.GetEthernetParameter(
|
||||
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_DHCP_STATE, adapterIndex));
|
||||
}
|
||||
|
||||
public void UpdateEthernetStatus()
|
||||
{
|
||||
HostNameFeedback.FireUpdate();
|
||||
CurrentIpAddressFeedback.FireUpdate();
|
||||
CurrentSubnetMaskFeedback.FireUpdate();
|
||||
CurrentDefaultGatewayFeedback.FireUpdate();
|
||||
StaticIpAddressFeedback.FireUpdate();
|
||||
StaticSubnetMaskFeedback.FireUpdate();
|
||||
StaticDefaultGatewayFeedback.FireUpdate();
|
||||
DomainFeedback.FireUpdate();
|
||||
DnsServerFeedback.FireUpdate();
|
||||
MacAddressFeedback.FireUpdate();
|
||||
DhcpStatusFeedback.FireUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class ProgramStatusFeedbacks
|
||||
{
|
||||
@@ -192,17 +397,19 @@ namespace PepperDash.Essentials.Core.Monitoring
|
||||
ProgramInfo.OperatingState = Program.OperatingState;
|
||||
ProgramInfo.RegistrationState = Program.RegistrationState;
|
||||
|
||||
ProgramStartedFeedback = new BoolFeedback(new Func<bool>( () => Program.OperatingState == eProgramOperatingState.Start));
|
||||
ProgramStoppedFeedback = new BoolFeedback(new Func<bool>( () => Program.OperatingState == eProgramOperatingState.Stop));
|
||||
ProgramRegisteredFeedback = new BoolFeedback(new Func<bool>( () => Program.RegistrationState == eProgramRegistrationState.Register));
|
||||
ProgramUnregisteredFeedback = new BoolFeedback(new Func<bool>( () => Program.RegistrationState == eProgramRegistrationState.Unregister));
|
||||
ProgramStartedFeedback = new BoolFeedback(() => Program.OperatingState == eProgramOperatingState.Start);
|
||||
ProgramStoppedFeedback = new BoolFeedback(() => Program.OperatingState == eProgramOperatingState.Stop);
|
||||
ProgramRegisteredFeedback =
|
||||
new BoolFeedback(() => Program.RegistrationState == eProgramRegistrationState.Register);
|
||||
ProgramUnregisteredFeedback =
|
||||
new BoolFeedback(() => Program.RegistrationState == eProgramRegistrationState.Unregister);
|
||||
|
||||
ProgramNameFeedback = new StringFeedback(new Func<string>(() => ProgramInfo.ProgramFile));
|
||||
ProgramCompileTimeFeedback = new StringFeedback(new Func<string>(() => ProgramInfo.CompileTime));
|
||||
CrestronDataBaseVersionFeedback = new StringFeedback(new Func<string>(() => ProgramInfo.CrestronDB));
|
||||
EnvironmentVersionFeedback = new StringFeedback(new Func<string>(() => ProgramInfo.Environment));
|
||||
ProgramNameFeedback = new StringFeedback(() => ProgramInfo.ProgramFile);
|
||||
ProgramCompileTimeFeedback = new StringFeedback(() => ProgramInfo.CompileTime);
|
||||
CrestronDataBaseVersionFeedback = new StringFeedback(() => ProgramInfo.CrestronDb);
|
||||
EnvironmentVersionFeedback = new StringFeedback(() => ProgramInfo.Environment);
|
||||
|
||||
AggregatedProgramInfoFeedback = new StringFeedback(new Func<string>(() => JsonConvert.SerializeObject(ProgramInfo)));
|
||||
AggregatedProgramInfoFeedback = new StringFeedback(() => JsonConvert.SerializeObject(ProgramInfo));
|
||||
|
||||
GetProgramInfo();
|
||||
}
|
||||
@@ -212,74 +419,99 @@ namespace PepperDash.Essentials.Core.Monitoring
|
||||
/// </summary>
|
||||
public void GetProgramInfo()
|
||||
{
|
||||
CrestronInvoke.BeginInvoke((o) =>
|
||||
CrestronInvoke.BeginInvoke(GetProgramInfo);
|
||||
}
|
||||
|
||||
private void GetProgramInfo(object o)
|
||||
{
|
||||
Debug.Console(2, "Attempting to get program info for slot: {0}", Program.Number);
|
||||
|
||||
string response = null;
|
||||
|
||||
if (Program.RegistrationState == eProgramRegistrationState.Unregister || Program.OperatingState == eProgramOperatingState.Stop)
|
||||
{
|
||||
Debug.Console(2, "Attempting to get program info for slot: {0}", Program.Number);
|
||||
Debug.Console(2, "Program {0} not registered. Setting default values for program information.",
|
||||
Program.Number);
|
||||
|
||||
string response = null;
|
||||
|
||||
var success = CrestronConsole.SendControlSystemCommand(string.Format("progcomments:{0}", Program.Number), ref response);
|
||||
|
||||
if (success)
|
||||
ProgramInfo = new ProgramInfo(Program.Number)
|
||||
{
|
||||
//Debug.Console(2, "Progcomments Response: \r{0}", response);
|
||||
OperatingState = Program.OperatingState,
|
||||
RegistrationState = Program.RegistrationState
|
||||
};
|
||||
|
||||
if (!response.ToLower().Contains("bad or incomplete"))
|
||||
{
|
||||
// Shared properteis
|
||||
ProgramInfo.ProgramFile = ParseConsoleData(response, "Program File", ": ", "\n");
|
||||
ProgramInfo.CompilerRevision = ParseConsoleData(response, "Compiler Rev", ": ", "\n");
|
||||
ProgramInfo.CompileTime = ParseConsoleData(response, "Compiled On", ": ", "\n");
|
||||
ProgramInfo.Include4Dat = ParseConsoleData(response, "Include4.dat", ": ", "\n");
|
||||
return;
|
||||
}
|
||||
|
||||
var success = CrestronConsole.SendControlSystemCommand(
|
||||
string.Format("progcomments:{0}", Program.Number), ref response);
|
||||
|
||||
if (!success)
|
||||
{
|
||||
Debug.Console(2, "Progcomments Attempt Unsuccessful for slot: {0}", Program.Number);
|
||||
UpdateFeedbacks();
|
||||
return;
|
||||
}
|
||||
|
||||
if (ProgramInfo.ProgramFile.Contains(".dll"))
|
||||
{
|
||||
// SSP Program
|
||||
ProgramInfo.FriendlyName = ParseConsoleData(response, "Friendly Name", ": ", "\n");
|
||||
ProgramInfo.ApplicationName = ParseConsoleData(response, "Application Name", ": ", "\n");
|
||||
ProgramInfo.ProgramTool = ParseConsoleData(response, "Program Tool", ": ", "\n");
|
||||
ProgramInfo.MinFirmwareVersion = ParseConsoleData(response, "Min Firmware Version", ": ", "\n");
|
||||
ProgramInfo.PlugInVersion = ParseConsoleData(response, "PlugInVersion", ": ", "\n");
|
||||
}
|
||||
else if (ProgramInfo.ProgramFile.Contains(".smw"))
|
||||
{
|
||||
// SIMPL Windows Program
|
||||
ProgramInfo.FriendlyName = ParseConsoleData(response, "Friendly Name", ":", "\n");
|
||||
ProgramInfo.SystemName = ParseConsoleData(response, "System Name", ": ", "\n");
|
||||
ProgramInfo.CrestronDB = ParseConsoleData(response, "CrestronDB", ": ", "\n");
|
||||
ProgramInfo.Environment = ParseConsoleData(response, "Source Env", ": ", "\n");
|
||||
ProgramInfo.Programmer = ParseConsoleData(response, "Programmer", ": ", "\n");
|
||||
if (response.ToLower().Contains("bad or incomplete"))
|
||||
{
|
||||
Debug.Console(2,
|
||||
"Program in slot {0} not running. Setting default ProgramInfo for slot: {0}",
|
||||
Program.Number);
|
||||
|
||||
}
|
||||
//Debug.Console(2, "ProgramInfo: \r{0}", JsonConvert.SerializeObject(ProgramInfo));
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(2, "Bad or incomplete console command response. Initializing ProgramInfo for slot: {0}", Program.Number);
|
||||
|
||||
// Assume no valid program info. Constructing a new object will wipe all properties
|
||||
ProgramInfo = new ProgramInfo(Program.Number);
|
||||
|
||||
ProgramInfo.OperatingState = Program.OperatingState;
|
||||
ProgramInfo.RegistrationState = Program.RegistrationState;
|
||||
}
|
||||
}
|
||||
else
|
||||
// Assume no valid program info. Constructing a new object will wipe all properties
|
||||
ProgramInfo = new ProgramInfo(Program.Number)
|
||||
{
|
||||
Debug.Console(2, "Progcomments Attempt Unsuccessful for slot: {0}", Program.Number);
|
||||
}
|
||||
OperatingState = Program.OperatingState,
|
||||
RegistrationState = Program.RegistrationState
|
||||
};
|
||||
|
||||
ProgramNameFeedback.FireUpdate();
|
||||
ProgramCompileTimeFeedback.FireUpdate();
|
||||
CrestronDataBaseVersionFeedback.FireUpdate();
|
||||
EnvironmentVersionFeedback.FireUpdate();
|
||||
UpdateFeedbacks();
|
||||
|
||||
AggregatedProgramInfoFeedback.FireUpdate();
|
||||
return;
|
||||
}
|
||||
|
||||
OnProgramInfoChanged();
|
||||
});
|
||||
|
||||
// Shared properteis
|
||||
ProgramInfo.ProgramFile = ParseConsoleData(response, "Program File", ": ", "\n");
|
||||
ProgramInfo.CompilerRevision = ParseConsoleData(response, "Compiler Rev", ": ", "\n");
|
||||
ProgramInfo.CompileTime = ParseConsoleData(response, "Compiled On", ": ", "\n");
|
||||
ProgramInfo.Include4Dat = ParseConsoleData(response, "Include4.dat", ": ", "\n");
|
||||
|
||||
|
||||
if (ProgramInfo.ProgramFile.Contains(".dll"))
|
||||
{
|
||||
// SSP Program
|
||||
ProgramInfo.FriendlyName = ParseConsoleData(response, "Friendly Name", ": ", "\n");
|
||||
ProgramInfo.ApplicationName = ParseConsoleData(response, "Application Name", ": ", "\n");
|
||||
ProgramInfo.ProgramTool = ParseConsoleData(response, "Program Tool", ": ", "\n");
|
||||
ProgramInfo.MinFirmwareVersion = ParseConsoleData(response, "Min Firmware Version", ": ",
|
||||
"\n");
|
||||
ProgramInfo.PlugInVersion = ParseConsoleData(response, "PlugInVersion", ": ", "\n");
|
||||
}
|
||||
else if (ProgramInfo.ProgramFile.Contains(".smw"))
|
||||
{
|
||||
// SIMPL Windows Program
|
||||
ProgramInfo.FriendlyName = ParseConsoleData(response, "Friendly Name", ":", "\n");
|
||||
ProgramInfo.SystemName = ParseConsoleData(response, "System Name", ": ", "\n");
|
||||
ProgramInfo.CrestronDb = ParseConsoleData(response, "CrestronDB", ": ", "\n");
|
||||
ProgramInfo.Environment = ParseConsoleData(response, "Source Env", ": ", "\n");
|
||||
ProgramInfo.Programmer = ParseConsoleData(response, "Programmer", ": ", "\n");
|
||||
}
|
||||
Debug.Console(2, "Program info for slot {0} successfully updated", Program.Number);
|
||||
|
||||
UpdateFeedbacks();
|
||||
}
|
||||
|
||||
private void UpdateFeedbacks()
|
||||
{
|
||||
ProgramNameFeedback.FireUpdate();
|
||||
ProgramCompileTimeFeedback.FireUpdate();
|
||||
CrestronDataBaseVersionFeedback.FireUpdate();
|
||||
EnvironmentVersionFeedback.FireUpdate();
|
||||
|
||||
AggregatedProgramInfoFeedback.FireUpdate();
|
||||
|
||||
OnProgramInfoChanged();
|
||||
}
|
||||
|
||||
public void OnProgramInfoChanged()
|
||||
@@ -294,30 +526,28 @@ namespace PepperDash.Essentials.Core.Monitoring
|
||||
|
||||
private string ParseConsoleData(string data, string line, string startString, string endString)
|
||||
{
|
||||
string outputData = "";
|
||||
var outputData = "";
|
||||
|
||||
if (data.Length > 0)
|
||||
if (data.Length <= 0) return outputData;
|
||||
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
//Debug.Console(2, "ParseConsoleData Data: {0}, Line {1}, startStirng {2}, endString {3}", data, line, startString, endString);
|
||||
var linePosition = data.IndexOf(line);
|
||||
var startPosition = data.IndexOf(startString, linePosition) + startString.Length;
|
||||
var endPosition = data.IndexOf(endString, startPosition);
|
||||
outputData = data.Substring(startPosition, endPosition - startPosition).Trim();
|
||||
//Debug.Console(2, "ParseConsoleData Return: {0}", outputData);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Console(1, "Error Parsing Console Data:\r{0}", e);
|
||||
}
|
||||
//Debug.Console(2, "ParseConsoleData Data: {0}, Line {1}, startStirng {2}, endString {3}", data, line, startString, endString);
|
||||
var linePosition = data.IndexOf(line, StringComparison.Ordinal);
|
||||
var startPosition = data.IndexOf(startString, linePosition, StringComparison.Ordinal) +
|
||||
startString.Length;
|
||||
var endPosition = data.IndexOf(endString, startPosition, StringComparison.Ordinal);
|
||||
outputData = data.Substring(startPosition, endPosition - startPosition).Trim();
|
||||
//Debug.Console(2, "ParseConsoleData Return: {0}", outputData);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Console(1, "Error Parsing Console Data:\r{0}", e);
|
||||
}
|
||||
|
||||
return outputData;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -330,32 +560,39 @@ namespace PepperDash.Essentials.Core.Monitoring
|
||||
[JsonProperty("programNumber")]
|
||||
public uint ProgramNumber { get; private set; }
|
||||
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
[JsonConverter(typeof (StringEnumConverter))]
|
||||
[JsonProperty("operatingState")]
|
||||
public eProgramOperatingState OperatingState { get; set; }
|
||||
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
[JsonConverter(typeof (StringEnumConverter))]
|
||||
[JsonProperty("registrationState")]
|
||||
public eProgramRegistrationState RegistrationState { get; set; }
|
||||
|
||||
[JsonProperty("programFile")]
|
||||
public string ProgramFile { get; set; }
|
||||
|
||||
[JsonProperty("friendlyName")]
|
||||
public string FriendlyName { get; set; }
|
||||
|
||||
[JsonProperty("compilerRevision")]
|
||||
public string CompilerRevision { get; set; }
|
||||
|
||||
[JsonProperty("compileTime")]
|
||||
public string CompileTime { get; set; }
|
||||
|
||||
[JsonProperty("include4Dat")]
|
||||
public string Include4Dat { get; set; }
|
||||
|
||||
// SIMPL Windows properties
|
||||
[JsonProperty("systemName")]
|
||||
public string SystemName { get; set; }
|
||||
|
||||
[JsonProperty("crestronDb")]
|
||||
public string CrestronDB { get; set; }
|
||||
public string CrestronDb { get; set; }
|
||||
|
||||
[JsonProperty("environment")]
|
||||
public string Environment { get; set; }
|
||||
|
||||
[JsonProperty("programmer")]
|
||||
public string Programmer { get; set; }
|
||||
|
||||
@@ -363,10 +600,13 @@ namespace PepperDash.Essentials.Core.Monitoring
|
||||
// SSP Properties
|
||||
[JsonProperty("applicationName")]
|
||||
public string ApplicationName { get; set; }
|
||||
|
||||
[JsonProperty("programTool")]
|
||||
public string ProgramTool { get; set; }
|
||||
|
||||
[JsonProperty("minFirmwareVersion")]
|
||||
public string MinFirmwareVersion { get; set; }
|
||||
|
||||
[JsonProperty("plugInVersion")]
|
||||
public string PlugInVersion { get; set; }
|
||||
|
||||
@@ -381,7 +621,7 @@ namespace PepperDash.Essentials.Core.Monitoring
|
||||
Include4Dat = "";
|
||||
|
||||
SystemName = "";
|
||||
CrestronDB = "";
|
||||
CrestronDb = "";
|
||||
Environment = "";
|
||||
Programmer = "";
|
||||
|
||||
|
||||
@@ -131,6 +131,7 @@
|
||||
<Compile Include="Devices\CodecInterfaces.cs" />
|
||||
<Compile Include="Devices\CrestronProcessor.cs" />
|
||||
<Compile Include="Devices\DeviceApiBase.cs" />
|
||||
<Compile Include="Devices\DeviceFeedbackExtensions.cs" />
|
||||
<Compile Include="Devices\PC\InRoomPc.cs" />
|
||||
<Compile Include="Devices\PC\Laptop.cs" />
|
||||
<Compile Include="Devices\ReconfigurableDevice.cs" />
|
||||
@@ -236,6 +237,7 @@
|
||||
<Compile Include="Touchpanels\CrestronTouchpanelPropertiesConfig.cs" />
|
||||
<Compile Include="Touchpanels\Interfaces.cs" />
|
||||
<Compile Include="Touchpanels\Keyboards\HabaneroKeyboardController.cs" />
|
||||
<Compile Include="Touchpanels\Mpc3Touchpanel.cs" />
|
||||
<Compile Include="Touchpanels\TriListExtensions.cs" />
|
||||
<Compile Include="UI PageManagers\BlurayPageManager.cs" />
|
||||
<Compile Include="UI PageManagers\SetTopBoxThreePanelPageManager.cs" />
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
using System.Reflection;
|
||||
using Crestron.SimplSharp.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyTitle("PepperDashEssentialsBase")]
|
||||
[assembly: System.Reflection.AssemblyCompany("PepperDash Technology Corp")]
|
||||
[assembly: System.Reflection.AssemblyProduct("PepperDashEssentials")]
|
||||
[assembly: System.Reflection.AssemblyCopyright("Copyright © PepperDash Technology Corp 2020")]
|
||||
[assembly: System.Reflection.AssemblyVersion("0.0.0.*")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersion("0.0.0-buildType-buildNumber")]
|
||||
[assembly: Crestron.SimplSharp.Reflection.AssemblyInformationalVersion("0.0.0-buildType-buildNumber")]
|
||||
|
||||
[assembly: AssemblyTitle("PepperDashEssentialsBase")]
|
||||
[assembly: AssemblyCompany("PepperDash Technology Corp")]
|
||||
[assembly: AssemblyProduct("PepperDashEssentialsBase")]
|
||||
[assembly: AssemblyCopyright("Copyright © Pepperdash 2019")]
|
||||
[assembly: AssemblyVersion("1.4.0.*")]
|
||||
Binary file not shown.
@@ -1,16 +0,0 @@
|
||||
<ProgramInfo>
|
||||
<RequiredInfo>
|
||||
<FriendlyName>SSMonoIOLibrary</FriendlyName>
|
||||
<SystemName>SSMonoIOLibrary</SystemName>
|
||||
<EntryPoint>SSMonoIOLibrary</EntryPoint>
|
||||
<MinFirmwareVersion>1.007.0017</MinFirmwareVersion>
|
||||
<ProgramTool>SIMPL# Plugin</ProgramTool>
|
||||
<DesignToolId>5</DesignToolId>
|
||||
<ProgramToolId>5</ProgramToolId>
|
||||
<ArchiveName />
|
||||
</RequiredInfo>
|
||||
<OptionalInfo>
|
||||
<CompiledOn>4/6/2016 7:49:24 AM</CompiledOn>
|
||||
<CompilerRev>1.0.0.14081</CompilerRev>
|
||||
</OptionalInfo>
|
||||
</ProgramInfo>
|
||||
Binary file not shown.
@@ -1,18 +0,0 @@
|
||||
MainAssembly=SSMonoIOLibrary.dll:6c69af117dca3f74ebca99f7a0e3181c
|
||||
MainAssemblyMinFirmwareVersion=1.007.0017
|
||||
ü
|
||||
DependencySource=SimplSharpCustomAttributesInterface.dll:9c4b4d4c519b655af90016edca2d66b9
|
||||
DependencyPath=SSMonoIOLibrary.clz:SimplSharpCustomAttributesInterface.dll
|
||||
DependencyMainAssembly=SimplSharpCustomAttributesInterface.dll:9c4b4d4c519b655af90016edca2d66b9
|
||||
ü
|
||||
DependencySource=SimplSharpHelperInterface.dll:aed72eb0e19559a3f56708be76445dcd
|
||||
DependencyPath=SSMonoIOLibrary.clz:SimplSharpHelperInterface.dll
|
||||
DependencyMainAssembly=SimplSharpHelperInterface.dll:aed72eb0e19559a3f56708be76445dcd
|
||||
ü
|
||||
DependencySource=SimplSharpReflectionInterface.dll:e3ff8edbba84ccd7155b9984e67488b2
|
||||
DependencyPath=SSMonoIOLibrary.clz:SimplSharpReflectionInterface.dll
|
||||
DependencyMainAssembly=SimplSharpReflectionInterface.dll:e3ff8edbba84ccd7155b9984e67488b2
|
||||
ü
|
||||
DependencySource=SSharpCrestronExtensionsLibrary.dll:655a49edee523f150d1c03bcb5db87d0
|
||||
DependencyPath=SSMonoIOLibrary.clz:SSharpCrestronExtensionsLibrary.dll
|
||||
DependencyMainAssembly=SSharpCrestronExtensionsLibrary.dll:655a49edee523f150d1c03bcb5db87d0
|
||||
Binary file not shown.
@@ -1,16 +0,0 @@
|
||||
<ProgramInfo>
|
||||
<RequiredInfo>
|
||||
<FriendlyName>SSMonoProTaskLibrary</FriendlyName>
|
||||
<SystemName>SSMonoProTaskLibrary</SystemName>
|
||||
<EntryPoint>SSMonoProTaskLibrary</EntryPoint>
|
||||
<MinFirmwareVersion>1.009.0029</MinFirmwareVersion>
|
||||
<ProgramTool>SIMPL# Plugin</ProgramTool>
|
||||
<DesignToolId>5</DesignToolId>
|
||||
<ProgramToolId>5</ProgramToolId>
|
||||
<ArchiveName />
|
||||
</RequiredInfo>
|
||||
<OptionalInfo>
|
||||
<CompiledOn>4/6/2016 7:55:41 AM</CompiledOn>
|
||||
<CompilerRev>1.0.0.14269</CompilerRev>
|
||||
</OptionalInfo>
|
||||
</ProgramInfo>
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,30 +0,0 @@
|
||||
MainAssembly=SSMonoProTaskLibrary.dll:5d3a301400516bd812bf1566c72ccbf2
|
||||
MainAssemblyMinFirmwareVersion=1.009.0029
|
||||
ü
|
||||
DependencySource=SimplSharpReflectionInterface.dll:e3ff8edbba84ccd7155b9984e67488b2
|
||||
DependencyPath=SSMonoProTaskLibrary.cplz:SimplSharpReflectionInterface.dll
|
||||
DependencyMainAssembly=SimplSharpReflectionInterface.dll:e3ff8edbba84ccd7155b9984e67488b2
|
||||
ü
|
||||
DependencySource=SSharpCrestronExtensionsLibrary.dll:776d0247d8d42164c46c7cc1dfadbd03
|
||||
DependencyPath=SSMonoProTaskLibrary.cplz:SSharpCrestronExtensionsLibrary.dll
|
||||
DependencyMainAssembly=SSharpCrestronExtensionsLibrary.dll:776d0247d8d42164c46c7cc1dfadbd03
|
||||
ü
|
||||
DependencySource=SSMonoConcurrentCollectionsLibrary.dll:b0afcd989b081899c9eb29f9e4c8b799
|
||||
DependencyPath=SSMonoProTaskLibrary.cplz:SSMonoConcurrentCollectionsLibrary.dll
|
||||
DependencyMainAssembly=SSMonoConcurrentCollectionsLibrary.dll:b0afcd989b081899c9eb29f9e4c8b799
|
||||
ü
|
||||
DependencySource=SSMonoProConcurrentCollectionsLibrary.dll:8b718ce29f938bbf9cb5b8fc2d89332f
|
||||
DependencyPath=SSMonoProTaskLibrary.cplz:SSMonoProConcurrentCollectionsLibrary.dll
|
||||
DependencyMainAssembly=SSMonoProConcurrentCollectionsLibrary.dll:8b718ce29f938bbf9cb5b8fc2d89332f
|
||||
ü
|
||||
DependencySource=SSMonoSupportLibrary.dll:59362515f2c1d61583b2e40793987917
|
||||
DependencyPath=SSMonoProTaskLibrary.cplz:SSMonoSupportLibrary.dll
|
||||
DependencyMainAssembly=SSMonoSupportLibrary.dll:59362515f2c1d61583b2e40793987917
|
||||
ü
|
||||
DependencySource=SSMonoThreadingLibrary.dll:ea2ae2e1d9c425236f39de9192591062
|
||||
DependencyPath=SSMonoProTaskLibrary.cplz:SSMonoThreadingLibrary.dll
|
||||
DependencyMainAssembly=SSMonoThreadingLibrary.dll:ea2ae2e1d9c425236f39de9192591062
|
||||
ü
|
||||
DependencySource=SSMonoTupleLibrary.dll:2a3b419fff4199838079879053fcb41d
|
||||
DependencyPath=SSMonoProTaskLibrary.cplz:SSMonoTupleLibrary.dll
|
||||
DependencyMainAssembly=SSMonoTupleLibrary.dll:2a3b419fff4199838079879053fcb41d
|
||||
Binary file not shown.
@@ -1,138 +1,149 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using PepperDash.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core
|
||||
{
|
||||
public class SecondsCountdownTimer: IKeyed
|
||||
{
|
||||
public event EventHandler<EventArgs> HasStarted;
|
||||
public event EventHandler<EventArgs> HasFinished;
|
||||
public event EventHandler<EventArgs> WasCancelled;
|
||||
|
||||
public string Key { get; private set; }
|
||||
|
||||
public BoolFeedback IsRunningFeedback { get; private set; }
|
||||
bool _IsRunning;
|
||||
|
||||
public IntFeedback PercentFeedback { get; private set; }
|
||||
public StringFeedback TimeRemainingFeedback { get; private set; }
|
||||
|
||||
public bool CountsDown { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The number of seconds to countdown
|
||||
/// </summary>
|
||||
public int SecondsToCount { get; set; }
|
||||
|
||||
public DateTime StartTime { get; private set; }
|
||||
public DateTime FinishTime { get; private set; }
|
||||
|
||||
CTimer SecondTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
public SecondsCountdownTimer(string key)
|
||||
{
|
||||
Key = key;
|
||||
IsRunningFeedback = new BoolFeedback(() => _IsRunning);
|
||||
|
||||
TimeRemainingFeedback = new StringFeedback(() =>
|
||||
{
|
||||
// Need to handle up and down here.
|
||||
|
||||
if (StartTime == null || FinishTime == null)
|
||||
return "";
|
||||
var timeSpan = FinishTime - DateTime.Now;
|
||||
return Math.Round(timeSpan.TotalSeconds).ToString();
|
||||
});
|
||||
|
||||
PercentFeedback = new IntFeedback(() =>
|
||||
{
|
||||
if (StartTime == null || FinishTime == null)
|
||||
return 0;
|
||||
double percent = (FinishTime - DateTime.Now).TotalSeconds
|
||||
/ (FinishTime - StartTime).TotalSeconds
|
||||
* 100;
|
||||
return (int)percent;
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts the Timer
|
||||
/// </summary>
|
||||
public void Start()
|
||||
{
|
||||
if (_IsRunning)
|
||||
return;
|
||||
StartTime = DateTime.Now;
|
||||
FinishTime = StartTime + TimeSpan.FromSeconds(SecondsToCount);
|
||||
|
||||
if (SecondTimer != null)
|
||||
SecondTimer.Stop();
|
||||
SecondTimer = new CTimer(SecondElapsedTimerCallback, null, 0, 1000);
|
||||
_IsRunning = true;
|
||||
IsRunningFeedback.FireUpdate();
|
||||
|
||||
var handler = HasStarted;
|
||||
if (handler != null)
|
||||
handler(this, new EventArgs());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Restarts the timer
|
||||
/// </summary>
|
||||
public void Reset()
|
||||
{
|
||||
_IsRunning = false;
|
||||
Start();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Cancels the timer (without triggering it to finish)
|
||||
/// </summary>
|
||||
public void Cancel()
|
||||
{
|
||||
StopHelper();
|
||||
|
||||
var handler = WasCancelled;
|
||||
if (handler != null)
|
||||
handler(this, new EventArgs());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called upon expiration, or calling this will force timer to finish.
|
||||
/// </summary>
|
||||
public void Finish()
|
||||
{
|
||||
StopHelper();
|
||||
|
||||
var handler = HasFinished;
|
||||
if (handler != null)
|
||||
handler(this, new EventArgs());
|
||||
}
|
||||
|
||||
void StopHelper()
|
||||
{
|
||||
if (SecondTimer != null)
|
||||
SecondTimer.Stop();
|
||||
_IsRunning = false;
|
||||
IsRunningFeedback.FireUpdate();
|
||||
}
|
||||
|
||||
void SecondElapsedTimerCallback(object o)
|
||||
{
|
||||
PercentFeedback.FireUpdate();
|
||||
TimeRemainingFeedback.FireUpdate();
|
||||
|
||||
if (DateTime.Now >= FinishTime)
|
||||
Finish();
|
||||
}
|
||||
}
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using PepperDash.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core
|
||||
{
|
||||
public class SecondsCountdownTimer: IKeyed
|
||||
{
|
||||
public event EventHandler<EventArgs> HasStarted;
|
||||
public event EventHandler<EventArgs> HasFinished;
|
||||
public event EventHandler<EventArgs> WasCancelled;
|
||||
|
||||
public string Key { get; private set; }
|
||||
|
||||
public BoolFeedback IsRunningFeedback { get; private set; }
|
||||
bool _IsRunning;
|
||||
|
||||
public IntFeedback PercentFeedback { get; private set; }
|
||||
public StringFeedback TimeRemainingFeedback { get; private set; }
|
||||
|
||||
public bool CountsDown { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The number of seconds to countdown
|
||||
/// </summary>
|
||||
public int SecondsToCount { get; set; }
|
||||
|
||||
public DateTime StartTime { get; private set; }
|
||||
public DateTime FinishTime { get; private set; }
|
||||
|
||||
CTimer SecondTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
public SecondsCountdownTimer(string key)
|
||||
{
|
||||
Key = key;
|
||||
IsRunningFeedback = new BoolFeedback(() => _IsRunning);
|
||||
|
||||
TimeRemainingFeedback = new StringFeedback(() =>
|
||||
{
|
||||
// Need to handle up and down here.
|
||||
|
||||
if (StartTime == null || FinishTime == null)
|
||||
return "";
|
||||
var timeSpan = FinishTime - DateTime.Now;
|
||||
|
||||
if (timeSpan.TotalSeconds < 60)
|
||||
{
|
||||
return Math.Round(timeSpan.TotalSeconds).ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(2, this, "timeSpan.Minutes == {0}, timeSpan.Seconds == {1}", timeSpan.Minutes, timeSpan.Seconds);
|
||||
return String.Format("{0:D2}:{1:D2}",
|
||||
timeSpan.Minutes,
|
||||
timeSpan.Seconds);
|
||||
}
|
||||
});
|
||||
|
||||
PercentFeedback = new IntFeedback(() =>
|
||||
{
|
||||
if (StartTime == null || FinishTime == null)
|
||||
return 0;
|
||||
double percent = (FinishTime - DateTime.Now).TotalSeconds
|
||||
/ (FinishTime - StartTime).TotalSeconds
|
||||
* 100;
|
||||
return (int)percent;
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts the Timer
|
||||
/// </summary>
|
||||
public void Start()
|
||||
{
|
||||
if (_IsRunning)
|
||||
return;
|
||||
StartTime = DateTime.Now;
|
||||
FinishTime = StartTime + TimeSpan.FromSeconds(SecondsToCount);
|
||||
|
||||
if (SecondTimer != null)
|
||||
SecondTimer.Stop();
|
||||
SecondTimer = new CTimer(SecondElapsedTimerCallback, null, 0, 1000);
|
||||
_IsRunning = true;
|
||||
IsRunningFeedback.FireUpdate();
|
||||
|
||||
var handler = HasStarted;
|
||||
if (handler != null)
|
||||
handler(this, new EventArgs());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Restarts the timer
|
||||
/// </summary>
|
||||
public void Reset()
|
||||
{
|
||||
_IsRunning = false;
|
||||
Start();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Cancels the timer (without triggering it to finish)
|
||||
/// </summary>
|
||||
public void Cancel()
|
||||
{
|
||||
StopHelper();
|
||||
|
||||
var handler = WasCancelled;
|
||||
if (handler != null)
|
||||
handler(this, new EventArgs());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called upon expiration, or calling this will force timer to finish.
|
||||
/// </summary>
|
||||
public void Finish()
|
||||
{
|
||||
StopHelper();
|
||||
|
||||
var handler = HasFinished;
|
||||
if (handler != null)
|
||||
handler(this, new EventArgs());
|
||||
}
|
||||
|
||||
void StopHelper()
|
||||
{
|
||||
if (SecondTimer != null)
|
||||
SecondTimer.Stop();
|
||||
_IsRunning = false;
|
||||
IsRunningFeedback.FireUpdate();
|
||||
}
|
||||
|
||||
void SecondElapsedTimerCallback(object o)
|
||||
{
|
||||
PercentFeedback.FireUpdate();
|
||||
TimeRemainingFeedback.FireUpdate();
|
||||
|
||||
if (DateTime.Now >= FinishTime)
|
||||
Finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core.Touchpanels
|
||||
{
|
||||
/// <summary>
|
||||
/// A wrapper class for the touchpanel portion of an MPC3 class process to allow for configurable
|
||||
/// behavior of the keybad buttons
|
||||
/// </summary>
|
||||
public class Mpc3TouchpanelController : Device
|
||||
{
|
||||
MPC3Basic _Touchpanel;
|
||||
|
||||
Dictionary<string, KeypadButton> _Buttons;
|
||||
|
||||
public Mpc3TouchpanelController(string key, string name, CrestronControlSystem processor, Dictionary<string, KeypadButton> buttons)
|
||||
: base(key, name)
|
||||
{
|
||||
_Touchpanel = processor.ControllerTouchScreenSlotDevice as MPC3Basic;
|
||||
_Buttons = buttons;
|
||||
|
||||
_Touchpanel.ButtonStateChange += new Crestron.SimplSharpPro.DeviceSupport.ButtonEventHandler(_Touchpanel_ButtonStateChange);
|
||||
|
||||
|
||||
AddPostActivationAction(() =>
|
||||
{
|
||||
// Link up the button feedbacks to the specified BoolFeedbacks
|
||||
foreach (var button in _Buttons)
|
||||
{
|
||||
var feedbackConfig = button.Value.Feedback;
|
||||
var device = DeviceManager.GetDeviceForKey(feedbackConfig.DeviceKey) as Device;
|
||||
if (device != null)
|
||||
{
|
||||
var bKey = button.Key.ToLower();
|
||||
|
||||
var feedback = device.GetFeedbackProperty(feedbackConfig.BoolFeedbackName);
|
||||
|
||||
var bFeedback = feedback as BoolFeedback;
|
||||
var iFeedback = feedback as IntFeedback;
|
||||
if (bFeedback != null)
|
||||
{
|
||||
|
||||
if (bKey == "power")
|
||||
{
|
||||
bFeedback.LinkCrestronFeedback(_Touchpanel.FeedbackPower);
|
||||
continue;
|
||||
}
|
||||
else if (bKey == "mute")
|
||||
{
|
||||
bFeedback.LinkCrestronFeedback(_Touchpanel.FeedbackMute);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Link to the Crestron Feedback corresponding to the button number
|
||||
bFeedback.LinkCrestronFeedback(_Touchpanel.Feedbacks[UInt16.Parse(button.Key)]);
|
||||
}
|
||||
else if (iFeedback != null)
|
||||
{
|
||||
if (bKey == "volumefeedback")
|
||||
{
|
||||
var volFeedback = feedback as IntFeedback;
|
||||
// TODO: Figure out how to subsribe to a volume IntFeedback and link it to the voluem
|
||||
volFeedback.LinkInputSig(_Touchpanel.VolumeBargraph);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(1, this, "Unable to get BoolFeedback with name: {0} from device: {1}", feedbackConfig.BoolFeedbackName, device.Key);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(1, this, "Unable to get device with key: {0}", feedbackConfig.DeviceKey);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void _Touchpanel_ButtonStateChange(GenericBase device, Crestron.SimplSharpPro.DeviceSupport.ButtonEventArgs args)
|
||||
{
|
||||
Debug.Console(1, this, "Button {0} ({1}), {2}", args.Button.Number, args.Button.Name, args.NewButtonState);
|
||||
var type = args.NewButtonState.ToString();
|
||||
|
||||
if (_Buttons.ContainsKey(args.Button.Number.ToString()))
|
||||
{
|
||||
Press(args.Button.Number.ToString(), type);
|
||||
}
|
||||
else if(_Buttons.ContainsKey(args.Button.Name.ToString()))
|
||||
{
|
||||
Press(args.Button.Name.ToString(), type);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Runs the function associated with this button/type. One of the following strings:
|
||||
/// Pressed, Released, Tapped, DoubleTapped, Held, HeldReleased
|
||||
/// </summary>
|
||||
/// <param name="number"></param>
|
||||
/// <param name="type"></param>
|
||||
public void Press(string number, string type)
|
||||
{
|
||||
// TODO: In future, consider modifying this to generate actions at device activation time
|
||||
// to prevent the need to dynamically call the method via reflection on each button press
|
||||
if (!_Buttons.ContainsKey(number)) { return; }
|
||||
var but = _Buttons[number];
|
||||
if (but.EventTypes.ContainsKey(type))
|
||||
{
|
||||
foreach (var a in but.EventTypes[type]) { DeviceJsonApi.DoDeviceAction(a); }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents the configuration of a keybad buggon
|
||||
/// </summary>
|
||||
public class KeypadButton
|
||||
{
|
||||
public Dictionary<string, DeviceActionWrapper[]> EventTypes { get; set; }
|
||||
public KeypadButtonFeedback Feedback { get; set; }
|
||||
|
||||
public KeypadButton()
|
||||
{
|
||||
EventTypes = new Dictionary<string, DeviceActionWrapper[]>();
|
||||
Feedback = new KeypadButtonFeedback();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class KeypadButtonFeedback
|
||||
{
|
||||
public string DeviceKey { get; set; }
|
||||
public string BoolFeedbackName { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -44,7 +44,10 @@ namespace PepperDash.Essentials.DM.AirMedia
|
||||
|
||||
DeviceConfig = dc;
|
||||
|
||||
PropertiesConfig = props;
|
||||
PropertiesConfig = props;
|
||||
|
||||
InputPorts = new RoutingPortCollection<RoutingInputPort>();
|
||||
OutputPorts = new RoutingPortCollection<RoutingOutputPort>();
|
||||
|
||||
InputPorts.Add(new RoutingInputPort(DmPortName.Osd, eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||
eRoutingPortConnectionType.None, new Action(SelectPinPointUxLandingPage), this));
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -30,14 +30,17 @@ namespace PepperDash.Essentials.DM
|
||||
|
||||
if (typeName.StartsWith("am"))
|
||||
{
|
||||
var props = JsonConvert.DeserializeObject<AirMediaPropertiesConfig>(properties.ToString());
|
||||
AmX00 amDevice = null;
|
||||
if (typeName == "am200")
|
||||
amDevice = new Crestron.SimplSharpPro.DM.AirMedia.Am200(props.Control.IpIdInt, Global.ControlSystem);
|
||||
else if(typeName == "am300")
|
||||
amDevice = new Crestron.SimplSharpPro.DM.AirMedia.Am300(props.Control.IpIdInt, Global.ControlSystem);
|
||||
if (typeName == "am200" || typeName == "am300")
|
||||
{
|
||||
var props = JsonConvert.DeserializeObject<AirMediaPropertiesConfig>(properties.ToString());
|
||||
AmX00 amDevice = null;
|
||||
if (typeName == "am200")
|
||||
amDevice = new Crestron.SimplSharpPro.DM.AirMedia.Am200(props.Control.IpIdInt, Global.ControlSystem);
|
||||
else if (typeName == "am300")
|
||||
amDevice = new Crestron.SimplSharpPro.DM.AirMedia.Am300(props.Control.IpIdInt, Global.ControlSystem);
|
||||
|
||||
return new AirMediaController(key, name, amDevice, dc, props);
|
||||
return new AirMediaController(key, name, amDevice, dc, props);
|
||||
}
|
||||
}
|
||||
else if (typeName.StartsWith("dmmd8x") || typeName.StartsWith("dmmd16x") || typeName.StartsWith("dmmd32x"))
|
||||
{
|
||||
|
||||
@@ -82,6 +82,10 @@
|
||||
<HintPath>..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="SimplSharpReflectionInterface, Version=1.0.5583.25238, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data" />
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
using System.Reflection;
|
||||
using Crestron.SimplSharp.Reflection;
|
||||
|
||||
[assembly: AssemblyTitle("Essentials_DM")]
|
||||
[assembly: AssemblyCompany("PepperDash Technology Corp")]
|
||||
[assembly: AssemblyProduct("Essentials_DM")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019")]
|
||||
[assembly: AssemblyVersion("1.3.*")]
|
||||
[assembly: System.Reflection.AssemblyTitle("Essentials_DM")]
|
||||
[assembly: System.Reflection.AssemblyCompany("PepperDash Technology Corp")]
|
||||
[assembly: System.Reflection.AssemblyProduct("PepperDashEssentials")]
|
||||
[assembly: System.Reflection.AssemblyCopyright("Copyright © PepperDash Technology Corp 2020")]
|
||||
[assembly: System.Reflection.AssemblyVersion("0.0.0.*")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersion("0.0.0-buildType-buildNumber")]
|
||||
[assembly: Crestron.SimplSharp.Reflection.AssemblyInformationalVersion("0.0.0-buildType-buildNumber")]
|
||||
@@ -103,6 +103,18 @@ namespace PepperDash.Essentials.Devices.Common.Occupancy
|
||||
PirSensitivityInOccupiedStateFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.PirSensitivityInVacantStateFeedbackEventId)
|
||||
PirSensitivityInVacantStateFeedback.FireUpdate();
|
||||
}
|
||||
|
||||
protected virtual void OccSensor_BaseEvent(Crestron.SimplSharpPro.GenericBase device, Crestron.SimplSharpPro.BaseEventArgs args)
|
||||
{
|
||||
Debug.Console(2, this, "GlsOccupancySensorChange EventId: {0}", args.EventId);
|
||||
|
||||
if (args.EventId == Crestron.SimplSharpPro.GeneralIO.GlsOccupancySensorBase.RoomOccupiedFeedbackEventId
|
||||
|| args.EventId == Crestron.SimplSharpPro.GeneralIO.GlsOccupancySensorBase.RoomVacantFeedbackEventId)
|
||||
{
|
||||
Debug.Console(1, this, "Occupancy State: {0}", OccSensor.OccupancyDetectedFeedback.BoolValue);
|
||||
RoomIsOccupiedFeedback.FireUpdate();
|
||||
}
|
||||
else if (args.EventId == GlsOccupancySensorBase.TimeoutFeedbackEventId)
|
||||
CurrentTimeoutFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.TimeoutLocalFeedbackEventId)
|
||||
@@ -117,18 +129,6 @@ namespace PepperDash.Essentials.Devices.Common.Occupancy
|
||||
ExternalPhotoSensorValue.FireUpdate();
|
||||
}
|
||||
|
||||
void OccSensor_BaseEvent(Crestron.SimplSharpPro.GenericBase device, Crestron.SimplSharpPro.BaseEventArgs args)
|
||||
{
|
||||
Debug.Console(2, this, "GlsOccupancySensorChange EventId: {0}", args.EventId);
|
||||
|
||||
if (args.EventId == Crestron.SimplSharpPro.GeneralIO.GlsOccupancySensorBase.RoomOccupiedFeedbackEventId
|
||||
|| args.EventId == Crestron.SimplSharpPro.GeneralIO.GlsOccupancySensorBase.RoomVacantFeedbackEventId)
|
||||
{
|
||||
Debug.Console(1, this, "Occupancy State: {0}", OccSensor.OccupancyDetectedFeedback.BoolValue);
|
||||
RoomIsOccupiedFeedback.FireUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetTestMode(bool mode)
|
||||
{
|
||||
InTestMode = mode;
|
||||
|
||||
@@ -1,65 +1,65 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro.GeneralIO;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.Occupancy
|
||||
{
|
||||
public class GlsOdtOccupancySensorController : GlsOccupancySensorBaseController
|
||||
{
|
||||
public new GlsOdtCCn OccSensor { get; private set; }
|
||||
|
||||
public BoolFeedback OrWhenVacatedFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback AndWhenVacatedFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback UltrasonicAEnabledFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback UltrasonicBEnabledFeedback { get; private set; }
|
||||
|
||||
public IntFeedback UltrasonicSensitivityInVacantStateFeedback { get; private set; }
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro.GeneralIO;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.Occupancy
|
||||
{
|
||||
public class GlsOdtOccupancySensorController : GlsOccupancySensorBaseController
|
||||
{
|
||||
public new GlsOdtCCn OccSensor { get; private set; }
|
||||
|
||||
public BoolFeedback OrWhenVacatedFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback AndWhenVacatedFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback UltrasonicAEnabledFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback UltrasonicBEnabledFeedback { get; private set; }
|
||||
|
||||
public IntFeedback UltrasonicSensitivityInVacantStateFeedback { get; private set; }
|
||||
|
||||
public IntFeedback UltrasonicSensitivityInOccupiedStateFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback RawOccupancyPirFeedback { get; private set; }
|
||||
|
||||
public BoolFeedback RawOccupancyUsFeedback { get; private set; }
|
||||
|
||||
|
||||
public GlsOdtOccupancySensorController(string key, string name, GlsOdtCCn sensor)
|
||||
: base(key, name, sensor)
|
||||
{
|
||||
OccSensor = sensor;
|
||||
|
||||
AndWhenVacatedFeedback = new BoolFeedback(() => OccSensor.AndWhenVacatedFeedback.BoolValue);
|
||||
|
||||
OrWhenVacatedFeedback = new BoolFeedback(() => OccSensor.OrWhenVacatedFeedback.BoolValue);
|
||||
|
||||
UltrasonicAEnabledFeedback = new BoolFeedback(() => OccSensor.UsAEnabledFeedback.BoolValue);
|
||||
|
||||
public BoolFeedback RawOccupancyUsFeedback { get; private set; }
|
||||
|
||||
|
||||
public GlsOdtOccupancySensorController(string key, string name, GlsOdtCCn sensor)
|
||||
: base(key, name, sensor)
|
||||
{
|
||||
OccSensor = sensor;
|
||||
|
||||
AndWhenVacatedFeedback = new BoolFeedback(() => OccSensor.AndWhenVacatedFeedback.BoolValue);
|
||||
|
||||
OrWhenVacatedFeedback = new BoolFeedback(() => OccSensor.OrWhenVacatedFeedback.BoolValue);
|
||||
|
||||
UltrasonicAEnabledFeedback = new BoolFeedback(() => OccSensor.UsAEnabledFeedback.BoolValue);
|
||||
|
||||
UltrasonicBEnabledFeedback = new BoolFeedback(() => OccSensor.UsBEnabledFeedback.BoolValue);
|
||||
|
||||
RawOccupancyPirFeedback = new BoolFeedback(() => OccSensor.RawOccupancyPirFeedback.BoolValue);
|
||||
|
||||
RawOccupancyUsFeedback = new BoolFeedback(() => OccSensor.RawOccupancyUsFeedback.BoolValue);
|
||||
|
||||
UltrasonicSensitivityInVacantStateFeedback = new IntFeedback(() => OccSensor.UsSensitivityInVacantStateFeedback.UShortValue);
|
||||
|
||||
RawOccupancyUsFeedback = new BoolFeedback(() => OccSensor.RawOccupancyUsFeedback.BoolValue);
|
||||
|
||||
UltrasonicSensitivityInVacantStateFeedback = new IntFeedback(() => OccSensor.UsSensitivityInVacantStateFeedback.UShortValue);
|
||||
|
||||
UltrasonicSensitivityInOccupiedStateFeedback = new IntFeedback(() => OccSensor.UsSensitivityInOccupiedStateFeedback.UShortValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the base class event delegate to fire feedbacks for event IDs that pertain to this extended class.
|
||||
/// Then calls the base delegate method to ensure any common event IDs are captured.
|
||||
/// </summary>
|
||||
/// <param name="device"></param>
|
||||
/// <param name="args"></param>
|
||||
protected override void OccSensor_GlsOccupancySensorChange(GlsOccupancySensorBase device, GlsOccupancySensorChangeEventArgs args)
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the base class event delegate to fire feedbacks for event IDs that pertain to this extended class.
|
||||
/// Then calls the base delegate method to ensure any common event IDs are captured.
|
||||
/// </summary>
|
||||
/// <param name="device"></param>
|
||||
/// <param name="args"></param>
|
||||
protected override void OccSensor_GlsOccupancySensorChange(GlsOccupancySensorBase device, GlsOccupancySensorChangeEventArgs args)
|
||||
{
|
||||
if (args.EventId == GlsOccupancySensorBase.AndWhenVacatedFeedbackEventId)
|
||||
AndWhenVacatedFeedback.FireUpdate();
|
||||
@@ -69,91 +69,103 @@ namespace PepperDash.Essentials.Devices.Common.Occupancy
|
||||
UltrasonicAEnabledFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.UsBEnabledFeedbackEventId)
|
||||
UltrasonicBEnabledFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.RawOccupancyPirFeedbackEventId)
|
||||
RawOccupancyPirFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.RawOccupancyUsFeedbackEventId)
|
||||
RawOccupancyUsFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.UsSensitivityInOccupiedStateFeedbackEventId)
|
||||
UltrasonicSensitivityInOccupiedStateFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.UsSensitivityInVacantStateFeedbackEventId)
|
||||
UltrasonicSensitivityInVacantStateFeedback.FireUpdate();
|
||||
|
||||
base.OccSensor_GlsOccupancySensorChange(device, args);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the OrWhenVacated state
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetOrWhenVacatedState(bool state)
|
||||
{
|
||||
OccSensor.OrWhenVacated.BoolValue = state;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the AndWhenVacated state
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetAndWhenVacatedState(bool state)
|
||||
{
|
||||
OccSensor.AndWhenVacated.BoolValue = state;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables the Ultrasonic A sensor
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetUsAEnable(bool state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
OccSensor.EnableUsA.BoolValue = state;
|
||||
OccSensor.DisableUsA.BoolValue = !state;
|
||||
}
|
||||
else
|
||||
{
|
||||
OccSensor.EnableUsA.BoolValue = state;
|
||||
OccSensor.DisableUsA.BoolValue = !state;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables the Ultrasonic B sensor
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetUsBEnable(bool state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
OccSensor.EnableUsB.BoolValue = state;
|
||||
OccSensor.DisableUsB.BoolValue = !state;
|
||||
}
|
||||
else
|
||||
{
|
||||
OccSensor.EnableUsB.BoolValue = state;
|
||||
OccSensor.DisableUsB.BoolValue = !state;
|
||||
}
|
||||
}
|
||||
|
||||
public void IncrementUsSensitivityInOccupiedState(bool pressRelease)
|
||||
{
|
||||
OccSensor.IncrementUsSensitivityInOccupiedState.BoolValue = pressRelease;
|
||||
}
|
||||
|
||||
public void DecrementUsSensitivityInOccupiedState(bool pressRelease)
|
||||
{
|
||||
OccSensor.DecrementUsSensitivityInOccupiedState.BoolValue = pressRelease;
|
||||
}
|
||||
|
||||
public void IncrementUsSensitivityInVacantState(bool pressRelease)
|
||||
{
|
||||
OccSensor.IncrementUsSensitivityInVacantState.BoolValue = pressRelease;
|
||||
}
|
||||
|
||||
public void DecrementUsSensitivityInVacantState(bool pressRelease)
|
||||
{
|
||||
OccSensor.DecrementUsSensitivityInVacantState.BoolValue = pressRelease;
|
||||
}
|
||||
}
|
||||
|
||||
base.OccSensor_GlsOccupancySensorChange(device, args);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the base class event delegate to fire feedbacks for event IDs that pertain to this extended class.
|
||||
/// Then calls the base delegate method to ensure any common event IDs are captured.
|
||||
/// </summary>
|
||||
/// <param name="device"></param>
|
||||
/// <param name="args"></param>
|
||||
protected override void OccSensor_BaseEvent(Crestron.SimplSharpPro.GenericBase device, Crestron.SimplSharpPro.BaseEventArgs args)
|
||||
{
|
||||
if (args.EventId == GlsOccupancySensorBase.RawOccupancyPirFeedbackEventId)
|
||||
RawOccupancyPirFeedback.FireUpdate();
|
||||
else if (args.EventId == GlsOccupancySensorBase.RawOccupancyUsFeedbackEventId)
|
||||
RawOccupancyUsFeedback.FireUpdate();
|
||||
|
||||
base.OccSensor_BaseEvent(device, args);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the OrWhenVacated state
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetOrWhenVacatedState(bool state)
|
||||
{
|
||||
OccSensor.OrWhenVacated.BoolValue = state;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the AndWhenVacated state
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetAndWhenVacatedState(bool state)
|
||||
{
|
||||
OccSensor.AndWhenVacated.BoolValue = state;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables the Ultrasonic A sensor
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetUsAEnable(bool state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
OccSensor.EnableUsA.BoolValue = state;
|
||||
OccSensor.DisableUsA.BoolValue = !state;
|
||||
}
|
||||
else
|
||||
{
|
||||
OccSensor.EnableUsA.BoolValue = state;
|
||||
OccSensor.DisableUsA.BoolValue = !state;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables the Ultrasonic B sensor
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
public void SetUsBEnable(bool state)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
OccSensor.EnableUsB.BoolValue = state;
|
||||
OccSensor.DisableUsB.BoolValue = !state;
|
||||
}
|
||||
else
|
||||
{
|
||||
OccSensor.EnableUsB.BoolValue = state;
|
||||
OccSensor.DisableUsB.BoolValue = !state;
|
||||
}
|
||||
}
|
||||
|
||||
public void IncrementUsSensitivityInOccupiedState(bool pressRelease)
|
||||
{
|
||||
OccSensor.IncrementUsSensitivityInOccupiedState.BoolValue = pressRelease;
|
||||
}
|
||||
|
||||
public void DecrementUsSensitivityInOccupiedState(bool pressRelease)
|
||||
{
|
||||
OccSensor.DecrementUsSensitivityInOccupiedState.BoolValue = pressRelease;
|
||||
}
|
||||
|
||||
public void IncrementUsSensitivityInVacantState(bool pressRelease)
|
||||
{
|
||||
OccSensor.IncrementUsSensitivityInVacantState.BoolValue = pressRelease;
|
||||
}
|
||||
|
||||
public void DecrementUsSensitivityInVacantState(bool pressRelease)
|
||||
{
|
||||
OccSensor.DecrementUsSensitivityInVacantState.BoolValue = pressRelease;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,10 @@
|
||||
using System.Reflection;
|
||||
using Crestron.SimplSharp.Reflection;
|
||||
|
||||
[assembly: AssemblyTitle("Essentials_Devices_Common")]
|
||||
[assembly: AssemblyCompany("PepperDash Technology Corp")]
|
||||
[assembly: AssemblyProduct("Essentials_Devices_Common")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019")]
|
||||
[assembly: AssemblyVersion("1.4.*")]
|
||||
[assembly: System.Reflection.AssemblyTitle("Essentials_Devices_Common")]
|
||||
[assembly: System.Reflection.AssemblyCompany("PepperDash Technology Corp")]
|
||||
[assembly: System.Reflection.AssemblyProduct("PepperDashEssentials")]
|
||||
[assembly: System.Reflection.AssemblyCopyright("Copyright © PepperDash Technology Corp 2020")]
|
||||
[assembly: System.Reflection.AssemblyVersion("0.0.0.*")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersion("0.0.0-buildType-buildNumber")]
|
||||
[assembly: Crestron.SimplSharp.Reflection.AssemblyInformationalVersion("0.0.0-buildType-buildNumber")]
|
||||
@@ -1,343 +1,371 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Presets;
|
||||
using PepperDash.Essentials.Core.Routing;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common
|
||||
{
|
||||
public class IRSetTopBoxBase : Device, ISetTopBoxControls, IUiDisplayInfo, IRoutingOutputs, IUsageTracking
|
||||
{
|
||||
public IrOutputPortController IrPort { get; private set; }
|
||||
|
||||
public uint DisplayUiType { get { return DisplayUiConstants.TypeDirecTv; } }
|
||||
|
||||
|
||||
public bool HasPresets { get; set; }
|
||||
public bool HasDvr { get; set; }
|
||||
public bool HasDpad { get; set; }
|
||||
public bool HasNumeric { get; set; }
|
||||
|
||||
public DevicePresetsModel PresetsModel { get; private set; }
|
||||
|
||||
public IRSetTopBoxBase(string key, string name, IrOutputPortController portCont,
|
||||
SetTopBoxPropertiesConfig props)
|
||||
: base(key, name)
|
||||
{
|
||||
IrPort = portCont;
|
||||
DeviceManager.AddDevice(portCont);
|
||||
|
||||
HasPresets = props.HasPresets;
|
||||
HasDvr = props.HasDvr;
|
||||
HasDpad = props.HasDpad;
|
||||
HasNumeric = props.HasNumeric;
|
||||
|
||||
HasKeypadAccessoryButton1 = true;
|
||||
KeypadAccessoryButton1Command = "Dash";
|
||||
KeypadAccessoryButton1Label = "-";
|
||||
|
||||
HasKeypadAccessoryButton2 = true;
|
||||
KeypadAccessoryButton2Command = "NumericEnter";
|
||||
KeypadAccessoryButton2Label = "Enter";
|
||||
|
||||
AnyVideoOut = new RoutingOutputPort(RoutingPortNames.AnyVideoOut, eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||
eRoutingPortConnectionType.Hdmi, null, this);
|
||||
AnyAudioOut = new RoutingOutputPort(RoutingPortNames.AnyAudioOut, eRoutingSignalType.Audio,
|
||||
eRoutingPortConnectionType.DigitalAudio, null, this);
|
||||
OutputPorts = new RoutingPortCollection<RoutingOutputPort> { AnyVideoOut, AnyAudioOut };
|
||||
|
||||
}
|
||||
|
||||
public void LoadPresets(string filePath)
|
||||
{
|
||||
PresetsModel = new DevicePresetsModel(Key + "-presets", this, filePath);
|
||||
DeviceManager.AddDevice(PresetsModel);
|
||||
}
|
||||
|
||||
|
||||
#region ISetTopBoxControls Members
|
||||
|
||||
public void DvrList(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_DVR, pressRelease);
|
||||
}
|
||||
|
||||
public void Replay(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_REPLAY, pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDPad Members
|
||||
|
||||
public void Up(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_UP_ARROW, pressRelease);
|
||||
}
|
||||
|
||||
public void Down(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_DN_ARROW, pressRelease);
|
||||
}
|
||||
|
||||
public void Left(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_LEFT_ARROW, pressRelease);
|
||||
}
|
||||
|
||||
public void Right(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_RIGHT_ARROW, pressRelease);
|
||||
}
|
||||
|
||||
public void Select(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_ENTER, pressRelease);
|
||||
}
|
||||
|
||||
public void Menu(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_MENU, pressRelease);
|
||||
}
|
||||
|
||||
public void Exit(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_EXIT, pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region INumericKeypad Members
|
||||
|
||||
public void Digit0(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_0, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit1(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_1, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit2(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_2, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit3(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_3, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit4(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_4, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit5(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_5, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit6(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_6, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit7(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_7, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit8(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_8, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit9(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_9, pressRelease);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Defaults to true
|
||||
/// </summary>
|
||||
public bool HasKeypadAccessoryButton1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Defaults to "-"
|
||||
/// </summary>
|
||||
public string KeypadAccessoryButton1Label { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Defaults to "Dash"
|
||||
/// </summary>
|
||||
public string KeypadAccessoryButton1Command { get; set; }
|
||||
|
||||
public void KeypadAccessoryButton1(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(KeypadAccessoryButton1Command, pressRelease);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Defaults to true
|
||||
/// </summary>
|
||||
public bool HasKeypadAccessoryButton2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Defaults to "Enter"
|
||||
/// </summary>
|
||||
public string KeypadAccessoryButton2Label { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Defaults to "Enter"
|
||||
/// </summary>
|
||||
public string KeypadAccessoryButton2Command { get; set; }
|
||||
|
||||
public void KeypadAccessoryButton2(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(KeypadAccessoryButton2Command, pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ISetTopBoxNumericKeypad Members
|
||||
|
||||
/// <summary>
|
||||
/// Corresponds to "dash" IR command
|
||||
/// </summary>
|
||||
public void Dash(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease("dash", pressRelease);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Corresponds to "numericEnter" IR command
|
||||
/// </summary>
|
||||
public void KeypadEnter(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease("numericEnter", pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IChannelFunctions Members
|
||||
|
||||
public void ChannelUp(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_CH_PLUS, pressRelease);
|
||||
}
|
||||
|
||||
public void ChannelDown(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_CH_MINUS, pressRelease);
|
||||
}
|
||||
|
||||
public void LastChannel(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_LAST, pressRelease);
|
||||
}
|
||||
|
||||
public void Guide(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_GUIDE, pressRelease);
|
||||
}
|
||||
|
||||
public void Info(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_INFO, pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IColorFunctions Members
|
||||
|
||||
public void Red(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_RED, pressRelease);
|
||||
}
|
||||
|
||||
public void Green(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_GREEN, pressRelease);
|
||||
}
|
||||
|
||||
public void Yellow(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_YELLOW, pressRelease);
|
||||
}
|
||||
|
||||
public void Blue(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_BLUE, pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IRoutingOutputs Members
|
||||
|
||||
public RoutingOutputPort AnyVideoOut { get; private set; }
|
||||
public RoutingOutputPort AnyAudioOut { get; private set; }
|
||||
public RoutingPortCollection<RoutingOutputPort> OutputPorts { get; private set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region ITransport Members
|
||||
|
||||
public void ChapMinus(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_REPLAY, pressRelease);
|
||||
}
|
||||
|
||||
public void ChapPlus(bool pressRelease)
|
||||
{
|
||||
}
|
||||
|
||||
public void FFwd(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_FSCAN, pressRelease);
|
||||
}
|
||||
|
||||
public void Pause(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_RSCAN, pressRelease);
|
||||
}
|
||||
|
||||
public void Play(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_PLAY, pressRelease);
|
||||
}
|
||||
|
||||
public void Record(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_RECORD, pressRelease);
|
||||
}
|
||||
|
||||
public void Rewind(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_RSCAN, pressRelease);
|
||||
}
|
||||
|
||||
public void Stop(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_STOP, pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IUsageTracking Members
|
||||
|
||||
public UsageTracking UsageTracker { get; set; }
|
||||
|
||||
#endregion
|
||||
}
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Presets;
|
||||
using PepperDash.Essentials.Core.Routing;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common
|
||||
{
|
||||
public class IRSetTopBoxBase : Device, ISetTopBoxControls, IUiDisplayInfo, IRoutingOutputs, IUsageTracking, IPower
|
||||
{
|
||||
public IrOutputPortController IrPort { get; private set; }
|
||||
|
||||
public uint DisplayUiType { get { return DisplayUiConstants.TypeDirecTv; } }
|
||||
|
||||
|
||||
public bool HasPresets { get; set; }
|
||||
public bool HasDvr { get; set; }
|
||||
public bool HasDpad { get; set; }
|
||||
public bool HasNumeric { get; set; }
|
||||
|
||||
public DevicePresetsModel PresetsModel { get; private set; }
|
||||
|
||||
public IRSetTopBoxBase(string key, string name, IrOutputPortController portCont,
|
||||
SetTopBoxPropertiesConfig props)
|
||||
: base(key, name)
|
||||
{
|
||||
IrPort = portCont;
|
||||
DeviceManager.AddDevice(portCont);
|
||||
|
||||
HasPresets = props.HasPresets;
|
||||
HasDvr = props.HasDvr;
|
||||
HasDpad = props.HasDpad;
|
||||
HasNumeric = props.HasNumeric;
|
||||
|
||||
HasKeypadAccessoryButton1 = true;
|
||||
KeypadAccessoryButton1Command = "Dash";
|
||||
KeypadAccessoryButton1Label = "-";
|
||||
|
||||
HasKeypadAccessoryButton2 = true;
|
||||
KeypadAccessoryButton2Command = "NumericEnter";
|
||||
KeypadAccessoryButton2Label = "Enter";
|
||||
|
||||
AnyVideoOut = new RoutingOutputPort(RoutingPortNames.AnyVideoOut, eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||
eRoutingPortConnectionType.Hdmi, null, this);
|
||||
AnyAudioOut = new RoutingOutputPort(RoutingPortNames.AnyAudioOut, eRoutingSignalType.Audio,
|
||||
eRoutingPortConnectionType.DigitalAudio, null, this);
|
||||
OutputPorts = new RoutingPortCollection<RoutingOutputPort> { AnyVideoOut, AnyAudioOut };
|
||||
|
||||
}
|
||||
|
||||
public void LoadPresets(string filePath)
|
||||
{
|
||||
PresetsModel = new DevicePresetsModel(Key + "-presets", this, filePath);
|
||||
DeviceManager.AddDevice(PresetsModel);
|
||||
}
|
||||
|
||||
|
||||
#region ISetTopBoxControls Members
|
||||
|
||||
public void DvrList(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_DVR, pressRelease);
|
||||
}
|
||||
|
||||
public void Replay(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_REPLAY, pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDPad Members
|
||||
|
||||
public void Up(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_UP_ARROW, pressRelease);
|
||||
}
|
||||
|
||||
public void Down(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_DN_ARROW, pressRelease);
|
||||
}
|
||||
|
||||
public void Left(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_LEFT_ARROW, pressRelease);
|
||||
}
|
||||
|
||||
public void Right(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_RIGHT_ARROW, pressRelease);
|
||||
}
|
||||
|
||||
public void Select(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_ENTER, pressRelease);
|
||||
}
|
||||
|
||||
public void Menu(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_MENU, pressRelease);
|
||||
}
|
||||
|
||||
public void Exit(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_EXIT, pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region INumericKeypad Members
|
||||
|
||||
public void Digit0(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_0, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit1(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_1, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit2(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_2, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit3(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_3, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit4(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_4, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit5(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_5, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit6(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_6, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit7(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_7, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit8(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_8, pressRelease);
|
||||
}
|
||||
|
||||
public void Digit9(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_9, pressRelease);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Defaults to true
|
||||
/// </summary>
|
||||
public bool HasKeypadAccessoryButton1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Defaults to "-"
|
||||
/// </summary>
|
||||
public string KeypadAccessoryButton1Label { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Defaults to "Dash"
|
||||
/// </summary>
|
||||
public string KeypadAccessoryButton1Command { get; set; }
|
||||
|
||||
public void KeypadAccessoryButton1(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(KeypadAccessoryButton1Command, pressRelease);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Defaults to true
|
||||
/// </summary>
|
||||
public bool HasKeypadAccessoryButton2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Defaults to "Enter"
|
||||
/// </summary>
|
||||
public string KeypadAccessoryButton2Label { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Defaults to "Enter"
|
||||
/// </summary>
|
||||
public string KeypadAccessoryButton2Command { get; set; }
|
||||
|
||||
public void KeypadAccessoryButton2(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(KeypadAccessoryButton2Command, pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ISetTopBoxNumericKeypad Members
|
||||
|
||||
/// <summary>
|
||||
/// Corresponds to "dash" IR command
|
||||
/// </summary>
|
||||
public void Dash(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease("dash", pressRelease);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Corresponds to "numericEnter" IR command
|
||||
/// </summary>
|
||||
public void KeypadEnter(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease("numericEnter", pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IChannelFunctions Members
|
||||
|
||||
public void ChannelUp(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_CH_PLUS, pressRelease);
|
||||
}
|
||||
|
||||
public void ChannelDown(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_CH_MINUS, pressRelease);
|
||||
}
|
||||
|
||||
public void LastChannel(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_LAST, pressRelease);
|
||||
}
|
||||
|
||||
public void Guide(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_GUIDE, pressRelease);
|
||||
}
|
||||
|
||||
public void Info(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_INFO, pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IColorFunctions Members
|
||||
|
||||
public void Red(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_RED, pressRelease);
|
||||
}
|
||||
|
||||
public void Green(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_GREEN, pressRelease);
|
||||
}
|
||||
|
||||
public void Yellow(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_YELLOW, pressRelease);
|
||||
}
|
||||
|
||||
public void Blue(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_BLUE, pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IRoutingOutputs Members
|
||||
|
||||
public RoutingOutputPort AnyVideoOut { get; private set; }
|
||||
public RoutingOutputPort AnyAudioOut { get; private set; }
|
||||
public RoutingPortCollection<RoutingOutputPort> OutputPorts { get; private set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region ITransport Members
|
||||
|
||||
public void ChapMinus(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_REPLAY, pressRelease);
|
||||
}
|
||||
|
||||
public void ChapPlus(bool pressRelease)
|
||||
{
|
||||
}
|
||||
|
||||
public void FFwd(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_FSCAN, pressRelease);
|
||||
}
|
||||
|
||||
public void Pause(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_RSCAN, pressRelease);
|
||||
}
|
||||
|
||||
public void Play(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_PLAY, pressRelease);
|
||||
}
|
||||
|
||||
public void Record(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_RECORD, pressRelease);
|
||||
}
|
||||
|
||||
public void Rewind(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_RSCAN, pressRelease);
|
||||
}
|
||||
|
||||
public void Stop(bool pressRelease)
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_STOP, pressRelease);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IUsageTracking Members
|
||||
|
||||
public UsageTracking UsageTracker { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region IPower Members
|
||||
|
||||
public void PowerOn()
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_POWER_ON, true);
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_POWER_ON, false);
|
||||
|
||||
}
|
||||
|
||||
public void PowerOff()
|
||||
{
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_POWER_OFF, true);
|
||||
IrPort.PressRelease(IROutputStandardCommands.IROut_POWER_OFF, false);
|
||||
|
||||
}
|
||||
|
||||
public void PowerToggle()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public BoolFeedback PowerIsOnFeedback
|
||||
{
|
||||
get { throw new NotImplementedException(); }
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user