mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-19 14:45:02 +00:00
Compare commits
111 Commits
1.7.3-hotf
...
1.8.0-rc-1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2da8f8c9a8 | ||
|
|
743accd980 | ||
|
|
b445f68466 | ||
|
|
847e106b8d | ||
|
|
57f2d7c938 | ||
|
|
f0415d0d05 | ||
|
|
07fbe102bd | ||
|
|
319909539c | ||
|
|
00589488ac | ||
|
|
f25219c20a | ||
|
|
c5aef18943 | ||
|
|
70d4a7054f | ||
|
|
b20009b247 | ||
|
|
9588564633 | ||
|
|
eef3b5fb31 | ||
|
|
7078ba55c7 | ||
|
|
e06be3ebe9 | ||
|
|
10046a9ed4 | ||
|
|
51f294c37f | ||
|
|
1990201215 | ||
|
|
be78d17af5 | ||
|
|
8a6d5ebd56 | ||
|
|
93c0b33958 | ||
|
|
dca21aa4dc | ||
|
|
ac09267173 | ||
|
|
ef63c1db02 | ||
|
|
f828cbecbd | ||
|
|
890abf4383 | ||
|
|
52c96cc2c3 | ||
|
|
4ab3cdb1ff | ||
|
|
2dfd647f63 | ||
|
|
7f054d5e98 | ||
|
|
43297c0341 | ||
|
|
6280aa90c9 | ||
|
|
ca497c8f47 | ||
|
|
1da481a8db | ||
|
|
c04d79931d | ||
|
|
dbd3ab2f70 | ||
|
|
36b5faa3d9 | ||
|
|
07bf74ab19 | ||
|
|
e356f57e1a | ||
|
|
86ad88969e | ||
|
|
7020480159 | ||
|
|
bc54856392 | ||
|
|
24a435c965 | ||
|
|
2897ec1d83 | ||
|
|
f075412a86 | ||
|
|
4f5bb4dc46 | ||
|
|
382c35924c | ||
|
|
88c332729f | ||
|
|
e9a6aa641b | ||
|
|
16bc2ca381 | ||
|
|
2fc1f45161 | ||
|
|
ef7eae50e4 | ||
|
|
2c50efd4c5 | ||
|
|
e7b322c303 | ||
|
|
08491bdf2a | ||
|
|
f1fa3c07fd | ||
|
|
b19b4ae26e | ||
|
|
7f8215199d | ||
|
|
dd060c4442 | ||
|
|
e782339dcc | ||
|
|
766ed3ab51 | ||
|
|
cd0e3f7001 | ||
|
|
29d5ecb13f | ||
|
|
2987f600bb | ||
|
|
5c23aeca48 | ||
|
|
6ef8ba3639 | ||
|
|
4f7ad4ccb9 | ||
|
|
e03b0dc1bb | ||
|
|
b75153b848 | ||
|
|
d70d33c5e3 | ||
|
|
7eb6748682 | ||
|
|
c92c750e55 | ||
|
|
225c6281b9 | ||
|
|
249e9f372e | ||
|
|
4dfab9a287 | ||
|
|
ec43749ba4 | ||
|
|
2e4202ccce | ||
|
|
4c16dd07b5 | ||
|
|
0c4ad1c4df | ||
|
|
eb90fb343d | ||
|
|
2967a0f968 | ||
|
|
7b2a8b17b7 | ||
|
|
89ca614d3d | ||
|
|
355df1341e | ||
|
|
78c17cd729 | ||
|
|
504c21204f | ||
|
|
8dba5a335b | ||
|
|
3d6d578663 | ||
|
|
a5e9d7ba55 | ||
|
|
5eb65fd723 | ||
|
|
e0dcde5c35 | ||
|
|
c6cfecdbbb | ||
|
|
30bdac93ee | ||
|
|
1228431bc2 | ||
|
|
5a2070de3f | ||
|
|
bc1645065c | ||
|
|
21f9795bcd | ||
|
|
a69bc94945 | ||
|
|
864c8ddf77 | ||
|
|
5764149306 | ||
|
|
9abd911a95 | ||
|
|
968f85b04e | ||
|
|
6e09ef35ab | ||
|
|
a36bce4d5e | ||
|
|
5374e58197 | ||
|
|
cbfa7d869b | ||
|
|
dbec078dae | ||
|
|
1b0d9ae904 | ||
|
|
24e59e1474 |
164
.github/workflows/docker.yml
vendored
164
.github/workflows/docker.yml
vendored
@@ -78,16 +78,9 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: Version
|
name: Version
|
||||||
path: ${{env.GITHUB_HOME}}\output\version.txt
|
path: ${{env.GITHUB_HOME}}\output\version.txt
|
||||||
# Create the release on the source repo
|
|
||||||
- name: Create tag for non-rc builds
|
|
||||||
if: contains(env.VERSION, 'alpha') || contains(env.VERSION, 'beta')
|
|
||||||
run: |
|
|
||||||
git tag $($Env:VERSION)
|
|
||||||
git push --tags origin
|
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
id: create_release
|
id: create_release
|
||||||
# using contributor's version to allow for pointing at the right commit
|
# using contributor's version to allow for pointing at the right commit
|
||||||
if: contains(env.VERSION,'-rc-') || contains(env.VERSION,'-hotfix-')
|
|
||||||
uses: fleskesvor/create-release@feature/support-target-commitish
|
uses: fleskesvor/create-release@feature/support-target-commitish
|
||||||
with:
|
with:
|
||||||
tag_name: ${{ env.VERSION }}
|
tag_name: ${{ env.VERSION }}
|
||||||
@@ -150,160 +143,3 @@ jobs:
|
|||||||
run: nuget push **/*.nupkg -source github
|
run: nuget push **/*.nupkg -source github
|
||||||
- name: Publish nuget package to nuget.org
|
- name: Publish nuget package to nuget.org
|
||||||
run: nuget push **/*.nupkg -Source https://api.nuget.org/v3/index.json
|
run: nuget push **/*.nupkg -Source https://api.nuget.org/v3/index.json
|
||||||
# This step always runs and pushes the build to the internal build rep
|
|
||||||
Internal_Push_Output:
|
|
||||||
needs: Build_Project
|
|
||||||
runs-on: windows-latest
|
|
||||||
steps:
|
|
||||||
- name: check Github ref
|
|
||||||
run: ${{toJson(github.ref)}}
|
|
||||||
# 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"
|
|
||||||
echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
|
||||||
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","*.md","*.cplz","*.json","*.dll","*.clz")
|
|
||||||
Get-ChildItem -Path .\output\* | Copy-Item -Destination .\
|
|
||||||
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 main 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, 'main') || contains(github.ref, '/release/')
|
|
||||||
steps:
|
|
||||||
# Checkout the repo
|
|
||||||
- name: check Github ref
|
|
||||||
run: ${{toJson(github.ref)}}
|
|
||||||
- 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"
|
|
||||||
echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
|
||||||
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","*.md","*.cplz","*.json","*.dll","*.clz")
|
|
||||||
Get-ChildItem -Path .\output\* | Copy-Item -Destination .\
|
|
||||||
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 ./
|
|
||||||
|
|||||||
145
.github/workflows/main.yml
vendored
145
.github/workflows/main.yml
vendored
@@ -123,148 +123,3 @@ jobs:
|
|||||||
run: nuget push **/*.nupkg -source github
|
run: nuget push **/*.nupkg -source github
|
||||||
- name: Publish nuget package to nuget.org
|
- name: Publish nuget package to nuget.org
|
||||||
run: nuget push **/*.nupkg -Source https://api.nuget.org/v3/index.json
|
run: nuget push **/*.nupkg -Source https://api.nuget.org/v3/index.json
|
||||||
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"
|
|
||||||
echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
|
||||||
Remove-Item -Path ./Version/version.txt
|
|
||||||
Remove-Item -Path ./Version
|
|
||||||
# Checkout/Create the branch
|
|
||||||
- name: Checkout main branch
|
|
||||||
run: git checkout main
|
|
||||||
# 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","*.md","*.cplz","*.json","*.dll","*.clz")
|
|
||||||
Get-ChildItem -Path .\output\* | Copy-Item -Destination .\
|
|
||||||
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: git push -u origin main --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 main or release/ runs and pushes the build to the public build repo
|
|
||||||
Public_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/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"
|
|
||||||
echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
|
||||||
Remove-Item -Path ./Version/version.txt
|
|
||||||
Remove-Item -Path ./Version
|
|
||||||
# Checkout main branch
|
|
||||||
- name: Create new branch
|
|
||||||
run: git checkout main
|
|
||||||
# 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","*.md","*.cplz","*.json","*.dll","*.clz")
|
|
||||||
Get-ChildItem -Path .\output\* | Copy-Item -Destination .\
|
|
||||||
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: git push -u origin main --force
|
|
||||||
# Push the tags
|
|
||||||
- name: Push tags
|
|
||||||
run: git push --tags origin
|
|
||||||
- name: Check Directory
|
|
||||||
run: Get-ChildItem ./
|
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
if (CrestronEnvironment.DevicePlatform != eDevicePlatform.Server) // Handles 3-series running Windows CE OS
|
if (CrestronEnvironment.DevicePlatform != eDevicePlatform.Server) // Handles 3-series running Windows CE OS
|
||||||
{
|
{
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on 3-series Appliance", Global.AssemblyVersion);
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on {1} Appliance", Global.AssemblyVersion, Global.ProcessorSeries.ToString());
|
||||||
|
|
||||||
// Check if User/ProgramX exists
|
// Check if User/ProgramX exists
|
||||||
if (Directory.Exists(Global.ApplicationDirectoryPathPrefix + dirSeparator + "User"
|
if (Directory.Exists(Global.ApplicationDirectoryPathPrefix + dirSeparator + "User"
|
||||||
@@ -323,7 +323,12 @@ namespace PepperDash.Essentials
|
|||||||
// Skip this to prevent unnecessary warnings
|
// Skip this to prevent unnecessary warnings
|
||||||
if (devConf.Key == "processor")
|
if (devConf.Key == "processor")
|
||||||
{
|
{
|
||||||
if (devConf.Type.ToLower() != Global.ControlSystem.ControllerPrompt.ToLower())
|
var prompt = Global.ControlSystem.ControllerPrompt;
|
||||||
|
|
||||||
|
var typeMatch = String.Equals(devConf.Type, prompt, StringComparison.OrdinalIgnoreCase) &&
|
||||||
|
String.Equals(devConf.Type, prompt.Replace("-", ""), StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
|
if (!typeMatch)
|
||||||
Debug.Console(0,
|
Debug.Console(0,
|
||||||
"WARNING: Config file defines processor type as '{0}' but actual processor is '{1}'! Some ports may not be available",
|
"WARNING: Config file defines processor type as '{0}' but actual processor is '{1}'! Some ports may not be available",
|
||||||
devConf.Type.ToUpper(), Global.ControlSystem.ControllerPrompt.ToUpper());
|
devConf.Type.ToUpper(), Global.ControlSystem.ControllerPrompt.ToUpper());
|
||||||
@@ -378,11 +383,11 @@ namespace PepperDash.Essentials
|
|||||||
if (newDev != null)
|
if (newDev != null)
|
||||||
DeviceManager.AddDevice(newDev);
|
DeviceManager.AddDevice(newDev);
|
||||||
else
|
else
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "ERROR: Cannot load unknown device type '{0}', key '{1}'.", devConf.Type, devConf.Key);
|
Debug.Console(0, Debug.ErrorLogLevel.Error, "ERROR: Cannot load unknown device type '{0}', key '{1}'.", devConf.Type, devConf.Key);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "ERROR: Creating device {0}. Skipping device. \r{1}", devConf.Key, e);
|
Debug.Console(0, Debug.ErrorLogLevel.Error, "ERROR: Creating device {0}. Skipping device. \r{1}", devConf.Key, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "All Devices Loaded.");
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "All Devices Loaded.");
|
||||||
|
|||||||
@@ -30,27 +30,29 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
|
|
||||||
foreach (var display in displays.Values.Cast<DisplayBase>())
|
foreach (var display in displays.Values.Cast<DisplayBase>())
|
||||||
{
|
{
|
||||||
Debug.Console(2, this, "Setting up Static Asset for {0}", display.Key);
|
var disp = display; // Local scope variable
|
||||||
|
|
||||||
display.UsageTracker = new UsageTracking(display) { UsageIsTracked = true };
|
Debug.Console(2, this, "Setting up Static Asset for {0}", disp.Key);
|
||||||
display.UsageTracker.DeviceUsageEnded += UsageTracker_DeviceUsageEnded;
|
|
||||||
|
disp.UsageTracker = new UsageTracking(disp) { UsageIsTracked = true };
|
||||||
|
disp.UsageTracker.DeviceUsageEnded += UsageTracker_DeviceUsageEnded;
|
||||||
|
|
||||||
var dispPowerOnAction = new Action<bool>(b =>
|
var dispPowerOnAction = new Action<bool>(b =>
|
||||||
{
|
{
|
||||||
if (!b)
|
if (!b)
|
||||||
{
|
{
|
||||||
display.PowerOn();
|
disp.PowerOn();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
var dispPowerOffAction = new Action<bool>(b =>
|
var dispPowerOffAction = new Action<bool>(b =>
|
||||||
{
|
{
|
||||||
if (!b)
|
if (!b)
|
||||||
{
|
{
|
||||||
display.PowerOff();
|
disp.PowerOff();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var deviceConfig = ConfigReader.ConfigObject.GetDeviceForKey(display.Key);
|
var deviceConfig = ConfigReader.ConfigObject.GetDeviceForKey(disp.Key);
|
||||||
|
|
||||||
FusionAsset tempAsset;
|
FusionAsset tempAsset;
|
||||||
|
|
||||||
@@ -63,30 +65,36 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
{
|
{
|
||||||
// Create a new asset
|
// Create a new asset
|
||||||
tempAsset = new FusionAsset(FusionRoomGuids.GetNextAvailableAssetNumber(FusionRoom),
|
tempAsset = new FusionAsset(FusionRoomGuids.GetNextAvailableAssetNumber(FusionRoom),
|
||||||
display.Name, "Display", "");
|
disp.Name, "Display", "");
|
||||||
FusionStaticAssets.Add(deviceConfig.Uid, tempAsset);
|
FusionStaticAssets.Add(deviceConfig.Uid, tempAsset);
|
||||||
}
|
}
|
||||||
|
|
||||||
var dispAsset = FusionRoom.CreateStaticAsset(tempAsset.SlotNumber, tempAsset.Name, "Display",
|
var dispAsset = FusionRoom.CreateStaticAsset(tempAsset.SlotNumber, tempAsset.Name, "Display",
|
||||||
tempAsset.InstanceId);
|
tempAsset.InstanceId);
|
||||||
dispAsset.PowerOn.OutputSig.UserObject = dispPowerOnAction;
|
|
||||||
dispAsset.PowerOff.OutputSig.UserObject = dispPowerOffAction;
|
|
||||||
|
|
||||||
var defaultTwoWayDisplay = display as IHasPowerControlWithFeedback;
|
if (dispAsset != null)
|
||||||
|
{
|
||||||
|
dispAsset.PowerOn.OutputSig.UserObject = dispPowerOnAction;
|
||||||
|
dispAsset.PowerOff.OutputSig.UserObject = dispPowerOffAction;
|
||||||
|
|
||||||
|
// Use extension methods
|
||||||
|
dispAsset.TrySetMakeModel(disp);
|
||||||
|
dispAsset.TryLinkAssetErrorToCommunication(disp);
|
||||||
|
}
|
||||||
|
|
||||||
|
var defaultTwoWayDisplay = disp as IHasPowerControlWithFeedback;
|
||||||
if (defaultTwoWayDisplay != null)
|
if (defaultTwoWayDisplay != null)
|
||||||
{
|
{
|
||||||
defaultTwoWayDisplay.PowerIsOnFeedback.LinkInputSig(FusionRoom.DisplayPowerOn.InputSig);
|
defaultTwoWayDisplay.PowerIsOnFeedback.LinkInputSig(FusionRoom.DisplayPowerOn.InputSig);
|
||||||
if (display is IDisplayUsage)
|
if (disp is IDisplayUsage)
|
||||||
{
|
{
|
||||||
(display as IDisplayUsage).LampHours.LinkInputSig(FusionRoom.DisplayUsage.InputSig);
|
(disp as IDisplayUsage).LampHours.LinkInputSig(FusionRoom.DisplayUsage.InputSig);
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultTwoWayDisplay.PowerIsOnFeedback.LinkInputSig(dispAsset.PowerOn.InputSig);
|
if(dispAsset != null)
|
||||||
|
defaultTwoWayDisplay.PowerIsOnFeedback.LinkInputSig(dispAsset.PowerOn.InputSig);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use extension methods
|
|
||||||
dispAsset.TrySetMakeModel(display);
|
|
||||||
dispAsset.TryLinkAssetErrorToCommunication(display);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
@@ -5,30 +5,62 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
{
|
{
|
||||||
public class EssentialsTechRoomConfig
|
public class EssentialsTechRoomConfig
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The key of the dummy device used to enable routing
|
||||||
|
/// </summary>
|
||||||
[JsonProperty("dummySourceKey")]
|
[JsonProperty("dummySourceKey")]
|
||||||
public string DummySourceKey { get; set; }
|
public string DummySourceKey { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The keys of the displays assigned to this room
|
||||||
|
/// </summary>
|
||||||
[JsonProperty("displays")]
|
[JsonProperty("displays")]
|
||||||
public List<string> Displays;
|
public List<string> Displays { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The keys of the tuners assinged to this room
|
||||||
|
/// </summary>
|
||||||
[JsonProperty("tuners")]
|
[JsonProperty("tuners")]
|
||||||
public List<string> Tuners;
|
public List<string> Tuners { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// PIN to access the room as a normal user
|
||||||
|
/// </summary>
|
||||||
[JsonProperty("userPin")]
|
[JsonProperty("userPin")]
|
||||||
public string UserPin;
|
public string UserPin { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// PIN to access the room as a tech user
|
||||||
|
/// </summary>
|
||||||
[JsonProperty("techPin")]
|
[JsonProperty("techPin")]
|
||||||
public string TechPin;
|
public string TechPin { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Name of the presets file. Path prefix is assumed to be /html/presets/lists/
|
||||||
|
/// </summary>
|
||||||
[JsonProperty("presetsFileName")]
|
[JsonProperty("presetsFileName")]
|
||||||
public string PresetsFileName;
|
public string PresetsFileName { get; set; }
|
||||||
|
|
||||||
[JsonProperty("scheduledEvents")]
|
[JsonProperty("scheduledEvents")]
|
||||||
public List<ScheduledEventConfig> ScheduledEvents;
|
public List<ScheduledEventConfig> ScheduledEvents { get; set; }
|
||||||
|
|
||||||
[JsonProperty("isPrimary")] public bool IsPrimary;
|
/// <summary>
|
||||||
|
/// Indicates that the room is the primary when true
|
||||||
|
/// </summary>
|
||||||
|
[JsonProperty("isPrimary")]
|
||||||
|
public bool IsPrimary { get; set; }
|
||||||
|
|
||||||
[JsonProperty("isTvPresetsProvider")] public bool IsTvPresetsProvider;
|
/// <summary>
|
||||||
|
/// Indicates which tuners should mirror preset recall when two rooms are configured in a primary->secondary scenario
|
||||||
|
/// </summary>
|
||||||
|
[JsonProperty("mirroredTuners")]
|
||||||
|
public Dictionary<uint, string> MirroredTuners { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indicates the room
|
||||||
|
/// </summary>
|
||||||
|
[JsonProperty("isTvPresetsProvider")]
|
||||||
|
public bool IsTvPresetsProvider;
|
||||||
|
|
||||||
public EssentialsTechRoomConfig()
|
public EssentialsTechRoomConfig()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -274,10 +274,23 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
CallTypeFeedback = new IntFeedback(() => 0);
|
CallTypeFeedback = new IntFeedback(() => 0);
|
||||||
|
|
||||||
SourceListKey = "default";
|
SetSourceListKey();
|
||||||
EnablePowerOnToLastSource = true;
|
EnablePowerOnToLastSource = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetSourceListKey()
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(PropertiesConfig.SourceListKey))
|
||||||
|
{
|
||||||
|
SetSourceListKey(PropertiesConfig.SourceListKey);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetSourceListKey(Key);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void InitializeDisplay(DisplayBase disp)
|
void InitializeDisplay(DisplayBase disp)
|
||||||
{
|
{
|
||||||
if (disp != null)
|
if (disp != null)
|
||||||
@@ -333,7 +346,6 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
this.LogoUrlLightBkgnd = PropertiesConfig.LogoLight.GetLogoUrlLight();
|
this.LogoUrlLightBkgnd = PropertiesConfig.LogoLight.GetLogoUrlLight();
|
||||||
this.LogoUrlDarkBkgnd = PropertiesConfig.LogoDark.GetLogoUrlDark();
|
this.LogoUrlDarkBkgnd = PropertiesConfig.LogoDark.GetLogoUrlDark();
|
||||||
this.SourceListKey = PropertiesConfig.SourceListKey;
|
|
||||||
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
|
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
|
||||||
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
|
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
|
||||||
|
|
||||||
|
|||||||
@@ -201,11 +201,25 @@ namespace PepperDash.Essentials
|
|||||||
IsCoolingDownFeedback.FireUpdate();
|
IsCoolingDownFeedback.FireUpdate();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetSourceListKey();
|
||||||
|
|
||||||
SourceListKey = "default";
|
|
||||||
EnablePowerOnToLastSource = true;
|
EnablePowerOnToLastSource = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetSourceListKey()
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(PropertiesConfig.SourceListKey))
|
||||||
|
{
|
||||||
|
SetSourceListKey(PropertiesConfig.SourceListKey);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetSourceListKey(Key);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
protected override void CustomSetConfig(DeviceConfig config)
|
protected override void CustomSetConfig(DeviceConfig config)
|
||||||
{
|
{
|
||||||
var newPropertiesConfig = JsonConvert.DeserializeObject<EssentialsHuddleRoomPropertiesConfig>(config.Properties.ToString());
|
var newPropertiesConfig = JsonConvert.DeserializeObject<EssentialsHuddleRoomPropertiesConfig>(config.Properties.ToString());
|
||||||
@@ -256,7 +270,6 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
this.LogoUrlLightBkgnd = PropertiesConfig.LogoLight.GetLogoUrlLight();
|
this.LogoUrlLightBkgnd = PropertiesConfig.LogoLight.GetLogoUrlLight();
|
||||||
this.LogoUrlDarkBkgnd = PropertiesConfig.LogoDark.GetLogoUrlDark();
|
this.LogoUrlDarkBkgnd = PropertiesConfig.LogoDark.GetLogoUrlDark();
|
||||||
this.SourceListKey = PropertiesConfig.SourceListKey;
|
|
||||||
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
|
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
|
||||||
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
|
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using PepperDash.Essentials.Room.Config;
|
|||||||
using PepperDash.Essentials.Devices.Common.Codec;
|
using PepperDash.Essentials.Devices.Common.Codec;
|
||||||
using PepperDash.Essentials.Devices.Common.VideoCodec;
|
using PepperDash.Essentials.Devices.Common.VideoCodec;
|
||||||
using PepperDash.Essentials.Devices.Common.AudioCodec;
|
using PepperDash.Essentials.Devices.Common.AudioCodec;
|
||||||
using PepperDash_Essentials_Core.DeviceTypeInterfaces;
|
using PepperDash.Essentials.Core.DeviceTypeInterfaces;
|
||||||
|
|
||||||
namespace PepperDash.Essentials
|
namespace PepperDash.Essentials
|
||||||
{
|
{
|
||||||
@@ -51,20 +51,6 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
//************************
|
//************************
|
||||||
|
|
||||||
public override string SourceListKey
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _SourceListKey;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_SourceListKey = value;
|
|
||||||
SetCodecExternalSources();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override Func<bool> OnFeedbackFunc
|
protected override Func<bool> OnFeedbackFunc
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -338,7 +324,8 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
CallTypeFeedback = new IntFeedback(() => 0);
|
CallTypeFeedback = new IntFeedback(() => 0);
|
||||||
|
|
||||||
SourceListKey = "default";
|
SetSourceListKey();
|
||||||
|
|
||||||
EnablePowerOnToLastSource = true;
|
EnablePowerOnToLastSource = true;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@@ -347,6 +334,21 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void SetSourceListKey()
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(PropertiesConfig.SourceListKey))
|
||||||
|
{
|
||||||
|
SetSourceListKey(PropertiesConfig.SourceListKey);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetSourceListKey(Key);
|
||||||
|
}
|
||||||
|
|
||||||
|
SetCodecExternalSources();
|
||||||
|
}
|
||||||
|
|
||||||
protected override void CustomSetConfig(DeviceConfig config)
|
protected override void CustomSetConfig(DeviceConfig config)
|
||||||
{
|
{
|
||||||
var newPropertiesConfig = JsonConvert.DeserializeObject<EssentialsHuddleVtc1PropertiesConfig>(config.Properties.ToString());
|
var newPropertiesConfig = JsonConvert.DeserializeObject<EssentialsHuddleVtc1PropertiesConfig>(config.Properties.ToString());
|
||||||
@@ -370,13 +372,14 @@ namespace PepperDash.Essentials
|
|||||||
this.LogoUrlLightBkgnd = PropertiesConfig.LogoLight.GetLogoUrlLight();
|
this.LogoUrlLightBkgnd = PropertiesConfig.LogoLight.GetLogoUrlLight();
|
||||||
this.LogoUrlDarkBkgnd = PropertiesConfig.LogoDark.GetLogoUrlDark();
|
this.LogoUrlDarkBkgnd = PropertiesConfig.LogoDark.GetLogoUrlDark();
|
||||||
|
|
||||||
this.SourceListKey = PropertiesConfig.SourceListKey;
|
|
||||||
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
|
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
|
||||||
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
|
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
|
||||||
|
|
||||||
return base.CustomActivate();
|
return base.CustomActivate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -597,12 +600,21 @@ namespace PepperDash.Essentials
|
|||||||
if (VideoCodec.UsageTracker.InUseTracker.InUseFeedback.BoolValue)
|
if (VideoCodec.UsageTracker.InUseTracker.InUseFeedback.BoolValue)
|
||||||
{
|
{
|
||||||
Debug.Console(1, this, "Video Codec in use, deactivating standby on codec");
|
Debug.Console(1, this, "Video Codec in use, deactivating standby on codec");
|
||||||
|
VideoCodec.StandbyDeactivate();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VideoCodec.StandbyIsOnFeedback.BoolValue)
|
if (VideoCodec.StandbyIsOnFeedback.BoolValue)
|
||||||
{
|
{
|
||||||
VideoCodec.StandbyDeactivate();
|
VideoCodec.StandbyDeactivate();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Video codec not in standby. No need to wake.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Room OnFeedback state: {0}", OnFeedback.BoolValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
// report back when done
|
// report back when done
|
||||||
|
|||||||
@@ -373,13 +373,32 @@ Params: {2}"
|
|||||||
uint i;
|
uint i;
|
||||||
if (_config.IsPrimary)
|
if (_config.IsPrimary)
|
||||||
{
|
{
|
||||||
i = 0;
|
Debug.Console(1, this, "Linking Primary system Tuner Preset Mirroring");
|
||||||
foreach (var feedback in CurrentPresetsFeedbacks)
|
if (_config.MirroredTuners != null && _config.MirroredTuners.Count > 0)
|
||||||
{
|
{
|
||||||
feedback.Value.LinkInputSig(trilist.StringInput[(uint) (joinMap.CurrentPreset.JoinNumber + i)]);
|
foreach (var tuner in _config.MirroredTuners)
|
||||||
i++;
|
{
|
||||||
|
var f = CurrentPresetsFeedbacks[tuner.Value];
|
||||||
|
|
||||||
|
if (f == null)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Unable to find feedback with key: {0}", tuner.Value);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var join = joinMap.CurrentPreset.JoinNumber + tuner.Key;
|
||||||
|
f.LinkInputSig(trilist.StringInput[(uint)(join)]);
|
||||||
|
Debug.Console(1, this, "Linked Current Preset feedback for tuner: {0} to serial join: {1}", tuner.Value, join);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//i = 0;
|
||||||
|
//foreach (var feedback in CurrentPresetsFeedbacks)
|
||||||
|
//{
|
||||||
|
// feedback.Value.LinkInputSig(trilist.StringInput[(uint) (joinMap.CurrentPreset.JoinNumber + i)]);
|
||||||
|
// i++;
|
||||||
|
//}
|
||||||
|
|
||||||
trilist.OnlineStatusChange += (device, args) =>
|
trilist.OnlineStatusChange += (device, args) =>
|
||||||
{
|
{
|
||||||
if (!args.DeviceOnLine)
|
if (!args.DeviceOnLine)
|
||||||
@@ -395,15 +414,35 @@ Params: {2}"
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
i = 0;
|
|
||||||
foreach (var setTopBox in _tuners)
|
|
||||||
{
|
{
|
||||||
var tuner = setTopBox;
|
Debug.Console(1, this, "Linking Secondary system Tuner Preset Mirroring");
|
||||||
|
|
||||||
trilist.SetStringSigAction(joinMap.CurrentPreset.JoinNumber + i, s => _tunerPresets.Dial(s, tuner.Value));
|
if (_config.MirroredTuners != null && _config.MirroredTuners.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var tuner in _config.MirroredTuners)
|
||||||
|
{
|
||||||
|
var t = _tuners[tuner.Value];
|
||||||
|
|
||||||
i++;
|
if (t == null)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Unable to find tuner with key: {0}", tuner.Value);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var join = joinMap.CurrentPreset.JoinNumber + tuner.Key;
|
||||||
|
trilist.SetStringSigAction(join, s => _tunerPresets.Dial(s, t));
|
||||||
|
Debug.Console(1, this, "Linked preset recall action for tuner: {0} to serial join: {1}", tuner.Value, join);
|
||||||
|
}
|
||||||
|
|
||||||
|
//foreach (var setTopBox in _tuners)
|
||||||
|
//{
|
||||||
|
// var tuner = setTopBox;
|
||||||
|
|
||||||
|
// trilist.SetStringSigAction(joinMap.CurrentPreset.JoinNumber + i, s => _tunerPresets.Dial(s, tuner.Value));
|
||||||
|
|
||||||
|
//}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
|
|
||||||
[JoinName("PirSensitivityInVacantState")]
|
[JoinName("PirSensitivityInVacantState")]
|
||||||
public JoinDataComplete PirSensitivityInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 },
|
public JoinDataComplete PirSensitivityInVacantState = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Occ Sensor Ultrasonic Sensitivity in Vacant State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
|
new JoinMetadata { Description = "Occ Sensor PIR Sensitivity in Vacant State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
|
||||||
|
|
||||||
[JoinName("Name")]
|
[JoinName("Name")]
|
||||||
public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
||||||
|
|||||||
@@ -1,131 +1,131 @@
|
|||||||
using System;
|
using System;
|
||||||
using PepperDash.Essentials.Core;
|
using PepperDash.Essentials.Core;
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.Bridges.JoinMaps
|
namespace PepperDash.Essentials.Core.Bridges.JoinMaps
|
||||||
{
|
{
|
||||||
public class GlsPartitionSensorJoinMap : JoinMapBaseAdvanced
|
public class GlsPartitionSensorJoinMap : JoinMapBaseAdvanced
|
||||||
{
|
{
|
||||||
[JoinName("IsOnline")]
|
[JoinName("IsOnline")]
|
||||||
public JoinDataComplete IsOnline = new JoinDataComplete(
|
public JoinDataComplete IsOnline = new JoinDataComplete(
|
||||||
new JoinData
|
new JoinData
|
||||||
{
|
{
|
||||||
JoinNumber = 1,
|
JoinNumber = 1,
|
||||||
JoinSpan = 1
|
JoinSpan = 1
|
||||||
},
|
},
|
||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "Sensor Is Online",
|
Description = "Sensor Is Online",
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||||
JoinType = eJoinType.Digital
|
JoinType = eJoinType.Digital
|
||||||
});
|
});
|
||||||
|
|
||||||
[JoinName("Name")]
|
[JoinName("Name")]
|
||||||
public JoinDataComplete Name = new JoinDataComplete(
|
public JoinDataComplete Name = new JoinDataComplete(
|
||||||
new JoinData
|
new JoinData
|
||||||
{
|
{
|
||||||
JoinNumber = 1,
|
JoinNumber = 1,
|
||||||
JoinSpan = 1
|
JoinSpan = 1
|
||||||
},
|
},
|
||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "Sensor Name",
|
Description = "Sensor Name",
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||||
JoinType = eJoinType.Serial
|
JoinType = eJoinType.Serial
|
||||||
});
|
});
|
||||||
|
|
||||||
[JoinName("Enable")]
|
[JoinName("Enable")]
|
||||||
public JoinDataComplete Enable = new JoinDataComplete(
|
public JoinDataComplete Enable = new JoinDataComplete(
|
||||||
new JoinData
|
new JoinData
|
||||||
{
|
{
|
||||||
JoinNumber = 2,
|
JoinNumber = 2,
|
||||||
JoinSpan = 1
|
JoinSpan = 1
|
||||||
},
|
},
|
||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "Sensor Enable",
|
Description = "Sensor Enable",
|
||||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||||
JoinType = eJoinType.Digital
|
JoinType = eJoinType.Digital
|
||||||
});
|
});
|
||||||
|
|
||||||
[JoinName("PartitionSensed")]
|
[JoinName("PartitionSensed")]
|
||||||
public JoinDataComplete PartitionSensed = new JoinDataComplete(
|
public JoinDataComplete PartitionSensed = new JoinDataComplete(
|
||||||
new JoinData
|
new JoinData
|
||||||
{
|
{
|
||||||
JoinNumber = 3,
|
JoinNumber = 3,
|
||||||
JoinSpan = 1
|
JoinSpan = 1
|
||||||
},
|
},
|
||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "Sensor Partition Sensed",
|
Description = "Sensor Partition Sensed",
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||||
JoinType = eJoinType.Digital
|
JoinType = eJoinType.Digital
|
||||||
});
|
});
|
||||||
|
|
||||||
[JoinName("PartitionNotSensed")]
|
[JoinName("PartitionNotSensed")]
|
||||||
public JoinDataComplete PartitionNotSensed = new JoinDataComplete(
|
public JoinDataComplete PartitionNotSensed = new JoinDataComplete(
|
||||||
new JoinData
|
new JoinData
|
||||||
{
|
{
|
||||||
JoinNumber = 4,
|
JoinNumber = 4,
|
||||||
JoinSpan = 1
|
JoinSpan = 1
|
||||||
},
|
},
|
||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "Sensor Partition Not Sensed",
|
Description = "Sensor Partition Not Sensed",
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||||
JoinType = eJoinType.Digital
|
JoinType = eJoinType.Digital
|
||||||
});
|
});
|
||||||
|
|
||||||
[JoinName("IncreaseSensitivity")]
|
[JoinName("IncreaseSensitivity")]
|
||||||
public JoinDataComplete IncreaseSensitivity = new JoinDataComplete(
|
public JoinDataComplete IncreaseSensitivity = new JoinDataComplete(
|
||||||
new JoinData
|
new JoinData
|
||||||
{
|
{
|
||||||
JoinNumber = 6,
|
JoinNumber = 6,
|
||||||
JoinSpan = 1
|
JoinSpan = 1
|
||||||
},
|
},
|
||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "Sensor Increase Sensitivity",
|
Description = "Sensor Increase Sensitivity",
|
||||||
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
||||||
JoinType = eJoinType.Digital
|
JoinType = eJoinType.Digital
|
||||||
});
|
});
|
||||||
|
|
||||||
[JoinName("DecreaseSensitivity")]
|
[JoinName("DecreaseSensitivity")]
|
||||||
public JoinDataComplete DecreaseSensitivity = new JoinDataComplete(
|
public JoinDataComplete DecreaseSensitivity = new JoinDataComplete(
|
||||||
new JoinData
|
new JoinData
|
||||||
{
|
{
|
||||||
JoinNumber = 7,
|
JoinNumber = 7,
|
||||||
JoinSpan = 1
|
JoinSpan = 1
|
||||||
},
|
},
|
||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "Sensor Decrease Sensitivity",
|
Description = "Sensor Decrease Sensitivity",
|
||||||
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
||||||
JoinType = eJoinType.Digital
|
JoinType = eJoinType.Digital
|
||||||
});
|
});
|
||||||
|
|
||||||
[JoinName("Sensitivity")]
|
[JoinName("Sensitivity")]
|
||||||
public JoinDataComplete Sensitivity = new JoinDataComplete(
|
public JoinDataComplete Sensitivity = new JoinDataComplete(
|
||||||
new JoinData
|
new JoinData
|
||||||
{
|
{
|
||||||
JoinNumber = 2,
|
JoinNumber = 2,
|
||||||
JoinSpan = 1
|
JoinSpan = 1
|
||||||
},
|
},
|
||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "Sensor Sensitivity",
|
Description = "Sensor Sensitivity",
|
||||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||||
JoinType = eJoinType.Analog
|
JoinType = eJoinType.Analog
|
||||||
});
|
});
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructor to use when instantiating this Join Map without inheriting from it
|
/// Constructor to use when instantiating this Join Map without inheriting from it
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="joinStart">Join this join map will start at</param>
|
/// <param name="joinStart">Join this join map will start at</param>
|
||||||
public GlsPartitionSensorJoinMap(uint joinStart)
|
public GlsPartitionSensorJoinMap(uint joinStart)
|
||||||
: this(joinStart, typeof (GlsPartitionSensorJoinMap))
|
: this(joinStart, typeof(GlsPartitionSensorJoinMap))
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructor to use when extending this Join map
|
/// Constructor to use when extending this Join map
|
||||||
@@ -137,5 +137,25 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core.Bridges.JoinMaps
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
[Obsolete("use PepperDash.Essentials.Core.Bridges.JoinMaps version")]
|
||||||
|
public class GlsPartitionSensorJoinMap : PepperDash.Essentials.Core.Bridges.JoinMaps.GlsPartitionSensorJoinMap
|
||||||
|
{
|
||||||
|
public GlsPartitionSensorJoinMap(uint joinStart)
|
||||||
|
: this(joinStart, typeof(GlsPartitionSensorJoinMap))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected GlsPartitionSensorJoinMap(uint joinStart, Type type) : base(joinStart, type)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,222 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Crestron.SimplSharp;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Core.Bridges
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Join map for IRBlurayBase devices
|
||||||
|
/// </summary>
|
||||||
|
public class IRBlurayBaseJoinMap : JoinMapBaseAdvanced
|
||||||
|
{
|
||||||
|
[JoinName("PowerOn")]
|
||||||
|
public JoinDataComplete PowerOn = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Power On", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("PowerOff")]
|
||||||
|
public JoinDataComplete PowerOff = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Power Off", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("PowerToggle")]
|
||||||
|
public JoinDataComplete PowerToggle = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Power Toggle", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Up")]
|
||||||
|
public JoinDataComplete Up = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Nav Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Down")]
|
||||||
|
public JoinDataComplete Down = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Nav Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Left")]
|
||||||
|
public JoinDataComplete Left = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Nav Left", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Right")]
|
||||||
|
public JoinDataComplete Right = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Nav Right", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Select")]
|
||||||
|
public JoinDataComplete Select = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Select", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Menu")]
|
||||||
|
public JoinDataComplete Menu = new JoinDataComplete(new JoinData { JoinNumber = 9, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Menu", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Exit")]
|
||||||
|
public JoinDataComplete Exit = new JoinDataComplete(new JoinData { JoinNumber = 10, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Exit", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Digit0")]
|
||||||
|
public JoinDataComplete Digit0 = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Digit 0", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Digit1")]
|
||||||
|
public JoinDataComplete Digit1 = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Digit 1", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Digit2")]
|
||||||
|
public JoinDataComplete Digit2 = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Digit 2", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Digit3")]
|
||||||
|
public JoinDataComplete Digit3 = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Digit 3", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Digit4")]
|
||||||
|
public JoinDataComplete Digit4 = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Digit 4", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Digit5")]
|
||||||
|
public JoinDataComplete Digit5 = new JoinDataComplete(new JoinData { JoinNumber = 16, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Digit 5", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Digit6")]
|
||||||
|
public JoinDataComplete Digit6 = new JoinDataComplete(new JoinData { JoinNumber = 17, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Digit 6", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Digit7")]
|
||||||
|
public JoinDataComplete Digit7 = new JoinDataComplete(new JoinData { JoinNumber = 18, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Digit 7", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Digit8")]
|
||||||
|
public JoinDataComplete Digit8 = new JoinDataComplete(new JoinData { JoinNumber = 19, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Digit 8", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Digit9")]
|
||||||
|
public JoinDataComplete Digit9 = new JoinDataComplete(new JoinData { JoinNumber = 20, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Digit 9", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("KeypadClear")]
|
||||||
|
public JoinDataComplete KeypadClear = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Keypad Clear", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("KeypadEnter")]
|
||||||
|
public JoinDataComplete KeypadEnter = new JoinDataComplete(new JoinData { JoinNumber = 22, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Keypad Enter", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("ChannelUp")]
|
||||||
|
public JoinDataComplete ChannelUp = new JoinDataComplete(new JoinData { JoinNumber = 23, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "STB Channel Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("ChannelDown")]
|
||||||
|
public JoinDataComplete ChannelDown = new JoinDataComplete(new JoinData { JoinNumber = 24, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "STB Channel Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("LastChannel")]
|
||||||
|
public JoinDataComplete LastChannel = new JoinDataComplete(new JoinData { JoinNumber = 25, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Last Channel", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Guide")]
|
||||||
|
public JoinDataComplete Guide = new JoinDataComplete(new JoinData { JoinNumber = 26, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Guide", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Info")]
|
||||||
|
public JoinDataComplete Info = new JoinDataComplete(new JoinData { JoinNumber = 27, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Info", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Red")]
|
||||||
|
public JoinDataComplete Red = new JoinDataComplete(new JoinData { JoinNumber = 28, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Red", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Green")]
|
||||||
|
public JoinDataComplete Green = new JoinDataComplete(new JoinData { JoinNumber = 29, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Green", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Yellow")]
|
||||||
|
public JoinDataComplete Yellow = new JoinDataComplete(new JoinData { JoinNumber = 30, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Yellow", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Blue")]
|
||||||
|
public JoinDataComplete Blue = new JoinDataComplete(new JoinData { JoinNumber = 31, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Blue", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
|
||||||
|
[JoinName("Play")]
|
||||||
|
public JoinDataComplete Play = new JoinDataComplete(new JoinData { JoinNumber = 33, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Play", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Pause")]
|
||||||
|
public JoinDataComplete Pause = new JoinDataComplete(new JoinData { JoinNumber = 34, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Pause", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Stop")]
|
||||||
|
public JoinDataComplete Stop = new JoinDataComplete(new JoinData { JoinNumber = 35, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Stop", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("FFwd")]
|
||||||
|
public JoinDataComplete FFwd = new JoinDataComplete(new JoinData { JoinNumber = 36, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "FFwd", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Rewind")]
|
||||||
|
public JoinDataComplete Rewind = new JoinDataComplete(new JoinData { JoinNumber = 37, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Rewind", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("ChapPlus")]
|
||||||
|
public JoinDataComplete ChapPlus = new JoinDataComplete(new JoinData { JoinNumber = 38, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Chapter Plus", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("ChapMinus")]
|
||||||
|
public JoinDataComplete ChapMinus = new JoinDataComplete(new JoinData { JoinNumber = 39, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Chapter Minus", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Replay")]
|
||||||
|
public JoinDataComplete Replay = new JoinDataComplete(new JoinData { JoinNumber = 40, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Replay", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Record")]
|
||||||
|
public JoinDataComplete Record = new JoinDataComplete(new JoinData { JoinNumber = 41, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Record", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("HasKeypadAccessoryButton1")]
|
||||||
|
public JoinDataComplete HasKeypadAccessoryButton1 = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Has Keypad Accessory Button 1", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("HasKeypadAccessoryButton2")]
|
||||||
|
public JoinDataComplete HasKeypadAccessoryButton2 = new JoinDataComplete(new JoinData { JoinNumber = 43, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Has Keypad Accessory Button 2", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("KeypadAccessoryButton1Press")]
|
||||||
|
public JoinDataComplete KeypadAccessoryButton1Press = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 2 },
|
||||||
|
new JoinMetadata { Description = "Keypad Accessory Button 1 Press", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("KeypadAccessoryButton2Press")]
|
||||||
|
public JoinDataComplete KeypadAccessoryButton2Press = new JoinDataComplete(new JoinData { JoinNumber = 43, JoinSpan = 2 },
|
||||||
|
new JoinMetadata { Description = "Keypad Accessory Button 2 Press", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("Name")]
|
||||||
|
public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
|
[JoinName("KeypadAccessoryButton1Label")]
|
||||||
|
public JoinDataComplete KeypadAccessoryButton1Label = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Keypad Accessory Button 1 Label", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||||
|
|
||||||
|
[JoinName("KeypadAccessoryButton2Label")]
|
||||||
|
public JoinDataComplete KeypadAccessoryButton2Label = new JoinDataComplete(new JoinData { JoinNumber = 43, JoinSpan = 1 },
|
||||||
|
new JoinMetadata { Description = "Keypad Accessory Button 1 Label", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor to use when instantiating this Join Map without inheriting from it
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="joinStart">Join this join map will start at</param>
|
||||||
|
public IRBlurayBaseJoinMap(uint joinStart)
|
||||||
|
: this(joinStart, typeof(IRBlurayBaseJoinMap))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor to use when extending this Join map
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="joinStart">Join this join map will start at</param>
|
||||||
|
/// <param name="type">Type of the child join map</param>
|
||||||
|
protected IRBlurayBaseJoinMap(uint joinStart, Type type)
|
||||||
|
: base(joinStart, type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.Bridges
|
namespace PepperDash.Essentials.Core.Bridges
|
||||||
{
|
{
|
||||||
public class SetTopBoxControllerJoinMap : JoinMapBaseAdvanced
|
public class SetTopBoxControllerJoinMap : JoinMapBaseAdvanced
|
||||||
{
|
{
|
||||||
[JoinName("PowerOn")]
|
[JoinName("PowerOn")]
|
||||||
public JoinDataComplete PowerOn = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
public JoinDataComplete PowerOn = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "STB Power On", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
new JoinMetadata { Description = "STB Power On", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
@@ -236,5 +236,5 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
: base(joinStart, type)
|
: base(joinStart, type)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -130,6 +130,12 @@ namespace PepperDash.Essentials.Core
|
|||||||
void Hardware_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args)
|
void Hardware_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args)
|
||||||
{
|
{
|
||||||
Debug.Console(2, this, "OnlineStatusChange Event. Online = {0}", args.DeviceOnLine);
|
Debug.Console(2, this, "OnlineStatusChange Event. Online = {0}", args.DeviceOnLine);
|
||||||
|
|
||||||
|
if (!Hardware.Registered)
|
||||||
|
{
|
||||||
|
return; // protects in cases where device has been unregistered and feedbacks would attempt to access null sigs.
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var feedback in Feedbacks)
|
foreach (var feedback in Feedbacks)
|
||||||
{
|
{
|
||||||
if (feedback != null)
|
if (feedback != null)
|
||||||
|
|||||||
@@ -1,8 +1,19 @@
|
|||||||
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
using System;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
||||||
{
|
{
|
||||||
public interface IHasBranding
|
public interface IHasBranding
|
||||||
{
|
{
|
||||||
bool BrandingEnabled { get; }
|
bool BrandingEnabled { get; }
|
||||||
void InitializeBranding(string roomKey);
|
void InitializeBranding(string roomKey);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
||||||
|
{
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
||||||
|
public interface IHasBranding:PepperDash.Essentials.Core.DeviceTypeInterfaces.IHasBranding
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using PepperDash.Essentials.Core;
|
using System;
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
||||||
{
|
{
|
||||||
public interface IHasPhoneDialing
|
public interface IHasPhoneDialing
|
||||||
{
|
{
|
||||||
@@ -11,4 +11,12 @@ namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
|||||||
void EndPhoneCall();
|
void EndPhoneCall();
|
||||||
void SendDtmfToPhone(string digit);
|
void SendDtmfToPhone(string digit);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
||||||
|
{
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
||||||
|
public interface IHasPhoneDialing:PepperDash.Essentials.Core.DeviceTypeInterfaces.IHasPhoneDialing
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
||||||
{
|
{
|
||||||
public interface ILanguageDefinition
|
public interface ILanguageDefinition
|
||||||
{
|
{
|
||||||
@@ -15,4 +15,12 @@ namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
|||||||
List<LanguageLabel> DestinationGroupNames { get; set; }
|
List<LanguageLabel> DestinationGroupNames { get; set; }
|
||||||
List<LanguageLabel> RoomNames { get; set; }
|
List<LanguageLabel> RoomNames { get; set; }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
||||||
|
{
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
||||||
|
public interface ILanguageDefinition:PepperDash.Essentials.Core.DeviceTypeInterfaces.ILanguageDefinition
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,22 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
||||||
{
|
{
|
||||||
public interface ILanguageProvider
|
|
||||||
|
public interface ILanguageProvider
|
||||||
{
|
{
|
||||||
ILanguageDefinition CurrentLanguage { get; set; }
|
ILanguageDefinition CurrentLanguage { get; set; }
|
||||||
|
|
||||||
event EventHandler CurrentLanguageChanged;
|
event EventHandler CurrentLanguageChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
||||||
|
{
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
||||||
|
public interface ILanguageProvider:PepperDash.Essentials.Core.DeviceTypeInterfaces.ILanguageProvider
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -31,7 +31,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
bool HasDpad { get; }
|
bool HasDpad { get; }
|
||||||
|
|
||||||
PepperDash.Essentials.Core.Presets.DevicePresetsModel PresetsModel { get; }
|
PepperDash.Essentials.Core.Presets.DevicePresetsModel TvPresets { get; }
|
||||||
void LoadPresets(string filePath);
|
void LoadPresets(string filePath);
|
||||||
|
|
||||||
void DvrList(bool pressRelease);
|
void DvrList(bool pressRelease);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using PepperDash.Core;
|
using System;
|
||||||
|
using PepperDash.Core;
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
||||||
{
|
{
|
||||||
public class LanguageLabel
|
public class LanguageLabel
|
||||||
{
|
{
|
||||||
@@ -9,4 +10,12 @@ namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
|||||||
public string DisplayText { get; set; }
|
public string DisplayText { get; set; }
|
||||||
public uint JoinNumber { get; set; }
|
public uint JoinNumber { get; set; }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
||||||
|
{
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
||||||
|
public class LanguageLabel: PepperDash.Essentials.Core.DeviceTypeInterfaces.LanguageLabel
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -7,7 +7,7 @@ using PepperDash.Essentials.Core;
|
|||||||
using PepperDash.Essentials.Core.Bridges;
|
using PepperDash.Essentials.Core.Bridges;
|
||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.Devices
|
namespace PepperDash.Essentials.Core.Devices
|
||||||
{
|
{
|
||||||
public class GenericIrController: EssentialsBridgeableDevice
|
public class GenericIrController: EssentialsBridgeableDevice
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -67,13 +67,13 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static void AddFactoryForType(string typeName, Func<DeviceConfig, IKeyed> method)
|
public static void AddFactoryForType(string typeName, Func<DeviceConfig, IKeyed> method)
|
||||||
{
|
{
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Adding factory method for type '{0}'", typeName);
|
Debug.Console(1, Debug.ErrorLogLevel.Notice, "Adding factory method for type '{0}'", typeName);
|
||||||
DeviceFactory.FactoryMethods.Add(typeName, new DeviceFactoryWrapper() { FactoryMethod = method});
|
DeviceFactory.FactoryMethods.Add(typeName, new DeviceFactoryWrapper() { FactoryMethod = method});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void AddFactoryForType(string typeName, string description, CType cType, Func<DeviceConfig, IKeyed> method)
|
public static void AddFactoryForType(string typeName, string description, CType cType, Func<DeviceConfig, IKeyed> method)
|
||||||
{
|
{
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Adding factory method for type '{0}'", typeName);
|
Debug.Console(1, Debug.ErrorLogLevel.Notice, "Adding factory method for type '{0}'", typeName);
|
||||||
|
|
||||||
if(FactoryMethods.ContainsKey(typeName))
|
if(FactoryMethods.ContainsKey(typeName))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
|
using PepperDash.Essentials.Core;
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core
|
namespace PepperDash.Essentials.Core
|
||||||
{
|
{
|
||||||
public class IsReadyEventArgs : EventArgs
|
public class IsReadyEventArgs : EventArgs
|
||||||
{
|
{
|
||||||
@@ -21,4 +22,20 @@ namespace PepperDash_Essentials_Core
|
|||||||
event EventHandler<IsReadyEventArgs> IsReadyEvent;
|
event EventHandler<IsReadyEventArgs> IsReadyEvent;
|
||||||
bool IsReady { get; }
|
bool IsReady { get; }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core
|
||||||
|
{
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core")]
|
||||||
|
public class IsReadyEventArgs : PepperDash.Essentials.Core.IsReadyEventArgs
|
||||||
|
{
|
||||||
|
public IsReadyEventArgs(bool data) : base(data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core")]
|
||||||
|
public interface IHasReady: PepperDash.Essentials.Core.IHasReady
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1676,20 +1676,46 @@ namespace PepperDash.Essentials.Core.Fusion
|
|||||||
public static FusionStaticAsset CreateStaticAsset(this FusionRoom fr, uint number, string name, string type,
|
public static FusionStaticAsset CreateStaticAsset(this FusionRoom fr, uint number, string name, string type,
|
||||||
string instanceId)
|
string instanceId)
|
||||||
{
|
{
|
||||||
Debug.Console(0, "Adding Fusion Static Asset '{0}' to slot {1} with GUID: '{2}'", name, number, instanceId);
|
try
|
||||||
|
{
|
||||||
|
Debug.Console(0, "Adding Fusion Static Asset '{0}' to slot {1} with GUID: '{2}'", name, number, instanceId);
|
||||||
|
|
||||||
fr.AddAsset(eAssetType.StaticAsset, number, name, type, instanceId);
|
fr.AddAsset(eAssetType.StaticAsset, number, name, type, instanceId);
|
||||||
return fr.UserConfigurableAssetDetails[number].Asset as FusionStaticAsset;
|
return fr.UserConfigurableAssetDetails[number].Asset as FusionStaticAsset;
|
||||||
|
}
|
||||||
|
catch (InvalidOperationException ex)
|
||||||
|
{
|
||||||
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Error creating Static Asset for device: '{0}'. Check that multiple devices don't have missing or duplicate uid properties in configuration. /r/nError: {1}", name, ex);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.Console(2, Debug.ErrorLogLevel.Error, "Error creating Static Asset: {0}", e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static FusionOccupancySensor CreateOccupancySensorAsset(this FusionRoom fr, uint number, string name,
|
public static FusionOccupancySensor CreateOccupancySensorAsset(this FusionRoom fr, uint number, string name,
|
||||||
string type, string instanceId)
|
string type, string instanceId)
|
||||||
{
|
{
|
||||||
Debug.Console(0, "Adding Fusion Occupancy Sensor Asset '{0}' to slot {1} with GUID: '{2}'", name, number,
|
try
|
||||||
instanceId);
|
{
|
||||||
|
Debug.Console(0, "Adding Fusion Occupancy Sensor Asset '{0}' to slot {1} with GUID: '{2}'", name, number,
|
||||||
|
instanceId);
|
||||||
|
|
||||||
fr.AddAsset(eAssetType.OccupancySensor, number, name, type, instanceId);
|
fr.AddAsset(eAssetType.OccupancySensor, number, name, type, instanceId);
|
||||||
return fr.UserConfigurableAssetDetails[number].Asset as FusionOccupancySensor;
|
return fr.UserConfigurableAssetDetails[number].Asset as FusionOccupancySensor;
|
||||||
|
}
|
||||||
|
catch (InvalidOperationException ex)
|
||||||
|
{
|
||||||
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Error creating Static Asset for device: '{0}'. Check that multiple devices don't have missing or duplicate uid properties in configuration. Error: {1}", name, ex);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.Console(2, Debug.ErrorLogLevel.Error, "Error creating Static Asset: {0}", e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,7 @@ using Crestron.SimplSharpPro.DeviceSupport;
|
|||||||
|
|
||||||
|
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
using PepperDash_Essentials_Core;
|
|
||||||
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
namespace PepperDash.Essentials.Core
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ namespace PepperDash.Essentials.Core
|
|||||||
|
|
||||||
public static LicenseManager LicenseManager { get; set; }
|
public static LicenseManager LicenseManager { get; set; }
|
||||||
|
|
||||||
|
public static eCrestronSeries ProcessorSeries { get { return CrestronEnvironment.ProgramCompatibility; } }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The file path prefix to the folder containing configuration files
|
/// The file path prefix to the folder containing configuration files
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -233,7 +233,10 @@ namespace PepperDash.Essentials.Core
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PrintJoinMapInfo();
|
if (Debug.Level > 0)
|
||||||
|
{
|
||||||
|
PrintJoinMapInfo();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,460 +1,539 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
using Crestron.SimplSharpPro.GeneralIO;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
using PepperDash.Essentials.Core.Bridges;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
namespace PepperDash.Essentials.Core
|
||||||
{
|
{
|
||||||
[Description("Wrapper class for Single Technology GLS Occupancy Sensors")]
|
[Description("Wrapper class for Single Technology GLS Occupancy Sensors")]
|
||||||
public class GlsOccupancySensorBaseController : CrestronGenericBridgeableBaseDevice, IOccupancyStatusProvider
|
[ConfigSnippet("\"properties\": {\"control\": {\"method\": \"cresnet\",\"cresnetId\": \"97\"},\"enablePir\": true,\"enableLedFlash\": true,\"enableRawStates\":true,\"remoteTimeout\": 30,\"internalPhotoSensorMinChange\": 0,\"externalPhotoSensorMinChange\": 0}")]
|
||||||
{
|
public abstract class GlsOccupancySensorBaseController : CrestronGenericBridgeableBaseDevice, IOccupancyStatusProvider
|
||||||
public GlsOccupancySensorBase OccSensor { get; private set; }
|
{
|
||||||
|
public GlsOccupancySensorPropertiesConfig PropertiesConfig { get; private set; }
|
||||||
|
|
||||||
public BoolFeedback RoomIsOccupiedFeedback { get; private set; }
|
protected GlsOccupancySensorBase OccSensor;
|
||||||
|
|
||||||
public BoolFeedback GraceOccupancyDetectedFeedback { get; private set; }
|
public BoolFeedback RoomIsOccupiedFeedback { get; private set; }
|
||||||
|
|
||||||
public BoolFeedback RawOccupancyFeedback { get; private set; }
|
public BoolFeedback GraceOccupancyDetectedFeedback { get; private set; }
|
||||||
|
|
||||||
public BoolFeedback PirSensorEnabledFeedback { get; private set; }
|
public BoolFeedback RawOccupancyFeedback { get; private set; }
|
||||||
|
|
||||||
public BoolFeedback LedFlashEnabledFeedback { get; private set; }
|
public BoolFeedback PirSensorEnabledFeedback { get; private set; }
|
||||||
|
|
||||||
public BoolFeedback ShortTimeoutEnabledFeedback { get; private set; }
|
public BoolFeedback LedFlashEnabledFeedback { get; private set; }
|
||||||
|
|
||||||
public IntFeedback PirSensitivityInVacantStateFeedback { get; private set; }
|
public BoolFeedback ShortTimeoutEnabledFeedback { get; private set; }
|
||||||
|
|
||||||
public IntFeedback PirSensitivityInOccupiedStateFeedback { get; private set; }
|
public IntFeedback PirSensitivityInVacantStateFeedback { get; private set; }
|
||||||
|
|
||||||
public IntFeedback CurrentTimeoutFeedback { get; private set; }
|
public IntFeedback PirSensitivityInOccupiedStateFeedback { get; private set; }
|
||||||
|
|
||||||
public IntFeedback LocalTimoutFeedback { get; private set; }
|
public IntFeedback CurrentTimeoutFeedback { get; private set; }
|
||||||
|
|
||||||
public IntFeedback InternalPhotoSensorValue { get; set; }
|
public IntFeedback LocalTimoutFeedback { get; private set; }
|
||||||
|
|
||||||
public IntFeedback ExternalPhotoSensorValue { get; set; }
|
public IntFeedback InternalPhotoSensorValue { get; set; }
|
||||||
|
|
||||||
// Debug properties
|
public IntFeedback ExternalPhotoSensorValue { get; set; }
|
||||||
public bool InTestMode { get; private set; }
|
|
||||||
|
|
||||||
public bool TestRoomIsOccupiedFeedback { get; private set; }
|
// Debug properties
|
||||||
|
public bool InTestMode { get; private set; }
|
||||||
|
|
||||||
public Func<bool> RoomIsOccupiedFeedbackFunc
|
public bool TestRoomIsOccupiedFeedback { get; private set; }
|
||||||
|
|
||||||
|
public Func<bool> RoomIsOccupiedFeedbackFunc
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return () => InTestMode ? TestRoomIsOccupiedFeedback : OccSensor.OccupancyDetectedFeedback.BoolValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected GlsOccupancySensorBaseController(string key, DeviceConfig config)
|
||||||
|
: this(key, config.Name, config)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected GlsOccupancySensorBaseController(string key, string name, DeviceConfig config)
|
||||||
|
: base(key, name)
|
||||||
{
|
{
|
||||||
get
|
|
||||||
|
var props = config.Properties.ToObject<GlsOccupancySensorPropertiesConfig>();
|
||||||
|
|
||||||
|
if (props != null)
|
||||||
{
|
{
|
||||||
return () => InTestMode ? TestRoomIsOccupiedFeedback : OccSensor.OccupancyDetectedFeedback.BoolValue;
|
PropertiesConfig = props;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public GlsOccupancySensorBaseController(string key, Func<DeviceConfig, GlsOccupancySensorBase> preActivationFunc,
|
|
||||||
DeviceConfig config)
|
|
||||||
: base(key, config.Name)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
OccSensor = preActivationFunc(config);
|
|
||||||
|
|
||||||
RegisterCrestronGenericBase(OccSensor);
|
|
||||||
|
|
||||||
RegisterGlsOdtSensorBaseController(OccSensor);
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public GlsOccupancySensorBaseController(string key, string name) : base(key, name) {}
|
|
||||||
|
|
||||||
protected void RegisterGlsOdtSensorBaseController(GlsOccupancySensorBase occSensor)
|
|
||||||
{
|
|
||||||
OccSensor = occSensor;
|
|
||||||
|
|
||||||
RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc);
|
|
||||||
|
|
||||||
PirSensorEnabledFeedback = new BoolFeedback(() => OccSensor.PirEnabledFeedback.BoolValue);
|
|
||||||
|
|
||||||
LedFlashEnabledFeedback = new BoolFeedback(() => OccSensor.LedFlashEnabledFeedback.BoolValue);
|
|
||||||
|
|
||||||
ShortTimeoutEnabledFeedback = new BoolFeedback(() => OccSensor.ShortTimeoutEnabledFeedback.BoolValue);
|
|
||||||
|
|
||||||
PirSensitivityInVacantStateFeedback =
|
|
||||||
new IntFeedback(() => OccSensor.PirSensitivityInVacantStateFeedback.UShortValue);
|
|
||||||
|
|
||||||
PirSensitivityInOccupiedStateFeedback =
|
|
||||||
new IntFeedback(() => OccSensor.PirSensitivityInOccupiedStateFeedback.UShortValue);
|
|
||||||
|
|
||||||
CurrentTimeoutFeedback = new IntFeedback(() => OccSensor.CurrentTimeoutFeedback.UShortValue);
|
|
||||||
|
|
||||||
LocalTimoutFeedback = new IntFeedback(() => OccSensor.LocalTimeoutFeedback.UShortValue);
|
|
||||||
|
|
||||||
GraceOccupancyDetectedFeedback =
|
|
||||||
new BoolFeedback(() => OccSensor.GraceOccupancyDetectedFeedback.BoolValue);
|
|
||||||
|
|
||||||
RawOccupancyFeedback = new BoolFeedback(() => OccSensor.RawOccupancyFeedback.BoolValue);
|
|
||||||
|
|
||||||
InternalPhotoSensorValue = new IntFeedback(() => OccSensor.InternalPhotoSensorValueFeedback.UShortValue);
|
|
||||||
|
|
||||||
ExternalPhotoSensorValue = new IntFeedback(() => OccSensor.ExternalPhotoSensorValueFeedback.UShortValue);
|
|
||||||
|
|
||||||
OccSensor.BaseEvent += OccSensor_BaseEvent;
|
|
||||||
|
|
||||||
OccSensor.GlsOccupancySensorChange += OccSensor_GlsOccupancySensorChange;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Catches events for feedbacks on the base class. Any extending wrapper class should call this delegate after it checks for it's own event IDs.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="device"></param>
|
|
||||||
/// <param name="args"></param>
|
|
||||||
protected virtual void OccSensor_GlsOccupancySensorChange(GlsOccupancySensorBase device, GlsOccupancySensorChangeEventArgs args)
|
|
||||||
{
|
|
||||||
switch (args.EventId)
|
|
||||||
{
|
|
||||||
case GlsOccupancySensorBase.PirEnabledFeedbackEventId:
|
|
||||||
PirSensorEnabledFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.LedFlashEnabledFeedbackEventId:
|
|
||||||
LedFlashEnabledFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.ShortTimeoutEnabledFeedbackEventId:
|
|
||||||
ShortTimeoutEnabledFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.PirSensitivityInOccupiedStateFeedbackEventId:
|
|
||||||
PirSensitivityInOccupiedStateFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.PirSensitivityInVacantStateFeedbackEventId:
|
|
||||||
PirSensitivityInVacantStateFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void OccSensor_BaseEvent(Crestron.SimplSharpPro.GenericBase device, Crestron.SimplSharpPro.BaseEventArgs args)
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "GlsOccupancySensorChange EventId: {0}", args.EventId);
|
|
||||||
|
|
||||||
switch (args.EventId)
|
|
||||||
{
|
|
||||||
case Crestron.SimplSharpPro.GeneralIO.GlsOccupancySensorBase.RoomVacantFeedbackEventId:
|
|
||||||
case Crestron.SimplSharpPro.GeneralIO.GlsOccupancySensorBase.RoomOccupiedFeedbackEventId:
|
|
||||||
Debug.Console(1, this, "Occupancy State: {0}", OccSensor.OccupancyDetectedFeedback.BoolValue);
|
|
||||||
RoomIsOccupiedFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.TimeoutFeedbackEventId:
|
|
||||||
CurrentTimeoutFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.TimeoutLocalFeedbackEventId:
|
|
||||||
LocalTimoutFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.GraceOccupancyDetectedFeedbackEventId:
|
|
||||||
GraceOccupancyDetectedFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.RawOccupancyFeedbackEventId:
|
|
||||||
RawOccupancyFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.InternalPhotoSensorValueFeedbackEventId:
|
|
||||||
InternalPhotoSensorValue.FireUpdate();
|
|
||||||
break;
|
|
||||||
case GlsOccupancySensorBase.ExternalPhotoSensorValueFeedbackEventId:
|
|
||||||
ExternalPhotoSensorValue.FireUpdate();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetTestMode(bool mode)
|
|
||||||
{
|
|
||||||
InTestMode = mode;
|
|
||||||
|
|
||||||
Debug.Console(1, this, "In Mock Mode: '{0}'", InTestMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetTestOccupiedState(bool state)
|
|
||||||
{
|
|
||||||
if (!InTestMode)
|
|
||||||
Debug.Console(1, "Mock mode not enabled");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TestRoomIsOccupiedFeedback = state;
|
|
||||||
|
|
||||||
RoomIsOccupiedFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Enables or disables the PIR sensor
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="state"></param>
|
|
||||||
public void SetPirEnable(bool state)
|
|
||||||
{
|
|
||||||
if (state)
|
|
||||||
{
|
|
||||||
OccSensor.EnablePir.BoolValue = state;
|
|
||||||
OccSensor.DisablePir.BoolValue = !state;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
OccSensor.EnablePir.BoolValue = state;
|
Debug.Console(1, this, "props are null. Unable to deserialize into GlsOccupancySensorPropertiesConfig");
|
||||||
OccSensor.DisablePir.BoolValue = !state;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Enables or disables the LED Flash
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="state"></param>
|
|
||||||
public void SetLedFlashEnable(bool state)
|
|
||||||
{
|
|
||||||
if (state)
|
|
||||||
{
|
|
||||||
OccSensor.EnableLedFlash.BoolValue = state;
|
|
||||||
OccSensor.DisableLedFlash.BoolValue = !state;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
OccSensor.EnableLedFlash.BoolValue = state;
|
|
||||||
OccSensor.DisableLedFlash.BoolValue = !state;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Enables or disables short timeout based on state
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="state"></param>
|
|
||||||
public void SetShortTimeoutState(bool state)
|
|
||||||
{
|
|
||||||
if (state)
|
|
||||||
{
|
|
||||||
OccSensor.EnableShortTimeout.BoolValue = state;
|
|
||||||
OccSensor.DisableShortTimeout.BoolValue = !state;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
OccSensor.EnableShortTimeout.BoolValue = state;
|
|
||||||
OccSensor.DisableShortTimeout.BoolValue = !state;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void IncrementPirSensitivityInOccupiedState(bool pressRelease)
|
|
||||||
{
|
|
||||||
OccSensor.IncrementPirSensitivityInOccupiedState.BoolValue = pressRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DecrementPirSensitivityInOccupiedState(bool pressRelease)
|
|
||||||
{
|
|
||||||
OccSensor.DecrementPirSensitivityInOccupiedState.BoolValue = pressRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void IncrementPirSensitivityInVacantState(bool pressRelease)
|
|
||||||
{
|
|
||||||
OccSensor.IncrementPirSensitivityInVacantState.BoolValue = pressRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DecrementPirSensitivityInVacantState(bool pressRelease)
|
|
||||||
{
|
|
||||||
OccSensor.DecrementPirSensitivityInVacantState.BoolValue = pressRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ForceOccupied()
|
|
||||||
{
|
|
||||||
OccSensor.ForceOccupied.BoolValue = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ForceVacant()
|
|
||||||
{
|
|
||||||
OccSensor.ForceVacant.BoolValue = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void EnableRawStates(bool state)
|
|
||||||
{
|
|
||||||
OccSensor.EnableRawStates.BoolValue = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetRemoteTimeout(ushort time)
|
|
||||||
{
|
|
||||||
OccSensor.RemoteTimeout.UShortValue = time;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetInternalPhotoSensorMinChange(ushort value)
|
|
||||||
{
|
|
||||||
OccSensor.InternalPhotoSensorMinimumChange.UShortValue = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetExternalPhotoSensorMinChange(ushort value)
|
|
||||||
{
|
|
||||||
OccSensor.ExternalPhotoSensorMinimumChange.UShortValue = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected void LinkOccSensorToApi(GlsOccupancySensorBaseController occController, BasicTriList trilist,
|
|
||||||
uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
|
||||||
{
|
|
||||||
var joinMap = new GlsOccupancySensorBaseJoinMap(joinStart);
|
|
||||||
|
|
||||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
|
||||||
joinMap = JsonConvert.DeserializeObject<GlsOccupancySensorBaseJoinMap>(joinMapSerialized);
|
|
||||||
|
|
||||||
if (bridge != null)
|
|
||||||
{
|
|
||||||
bridge.AddJoinMap(Key, joinMap);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Console(1, occController, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
AddPostActivationAction(() =>
|
||||||
|
|
||||||
#region Single and Dual Sensor Stuff
|
|
||||||
occController.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
|
|
||||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = occController.Name;
|
|
||||||
|
|
||||||
trilist.OnlineStatusChange += (d, args) =>
|
|
||||||
{
|
|
||||||
if (args.DeviceOnLine)
|
|
||||||
{
|
{
|
||||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = occController.Name;
|
OccSensor.OnlineStatusChange += (o, a) =>
|
||||||
}
|
{
|
||||||
};
|
if (a.DeviceOnLine)
|
||||||
|
{
|
||||||
|
ApplySettingsToSensorFromConfig();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Occupied status
|
if (OccSensor.IsOnline)
|
||||||
trilist.SetSigTrueAction(joinMap.ForceOccupied.JoinNumber, occController.ForceOccupied);
|
{
|
||||||
trilist.SetSigTrueAction(joinMap.ForceVacant.JoinNumber, occController.ForceVacant);
|
ApplySettingsToSensorFromConfig();
|
||||||
occController.RoomIsOccupiedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RoomOccupiedFeedback.JoinNumber]);
|
|
||||||
occController.RoomIsOccupiedFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.RoomVacantFeedback.JoinNumber]);
|
|
||||||
occController.RawOccupancyFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RawOccupancyFeedback.JoinNumber]);
|
|
||||||
trilist.SetBoolSigAction(joinMap.EnableRawStates.JoinNumber, occController.EnableRawStates);
|
|
||||||
|
|
||||||
// Timouts
|
}
|
||||||
trilist.SetUShortSigAction(joinMap.Timeout.JoinNumber, occController.SetRemoteTimeout);
|
});
|
||||||
occController.CurrentTimeoutFeedback.LinkInputSig(trilist.UShortInput[joinMap.Timeout.JoinNumber]);
|
|
||||||
occController.LocalTimoutFeedback.LinkInputSig(trilist.UShortInput[joinMap.TimeoutLocalFeedback.JoinNumber]);
|
|
||||||
|
|
||||||
// LED Flash
|
|
||||||
trilist.SetSigTrueAction(joinMap.EnableLedFlash.JoinNumber, () => occController.SetLedFlashEnable(true));
|
|
||||||
trilist.SetSigTrueAction(joinMap.DisableLedFlash.JoinNumber, () => occController.SetLedFlashEnable(false));
|
|
||||||
occController.LedFlashEnabledFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.EnableLedFlash.JoinNumber]);
|
|
||||||
|
|
||||||
// Short Timeout
|
|
||||||
trilist.SetSigTrueAction(joinMap.EnableShortTimeout.JoinNumber, () => occController.SetShortTimeoutState(true));
|
|
||||||
trilist.SetSigTrueAction(joinMap.DisableShortTimeout.JoinNumber, () => occController.SetShortTimeoutState(false));
|
|
||||||
occController.ShortTimeoutEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnableShortTimeout.JoinNumber]);
|
|
||||||
|
|
||||||
// PIR Sensor
|
|
||||||
trilist.SetSigTrueAction(joinMap.EnablePir.JoinNumber, () => occController.SetPirEnable(true));
|
|
||||||
trilist.SetSigTrueAction(joinMap.DisablePir.JoinNumber, () => occController.SetPirEnable(false));
|
|
||||||
occController.PirSensorEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnablePir.JoinNumber]);
|
|
||||||
|
|
||||||
// PIR Sensitivity in Occupied State
|
|
||||||
trilist.SetBoolSigAction(joinMap.IncrementPirInOccupiedState.JoinNumber, occController.IncrementPirSensitivityInOccupiedState);
|
|
||||||
trilist.SetBoolSigAction(joinMap.DecrementPirInOccupiedState.JoinNumber, occController.DecrementPirSensitivityInOccupiedState);
|
|
||||||
occController.PirSensitivityInOccupiedStateFeedback.LinkInputSig(trilist.UShortInput[joinMap.PirSensitivityInOccupiedState.JoinNumber]);
|
|
||||||
|
|
||||||
// PIR Sensitivity in Vacant State
|
|
||||||
trilist.SetBoolSigAction(joinMap.IncrementPirInVacantState.JoinNumber, occController.IncrementPirSensitivityInVacantState);
|
|
||||||
trilist.SetBoolSigAction(joinMap.DecrementPirInVacantState.JoinNumber, occController.DecrementPirSensitivityInVacantState);
|
|
||||||
occController.PirSensitivityInVacantStateFeedback.LinkInputSig(trilist.UShortInput[joinMap.PirSensitivityInVacantState.JoinNumber]);
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Dual Technology Sensor Stuff
|
|
||||||
var odtOccController = occController as GlsOdtOccupancySensorController;
|
|
||||||
|
|
||||||
if (odtOccController == null) return;
|
|
||||||
// OR When Vacated
|
|
||||||
trilist.SetBoolSigAction(joinMap.OrWhenVacated.JoinNumber, odtOccController.SetOrWhenVacatedState);
|
|
||||||
odtOccController.OrWhenVacatedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.OrWhenVacated.JoinNumber]);
|
|
||||||
|
|
||||||
// AND When Vacated
|
|
||||||
trilist.SetBoolSigAction(joinMap.AndWhenVacated.JoinNumber, odtOccController.SetAndWhenVacatedState);
|
|
||||||
odtOccController.AndWhenVacatedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.AndWhenVacated.JoinNumber]);
|
|
||||||
|
|
||||||
// Ultrasonic A Sensor
|
|
||||||
trilist.SetSigTrueAction(joinMap.EnableUsA.JoinNumber, () => odtOccController.SetUsAEnable(true));
|
|
||||||
trilist.SetSigTrueAction(joinMap.DisableUsA.JoinNumber, () => odtOccController.SetUsAEnable(false));
|
|
||||||
odtOccController.UltrasonicAEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnableUsA.JoinNumber]);
|
|
||||||
|
|
||||||
// Ultrasonic B Sensor
|
|
||||||
trilist.SetSigTrueAction(joinMap.EnableUsB.JoinNumber, () => odtOccController.SetUsBEnable(true));
|
|
||||||
trilist.SetSigTrueAction(joinMap.DisableUsB.JoinNumber, () => odtOccController.SetUsBEnable(false));
|
|
||||||
odtOccController.UltrasonicAEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnableUsB.JoinNumber]);
|
|
||||||
|
|
||||||
// US Sensitivity in Occupied State
|
|
||||||
trilist.SetBoolSigAction(joinMap.IncrementUsInOccupiedState.JoinNumber, odtOccController.IncrementUsSensitivityInOccupiedState);
|
|
||||||
trilist.SetBoolSigAction(joinMap.DecrementUsInOccupiedState.JoinNumber, odtOccController.DecrementUsSensitivityInOccupiedState);
|
|
||||||
odtOccController.UltrasonicSensitivityInOccupiedStateFeedback.LinkInputSig(trilist.UShortInput[joinMap.UsSensitivityInOccupiedState.JoinNumber]);
|
|
||||||
|
|
||||||
// US Sensitivity in Vacant State
|
|
||||||
trilist.SetBoolSigAction(joinMap.IncrementUsInVacantState.JoinNumber, odtOccController.IncrementUsSensitivityInVacantState);
|
|
||||||
trilist.SetBoolSigAction(joinMap.DecrementUsInVacantState.JoinNumber, odtOccController.DecrementUsSensitivityInVacantState);
|
|
||||||
odtOccController.UltrasonicSensitivityInVacantStateFeedback.LinkInputSig(trilist.UShortInput[joinMap.UsSensitivityInVacantState.JoinNumber]);
|
|
||||||
|
|
||||||
//Sensor Raw States
|
|
||||||
odtOccController.RawOccupancyPirFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RawOccupancyPirFeedback.JoinNumber]);
|
|
||||||
odtOccController.RawOccupancyUsFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RawOccupancyUsFeedback.JoinNumber]);
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
|
||||||
|
/// <summary>
|
||||||
|
/// Applies any sensor settings defined in config
|
||||||
|
/// </summary>
|
||||||
|
protected virtual void ApplySettingsToSensorFromConfig()
|
||||||
{
|
{
|
||||||
LinkOccSensorToApi(this, trilist, joinStart, joinMapKey, bridge);
|
Debug.Console(1, this, "Attempting to apply settings to sensor from config");
|
||||||
|
|
||||||
|
if (PropertiesConfig.EnablePir != null)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "EnablePir found, attempting to set value from config");
|
||||||
|
SetPirEnable((bool)PropertiesConfig.EnablePir);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "EnablePir null, no value specified in config");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PropertiesConfig.EnableLedFlash != null)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "EnableLedFlash found, attempting to set value from config");
|
||||||
|
SetLedFlashEnable((bool)PropertiesConfig.EnableLedFlash);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PropertiesConfig.RemoteTimeout != null)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "RemoteTimeout found, attempting to set value from config");
|
||||||
|
SetRemoteTimeout((ushort)PropertiesConfig.RemoteTimeout);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "RemoteTimeout null, no value specified in config");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PropertiesConfig.ShortTimeoutState != null)
|
||||||
|
{
|
||||||
|
SetShortTimeoutState((bool)PropertiesConfig.ShortTimeoutState);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PropertiesConfig.EnableRawStates != null)
|
||||||
|
{
|
||||||
|
EnableRawStates((bool)PropertiesConfig.EnableRawStates);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PropertiesConfig.InternalPhotoSensorMinChange != null)
|
||||||
|
{
|
||||||
|
SetInternalPhotoSensorMinChange((ushort)PropertiesConfig.InternalPhotoSensorMinChange);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PropertiesConfig.ExternalPhotoSensorMinChange != null)
|
||||||
|
{
|
||||||
|
SetExternalPhotoSensorMinChange((ushort)PropertiesConfig.ExternalPhotoSensorMinChange);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#region PreActivation
|
protected void RegisterGlsOccupancySensorBaseController(GlsOccupancySensorBase occSensor)
|
||||||
|
{
|
||||||
|
OccSensor = occSensor;
|
||||||
|
|
||||||
private static GlsOirCCn GetGlsOirCCn(DeviceConfig dc)
|
RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc);
|
||||||
{
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
var cresnetId = control.CresnetIdInt;
|
|
||||||
var branchId = control.ControlPortNumber;
|
|
||||||
var parentKey = string.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
|
||||||
|
|
||||||
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
PirSensorEnabledFeedback = new BoolFeedback(() => OccSensor.PirEnabledFeedback.BoolValue);
|
||||||
|
|
||||||
|
LedFlashEnabledFeedback = new BoolFeedback(() => OccSensor.LedFlashEnabledFeedback.BoolValue);
|
||||||
|
|
||||||
|
ShortTimeoutEnabledFeedback = new BoolFeedback(() => OccSensor.ShortTimeoutEnabledFeedback.BoolValue);
|
||||||
|
|
||||||
|
PirSensitivityInVacantStateFeedback =
|
||||||
|
new IntFeedback(() => OccSensor.PirSensitivityInVacantStateFeedback.UShortValue);
|
||||||
|
|
||||||
|
PirSensitivityInOccupiedStateFeedback =
|
||||||
|
new IntFeedback(() => OccSensor.PirSensitivityInOccupiedStateFeedback.UShortValue);
|
||||||
|
|
||||||
|
CurrentTimeoutFeedback = new IntFeedback(() => OccSensor.CurrentTimeoutFeedback.UShortValue);
|
||||||
|
|
||||||
|
LocalTimoutFeedback = new IntFeedback(() => OccSensor.LocalTimeoutFeedback.UShortValue);
|
||||||
|
|
||||||
|
GraceOccupancyDetectedFeedback =
|
||||||
|
new BoolFeedback(() => OccSensor.GraceOccupancyDetectedFeedback.BoolValue);
|
||||||
|
|
||||||
|
RawOccupancyFeedback = new BoolFeedback(() => OccSensor.RawOccupancyFeedback.BoolValue);
|
||||||
|
|
||||||
|
InternalPhotoSensorValue = new IntFeedback(() => OccSensor.InternalPhotoSensorValueFeedback.UShortValue);
|
||||||
|
|
||||||
|
ExternalPhotoSensorValue = new IntFeedback(() => OccSensor.ExternalPhotoSensorValueFeedback.UShortValue);
|
||||||
|
|
||||||
|
OccSensor.BaseEvent += OccSensor_BaseEvent;
|
||||||
|
|
||||||
|
OccSensor.GlsOccupancySensorChange += OccSensor_GlsOccupancySensorChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Catches events for feedbacks on the base class. Any extending wrapper class should call this delegate after it checks for it's own event IDs.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="device"></param>
|
||||||
|
/// <param name="args"></param>
|
||||||
|
protected virtual void OccSensor_GlsOccupancySensorChange(GlsOccupancySensorBase device, GlsOccupancySensorChangeEventArgs args)
|
||||||
|
{
|
||||||
|
switch (args.EventId)
|
||||||
|
{
|
||||||
|
case GlsOccupancySensorBase.PirEnabledFeedbackEventId:
|
||||||
|
PirSensorEnabledFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.LedFlashEnabledFeedbackEventId:
|
||||||
|
LedFlashEnabledFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.ShortTimeoutEnabledFeedbackEventId:
|
||||||
|
ShortTimeoutEnabledFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.PirSensitivityInOccupiedStateFeedbackEventId:
|
||||||
|
PirSensitivityInOccupiedStateFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.PirSensitivityInVacantStateFeedbackEventId:
|
||||||
|
PirSensitivityInVacantStateFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OccSensor_BaseEvent(Crestron.SimplSharpPro.GenericBase device, Crestron.SimplSharpPro.BaseEventArgs args)
|
||||||
|
{
|
||||||
|
Debug.Console(2, this, "GlsOccupancySensorChange EventId: {0}", args.EventId);
|
||||||
|
|
||||||
|
switch (args.EventId)
|
||||||
|
{
|
||||||
|
case GlsOccupancySensorBase.RoomVacantFeedbackEventId:
|
||||||
|
case GlsOccupancySensorBase.RoomOccupiedFeedbackEventId:
|
||||||
|
Debug.Console(1, this, "Occupancy State: {0}", OccSensor.OccupancyDetectedFeedback.BoolValue);
|
||||||
|
RoomIsOccupiedFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.TimeoutFeedbackEventId:
|
||||||
|
CurrentTimeoutFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.TimeoutLocalFeedbackEventId:
|
||||||
|
LocalTimoutFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.GraceOccupancyDetectedFeedbackEventId:
|
||||||
|
GraceOccupancyDetectedFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.RawOccupancyFeedbackEventId:
|
||||||
|
RawOccupancyFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.InternalPhotoSensorValueFeedbackEventId:
|
||||||
|
InternalPhotoSensorValue.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.ExternalPhotoSensorValueFeedbackEventId:
|
||||||
|
ExternalPhotoSensorValue.FireUpdate();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetTestMode(bool mode)
|
||||||
|
{
|
||||||
|
InTestMode = mode;
|
||||||
|
|
||||||
|
Debug.Console(1, this, "In Mock Mode: '{0}'", InTestMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetTestOccupiedState(bool state)
|
||||||
|
{
|
||||||
|
if (!InTestMode)
|
||||||
|
Debug.Console(1, "Mock mode not enabled");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TestRoomIsOccupiedFeedback = state;
|
||||||
|
|
||||||
|
RoomIsOccupiedFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enables or disables the PIR sensor
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="state"></param>
|
||||||
|
public void SetPirEnable(bool state)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Setting EnablePir to: {0}", state);
|
||||||
|
|
||||||
|
OccSensor.EnablePir.BoolValue = state;
|
||||||
|
OccSensor.DisablePir.BoolValue = !state;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enables or disables the LED Flash
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="state"></param>
|
||||||
|
public void SetLedFlashEnable(bool state)
|
||||||
|
{
|
||||||
|
OccSensor.EnableLedFlash.BoolValue = state;
|
||||||
|
OccSensor.DisableLedFlash.BoolValue = !state;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enables or disables short timeout based on state
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="state"></param>
|
||||||
|
public void SetShortTimeoutState(bool state)
|
||||||
|
{
|
||||||
|
OccSensor.EnableShortTimeout.BoolValue = state;
|
||||||
|
OccSensor.DisableShortTimeout.BoolValue = !state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void IncrementPirSensitivityInOccupiedState(bool pressRelease)
|
||||||
|
{
|
||||||
|
OccSensor.IncrementPirSensitivityInOccupiedState.BoolValue = pressRelease;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DecrementPirSensitivityInOccupiedState(bool pressRelease)
|
||||||
|
{
|
||||||
|
OccSensor.DecrementPirSensitivityInOccupiedState.BoolValue = pressRelease;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void IncrementPirSensitivityInVacantState(bool pressRelease)
|
||||||
|
{
|
||||||
|
OccSensor.IncrementPirSensitivityInVacantState.BoolValue = pressRelease;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DecrementPirSensitivityInVacantState(bool pressRelease)
|
||||||
|
{
|
||||||
|
OccSensor.DecrementPirSensitivityInVacantState.BoolValue = pressRelease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Pulse ForceOccupied on the sensor for .5 seconds
|
||||||
|
/// </summary>
|
||||||
|
public void ForceOccupied()
|
||||||
|
{
|
||||||
|
CrestronInvoke.BeginInvoke((o) =>
|
||||||
|
{
|
||||||
|
ForceOccupied(true);
|
||||||
|
CrestronEnvironment.Sleep(500);
|
||||||
|
ForceOccupied(false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ForceOccupied(bool value)
|
||||||
|
{
|
||||||
|
OccSensor.ForceOccupied.BoolValue = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Pulse ForceVacant on the sensor for .5 seconds
|
||||||
|
/// </summary>
|
||||||
|
public void ForceVacant()
|
||||||
|
{
|
||||||
|
CrestronInvoke.BeginInvoke((o) =>
|
||||||
{
|
{
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new GlsOirCCn", parentKey);
|
ForceVacant(true);
|
||||||
return new GlsOirCCn(cresnetId, Global.ControlSystem);
|
CrestronEnvironment.Sleep(500);
|
||||||
}
|
ForceVacant(false);
|
||||||
var cresnetBridge = DeviceManager.GetDeviceForKey(parentKey) as IHasCresnetBranches;
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (cresnetBridge != null)
|
public void ForceVacant(bool value)
|
||||||
{
|
{
|
||||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new GlsOirCCn", parentKey);
|
OccSensor.ForceVacant.BoolValue = value;
|
||||||
return new GlsOirCCn(cresnetId, cresnetBridge.CresnetBranches[branchId]);
|
}
|
||||||
}
|
|
||||||
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public class GlsOccupancySensorBaseControllerFactory : EssentialsDeviceFactory<GlsOccupancySensorBaseController>
|
public void EnableRawStates(bool state)
|
||||||
{
|
{
|
||||||
public GlsOccupancySensorBaseControllerFactory()
|
OccSensor.EnableRawStates.BoolValue = state;
|
||||||
{
|
}
|
||||||
TypeNames = new List<string>() { "glsoirccn" };
|
|
||||||
}
|
public void SetRemoteTimeout(ushort time)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Setting RemoteTimout to: {0}", time);
|
||||||
|
|
||||||
|
OccSensor.RemoteTimeout.UShortValue = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetInternalPhotoSensorMinChange(ushort value)
|
||||||
|
{
|
||||||
|
OccSensor.InternalPhotoSensorMinimumChange.UShortValue = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetExternalPhotoSensorMinChange(ushort value)
|
||||||
|
{
|
||||||
|
OccSensor.ExternalPhotoSensorMinimumChange.UShortValue = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Method to print current occ settings to console.
|
||||||
|
/// </summary>
|
||||||
|
public virtual void GetSettings()
|
||||||
|
{
|
||||||
|
var dash = new string('*', 50);
|
||||||
|
CrestronConsole.PrintLine(string.Format("{0}\n", dash));
|
||||||
|
|
||||||
|
Debug.Console(0, this, "Vacancy Detected: {0}",
|
||||||
|
OccSensor.VacancyDetectedFeedback.BoolValue);
|
||||||
|
|
||||||
|
Debug.Console(0, this, "Timeout Current: {0} | Local: {1}",
|
||||||
|
OccSensor.CurrentTimeoutFeedback.UShortValue,
|
||||||
|
OccSensor.LocalTimeoutFeedback.UShortValue);
|
||||||
|
|
||||||
|
Debug.Console(0, this, "Short Timeout Enabled: {0}",
|
||||||
|
OccSensor.ShortTimeoutEnabledFeedback.BoolValue);
|
||||||
|
|
||||||
|
Debug.Console(0, this, "PIR Sensor Enabled: {0} | Sensitivity Occupied: {1} | Sensitivity Vacant: {2}",
|
||||||
|
OccSensor.PirEnabledFeedback.BoolValue,
|
||||||
|
OccSensor.PirSensitivityInOccupiedStateFeedback.UShortValue,
|
||||||
|
OccSensor.PirSensitivityInVacantStateFeedback.UShortValue);
|
||||||
|
|
||||||
|
CrestronConsole.PrintLine(string.Format("{0}\n", dash));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void LinkOccSensorToApi(GlsOccupancySensorBaseController occController, BasicTriList trilist,
|
||||||
|
uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||||
|
{
|
||||||
|
var joinMap = new GlsOccupancySensorBaseJoinMap(joinStart);
|
||||||
|
|
||||||
|
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||||
|
joinMap = JsonConvert.DeserializeObject<GlsOccupancySensorBaseJoinMap>(joinMapSerialized);
|
||||||
|
|
||||||
|
if (bridge != null)
|
||||||
|
{
|
||||||
|
bridge.AddJoinMap(Key, joinMap);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Console(1, occController, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||||
|
|
||||||
|
occController.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
|
||||||
|
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = occController.Name;
|
||||||
|
|
||||||
|
trilist.OnlineStatusChange += (d, args) =>
|
||||||
|
{
|
||||||
|
if (args.DeviceOnLine)
|
||||||
|
{
|
||||||
|
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = occController.Name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
LinkSingleTechSensorToApi(occController, trilist, joinMap);
|
||||||
|
|
||||||
|
LinkDualTechSensorToApi(occController, trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void LinkDualTechSensorToApi(GlsOccupancySensorBaseController occController, BasicTriList trilist,
|
||||||
|
GlsOccupancySensorBaseJoinMap joinMap)
|
||||||
|
{
|
||||||
|
var odtOccController = occController as GlsOdtOccupancySensorController;
|
||||||
|
|
||||||
|
if (odtOccController == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// OR When Vacated
|
||||||
|
trilist.SetBoolSigAction(joinMap.OrWhenVacated.JoinNumber, odtOccController.SetOrWhenVacatedState);
|
||||||
|
odtOccController.OrWhenVacatedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.OrWhenVacated.JoinNumber]);
|
||||||
|
|
||||||
|
// AND When Vacated
|
||||||
|
trilist.SetBoolSigAction(joinMap.AndWhenVacated.JoinNumber, odtOccController.SetAndWhenVacatedState);
|
||||||
|
odtOccController.AndWhenVacatedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.AndWhenVacated.JoinNumber]);
|
||||||
|
|
||||||
|
// Ultrasonic A Sensor
|
||||||
|
trilist.SetSigTrueAction(joinMap.EnableUsA.JoinNumber, () => odtOccController.SetUsAEnable(true));
|
||||||
|
trilist.SetSigTrueAction(joinMap.DisableUsA.JoinNumber, () => odtOccController.SetUsAEnable(false));
|
||||||
|
odtOccController.UltrasonicAEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnableUsA.JoinNumber]);
|
||||||
|
|
||||||
|
// Ultrasonic B Sensor
|
||||||
|
trilist.SetSigTrueAction(joinMap.EnableUsB.JoinNumber, () => odtOccController.SetUsBEnable(true));
|
||||||
|
trilist.SetSigTrueAction(joinMap.DisableUsB.JoinNumber, () => odtOccController.SetUsBEnable(false));
|
||||||
|
odtOccController.UltrasonicBEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnableUsB.JoinNumber]);
|
||||||
|
|
||||||
|
// US Sensitivity in Occupied State
|
||||||
|
trilist.SetBoolSigAction(joinMap.IncrementUsInOccupiedState.JoinNumber,
|
||||||
|
odtOccController.IncrementUsSensitivityInOccupiedState);
|
||||||
|
trilist.SetBoolSigAction(joinMap.DecrementUsInOccupiedState.JoinNumber,
|
||||||
|
odtOccController.DecrementUsSensitivityInOccupiedState);
|
||||||
|
odtOccController.UltrasonicSensitivityInOccupiedStateFeedback.LinkInputSig(
|
||||||
|
trilist.UShortInput[joinMap.UsSensitivityInOccupiedState.JoinNumber]);
|
||||||
|
|
||||||
|
// US Sensitivity in Vacant State
|
||||||
|
trilist.SetBoolSigAction(joinMap.IncrementUsInVacantState.JoinNumber,
|
||||||
|
odtOccController.IncrementUsSensitivityInVacantState);
|
||||||
|
trilist.SetBoolSigAction(joinMap.DecrementUsInVacantState.JoinNumber,
|
||||||
|
odtOccController.DecrementUsSensitivityInVacantState);
|
||||||
|
odtOccController.UltrasonicSensitivityInVacantStateFeedback.LinkInputSig(
|
||||||
|
trilist.UShortInput[joinMap.UsSensitivityInVacantState.JoinNumber]);
|
||||||
|
|
||||||
|
//Sensor Raw States
|
||||||
|
odtOccController.RawOccupancyPirFeedback.LinkInputSig(
|
||||||
|
trilist.BooleanInput[joinMap.RawOccupancyPirFeedback.JoinNumber]);
|
||||||
|
odtOccController.RawOccupancyUsFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RawOccupancyUsFeedback.JoinNumber]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void LinkSingleTechSensorToApi(GlsOccupancySensorBaseController occController, BasicTriList trilist,
|
||||||
|
GlsOccupancySensorBaseJoinMap joinMap)
|
||||||
|
{
|
||||||
|
// Occupied status
|
||||||
|
trilist.SetBoolSigAction(joinMap.ForceOccupied.JoinNumber, occController.ForceOccupied);
|
||||||
|
trilist.SetBoolSigAction(joinMap.ForceVacant.JoinNumber, occController.ForceVacant);
|
||||||
|
occController.RoomIsOccupiedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RoomOccupiedFeedback.JoinNumber]);
|
||||||
|
occController.RoomIsOccupiedFeedback.LinkComplementInputSig(
|
||||||
|
trilist.BooleanInput[joinMap.RoomVacantFeedback.JoinNumber]);
|
||||||
|
occController.RawOccupancyFeedback.LinkInputSig(trilist.BooleanInput[joinMap.RawOccupancyFeedback.JoinNumber]);
|
||||||
|
trilist.SetBoolSigAction(joinMap.EnableRawStates.JoinNumber, occController.EnableRawStates);
|
||||||
|
|
||||||
|
// Timouts
|
||||||
|
trilist.SetUShortSigAction(joinMap.Timeout.JoinNumber, occController.SetRemoteTimeout);
|
||||||
|
occController.CurrentTimeoutFeedback.LinkInputSig(trilist.UShortInput[joinMap.Timeout.JoinNumber]);
|
||||||
|
occController.LocalTimoutFeedback.LinkInputSig(trilist.UShortInput[joinMap.TimeoutLocalFeedback.JoinNumber]);
|
||||||
|
|
||||||
|
// LED Flash
|
||||||
|
trilist.SetSigTrueAction(joinMap.EnableLedFlash.JoinNumber, () => occController.SetLedFlashEnable(true));
|
||||||
|
trilist.SetSigTrueAction(joinMap.DisableLedFlash.JoinNumber, () => occController.SetLedFlashEnable(false));
|
||||||
|
occController.LedFlashEnabledFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.EnableLedFlash.JoinNumber]);
|
||||||
|
|
||||||
|
// Short Timeout
|
||||||
|
trilist.SetSigTrueAction(joinMap.EnableShortTimeout.JoinNumber, () => occController.SetShortTimeoutState(true));
|
||||||
|
trilist.SetSigTrueAction(joinMap.DisableShortTimeout.JoinNumber, () => occController.SetShortTimeoutState(false));
|
||||||
|
occController.ShortTimeoutEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnableShortTimeout.JoinNumber]);
|
||||||
|
|
||||||
|
// PIR Sensor
|
||||||
|
trilist.SetSigTrueAction(joinMap.EnablePir.JoinNumber, () => occController.SetPirEnable(true));
|
||||||
|
trilist.SetSigTrueAction(joinMap.DisablePir.JoinNumber, () => occController.SetPirEnable(false));
|
||||||
|
occController.PirSensorEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.EnablePir.JoinNumber]);
|
||||||
|
|
||||||
|
// PIR Sensitivity in Occupied State
|
||||||
|
trilist.SetBoolSigAction(joinMap.IncrementPirInOccupiedState.JoinNumber,
|
||||||
|
occController.IncrementPirSensitivityInOccupiedState);
|
||||||
|
trilist.SetBoolSigAction(joinMap.DecrementPirInOccupiedState.JoinNumber,
|
||||||
|
occController.DecrementPirSensitivityInOccupiedState);
|
||||||
|
occController.PirSensitivityInOccupiedStateFeedback.LinkInputSig(
|
||||||
|
trilist.UShortInput[joinMap.PirSensitivityInOccupiedState.JoinNumber]);
|
||||||
|
|
||||||
|
// PIR Sensitivity in Vacant State
|
||||||
|
trilist.SetBoolSigAction(joinMap.IncrementPirInVacantState.JoinNumber,
|
||||||
|
occController.IncrementPirSensitivityInVacantState);
|
||||||
|
trilist.SetBoolSigAction(joinMap.DecrementPirInVacantState.JoinNumber,
|
||||||
|
occController.DecrementPirSensitivityInVacantState);
|
||||||
|
occController.PirSensitivityInVacantStateFeedback.LinkInputSig(
|
||||||
|
trilist.UShortInput[joinMap.PirSensitivityInVacantState.JoinNumber]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new GlsOccupancySensorBaseController Device");
|
|
||||||
|
|
||||||
return new GlsOccupancySensorBaseController(dc.Key, GetGlsOirCCn, dc);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Crestron.SimplSharp;
|
||||||
|
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Core
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Defines configuration properties for Crestron GLS series occupancy sensors
|
||||||
|
/// </summary>
|
||||||
|
public class GlsOccupancySensorPropertiesConfig
|
||||||
|
{
|
||||||
|
// Single Technology Sensors (PIR): GlsOccupancySensorBase
|
||||||
|
[JsonProperty("enablePir")]
|
||||||
|
public bool? EnablePir { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("enableLedFlash")]
|
||||||
|
public bool? EnableLedFlash { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("shortTimeoutState")]
|
||||||
|
public bool? ShortTimeoutState { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("enableRawStates")]
|
||||||
|
public bool? EnableRawStates { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("remoteTimeout")]
|
||||||
|
public ushort? RemoteTimeout { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("internalPhotoSensorMinChange")]
|
||||||
|
public ushort? InternalPhotoSensorMinChange { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("externalPhotoSensorMinChange")]
|
||||||
|
public ushort? ExternalPhotoSensorMinChange { get; set; }
|
||||||
|
|
||||||
|
// Dual Technology Sensors: GlsOdtCCn
|
||||||
|
[JsonProperty("enableUsA")]
|
||||||
|
public bool? EnableUsA { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("enableUsB")]
|
||||||
|
public bool? EnableUsB { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("orWhenVacatedState")]
|
||||||
|
public bool? OrWhenVacatedState { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("andWhenVacatedState")]
|
||||||
|
public bool? AndWhenVacatedState { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,183 +1,266 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
using Crestron.SimplSharpPro.GeneralIO;
|
||||||
|
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
using PepperDash.Essentials.Core.Bridges;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
namespace PepperDash.Essentials.Core
|
||||||
{
|
{
|
||||||
[Description("Wrapper class for Dual Technology GLS Occupancy Sensors")]
|
[Description("Wrapper class for Dual Technology GLS Occupancy Sensors")]
|
||||||
|
[ConfigSnippet("\"properties\": {\"control\": {\"method\": \"cresnet\",\"cresnetId\": \"97\"},\"enablePir\": true,\"enableLedFlash\": true,\"enableRawStates\":true,\"remoteTimeout\": 30,\"internalPhotoSensorMinChange\": 0,\"externalPhotoSensorMinChange\": 0,\"enableUsA\": true,\"enableUsB\": true,\"orWhenVacatedState\": true}")]
|
||||||
public class GlsOdtOccupancySensorController : GlsOccupancySensorBaseController
|
public class GlsOdtOccupancySensorController : GlsOccupancySensorBaseController
|
||||||
{
|
{
|
||||||
public new GlsOdtCCn OccSensor { get; private set; }
|
private GlsOdtCCn _occSensor;
|
||||||
|
|
||||||
public BoolFeedback OrWhenVacatedFeedback { get; private set; }
|
public BoolFeedback OrWhenVacatedFeedback { get; private set; }
|
||||||
|
|
||||||
public BoolFeedback AndWhenVacatedFeedback { get; private set; }
|
public BoolFeedback AndWhenVacatedFeedback { get; private set; }
|
||||||
|
|
||||||
public BoolFeedback UltrasonicAEnabledFeedback { get; private set; }
|
public BoolFeedback UltrasonicAEnabledFeedback { get; private set; }
|
||||||
|
|
||||||
public BoolFeedback UltrasonicBEnabledFeedback { get; private set; }
|
public BoolFeedback UltrasonicBEnabledFeedback { get; private set; }
|
||||||
|
|
||||||
public IntFeedback UltrasonicSensitivityInVacantStateFeedback { get; private set; }
|
public IntFeedback UltrasonicSensitivityInVacantStateFeedback { get; private set; }
|
||||||
|
|
||||||
public IntFeedback UltrasonicSensitivityInOccupiedStateFeedback { get; private set; }
|
public IntFeedback UltrasonicSensitivityInOccupiedStateFeedback { get; private set; }
|
||||||
|
|
||||||
public BoolFeedback RawOccupancyPirFeedback { get; private set; }
|
public BoolFeedback RawOccupancyPirFeedback { get; private set; }
|
||||||
|
|
||||||
public BoolFeedback RawOccupancyUsFeedback { get; private set; }
|
public BoolFeedback RawOccupancyUsFeedback { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
public GlsOdtOccupancySensorController(string key, Func<DeviceConfig, GlsOdtCCn> preActivationFunc,
|
public GlsOdtOccupancySensorController(string key, Func<DeviceConfig, GlsOdtCCn> preActivationFunc,
|
||||||
DeviceConfig config)
|
DeviceConfig config)
|
||||||
: base(key, config.Name)
|
: base(key, config.Name, config)
|
||||||
|
{
|
||||||
|
AddPreActivationAction(() =>
|
||||||
|
{
|
||||||
|
_occSensor = preActivationFunc(config);
|
||||||
|
|
||||||
|
RegisterCrestronGenericBase(_occSensor);
|
||||||
|
|
||||||
|
RegisterGlsOccupancySensorBaseController(_occSensor);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
UltrasonicSensitivityInOccupiedStateFeedback = new IntFeedback(() => _occSensor.UsSensitivityInOccupiedStateFeedback.UShortValue);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void ApplySettingsToSensorFromConfig()
|
||||||
{
|
{
|
||||||
AddPreActivationAction(() =>
|
base.ApplySettingsToSensorFromConfig();
|
||||||
|
|
||||||
|
if (PropertiesConfig.EnableUsA != null)
|
||||||
{
|
{
|
||||||
OccSensor = preActivationFunc(config);
|
Debug.Console(1, this, "EnableUsA found, attempting to set value from config");
|
||||||
|
SetUsAEnable((bool)PropertiesConfig.EnableUsA);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "EnableUsA null, no value specified in config");
|
||||||
|
}
|
||||||
|
|
||||||
RegisterCrestronGenericBase(OccSensor);
|
|
||||||
|
|
||||||
RegisterGlsOdtSensorBaseController(OccSensor);
|
if (PropertiesConfig.EnableUsB != null)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "EnableUsB found, attempting to set value from config");
|
||||||
|
SetUsBEnable((bool)PropertiesConfig.EnableUsB);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "EnablePir null, no value specified in config");
|
||||||
|
}
|
||||||
|
|
||||||
AndWhenVacatedFeedback = new BoolFeedback(() => OccSensor.AndWhenVacatedFeedback.BoolValue);
|
|
||||||
|
|
||||||
OrWhenVacatedFeedback = new BoolFeedback(() => OccSensor.OrWhenVacatedFeedback.BoolValue);
|
if (PropertiesConfig.OrWhenVacatedState != null)
|
||||||
|
{
|
||||||
|
SetOrWhenVacatedState((bool)PropertiesConfig.OrWhenVacatedState);
|
||||||
|
}
|
||||||
|
|
||||||
UltrasonicAEnabledFeedback = new BoolFeedback(() => OccSensor.UsAEnabledFeedback.BoolValue);
|
if (PropertiesConfig.AndWhenVacatedState != null)
|
||||||
|
{
|
||||||
UltrasonicBEnabledFeedback = new BoolFeedback(() => OccSensor.UsBEnabledFeedback.BoolValue);
|
SetAndWhenVacatedState((bool)PropertiesConfig.AndWhenVacatedState);
|
||||||
|
}
|
||||||
RawOccupancyPirFeedback = new BoolFeedback(() => OccSensor.RawOccupancyPirFeedback.BoolValue);
|
|
||||||
|
|
||||||
RawOccupancyUsFeedback = new BoolFeedback(() => OccSensor.RawOccupancyUsFeedback.BoolValue);
|
|
||||||
|
|
||||||
UltrasonicSensitivityInVacantStateFeedback = new IntFeedback(() => OccSensor.UsSensitivityInVacantStateFeedback.UShortValue);
|
|
||||||
|
|
||||||
UltrasonicSensitivityInOccupiedStateFeedback = new IntFeedback(() => OccSensor.UsSensitivityInOccupiedStateFeedback.UShortValue);
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Overrides the base class event delegate to fire feedbacks for event IDs that pertain to this extended class.
|
/// 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.
|
/// Then calls the base delegate method to ensure any common event IDs are captured.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="device"></param>
|
/// <param name="device"></param>
|
||||||
/// <param name="args"></param>
|
/// <param name="args"></param>
|
||||||
protected override void OccSensor_GlsOccupancySensorChange(GlsOccupancySensorBase device, GlsOccupancySensorChangeEventArgs args)
|
protected override void OccSensor_GlsOccupancySensorChange(GlsOccupancySensorBase device, GlsOccupancySensorChangeEventArgs args)
|
||||||
|
{
|
||||||
|
switch (args.EventId)
|
||||||
|
{
|
||||||
|
case GlsOccupancySensorBase.AndWhenVacatedFeedbackEventId:
|
||||||
|
AndWhenVacatedFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.OrWhenVacatedFeedbackEventId:
|
||||||
|
OrWhenVacatedFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.UsAEnabledFeedbackEventId:
|
||||||
|
UltrasonicAEnabledFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.UsBEnabledFeedbackEventId:
|
||||||
|
UltrasonicBEnabledFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.UsSensitivityInOccupiedStateFeedbackEventId:
|
||||||
|
UltrasonicSensitivityInOccupiedStateFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.UsSensitivityInVacantStateFeedbackEventId:
|
||||||
|
UltrasonicSensitivityInVacantStateFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
switch (args.EventId)
|
||||||
|
{
|
||||||
|
case GlsOccupancySensorBase.RawOccupancyPirFeedbackEventId:
|
||||||
|
RawOccupancyPirFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
case GlsOccupancySensorBase.RawOccupancyUsFeedbackEventId:
|
||||||
|
RawOccupancyUsFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
_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)
|
||||||
|
{
|
||||||
|
_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;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||||
|
{
|
||||||
|
LinkOccSensorToApi(this, trilist, joinStart, joinMapKey, bridge);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Method to print occ sensor settings to console.
|
||||||
|
/// </summary>
|
||||||
|
public override void GetSettings()
|
||||||
|
{
|
||||||
|
base.GetSettings();
|
||||||
|
|
||||||
|
Debug.Console(0, this, "Ultrasonic Enabled A: {0} | B: {1}",
|
||||||
|
_occSensor.UsAEnabledFeedback.BoolValue,
|
||||||
|
_occSensor.UsBEnabledFeedback.BoolValue);
|
||||||
|
|
||||||
|
Debug.Console(0, this, "Ultrasonic Sensitivity Occupied: {0} | Vacant: {1}",
|
||||||
|
_occSensor.UsSensitivityInOccupiedStateFeedback.UShortValue,
|
||||||
|
_occSensor.UsSensitivityInVacantStateFeedback.UShortValue);
|
||||||
|
|
||||||
|
var dash = new string('*', 50);
|
||||||
|
CrestronConsole.PrintLine(string.Format("{0}\n", dash));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GlsOdtOccupancySensorControllerFactory : EssentialsDeviceFactory<GlsOdtOccupancySensorController>
|
||||||
|
{
|
||||||
|
public GlsOdtOccupancySensorControllerFactory()
|
||||||
{
|
{
|
||||||
if (args.EventId == GlsOccupancySensorBase.AndWhenVacatedFeedbackEventId)
|
TypeNames = new List<string> { "glsodtccn" };
|
||||||
AndWhenVacatedFeedback.FireUpdate();
|
|
||||||
else if (args.EventId == GlsOccupancySensorBase.OrWhenVacatedFeedbackEventId)
|
|
||||||
OrWhenVacatedFeedback.FireUpdate();
|
|
||||||
else if (args.EventId == GlsOccupancySensorBase.UsAEnabledFeedbackEventId)
|
|
||||||
UltrasonicAEnabledFeedback.FireUpdate();
|
|
||||||
else if (args.EventId == GlsOccupancySensorBase.UsBEnabledFeedbackEventId)
|
|
||||||
UltrasonicBEnabledFeedback.FireUpdate();
|
|
||||||
else if (args.EventId == GlsOccupancySensorBase.UsSensitivityInOccupiedStateFeedbackEventId)
|
|
||||||
UltrasonicSensitivityInOccupiedStateFeedback.FireUpdate();
|
|
||||||
else if (args.EventId == GlsOccupancySensorBase.UsSensitivityInVacantStateFeedbackEventId)
|
|
||||||
UltrasonicSensitivityInVacantStateFeedback.FireUpdate();
|
|
||||||
|
|
||||||
base.OccSensor_GlsOccupancySensorChange(device, args);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Overrides the base class event delegate to fire feedbacks for event IDs that pertain to this extended class.
|
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||||
/// 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)
|
Debug.Console(1, "Factory Attempting to create new GlsOccupancySensorBaseController Device");
|
||||||
RawOccupancyPirFeedback.FireUpdate();
|
|
||||||
else if (args.EventId == GlsOccupancySensorBase.RawOccupancyUsFeedbackEventId)
|
|
||||||
RawOccupancyUsFeedback.FireUpdate();
|
|
||||||
|
|
||||||
base.OccSensor_BaseEvent(device, args);
|
return new GlsOdtOccupancySensorController(dc.Key, GetGlsOdtCCn, dc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <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)
|
|
||||||
{
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
|
||||||
{
|
|
||||||
LinkOccSensorToApi(this, trilist, joinStart, joinMapKey, bridge);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region PreActivation
|
|
||||||
|
|
||||||
private static GlsOdtCCn GetGlsOdtCCn(DeviceConfig dc)
|
private static GlsOdtCCn GetGlsOdtCCn(DeviceConfig dc)
|
||||||
{
|
{
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
var control = CommFactory.GetControlPropertiesConfig(dc);
|
||||||
var cresnetId = control.CresnetIdInt;
|
var cresnetId = control.CresnetIdInt;
|
||||||
var branchId = control.ControlPortNumber;
|
var branchId = control.ControlPortNumber;
|
||||||
var parentKey = string.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
var parentKey = String.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
||||||
|
|
||||||
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
@@ -194,24 +277,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
#endregion
|
|
||||||
|
|
||||||
public class GlsOdtOccupancySensorControllerFactory : EssentialsDeviceFactory<GlsOdtOccupancySensorController>
|
|
||||||
{
|
|
||||||
public GlsOdtOccupancySensorControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "glsodtccn" };
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new GlsOccupancySensorBaseController Device");
|
|
||||||
|
|
||||||
return new GlsOdtOccupancySensorController(dc.Key, GetGlsOdtCCn, dc);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
|
using Crestron.SimplSharpPro.GeneralIO;
|
||||||
|
using PepperDash.Core;
|
||||||
|
using PepperDash.Essentials.Core.Bridges;
|
||||||
|
using PepperDash.Essentials.Core.Config;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Core
|
||||||
|
{
|
||||||
|
public class GlsOirOccupancySensorController:GlsOccupancySensorBaseController
|
||||||
|
{
|
||||||
|
private GlsOirCCn _occSensor;
|
||||||
|
|
||||||
|
public GlsOirOccupancySensorController(string key, Func<DeviceConfig, GlsOirCCn> preActivationFunc,DeviceConfig config) : this(key,config.Name, preActivationFunc, config)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public GlsOirOccupancySensorController(string key, string name, Func<DeviceConfig, GlsOirCCn> preActivationFunc, DeviceConfig config) : base(key, name, config)
|
||||||
|
{
|
||||||
|
AddPreActivationAction(() =>
|
||||||
|
{
|
||||||
|
_occSensor = preActivationFunc(config);
|
||||||
|
|
||||||
|
RegisterCrestronGenericBase(_occSensor);
|
||||||
|
|
||||||
|
RegisterGlsOccupancySensorBaseController(_occSensor);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Overrides of CrestronGenericBridgeableBaseDevice
|
||||||
|
|
||||||
|
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||||
|
{
|
||||||
|
LinkOccSensorToApi(this, trilist, joinStart, joinMapKey, bridge);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GlsOccupancySensorBaseControllerFactory : EssentialsDeviceFactory<GlsOccupancySensorBaseController>
|
||||||
|
{
|
||||||
|
public GlsOccupancySensorBaseControllerFactory()
|
||||||
|
{
|
||||||
|
TypeNames = new List<string> { "glsoirccn" };
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||||
|
{
|
||||||
|
Debug.Console(1, "Factory Attempting to create new GlsOirOccupancySensorController Device");
|
||||||
|
|
||||||
|
return new GlsOirOccupancySensorController(dc.Key, GetGlsOirCCn, dc);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static GlsOirCCn GetGlsOirCCn(DeviceConfig dc)
|
||||||
|
{
|
||||||
|
var control = CommFactory.GetControlPropertiesConfig(dc);
|
||||||
|
var cresnetId = control.CresnetIdInt;
|
||||||
|
var branchId = control.ControlPortNumber;
|
||||||
|
var parentKey = string.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
||||||
|
|
||||||
|
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
{
|
||||||
|
Debug.Console(0, "Device {0} is a valid cresnet master - creating new GlsOirCCn", parentKey);
|
||||||
|
return new GlsOirCCn(cresnetId, Global.ControlSystem);
|
||||||
|
}
|
||||||
|
var cresnetBridge = DeviceManager.GetDeviceForKey(parentKey) as IHasCresnetBranches;
|
||||||
|
|
||||||
|
if (cresnetBridge != null)
|
||||||
|
{
|
||||||
|
Debug.Console(0, "Device {0} is a valid cresnet master - creating new GlsOirCCn", parentKey);
|
||||||
|
return new GlsOirCCn(cresnetId, cresnetBridge.CresnetBranches[branchId]);
|
||||||
|
}
|
||||||
|
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@ using Crestron.SimplSharpPro.GeneralIO;
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
using PepperDash.Essentials.Core.Bridges;
|
||||||
using PepperDash_Essentials_Core.Bridges.JoinMaps;
|
using PepperDash.Essentials.Core.Bridges.JoinMaps;
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|||||||
@@ -143,6 +143,7 @@
|
|||||||
<Compile Include="Bridges\JoinMaps\Hrxxx0WirelessRemoteControllerJoinMap.cs" />
|
<Compile Include="Bridges\JoinMaps\Hrxxx0WirelessRemoteControllerJoinMap.cs" />
|
||||||
<Compile Include="Bridges\JoinMaps\IBasicCommunicationJoinMap.cs" />
|
<Compile Include="Bridges\JoinMaps\IBasicCommunicationJoinMap.cs" />
|
||||||
<Compile Include="Bridges\JoinMaps\IDigitalInputJoinMap.cs" />
|
<Compile Include="Bridges\JoinMaps\IDigitalInputJoinMap.cs" />
|
||||||
|
<Compile Include="Bridges\JoinMaps\IRBlurayBaseJoinMap.cs" />
|
||||||
<Compile Include="Bridges\JoinMaps\SetTopBoxControllerJoinMap.cs" />
|
<Compile Include="Bridges\JoinMaps\SetTopBoxControllerJoinMap.cs" />
|
||||||
<Compile Include="Bridges\JoinMaps\StatusSignControllerJoinMap.cs" />
|
<Compile Include="Bridges\JoinMaps\StatusSignControllerJoinMap.cs" />
|
||||||
<Compile Include="Bridges\JoinMaps\SystemMonitorJoinMap.cs" />
|
<Compile Include="Bridges\JoinMaps\SystemMonitorJoinMap.cs" />
|
||||||
@@ -227,6 +228,8 @@
|
|||||||
<Compile Include="Global\EthernetAdapterInfo.cs" />
|
<Compile Include="Global\EthernetAdapterInfo.cs" />
|
||||||
<Compile Include="Interfaces\ILogStrings.cs" />
|
<Compile Include="Interfaces\ILogStrings.cs" />
|
||||||
<Compile Include="Interfaces\ILogStringsWithLevel.cs" />
|
<Compile Include="Interfaces\ILogStringsWithLevel.cs" />
|
||||||
|
<Compile Include="Occupancy\GlsOccupancySensorPropertiesConfig.cs" />
|
||||||
|
<Compile Include="Occupancy\GlsOirOccupancySensorController.cs" />
|
||||||
<Compile Include="Queues\ComsMessage.cs" />
|
<Compile Include="Queues\ComsMessage.cs" />
|
||||||
<Compile Include="Queues\ProcessStringMessage.cs" />
|
<Compile Include="Queues\ProcessStringMessage.cs" />
|
||||||
<Compile Include="Queues\GenericQueue.cs" />
|
<Compile Include="Queues\GenericQueue.cs" />
|
||||||
@@ -326,6 +329,7 @@
|
|||||||
<Compile Include="Routing\TieLine.cs" />
|
<Compile Include="Routing\TieLine.cs" />
|
||||||
<Compile Include="Queues\StringResponseProcessor.cs" />
|
<Compile Include="Queues\StringResponseProcessor.cs" />
|
||||||
<Compile Include="Timers\CountdownTimer.cs" />
|
<Compile Include="Timers\CountdownTimer.cs" />
|
||||||
|
<Compile Include="Timers\RetriggerableTimer.cs" />
|
||||||
<Compile Include="Touchpanels\CrestronTouchpanelPropertiesConfig.cs" />
|
<Compile Include="Touchpanels\CrestronTouchpanelPropertiesConfig.cs" />
|
||||||
<Compile Include="Touchpanels\Interfaces.cs" />
|
<Compile Include="Touchpanels\Interfaces.cs" />
|
||||||
<Compile Include="Touchpanels\Keyboards\HabaneroKeyboardController.cs" />
|
<Compile Include="Touchpanels\Keyboards\HabaneroKeyboardController.cs" />
|
||||||
@@ -336,6 +340,7 @@
|
|||||||
<Compile Include="UI PageManagers\SinglePageManager.cs" />
|
<Compile Include="UI PageManagers\SinglePageManager.cs" />
|
||||||
<Compile Include="UI PageManagers\PageManager.cs" />
|
<Compile Include="UI PageManagers\PageManager.cs" />
|
||||||
<Compile Include="UI PageManagers\SetTopBoxTwoPanelPageManager.cs" />
|
<Compile Include="UI PageManagers\SetTopBoxTwoPanelPageManager.cs" />
|
||||||
|
<Compile Include="Utilities\ActionSequence.cs" />
|
||||||
<Compile Include="VideoStatus\VideoStatusOutputs.cs" />
|
<Compile Include="VideoStatus\VideoStatusOutputs.cs" />
|
||||||
<Compile Include="Crestron\CrestronGenericBaseDevice.cs" />
|
<Compile Include="Crestron\CrestronGenericBaseDevice.cs" />
|
||||||
<Compile Include="DeviceControlsParentInterfaces\IPresentationSource.cs" />
|
<Compile Include="DeviceControlsParentInterfaces\IPresentationSource.cs" />
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<tags>crestron 3series 4series</tags>
|
<tags>crestron 3series 4series</tags>
|
||||||
<repository type="git" url="https://github.com/PepperDash/Essentials"/>
|
<repository type="git" url="https://github.com/PepperDash/Essentials"/>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="PepperDashCore" version="[1.0.44, 1.1.0)"/>
|
<dependency id="PepperDashCore" version="[1.0.45, 1.1.0)"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.Queues
|
namespace PepperDash.Essentials.Core.Queues
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// IBasicCommunication Message for IQueue
|
/// IBasicCommunication Message for IQueue
|
||||||
@@ -70,4 +70,32 @@ namespace PepperDash_Essentials_Core.Queues
|
|||||||
return _bytes != null ? _bytes.ToString() : _string;
|
return _bytes != null ? _bytes.ToString() : _string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core.Queues
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// IBasicCommunication Message for IQueue
|
||||||
|
/// </summary>
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core.Queues")]
|
||||||
|
public class ComsMessage : PepperDash.Essentials.Core.Queues.ComsMessage
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor for a string message
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="coms">IBasicCommunication to send the message</param>
|
||||||
|
/// <param name="message">Message to send</param>
|
||||||
|
public ComsMessage(IBasicCommunication coms, string message):base(coms, message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor for a byte message
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="coms">IBasicCommunication to send the message</param>
|
||||||
|
/// <param name="message">Message to send</param>
|
||||||
|
public ComsMessage(IBasicCommunication coms, byte[] message):base(coms, message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ using Crestron.SimplSharp;
|
|||||||
using Crestron.SimplSharpPro.CrestronThread;
|
using Crestron.SimplSharpPro.CrestronThread;
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.Queues
|
namespace PepperDash.Essentials.Core.Queues
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Threadsafe processing of queued items with pacing if required
|
/// Threadsafe processing of queued items with pacing if required
|
||||||
@@ -18,41 +18,52 @@ namespace PepperDash_Essentials_Core.Queues
|
|||||||
private bool _delayEnabled;
|
private bool _delayEnabled;
|
||||||
private int _delayTime;
|
private int _delayTime;
|
||||||
|
|
||||||
|
private const Thread.eThreadPriority _defaultPriority = Thread.eThreadPriority.MediumPriority;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If the instance has been disposed.
|
/// If the instance has been disposed.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Disposed { get; private set; }
|
public bool Disposed { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the capacity of the CrestronQueue (fixed Size property)
|
||||||
|
/// </summary>
|
||||||
|
public int QueueCapacity
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _queue.Size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the number of elements currently in the CrestronQueue
|
||||||
|
/// </summary>
|
||||||
|
public int QueueCount
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _queue.Count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructor with no thread priority
|
/// Constructor with no thread priority
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="key"></param>
|
/// <param name="key"></param>
|
||||||
public GenericQueue(string key)
|
public GenericQueue(string key)
|
||||||
: this(key, Thread.eThreadPriority.NotSet)
|
: this(key, _defaultPriority, 0, 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructor for generic queue with no pacing
|
/// Constructor with queue size
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="key">Key</param>
|
/// <param name="key"></param>
|
||||||
public GenericQueue(string key, Thread.eThreadPriority priority)
|
/// <param name="capacity">Fixed size for the queue to hold</param>
|
||||||
|
public GenericQueue(string key, int capacity)
|
||||||
|
: this(key, _defaultPriority, capacity, 0)
|
||||||
{
|
{
|
||||||
_key = key;
|
|
||||||
_queue = new CrestronQueue<IQueueMessage>(25);
|
|
||||||
_worker = new Thread(ProcessQueue, null, Thread.eThreadStartOptions.Running)
|
|
||||||
{
|
|
||||||
Priority = priority
|
|
||||||
};
|
|
||||||
|
|
||||||
CrestronEnvironment.ProgramStatusEventHandler += programEvent =>
|
|
||||||
{
|
|
||||||
if (programEvent != eProgramStatusEventType.Stopping)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Dispose();
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -60,10 +71,20 @@ namespace PepperDash_Essentials_Core.Queues
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="key">Key</param>
|
/// <param name="key">Key</param>
|
||||||
/// <param name="pacing">Pacing in ms between actions</param>
|
/// <param name="pacing">Pacing in ms between actions</param>
|
||||||
public GenericQueue(string key, int pacing)
|
public GenericQueue(int pacing, string key)
|
||||||
: this(key)
|
: this(key, _defaultPriority, 0, pacing)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor with pacing and capacity
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
/// <param name="pacing"></param>
|
||||||
|
/// <param name="capacity"></param>
|
||||||
|
public GenericQueue(string key, int pacing, int capacity)
|
||||||
|
: this(key, _defaultPriority, capacity, pacing)
|
||||||
{
|
{
|
||||||
SetDelayValues(pacing);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -73,8 +94,54 @@ namespace PepperDash_Essentials_Core.Queues
|
|||||||
/// <param name="pacing"></param>
|
/// <param name="pacing"></param>
|
||||||
/// <param name="priority"></param>
|
/// <param name="priority"></param>
|
||||||
public GenericQueue(string key, int pacing, Thread.eThreadPriority priority)
|
public GenericQueue(string key, int pacing, Thread.eThreadPriority priority)
|
||||||
: this(key, priority)
|
: this(key, priority, 0, pacing)
|
||||||
{
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor with pacing, priority and capacity
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
/// <param name="priority"></param>
|
||||||
|
/// <param name="capacity"></param>
|
||||||
|
public GenericQueue(string key, Thread.eThreadPriority priority, int capacity)
|
||||||
|
: this(key, priority, capacity, 0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor with pacing, priority and capacity
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
/// <param name="pacing"></param>
|
||||||
|
/// <param name="priority"></param>
|
||||||
|
/// <param name="capacity"></param>
|
||||||
|
public GenericQueue(string key, int pacing, Thread.eThreadPriority priority, int capacity)
|
||||||
|
: this(key, priority, capacity, pacing)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor for generic queue with no pacing
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key">Key</param>
|
||||||
|
/// <param name="priority"></param>
|
||||||
|
/// <param name="capacity"></param>
|
||||||
|
/// <param name="pacing"></param>
|
||||||
|
protected GenericQueue(string key, Thread.eThreadPriority priority, int capacity, int pacing)
|
||||||
|
{
|
||||||
|
_key = key;
|
||||||
|
int cap = 25; // sets default
|
||||||
|
if (capacity > 0)
|
||||||
|
{
|
||||||
|
cap = capacity; // overrides default
|
||||||
|
}
|
||||||
|
_queue = new CrestronQueue<IQueueMessage>(cap);
|
||||||
|
_worker = new Thread(ProcessQueue, null, Thread.eThreadStartOptions.Running)
|
||||||
|
{
|
||||||
|
Priority = priority
|
||||||
|
};
|
||||||
|
|
||||||
SetDelayValues(pacing);
|
SetDelayValues(pacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,6 +149,14 @@ namespace PepperDash_Essentials_Core.Queues
|
|||||||
{
|
{
|
||||||
_delayEnabled = pacing > 0;
|
_delayEnabled = pacing > 0;
|
||||||
_delayTime = pacing;
|
_delayTime = pacing;
|
||||||
|
|
||||||
|
CrestronEnvironment.ProgramStatusEventHandler += programEvent =>
|
||||||
|
{
|
||||||
|
if (programEvent != eProgramStatusEventType.Stopping)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Dispose();
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -171,4 +246,106 @@ namespace PepperDash_Essentials_Core.Queues
|
|||||||
get { return _key; }
|
get { return _key; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core.Queues
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Threadsafe processing of queued items with pacing if required
|
||||||
|
/// </summary>
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core.Queues")]
|
||||||
|
public class GenericQueue : PepperDash.Essentials.Core.Queues.GenericQueue
|
||||||
|
{
|
||||||
|
private bool _delayEnabled;
|
||||||
|
private int _delayTime;
|
||||||
|
|
||||||
|
private const Thread.eThreadPriority _defaultPriority = Thread.eThreadPriority.MediumPriority;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor with no thread priority
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
public GenericQueue(string key)
|
||||||
|
: this(key, _defaultPriority, 0, 0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor with queue size
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
/// <param name="capacity">Fixed size for the queue to hold</param>
|
||||||
|
public GenericQueue(string key, int capacity)
|
||||||
|
: this(key, _defaultPriority, capacity, 0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor for generic queue with no pacing
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key">Key</param>
|
||||||
|
/// <param name="pacing">Pacing in ms between actions</param>
|
||||||
|
public GenericQueue(int pacing, string key)
|
||||||
|
: this(key, _defaultPriority, 0, pacing)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor with pacing and capacity
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
/// <param name="pacing"></param>
|
||||||
|
/// <param name="capacity"></param>
|
||||||
|
public GenericQueue(string key, int pacing, int capacity)
|
||||||
|
: this(key, _defaultPriority, capacity, pacing)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor with pacing and priority
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
/// <param name="pacing"></param>
|
||||||
|
/// <param name="priority"></param>
|
||||||
|
public GenericQueue(string key, int pacing, Thread.eThreadPriority priority)
|
||||||
|
: this(key, priority, 0, pacing)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor with pacing, priority and capacity
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
/// <param name="priority"></param>
|
||||||
|
/// <param name="capacity"></param>
|
||||||
|
public GenericQueue(string key, Thread.eThreadPriority priority, int capacity)
|
||||||
|
: this(key, priority, capacity, 0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor with pacing, priority and capacity
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
/// <param name="pacing"></param>
|
||||||
|
/// <param name="priority"></param>
|
||||||
|
/// <param name="capacity"></param>
|
||||||
|
public GenericQueue(string key, int pacing, Thread.eThreadPriority priority, int capacity)
|
||||||
|
: this(key, priority, capacity, pacing)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor for generic queue with no pacing
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key">Key</param>
|
||||||
|
/// <param name="priority"></param>
|
||||||
|
/// <param name="capacity"></param>
|
||||||
|
/// <param name="pacing"></param>
|
||||||
|
private GenericQueue(string key, Thread.eThreadPriority priority, int capacity, int pacing):base(key, priority, capacity, pacing)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -5,11 +5,19 @@ using System.Text;
|
|||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.Queues
|
namespace PepperDash.Essentials.Core.Queues
|
||||||
{
|
{
|
||||||
public interface IQueue<T> : IKeyed, IDisposable where T : class
|
public interface IQueue<T> : IKeyed, IDisposable where T : class
|
||||||
{
|
{
|
||||||
void Enqueue(T item);
|
void Enqueue(T item);
|
||||||
bool Disposed { get; }
|
bool Disposed { get; }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core.Queues
|
||||||
|
{
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core.Queues")]
|
||||||
|
public interface IQueue<T> : PepperDash.Essentials.Core.Queues.IQueue<T> where T: class
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,17 @@
|
|||||||
namespace PepperDash_Essentials_Core.Queues
|
using System;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Core.Queues
|
||||||
{
|
{
|
||||||
public interface IQueueMessage
|
public interface IQueueMessage
|
||||||
{
|
{
|
||||||
void Dispatch();
|
void Dispatch();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core.Queues
|
||||||
|
{
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core.Queues")]
|
||||||
|
public interface IQueueMessage:PepperDash.Essentials.Core.Queues.IQueueMessage
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.Queues
|
namespace PepperDash.Essentials.Core.Queues
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Message class for processing strings via an IQueue
|
/// Message class for processing strings via an IQueue
|
||||||
@@ -41,4 +41,21 @@ namespace PepperDash_Essentials_Core.Queues
|
|||||||
return _message ?? String.Empty;
|
return _message ?? String.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core.Queues
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Message class for processing strings via an IQueue
|
||||||
|
/// </summary>
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core.Queues")]
|
||||||
|
public class ProcessStringMessage : PepperDash.Essentials.Core.Queues.ProcessStringMessage
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="message">Message to be processed</param>
|
||||||
|
/// <param name="action">Action to invoke on the message</param>
|
||||||
|
public ProcessStringMessage(string message, Action<string> action) : base(message, action){}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.Queues
|
namespace PepperDash.Essentials.Core.Queues
|
||||||
{
|
{
|
||||||
public sealed class StringResponseProcessor : IKeyed, IDisposable
|
public sealed class StringResponseProcessor : IKeyed, IDisposable
|
||||||
{
|
{
|
||||||
@@ -98,6 +98,110 @@ namespace PepperDash_Essentials_Core.Queues
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Disposed { get; private set; }
|
public bool Disposed { get; private set; }
|
||||||
|
|
||||||
|
~StringResponseProcessor()
|
||||||
|
{
|
||||||
|
Dispose(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PepperDash_Essentials_Core.Queues
|
||||||
|
{
|
||||||
|
[Obsolete("Use PepperDash.Essentials.Core.Queues")]
|
||||||
|
public sealed class StringResponseProcessor : IKeyed, IDisposable
|
||||||
|
{
|
||||||
|
private readonly Action<string> _processStringAction;
|
||||||
|
private readonly PepperDash.Essentials.Core.Queues.IQueue<PepperDash.Essentials.Core.Queues.IQueueMessage> _queue;
|
||||||
|
private readonly IBasicCommunication _coms;
|
||||||
|
private readonly CommunicationGather _gather;
|
||||||
|
|
||||||
|
private StringResponseProcessor(string key, Action<string> processStringAction)
|
||||||
|
{
|
||||||
|
_processStringAction = processStringAction;
|
||||||
|
_queue = new PepperDash.Essentials.Core.Queues.GenericQueue(key);
|
||||||
|
|
||||||
|
CrestronEnvironment.ProgramStatusEventHandler += programEvent =>
|
||||||
|
{
|
||||||
|
if (programEvent != eProgramStatusEventType.Stopping)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Dispose();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor that builds an instance and subscribes to coms TextReceived for processing
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="coms">Com port to process strings from</param>
|
||||||
|
/// <param name="processStringAction">Action to process the incoming strings</param>
|
||||||
|
public StringResponseProcessor(IBasicCommunication coms, Action<string> processStringAction)
|
||||||
|
: this(coms.Key, processStringAction)
|
||||||
|
{
|
||||||
|
_coms = coms;
|
||||||
|
coms.TextReceived += OnResponseReceived;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor that builds an instance and subscribes to gather Line Received for processing
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="gather">Gather to process strings from</param>
|
||||||
|
/// <param name="processStringAction">Action to process the incoming strings</param>
|
||||||
|
public StringResponseProcessor(CommunicationGather gather, Action<string> processStringAction)
|
||||||
|
: this(gather.Port.Key, processStringAction)
|
||||||
|
{
|
||||||
|
_gather = gather;
|
||||||
|
gather.LineReceived += OnResponseReceived;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnResponseReceived(object sender, GenericCommMethodReceiveTextArgs args)
|
||||||
|
{
|
||||||
|
_queue.Enqueue(new ProcessStringMessage(args.Text, _processStringAction));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Key
|
||||||
|
/// </summary>
|
||||||
|
public string Key
|
||||||
|
{
|
||||||
|
get { return _queue.Key; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Disposes the instance and cleans up resources.
|
||||||
|
/// </summary>
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Dispose(true);
|
||||||
|
CrestronEnvironment.GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (Disposed)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (disposing)
|
||||||
|
{
|
||||||
|
if (_coms != null)
|
||||||
|
_coms.TextReceived -= OnResponseReceived;
|
||||||
|
|
||||||
|
if (_gather != null)
|
||||||
|
{
|
||||||
|
_gather.LineReceived -= OnResponseReceived;
|
||||||
|
_gather.Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
_queue.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
Disposed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If the instance has been disposed or not. If it has, you can not use it anymore
|
||||||
|
/// </summary>
|
||||||
|
public bool Disposed { get; private set; }
|
||||||
|
|
||||||
~StringResponseProcessor()
|
~StringResponseProcessor()
|
||||||
{
|
{
|
||||||
Dispose(false);
|
Dispose(false);
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _gateway_IsReadyEvent(object sender, PepperDash_Essentials_Core.IsReadyEventArgs e)
|
void _gateway_IsReadyEvent(object sender, IsReadyEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.IsReady != true) return;
|
if (e.IsReady != true) return;
|
||||||
_remote = GetHr1x0WirelessRemote(_config);
|
_remote = GetHr1x0WirelessRemote(_config);
|
||||||
|
|||||||
@@ -53,18 +53,22 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
///
|
///
|
||||||
protected string _SourceListKey;
|
protected string _SourceListKey;
|
||||||
public virtual string SourceListKey {
|
public string SourceListKey {
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _SourceListKey;
|
return _SourceListKey;
|
||||||
}
|
}
|
||||||
set
|
private set
|
||||||
{
|
{
|
||||||
_SourceListKey = value;
|
if (value != _SourceListKey)
|
||||||
|
{
|
||||||
|
_SourceListKey = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected const string _defaultSourceListKey = "default";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Timer used for informing the UIs of a shutdown
|
/// Timer used for informing the UIs of a shutdown
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -160,6 +164,22 @@ namespace PepperDash.Essentials.Core
|
|||||||
return base.CustomActivate();
|
return base.CustomActivate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the SourceListKey property to the passed in value or the default if no value passed in
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sourceListKey"></param>
|
||||||
|
protected void SetSourceListKey(string sourceListKey)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(sourceListKey))
|
||||||
|
{
|
||||||
|
SourceListKey = sourceListKey;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sourceListKey = _defaultSourceListKey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If mobile control is enabled, sets the appropriate properties
|
/// If mobile control is enabled, sets the appropriate properties
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -92,6 +92,16 @@ namespace PepperDash.Essentials.Core
|
|||||||
void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType);
|
void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface IRoutingWithClear : IRouting
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Clears a route to an output, however a device needs to do that
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="outputSelector">Output to clear</param>
|
||||||
|
/// <param name="signalType">signal type to clear</param>
|
||||||
|
void ClearRoute(object outputSelector, eRoutingSignalType signalType);
|
||||||
|
}
|
||||||
|
|
||||||
public interface IRoutingNumeric : IRouting
|
public interface IRoutingNumeric : IRouting
|
||||||
{
|
{
|
||||||
void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type);
|
void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type);
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
public string Key { get; private set; }
|
public string Key { get; private set; }
|
||||||
|
|
||||||
public BoolFeedback IsRunningFeedback { get; private set; }
|
public BoolFeedback IsRunningFeedback { get; private set; }
|
||||||
bool _IsRunning;
|
bool _isRunning;
|
||||||
|
|
||||||
public IntFeedback PercentFeedback { get; private set; }
|
public IntFeedback PercentFeedback { get; private set; }
|
||||||
public StringFeedback TimeRemainingFeedback { get; private set; }
|
public StringFeedback TimeRemainingFeedback { get; private set; }
|
||||||
@@ -32,7 +32,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
public DateTime StartTime { get; private set; }
|
public DateTime StartTime { get; private set; }
|
||||||
public DateTime FinishTime { get; private set; }
|
public DateTime FinishTime { get; private set; }
|
||||||
|
|
||||||
CTimer SecondTimer;
|
private CTimer _secondTimer;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructor
|
/// Constructor
|
||||||
@@ -41,38 +41,34 @@ namespace PepperDash.Essentials.Core
|
|||||||
public SecondsCountdownTimer(string key)
|
public SecondsCountdownTimer(string key)
|
||||||
{
|
{
|
||||||
Key = key;
|
Key = key;
|
||||||
IsRunningFeedback = new BoolFeedback(() => _IsRunning);
|
IsRunningFeedback = new BoolFeedback(() => _isRunning);
|
||||||
|
|
||||||
TimeRemainingFeedback = new StringFeedback(() =>
|
TimeRemainingFeedback = new StringFeedback(() =>
|
||||||
{
|
{
|
||||||
// Need to handle up and down here.
|
// Need to handle up and down here.
|
||||||
|
|
||||||
if (StartTime == null || FinishTime == null)
|
|
||||||
return "";
|
|
||||||
var timeSpan = FinishTime - DateTime.Now;
|
var timeSpan = FinishTime - DateTime.Now;
|
||||||
|
|
||||||
if (timeSpan.TotalSeconds < 60)
|
Debug.Console(2, this,
|
||||||
|
"timeSpan.Minutes == {0}, timeSpan.Seconds == {1}, timeSpan.TotalSeconds == {2}",
|
||||||
|
timeSpan.Minutes, timeSpan.Seconds, timeSpan.TotalSeconds);
|
||||||
|
|
||||||
|
if (Math.Floor(timeSpan.TotalSeconds) < 60 && Math.Floor(timeSpan.TotalSeconds) >= 0) //ignore milliseconds
|
||||||
{
|
{
|
||||||
return Math.Round(timeSpan.TotalSeconds).ToString();
|
return String.Format("{0:00}", timeSpan.Seconds);
|
||||||
}
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Math.Floor(timeSpan.TotalSeconds) < 0
|
||||||
|
? "00"
|
||||||
|
: String.Format("{0:00}:{1:00}", timeSpan.Minutes, timeSpan.Seconds);
|
||||||
});
|
});
|
||||||
|
|
||||||
PercentFeedback = new IntFeedback(() =>
|
PercentFeedback =
|
||||||
{
|
new IntFeedback(
|
||||||
if (StartTime == null || FinishTime == null)
|
() =>
|
||||||
return 0;
|
(int)
|
||||||
double percent = (FinishTime - DateTime.Now).TotalSeconds
|
(Math.Floor((FinishTime - DateTime.Now).TotalSeconds)/
|
||||||
/ (FinishTime - StartTime).TotalSeconds
|
Math.Floor((FinishTime - StartTime).TotalSeconds)*100));
|
||||||
* 100;
|
|
||||||
return (int)percent;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -80,15 +76,15 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
if (_IsRunning)
|
if (_isRunning)
|
||||||
return;
|
return;
|
||||||
StartTime = DateTime.Now;
|
StartTime = DateTime.Now;
|
||||||
FinishTime = StartTime + TimeSpan.FromSeconds(SecondsToCount);
|
FinishTime = StartTime + TimeSpan.FromSeconds(SecondsToCount);
|
||||||
|
|
||||||
if (SecondTimer != null)
|
if (_secondTimer != null)
|
||||||
SecondTimer.Stop();
|
_secondTimer.Stop();
|
||||||
SecondTimer = new CTimer(SecondElapsedTimerCallback, null, 0, 1000);
|
_secondTimer = new CTimer(SecondElapsedTimerCallback, null, 0, 1000);
|
||||||
_IsRunning = true;
|
_isRunning = true;
|
||||||
IsRunningFeedback.FireUpdate();
|
IsRunningFeedback.FireUpdate();
|
||||||
|
|
||||||
var handler = HasStarted;
|
var handler = HasStarted;
|
||||||
@@ -101,7 +97,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void Reset()
|
public void Reset()
|
||||||
{
|
{
|
||||||
_IsRunning = false;
|
_isRunning = false;
|
||||||
Start();
|
Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,19 +127,22 @@ namespace PepperDash.Essentials.Core
|
|||||||
|
|
||||||
void StopHelper()
|
void StopHelper()
|
||||||
{
|
{
|
||||||
if (SecondTimer != null)
|
if (_secondTimer != null)
|
||||||
SecondTimer.Stop();
|
_secondTimer.Stop();
|
||||||
_IsRunning = false;
|
_isRunning = false;
|
||||||
IsRunningFeedback.FireUpdate();
|
IsRunningFeedback.FireUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SecondElapsedTimerCallback(object o)
|
void SecondElapsedTimerCallback(object o)
|
||||||
{
|
{
|
||||||
|
if (DateTime.Now >= FinishTime)
|
||||||
|
{
|
||||||
|
Finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
PercentFeedback.FireUpdate();
|
PercentFeedback.FireUpdate();
|
||||||
TimeRemainingFeedback.FireUpdate();
|
TimeRemainingFeedback.FireUpdate();
|
||||||
|
|
||||||
if (DateTime.Now >= FinishTime)
|
|
||||||
Finish();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,177 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Crestron.SimplSharp;
|
||||||
|
|
||||||
|
using PepperDash.Core;
|
||||||
|
using PepperDash.Essentials.Core;
|
||||||
|
using PepperDash.Essentials.Core.Config;
|
||||||
|
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Core.Timers
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A device that runs a retriggerable timer and can execute actions specified in config
|
||||||
|
/// </summary>
|
||||||
|
[Description("A retriggerable timer device")]
|
||||||
|
public class RetriggerableTimer : EssentialsDevice
|
||||||
|
{
|
||||||
|
private RetriggerableTimerPropertiesConfig _propertiesConfig;
|
||||||
|
|
||||||
|
private CTimer _timer;
|
||||||
|
private long _timerIntervalMs;
|
||||||
|
|
||||||
|
public RetriggerableTimer(string key, DeviceConfig config)
|
||||||
|
: base(key, config.Name)
|
||||||
|
{
|
||||||
|
var props = config.Properties.ToObject<RetriggerableTimerPropertiesConfig>();
|
||||||
|
_propertiesConfig = props;
|
||||||
|
|
||||||
|
if (_propertiesConfig != null)
|
||||||
|
{
|
||||||
|
_timerIntervalMs = _propertiesConfig.TimerIntervalMs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CustomActivate()
|
||||||
|
{
|
||||||
|
if (_propertiesConfig.StartTimerOnActivation)
|
||||||
|
{
|
||||||
|
StartTimer();
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.CustomActivate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CleanUpTimer()
|
||||||
|
{
|
||||||
|
if (_timer != null)
|
||||||
|
{
|
||||||
|
_timer.Stop();
|
||||||
|
_timer.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
_timer = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StartTimer()
|
||||||
|
{
|
||||||
|
CleanUpTimer();
|
||||||
|
Debug.Console(0, this, "Starting Timer");
|
||||||
|
|
||||||
|
_timer = new CTimer(TimerElapsedCallback, GetActionFromConfig(eRetriggerableTimerEvents.Elapsed), _timerIntervalMs, _timerIntervalMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StopTimer()
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, "Stopping Timer");
|
||||||
|
_timer.Stop();
|
||||||
|
|
||||||
|
ExecuteAction(GetActionFromConfig(eRetriggerableTimerEvents.Stopped));
|
||||||
|
}
|
||||||
|
|
||||||
|
private DeviceActionWrapper GetActionFromConfig(eRetriggerableTimerEvents eventType)
|
||||||
|
{
|
||||||
|
var action = _propertiesConfig.Events[eRetriggerableTimerEvents.Elapsed];
|
||||||
|
|
||||||
|
if (action != null)
|
||||||
|
return action;
|
||||||
|
else return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Executes the Elapsed action from confing when the timer elapses
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="o"></param>
|
||||||
|
private void TimerElapsedCallback(object action)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Timer Elapsed. Executing Action");
|
||||||
|
|
||||||
|
if (action == null)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Timer elapsed but unable to execute action. Action is null.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var devAction = action as DeviceActionWrapper;
|
||||||
|
if (devAction != null)
|
||||||
|
ExecuteAction(devAction);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Console(2, this, "Unable to cast action as DeviceActionWrapper. Cannot Execute");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExecuteAction(DeviceActionWrapper action)
|
||||||
|
{
|
||||||
|
if (action == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DeviceJsonApi.DoDeviceAction(action);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.Console(2, this, "Error Executing Action: {0}", e);
|
||||||
|
}
|
||||||
|
//finally // Not sure this is needed
|
||||||
|
//{
|
||||||
|
// _Timer.Reset(0, _TimerIntervalMs);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Configuration Properties for RetriggerableTimer
|
||||||
|
/// </summary>
|
||||||
|
public class RetriggerableTimerPropertiesConfig
|
||||||
|
{
|
||||||
|
[JsonProperty("startTimerOnActivation")]
|
||||||
|
public bool StartTimerOnActivation { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("timerIntervalMs")]
|
||||||
|
public long TimerIntervalMs { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("events")]
|
||||||
|
public Dictionary<eRetriggerableTimerEvents, DeviceActionWrapper> Events { get; set; }
|
||||||
|
|
||||||
|
public RetriggerableTimerPropertiesConfig()
|
||||||
|
{
|
||||||
|
Events = new Dictionary<eRetriggerableTimerEvents, DeviceActionWrapper>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The set of values describing events on the timer
|
||||||
|
/// </summary>
|
||||||
|
public enum eRetriggerableTimerEvents
|
||||||
|
{
|
||||||
|
Elapsed,
|
||||||
|
Stopped,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Factory class
|
||||||
|
/// </summary>
|
||||||
|
public class RetriggerableTimerFactory : EssentialsDeviceFactory<RetriggerableTimer>
|
||||||
|
{
|
||||||
|
public RetriggerableTimerFactory()
|
||||||
|
{
|
||||||
|
TypeNames = new List<string>() { "retriggerabletimer" };
|
||||||
|
}
|
||||||
|
|
||||||
|
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||||
|
{
|
||||||
|
Debug.Console(1, "Factory Attempting to create new RetriggerableTimer Device");
|
||||||
|
|
||||||
|
return new RetriggerableTimer(dc.Key, dc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -169,9 +169,9 @@ namespace PepperDash.Essentials.Core.PageManagers
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Build presets
|
// Build presets
|
||||||
if (stb.HasPresets && stb.PresetsModel != null)
|
if (stb.HasPresets && stb.TvPresets != null)
|
||||||
{
|
{
|
||||||
PresetsView = new DevicePresetsView(trilist, stb.PresetsModel);
|
PresetsView = new DevicePresetsView(trilist, stb.TvPresets);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ namespace PepperDash.Essentials.Core.PageManagers
|
|||||||
{
|
{
|
||||||
SetTopBox = stb;
|
SetTopBox = stb;
|
||||||
TriList = trilist;
|
TriList = trilist;
|
||||||
if(stb.PresetsModel != null)
|
if(stb.TvPresets != null)
|
||||||
PresetsView = new DevicePresetsView(trilist, stb.PresetsModel);
|
PresetsView = new DevicePresetsView(trilist, stb.TvPresets);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Show()
|
public override void Show()
|
||||||
|
|||||||
@@ -0,0 +1,159 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Crestron.SimplSharp;
|
||||||
|
using Crestron.SimplSharpPro.CrestronThread;
|
||||||
|
|
||||||
|
using PepperDash.Core;
|
||||||
|
using PepperDash.Essentials.Core;
|
||||||
|
using PepperDash.Essentials.Core.Config;
|
||||||
|
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Core.Utilities
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A device that executes a sequence of actions with optional delays between actions
|
||||||
|
/// </summary>
|
||||||
|
[Description("A device that executes a sequence of actions with optional delays between actions")]
|
||||||
|
public class ActionSequence : EssentialsDevice
|
||||||
|
{
|
||||||
|
private ActionSequencePropertiesConfig _propertiesConfig;
|
||||||
|
|
||||||
|
private CrestronQueue<SequencedDeviceActionWrapper> _actionQueue;
|
||||||
|
|
||||||
|
private Thread _worker;
|
||||||
|
|
||||||
|
private bool _allowActionsToExecute;
|
||||||
|
|
||||||
|
public ActionSequence(string key, DeviceConfig config)
|
||||||
|
: base(key, config.Name)
|
||||||
|
{
|
||||||
|
var props = config.Properties.ToObject<ActionSequencePropertiesConfig>();
|
||||||
|
_propertiesConfig = props;
|
||||||
|
|
||||||
|
if (_propertiesConfig != null)
|
||||||
|
{
|
||||||
|
if (_propertiesConfig.ActionSequence.Count > 0)
|
||||||
|
{
|
||||||
|
_actionQueue = new CrestronQueue<SequencedDeviceActionWrapper>(_propertiesConfig.ActionSequence.Count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Starts executing the sequenced actions
|
||||||
|
/// </summary>
|
||||||
|
public void StartSequence()
|
||||||
|
{
|
||||||
|
if (_worker !=null && _worker.ThreadState == Thread.eThreadStates.ThreadRunning)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Thread already running. Cannot Start Sequence");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Console(1, this, "Starting Action Sequence");
|
||||||
|
_allowActionsToExecute = true;
|
||||||
|
AddActionsToQueue();
|
||||||
|
_worker = new Thread(ProcessActions, null, Thread.eThreadStartOptions.Running);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Stops executing the sequenced actions
|
||||||
|
/// </summary>
|
||||||
|
public void StopSequence()
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Stopping Action Sequence");
|
||||||
|
_allowActionsToExecute = false;
|
||||||
|
_worker.Abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Populates the queue from the configuration information
|
||||||
|
/// </summary>
|
||||||
|
private void AddActionsToQueue()
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Adding {0} actions to queue", _propertiesConfig.ActionSequence.Count);
|
||||||
|
|
||||||
|
for (int i = 0; i < _propertiesConfig.ActionSequence.Count; i++)
|
||||||
|
{
|
||||||
|
_actionQueue.Enqueue(_propertiesConfig.ActionSequence[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private object ProcessActions(object obj)
|
||||||
|
{
|
||||||
|
while (_allowActionsToExecute && _actionQueue.Count > 0)
|
||||||
|
{
|
||||||
|
SequencedDeviceActionWrapper action = null;
|
||||||
|
|
||||||
|
action = _actionQueue.Dequeue();
|
||||||
|
if (action == null)
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Delay before executing
|
||||||
|
if (action.DelayMs > 0)
|
||||||
|
Thread.Sleep(action.DelayMs);
|
||||||
|
|
||||||
|
ExecuteAction(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExecuteAction(DeviceActionWrapper action)
|
||||||
|
{
|
||||||
|
if (action == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DeviceJsonApi.DoDeviceAction(action);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.Console(2, this, "Error Executing Action: {0}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Configuration Properties for ActionSequence
|
||||||
|
/// </summary>
|
||||||
|
public class ActionSequencePropertiesConfig
|
||||||
|
{
|
||||||
|
[JsonProperty("actionSequence")]
|
||||||
|
public List<SequencedDeviceActionWrapper> ActionSequence { get; set; }
|
||||||
|
|
||||||
|
public ActionSequencePropertiesConfig()
|
||||||
|
{
|
||||||
|
ActionSequence = new List<SequencedDeviceActionWrapper>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SequencedDeviceActionWrapper : DeviceActionWrapper
|
||||||
|
{
|
||||||
|
[JsonProperty("delayMs")]
|
||||||
|
public int DelayMs { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Factory class
|
||||||
|
/// </summary>
|
||||||
|
public class ActionSequenceFactory : EssentialsDeviceFactory<ActionSequence>
|
||||||
|
{
|
||||||
|
public ActionSequenceFactory()
|
||||||
|
{
|
||||||
|
TypeNames = new List<string>() { "actionsequence" };
|
||||||
|
}
|
||||||
|
|
||||||
|
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||||
|
{
|
||||||
|
Debug.Console(1, "Factory Attempting to create new ActionSequence Device");
|
||||||
|
|
||||||
|
return new ActionSequence(dc.Key, dc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -23,6 +23,8 @@ namespace PepperDash.Essentials.DM {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class DmBladeChassisController : CrestronGenericBridgeableBaseDevice, IDmSwitch, IRoutingNumericWithFeedback
|
public class DmBladeChassisController : CrestronGenericBridgeableBaseDevice, IDmSwitch, IRoutingNumericWithFeedback
|
||||||
{
|
{
|
||||||
|
private const string NonePortKey = "inputCard0--None";
|
||||||
|
|
||||||
public DMChassisPropertiesConfig PropertiesConfig { get; set; }
|
public DMChassisPropertiesConfig PropertiesConfig { get; set; }
|
||||||
|
|
||||||
public Switch Chassis { get; private set; }
|
public Switch Chassis { get; private set; }
|
||||||
@@ -112,6 +114,10 @@ namespace PepperDash.Essentials.DM {
|
|||||||
controller.AddVolumeControl(outNum, audio);
|
controller.AddVolumeControl(outNum, audio);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
controller.InputPorts.Add(new RoutingInputPort(NonePortKey, eRoutingSignalType.Video,
|
||||||
|
eRoutingPortConnectionType.None, null, controller));
|
||||||
|
|
||||||
|
|
||||||
controller.InputNames = properties.InputNames;
|
controller.InputNames = properties.InputNames;
|
||||||
controller.OutputNames = properties.OutputNames;
|
controller.OutputNames = properties.OutputNames;
|
||||||
controller.PropertiesConfig = properties;
|
controller.PropertiesConfig = properties;
|
||||||
@@ -367,34 +373,28 @@ namespace PepperDash.Essentials.DM {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AddHdmiOutBladePorts(uint number) {
|
void AddHdmiOutBladePorts(uint number) {
|
||||||
AddOutputPortWithDebug(String.Format("outputBlade{0}", (number / 8 > 0 ? 1 : number / 8)), String.Format("hdmiOut{0}", number) , eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, number);
|
AddOutputPortWithDebug(String.Format("outputBlade{0}", (number / 8 > 0 ? 1 : number / 8)), String.Format("hdmiOut{0}", number) , eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, Chassis.Outputs[number]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddDmOutBladePorts(uint number) {
|
void AddDmOutBladePorts(uint number) {
|
||||||
AddOutputPortWithDebug(String.Format("outputBlade{0}", (number / 8 > 0 ? 1 : number / 8)), String.Format("dmOut{0}", number), eRoutingSignalType.Video, eRoutingPortConnectionType.DmCat, number);
|
AddOutputPortWithDebug(String.Format("outputBlade{0}", (number / 8 > 0 ? 1 : number / 8)), String.Format("dmOut{0}", number), eRoutingSignalType.Video, eRoutingPortConnectionType.DmCat, Chassis.Outputs[number]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddDmOutMmFiberBladePorts(uint number) {
|
void AddDmOutMmFiberBladePorts(uint number) {
|
||||||
AddOutputPortWithDebug(String.Format("outputBlade{0}", (number / 8 > 0 ? 1 : number / 8)), String.Format("dmOut{0}", number), eRoutingSignalType.Video, eRoutingPortConnectionType.DmMmFiber, number);
|
AddOutputPortWithDebug(String.Format("outputBlade{0}", (number / 8 > 0 ? 1 : number / 8)), String.Format("dmOut{0}", number), eRoutingSignalType.Video, eRoutingPortConnectionType.DmMmFiber, Chassis.Outputs[number]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddDmOutSmFiberBladePorts(uint number) {
|
void AddDmOutSmFiberBladePorts(uint number) {
|
||||||
AddOutputPortWithDebug(String.Format("outputBlade{0}", (number / 8 > 0 ? 1 : number / 8)), String.Format("dmOut{0}", number), eRoutingSignalType.Video, eRoutingPortConnectionType.DmSmFiber, number);
|
AddOutputPortWithDebug(String.Format("outputBlade{0}", (number / 8 > 0 ? 1 : number / 8)), String.Format("dmOut{0}", number), eRoutingSignalType.Video, eRoutingPortConnectionType.DmSmFiber, Chassis.Outputs[number]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds InputPort
|
/// Adds InputPort
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void AddInputPortWithDebug(uint cardNum, string portName, eRoutingSignalType sigType, eRoutingPortConnectionType portType) {
|
void AddInputPortWithDebug(uint cardNum, string portName, eRoutingSignalType sigType, eRoutingPortConnectionType portType)
|
||||||
var portKey = string.Format("inputCard{0}--{1}", cardNum, portName);
|
{
|
||||||
Debug.Console(2, this, "Adding input port '{0}'", portKey);
|
AddInputPortWithDebug(cardNum, portName, sigType, portType, null);
|
||||||
var inputPort = new RoutingInputPort(portKey, sigType, portType, cardNum, this)
|
|
||||||
{
|
|
||||||
FeedbackMatchObject = Chassis.Inputs[cardNum]
|
|
||||||
};
|
|
||||||
|
|
||||||
InputPorts.Add(inputPort);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -405,7 +405,7 @@ namespace PepperDash.Essentials.DM {
|
|||||||
{
|
{
|
||||||
var portKey = string.Format("inputCard{0}--{1}", cardNum, portName);
|
var portKey = string.Format("inputCard{0}--{1}", cardNum, portName);
|
||||||
Debug.Console(2, this, "Adding input port '{0}'", portKey);
|
Debug.Console(2, this, "Adding input port '{0}'", portKey);
|
||||||
var inputPort = new RoutingInputPort(portKey, sigType, portType, cardNum, this)
|
var inputPort = new RoutingInputPort(portKey, sigType, portType, Chassis.Inputs[cardNum], this)
|
||||||
{
|
{
|
||||||
FeedbackMatchObject = Chassis.Inputs[cardNum]
|
FeedbackMatchObject = Chassis.Inputs[cardNum]
|
||||||
};
|
};
|
||||||
@@ -567,9 +567,7 @@ namespace PepperDash.Essentials.DM {
|
|||||||
void StartOffTimer(PortNumberType pnt) {
|
void StartOffTimer(PortNumberType pnt) {
|
||||||
if (RouteOffTimers.ContainsKey(pnt))
|
if (RouteOffTimers.ContainsKey(pnt))
|
||||||
return;
|
return;
|
||||||
RouteOffTimers[pnt] = new CTimer(o => {
|
RouteOffTimers[pnt] = new CTimer(o => ExecuteSwitch(null, pnt.Selector, pnt.Type), RouteOffTime);
|
||||||
ExecuteSwitch(0, pnt.Number, pnt.Type);
|
|
||||||
}, RouteOffTime);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -592,11 +590,22 @@ namespace PepperDash.Essentials.DM {
|
|||||||
public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType sigType) {
|
public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType sigType) {
|
||||||
Debug.Console(2, this, "Making an awesome DM route from {0} to {1} {2}", inputSelector, outputSelector, sigType);
|
Debug.Console(2, this, "Making an awesome DM route from {0} to {1} {2}", inputSelector, outputSelector, sigType);
|
||||||
|
|
||||||
var input = Convert.ToUInt32(inputSelector); // Cast can sometimes fail
|
var input = inputSelector as DMInput; // Cast can sometimes fail
|
||||||
var output = Convert.ToUInt32(outputSelector);
|
var output = outputSelector as DMOutput;
|
||||||
|
|
||||||
|
|
||||||
|
if (output == null)
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, Debug.ErrorLogLevel.Warning,
|
||||||
|
"Unable to execute switch for inputSelector {0} to outputSelector {1}", inputSelector,
|
||||||
|
outputSelector);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Check to see if there's an off timer waiting on this and if so, cancel
|
// Check to see if there's an off timer waiting on this and if so, cancel
|
||||||
var key = new PortNumberType(output, sigType);
|
var key = new PortNumberType(output, sigType);
|
||||||
if (input == 0) {
|
|
||||||
|
if (input == null) {
|
||||||
StartOffTimer(key);
|
StartOffTimer(key);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -609,13 +618,13 @@ namespace PepperDash.Essentials.DM {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
var inCard = input == 0 ? null : Chassis.Inputs[input];
|
/*var inCard = input == 0 ? null : Chassis.Inputs[input];
|
||||||
var outCard = input == 0 ? null : Chassis.Outputs[output];
|
var outCard = input == 0 ? null : Chassis.Outputs[output];*/
|
||||||
|
|
||||||
// NOTE THAT BITWISE COMPARISONS - TO CATCH ALL ROUTING TYPES
|
// NOTE THAT BITWISE COMPARISONS - TO CATCH ALL ROUTING TYPES
|
||||||
if ((sigType | eRoutingSignalType.Video) != eRoutingSignalType.Video) return;
|
if ((sigType & eRoutingSignalType.Video) != eRoutingSignalType.Video) return;
|
||||||
Chassis.VideoEnter.BoolValue = true;
|
Chassis.VideoEnter.BoolValue = true;
|
||||||
Chassis.Outputs[output].VideoOut = inCard;
|
output.VideoOut = input;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -624,7 +633,10 @@ namespace PepperDash.Essentials.DM {
|
|||||||
|
|
||||||
public void ExecuteNumericSwitch(ushort inputSelector, ushort outputSelector, eRoutingSignalType sigType)
|
public void ExecuteNumericSwitch(ushort inputSelector, ushort outputSelector, eRoutingSignalType sigType)
|
||||||
{
|
{
|
||||||
ExecuteSwitch(inputSelector, outputSelector, sigType);
|
var input = inputSelector == 0 ? null : Chassis.Inputs[inputSelector];
|
||||||
|
var output = Chassis.Outputs[outputSelector];
|
||||||
|
|
||||||
|
ExecuteSwitch(input, output, sigType);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -21,8 +21,9 @@ namespace PepperDash.Essentials.DM
|
|||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Description("Wrapper class for all DM-MD chassis variants from 8x8 to 32x32")]
|
[Description("Wrapper class for all DM-MD chassis variants from 8x8 to 32x32")]
|
||||||
public class DmChassisController : CrestronGenericBridgeableBaseDevice, IDmSwitch, IRoutingNumericWithFeedback
|
public class DmChassisController : CrestronGenericBridgeableBaseDevice, IDmSwitch, IRoutingNumericWithFeedback
|
||||||
{
|
{
|
||||||
|
private const string NonePortKey = "inputCard0--None";
|
||||||
public DMChassisPropertiesConfig PropertiesConfig { get; set; }
|
public DMChassisPropertiesConfig PropertiesConfig { get; set; }
|
||||||
|
|
||||||
public Switch Chassis { get; private set; }
|
public Switch Chassis { get; private set; }
|
||||||
@@ -133,6 +134,12 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
var controller = new DmChassisController(key, name, chassis);
|
var controller = new DmChassisController(key, name, chassis);
|
||||||
|
|
||||||
|
//
|
||||||
|
var clearInputPort = new RoutingInputPort(NonePortKey, eRoutingSignalType.AudioVideo,
|
||||||
|
eRoutingPortConnectionType.None, null, controller);
|
||||||
|
|
||||||
|
controller.InputPorts.Add(clearInputPort);
|
||||||
|
|
||||||
// add the cards and port names
|
// add the cards and port names
|
||||||
foreach (var kvp in properties.InputSlots)
|
foreach (var kvp in properties.InputSlots)
|
||||||
controller.AddInputCard(kvp.Value, kvp.Key);
|
controller.AddInputCard(kvp.Value, kvp.Key);
|
||||||
@@ -485,169 +492,170 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
type = type.ToLower();
|
type = type.ToLower();
|
||||||
|
|
||||||
if (type == "dmchd")
|
switch (type)
|
||||||
{
|
{
|
||||||
var inputCard = new DmcHd(number, this.Chassis);
|
case "dmchd":
|
||||||
var cecPort = inputCard.HdmiInput as ICec;
|
{
|
||||||
AddHdmiInCardPorts(number, cecPort);
|
var inputCard = new DmcHd(number, this.Chassis);
|
||||||
}
|
var cecPort = inputCard.HdmiInput as ICec;
|
||||||
else if (type == "dmchddsp")
|
AddHdmiInCardPorts(number, cecPort);
|
||||||
{
|
}
|
||||||
var inputCard = new DmcHdDsp(number, this.Chassis);
|
break;
|
||||||
var cecPort = inputCard.HdmiInput as ICec;
|
case "dmchddsp":
|
||||||
AddHdmiInCardPorts(number, cecPort);
|
{
|
||||||
}
|
var inputCard = new DmcHdDsp(number, this.Chassis);
|
||||||
else if (type == "dmc4khd")
|
var cecPort = inputCard.HdmiInput as ICec;
|
||||||
{
|
AddHdmiInCardPorts(number, cecPort);
|
||||||
var inputCard = new Dmc4kHd(number, this.Chassis);
|
}
|
||||||
var cecPort = inputCard.HdmiInput as ICec;
|
break;
|
||||||
AddHdmiInCardPorts(number, cecPort);
|
case "dmc4khd":
|
||||||
}
|
{
|
||||||
else if (type == "dmc4khddsp")
|
var inputCard = new Dmc4kHd(number, this.Chassis);
|
||||||
{
|
var cecPort = inputCard.HdmiInput as ICec;
|
||||||
var inputCard = new Dmc4kHdDsp(number, this.Chassis);
|
AddHdmiInCardPorts(number, cecPort);
|
||||||
var cecPort = inputCard.HdmiInput as ICec;
|
}
|
||||||
AddHdmiInCardPorts(number, cecPort);
|
break;
|
||||||
}
|
case "dmc4khddsp":
|
||||||
else if (type == "dmc4kzhd")
|
{
|
||||||
{
|
var inputCard = new Dmc4kHdDsp(number, this.Chassis);
|
||||||
var inputCard = new Dmc4kzHd(number, this.Chassis);
|
var cecPort = inputCard.HdmiInput as ICec;
|
||||||
var cecPort = inputCard.HdmiInput as ICec;
|
AddHdmiInCardPorts(number, cecPort);
|
||||||
AddHdmiInCardPorts(number, cecPort);
|
}
|
||||||
}
|
break;
|
||||||
else if (type == "dmc4kzhddsp")
|
case "dmc4kzhd":
|
||||||
{
|
{
|
||||||
var inputCard = new Dmc4kzHdDsp(number, this.Chassis);
|
var inputCard = new Dmc4kzHd(number, this.Chassis);
|
||||||
var cecPort = inputCard.HdmiInput as ICec;
|
var cecPort = inputCard.HdmiInput as ICec;
|
||||||
AddHdmiInCardPorts(number, cecPort);
|
AddHdmiInCardPorts(number, cecPort);
|
||||||
}
|
}
|
||||||
else if (type == "dmcc")
|
break;
|
||||||
{
|
case "dmc4kzhddsp":
|
||||||
var inputCard = new DmcC(number, this.Chassis);
|
{
|
||||||
var cecPort = inputCard.DmInput as ICec;
|
var inputCard = new Dmc4kzHdDsp(number, this.Chassis);
|
||||||
AddDmInCardPorts(number, cecPort);
|
var cecPort = inputCard.HdmiInput as ICec;
|
||||||
}
|
AddHdmiInCardPorts(number, cecPort);
|
||||||
else if (type == "dmccdsp")
|
}
|
||||||
{
|
break;
|
||||||
var inputCard = new DmcCDsp(number, this.Chassis);
|
case "dmcc":
|
||||||
var cecPort = inputCard.DmInput as ICec;
|
{
|
||||||
AddDmInCardPorts(number, cecPort);
|
var inputCard = new DmcC(number, this.Chassis);
|
||||||
}
|
var cecPort = inputCard.DmInput as ICec;
|
||||||
else if (type == "dmc4kc")
|
AddDmInCardPorts(number, cecPort);
|
||||||
{
|
}
|
||||||
var inputCard = new Dmc4kC(number, this.Chassis);
|
break;
|
||||||
var cecPort = inputCard.DmInput as ICec;
|
case "dmccdsp":
|
||||||
AddDmInCardPorts(number, cecPort);
|
{
|
||||||
}
|
var inputCard = new DmcCDsp(number, this.Chassis);
|
||||||
else if (type == "dmc4kcdsp")
|
var cecPort = inputCard.DmInput as ICec;
|
||||||
{
|
AddDmInCardPorts(number, cecPort);
|
||||||
var inputCard = new Dmc4kCDsp(number, this.Chassis);
|
}
|
||||||
var cecPort = inputCard.DmInput as ICec;
|
break;
|
||||||
AddDmInCardPorts(number, cecPort);
|
case "dmc4kc":
|
||||||
}
|
{
|
||||||
else if (type == "dmc4kzc")
|
var inputCard = new Dmc4kC(number, this.Chassis);
|
||||||
{
|
var cecPort = inputCard.DmInput as ICec;
|
||||||
var inputCard = new Dmc4kzC(number, this.Chassis);
|
AddDmInCardPorts(number, cecPort);
|
||||||
var cecPort = inputCard.DmInput as ICec;
|
}
|
||||||
AddDmInCardPorts(number, cecPort);
|
break;
|
||||||
}
|
case "dmc4kcdsp":
|
||||||
else if (type == "dmc4kzcdsp")
|
{
|
||||||
{
|
var inputCard = new Dmc4kCDsp(number, this.Chassis);
|
||||||
var inputCard = new Dmc4kzCDsp(number, this.Chassis);
|
var cecPort = inputCard.DmInput as ICec;
|
||||||
var cecPort = inputCard.DmInput as ICec;
|
AddDmInCardPorts(number, cecPort);
|
||||||
AddDmInCardPorts(number, cecPort);
|
}
|
||||||
}
|
break;
|
||||||
else if (type == "dmccat")
|
case "dmc4kzc":
|
||||||
{
|
{
|
||||||
new DmcCat(number, this.Chassis);
|
var inputCard = new Dmc4kzC(number, this.Chassis);
|
||||||
AddDmInCardPorts(number);
|
var cecPort = inputCard.DmInput as ICec;
|
||||||
}
|
AddDmInCardPorts(number, cecPort);
|
||||||
else if (type == "dmccatdsp")
|
}
|
||||||
{
|
break;
|
||||||
new DmcCatDsp(number, this.Chassis);
|
case "dmc4kzcdsp":
|
||||||
AddDmInCardPorts(number);
|
{
|
||||||
}
|
var inputCard = new Dmc4kzCDsp(number, this.Chassis);
|
||||||
else if (type == "dmcs")
|
var cecPort = inputCard.DmInput as ICec;
|
||||||
{
|
AddDmInCardPorts(number, cecPort);
|
||||||
new DmcS(number, Chassis);
|
}
|
||||||
AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.DmMmFiber);
|
break;
|
||||||
AddInCardHdmiAndAudioLoopPorts(number);
|
case "dmccat":
|
||||||
}
|
new DmcCat(number, this.Chassis);
|
||||||
else if (type == "dmcsdsp")
|
AddDmInCardPorts(number);
|
||||||
{
|
break;
|
||||||
new DmcSDsp(number, Chassis);
|
case "dmccatdsp":
|
||||||
AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.DmMmFiber);
|
new DmcCatDsp(number, this.Chassis);
|
||||||
AddInCardHdmiAndAudioLoopPorts(number);
|
AddDmInCardPorts(number);
|
||||||
}
|
break;
|
||||||
else if (type == "dmcs2")
|
case "dmcs":
|
||||||
{
|
new DmcS(number, Chassis);
|
||||||
new DmcS2(number, Chassis);
|
AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.DmMmFiber);
|
||||||
AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.DmSmFiber);
|
AddInCardHdmiAndAudioLoopPorts(number);
|
||||||
AddInCardHdmiAndAudioLoopPorts(number);
|
break;
|
||||||
}
|
case "dmcsdsp":
|
||||||
else if (type == "dmcs2dsp")
|
new DmcSDsp(number, Chassis);
|
||||||
{
|
AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.DmMmFiber);
|
||||||
new DmcS2Dsp(number, Chassis);
|
AddInCardHdmiAndAudioLoopPorts(number);
|
||||||
AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.DmSmFiber);
|
break;
|
||||||
AddInCardHdmiAndAudioLoopPorts(number);
|
case "dmcs2":
|
||||||
}
|
new DmcS2(number, Chassis);
|
||||||
else if (type == "dmcsdi")
|
AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.DmSmFiber);
|
||||||
{
|
AddInCardHdmiAndAudioLoopPorts(number);
|
||||||
new DmcSdi(number, Chassis);
|
break;
|
||||||
AddInputPortWithDebug(number, "sdiIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Sdi);
|
case "dmcs2dsp":
|
||||||
AddOutputPortWithDebug(string.Format("inputCard{0}", number), "sdiOut", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
new DmcS2Dsp(number, Chassis);
|
||||||
eRoutingPortConnectionType.Sdi, null);
|
AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.DmSmFiber);
|
||||||
AddInCardHdmiAndAudioLoopPorts(number);
|
AddInCardHdmiAndAudioLoopPorts(number);
|
||||||
}
|
break;
|
||||||
else if (type == "dmcdvi")
|
case "dmcsdi":
|
||||||
{
|
new DmcSdi(number, Chassis);
|
||||||
new DmcDvi(number, Chassis);
|
AddInputPortWithDebug(number, "sdiIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Sdi);
|
||||||
AddInputPortWithDebug(number, "dviIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Dvi);
|
AddOutputPortWithDebug(string.Format("inputCard{0}", number), "sdiOut", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
AddInputPortWithDebug(number, "audioIn", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio);
|
eRoutingPortConnectionType.Sdi, null);
|
||||||
AddInCardHdmiLoopPort(number);
|
AddInCardHdmiAndAudioLoopPorts(number);
|
||||||
}
|
break;
|
||||||
else if (type == "dmcvga")
|
case "dmcdvi":
|
||||||
{
|
new DmcDvi(number, Chassis);
|
||||||
new DmcVga(number, Chassis);
|
AddInputPortWithDebug(number, "dviIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Dvi);
|
||||||
AddInputPortWithDebug(number, "vgaIn", eRoutingSignalType.Video, eRoutingPortConnectionType.Vga);
|
AddInputPortWithDebug(number, "audioIn", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio);
|
||||||
AddInputPortWithDebug(number, "audioIn", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio);
|
AddInCardHdmiLoopPort(number);
|
||||||
AddInCardHdmiLoopPort(number);
|
break;
|
||||||
}
|
case "dmcvga":
|
||||||
else if (type == "dmcvidbnc")
|
new DmcVga(number, Chassis);
|
||||||
{
|
AddInputPortWithDebug(number, "vgaIn", eRoutingSignalType.Video, eRoutingPortConnectionType.Vga);
|
||||||
new DmcVidBnc(number, Chassis);
|
AddInputPortWithDebug(number, "audioIn", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio);
|
||||||
AddInputPortWithDebug(number, "componentIn", eRoutingSignalType.Video, eRoutingPortConnectionType.Component);
|
AddInCardHdmiLoopPort(number);
|
||||||
AddInputPortWithDebug(number, "audioIn", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio);
|
break;
|
||||||
AddInCardHdmiLoopPort(number);
|
case "dmcvidbnc":
|
||||||
}
|
new DmcVidBnc(number, Chassis);
|
||||||
else if (type == "dmcvidrcaa")
|
AddInputPortWithDebug(number, "componentIn", eRoutingSignalType.Video, eRoutingPortConnectionType.Component);
|
||||||
{
|
AddInputPortWithDebug(number, "audioIn", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio);
|
||||||
new DmcVidRcaA(number, Chassis);
|
AddInCardHdmiLoopPort(number);
|
||||||
AddInputPortWithDebug(number, "componentIn", eRoutingSignalType.Video, eRoutingPortConnectionType.Component);
|
break;
|
||||||
AddInputPortWithDebug(number, "audioIn", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio);
|
case "dmcvidrcaa":
|
||||||
AddInCardHdmiLoopPort(number);
|
new DmcVidRcaA(number, Chassis);
|
||||||
}
|
AddInputPortWithDebug(number, "componentIn", eRoutingSignalType.Video, eRoutingPortConnectionType.Component);
|
||||||
else if (type == "dmcvidrcad")
|
AddInputPortWithDebug(number, "audioIn", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio);
|
||||||
{
|
AddInCardHdmiLoopPort(number);
|
||||||
new DmcVidRcaD(number, Chassis);
|
break;
|
||||||
AddInputPortWithDebug(number, "componentIn", eRoutingSignalType.Video, eRoutingPortConnectionType.Component);
|
case "dmcvidrcad":
|
||||||
AddInputPortWithDebug(number, "audioIn", eRoutingSignalType.Audio, eRoutingPortConnectionType.DigitalAudio);
|
new DmcVidRcaD(number, Chassis);
|
||||||
AddInCardHdmiLoopPort(number);
|
AddInputPortWithDebug(number, "componentIn", eRoutingSignalType.Video, eRoutingPortConnectionType.Component);
|
||||||
}
|
AddInputPortWithDebug(number, "audioIn", eRoutingSignalType.Audio, eRoutingPortConnectionType.DigitalAudio);
|
||||||
else if (type == "dmcvid4")
|
AddInCardHdmiLoopPort(number);
|
||||||
{
|
break;
|
||||||
new DmcVid4(number, Chassis);
|
case "dmcvid4":
|
||||||
AddInputPortWithDebug(number, "compositeIn1", eRoutingSignalType.Video, eRoutingPortConnectionType.Composite);
|
new DmcVid4(number, Chassis);
|
||||||
AddInputPortWithDebug(number, "compositeIn2", eRoutingSignalType.Video, eRoutingPortConnectionType.Composite);
|
AddInputPortWithDebug(number, "compositeIn1", eRoutingSignalType.Video, eRoutingPortConnectionType.Composite);
|
||||||
AddInputPortWithDebug(number, "compositeIn3", eRoutingSignalType.Video, eRoutingPortConnectionType.Composite);
|
AddInputPortWithDebug(number, "compositeIn2", eRoutingSignalType.Video, eRoutingPortConnectionType.Composite);
|
||||||
AddInputPortWithDebug(number, "compositeIn4", eRoutingSignalType.Video, eRoutingPortConnectionType.Composite);
|
AddInputPortWithDebug(number, "compositeIn3", eRoutingSignalType.Video, eRoutingPortConnectionType.Composite);
|
||||||
AddInCardHdmiLoopPort(number);
|
AddInputPortWithDebug(number, "compositeIn4", eRoutingSignalType.Video, eRoutingPortConnectionType.Composite);
|
||||||
}
|
AddInCardHdmiLoopPort(number);
|
||||||
else if (type == "dmcstr")
|
break;
|
||||||
{
|
case "dmcstr":
|
||||||
new DmcStr(number, Chassis);
|
new DmcStr(number, Chassis);
|
||||||
AddInputPortWithDebug(number, "streamIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Streaming);
|
AddInputPortWithDebug(number, "streamIn", eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Streaming);
|
||||||
AddInCardHdmiAndAudioLoopPorts(number);
|
AddInCardHdmiAndAudioLoopPorts(number);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -692,119 +700,122 @@ namespace PepperDash.Essentials.DM
|
|||||||
type = type.ToLower();
|
type = type.ToLower();
|
||||||
|
|
||||||
Debug.Console(2, this, "Adding output card '{0}', slot {1}", type, number);
|
Debug.Console(2, this, "Adding output card '{0}', slot {1}", type, number);
|
||||||
if (type == "dmc4khdo")
|
switch (type)
|
||||||
{
|
{
|
||||||
var outputCard = new Dmc4kHdoSingle(number, Chassis);
|
case "dmc4khdo":
|
||||||
var cecPort1 = outputCard.Card1.HdmiOutput;
|
{
|
||||||
var cecPort2 = outputCard.Card2.HdmiOutput;
|
var outputCard = new Dmc4kHdoSingle(number, Chassis);
|
||||||
AddDmcHdoPorts(number, cecPort1, cecPort2);
|
var cecPort1 = outputCard.Card1.HdmiOutput;
|
||||||
|
var cecPort2 = outputCard.Card2.HdmiOutput;
|
||||||
|
AddDmcHdoPorts(number, cecPort1, cecPort2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "dmc4kzhdo":
|
||||||
|
{
|
||||||
|
var outputCard = new Dmc4kzHdoSingle(number, Chassis);
|
||||||
|
var cecPort1 = outputCard.Card1.HdmiOutput;
|
||||||
|
var cecPort2 = outputCard.Card2.HdmiOutput;
|
||||||
|
AddDmcHdoPorts(number, cecPort1, cecPort2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "dmchdo":
|
||||||
|
{
|
||||||
|
var outputCard = new DmcHdoSingle(number, Chassis);
|
||||||
|
var cecPort1 = outputCard.Card1.HdmiOutput;
|
||||||
|
var cecPort2 = outputCard.Card2.HdmiOutput;
|
||||||
|
AddDmcHdoPorts(number, cecPort1, cecPort2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "dmc4kcohd":
|
||||||
|
{
|
||||||
|
var outputCard = new Dmc4kCoHdSingle(number, Chassis);
|
||||||
|
var cecPort1 = outputCard.Card1.HdmiOutput;
|
||||||
|
AddDmcCoPorts(number, cecPort1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "dmc4kzcohd":
|
||||||
|
{
|
||||||
|
var outputCard = new Dmc4kzCoHdSingle(number, Chassis);
|
||||||
|
var cecPort1 = outputCard.Card1.HdmiOutput;
|
||||||
|
AddDmcCoPorts(number, cecPort1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "dmccohd":
|
||||||
|
{
|
||||||
|
var outputCard = new DmcCoHdSingle(number, Chassis);
|
||||||
|
var cecPort1 = outputCard.Card1.HdmiOutput;
|
||||||
|
AddDmcCoPorts(number, cecPort1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "dmccatohd":
|
||||||
|
{
|
||||||
|
var outputCard = new DmcCatoHdSingle(number, Chassis);
|
||||||
|
var cecPort1 = outputCard.Card1.HdmiOutput;
|
||||||
|
AddDmcCoPorts(number, cecPort1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "dmcsohd":
|
||||||
|
{
|
||||||
|
var outputCard = new DmcSoHdSingle(number, Chassis);
|
||||||
|
var cecPort1 = outputCard.Card1.HdmiOutput;
|
||||||
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "dmOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
|
eRoutingPortConnectionType.DmMmFiber, Chassis.Outputs[2 * (number - 1) + 1]);
|
||||||
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "hdmiOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
|
eRoutingPortConnectionType.Hdmi, Chassis.Outputs[2 * (number - 1) + 1], cecPort1);
|
||||||
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "dmOut2", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
|
eRoutingPortConnectionType.DmMmFiber, Chassis.Outputs[2 * (number - 1) + 2]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "dmcs2ohd":
|
||||||
|
{
|
||||||
|
var outputCard = new DmcS2oHdSingle(number, Chassis);
|
||||||
|
var cecPort1 = outputCard.Card1.HdmiOutput;
|
||||||
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "dmOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
|
eRoutingPortConnectionType.DmSmFiber, Chassis.Outputs[2 * (number - 1) + 1]);
|
||||||
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "hdmiOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
|
eRoutingPortConnectionType.Hdmi, Chassis.Outputs[2 * (number - 1) + 1], cecPort1);
|
||||||
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "dmOut2", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
|
eRoutingPortConnectionType.DmSmFiber, Chassis.Outputs[2 * (number - 1) + 2]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "dmcstro":
|
||||||
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "streamOut", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
|
eRoutingPortConnectionType.Streaming, Chassis.Outputs[2 * (number - 1) + 1]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Debug.Console(1, this, " WARNING: Output card type '{0}' is not available", type);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else if (type == "dmc4kzhdo")
|
|
||||||
{
|
|
||||||
var outputCard = new Dmc4kzHdoSingle(number, Chassis);
|
|
||||||
var cecPort1 = outputCard.Card1.HdmiOutput;
|
|
||||||
var cecPort2 = outputCard.Card2.HdmiOutput;
|
|
||||||
AddDmcHdoPorts(number, cecPort1, cecPort2);
|
|
||||||
}
|
|
||||||
else if (type == "dmchdo")
|
|
||||||
{
|
|
||||||
var outputCard = new DmcHdoSingle(number, Chassis);
|
|
||||||
var cecPort1 = outputCard.Card1.HdmiOutput;
|
|
||||||
var cecPort2 = outputCard.Card2.HdmiOutput;
|
|
||||||
AddDmcHdoPorts(number, cecPort1, cecPort2);
|
|
||||||
}
|
|
||||||
else if (type == "dmc4kcohd")
|
|
||||||
{
|
|
||||||
var outputCard = new Dmc4kCoHdSingle(number, Chassis);
|
|
||||||
var cecPort1 = outputCard.Card1.HdmiOutput;
|
|
||||||
AddDmcCoPorts(number, cecPort1);
|
|
||||||
}
|
|
||||||
else if (type == "dmc4kzcohd")
|
|
||||||
{
|
|
||||||
var outputCard = new Dmc4kzCoHdSingle(number, Chassis);
|
|
||||||
var cecPort1 = outputCard.Card1.HdmiOutput;
|
|
||||||
AddDmcCoPorts(number, cecPort1);
|
|
||||||
}
|
|
||||||
else if (type == "dmccohd")
|
|
||||||
{
|
|
||||||
var outputCard = new DmcCoHdSingle(number, Chassis);
|
|
||||||
var cecPort1 = outputCard.Card1.HdmiOutput;
|
|
||||||
AddDmcCoPorts(number, cecPort1);
|
|
||||||
}
|
|
||||||
else if (type == "dmccatohd")
|
|
||||||
{
|
|
||||||
var outputCard = new DmcCatoHdSingle(number, Chassis);
|
|
||||||
var cecPort1 = outputCard.Card1.HdmiOutput;
|
|
||||||
AddDmcCoPorts(number, cecPort1);
|
|
||||||
}
|
|
||||||
else if (type == "dmcsohd")
|
|
||||||
{
|
|
||||||
var outputCard = new DmcSoHdSingle(number, Chassis);
|
|
||||||
var cecPort1 = outputCard.Card1.HdmiOutput;
|
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "dmOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
|
||||||
eRoutingPortConnectionType.DmMmFiber, 2 * (number - 1) + 1);
|
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "hdmiOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
|
||||||
eRoutingPortConnectionType.Hdmi, 2 * (number - 1) + 1, cecPort1);
|
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "dmOut2", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
|
||||||
eRoutingPortConnectionType.DmMmFiber, 2 * (number - 1) + 2);
|
|
||||||
}
|
|
||||||
else if (type == "dmcs2ohd")
|
|
||||||
{
|
|
||||||
var outputCard = new DmcS2oHdSingle(number, Chassis);
|
|
||||||
var cecPort1 = outputCard.Card1.HdmiOutput;
|
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "dmOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
|
||||||
eRoutingPortConnectionType.DmSmFiber, 2 * (number - 1) + 1);
|
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "hdmiOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
|
||||||
eRoutingPortConnectionType.Hdmi, 2 * (number - 1) + 1, cecPort1);
|
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "dmOut2", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
|
||||||
eRoutingPortConnectionType.DmSmFiber, 2 * (number - 1) + 2);
|
|
||||||
}
|
|
||||||
else if (type == "dmcstro")
|
|
||||||
{
|
|
||||||
var outputCard = new DmcStroSingle(number, Chassis);
|
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "streamOut", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
|
||||||
eRoutingPortConnectionType.Streaming, 2 * (number - 1) + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
Debug.Console(1, this, " WARNING: Output card type '{0}' is not available", type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddDmcHdoPorts(uint number, ICec cecPort1, ICec cecPort2)
|
void AddDmcHdoPorts(uint number, ICec cecPort1, ICec cecPort2)
|
||||||
{
|
{
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "hdmiOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "hdmiOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
eRoutingPortConnectionType.Hdmi, 2 * (number - 1) + 1, cecPort1);
|
eRoutingPortConnectionType.Hdmi, Chassis.Outputs[2 * (number - 1) + 1], cecPort1);
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "audioOut1", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio,
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "audioOut1", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio,
|
||||||
2 * (number - 1) + 1);
|
Chassis.Outputs[2 * (number - 1) + 1]);
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "hdmiOut2", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "hdmiOut2", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
eRoutingPortConnectionType.Hdmi, 2 * (number - 1) + 2, cecPort2);
|
eRoutingPortConnectionType.Hdmi, Chassis.Outputs[2 * (number - 1) + 2], cecPort2);
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "audioOut2", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio,
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "audioOut2", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio,
|
||||||
2 * (number - 1) + 2);
|
Chassis.Outputs[2 * (number - 1) + 2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddDmcCoPorts(uint number, ICec cecPort1)
|
void AddDmcCoPorts(uint number, ICec cecPort1)
|
||||||
{
|
{
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "dmOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "dmOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
eRoutingPortConnectionType.DmCat, 2 * (number - 1) + 1);
|
eRoutingPortConnectionType.DmCat, Chassis.Outputs[2 * (number - 1) + 1]);
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "hdmiOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "hdmiOut1", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
eRoutingPortConnectionType.Hdmi, 2 * (number - 1) + 1, cecPort1);
|
eRoutingPortConnectionType.Hdmi, Chassis.Outputs[2 * (number - 1) + 1], cecPort1);
|
||||||
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "dmOut2", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
AddOutputPortWithDebug(string.Format("outputCard{0}", number), "dmOut2", eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
eRoutingPortConnectionType.DmCat, 2 * (number - 1) + 2);
|
eRoutingPortConnectionType.DmCat, Chassis.Outputs[2 * (number - 1) + 2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds InputPort
|
/// Adds InputPort
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void AddInputPortWithDebug(uint cardNum, string portName, eRoutingSignalType sigType, eRoutingPortConnectionType portType)
|
void AddInputPortWithDebug(uint cardNum, string portName, eRoutingSignalType sigType, eRoutingPortConnectionType portType)
|
||||||
{
|
{
|
||||||
var portKey = string.Format("inputCard{0}--{1}", cardNum, portName);
|
AddInputPortWithDebug(cardNum, portName, sigType, portType, null);
|
||||||
Debug.Console(2, this, "Adding input port '{0}'", portKey);
|
|
||||||
var inputPort = new RoutingInputPort(portKey, sigType, portType, cardNum, this)
|
|
||||||
{
|
|
||||||
FeedbackMatchObject = Chassis.Inputs[cardNum]
|
|
||||||
};
|
|
||||||
|
|
||||||
InputPorts.Add(inputPort);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -814,7 +825,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
{
|
{
|
||||||
var portKey = string.Format("inputCard{0}--{1}", cardNum, portName);
|
var portKey = string.Format("inputCard{0}--{1}", cardNum, portName);
|
||||||
Debug.Console(2, this, "Adding input port '{0}'", portKey);
|
Debug.Console(2, this, "Adding input port '{0}'", portKey);
|
||||||
var inputPort = new RoutingInputPort(portKey, sigType, portType, cardNum, this)
|
var inputPort = new RoutingInputPort(portKey, sigType, portType, Chassis.Inputs[cardNum], this)
|
||||||
{
|
{
|
||||||
FeedbackMatchObject = Chassis.Inputs[cardNum]
|
FeedbackMatchObject = Chassis.Inputs[cardNum]
|
||||||
}; ;
|
}; ;
|
||||||
@@ -828,19 +839,9 @@ namespace PepperDash.Essentials.DM
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds OutputPort
|
/// Adds OutputPort
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void AddOutputPortWithDebug(string cardName, string portName, eRoutingSignalType sigType, eRoutingPortConnectionType portType, object selector)
|
void AddOutputPortWithDebug(string cardName, string portName, eRoutingSignalType sigType, eRoutingPortConnectionType portType, object selector)
|
||||||
{
|
{
|
||||||
var portKey = string.Format("{0}--{1}", cardName, portName);
|
AddOutputPortWithDebug(cardName, portName, sigType, portType, selector, null);
|
||||||
Debug.Console(2, this, "Adding output port '{0}'", portKey);
|
|
||||||
|
|
||||||
var outputPort = new RoutingOutputPort(portKey, sigType, portType, selector, this);
|
|
||||||
|
|
||||||
if (portName.IndexOf("Loop", StringComparison.InvariantCultureIgnoreCase) < 0)
|
|
||||||
{
|
|
||||||
outputPort.FeedbackMatchObject = Chassis.Outputs[(uint) selector];
|
|
||||||
}
|
|
||||||
|
|
||||||
OutputPorts.Add(outputPort);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -854,7 +855,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
if (portName.IndexOf("Loop", StringComparison.InvariantCultureIgnoreCase) < 0)
|
if (portName.IndexOf("Loop", StringComparison.InvariantCultureIgnoreCase) < 0)
|
||||||
{
|
{
|
||||||
outputPort.FeedbackMatchObject = Chassis.Outputs[(uint)selector];
|
outputPort.FeedbackMatchObject = selector;
|
||||||
}
|
}
|
||||||
if (cecPort != null)
|
if (cecPort != null)
|
||||||
outputPort.Port = cecPort;
|
outputPort.Port = cecPort;
|
||||||
@@ -1144,7 +1145,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
{
|
{
|
||||||
if (RouteOffTimers.ContainsKey(pnt))
|
if (RouteOffTimers.ContainsKey(pnt))
|
||||||
return;
|
return;
|
||||||
RouteOffTimers[pnt] = new CTimer(o => { ExecuteSwitch(0, pnt.Number, pnt.Type); }, RouteOffTime);
|
RouteOffTimers[pnt] = new CTimer(o => ExecuteSwitch(null, pnt.Selector, pnt.Type), RouteOffTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send out sigs when coming online
|
// Send out sigs when coming online
|
||||||
@@ -1171,18 +1172,24 @@ namespace PepperDash.Essentials.DM
|
|||||||
#region IRouting Members
|
#region IRouting Members
|
||||||
public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType sigType)
|
public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType sigType)
|
||||||
{
|
{
|
||||||
Debug.Console(2, this, "Making an awesome DM route from {0} to {1} {2}", inputSelector, outputSelector, sigType);
|
Debug.Console(2, this, "Making an awesome DM route from {0} to {1} {2}", inputSelector, outputSelector, sigType);
|
||||||
|
|
||||||
var input = Convert.ToUInt32(inputSelector); // Cast can sometimes fail
|
var input = inputSelector as DMInput;//Input Selector could be null...
|
||||||
var output = Convert.ToUInt32(outputSelector);
|
|
||||||
|
var output = outputSelector as DMOutput;
|
||||||
var chassisSize = (uint) Chassis.NumberOfInputs; //need this to determine USB routing values 8x8 -> 1-8 is inputs 1-8, 17-24 is outputs 1-8
|
|
||||||
//16x16 1-16 is inputs 1-16, 17-32 is outputs 1-16
|
if (output == null)
|
||||||
//32x32 1-32 is inputs 1-32, 33-64 is outputs 1-32
|
{
|
||||||
|
Debug.Console(0, this, Debug.ErrorLogLevel.Warning,
|
||||||
|
"Unable to execute switch for inputSelector {0} to outputSelector {1}", inputSelector,
|
||||||
|
outputSelector);
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Check to see if there's an off timer waiting on this and if so, cancel
|
// Check to see if there's an off timer waiting on this and if so, cancel
|
||||||
var key = new PortNumberType(output, sigType);
|
var key = new PortNumberType(output, sigType);
|
||||||
if (input == 0)
|
if (input == null)
|
||||||
{
|
{
|
||||||
StartOffTimer(key);
|
StartOffTimer(key);
|
||||||
}
|
}
|
||||||
@@ -1196,110 +1203,109 @@ namespace PepperDash.Essentials.DM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var inCard = input == 0 ? null : Chassis.Inputs[input];
|
//var inCard = input == 0 ? null : Chassis.Inputs[input];
|
||||||
var outCard = input == 0 ? null : Chassis.Outputs[output];
|
//var outCard = input == 0 ? null : Chassis.Outputs[output];
|
||||||
|
|
||||||
// NOTE THAT BITWISE COMPARISONS - TO CATCH ALL ROUTING TYPES
|
// NOTE THAT BITWISE COMPARISONS - TO CATCH ALL ROUTING TYPES
|
||||||
if ((sigType & eRoutingSignalType.Video) == eRoutingSignalType.Video)
|
if ((sigType & eRoutingSignalType.Video) == eRoutingSignalType.Video)
|
||||||
{
|
{
|
||||||
Chassis.VideoEnter.BoolValue = true;
|
Chassis.VideoEnter.BoolValue = true;
|
||||||
Chassis.Outputs[output].VideoOut = inCard;
|
output.VideoOut = input; //Chassis.Outputs[output].VideoOut = inCard;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((sigType & eRoutingSignalType.Audio) == eRoutingSignalType.Audio)
|
if ((sigType & eRoutingSignalType.Audio) == eRoutingSignalType.Audio)
|
||||||
{
|
{
|
||||||
(Chassis as DmMDMnxn).AudioEnter.BoolValue = true;
|
var dmMdMnxn = Chassis as DmMDMnxn;
|
||||||
Chassis.Outputs[output].AudioOut = inCard;
|
if (dmMdMnxn != null)
|
||||||
|
{
|
||||||
|
dmMdMnxn.AudioEnter.BoolValue = true;
|
||||||
|
}
|
||||||
|
output.VideoOut = input;
|
||||||
|
//Chassis.Outputs[output].AudioOut = inCard;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((sigType & eRoutingSignalType.UsbOutput) == eRoutingSignalType.UsbOutput || (sigType & eRoutingSignalType.UsbInput) == eRoutingSignalType.UsbInput)
|
||||||
|
{
|
||||||
|
Chassis.USBEnter.BoolValue = true;
|
||||||
|
output.USBRoutedTo = input;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((sigType & eRoutingSignalType.UsbOutput) == eRoutingSignalType.UsbOutput)
|
|
||||||
{
|
|
||||||
//using base here because USB can be routed between 2 output cards or 2 input cards
|
|
||||||
DMInputOutputBase dmCard;
|
|
||||||
|
|
||||||
Debug.Console(2, this, "Executing USB Output switch.\r\n in:{0} output: {1}", input, output);
|
|
||||||
|
|
||||||
if (input > chassisSize)
|
|
||||||
{
|
|
||||||
//wanting to route an output to an output. Subtract chassis size and get output, unless it's 8x8
|
|
||||||
//need this to determine USB routing values
|
|
||||||
//8x8 -> 1-8 is inputs 1-8, 17-24 is outputs 1-8
|
|
||||||
//16x16 1-16 is inputs 1-16, 17-32 is outputs 1-16
|
|
||||||
//32x32 1-32 is inputs 1-32, 33-64 is outputs 1-32
|
|
||||||
uint outputIndex;
|
|
||||||
|
|
||||||
if (chassisSize == 8)
|
|
||||||
{
|
|
||||||
outputIndex = input - 16;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
outputIndex = input - chassisSize;
|
|
||||||
}
|
|
||||||
dmCard = Chassis.Outputs[outputIndex];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dmCard = inCard;
|
|
||||||
}
|
|
||||||
Chassis.USBEnter.BoolValue = true;
|
|
||||||
if (Chassis.Outputs[output] != null)
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "Routing USB for input {0} to {1}", Chassis.Outputs[input], dmCard);
|
|
||||||
Chassis.Outputs[output].USBRoutedTo = dmCard;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((sigType & eRoutingSignalType.UsbInput) == eRoutingSignalType.UsbInput)
|
|
||||||
{
|
|
||||||
//using base here because USB can be routed between 2 output cards or 2 input cards
|
|
||||||
DMInputOutputBase dmCard;
|
|
||||||
|
|
||||||
Debug.Console(2, this, "Executing USB Input switch.\r\n in:{0} output: {1}", input, output);
|
|
||||||
|
|
||||||
if (output > chassisSize)
|
|
||||||
{
|
|
||||||
//wanting to route an input to an output. Subtract chassis size and get output, unless it's 8x8
|
|
||||||
//need this to determine USB routing values
|
|
||||||
//8x8 -> 1-8 is inputs 1-8, 17-24 is outputs 1-8
|
|
||||||
//16x16 1-16 is inputs 1-16, 17-32 is outputs 1-16
|
|
||||||
//32x32 1-32 is inputs 1-32, 33-64 is outputs 1-32
|
|
||||||
uint outputIndex;
|
|
||||||
|
|
||||||
if (chassisSize == 8)
|
|
||||||
{
|
|
||||||
outputIndex = input - 16;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
outputIndex = input - chassisSize;
|
|
||||||
}
|
|
||||||
dmCard = Chassis.Outputs[outputIndex];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dmCard = Chassis.Inputs[input];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Chassis.USBEnter.BoolValue = true;
|
|
||||||
|
|
||||||
if (Chassis.Inputs[output] == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Debug.Console(2, this, "Routing USB for input {0} to {1}", Chassis.Inputs[output], dmCard);
|
|
||||||
Chassis.Inputs[output].USBRoutedTo = dmCard;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region IRoutingNumeric Members
|
#region IRoutingNumeric Members
|
||||||
|
|
||||||
public void ExecuteNumericSwitch(ushort inputSelector, ushort outputSelector, eRoutingSignalType sigType)
|
public void ExecuteNumericSwitch(ushort inputSelector, ushort outputSelector, eRoutingSignalType sigType)
|
||||||
{
|
{
|
||||||
ExecuteSwitch(inputSelector, outputSelector, sigType);
|
var chassisSize = (uint)Chassis.NumberOfInputs; //need this to determine USB routing values 8x8 -> 1-8 is inputs 1-8, 17-24 is outputs 1-8
|
||||||
|
//16x16 1-16 is inputs 1-16, 17-32 is outputs 1-16
|
||||||
|
//32x32 1-32 is inputs 1-32, 33-64 is outputs 1-32
|
||||||
|
|
||||||
|
DMInputOutputBase dmCard;
|
||||||
|
|
||||||
|
if ((sigType & eRoutingSignalType.UsbInput) == eRoutingSignalType.UsbInput)
|
||||||
|
{
|
||||||
|
if (outputSelector > chassisSize)
|
||||||
|
{
|
||||||
|
uint outputIndex;
|
||||||
|
|
||||||
|
if (chassisSize == 8)
|
||||||
|
{
|
||||||
|
outputIndex = (uint) inputSelector - 16;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
outputIndex = inputSelector - chassisSize;
|
||||||
|
}
|
||||||
|
dmCard = Chassis.Outputs[outputIndex];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dmCard = Chassis.Inputs[inputSelector];
|
||||||
|
}
|
||||||
|
|
||||||
|
ExecuteSwitch(dmCard, Chassis.Outputs[outputSelector], sigType);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((sigType & eRoutingSignalType.UsbOutput) == eRoutingSignalType.UsbOutput)
|
||||||
|
{
|
||||||
|
Debug.Console(2, this, "Executing USB Output switch.\r\n in:{0} output: {1}", inputSelector, outputSelector);
|
||||||
|
|
||||||
|
if (inputSelector > chassisSize)
|
||||||
|
{
|
||||||
|
//wanting to route an output to an output. Subtract chassis size and get output, unless it's 8x8
|
||||||
|
//need this to determine USB routing values
|
||||||
|
//8x8 -> 1-8 is inputs 1-8, 17-24 is outputs 1-8
|
||||||
|
//16x16 1-16 is inputs 1-16, 17-32 is outputs 1-16
|
||||||
|
//32x32 1-32 is inputs 1-32, 33-64 is outputs 1-32
|
||||||
|
uint outputIndex;
|
||||||
|
|
||||||
|
if (chassisSize == 8)
|
||||||
|
{
|
||||||
|
outputIndex = (uint) inputSelector - 16;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
outputIndex = inputSelector - chassisSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
dmCard = Chassis.Outputs[outputIndex];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dmCard = Chassis.Inputs[inputSelector];
|
||||||
|
}
|
||||||
|
Chassis.USBEnter.BoolValue = true;
|
||||||
|
|
||||||
|
Debug.Console(2, this, "Routing USB for input {0} to {1}", inputSelector, dmCard);
|
||||||
|
ExecuteSwitch(dmCard, Chassis.Outputs[outputSelector], sigType);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var inputCard = inputSelector == 0 ? null : Chassis.Inputs[inputSelector];
|
||||||
|
var outputCard = Chassis.Outputs[outputSelector];
|
||||||
|
|
||||||
|
ExecuteSwitch(inputCard, outputCard, sigType);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -1850,13 +1856,23 @@ namespace PepperDash.Essentials.DM
|
|||||||
public struct PortNumberType
|
public struct PortNumberType
|
||||||
{
|
{
|
||||||
public uint Number { get; private set; }
|
public uint Number { get; private set; }
|
||||||
|
public object Selector { get; private set; }
|
||||||
public eRoutingSignalType Type { get; private set; }
|
public eRoutingSignalType Type { get; private set; }
|
||||||
|
|
||||||
public PortNumberType(uint number, eRoutingSignalType type)
|
public PortNumberType(object selector, eRoutingSignalType type)
|
||||||
: this()
|
: this()
|
||||||
{
|
{
|
||||||
Number = number;
|
Selector = selector;
|
||||||
Type = type;
|
Type = type;
|
||||||
|
|
||||||
|
if (Selector is DMOutput)
|
||||||
|
{
|
||||||
|
Number = (selector as DMOutput).Number;
|
||||||
|
}
|
||||||
|
else if (Selector is uint)
|
||||||
|
{
|
||||||
|
Number = (uint) selector;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ namespace PepperDash.Essentials.DM
|
|||||||
{
|
{
|
||||||
public class DmpsRoutingController : EssentialsBridgeableDevice, IRoutingNumericWithFeedback, IHasFeedback
|
public class DmpsRoutingController : EssentialsBridgeableDevice, IRoutingNumericWithFeedback, IHasFeedback
|
||||||
{
|
{
|
||||||
|
private const string NonePortKey = "none";
|
||||||
|
|
||||||
public CrestronControlSystem Dmps { get; set; }
|
public CrestronControlSystem Dmps { get; set; }
|
||||||
public ISystemControl SystemControl { get; private set; }
|
public ISystemControl SystemControl { get; private set; }
|
||||||
|
|
||||||
@@ -75,20 +77,18 @@ namespace PepperDash.Essentials.DM
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var systemControl = Global.ControlSystem.SystemControl;
|
||||||
ISystemControl systemControl = null;
|
|
||||||
|
|
||||||
systemControl = Global.ControlSystem.SystemControl as ISystemControl;
|
|
||||||
|
|
||||||
if (systemControl == null)
|
if (systemControl == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var controller = new DmpsRoutingController(key, name, systemControl);
|
var controller = new DmpsRoutingController(key, name, systemControl)
|
||||||
|
{
|
||||||
controller.InputNames = properties.InputNames;
|
InputNames = properties.InputNames,
|
||||||
controller.OutputNames = properties.OutputNames;
|
OutputNames = properties.OutputNames
|
||||||
|
};
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(properties.NoRouteText))
|
if (!string.IsNullOrEmpty(properties.NoRouteText))
|
||||||
controller.NoRouteText = properties.NoRouteText;
|
controller.NoRouteText = properties.NoRouteText;
|
||||||
@@ -96,9 +96,9 @@ namespace PepperDash.Essentials.DM
|
|||||||
return controller;
|
return controller;
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (System.Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Debug.Console(0, "Error getting DMPS Controller:\r{0}", e);
|
Debug.Console(0, "Error getting DMPS Controller:\r\n{0}", e);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -113,6 +113,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
public DmpsRoutingController(string key, string name, ISystemControl systemControl)
|
public DmpsRoutingController(string key, string name, ISystemControl systemControl)
|
||||||
: base(key, name)
|
: base(key, name)
|
||||||
{
|
{
|
||||||
|
|
||||||
Dmps = Global.ControlSystem;
|
Dmps = Global.ControlSystem;
|
||||||
SystemControl = systemControl;
|
SystemControl = systemControl;
|
||||||
|
|
||||||
@@ -427,14 +428,11 @@ namespace PepperDash.Essentials.DM
|
|||||||
{
|
{
|
||||||
Debug.Console(1, this, "Adding Input Card Number {0} Type: {1}", inputCard.Number, inputCard.CardInputOutputType.ToString());
|
Debug.Console(1, this, "Adding Input Card Number {0} Type: {1}", inputCard.Number, inputCard.CardInputOutputType.ToString());
|
||||||
|
|
||||||
InputEndpointOnlineFeedbacks[inputCard.Number] = new BoolFeedback(() => { return inputCard.EndpointOnlineFeedback; });
|
InputEndpointOnlineFeedbacks[inputCard.Number] = new BoolFeedback(() => inputCard.EndpointOnlineFeedback);
|
||||||
|
|
||||||
if (inputCard.VideoDetectedFeedback != null)
|
if (inputCard.VideoDetectedFeedback != null)
|
||||||
{
|
{
|
||||||
VideoInputSyncFeedbacks[inputCard.Number] = new BoolFeedback(() =>
|
VideoInputSyncFeedbacks[inputCard.Number] = new BoolFeedback(() => inputCard.VideoDetectedFeedback.BoolValue);
|
||||||
{
|
|
||||||
return inputCard.VideoDetectedFeedback.BoolValue;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InputNameFeedbacks[inputCard.Number] = new StringFeedback(() =>
|
InputNameFeedbacks[inputCard.Number] = new StringFeedback(() =>
|
||||||
@@ -443,13 +441,10 @@ namespace PepperDash.Essentials.DM
|
|||||||
{
|
{
|
||||||
Debug.Console(2, this, "Input Card {0} Name: {1}", inputCard.Number, inputCard.NameFeedback.StringValue);
|
Debug.Console(2, this, "Input Card {0} Name: {1}", inputCard.Number, inputCard.NameFeedback.StringValue);
|
||||||
return inputCard.NameFeedback.StringValue;
|
return inputCard.NameFeedback.StringValue;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
Debug.Console(2, this, "Input Card {0} Name is null", inputCard.Number);
|
||||||
else
|
return "";
|
||||||
{
|
|
||||||
Debug.Console(2, this, "Input Card {0} Name is null", inputCard.Number);
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
AddInputCard(inputCard.Number, inputCard);
|
AddInputCard(inputCard.Number, inputCard);
|
||||||
@@ -459,6 +454,9 @@ namespace PepperDash.Essentials.DM
|
|||||||
Debug.Console(2, this, "***********Input Card of type {0} is cannot be cast as DMInput*************", card.CardInputOutputType);
|
Debug.Console(2, this, "***********Input Card of type {0} is cannot be cast as DMInput*************", card.CardInputOutputType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InputPorts.Add(new RoutingInputPort(NonePortKey, eRoutingSignalType.AudioVideo,
|
||||||
|
eRoutingPortConnectionType.None, null, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -531,15 +529,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
private void AddInputPortWithDebug(uint cardNum, string portName, eRoutingSignalType sigType,
|
private void AddInputPortWithDebug(uint cardNum, string portName, eRoutingSignalType sigType,
|
||||||
eRoutingPortConnectionType portType)
|
eRoutingPortConnectionType portType)
|
||||||
{
|
{
|
||||||
var portKey = string.Format("inputCard{0}--{1}", cardNum, portName);
|
AddInputPortWithDebug(cardNum, portName, sigType, portType, null);
|
||||||
Debug.Console(2, this, "Adding input port '{0}'", portKey);
|
|
||||||
var inputPort = new RoutingInputPort(portKey, sigType, portType, cardNum, this)
|
|
||||||
{
|
|
||||||
FeedbackMatchObject = Dmps.SwitcherInputs[cardNum]
|
|
||||||
};
|
|
||||||
;
|
|
||||||
|
|
||||||
InputPorts.Add(inputPort);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -549,11 +539,10 @@ namespace PepperDash.Essentials.DM
|
|||||||
{
|
{
|
||||||
var portKey = string.Format("inputCard{0}--{1}", cardNum, portName);
|
var portKey = string.Format("inputCard{0}--{1}", cardNum, portName);
|
||||||
Debug.Console(2, this, "Adding input port '{0}'", portKey);
|
Debug.Console(2, this, "Adding input port '{0}'", portKey);
|
||||||
var inputPort = new RoutingInputPort(portKey, sigType, portType, cardNum, this)
|
var inputPort = new RoutingInputPort(portKey, sigType, portType, Dmps.SwitcherInputs[cardNum], this)
|
||||||
{
|
{
|
||||||
FeedbackMatchObject = Dmps.SwitcherInputs[cardNum]
|
FeedbackMatchObject = Dmps.SwitcherInputs[cardNum]
|
||||||
};
|
};
|
||||||
;
|
|
||||||
|
|
||||||
if (cecPort != null)
|
if (cecPort != null)
|
||||||
inputPort.Port = cecPort;
|
inputPort.Port = cecPort;
|
||||||
@@ -672,7 +661,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
/// <param name="number"></param>
|
/// <param name="number"></param>
|
||||||
void AddAudioOnlyOutputPort(uint number, string portName)
|
void AddAudioOnlyOutputPort(uint number, string portName)
|
||||||
{
|
{
|
||||||
AddOutputPortWithDebug(number, portName, eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio, number);
|
AddOutputPortWithDebug(number, portName, eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio, Dmps.SwitcherOutputs[number]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -682,7 +671,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
/// <param name="cecPort"></param>
|
/// <param name="cecPort"></param>
|
||||||
void AddHdmiOutputPort(uint number, ICec cecPort)
|
void AddHdmiOutputPort(uint number, ICec cecPort)
|
||||||
{
|
{
|
||||||
AddOutputPortWithDebug(number, string.Format("hdmiOut{0}", number), eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, number, cecPort);
|
AddOutputPortWithDebug(number, string.Format("hdmiOut{0}", number), eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, Dmps.SwitcherOutputs[number], cecPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -691,7 +680,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
/// <param name="number"></param>
|
/// <param name="number"></param>
|
||||||
void AddDmOutputPort(uint number)
|
void AddDmOutputPort(uint number)
|
||||||
{
|
{
|
||||||
AddOutputPortWithDebug(number, string.Format("dmOut{0}", number), eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.DmCat, number);
|
AddOutputPortWithDebug(number, string.Format("dmOut{0}", number), eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.DmCat, Dmps.SwitcherOutputs[number]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -699,12 +688,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
void AddOutputPortWithDebug(uint cardNum, string portName, eRoutingSignalType sigType, eRoutingPortConnectionType portType, object selector)
|
void AddOutputPortWithDebug(uint cardNum, string portName, eRoutingSignalType sigType, eRoutingPortConnectionType portType, object selector)
|
||||||
{
|
{
|
||||||
var portKey = string.Format("outputCard{0}--{1}", cardNum, portName);
|
AddOutputPortWithDebug(cardNum, portName, sigType, portType, selector, null);
|
||||||
Debug.Console(2, this, "Adding output port '{0}'", portKey);
|
|
||||||
OutputPorts.Add(new RoutingOutputPort(portKey, sigType, portType, selector, this)
|
|
||||||
{
|
|
||||||
FeedbackMatchObject = Dmps.SwitcherOutputs[cardNum]
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -836,7 +820,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
{
|
{
|
||||||
if (RouteOffTimers.ContainsKey(pnt))
|
if (RouteOffTimers.ContainsKey(pnt))
|
||||||
return;
|
return;
|
||||||
RouteOffTimers[pnt] = new CTimer(o => ExecuteSwitch(0, pnt.Number, pnt.Type), RouteOffTime);
|
RouteOffTimers[pnt] = new CTimer(o => ExecuteSwitch(null, pnt.Selector, pnt.Type), RouteOffTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IRouting Members
|
#region IRouting Members
|
||||||
@@ -848,21 +832,32 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
Debug.Console(2, this, "Attempting a DM route from input {0} to output {1} {2}", inputSelector, outputSelector, sigType);
|
Debug.Console(2, this, "Attempting a DM route from input {0} to output {1} {2}", inputSelector, outputSelector, sigType);
|
||||||
|
|
||||||
var input = Convert.ToUInt32(inputSelector); // Cast can sometimes fail
|
//var input = Convert.ToUInt32(inputSelector); // Cast can sometimes fail
|
||||||
var output = Convert.ToUInt32(outputSelector);
|
//var output = Convert.ToUInt32(outputSelector);
|
||||||
|
|
||||||
|
var input = inputSelector as DMInput;
|
||||||
|
var output = outputSelector as DMOutput;
|
||||||
|
|
||||||
|
if (output == null)
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, Debug.ErrorLogLevel.Warning,
|
||||||
|
"Unable to execute switch for inputSelector {0} to outputSelector {1}", inputSelector,
|
||||||
|
outputSelector);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var sigTypeIsUsbOrVideo = ((sigType & eRoutingSignalType.Video) == eRoutingSignalType.Video) ||
|
var sigTypeIsUsbOrVideo = ((sigType & eRoutingSignalType.Video) == eRoutingSignalType.Video) ||
|
||||||
((sigType & eRoutingSignalType.UsbInput) == eRoutingSignalType.UsbInput) ||
|
((sigType & eRoutingSignalType.UsbInput) == eRoutingSignalType.UsbInput) ||
|
||||||
((sigType & eRoutingSignalType.UsbOutput) == eRoutingSignalType.UsbOutput);
|
((sigType & eRoutingSignalType.UsbOutput) == eRoutingSignalType.UsbOutput);
|
||||||
|
|
||||||
if ((input <= Dmps.NumberOfSwitcherInputs && output <= Dmps.NumberOfSwitcherOutputs &&
|
if (input == null || (input.Number <= Dmps.NumberOfSwitcherInputs && output.Number <= Dmps.NumberOfSwitcherOutputs &&
|
||||||
sigTypeIsUsbOrVideo) ||
|
sigTypeIsUsbOrVideo) ||
|
||||||
(input <= Dmps.NumberOfSwitcherInputs + 5 && output <= Dmps.NumberOfSwitcherOutputs &&
|
(input.Number <= Dmps.NumberOfSwitcherInputs + 5 && output.Number <= Dmps.NumberOfSwitcherOutputs &&
|
||||||
(sigType & eRoutingSignalType.Audio) == eRoutingSignalType.Audio))
|
(sigType & eRoutingSignalType.Audio) == eRoutingSignalType.Audio))
|
||||||
{
|
{
|
||||||
// Check to see if there's an off timer waiting on this and if so, cancel
|
// Check to see if there's an off timer waiting on this and if so, cancel
|
||||||
var key = new PortNumberType(output, sigType);
|
var key = new PortNumberType(output, sigType);
|
||||||
if (input == 0)
|
if (input == null)
|
||||||
{
|
{
|
||||||
StartOffTimer(key);
|
StartOffTimer(key);
|
||||||
}
|
}
|
||||||
@@ -877,60 +872,47 @@ namespace PepperDash.Essentials.DM
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DMOutput dmOutputCard = output == 0 ? null : Dmps.SwitcherOutputs[output] as DMOutput;
|
//DMOutput dmOutputCard = output == 0 ? null : Dmps.SwitcherOutputs[output] as DMOutput;
|
||||||
|
|
||||||
//if (inCard != null)
|
//if (inCard != null)
|
||||||
//{
|
//{
|
||||||
// NOTE THAT BITWISE COMPARISONS - TO CATCH ALL ROUTING TYPES
|
// NOTE THAT BITWISE COMPARISONS - TO CATCH ALL ROUTING TYPES
|
||||||
if ((sigType & eRoutingSignalType.Video) == eRoutingSignalType.Video)
|
if ((sigType & eRoutingSignalType.Video) == eRoutingSignalType.Video)
|
||||||
{
|
{
|
||||||
DMInput dmInputCard = input == 0 ? null : Dmps.SwitcherInputs[input] as DMInput;
|
|
||||||
//SystemControl.VideoEnter.BoolValue = true;
|
output.VideoOut = input;
|
||||||
if (dmOutputCard != null)
|
|
||||||
dmOutputCard.VideoOut = dmInputCard;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((sigType & eRoutingSignalType.Audio) == eRoutingSignalType.Audio)
|
if ((sigType & eRoutingSignalType.Audio) == eRoutingSignalType.Audio)
|
||||||
{
|
{
|
||||||
DMInput dmInputCard = null;
|
try
|
||||||
if (input <= Dmps.NumberOfSwitcherInputs)
|
|
||||||
{
|
{
|
||||||
dmInputCard = input == 0 ? null : Dmps.SwitcherInputs[input] as DMInput;
|
output.AudioOut = input;
|
||||||
}
|
}
|
||||||
|
catch (NotSupportedException)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Routing input {0} audio to output {1}",
|
||||||
|
(eDmps34KAudioOutSource) (input == null ? 0 : input.Number),
|
||||||
|
(CrestronControlSystem.eDmps34K350COutputs) output.Number);
|
||||||
|
|
||||||
if (dmOutputCard != null)
|
output.AudioOutSource = input == null
|
||||||
try
|
? eDmps34KAudioOutSource.NoRoute
|
||||||
{
|
: (eDmps34KAudioOutSource)input.Number;
|
||||||
dmOutputCard.AudioOut = dmInputCard;
|
}
|
||||||
}
|
|
||||||
catch (NotSupportedException)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Routing input {0} audio to output {1}",
|
|
||||||
(eDmps34KAudioOutSource) input, (CrestronControlSystem.eDmps34K350COutputs) output);
|
|
||||||
|
|
||||||
dmOutputCard.AudioOutSource = (eDmps34KAudioOutSource) input;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((sigType & eRoutingSignalType.UsbOutput) == eRoutingSignalType.UsbOutput)
|
if ((sigType & eRoutingSignalType.UsbOutput) == eRoutingSignalType.UsbOutput)
|
||||||
{
|
{
|
||||||
DMInput dmInputCard = input == 0 ? null : Dmps.SwitcherInputs[input] as DMInput;
|
|
||||||
if (dmOutputCard != null)
|
output.USBRoutedTo = input;
|
||||||
dmOutputCard.USBRoutedTo = dmInputCard;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((sigType & eRoutingSignalType.UsbInput) == eRoutingSignalType.UsbInput)
|
if ((sigType & eRoutingSignalType.UsbInput) != eRoutingSignalType.UsbInput)
|
||||||
{
|
{
|
||||||
DMInput dmInputCard = input == 0 ? null : Dmps.SwitcherInputs[input] as DMInput;
|
return;
|
||||||
if (dmInputCard != null)
|
|
||||||
dmInputCard.USBRoutedTo = dmOutputCard;
|
|
||||||
}
|
}
|
||||||
//}
|
if (input != null)
|
||||||
//else
|
input.USBRoutedTo = output;
|
||||||
//{
|
|
||||||
// Debug.Console(1, this, "Unable to execute route from input {0} to output {1}. Input card not available", inputSelector, outputSelector);
|
|
||||||
//}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -950,7 +932,10 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
public void ExecuteNumericSwitch(ushort inputSelector, ushort outputSelector, eRoutingSignalType sigType)
|
public void ExecuteNumericSwitch(ushort inputSelector, ushort outputSelector, eRoutingSignalType sigType)
|
||||||
{
|
{
|
||||||
ExecuteSwitch(inputSelector, outputSelector, sigType);
|
var input = inputSelector == 0 ? null : Dmps.SwitcherInputs[inputSelector];
|
||||||
|
var output = Dmps.SwitcherOutputs[outputSelector];
|
||||||
|
|
||||||
|
ExecuteSwitch(input, output, sigType);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ namespace PepperDash.Essentials.DM.Endpoints.DGEs
|
|||||||
|
|
||||||
DeviceInfo = new DeviceInfo();
|
DeviceInfo = new DeviceInfo();
|
||||||
|
|
||||||
//_dge.OnlineStatusChange += (currentDevice, args) => { if (args.DeviceOnLine) UpdateDeviceInfo(); };
|
_dge.OnlineStatusChange += (currentDevice, args) => { if (args.DeviceOnLine) UpdateDeviceInfo(); };
|
||||||
|
|
||||||
_dc = dc;
|
_dc = dc;
|
||||||
|
|
||||||
@@ -123,29 +123,56 @@ namespace PepperDash.Essentials.DM.Endpoints.DGEs
|
|||||||
|
|
||||||
gather.LineReceived += (sender, args) =>
|
gather.LineReceived += (sender, args) =>
|
||||||
{
|
{
|
||||||
if (args.Text.ToLower().Contains("host"))
|
try
|
||||||
{
|
{
|
||||||
DeviceInfo.HostName = args.Text.Split(';')[1].Trim();
|
Debug.Console(1, this, "{0}", args.Text);
|
||||||
|
|
||||||
tcpClient.Disconnect();
|
if (args.Text.ToLower().Contains("host"))
|
||||||
return;
|
{
|
||||||
|
DeviceInfo.HostName = args.Text.Split(':')[1].Trim();
|
||||||
|
|
||||||
|
Debug.Console(1, this, "hostname: {0}", DeviceInfo.HostName);
|
||||||
|
tcpClient.Disconnect();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//ignore console prompt
|
||||||
|
/*if (args.Text.ToLower().Contains(">"))
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Ignoring console");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.Text.ToLower().Contains("dge"))
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Ignoring DGE");
|
||||||
|
return;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
if (!args.Text.Contains('['))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var splitResponse = args.Text.Split('[');
|
||||||
|
|
||||||
|
foreach (string t in splitResponse)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "{0}", t);
|
||||||
|
}
|
||||||
|
|
||||||
|
DeviceInfo.SerialNumber = splitResponse[1].Split(' ')[4].Replace("#", "");
|
||||||
|
DeviceInfo.FirmwareVersion = splitResponse[1].Split(' ')[0];
|
||||||
|
|
||||||
|
Debug.Console(1, this, "Firmware: {0} SerialNumber: {1}", DeviceInfo.FirmwareVersion,
|
||||||
|
DeviceInfo.SerialNumber);
|
||||||
|
|
||||||
|
tcpClient.SendText("host\r\n");
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
//ignore console prompt
|
|
||||||
if (args.Text.ToLower().Contains(">"))
|
|
||||||
{
|
{
|
||||||
return;
|
Debug.Console(0, this, "Exception getting data: {0}", ex.Message);
|
||||||
|
Debug.Console(0, this, "response: {0}", args.Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!args.Text.ToLower().Contains("dge"))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
DeviceInfo.SerialNumber = args.Text.Split('[')[1].Split(' ')[4].Replace("#", "");
|
|
||||||
DeviceInfo.FirmwareVersion = args.Text.Split('[')[1].Split(' ')[1];
|
|
||||||
|
|
||||||
tcpClient.SendText("host\r\n");
|
|
||||||
};
|
};
|
||||||
|
|
||||||
tcpClient.Connect();
|
tcpClient.Connect();
|
||||||
|
|||||||
@@ -1,46 +1,46 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
using Crestron.SimplSharpPro;
|
using Crestron.SimplSharpPro;
|
||||||
//using Crestron.SimplSharpPro.DeviceSupport;
|
//using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
using Crestron.SimplSharpPro.DM;
|
using Crestron.SimplSharpPro.DM;
|
||||||
using Crestron.SimplSharpPro.DM.Endpoints;
|
using Crestron.SimplSharpPro.DM.Endpoints;
|
||||||
using Crestron.SimplSharpPro.DM.Endpoints.Transmitters;
|
using Crestron.SimplSharpPro.DM.Endpoints.Transmitters;
|
||||||
|
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
using PepperDash.Essentials.Core;
|
using PepperDash.Essentials.Core;
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
using PepperDash.Essentials.Core.Bridges;
|
||||||
using PepperDash.Essentials.DM.Config;
|
using PepperDash.Essentials.DM.Config;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.DM
|
namespace PepperDash.Essentials.DM
|
||||||
{
|
{
|
||||||
using eVst = DmTx401C.eSourceSelection;
|
using eVst = DmTx401C.eSourceSelection;
|
||||||
|
|
||||||
[Description("Wrapper class for DM-TX-401-C")]
|
[Description("Wrapper class for DM-TX-401-C")]
|
||||||
public class DmTx401CController : DmTxControllerBase, ITxRoutingWithFeedback, IIROutputPorts, IComPorts, IHasFreeRun, IVgaBrightnessContrastControls
|
public class DmTx401CController : DmTxControllerBase, ITxRoutingWithFeedback, IIROutputPorts, IComPorts, IHasFreeRun, IVgaBrightnessContrastControls
|
||||||
{
|
{
|
||||||
public DmTx401C Tx { get; private set; }
|
public DmTx401C Tx { get; private set; }
|
||||||
|
|
||||||
public RoutingInputPortWithVideoStatuses HdmiIn { get; private set; }
|
public RoutingInputPortWithVideoStatuses HdmiIn { get; private set; }
|
||||||
public RoutingInputPortWithVideoStatuses DisplayPortIn { get; private set; }
|
public RoutingInputPortWithVideoStatuses DisplayPortIn { get; private set; }
|
||||||
public RoutingInputPortWithVideoStatuses VgaIn { get; private set; }
|
public RoutingInputPortWithVideoStatuses VgaIn { get; private set; }
|
||||||
public RoutingInputPortWithVideoStatuses CompositeIn { get; private set; }
|
public RoutingInputPortWithVideoStatuses CompositeIn { get; private set; }
|
||||||
public RoutingOutputPort DmOut { get; private set; }
|
public RoutingOutputPort DmOut { get; private set; }
|
||||||
|
|
||||||
public override StringFeedback ActiveVideoInputFeedback { get; protected set; }
|
public override StringFeedback ActiveVideoInputFeedback { get; protected set; }
|
||||||
public IntFeedback VideoSourceNumericFeedback { get; protected set; }
|
public IntFeedback VideoSourceNumericFeedback { get; protected set; }
|
||||||
public IntFeedback AudioSourceNumericFeedback { get; protected set; }
|
public IntFeedback AudioSourceNumericFeedback { get; protected set; }
|
||||||
public IntFeedback HdmiInHdcpCapabilityFeedback { get; protected set; }
|
public IntFeedback HdmiInHdcpCapabilityFeedback { get; protected set; }
|
||||||
public BoolFeedback DisplayPortVideoSyncFeedback { get; protected set; }
|
public BoolFeedback DisplayPortVideoSyncFeedback { get; protected set; }
|
||||||
public BoolFeedback HdmiVideoSyncFeedback { get; protected set; }
|
public BoolFeedback HdmiVideoSyncFeedback { get; protected set; }
|
||||||
public BoolFeedback VgaVideoSyncFeedback { get; protected set; }
|
public BoolFeedback VgaVideoSyncFeedback { get; protected set; }
|
||||||
|
|
||||||
public BoolFeedback FreeRunEnabledFeedback { get; protected set; }
|
public BoolFeedback FreeRunEnabledFeedback { get; protected set; }
|
||||||
|
|
||||||
public IntFeedback VgaBrightnessFeedback { get; protected set; }
|
public IntFeedback VgaBrightnessFeedback { get; protected set; }
|
||||||
public IntFeedback VgaContrastFeedback { get; protected set; }
|
public IntFeedback VgaContrastFeedback { get; protected set; }
|
||||||
|
|
||||||
//IroutingNumericEvent
|
//IroutingNumericEvent
|
||||||
@@ -54,88 +54,88 @@ namespace PepperDash.Essentials.DM
|
|||||||
{
|
{
|
||||||
var newEvent = NumericSwitchChange;
|
var newEvent = NumericSwitchChange;
|
||||||
if (newEvent != null) newEvent(this, e);
|
if (newEvent != null) newEvent(this, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Helps get the "real" inputs, including when in Auto
|
/// Helps get the "real" inputs, including when in Auto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public BaseDmTx401.eSourceSelection ActualVideoInput
|
public BaseDmTx401.eSourceSelection ActualVideoInput
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (Tx.VideoSourceFeedback != BaseDmTx401.eSourceSelection.Auto)
|
if (Tx.VideoSourceFeedback != BaseDmTx401.eSourceSelection.Auto)
|
||||||
return Tx.VideoSourceFeedback;
|
return Tx.VideoSourceFeedback;
|
||||||
else // auto
|
else // auto
|
||||||
{
|
{
|
||||||
if (Tx.HdmiInput.SyncDetectedFeedback.BoolValue)
|
if (Tx.HdmiInput.SyncDetectedFeedback.BoolValue)
|
||||||
return BaseDmTx401.eSourceSelection.HDMI;
|
return BaseDmTx401.eSourceSelection.HDMI;
|
||||||
else if (Tx.VgaInput.SyncDetectedFeedback.BoolValue)
|
else if (Tx.VgaInput.SyncDetectedFeedback.BoolValue)
|
||||||
return BaseDmTx401.eSourceSelection.VGA;
|
return BaseDmTx401.eSourceSelection.VGA;
|
||||||
else if (Tx.DisplayPortInput.SyncDetectedFeedback.BoolValue)
|
else if (Tx.DisplayPortInput.SyncDetectedFeedback.BoolValue)
|
||||||
return BaseDmTx401.eSourceSelection.DisplayPort;
|
return BaseDmTx401.eSourceSelection.DisplayPort;
|
||||||
else if (Tx.CvbsInput.SyncDetectedFeedback.BoolValue)
|
else if (Tx.CvbsInput.SyncDetectedFeedback.BoolValue)
|
||||||
return BaseDmTx401.eSourceSelection.Composite;
|
return BaseDmTx401.eSourceSelection.Composite;
|
||||||
else
|
else
|
||||||
return BaseDmTx401.eSourceSelection.Disabled;
|
return BaseDmTx401.eSourceSelection.Disabled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public RoutingPortCollection<RoutingInputPort> InputPorts
|
public RoutingPortCollection<RoutingInputPort> InputPorts
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return new RoutingPortCollection<RoutingInputPort>
|
return new RoutingPortCollection<RoutingInputPort>
|
||||||
{
|
{
|
||||||
HdmiIn,
|
HdmiIn,
|
||||||
DisplayPortIn,
|
DisplayPortIn,
|
||||||
VgaIn,
|
VgaIn,
|
||||||
CompositeIn,
|
CompositeIn,
|
||||||
AnyVideoInput
|
AnyVideoInput
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public RoutingPortCollection<RoutingOutputPort> OutputPorts
|
public RoutingPortCollection<RoutingOutputPort> OutputPorts
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return new RoutingPortCollection<RoutingOutputPort> { DmOut };
|
return new RoutingPortCollection<RoutingOutputPort> { DmOut };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="key"></param>
|
/// <param name="key"></param>
|
||||||
/// <param name="name"></param>
|
/// <param name="name"></param>
|
||||||
/// <param name="tx"></param>
|
/// <param name="tx"></param>
|
||||||
public DmTx401CController(string key, string name, DmTx401C tx)
|
public DmTx401CController(string key, string name, DmTx401C tx)
|
||||||
: base(key, name, tx)
|
: base(key, name, tx)
|
||||||
{
|
{
|
||||||
Tx = tx;
|
Tx = tx;
|
||||||
|
|
||||||
HdmiIn = new RoutingInputPortWithVideoStatuses(DmPortName.HdmiIn,
|
HdmiIn = new RoutingInputPortWithVideoStatuses(DmPortName.HdmiIn,
|
||||||
eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, eVst.HDMI, this,
|
eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, eVst.HDMI, this,
|
||||||
VideoStatusHelper.GetHdmiInputStatusFuncs(tx.HdmiInput))
|
VideoStatusHelper.GetHdmiInputStatusFuncs(tx.HdmiInput))
|
||||||
{
|
{
|
||||||
FeedbackMatchObject = eVst.HDMI
|
FeedbackMatchObject = eVst.HDMI
|
||||||
};
|
};
|
||||||
DisplayPortIn = new RoutingInputPortWithVideoStatuses(DmPortName.DisplayPortIn,
|
DisplayPortIn = new RoutingInputPortWithVideoStatuses(DmPortName.DisplayPortIn,
|
||||||
eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, eVst.DisplayPort, this,
|
eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, eVst.DisplayPort, this,
|
||||||
VideoStatusHelper.GetDisplayPortInputStatusFuncs(tx.DisplayPortInput))
|
VideoStatusHelper.GetDisplayPortInputStatusFuncs(tx.DisplayPortInput))
|
||||||
{
|
{
|
||||||
FeedbackMatchObject = eVst.DisplayPort
|
FeedbackMatchObject = eVst.DisplayPort
|
||||||
};
|
};
|
||||||
VgaIn = new RoutingInputPortWithVideoStatuses(DmPortName.VgaIn,
|
VgaIn = new RoutingInputPortWithVideoStatuses(DmPortName.VgaIn,
|
||||||
eRoutingSignalType.Video, eRoutingPortConnectionType.Vga, eVst.VGA, this,
|
eRoutingSignalType.Video, eRoutingPortConnectionType.Vga, eVst.VGA, this,
|
||||||
VideoStatusHelper.GetVgaInputStatusFuncs(tx.VgaInput))
|
VideoStatusHelper.GetVgaInputStatusFuncs(tx.VgaInput))
|
||||||
{
|
{
|
||||||
FeedbackMatchObject = eVst.VGA
|
FeedbackMatchObject = eVst.VGA
|
||||||
};
|
};
|
||||||
CompositeIn = new RoutingInputPortWithVideoStatuses(DmPortName.CompositeIn,
|
CompositeIn = new RoutingInputPortWithVideoStatuses(DmPortName.CompositeIn,
|
||||||
eRoutingSignalType.Video, eRoutingPortConnectionType.Composite, eVst.Composite, this,
|
eRoutingSignalType.Video, eRoutingPortConnectionType.Composite, eVst.Composite, this,
|
||||||
VideoStatusHelper.GetVgaInputStatusFuncs(tx.VgaInput))
|
VideoStatusHelper.GetVgaInputStatusFuncs(tx.VgaInput))
|
||||||
{
|
{
|
||||||
FeedbackMatchObject = eVst.Composite
|
FeedbackMatchObject = eVst.Composite
|
||||||
@@ -146,185 +146,184 @@ namespace PepperDash.Essentials.DM
|
|||||||
Tx.BaseEvent += Tx_BaseEvent;
|
Tx.BaseEvent += Tx_BaseEvent;
|
||||||
Tx.OnlineStatusChange += Tx_OnlineStatusChange;
|
Tx.OnlineStatusChange += Tx_OnlineStatusChange;
|
||||||
Tx.VgaInput.InputStreamChange += VgaInputOnInputStreamChange;
|
Tx.VgaInput.InputStreamChange += VgaInputOnInputStreamChange;
|
||||||
tx.VgaInput.VideoControls.ControlChange += VideoControls_ControlChange;
|
tx.VgaInput.VideoControls.ControlChange += VideoControls_ControlChange;
|
||||||
|
|
||||||
|
|
||||||
ActiveVideoInputFeedback = new StringFeedback("ActiveVideoInput",
|
ActiveVideoInputFeedback = new StringFeedback("ActiveVideoInput",
|
||||||
() => ActualVideoInput.ToString());
|
() => ActualVideoInput.ToString());
|
||||||
|
|
||||||
VideoSourceNumericFeedback = new IntFeedback(() => (int)Tx.VideoSourceFeedback);
|
VideoSourceNumericFeedback = new IntFeedback(() => (int)Tx.VideoSourceFeedback);
|
||||||
|
|
||||||
AudioSourceNumericFeedback = new IntFeedback(() => (int)Tx.AudioSourceFeedback);
|
AudioSourceNumericFeedback = new IntFeedback(() => (int)Tx.AudioSourceFeedback);
|
||||||
|
|
||||||
HdmiInHdcpCapabilityFeedback = new IntFeedback("HdmiInHdcpCapability", () => tx.HdmiInput.HdcpSupportOnFeedback.BoolValue ? 1 : 0);
|
HdmiInHdcpCapabilityFeedback = new IntFeedback("HdmiInHdcpCapability", () => tx.HdmiInput.HdcpSupportOnFeedback.BoolValue ? 1 : 0);
|
||||||
|
|
||||||
HdcpStateFeedback = HdmiInHdcpCapabilityFeedback;
|
HdcpStateFeedback = HdmiInHdcpCapabilityFeedback;
|
||||||
|
|
||||||
HdcpSupportCapability = eHdcpCapabilityType.HdcpAutoSupport;
|
HdcpSupportCapability = eHdcpCapabilityType.HdcpAutoSupport;
|
||||||
|
|
||||||
DisplayPortVideoSyncFeedback = new BoolFeedback("DisplayPortVideoSync", () => (bool)tx.DisplayPortInput.SyncDetectedFeedback.BoolValue);
|
DisplayPortVideoSyncFeedback = new BoolFeedback("DisplayPortVideoSync", () => (bool)tx.DisplayPortInput.SyncDetectedFeedback.BoolValue);
|
||||||
|
|
||||||
HdmiVideoSyncFeedback = new BoolFeedback(() => (bool)tx.HdmiInput.SyncDetectedFeedback.BoolValue);
|
HdmiVideoSyncFeedback = new BoolFeedback(() => (bool)tx.HdmiInput.SyncDetectedFeedback.BoolValue);
|
||||||
|
|
||||||
VgaVideoSyncFeedback = new BoolFeedback(() => (bool)tx.VgaInput.SyncDetectedFeedback.BoolValue);
|
VgaVideoSyncFeedback = new BoolFeedback(() => (bool)tx.VgaInput.SyncDetectedFeedback.BoolValue);
|
||||||
|
|
||||||
FreeRunEnabledFeedback = new BoolFeedback(() => tx.VgaInput.FreeRunFeedback == eDmFreeRunSetting.Enabled);
|
FreeRunEnabledFeedback = new BoolFeedback(() => tx.VgaInput.FreeRunFeedback == eDmFreeRunSetting.Enabled);
|
||||||
|
|
||||||
VgaBrightnessFeedback = new IntFeedback(() => tx.VgaInput.VideoControls.BrightnessFeedback.UShortValue);
|
VgaBrightnessFeedback = new IntFeedback(() => tx.VgaInput.VideoControls.BrightnessFeedback.UShortValue);
|
||||||
|
|
||||||
VgaContrastFeedback = new IntFeedback(() => tx.VgaInput.VideoControls.ContrastFeedback.UShortValue);
|
VgaContrastFeedback = new IntFeedback(() => tx.VgaInput.VideoControls.ContrastFeedback.UShortValue);
|
||||||
|
|
||||||
|
|
||||||
var combinedFuncs = new VideoStatusFuncsWrapper
|
var combinedFuncs = new VideoStatusFuncsWrapper
|
||||||
{
|
{
|
||||||
HdcpActiveFeedbackFunc = () =>
|
HdcpActiveFeedbackFunc = () =>
|
||||||
(ActualVideoInput == eVst.HDMI
|
(ActualVideoInput == eVst.HDMI
|
||||||
&& tx.HdmiInput.VideoAttributes.HdcpActiveFeedback.BoolValue)
|
&& tx.HdmiInput.VideoAttributes.HdcpActiveFeedback.BoolValue)
|
||||||
|| (ActualVideoInput == eVst.DisplayPort
|
|| (ActualVideoInput == eVst.DisplayPort
|
||||||
&& tx.DisplayPortInput.VideoAttributes.HdcpActiveFeedback.BoolValue),
|
&& tx.DisplayPortInput.VideoAttributes.HdcpActiveFeedback.BoolValue),
|
||||||
|
|
||||||
HdcpStateFeedbackFunc = () =>
|
HdcpStateFeedbackFunc = () =>
|
||||||
{
|
{
|
||||||
if (ActualVideoInput == eVst.HDMI)
|
if (ActualVideoInput == eVst.HDMI)
|
||||||
return tx.HdmiInput.VideoAttributes.HdcpStateFeedback.ToString();
|
return tx.HdmiInput.VideoAttributes.HdcpStateFeedback.ToString();
|
||||||
if (ActualVideoInput == eVst.DisplayPort)
|
if (ActualVideoInput == eVst.DisplayPort)
|
||||||
return tx.DisplayPortInput.VideoAttributes.HdcpStateFeedback.ToString();
|
return tx.DisplayPortInput.VideoAttributes.HdcpStateFeedback.ToString();
|
||||||
return "";
|
return "";
|
||||||
},
|
},
|
||||||
|
|
||||||
VideoResolutionFeedbackFunc = () =>
|
VideoResolutionFeedbackFunc = () =>
|
||||||
{
|
{
|
||||||
if (ActualVideoInput == eVst.HDMI)
|
if (ActualVideoInput == eVst.HDMI)
|
||||||
return tx.HdmiInput.VideoAttributes.GetVideoResolutionString();
|
return tx.HdmiInput.VideoAttributes.GetVideoResolutionString();
|
||||||
if (ActualVideoInput == eVst.DisplayPort)
|
if (ActualVideoInput == eVst.DisplayPort)
|
||||||
return tx.DisplayPortInput.VideoAttributes.GetVideoResolutionString();
|
return tx.DisplayPortInput.VideoAttributes.GetVideoResolutionString();
|
||||||
if (ActualVideoInput == eVst.VGA)
|
if (ActualVideoInput == eVst.VGA)
|
||||||
return tx.VgaInput.VideoAttributes.GetVideoResolutionString();
|
return tx.VgaInput.VideoAttributes.GetVideoResolutionString();
|
||||||
if (ActualVideoInput == eVst.Composite)
|
if (ActualVideoInput == eVst.Composite)
|
||||||
return tx.CvbsInput.VideoAttributes.GetVideoResolutionString();
|
return tx.CvbsInput.VideoAttributes.GetVideoResolutionString();
|
||||||
return "";
|
return "";
|
||||||
},
|
},
|
||||||
VideoSyncFeedbackFunc = () =>
|
VideoSyncFeedbackFunc = () =>
|
||||||
(ActualVideoInput == eVst.HDMI
|
(ActualVideoInput == eVst.HDMI
|
||||||
&& tx.HdmiInput.SyncDetectedFeedback.BoolValue)
|
&& tx.HdmiInput.SyncDetectedFeedback.BoolValue)
|
||||||
|| (ActualVideoInput == eVst.DisplayPort
|
|| (ActualVideoInput == eVst.DisplayPort
|
||||||
&& tx.DisplayPortInput.SyncDetectedFeedback.BoolValue)
|
&& tx.DisplayPortInput.SyncDetectedFeedback.BoolValue)
|
||||||
|| (ActualVideoInput == eVst.VGA
|
|| (ActualVideoInput == eVst.VGA
|
||||||
&& tx.VgaInput.SyncDetectedFeedback.BoolValue)
|
&& tx.VgaInput.SyncDetectedFeedback.BoolValue)
|
||||||
|| (ActualVideoInput == eVst.Composite
|
|| (ActualVideoInput == eVst.Composite
|
||||||
&& tx.CvbsInput.SyncDetectedFeedback.BoolValue)
|
&& tx.CvbsInput.SyncDetectedFeedback.BoolValue)
|
||||||
};
|
};
|
||||||
|
|
||||||
AnyVideoInput = new RoutingInputPortWithVideoStatuses(DmPortName.AnyVideoIn,
|
AnyVideoInput = new RoutingInputPortWithVideoStatuses(DmPortName.AnyVideoIn,
|
||||||
eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.None, 0, this, combinedFuncs);
|
eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.None, 0, this, combinedFuncs);
|
||||||
|
|
||||||
DmOut = new RoutingOutputPort(DmPortName.DmOut, eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
DmOut = new RoutingOutputPort(DmPortName.DmOut, eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
eRoutingPortConnectionType.DmCat, null, this);
|
eRoutingPortConnectionType.DmCat, null, this);
|
||||||
|
|
||||||
AddToFeedbackList(ActiveVideoInputFeedback, VideoSourceNumericFeedback, AudioSourceNumericFeedback,
|
AddToFeedbackList(ActiveVideoInputFeedback, VideoSourceNumericFeedback, AudioSourceNumericFeedback,
|
||||||
AnyVideoInput.VideoStatus.HasVideoStatusFeedback, AnyVideoInput.VideoStatus.HdcpActiveFeedback,
|
AnyVideoInput.VideoStatus.HasVideoStatusFeedback, AnyVideoInput.VideoStatus.HdcpActiveFeedback,
|
||||||
AnyVideoInput.VideoStatus.HdcpStateFeedback, AnyVideoInput.VideoStatus.VideoResolutionFeedback,
|
AnyVideoInput.VideoStatus.HdcpStateFeedback, AnyVideoInput.VideoStatus.VideoResolutionFeedback,
|
||||||
AnyVideoInput.VideoStatus.VideoSyncFeedback, HdmiInHdcpCapabilityFeedback, DisplayPortVideoSyncFeedback,
|
AnyVideoInput.VideoStatus.VideoSyncFeedback, HdmiInHdcpCapabilityFeedback, DisplayPortVideoSyncFeedback,
|
||||||
HdmiVideoSyncFeedback, VgaVideoSyncFeedback);
|
HdmiVideoSyncFeedback, VgaVideoSyncFeedback);
|
||||||
|
|
||||||
// Set Ports for CEC
|
// Set Ports for CEC
|
||||||
DisplayPortIn.Port = Tx.DisplayPortInput;
|
DisplayPortIn.Port = Tx.DisplayPortInput;
|
||||||
HdmiIn.Port = Tx.HdmiInput;
|
HdmiIn.Port = Tx.HdmiInput;
|
||||||
DmOut.Port = Tx.DmOutput;
|
DmOut.Port = Tx.DmOutput;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool CustomActivate()
|
public override bool CustomActivate()
|
||||||
{
|
{
|
||||||
// Link up all of these damned events to the various RoutingPorts via a helper handler
|
// Link up all of these damned events to the various RoutingPorts via a helper handler
|
||||||
Tx.HdmiInput.InputStreamChange += (o, a) => FowardInputStreamChange(HdmiIn, a.EventId);
|
Tx.HdmiInput.InputStreamChange += (o, a) => FowardInputStreamChange(HdmiIn, a.EventId);
|
||||||
Tx.HdmiInput.VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(HdmiIn, a.EventId);
|
Tx.HdmiInput.VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(HdmiIn, a.EventId);
|
||||||
|
|
||||||
Tx.DisplayPortInput.InputStreamChange += (o, a) => FowardInputStreamChange(DisplayPortIn, a.EventId);
|
Tx.DisplayPortInput.InputStreamChange += (o, a) => FowardInputStreamChange(DisplayPortIn, a.EventId);
|
||||||
Tx.DisplayPortInput.VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(DisplayPortIn, a.EventId);
|
Tx.DisplayPortInput.VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(DisplayPortIn, a.EventId);
|
||||||
|
|
||||||
Tx.VgaInput.InputStreamChange += (o, a) => FowardInputStreamChange(VgaIn, a.EventId);
|
Tx.VgaInput.InputStreamChange += (o, a) => FowardInputStreamChange(VgaIn, a.EventId);
|
||||||
Tx.VgaInput.VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(VgaIn, a.EventId);
|
Tx.VgaInput.VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(VgaIn, a.EventId);
|
||||||
|
|
||||||
// Base does register and sets up comm monitoring.
|
// Base does register and sets up comm monitoring.
|
||||||
return base.CustomActivate();
|
return base.CustomActivate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||||
{
|
{
|
||||||
var joinMap = GetDmTxJoinMap(joinStart, joinMapKey);
|
var joinMap = GetDmTxJoinMap(joinStart, joinMapKey);
|
||||||
|
|
||||||
if (HdmiVideoSyncFeedback != null)
|
if (HdmiVideoSyncFeedback != null)
|
||||||
{
|
|
||||||
HdmiVideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Input1VideoSyncStatus.JoinNumber]);
|
|
||||||
}
|
|
||||||
if (VgaVideoSyncFeedback != null)
|
|
||||||
{
|
{
|
||||||
VgaVideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Input2VideoSyncStatus.JoinNumber]);
|
HdmiVideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Input1VideoSyncStatus.JoinNumber]);
|
||||||
}
|
}
|
||||||
|
if (VgaVideoSyncFeedback != null)
|
||||||
LinkDmTxToApi(this, trilist, joinMap, bridge);
|
{
|
||||||
}
|
VgaVideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Input2VideoSyncStatus.JoinNumber]);
|
||||||
|
}
|
||||||
public void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type)
|
|
||||||
{
|
LinkDmTxToApi(this, trilist, joinMap, bridge);
|
||||||
Debug.Console(2, this, "Executing Numeric Switch to input {0}.", input);
|
}
|
||||||
|
|
||||||
switch (input)
|
public void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type)
|
||||||
{
|
{
|
||||||
case 0:
|
Debug.Console(2, this, "Executing Numeric Switch to input {0}.", input);
|
||||||
{
|
|
||||||
ExecuteSwitch(eVst.Auto, null, type);
|
switch (input)
|
||||||
break;
|
{
|
||||||
}
|
case 0:
|
||||||
case 1:
|
{
|
||||||
{
|
ExecuteSwitch(eVst.Auto, null, type);
|
||||||
ExecuteSwitch(DisplayPortIn.Selector, null, type);
|
break;
|
||||||
break;
|
}
|
||||||
}
|
case 1:
|
||||||
case 2:
|
{
|
||||||
{
|
ExecuteSwitch(DisplayPortIn.Selector, null, type);
|
||||||
ExecuteSwitch(HdmiIn.Selector, null, type);
|
break;
|
||||||
break;
|
}
|
||||||
}
|
case 2:
|
||||||
case 3:
|
{
|
||||||
{
|
ExecuteSwitch(HdmiIn.Selector, null, type);
|
||||||
ExecuteSwitch(VgaIn.Selector, null, type);
|
break;
|
||||||
break;
|
}
|
||||||
}
|
case 3:
|
||||||
case 4:
|
{
|
||||||
{
|
ExecuteSwitch(VgaIn.Selector, null, type);
|
||||||
ExecuteSwitch(CompositeIn.Selector, null, type);
|
break;
|
||||||
break;
|
}
|
||||||
}
|
case 4:
|
||||||
case 5:
|
{
|
||||||
{
|
ExecuteSwitch(CompositeIn.Selector, null, type);
|
||||||
ExecuteSwitch(eVst.Disabled, null, type);
|
break;
|
||||||
break;
|
}
|
||||||
}
|
case 5:
|
||||||
}
|
{
|
||||||
|
ExecuteSwitch(eVst.Disabled, null, type);
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType)
|
}
|
||||||
{
|
|
||||||
if ((signalType | eRoutingSignalType.Video) == eRoutingSignalType.Video)
|
}
|
||||||
Tx.VideoSource = (eVst)inputSelector;
|
|
||||||
if ((signalType | eRoutingSignalType.Audio) == eRoutingSignalType.Audio)
|
public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType)
|
||||||
Tx.AudioSource = (eVst)inputSelector;
|
{
|
||||||
|
if ((signalType | eRoutingSignalType.Video) == eRoutingSignalType.Video)
|
||||||
|
Tx.VideoSource = (eVst)inputSelector;
|
||||||
|
if ((signalType | eRoutingSignalType.Audio) == eRoutingSignalType.Audio)
|
||||||
|
Tx.AudioSource = (eVst)inputSelector;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tx_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args)
|
void Tx_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args)
|
||||||
{
|
{
|
||||||
|
|
||||||
var localVideoInputPort =
|
var localVideoInputPort =
|
||||||
InputPorts.FirstOrDefault(p => (eVst)p.Selector == Tx.VideoSourceFeedback);
|
InputPorts.FirstOrDefault(p => (eVst)p.Selector == Tx.VideoSourceFeedback);
|
||||||
var localAudioInputPort =
|
var localAudioInputPort =
|
||||||
InputPorts.FirstOrDefault(p => (eVst)p.Selector == Tx.AudioSourceFeedback);
|
InputPorts.FirstOrDefault(p => (eVst)p.Selector == Tx.AudioSourceFeedback);
|
||||||
|
|
||||||
ActiveVideoInputFeedback.FireUpdate();
|
|
||||||
VideoSourceNumericFeedback.FireUpdate();
|
|
||||||
AudioSourceNumericFeedback.FireUpdate();
|
|
||||||
OnSwitchChange(new RoutingNumericEventArgs(1, VideoSourceNumericFeedback.UShortValue, OutputPorts.First(), localVideoInputPort, eRoutingSignalType.Video));
|
OnSwitchChange(new RoutingNumericEventArgs(1, VideoSourceNumericFeedback.UShortValue, OutputPorts.First(), localVideoInputPort, eRoutingSignalType.Video));
|
||||||
OnSwitchChange(new RoutingNumericEventArgs(1, AudioSourceNumericFeedback.UShortValue, OutputPorts.First(), localAudioInputPort, eRoutingSignalType.Audio));
|
OnSwitchChange(new RoutingNumericEventArgs(1, AudioSourceNumericFeedback.UShortValue, OutputPorts.First(), localAudioInputPort, eRoutingSignalType.Audio));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tx_BaseEvent(GenericBase device, BaseEventArgs args)
|
void Tx_BaseEvent(GenericBase device, BaseEventArgs args)
|
||||||
@@ -348,7 +347,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
OnSwitchChange(new RoutingNumericEventArgs(1, AudioSourceNumericFeedback.UShortValue, OutputPorts.First(), localInputAudioPort, eRoutingSignalType.Audio));
|
OnSwitchChange(new RoutingNumericEventArgs(1, AudioSourceNumericFeedback.UShortValue, OutputPorts.First(), localInputAudioPort, eRoutingSignalType.Audio));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoControls_ControlChange(object sender, GenericEventArgs args)
|
void VideoControls_ControlChange(object sender, GenericEventArgs args)
|
||||||
{
|
{
|
||||||
@@ -364,7 +363,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
VgaContrastFeedback.FireUpdate();
|
VgaContrastFeedback.FireUpdate();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enables or disables free run
|
/// Enables or disables free run
|
||||||
@@ -391,10 +390,10 @@ namespace PepperDash.Essentials.DM
|
|||||||
public void SetVgaContrast(ushort level)
|
public void SetVgaContrast(ushort level)
|
||||||
{
|
{
|
||||||
Tx.VgaInput.VideoControls.Contrast.UShortValue = level;
|
Tx.VgaInput.VideoControls.Contrast.UShortValue = level;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Relays the input stream change to the appropriate RoutingInputPort.
|
/// Relays the input stream change to the appropriate RoutingInputPort.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void FowardInputStreamChange(RoutingInputPortWithVideoStatuses inputPort, int eventId)
|
void FowardInputStreamChange(RoutingInputPortWithVideoStatuses inputPort, int eventId)
|
||||||
{
|
{
|
||||||
@@ -404,36 +403,36 @@ namespace PepperDash.Essentials.DM
|
|||||||
}
|
}
|
||||||
inputPort.VideoStatus.VideoSyncFeedback.FireUpdate();
|
inputPort.VideoStatus.VideoSyncFeedback.FireUpdate();
|
||||||
AnyVideoInput.VideoStatus.VideoSyncFeedback.FireUpdate();
|
AnyVideoInput.VideoStatus.VideoSyncFeedback.FireUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Relays the VideoAttributes change to a RoutingInputPort
|
/// Relays the VideoAttributes change to a RoutingInputPort
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void ForwardVideoAttributeChange(RoutingInputPortWithVideoStatuses inputPort, int eventId)
|
void ForwardVideoAttributeChange(RoutingInputPortWithVideoStatuses inputPort, int eventId)
|
||||||
{
|
{
|
||||||
//// LOCATION: Crestron.SimplSharpPro.DM.VideoAttributeEventIds
|
//// LOCATION: Crestron.SimplSharpPro.DM.VideoAttributeEventIds
|
||||||
//Debug.Console(2, this, "VideoAttributes_AttributeChange event id={0} from {1}",
|
//Debug.Console(2, this, "VideoAttributes_AttributeChange event id={0} from {1}",
|
||||||
// args.EventId, (sender as VideoAttributesEnhanced).Owner.GetType());
|
// args.EventId, (sender as VideoAttributesEnhanced).Owner.GetType());
|
||||||
switch (eventId)
|
switch (eventId)
|
||||||
{
|
{
|
||||||
case VideoAttributeEventIds.HdcpActiveFeedbackEventId:
|
case VideoAttributeEventIds.HdcpActiveFeedbackEventId:
|
||||||
inputPort.VideoStatus.HdcpActiveFeedback.FireUpdate();
|
inputPort.VideoStatus.HdcpActiveFeedback.FireUpdate();
|
||||||
AnyVideoInput.VideoStatus.HdcpActiveFeedback.FireUpdate();
|
AnyVideoInput.VideoStatus.HdcpActiveFeedback.FireUpdate();
|
||||||
break;
|
break;
|
||||||
case VideoAttributeEventIds.HdcpStateFeedbackEventId:
|
case VideoAttributeEventIds.HdcpStateFeedbackEventId:
|
||||||
inputPort.VideoStatus.HdcpStateFeedback.FireUpdate();
|
inputPort.VideoStatus.HdcpStateFeedback.FireUpdate();
|
||||||
AnyVideoInput.VideoStatus.HdcpStateFeedback.FireUpdate();
|
AnyVideoInput.VideoStatus.HdcpStateFeedback.FireUpdate();
|
||||||
break;
|
break;
|
||||||
case VideoAttributeEventIds.HorizontalResolutionFeedbackEventId:
|
case VideoAttributeEventIds.HorizontalResolutionFeedbackEventId:
|
||||||
case VideoAttributeEventIds.VerticalResolutionFeedbackEventId:
|
case VideoAttributeEventIds.VerticalResolutionFeedbackEventId:
|
||||||
inputPort.VideoStatus.VideoResolutionFeedback.FireUpdate();
|
inputPort.VideoStatus.VideoResolutionFeedback.FireUpdate();
|
||||||
AnyVideoInput.VideoStatus.VideoResolutionFeedback.FireUpdate();
|
AnyVideoInput.VideoStatus.VideoResolutionFeedback.FireUpdate();
|
||||||
break;
|
break;
|
||||||
case VideoAttributeEventIds.FramesPerSecondFeedbackEventId:
|
case VideoAttributeEventIds.FramesPerSecondFeedbackEventId:
|
||||||
inputPort.VideoStatus.VideoResolutionFeedback.FireUpdate();
|
inputPort.VideoStatus.VideoResolutionFeedback.FireUpdate();
|
||||||
AnyVideoInput.VideoStatus.VideoResolutionFeedback.FireUpdate();
|
AnyVideoInput.VideoStatus.VideoResolutionFeedback.FireUpdate();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HdmiInputStreamChangeEvent(EndpointInputStream inputStream, EndpointInputStreamEventArgs args)
|
void HdmiInputStreamChangeEvent(EndpointInputStream inputStream, EndpointInputStreamEventArgs args)
|
||||||
@@ -477,18 +476,18 @@ namespace PepperDash.Essentials.DM
|
|||||||
VgaVideoSyncFeedback.FireUpdate();
|
VgaVideoSyncFeedback.FireUpdate();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region IIROutputPorts Members
|
#region IIROutputPorts Members
|
||||||
public CrestronCollection<IROutputPort> IROutputPorts { get { return Tx.IROutputPorts; } }
|
public CrestronCollection<IROutputPort> IROutputPorts { get { return Tx.IROutputPorts; } }
|
||||||
public int NumberOfIROutputPorts { get { return Tx.NumberOfIROutputPorts; } }
|
public int NumberOfIROutputPorts { get { return Tx.NumberOfIROutputPorts; } }
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region IComPorts Members
|
#region IComPorts Members
|
||||||
public CrestronCollection<ComPort> ComPorts { get { return Tx.ComPorts; } }
|
public CrestronCollection<ComPort> ComPorts { get { return Tx.ComPorts; } }
|
||||||
public int NumberOfComPorts { get { return Tx.NumberOfComPorts; } }
|
public int NumberOfComPorts { get { return Tx.NumberOfComPorts; } }
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -46,6 +46,17 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
|
|||||||
void CameraOff();
|
void CameraOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Describes the ability to mute and unmute camera video
|
||||||
|
/// </summary>
|
||||||
|
public interface IHasCameraMute
|
||||||
|
{
|
||||||
|
BoolFeedback CameraIsMutedFeedback { get; }
|
||||||
|
void CameraMuteOn();
|
||||||
|
void CameraMuteOff();
|
||||||
|
void CameraMuteToggle();
|
||||||
|
}
|
||||||
|
|
||||||
public class CameraSelectedEventArgs : EventArgs
|
public class CameraSelectedEventArgs : EventArgs
|
||||||
{
|
{
|
||||||
public CameraBase SelectedCamera { get; private set; }
|
public CameraBase SelectedCamera { get; private set; }
|
||||||
|
|||||||
@@ -4,19 +4,20 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
using Crestron.SimplSharpPro;
|
using Crestron.SimplSharpPro;
|
||||||
|
using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
|
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
using PepperDash.Essentials.Core;
|
using PepperDash.Essentials.Core;
|
||||||
using PepperDash.Essentials.Core.Routing;
|
using PepperDash.Essentials.Core.Routing;
|
||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
|
using PepperDash.Essentials.Core.Bridges;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Devices.Common
|
namespace PepperDash.Essentials.Devices.Common
|
||||||
{
|
{
|
||||||
public class IRBlurayBase : EssentialsDevice, IDiscPlayerControls, IUiDisplayInfo, IRoutingOutputs, IUsageTracking
|
public class IRBlurayBase : EssentialsBridgeableDevice, IDiscPlayerControls, IUiDisplayInfo, IRoutingOutputs, IUsageTracking
|
||||||
{
|
{
|
||||||
public IrOutputPortController IrPort { get; private set; }
|
public IrOutputPortController IrPort { get; private set; }
|
||||||
|
|
||||||
@@ -45,6 +46,113 @@ namespace PepperDash.Essentials.Devices.Common
|
|||||||
OutputPorts = new RoutingPortCollection<RoutingOutputPort> { HdmiOut, AnyAudioOut };
|
OutputPorts = new RoutingPortCollection<RoutingOutputPort> { HdmiOut, AnyAudioOut };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||||
|
{
|
||||||
|
var joinMap = new IRBlurayBaseJoinMap(joinStart);
|
||||||
|
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||||
|
joinMap = JsonConvert.DeserializeObject<IRBlurayBaseJoinMap>(joinMapSerialized);
|
||||||
|
|
||||||
|
if (bridge != null)
|
||||||
|
{
|
||||||
|
bridge.AddJoinMap(Key, joinMap);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||||
|
Debug.Console(0, "Linking to SetTopBox: {0}", Name);
|
||||||
|
|
||||||
|
|
||||||
|
trilist.OnlineStatusChange += new OnlineStatusChangeEventHandler((o, a) =>
|
||||||
|
{
|
||||||
|
if (a.DeviceOnLine)
|
||||||
|
{
|
||||||
|
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = Name;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var powerDev = this as IHasPowerControl;
|
||||||
|
if (powerDev != null)
|
||||||
|
{
|
||||||
|
trilist.SetSigTrueAction(joinMap.PowerOn.JoinNumber, powerDev.PowerOn);
|
||||||
|
trilist.SetSigTrueAction(joinMap.PowerOff.JoinNumber, powerDev.PowerOff);
|
||||||
|
trilist.SetSigTrueAction(joinMap.PowerToggle.JoinNumber, powerDev.PowerToggle);
|
||||||
|
}
|
||||||
|
|
||||||
|
var dpadDev = this as IDPad;
|
||||||
|
if (dpadDev != null)
|
||||||
|
{
|
||||||
|
trilist.SetBoolSigAction(joinMap.Up.JoinNumber, dpadDev.Up);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Down.JoinNumber, dpadDev.Down);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Left.JoinNumber, dpadDev.Left);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Right.JoinNumber, dpadDev.Right);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Select.JoinNumber, dpadDev.Select);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Menu.JoinNumber, dpadDev.Menu);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Exit.JoinNumber, dpadDev.Exit);
|
||||||
|
}
|
||||||
|
|
||||||
|
var channelDev = this as IChannel;
|
||||||
|
if (channelDev != null)
|
||||||
|
{
|
||||||
|
trilist.SetBoolSigAction(joinMap.ChannelUp.JoinNumber, channelDev.ChannelUp);
|
||||||
|
trilist.SetBoolSigAction(joinMap.ChannelDown.JoinNumber, channelDev.ChannelDown);
|
||||||
|
trilist.SetBoolSigAction(joinMap.LastChannel.JoinNumber, channelDev.LastChannel);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Guide.JoinNumber, channelDev.Guide);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Info.JoinNumber, channelDev.Info);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Exit.JoinNumber, channelDev.Exit);
|
||||||
|
}
|
||||||
|
|
||||||
|
var colorDev = this as IColor;
|
||||||
|
if (colorDev != null)
|
||||||
|
{
|
||||||
|
trilist.SetBoolSigAction(joinMap.Red.JoinNumber, colorDev.Red);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Green.JoinNumber, colorDev.Green);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Yellow.JoinNumber, colorDev.Yellow);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Blue.JoinNumber, colorDev.Blue);
|
||||||
|
}
|
||||||
|
|
||||||
|
var keypadDev = this as ISetTopBoxNumericKeypad;
|
||||||
|
if (keypadDev != null)
|
||||||
|
{
|
||||||
|
trilist.StringInput[joinMap.KeypadAccessoryButton1Label.JoinNumber].StringValue = keypadDev.KeypadAccessoryButton1Label;
|
||||||
|
trilist.StringInput[joinMap.KeypadAccessoryButton2Label.JoinNumber].StringValue = keypadDev.KeypadAccessoryButton2Label;
|
||||||
|
|
||||||
|
trilist.BooleanInput[joinMap.HasKeypadAccessoryButton1.JoinNumber].BoolValue = keypadDev.HasKeypadAccessoryButton1;
|
||||||
|
trilist.BooleanInput[joinMap.HasKeypadAccessoryButton2.JoinNumber].BoolValue = keypadDev.HasKeypadAccessoryButton2;
|
||||||
|
|
||||||
|
trilist.SetBoolSigAction(joinMap.Digit0.JoinNumber, keypadDev.Digit0);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Digit1.JoinNumber, keypadDev.Digit1);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Digit2.JoinNumber, keypadDev.Digit2);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Digit3.JoinNumber, keypadDev.Digit3);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Digit4.JoinNumber, keypadDev.Digit4);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Digit5.JoinNumber, keypadDev.Digit5);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Digit6.JoinNumber, keypadDev.Digit6);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Digit7.JoinNumber, keypadDev.Digit7);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Digit8.JoinNumber, keypadDev.Digit8);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Digit9.JoinNumber, keypadDev.Digit9);
|
||||||
|
trilist.SetBoolSigAction(joinMap.KeypadAccessoryButton1Press.JoinNumber, keypadDev.KeypadAccessoryButton1);
|
||||||
|
trilist.SetBoolSigAction(joinMap.KeypadAccessoryButton2Press.JoinNumber, keypadDev.KeypadAccessoryButton1);
|
||||||
|
trilist.SetBoolSigAction(joinMap.KeypadEnter.JoinNumber, keypadDev.KeypadEnter);
|
||||||
|
}
|
||||||
|
|
||||||
|
var transportDev = this as ITransport;
|
||||||
|
if (transportDev != null)
|
||||||
|
{
|
||||||
|
trilist.SetBoolSigAction(joinMap.Play.JoinNumber, transportDev.Play);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Pause.JoinNumber, transportDev.Pause);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Rewind.JoinNumber, transportDev.Rewind);
|
||||||
|
trilist.SetBoolSigAction(joinMap.FFwd.JoinNumber, transportDev.FFwd);
|
||||||
|
trilist.SetBoolSigAction(joinMap.ChapMinus.JoinNumber, transportDev.ChapMinus);
|
||||||
|
trilist.SetBoolSigAction(joinMap.ChapPlus.JoinNumber, transportDev.ChapPlus);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Stop.JoinNumber, transportDev.Stop);
|
||||||
|
trilist.SetBoolSigAction(joinMap.Record.JoinNumber, transportDev.Record);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#region IDPad Members
|
#region IDPad Members
|
||||||
|
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ namespace PepperDash.Essentials.Devices.Displays
|
|||||||
public override bool CustomActivate()
|
public override bool CustomActivate()
|
||||||
{
|
{
|
||||||
Communication.Connect();
|
Communication.Connect();
|
||||||
CommunicationMonitor.StatusChange += (o, a) => { Debug.Console(2, this, "Communication monitor state: {0}", CommunicationMonitor.Status); };
|
CommunicationMonitor.StatusChange += (o, a) => Debug.Console(2, this, "Communication monitor state: {0}", CommunicationMonitor.Status);
|
||||||
CommunicationMonitor.Start();
|
CommunicationMonitor.Start();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -188,9 +188,6 @@ namespace PepperDash.Essentials.Devices.Displays
|
|||||||
IncomingBuffer.CopyTo(newBytes, 0);
|
IncomingBuffer.CopyTo(newBytes, 0);
|
||||||
e.Bytes.CopyTo(newBytes, IncomingBuffer.Length);
|
e.Bytes.CopyTo(newBytes, IncomingBuffer.Length);
|
||||||
|
|
||||||
if (Debug.Level == 2) // This check is here to prevent following string format from building unnecessarily on level 0 or 1
|
|
||||||
Debug.Console(2, this, "Received:{0}", ComTextHelper.GetEscapedText(newBytes));
|
|
||||||
|
|
||||||
// Need to find AA FF and have
|
// Need to find AA FF and have
|
||||||
for (int i = 0; i < newBytes.Length; i++)
|
for (int i = 0; i < newBytes.Length; i++)
|
||||||
{
|
{
|
||||||
@@ -364,8 +361,6 @@ namespace PepperDash.Essentials.Devices.Displays
|
|||||||
}
|
}
|
||||||
checksum = checksum & 0x000000FF; // mask off MSBs
|
checksum = checksum & 0x000000FF; // mask off MSBs
|
||||||
b[b.Length - 1] = (byte)checksum;
|
b[b.Length - 1] = (byte)checksum;
|
||||||
if(Debug.Level == 2) // This check is here to prevent following string format from building unnecessarily on level 0 or 1
|
|
||||||
Debug.Console(2, this, "Sending:{0}", ComTextHelper.GetEscapedText(b));
|
|
||||||
|
|
||||||
if (b[1] == 0x12)
|
if (b[1] == 0x12)
|
||||||
LastCommandSentWasVolume = true;
|
LastCommandSentWasVolume = true;
|
||||||
|
|||||||
@@ -12,11 +12,12 @@ using PepperDash.Essentials.Core.Bridges;
|
|||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
using PepperDash.Essentials.Core.Presets;
|
using PepperDash.Essentials.Core.Presets;
|
||||||
using PepperDash.Essentials.Core.Routing;
|
using PepperDash.Essentials.Core.Routing;
|
||||||
|
using PepperDash.Essentials.Core.DeviceTypeInterfaces;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Devices.Common
|
namespace PepperDash.Essentials.Devices.Common
|
||||||
{
|
{
|
||||||
[Description("Wrapper class for an IR Set Top Box")]
|
[Description("Wrapper class for an IR Set Top Box")]
|
||||||
public class IRSetTopBoxBase : EssentialsBridgeableDevice, ISetTopBoxControls, IRoutingOutputs, IUsageTracking, IHasPowerControl
|
public class IRSetTopBoxBase : EssentialsBridgeableDevice, ISetTopBoxControls, IRoutingOutputs, IUsageTracking, IHasPowerControl, ITvPresetsProvider
|
||||||
{
|
{
|
||||||
public IrOutputPortController IrPort { get; private set; }
|
public IrOutputPortController IrPort { get; private set; }
|
||||||
|
|
||||||
@@ -28,7 +29,7 @@ namespace PepperDash.Essentials.Devices.Common
|
|||||||
public bool HasDpad { get; set; }
|
public bool HasDpad { get; set; }
|
||||||
public bool HasNumeric { get; set; }
|
public bool HasNumeric { get; set; }
|
||||||
|
|
||||||
public DevicePresetsModel PresetsModel { get; private set; }
|
public DevicePresetsModel TvPresets { get; private set; }
|
||||||
|
|
||||||
public IRSetTopBoxBase(string key, string name, IrOutputPortController portCont,
|
public IRSetTopBoxBase(string key, string name, IrOutputPortController portCont,
|
||||||
SetTopBoxPropertiesConfig props)
|
SetTopBoxPropertiesConfig props)
|
||||||
@@ -66,8 +67,8 @@ namespace PepperDash.Essentials.Devices.Common
|
|||||||
|
|
||||||
public void LoadPresets(string filePath)
|
public void LoadPresets(string filePath)
|
||||||
{
|
{
|
||||||
PresetsModel = new DevicePresetsModel(Key + "-presets", this, filePath);
|
TvPresets = new DevicePresetsModel(Key + "-presets", this, filePath);
|
||||||
DeviceManager.AddDevice(PresetsModel);
|
DeviceManager.AddDevice(TvPresets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -387,9 +388,16 @@ namespace PepperDash.Essentials.Devices.Common
|
|||||||
}
|
}
|
||||||
|
|
||||||
Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||||
Debug.Console(0, "Linking to Display: {0}", Name);
|
Debug.Console(0, "Linking to SetTopBox: {0}", Name);
|
||||||
|
|
||||||
|
trilist.OnlineStatusChange += new OnlineStatusChangeEventHandler((o, a) =>
|
||||||
|
{
|
||||||
|
if (a.DeviceOnLine)
|
||||||
|
{
|
||||||
|
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = Name;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = Name;
|
|
||||||
|
|
||||||
var stbBase = this as ISetTopBoxControls;
|
var stbBase = this as ISetTopBoxControls;
|
||||||
if (stbBase != null)
|
if (stbBase != null)
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ using PepperDash.Essentials.Core.Routing;
|
|||||||
using PepperDash.Essentials.Devices.Common.Cameras;
|
using PepperDash.Essentials.Devices.Common.Cameras;
|
||||||
using PepperDash.Essentials.Devices.Common.Codec;
|
using PepperDash.Essentials.Devices.Common.Codec;
|
||||||
using PepperDash.Essentials.Devices.Common.VideoCodec;
|
using PepperDash.Essentials.Devices.Common.VideoCodec;
|
||||||
using PepperDash_Essentials_Core.DeviceTypeInterfaces;
|
using PepperDash.Essentials.Core.Queues;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||||
{
|
{
|
||||||
@@ -28,7 +28,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
|
|
||||||
public class CiscoSparkCodec : VideoCodecBase, IHasCallHistory, IHasCallFavorites, IHasDirectory,
|
public class CiscoSparkCodec : VideoCodecBase, IHasCallHistory, IHasCallFavorites, IHasDirectory,
|
||||||
IHasScheduleAwareness, IOccupancyStatusProvider, IHasCodecLayouts, IHasCodecSelfView,
|
IHasScheduleAwareness, IOccupancyStatusProvider, IHasCodecLayouts, IHasCodecSelfView,
|
||||||
ICommunicationMonitor, IRouting, IHasCodecCameras, IHasCameraAutoMode, IHasCodecRoomPresets, IHasExternalSourceSwitching, IHasBranding
|
ICommunicationMonitor, IRouting, IHasCodecCameras, IHasCameraAutoMode, IHasCodecRoomPresets, IHasExternalSourceSwitching, IHasBranding, IHasCameraOff, IHasCameraMute
|
||||||
{
|
{
|
||||||
public event EventHandler<DirectoryEventArgs> DirectoryResultReturned;
|
public event EventHandler<DirectoryEventArgs> DirectoryResultReturned;
|
||||||
|
|
||||||
@@ -38,9 +38,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
|
|
||||||
public StatusMonitorBase CommunicationMonitor { get; private set; }
|
public StatusMonitorBase CommunicationMonitor { get; private set; }
|
||||||
|
|
||||||
private CrestronQueue<string> ReceiveQueue;
|
private GenericQueue ReceiveQueue;
|
||||||
|
|
||||||
private Thread ReceiveThread;
|
|
||||||
|
|
||||||
public BoolFeedback PresentationViewMaximizedFeedback { get; private set; }
|
public BoolFeedback PresentationViewMaximizedFeedback { get; private set; }
|
||||||
|
|
||||||
@@ -302,12 +300,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
}
|
}
|
||||||
|
|
||||||
// The queue that will collect the repsonses in the order they are received
|
// The queue that will collect the repsonses in the order they are received
|
||||||
ReceiveQueue = new CrestronQueue<string>(25);
|
ReceiveQueue = new GenericQueue(this.Key + "-rxQueue", 25);
|
||||||
|
|
||||||
// The thread responsible for dequeuing and processing the messages
|
|
||||||
ReceiveThread = new Thread((o) => ProcessQueue(), null);
|
|
||||||
ReceiveThread.Priority = Thread.eThreadPriority.MediumPriority;
|
|
||||||
|
|
||||||
|
|
||||||
RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc);
|
RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc);
|
||||||
PeopleCountFeedback = new IntFeedback(PeopleCountFeedbackFunc);
|
PeopleCountFeedback = new IntFeedback(PeopleCountFeedbackFunc);
|
||||||
@@ -317,6 +310,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
LocalLayoutFeedback = new StringFeedback(LocalLayoutFeedbackFunc);
|
LocalLayoutFeedback = new StringFeedback(LocalLayoutFeedbackFunc);
|
||||||
LocalLayoutIsProminentFeedback = new BoolFeedback(LocalLayoutIsProminentFeedbackFunc);
|
LocalLayoutIsProminentFeedback = new BoolFeedback(LocalLayoutIsProminentFeedbackFunc);
|
||||||
FarEndIsSharingContentFeedback = new BoolFeedback(FarEndIsSharingContentFeedbackFunc);
|
FarEndIsSharingContentFeedback = new BoolFeedback(FarEndIsSharingContentFeedbackFunc);
|
||||||
|
CameraIsOffFeedback = new BoolFeedback(() => CodecStatus.Status.Video.Input.MainVideoMute.BoolValue);
|
||||||
|
CameraIsMutedFeedback = CameraIsOffFeedback;
|
||||||
|
|
||||||
|
|
||||||
PresentationViewMaximizedFeedback = new BoolFeedback(() => CurrentPresentationView == "Maximized");
|
PresentationViewMaximizedFeedback = new BoolFeedback(() => CurrentPresentationView == "Maximized");
|
||||||
|
|
||||||
@@ -382,8 +378,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
CodecStatus.Status.Video.Selfview.Mode.ValueChangedAction = SelfviewIsOnFeedback.FireUpdate;
|
CodecStatus.Status.Video.Selfview.Mode.ValueChangedAction = SelfviewIsOnFeedback.FireUpdate;
|
||||||
CodecStatus.Status.Video.Selfview.PIPPosition.ValueChangedAction = ComputeSelfviewPipStatus;
|
CodecStatus.Status.Video.Selfview.PIPPosition.ValueChangedAction = ComputeSelfviewPipStatus;
|
||||||
CodecStatus.Status.Video.Layout.LayoutFamily.Local.ValueChangedAction = ComputeLocalLayout;
|
CodecStatus.Status.Video.Layout.LayoutFamily.Local.ValueChangedAction = ComputeLocalLayout;
|
||||||
CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction += SharingContentIsOnFeedback.FireUpdate;
|
CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction = SharingContentIsOnFeedback.FireUpdate;
|
||||||
CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction += FarEndIsSharingContentFeedback.FireUpdate;
|
CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction = FarEndIsSharingContentFeedback.FireUpdate;
|
||||||
|
CodecStatus.Status.Video.Input.MainVideoMute.ValueChangedAction = CameraIsOffFeedback.FireUpdate;
|
||||||
|
|
||||||
CodecOsdIn = new RoutingInputPort(RoutingPortNames.CodecOsd, eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
CodecOsdIn = new RoutingInputPort(RoutingPortNames.CodecOsd, eRoutingSignalType.Audio | eRoutingSignalType.Video,
|
||||||
eRoutingPortConnectionType.Hdmi, new Action(StopSharing), this);
|
eRoutingPortConnectionType.Hdmi, new Action(StopSharing), this);
|
||||||
@@ -421,29 +418,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
_brandingUrl = props.UiBranding.BrandingUrl;
|
_brandingUrl = props.UiBranding.BrandingUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Runs in it's own thread to dequeue messages in the order they were received to be processed
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
object ProcessQueue()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
var message = ReceiveQueue.Dequeue();
|
|
||||||
|
|
||||||
DeserializeResponse(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Error Processing Queue: {0}", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates the fake OSD source, and connects it's AudioVideo output to the CodecOsdIn input
|
/// Creates the fake OSD source, and connects it's AudioVideo output to the CodecOsdIn input
|
||||||
/// to enable routing
|
/// to enable routing
|
||||||
@@ -687,11 +661,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
|
|
||||||
// Enqueue the complete message to be deserialized
|
// Enqueue the complete message to be deserialized
|
||||||
|
|
||||||
ReceiveQueue.Enqueue(JsonMessage.ToString());
|
ReceiveQueue.Enqueue(new ProcessStringMessage(JsonMessage.ToString(), DeserializeResponse));
|
||||||
//DeserializeResponse(JsonMessage.ToString());
|
|
||||||
|
|
||||||
if (ReceiveThread.ThreadState != Thread.eThreadStates.ThreadRunning)
|
|
||||||
ReceiveThread.Start();
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1481,7 +1451,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
LinkVideoCodecToApi(this, trilist, joinStart, joinMapKey, bridge);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1664,6 +1634,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
public void CameraAutoModeOn()
|
public void CameraAutoModeOn()
|
||||||
{
|
{
|
||||||
SendText("xCommand Cameras SpeakerTrack Activate");
|
SendText("xCommand Cameras SpeakerTrack Activate");
|
||||||
|
CameraMuteOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CameraAutoModeOff()
|
public void CameraAutoModeOff()
|
||||||
@@ -1739,6 +1710,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
_selectedCamera = value;
|
_selectedCamera = value;
|
||||||
SelectedCameraFeedback.FireUpdate();
|
SelectedCameraFeedback.FireUpdate();
|
||||||
ControllingFarEndCameraFeedback.FireUpdate();
|
ControllingFarEndCameraFeedback.FireUpdate();
|
||||||
|
if (CameraIsOffFeedback.BoolValue)
|
||||||
|
CameraMuteOff();
|
||||||
|
|
||||||
var handler = CameraSelected;
|
var handler = CameraSelected;
|
||||||
if (handler != null)
|
if (handler != null)
|
||||||
@@ -2002,7 +1975,47 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
|
||||||
|
#region IHasCameraOff Members
|
||||||
|
|
||||||
|
public BoolFeedback CameraIsOffFeedback { get; private set; }
|
||||||
|
|
||||||
|
public void CameraOff()
|
||||||
|
{
|
||||||
|
CameraMuteOn();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public BoolFeedback CameraIsMutedFeedback { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Mutes the outgoing camera video
|
||||||
|
/// </summary>
|
||||||
|
public void CameraMuteOn()
|
||||||
|
{
|
||||||
|
SendText("xCommand Video InputMainVideo Mute");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Unmutes the outgoing camera video
|
||||||
|
/// </summary>
|
||||||
|
public void CameraMuteOff()
|
||||||
|
{
|
||||||
|
SendText("xCommand Video InputMainVideo Unmute");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Toggles the camera mute state
|
||||||
|
/// </summary>
|
||||||
|
public void CameraMuteToggle()
|
||||||
|
{
|
||||||
|
if (CameraIsMutedFeedback.BoolValue)
|
||||||
|
CameraMuteOff();
|
||||||
|
else
|
||||||
|
CameraMuteOn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -1369,7 +1369,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
set
|
set
|
||||||
{
|
{
|
||||||
// If the incoming value is "On" it sets the BoolValue true, otherwise sets it false
|
// If the incoming value is "On" it sets the BoolValue true, otherwise sets it false
|
||||||
BoolValue = value == "On";
|
BoolValue = value == "On" || value == "Standby";
|
||||||
OnValueChanged();
|
OnValueChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1606,6 +1606,22 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
public string Value { get; set; }
|
public string Value { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class MainVideoMute : ValueProperty
|
||||||
|
{
|
||||||
|
public bool BoolValue { get; private set; }
|
||||||
|
|
||||||
|
public string Value
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
// If the incoming value is "On" it sets the BoolValue true, otherwise sets it false
|
||||||
|
BoolValue = value == "On";
|
||||||
|
OnValueChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public class ConnectorId
|
public class ConnectorId
|
||||||
{
|
{
|
||||||
public string Value { get; set; }
|
public string Value { get; set; }
|
||||||
@@ -1662,6 +1678,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
{
|
{
|
||||||
public List<Connector> Connector { get; set; }
|
public List<Connector> Connector { get; set; }
|
||||||
public MainVideoSource MainVideoSource { get; set; }
|
public MainVideoSource MainVideoSource { get; set; }
|
||||||
|
public MainVideoMute MainVideoMute { get; set; }
|
||||||
public List<Source> Source { get; set; }
|
public List<Source> Source { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,7 @@ using PepperDash.Essentials.Core.Routing;
|
|||||||
using PepperDash.Essentials.Devices.Common.Cameras;
|
using PepperDash.Essentials.Devices.Common.Cameras;
|
||||||
using PepperDash.Essentials.Devices.Common.Codec;
|
using PepperDash.Essentials.Devices.Common.Codec;
|
||||||
using PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces;
|
using PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces;
|
||||||
using PepperDash_Essentials_Core.Bridges.JoinMaps;
|
using PepperDash.Essentials.Core.Bridges.JoinMaps;
|
||||||
using PepperDash_Essentials_Core.DeviceTypeInterfaces;
|
|
||||||
using Feedback = PepperDash.Essentials.Core.Feedback;
|
using Feedback = PepperDash.Essentials.Core.Feedback;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
||||||
|
|||||||
@@ -17,13 +17,12 @@ using PepperDash.Essentials.Devices.Common.Cameras;
|
|||||||
using PepperDash.Essentials.Devices.Common.Codec;
|
using PepperDash.Essentials.Devices.Common.Codec;
|
||||||
using PepperDash.Essentials.Devices.Common.VideoCodec.Cisco;
|
using PepperDash.Essentials.Devices.Common.VideoCodec.Cisco;
|
||||||
using PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces;
|
using PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces;
|
||||||
using PepperDash_Essentials_Core.DeviceTypeInterfaces;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||||
{
|
{
|
||||||
public class ZoomRoom : VideoCodecBase, IHasCodecSelfView, IHasDirectoryHistoryStack, ICommunicationMonitor,
|
public class ZoomRoom : VideoCodecBase, IHasCodecSelfView, IHasDirectoryHistoryStack, ICommunicationMonitor,
|
||||||
IRouting,
|
IRouting,
|
||||||
IHasScheduleAwareness, IHasCodecCameras, IHasParticipants, IHasCameraOff, IHasCameraAutoMode,
|
IHasScheduleAwareness, IHasCodecCameras, IHasParticipants, IHasCameraOff, IHasCameraMute, IHasCameraAutoMode,
|
||||||
IHasFarEndContentStatus, IHasSelfviewPosition, IHasPhoneDialing
|
IHasFarEndContentStatus, IHasSelfviewPosition, IHasPhoneDialing
|
||||||
{
|
{
|
||||||
private const long MeetingRefreshTimer = 60000;
|
private const long MeetingRefreshTimer = 60000;
|
||||||
@@ -98,6 +97,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
|
|
||||||
CameraIsOffFeedback = new BoolFeedback(CameraIsOffFeedbackFunc);
|
CameraIsOffFeedback = new BoolFeedback(CameraIsOffFeedbackFunc);
|
||||||
|
|
||||||
|
CameraIsMutedFeedback = CameraIsOffFeedback;
|
||||||
|
|
||||||
CameraAutoModeIsOnFeedback = new BoolFeedback(CameraAutoModeIsOnFeedbackFunc);
|
CameraAutoModeIsOnFeedback = new BoolFeedback(CameraAutoModeIsOnFeedbackFunc);
|
||||||
|
|
||||||
CodecSchedule = new CodecScheduleAwareness(MeetingRefreshTimer);
|
CodecSchedule = new CodecScheduleAwareness(MeetingRefreshTimer);
|
||||||
@@ -1775,16 +1776,37 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
|
|
||||||
public void CameraOff()
|
public void CameraOff()
|
||||||
{
|
{
|
||||||
SendText("zConfiguration Call Camera Mute: On");
|
CameraMuteOn();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public BoolFeedback CameraIsMutedFeedback { get; private set; }
|
||||||
|
|
||||||
|
public void CameraMuteOn()
|
||||||
|
{
|
||||||
|
SendText("zConfiguration Call Camera Mute: On");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CameraMuteOff()
|
||||||
|
{
|
||||||
|
SendText("zConfiguration Call Camera Mute: Off");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CameraMuteToggle()
|
||||||
|
{
|
||||||
|
if (CameraIsMutedFeedback.BoolValue)
|
||||||
|
CameraMuteOff();
|
||||||
|
else
|
||||||
|
CameraMuteOn();
|
||||||
|
}
|
||||||
|
|
||||||
#region Implementation of IHasCameraAutoMode
|
#region Implementation of IHasCameraAutoMode
|
||||||
|
|
||||||
//Zoom doesn't support camera auto modes. Setting this to just unmute video
|
//Zoom doesn't support camera auto modes. Setting this to just unmute video
|
||||||
public void CameraAutoModeOn()
|
public void CameraAutoModeOn()
|
||||||
{
|
{
|
||||||
|
CameraMuteOff();
|
||||||
throw new NotImplementedException("Zoom Room Doesn't support camera auto mode");
|
throw new NotImplementedException("Zoom Room Doesn't support camera auto mode");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user