mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-14 04:04:58 +00:00
Compare commits
1 Commits
feature/Ge
...
1.7.7-hotf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1edf50b3b3 |
3
.github/ISSUE_TEMPLATE/bug_report.md
vendored
3
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -7,9 +7,6 @@ assignees: ''
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Was this bug identified in a specific build version?**
|
|
||||||
Please note the build version where this bug was identified
|
|
||||||
|
|
||||||
**Describe the bug**
|
**Describe the bug**
|
||||||
A clear and concise description of what the bug is.
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
|||||||
27
.github/ISSUE_TEMPLATE/rfi_request.md
vendored
27
.github/ISSUE_TEMPLATE/rfi_request.md
vendored
@@ -1,27 +0,0 @@
|
|||||||
---
|
|
||||||
name: Request for Information
|
|
||||||
about: Request specific information about capabilities of the framework
|
|
||||||
title: "[RFI]-"
|
|
||||||
labels: RFI
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**What is your request?**
|
|
||||||
Please provide as much detail as possible.
|
|
||||||
|
|
||||||
|
|
||||||
**What is the intended use case**
|
|
||||||
- [ ] Essentials Standalone Application
|
|
||||||
- [ ] Essentials + SIMPL Windows Hybrid
|
|
||||||
|
|
||||||
**User Interface Requirements**
|
|
||||||
- [ ] Not Applicable (logic only)
|
|
||||||
- [ ] Crestron Smart Graphics Touchpanel
|
|
||||||
- [ ] Cisco Touch10
|
|
||||||
- [ ] Mobile Control
|
|
||||||
- [ ] Crestron CH5 Touchpanel interface
|
|
||||||
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the request here.
|
|
||||||
1
.github/scripts/ZipBuildOutput.ps1
vendored
1
.github/scripts/ZipBuildOutput.ps1
vendored
@@ -8,7 +8,6 @@ $destination = "$($Env:GITHUB_HOME)\output"
|
|||||||
New-Item -ItemType Directory -Force -Path ($destination)
|
New-Item -ItemType Directory -Force -Path ($destination)
|
||||||
Get-ChildItem ($destination)
|
Get-ChildItem ($destination)
|
||||||
$exclusions = @(git submodule foreach --quiet 'echo $name')
|
$exclusions = @(git submodule foreach --quiet 'echo $name')
|
||||||
$exclusions += "Newtonsoft.Compact.Json.dll"
|
|
||||||
# Trying to get any .json schema files (not currently working)
|
# Trying to get any .json schema files (not currently working)
|
||||||
# Gets any files with the listed extensions.
|
# Gets any files with the listed extensions.
|
||||||
Get-ChildItem -recurse -Path "$($Env:GITHUB_WORKSPACE)" -include "*.clz", "*.cpz", "*.cplz", "*.dll", "*.nuspec" | ForEach-Object {
|
Get-ChildItem -recurse -Path "$($Env:GITHUB_WORKSPACE)" -include "*.clz", "*.cpz", "*.cplz", "*.dll", "*.nuspec" | ForEach-Object {
|
||||||
|
|||||||
174
.github/workflows/docker.yml
vendored
174
.github/workflows/docker.yml
vendored
@@ -8,9 +8,12 @@ on:
|
|||||||
- bugfix/*
|
- bugfix/*
|
||||||
- release/*
|
- release/*
|
||||||
- development
|
- development
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- development
|
||||||
|
|
||||||
env:
|
env:
|
||||||
# solution path doesn't need slashes unless it is multiple folders deep
|
# solution path doesn't need slashes unless there it is multiple folders deep
|
||||||
# solution name does not include extension. .sln is assumed
|
# solution name does not include extension. .sln is assumed
|
||||||
SOLUTION_PATH: PepperDashEssentials
|
SOLUTION_PATH: PepperDashEssentials
|
||||||
SOLUTION_FILE: PepperDashEssentials
|
SOLUTION_FILE: PepperDashEssentials
|
||||||
@@ -22,7 +25,7 @@ env:
|
|||||||
RELEASE_BRANCH: main
|
RELEASE_BRANCH: main
|
||||||
jobs:
|
jobs:
|
||||||
Build_Project:
|
Build_Project:
|
||||||
runs-on: windows-2019
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
# First we checkout the source repo
|
# First we checkout the source repo
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
@@ -75,9 +78,16 @@ 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 }}
|
||||||
@@ -87,6 +97,7 @@ jobs:
|
|||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
# Upload the build package to the release
|
# Upload the build package to the release
|
||||||
- name: Upload Release Package
|
- name: Upload Release Package
|
||||||
|
if: contains(env.VERSION,'-rc-') || contains(env.VERSION,'-hotfix-')
|
||||||
id: upload_release
|
id: upload_release
|
||||||
uses: actions/upload-release-asset@v1
|
uses: actions/upload-release-asset@v1
|
||||||
with:
|
with:
|
||||||
@@ -98,7 +109,7 @@ jobs:
|
|||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
Push_Nuget_Package:
|
Push_Nuget_Package:
|
||||||
needs: Build_Project
|
needs: Build_Project
|
||||||
runs-on: windows-2019
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Download Build Version Info
|
- name: Download Build Version Info
|
||||||
uses: actions/download-artifact@v1
|
uses: actions/download-artifact@v1
|
||||||
@@ -139,3 +150,160 @@ 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 ./
|
||||||
|
|||||||
149
.github/workflows/main.yml
vendored
149
.github/workflows/main.yml
vendored
@@ -19,7 +19,7 @@ env:
|
|||||||
RELEASE_BRANCH: main
|
RELEASE_BRANCH: main
|
||||||
jobs:
|
jobs:
|
||||||
Build_Project:
|
Build_Project:
|
||||||
runs-on: windows-2019
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
# First we checkout the source repo
|
# First we checkout the source repo
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
@@ -82,7 +82,7 @@ jobs:
|
|||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
Push_Nuget_Package:
|
Push_Nuget_Package:
|
||||||
needs: Build_Project
|
needs: Build_Project
|
||||||
runs-on: windows-2019
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Download Build Version Info
|
- name: Download Build Version Info
|
||||||
uses: actions/download-artifact@v1
|
uses: actions/download-artifact@v1
|
||||||
@@ -123,3 +123,148 @@ 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 ./
|
||||||
|
|||||||
Binary file not shown.
@@ -55,7 +55,7 @@ namespace PepperDash.Essentials
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// DSP/DMPS format: deviceKey--levelName, biampTesira-1--master
|
// DSP format: deviceKey--levelName, biampTesira-1--master
|
||||||
match = Regex.Match(DeviceKey, @"([-_\w]+)--(.+)");
|
match = Regex.Match(DeviceKey, @"([-_\w]+)--(.+)");
|
||||||
if (match.Success)
|
if (match.Success)
|
||||||
{
|
{
|
||||||
@@ -67,27 +67,6 @@ namespace PepperDash.Essentials
|
|||||||
if (dsp.LevelControlPoints.ContainsKey(levelTag)) // should always...
|
if (dsp.LevelControlPoints.ContainsKey(levelTag)) // should always...
|
||||||
return dsp.LevelControlPoints[levelTag];
|
return dsp.LevelControlPoints[levelTag];
|
||||||
}
|
}
|
||||||
|
|
||||||
var dmps = DeviceManager.GetDeviceForKey(devKey) as DmpsAudioOutputController;
|
|
||||||
if (dmps != null)
|
|
||||||
{
|
|
||||||
var levelTag = match.Groups[2].Value;
|
|
||||||
switch (levelTag)
|
|
||||||
{
|
|
||||||
case "master":
|
|
||||||
return dmps.MasterVolumeLevel;
|
|
||||||
case "source":
|
|
||||||
return dmps.SourceVolumeLevel;
|
|
||||||
case "micsmaster":
|
|
||||||
return dmps.MicsMasterVolumeLevel;
|
|
||||||
case "codec1":
|
|
||||||
return dmps.Codec1VolumeLevel;
|
|
||||||
case "codec2":
|
|
||||||
return dmps.Codec2VolumeLevel;
|
|
||||||
default:
|
|
||||||
return dmps.MasterVolumeLevel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// No volume for some reason. We have failed as developers
|
// No volume for some reason. We have failed as developers
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ using PepperDash.Essentials.Core;
|
|||||||
using PepperDash.Essentials.Core.Bridges;
|
using PepperDash.Essentials.Core.Bridges;
|
||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
using PepperDash.Essentials.Core.Fusion;
|
using PepperDash.Essentials.Core.Fusion;
|
||||||
using PepperDash.Essentials.Core.Web;
|
|
||||||
using PepperDash.Essentials.Devices.Common;
|
using PepperDash.Essentials.Devices.Common;
|
||||||
using PepperDash.Essentials.DM;
|
using PepperDash.Essentials.DM;
|
||||||
using PepperDash.Essentials.Fusion;
|
using PepperDash.Essentials.Fusion;
|
||||||
@@ -29,7 +28,6 @@ namespace PepperDash.Essentials
|
|||||||
HttpLogoServer LogoServer;
|
HttpLogoServer LogoServer;
|
||||||
|
|
||||||
private CTimer _startTimer;
|
private CTimer _startTimer;
|
||||||
private CEvent _initializeEvent;
|
|
||||||
private const long StartupTime = 500;
|
private const long StartupTime = 500;
|
||||||
|
|
||||||
public ControlSystem()
|
public ControlSystem()
|
||||||
@@ -38,7 +36,6 @@ namespace PepperDash.Essentials
|
|||||||
Thread.MaxNumberOfUserThreads = 400;
|
Thread.MaxNumberOfUserThreads = 400;
|
||||||
Global.ControlSystem = this;
|
Global.ControlSystem = this;
|
||||||
DeviceManager.Initialize(this);
|
DeviceManager.Initialize(this);
|
||||||
SecretsManager.Initialize();
|
|
||||||
SystemMonitor.ProgramInitialization.ProgramInitializationUnderUserControl = true;
|
SystemMonitor.ProgramInitialization.ProgramInitializationUnderUserControl = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,29 +44,10 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public override void InitializeSystem()
|
public override void InitializeSystem()
|
||||||
{
|
{
|
||||||
// If the control system is a DMPS type, we need to wait to exit this method until all devices have had time to activate
|
_startTimer = new CTimer(StartSystem,StartupTime);
|
||||||
// to allow any HD-BaseT DM endpoints to register first.
|
|
||||||
bool preventInitializationComplete = Global.ControlSystemIsDmpsType;
|
|
||||||
if (preventInitializationComplete)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "******************* InitializeSystem() Entering **********************");
|
|
||||||
_startTimer = new CTimer(StartSystem, preventInitializationComplete, StartupTime);
|
|
||||||
_initializeEvent = new CEvent(true, false);
|
|
||||||
DeviceManager.AllDevicesRegistered += (o, a) =>
|
|
||||||
{
|
|
||||||
_initializeEvent.Set();
|
|
||||||
};
|
|
||||||
_initializeEvent.Wait(30000);
|
|
||||||
Debug.Console(1, "******************* InitializeSystem() Exiting **********************");
|
|
||||||
SystemMonitor.ProgramInitialization.ProgramInitializationComplete = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_startTimer = new CTimer(StartSystem, preventInitializationComplete, StartupTime);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StartSystem(object preventInitialization)
|
private void StartSystem(object obj)
|
||||||
{
|
{
|
||||||
DeterminePlatform();
|
DeterminePlatform();
|
||||||
|
|
||||||
@@ -81,41 +59,36 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
CrestronConsole.AddNewConsoleCommand(PluginLoader.ReportAssemblyVersions, "reportversions", "Reports the versions of the loaded assemblies", ConsoleAccessLevelEnum.AccessOperator);
|
CrestronConsole.AddNewConsoleCommand(PluginLoader.ReportAssemblyVersions, "reportversions", "Reports the versions of the loaded assemblies", ConsoleAccessLevelEnum.AccessOperator);
|
||||||
|
|
||||||
CrestronConsole.AddNewConsoleCommand(Core.DeviceFactory.GetDeviceFactoryTypes, "gettypes", "Gets the device types that can be built. Accepts a filter string.", ConsoleAccessLevelEnum.AccessOperator);
|
CrestronConsole.AddNewConsoleCommand(PepperDash.Essentials.Core.DeviceFactory.GetDeviceFactoryTypes, "gettypes", "Gets the device types that can be built. Accepts a filter string.", ConsoleAccessLevelEnum.AccessOperator);
|
||||||
|
|
||||||
CrestronConsole.AddNewConsoleCommand(BridgeHelper.PrintJoinMap, "getjoinmap", "map(s) for bridge or device on bridge [brKey [devKey]]", ConsoleAccessLevelEnum.AccessOperator);
|
CrestronConsole.AddNewConsoleCommand(BridgeHelper.PrintJoinMap, "getjoinmap", "map(s) for bridge or device on bridge [brKey [devKey]]", ConsoleAccessLevelEnum.AccessOperator);
|
||||||
|
|
||||||
CrestronConsole.AddNewConsoleCommand(BridgeHelper.JoinmapMarkdown, "getjoinmapmarkdown"
|
CrestronConsole.AddNewConsoleCommand(s =>
|
||||||
, "generate markdown of map(s) for bridge or device on bridge [brKey [devKey]]", ConsoleAccessLevelEnum.AccessOperator);
|
{
|
||||||
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "CONSOLE MESSAGE: {0}", s);
|
||||||
CrestronConsole.AddNewConsoleCommand(s => Debug.Console(0, Debug.ErrorLogLevel.Notice, "CONSOLE MESSAGE: {0}", s), "appdebugmessage", "Writes message to log", ConsoleAccessLevelEnum.AccessOperator);
|
}, "appdebugmessage", "Writes message to log", ConsoleAccessLevelEnum.AccessOperator);
|
||||||
|
|
||||||
CrestronConsole.AddNewConsoleCommand(s =>
|
CrestronConsole.AddNewConsoleCommand(s =>
|
||||||
{
|
{
|
||||||
foreach (var tl in TieLineCollection.Default)
|
foreach (var tl in TieLineCollection.Default)
|
||||||
CrestronConsole.ConsoleCommandResponse(" {0}{1}", tl, CrestronEnvironment.NewLine);
|
CrestronConsole.ConsoleCommandResponse(" {0}\r", tl);
|
||||||
},
|
},
|
||||||
"listtielines", "Prints out all tie lines", ConsoleAccessLevelEnum.AccessOperator);
|
"listtielines", "Prints out all tie lines", ConsoleAccessLevelEnum.AccessOperator);
|
||||||
|
|
||||||
CrestronConsole.AddNewConsoleCommand(s =>
|
CrestronConsole.AddNewConsoleCommand(s =>
|
||||||
{
|
{
|
||||||
CrestronConsole.ConsoleCommandResponse
|
CrestronConsole.ConsoleCommandResponse
|
||||||
("Current running configuration. This is the merged system and template configuration" + CrestronEnvironment.NewLine);
|
("Current running configuration. This is the merged system and template configuration");
|
||||||
CrestronConsole.ConsoleCommandResponse(Newtonsoft.Json.JsonConvert.SerializeObject
|
CrestronConsole.ConsoleCommandResponse(Newtonsoft.Json.JsonConvert.SerializeObject
|
||||||
(ConfigReader.ConfigObject, Newtonsoft.Json.Formatting.Indented));
|
(ConfigReader.ConfigObject, Newtonsoft.Json.Formatting.Indented));
|
||||||
}, "showconfig", "Shows the current running merged config", ConsoleAccessLevelEnum.AccessOperator);
|
}, "showconfig", "Shows the current running merged config", ConsoleAccessLevelEnum.AccessOperator);
|
||||||
|
|
||||||
CrestronConsole.AddNewConsoleCommand(s =>
|
CrestronConsole.AddNewConsoleCommand(s =>
|
||||||
CrestronConsole.ConsoleCommandResponse(
|
{
|
||||||
"This system can be found at the following URLs:{2}" +
|
CrestronConsole.ConsoleCommandResponse("This system can be found at the following URLs:\r" +
|
||||||
"System URL: {0}{2}" +
|
"System URL: {0}\r" +
|
||||||
"Template URL: {1}{2}",
|
"Template URL: {1}", ConfigReader.ConfigObject.SystemUrl, ConfigReader.ConfigObject.TemplateUrl);
|
||||||
ConfigReader.ConfigObject.SystemUrl,
|
}, "portalinfo", "Shows portal URLS from configuration", ConsoleAccessLevelEnum.AccessOperator);
|
||||||
ConfigReader.ConfigObject.TemplateUrl,
|
|
||||||
CrestronEnvironment.NewLine),
|
|
||||||
"portalinfo",
|
|
||||||
"Shows portal URLS from configuration",
|
|
||||||
ConsoleAccessLevelEnum.AccessOperator);
|
|
||||||
|
|
||||||
|
|
||||||
CrestronConsole.AddNewConsoleCommand(DeviceManager.GetRoutingPorts,
|
CrestronConsole.AddNewConsoleCommand(DeviceManager.GetRoutingPorts,
|
||||||
@@ -127,11 +100,8 @@ namespace PepperDash.Essentials
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(bool)preventInitialization)
|
|
||||||
{
|
|
||||||
SystemMonitor.ProgramInitialization.ProgramInitializationComplete = true;
|
SystemMonitor.ProgramInitialization.ProgramInitializationComplete = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines if the program is running on a processor (appliance) or server (VC-4).
|
/// Determines if the program is running on a processor (appliance) or server (VC-4).
|
||||||
@@ -160,53 +130,34 @@ 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
|
||||||
{
|
{
|
||||||
string userFolder;
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on {1} Appliance", Global.AssemblyVersion, Global.ProcessorSeries.ToString());
|
||||||
string nvramFolder;
|
|
||||||
bool is4series = false;
|
|
||||||
|
|
||||||
if (eCrestronSeries.Series4 == (Global.ProcessorSeries & eCrestronSeries.Series4)) // Handle 4-series
|
|
||||||
{
|
|
||||||
is4series = true;
|
|
||||||
// Set path to user/
|
|
||||||
userFolder = "user";
|
|
||||||
nvramFolder = "nvram";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
userFolder = "User";
|
|
||||||
nvramFolder = "Nvram";
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on {1} Appliance", Global.AssemblyVersion, is4series ? "4-series" : "3-series");
|
|
||||||
|
|
||||||
// Check if User/ProgramX exists
|
// Check if User/ProgramX exists
|
||||||
if (Directory.Exists(Global.ApplicationDirectoryPathPrefix + dirSeparator + userFolder
|
if (Directory.Exists(Global.ApplicationDirectoryPathPrefix + dirSeparator + "User"
|
||||||
+ dirSeparator + string.Format("program{0}", InitialParametersClass.ApplicationNumber)))
|
+ dirSeparator + string.Format("program{0}", InitialParametersClass.ApplicationNumber)))
|
||||||
{
|
{
|
||||||
Debug.Console(0, @"{0}/program{1} directory found", userFolder, InitialParametersClass.ApplicationNumber);
|
Debug.Console(0, @"User/program{0} directory found", InitialParametersClass.ApplicationNumber);
|
||||||
filePathPrefix = directoryPrefix + dirSeparator + userFolder
|
filePathPrefix = directoryPrefix + dirSeparator + "User"
|
||||||
+ dirSeparator + string.Format("program{0}", InitialParametersClass.ApplicationNumber) + dirSeparator;
|
+ dirSeparator + string.Format("program{0}", InitialParametersClass.ApplicationNumber) + dirSeparator;
|
||||||
}
|
}
|
||||||
// Check if Nvram/Programx exists
|
// Check if Nvram/Programx exists
|
||||||
else if (Directory.Exists(directoryPrefix + dirSeparator + nvramFolder
|
else if (Directory.Exists(directoryPrefix + dirSeparator + "Nvram"
|
||||||
+ dirSeparator + string.Format("program{0}", InitialParametersClass.ApplicationNumber)))
|
+ dirSeparator + string.Format("program{0}", InitialParametersClass.ApplicationNumber)))
|
||||||
{
|
{
|
||||||
Debug.Console(0, @"{0}/program{1} directory found", nvramFolder, InitialParametersClass.ApplicationNumber);
|
Debug.Console(0, @"Nvram/program{0} directory found", InitialParametersClass.ApplicationNumber);
|
||||||
filePathPrefix = directoryPrefix + dirSeparator + nvramFolder
|
filePathPrefix = directoryPrefix + dirSeparator + "Nvram"
|
||||||
+ dirSeparator + string.Format("program{0}", InitialParametersClass.ApplicationNumber) + dirSeparator;
|
+ dirSeparator + string.Format("program{0}", InitialParametersClass.ApplicationNumber) + dirSeparator;
|
||||||
}
|
}
|
||||||
// If neither exists, set path to User/ProgramX
|
// If neither exists, set path to User/ProgramX
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.Console(0, @"No previous directory found. Using {0}/program{1}", userFolder, InitialParametersClass.ApplicationNumber);
|
Debug.Console(0, @"No previous directory found. Using User/program{0}", InitialParametersClass.ApplicationNumber);
|
||||||
filePathPrefix = directoryPrefix + dirSeparator + userFolder
|
filePathPrefix = directoryPrefix + dirSeparator + "User"
|
||||||
+ dirSeparator + string.Format("program{0}", InitialParametersClass.ApplicationNumber) + dirSeparator;
|
+ dirSeparator + string.Format("program{0}", InitialParametersClass.ApplicationNumber) + dirSeparator;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // Handles Linux OS (Virtual Control)
|
else // Handles Linux OS (Virtual Control)
|
||||||
{
|
{
|
||||||
Debug.SetDebugLevel(2);
|
|
||||||
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on Virtual Control Server", Global.AssemblyVersion);
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on Virtual Control Server", Global.AssemblyVersion);
|
||||||
|
|
||||||
// Set path to User/
|
// Set path to User/
|
||||||
@@ -308,10 +259,6 @@ namespace PepperDash.Essentials
|
|||||||
if (!Directory.Exists(pluginDir))
|
if (!Directory.Exists(pluginDir))
|
||||||
Directory.Create(pluginDir);
|
Directory.Create(pluginDir);
|
||||||
|
|
||||||
var joinmapDir = Global.FilePathPrefix + "joinmaps";
|
|
||||||
if(!Directory.Exists(joinmapDir))
|
|
||||||
Directory.Create(joinmapDir);
|
|
||||||
|
|
||||||
return configExists;
|
return configExists;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -359,7 +306,6 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
// Build the processor wrapper class
|
// Build the processor wrapper class
|
||||||
DeviceManager.AddDevice(new PepperDash.Essentials.Core.Devices.CrestronProcessor("processor"));
|
DeviceManager.AddDevice(new PepperDash.Essentials.Core.Devices.CrestronProcessor("processor"));
|
||||||
DeviceManager.AddDevice(new EssemtialsWebApi("essentialsWebApi","Essentials Web API"));
|
|
||||||
|
|
||||||
// Add global System Monitor device
|
// Add global System Monitor device
|
||||||
if (CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance)
|
if (CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance)
|
||||||
@@ -379,7 +325,7 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
var prompt = Global.ControlSystem.ControllerPrompt;
|
var prompt = Global.ControlSystem.ControllerPrompt;
|
||||||
|
|
||||||
var typeMatch = String.Equals(devConf.Type, prompt, StringComparison.OrdinalIgnoreCase) ||
|
var typeMatch = String.Equals(devConf.Type, prompt, StringComparison.OrdinalIgnoreCase) &&
|
||||||
String.Equals(devConf.Type, prompt.Replace("-", ""), StringComparison.OrdinalIgnoreCase);
|
String.Equals(devConf.Type, prompt.Replace("-", ""), StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
if (!typeMatch)
|
if (!typeMatch)
|
||||||
@@ -397,7 +343,9 @@ namespace PepperDash.Essentials
|
|||||||
if(propertiesConfig == null)
|
if(propertiesConfig == null)
|
||||||
propertiesConfig = new DM.Config.DmpsRoutingPropertiesConfig();
|
propertiesConfig = new DM.Config.DmpsRoutingPropertiesConfig();
|
||||||
|
|
||||||
DeviceManager.AddDevice(DmpsRoutingController.GetDmpsRoutingController("processor-avRouting", this.ControllerPrompt, propertiesConfig));
|
var dmpsRoutingController = DmpsRoutingController.GetDmpsRoutingController("processor-avRouting", this.ControllerPrompt, propertiesConfig);
|
||||||
|
|
||||||
|
DeviceManager.AddDevice(dmpsRoutingController);
|
||||||
}
|
}
|
||||||
else if (this.ControllerPrompt.IndexOf("mpc3", StringComparison.OrdinalIgnoreCase) > -1)
|
else if (this.ControllerPrompt.IndexOf("mpc3", StringComparison.OrdinalIgnoreCase) > -1)
|
||||||
{
|
{
|
||||||
@@ -484,13 +432,14 @@ namespace PepperDash.Essentials
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint fusionIpId = 0xf1;
|
|
||||||
|
|
||||||
foreach (var roomConfig in ConfigReader.ConfigObject.Rooms)
|
foreach (var roomConfig in ConfigReader.ConfigObject.Rooms)
|
||||||
{
|
{
|
||||||
var room = EssentialsRoomConfigHelper.GetRoomObject(roomConfig) as IEssentialsRoom;
|
var room = EssentialsRoomConfigHelper.GetRoomObject(roomConfig) as EssentialsRoomBase;
|
||||||
if (room != null)
|
if (room != null)
|
||||||
{
|
{
|
||||||
|
// default IPID
|
||||||
|
uint fusionIpId = 0xf1;
|
||||||
|
|
||||||
// default to no join map key
|
// default to no join map key
|
||||||
string fusionJoinMapKey = string.Empty;
|
string fusionJoinMapKey = string.Empty;
|
||||||
|
|
||||||
@@ -507,71 +456,63 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AddRoomAndBuildMC(room);
|
if (room is EssentialsHuddleSpaceRoom)
|
||||||
|
|
||||||
if (room is IEssentialsHuddleSpaceRoom)
|
|
||||||
{
|
{
|
||||||
|
DeviceManager.AddDevice(room);
|
||||||
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Room is EssentialsHuddleSpaceRoom, attempting to add to DeviceManager with Fusion with IP-ID {0:X2}", fusionIpId);
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Room is EssentialsHuddleSpaceRoom, attempting to add to DeviceManager with Fusion");
|
||||||
DeviceManager.AddDevice(new Core.Fusion.EssentialsHuddleSpaceFusionSystemControllerBase(room, fusionIpId, fusionJoinMapKey));
|
DeviceManager.AddDevice(new Core.Fusion.EssentialsHuddleSpaceFusionSystemControllerBase(room, fusionIpId, fusionJoinMapKey));
|
||||||
|
|
||||||
}
|
|
||||||
else if (room is IEssentialsHuddleVtc1Room)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (!(room is EssentialsCombinedHuddleVtc1Room))
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Attempting to build Mobile Control Bridge...");
|
||||||
{
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Room is EssentialsHuddleVtc1Room, attempting to add to DeviceManager with Fusion with IP-ID {0:X2}", fusionIpId);
|
|
||||||
DeviceManager.AddDevice(new EssentialsHuddleVtc1FusionController((IEssentialsHuddleVtc1Room)room, fusionIpId, fusionJoinMapKey));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
CreateMobileControlBridge(room);
|
||||||
|
}
|
||||||
|
else if (room is EssentialsHuddleVtc1Room)
|
||||||
|
{
|
||||||
|
DeviceManager.AddDevice(room);
|
||||||
|
|
||||||
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Room is EssentialsHuddleVtc1Room, attempting to add to DeviceManager with Fusion");
|
||||||
|
DeviceManager.AddDevice(new EssentialsHuddleVtc1FusionController((EssentialsHuddleVtc1Room)room, fusionIpId, fusionJoinMapKey));
|
||||||
|
|
||||||
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Attempting to build Mobile Control Bridge...");
|
||||||
|
|
||||||
|
CreateMobileControlBridge(room);
|
||||||
}
|
}
|
||||||
else if (room is EssentialsTechRoom)
|
else if (room is EssentialsTechRoom)
|
||||||
{
|
{
|
||||||
|
DeviceManager.AddDevice(room);
|
||||||
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice,
|
Debug.Console(0, Debug.ErrorLogLevel.Notice,
|
||||||
"Room is EssentialsTechRoom, Attempting to add to DeviceManager with Fusion with IP-ID {0:X2}", fusionIpId);
|
"Room is EssentialsTechRoom, Attempting to add to DeviceManager with Fusion");
|
||||||
DeviceManager.AddDevice(new EssentialsTechRoomFusionSystemController((EssentialsTechRoom)room, fusionIpId, fusionJoinMapKey));
|
DeviceManager.AddDevice(new EssentialsTechRoomFusionSystemController((EssentialsTechRoom)room, fusionIpId, fusionJoinMapKey));
|
||||||
|
|
||||||
}
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Attempting to build Mobile Control Bridge");
|
||||||
fusionIpId += 1;
|
|
||||||
|
CreateMobileControlBridge(room);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Notice: Cannot create room from config, key '{0}' - Is this intentional? This may be a valid configuration.", roomConfig.Key);
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Room is NOT EssentialsRoom, attempting to add to DeviceManager w/o Fusion");
|
||||||
|
DeviceManager.AddDevice(room);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Notice: Cannot create room from config, key '{0}' - Is this intentional? This may be a valid configuration.", roomConfig.Key);
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "All Rooms Loaded.");
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "All Rooms Loaded.");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddRoomAndBuildMC(IEssentialsRoom room)
|
private static void CreateMobileControlBridge(EssentialsRoomBase room)
|
||||||
{
|
|
||||||
DeviceManager.AddDevice(room);
|
|
||||||
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Attempting to build Mobile Control Bridge");
|
|
||||||
|
|
||||||
CreateMobileControlBridge(room);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void CreateMobileControlBridge(object room)
|
|
||||||
{
|
{
|
||||||
var mobileControl = GetMobileControlDevice();
|
var mobileControl = GetMobileControlDevice();
|
||||||
|
|
||||||
if (mobileControl == null) return;
|
if (mobileControl == null) return;
|
||||||
|
|
||||||
var mobileControl3 = mobileControl as IMobileControl3;
|
mobileControl.CreateMobileControlRoomBridge(room, mobileControl);
|
||||||
|
|
||||||
if (mobileControl3 != null)
|
|
||||||
{
|
|
||||||
mobileControl3.CreateMobileControlRoomBridge(room as IEssentialsRoom, mobileControl);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mobileControl.CreateMobileControlRoomBridge(room as EssentialsRoomBase, mobileControl);
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Mobile Control Bridge Added...");
|
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Mobile Control Bridge Added...");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,7 +88,7 @@
|
|||||||
{
|
{
|
||||||
"name": "Wireless Video",
|
"name": "Wireless Video",
|
||||||
"key": "wePresent-1",
|
"key": "wePresent-1",
|
||||||
"type": "genericSource",
|
"type": "wePresent",
|
||||||
"group": "genericSource",
|
"group": "genericSource",
|
||||||
"uid": 9,
|
"uid": 9,
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
{
|
{
|
||||||
"name": "Wireless Video",
|
"name": "Wireless Video",
|
||||||
"key": "wePresent-1",
|
"key": "wePresent-1",
|
||||||
"type": "genericSource",
|
"type": "wePresent",
|
||||||
"properties": {},
|
"properties": {},
|
||||||
"group": "genericSource",
|
"group": "genericSource",
|
||||||
"uid": 3
|
"uid": 3
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
{
|
{
|
||||||
BooleanSigData CodecIsInCall;
|
BooleanSigData CodecIsInCall;
|
||||||
|
|
||||||
public EssentialsHuddleVtc1FusionController(IEssentialsHuddleVtc1Room room, uint ipId, string joinMapKey)
|
public EssentialsHuddleVtc1FusionController(EssentialsHuddleVtc1Room room, uint ipId, string joinMapKey)
|
||||||
: base(room, ipId, joinMapKey)
|
: base(room, ipId, joinMapKey)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var codec = (Room as IEssentialsHuddleVtc1Room).VideoCodec;
|
var codec = (Room as EssentialsHuddleVtc1Room).VideoCodec;
|
||||||
|
|
||||||
if (codec == null)
|
if (codec == null)
|
||||||
{
|
{
|
||||||
@@ -141,7 +141,7 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
|
|
||||||
void codec_CallStatusChange(object sender, PepperDash.Essentials.Devices.Common.Codec.CodecCallStatusItemChangeEventArgs e)
|
void codec_CallStatusChange(object sender, PepperDash.Essentials.Devices.Common.Codec.CodecCallStatusItemChangeEventArgs e)
|
||||||
{
|
{
|
||||||
var codec = (Room as IEssentialsHuddleVtc1Room).VideoCodec;
|
var codec = (Room as EssentialsHuddleVtc1Room).VideoCodec;
|
||||||
|
|
||||||
CodecIsInCall.InputSig.BoolValue = codec.IsInCall;
|
CodecIsInCall.InputSig.BoolValue = codec.IsInCall;
|
||||||
}
|
}
|
||||||
@@ -150,7 +150,7 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
|
|
||||||
protected override void CreateSymbolAndBasicSigs(uint ipId)
|
protected override void CreateSymbolAndBasicSigs(uint ipId)
|
||||||
{
|
{
|
||||||
Debug.Console(0, this, "Creating Fusion Room symbol with GUID: {0} and IP-ID {1:X2}", RoomGuid, ipId);
|
Debug.Console(1, this, "Creating Fusion Room symbol with GUID: {0}", RoomGuid);
|
||||||
|
|
||||||
FusionRoom = new FusionRoom(ipId, Global.ControlSystem, Room.Name, RoomGuid);
|
FusionRoom = new FusionRoom(ipId, Global.ControlSystem, Room.Name, RoomGuid);
|
||||||
FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.Use();
|
FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.Use();
|
||||||
@@ -174,11 +174,11 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
// Moved to
|
// Moved to
|
||||||
CurrentRoomSourceNameSig = FusionRoom.CreateOffsetStringSig(JoinMap.Display1CurrentSourceName.JoinNumber, JoinMap.Display1CurrentSourceName.AttributeName, eSigIoMask.InputSigOnly);
|
CurrentRoomSourceNameSig = FusionRoom.CreateOffsetStringSig(JoinMap.Display1CurrentSourceName.JoinNumber, JoinMap.Display1CurrentSourceName.AttributeName, eSigIoMask.InputSigOnly);
|
||||||
// Don't think we need to get current status of this as nothing should be alive yet.
|
// Don't think we need to get current status of this as nothing should be alive yet.
|
||||||
(Room as IEssentialsHuddleVtc1Room).CurrentSourceChange += Room_CurrentSourceInfoChange;
|
(Room as EssentialsHuddleVtc1Room).CurrentSourceChange += Room_CurrentSourceInfoChange;
|
||||||
|
|
||||||
|
|
||||||
FusionRoom.SystemPowerOn.OutputSig.SetSigFalseAction((Room as IEssentialsHuddleVtc1Room).PowerOnToDefaultOrLastSource);
|
FusionRoom.SystemPowerOn.OutputSig.SetSigFalseAction((Room as EssentialsHuddleVtc1Room).PowerOnToDefaultOrLastSource);
|
||||||
FusionRoom.SystemPowerOff.OutputSig.SetSigFalseAction(() => (Room as IEssentialsHuddleVtc1Room).RunRouteAction("roomOff", Room.SourceListKey));
|
FusionRoom.SystemPowerOff.OutputSig.SetSigFalseAction(() => (Room as EssentialsHuddleVtc1Room).RunRouteAction("roomOff", Room.SourceListKey));
|
||||||
|
|
||||||
|
|
||||||
CrestronEnvironment.EthernetEventHandler += CrestronEnvironment_EthernetEventHandler;
|
CrestronEnvironment.EthernetEventHandler += CrestronEnvironment_EthernetEventHandler;
|
||||||
@@ -187,7 +187,7 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
protected override void SetUpSources()
|
protected override void SetUpSources()
|
||||||
{
|
{
|
||||||
// Sources
|
// Sources
|
||||||
var dict = ConfigReader.ConfigObject.GetSourceListForKey((Room as IEssentialsHuddleVtc1Room).SourceListKey);
|
var dict = ConfigReader.ConfigObject.GetSourceListForKey((Room as EssentialsHuddleVtc1Room).SourceListKey);
|
||||||
if (dict != null)
|
if (dict != null)
|
||||||
{
|
{
|
||||||
// NEW PROCESS:
|
// NEW PROCESS:
|
||||||
@@ -238,7 +238,7 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.Console(1, this, "WARNING: Config source list '{0}' not found for room '{1}'",
|
Debug.Console(1, this, "WARNING: Config source list '{0}' not found for room '{1}'",
|
||||||
(Room as IEssentialsHuddleVtc1Room).SourceListKey, Room.Key);
|
(Room as EssentialsHuddleVtc1Room).SourceListKey, Room.Key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,7 +259,7 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
display.UsageTracker.DeviceUsageEnded += new EventHandler<DeviceUsageEventArgs>(UsageTracker_DeviceUsageEnded);
|
display.UsageTracker.DeviceUsageEnded += new EventHandler<DeviceUsageEventArgs>(UsageTracker_DeviceUsageEnded);
|
||||||
}
|
}
|
||||||
|
|
||||||
var defaultDisplay = (Room as IEssentialsHuddleVtc1Room).DefaultDisplay as DisplayBase;
|
var defaultDisplay = (Room as EssentialsHuddleVtc1Room).DefaultDisplay as DisplayBase;
|
||||||
if (defaultDisplay == null)
|
if (defaultDisplay == null)
|
||||||
{
|
{
|
||||||
Debug.Console(1, this, "Cannot link null display to Fusion because default display is null");
|
Debug.Console(1, this, "Cannot link null display to Fusion because default display is null");
|
||||||
@@ -332,7 +332,7 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
string displayName = string.Format("Display {0} - ", displayIndex);
|
string displayName = string.Format("Display {0} - ", displayIndex);
|
||||||
|
|
||||||
|
|
||||||
if (display == (Room as IEssentialsHuddleVtc1Room).DefaultDisplay)
|
if (display == (Room as EssentialsHuddleVtc1Room).DefaultDisplay)
|
||||||
{
|
{
|
||||||
// Power on
|
// Power on
|
||||||
var defaultDisplayPowerOn = FusionRoom.CreateOffsetBoolSig((uint)joinOffset, displayName + "Power On", eSigIoMask.InputOutputSig);
|
var defaultDisplayPowerOn = FusionRoom.CreateOffsetBoolSig((uint)joinOffset, displayName + "Power On", eSigIoMask.InputOutputSig);
|
||||||
@@ -351,7 +351,7 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
|
|
||||||
// Current Source
|
// Current Source
|
||||||
var defaultDisplaySourceNone = FusionRoom.CreateOffsetBoolSig((uint)joinOffset + 8, displayName + "Source None", eSigIoMask.InputOutputSig);
|
var defaultDisplaySourceNone = FusionRoom.CreateOffsetBoolSig((uint)joinOffset + 8, displayName + "Source None", eSigIoMask.InputOutputSig);
|
||||||
defaultDisplaySourceNone.OutputSig.UserObject = new Action<bool>(b => { if (!b) (Room as IEssentialsHuddleVtc1Room).RunRouteAction("roomOff", Room.SourceListKey); }); ;
|
defaultDisplaySourceNone.OutputSig.UserObject = new Action<bool>(b => { if (!b) (Room as EssentialsHuddleVtc1Room).RunRouteAction("roomOff", Room.SourceListKey); }); ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,21 +137,18 @@
|
|||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Room\Config\EssentialsDualDisplayRoomPropertiesConfig.cs" />
|
<Compile Include="Room\Config\EssentialsDualDisplayRoomPropertiesConfig.cs" />
|
||||||
<Compile Include="Room\Config\EssentialsNDisplayRoomPropertiesConfig.cs" />
|
<Compile Include="Room\Config\EssentialsNDisplayRoomPropertiesConfig.cs" />
|
||||||
<Compile Include="Room\Config\SimplRoomPropertiesConfig.cs" />
|
<Compile Include="Room\Config\DDVC01RoomPropertiesConfig.cs" />
|
||||||
<Compile Include="Room\Config\EssentialsPresentationPropertiesConfig.cs" />
|
<Compile Include="Room\Config\EssentialsPresentationPropertiesConfig.cs" />
|
||||||
<Compile Include="Room\Config\EssentialsHuddleRoomPropertiesConfig.cs" />
|
<Compile Include="Room\Config\EssentialsHuddleRoomPropertiesConfig.cs" />
|
||||||
<Compile Include="Room\Config\EssentialsHuddleVtc1PropertiesConfig.cs" />
|
<Compile Include="Room\Config\EssentialsHuddleVtc1PropertiesConfig.cs" />
|
||||||
<Compile Include="Room\Config\EssentialsRoomEmergencyConfig.cs" />
|
<Compile Include="Room\Config\EssentialsRoomEmergencyConfig.cs" />
|
||||||
<Compile Include="Room\Config\EssentialsTechRoomConfig.cs" />
|
<Compile Include="Room\Config\EssentialsTechRoomConfig.cs" />
|
||||||
<Compile Include="Room\Emergency\EsentialsRoomEmergencyContactClosure.cs" />
|
<Compile Include="Room\Emergency\EsentialsRoomEmergencyContactClosure.cs" />
|
||||||
<Compile Include="Room\Types\EssentialsCombinedHuddleVtc1Room.cs" />
|
|
||||||
<Compile Include="Room\Types\EssentialsDualDisplayRoom.cs" />
|
<Compile Include="Room\Types\EssentialsDualDisplayRoom.cs" />
|
||||||
<Compile Include="Room\Types\EssentialsHuddleVtc1Room.cs" />
|
<Compile Include="Room\Types\EssentialsHuddleVtc1Room.cs" />
|
||||||
<Compile Include="Room\Types\EssentialsNDisplayRoomBase.cs" />
|
<Compile Include="Room\Types\EssentialsNDisplayRoomBase.cs" />
|
||||||
<Compile Include="Room\Config\EssentialsRoomConfig.cs" />
|
<Compile Include="Room\Config\EssentialsRoomConfig.cs" />
|
||||||
<Compile Include="Room\Types\EssentialsTechRoom.cs" />
|
<Compile Include="Room\Types\EssentialsTechRoom.cs" />
|
||||||
<Compile Include="Room\Types\Interfaces\IEssentialsHuddleSpaceRoom.cs" />
|
|
||||||
<Compile Include="Room\Types\Interfaces\IEssentialsHuddleVtc1Room.cs" />
|
|
||||||
<Compile Include="UIDrivers\Environment Drivers\EssentialsEnvironmentDriver.cs" />
|
<Compile Include="UIDrivers\Environment Drivers\EssentialsEnvironmentDriver.cs" />
|
||||||
<Compile Include="UIDrivers\Environment Drivers\EssentialsLightingDriver.cs" />
|
<Compile Include="UIDrivers\Environment Drivers\EssentialsLightingDriver.cs" />
|
||||||
<Compile Include="UIDrivers\Environment Drivers\EssentialsShadeDriver.cs" />
|
<Compile Include="UIDrivers\Environment Drivers\EssentialsShadeDriver.cs" />
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<ControlSystem>
|
<ControlSystem>
|
||||||
<Name>Test RMC3</Name>
|
<Name>192.168.10.1</Name>
|
||||||
<Address>auto 192.168.1.40;username crestron</Address>
|
<Address>auto 192.168.10.1</Address>
|
||||||
<ProgramSlot>Program01</ProgramSlot>
|
<ProgramSlot>Program01</ProgramSlot>
|
||||||
<Storage>Internal Flash</Storage>
|
<Storage>Internal Flash</Storage>
|
||||||
</ControlSystem>
|
</ControlSystem>
|
||||||
@@ -8,19 +8,19 @@ using Newtonsoft.Json;
|
|||||||
|
|
||||||
namespace PepperDash.Essentials.Room.Config
|
namespace PepperDash.Essentials.Room.Config
|
||||||
{
|
{
|
||||||
public class SimplRoomPropertiesConfig : EssentialsHuddleVtc1PropertiesConfig
|
public class DDVC01RoomPropertiesConfig : EssentialsHuddleVtc1PropertiesConfig
|
||||||
{
|
{
|
||||||
[JsonProperty("roomPhoneNumber")]
|
[JsonProperty("roomPhoneNumber")]
|
||||||
public string RoomPhoneNumber { get; set; }
|
public string RoomPhoneNumber { get; set; }
|
||||||
[JsonProperty("roomURI")]
|
[JsonProperty("roomURI")]
|
||||||
public string RoomURI { get; set; }
|
public string RoomURI { get; set; }
|
||||||
[JsonProperty("speedDials")]
|
[JsonProperty("speedDials")]
|
||||||
public List<SimplSpeedDial> SpeedDials { get; set; }
|
public List<DDVC01SpeedDial> SpeedDials { get; set; }
|
||||||
[JsonProperty("volumeSliderNames")]
|
[JsonProperty("volumeSliderNames")]
|
||||||
public List<string> VolumeSliderNames { get; set; }
|
public List<string> VolumeSliderNames { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SimplSpeedDial
|
public class DDVC01SpeedDial
|
||||||
{
|
{
|
||||||
[JsonProperty("name")]
|
[JsonProperty("name")]
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
@@ -19,48 +19,35 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
/// Returns a room object from this config data
|
/// Returns a room object from this config data
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static IKeyed GetRoomObject(DeviceConfig roomConfig)
|
public static Device GetRoomObject(DeviceConfig roomConfig)
|
||||||
{
|
{
|
||||||
var typeName = roomConfig.Type.ToLower();
|
var typeName = roomConfig.Type.ToLower();
|
||||||
|
|
||||||
switch (typeName)
|
if (typeName == "huddle")
|
||||||
{
|
|
||||||
case "huddle" :
|
|
||||||
{
|
{
|
||||||
return new EssentialsHuddleSpaceRoom(roomConfig);
|
return new EssentialsHuddleSpaceRoom(roomConfig);
|
||||||
}
|
}
|
||||||
case "huddlevtc1" :
|
if (typeName == "huddlevtc1")
|
||||||
{
|
{
|
||||||
return new EssentialsHuddleVtc1Room(roomConfig);
|
return new EssentialsHuddleVtc1Room(roomConfig);
|
||||||
}
|
}
|
||||||
case "ddvc01bridge" :
|
if (typeName == "ddvc01bridge")
|
||||||
{
|
{
|
||||||
return new Device(roomConfig.Key, roomConfig.Name); // placeholder device that does nothing.
|
return new Device(roomConfig.Key, roomConfig.Name); // placeholder device that does nothing.
|
||||||
}
|
}
|
||||||
case "dualdisplay" :
|
if (typeName == "dualdisplay")
|
||||||
{
|
{
|
||||||
return new EssentialsDualDisplayRoom(roomConfig);
|
return new EssentialsDualDisplayRoom(roomConfig);
|
||||||
}
|
}
|
||||||
case "combinedhuddlevtc1" :
|
|
||||||
{
|
return typeName != "techroom" ? null : new EssentialsTechRoom(roomConfig);
|
||||||
return new EssentialsCombinedHuddleVtc1Room(roomConfig);
|
|
||||||
}
|
|
||||||
case "techroom" :
|
|
||||||
{
|
|
||||||
return new EssentialsTechRoom(roomConfig);
|
|
||||||
}
|
|
||||||
default :
|
|
||||||
{
|
|
||||||
return Core.DeviceFactory.GetDevice(roomConfig);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets and operating, standalone emergegncy object that can be plugged into a room.
|
/// Gets and operating, standalone emergegncy object that can be plugged into a room.
|
||||||
/// Returns null if there is no emergency defined
|
/// Returns null if there is no emergency defined
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static EssentialsRoomEmergencyBase GetEmergency(EssentialsRoomPropertiesConfig props, IEssentialsRoom room)
|
public static EssentialsRoomEmergencyBase GetEmergency(EssentialsRoomPropertiesConfig props, EssentialsRoomBase room)
|
||||||
{
|
{
|
||||||
// This emergency
|
// This emergency
|
||||||
var emergency = props.Emergency;
|
var emergency = props.Emergency;
|
||||||
@@ -109,7 +96,7 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
if (behaviour == "trackroomstate")
|
if (behaviour == "trackroomstate")
|
||||||
{
|
{
|
||||||
// Tie LED enable to room power state
|
// Tie LED enable to room power state
|
||||||
var essRoom = room as IEssentialsRoom;
|
var essRoom = room as EssentialsRoomBase;
|
||||||
essRoom.OnFeedback.OutputChange += (o, a) =>
|
essRoom.OnFeedback.OutputChange += (o, a) =>
|
||||||
{
|
{
|
||||||
if (essRoom.OnFeedback.BoolValue)
|
if (essRoom.OnFeedback.BoolValue)
|
||||||
@@ -160,24 +147,6 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
[JsonProperty("helpMessage")]
|
[JsonProperty("helpMessage")]
|
||||||
public string HelpMessage { get; set; }
|
public string HelpMessage { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Read this value to get the help message. It checks for the old and new config format.
|
|
||||||
/// </summary>
|
|
||||||
public string HelpMessageForDisplay
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if(Help != null && !string.IsNullOrEmpty(Help.Message))
|
|
||||||
{
|
|
||||||
return Help.Message;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return HelpMessage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[JsonProperty("environment")]
|
[JsonProperty("environment")]
|
||||||
public EssentialsEnvironmentPropertiesConfig Environment { get; set; }
|
public EssentialsEnvironmentPropertiesConfig Environment { get; set; }
|
||||||
|
|
||||||
@@ -211,18 +180,9 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
[JsonProperty("fusion")]
|
[JsonProperty("fusion")]
|
||||||
public EssentialsRoomFusionConfig Fusion { get; set; }
|
public EssentialsRoomFusionConfig Fusion { get; set; }
|
||||||
|
|
||||||
[JsonProperty("essentialsRoomUiBehaviorConfig", NullValueHandling=NullValueHandling.Ignore)]
|
|
||||||
public EssentialsRoomUiBehaviorConfig UiBehavior { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("zeroVolumeWhenSwtichingVolumeDevices")]
|
[JsonProperty("zeroVolumeWhenSwtichingVolumeDevices")]
|
||||||
public bool ZeroVolumeWhenSwtichingVolumeDevices { get; set; }
|
public bool ZeroVolumeWhenSwtichingVolumeDevices { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Indicates if this room represents a combination of other rooms
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("isRoomCombinationScenario")]
|
|
||||||
public bool IsRoomCombinationScenario { get; set; }
|
|
||||||
|
|
||||||
public EssentialsRoomPropertiesConfig()
|
public EssentialsRoomPropertiesConfig()
|
||||||
{
|
{
|
||||||
LogoLight = new EssentialsLogoPropertiesConfig();
|
LogoLight = new EssentialsLogoPropertiesConfig();
|
||||||
@@ -230,32 +190,15 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class EssentialsRoomUiBehaviorConfig
|
|
||||||
{
|
|
||||||
[JsonProperty("disableActivityButtonsWhileWarmingCooling")]
|
|
||||||
public bool DisableActivityButtonsWhileWarmingCooling { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class EssentialsAvRoomPropertiesConfig : EssentialsRoomPropertiesConfig
|
public class EssentialsAvRoomPropertiesConfig : EssentialsRoomPropertiesConfig
|
||||||
{
|
{
|
||||||
[JsonProperty("defaultAudioKey")]
|
[JsonProperty("defaultAudioKey")]
|
||||||
public string DefaultAudioKey { get; set; }
|
public string DefaultAudioKey { get; set; }
|
||||||
[JsonProperty("sourceListKey")]
|
[JsonProperty("sourceListKey")]
|
||||||
public string SourceListKey { get; set; }
|
public string SourceListKey { get; set; }
|
||||||
[JsonProperty("destinationListKey")]
|
|
||||||
public string DestinationListKey { get; set; }
|
|
||||||
[JsonProperty("defaultSourceItem")]
|
[JsonProperty("defaultSourceItem")]
|
||||||
public string DefaultSourceItem { get; set; }
|
public string DefaultSourceItem { get; set; }
|
||||||
/// <summary>
|
|
||||||
/// Indicates if the room supports advanced sharing
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("supportsAdvancedSharing")]
|
|
||||||
public bool SupportsAdvancedSharing { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// Indicates if non-tech users can change the share mode
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("userCanChangeShareMode")]
|
|
||||||
public bool UserCanChangeShareMode { get; set; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class EssentialsConferenceRoomPropertiesConfig : EssentialsAvRoomPropertiesConfig
|
public class EssentialsConferenceRoomPropertiesConfig : EssentialsAvRoomPropertiesConfig
|
||||||
|
|||||||
@@ -5,65 +5,30 @@ 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 { get; set; }
|
public List<string> Displays;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The keys of the tuners assinged to this room
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("tuners")]
|
[JsonProperty("tuners")]
|
||||||
public List<string> Tuners { get; set; }
|
public List<string> Tuners;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// PIN to access the room as a normal user
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("userPin")]
|
[JsonProperty("userPin")]
|
||||||
public string UserPin { get; set; }
|
public string UserPin;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// PIN to access the room as a tech user
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("techPin")]
|
[JsonProperty("techPin")]
|
||||||
public string TechPin { get; set; }
|
public string TechPin;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Name of the presets file. Path prefix is assumed to be /html/presets/lists/
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("presetsFileName")]
|
[JsonProperty("presetsFileName")]
|
||||||
public string PresetsFileName { get; set; }
|
public string PresetsFileName;
|
||||||
|
|
||||||
[JsonProperty("scheduledEvents")]
|
[JsonProperty("scheduledEvents")]
|
||||||
public List<ScheduledEventConfig> ScheduledEvents { get; set; }
|
public List<ScheduledEventConfig> ScheduledEvents;
|
||||||
|
|
||||||
/// <summary>
|
[JsonProperty("isPrimary")] public bool IsPrimary;
|
||||||
/// Indicates that the room is the primary when true
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("isPrimary")]
|
|
||||||
public bool IsPrimary { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
[JsonProperty("isTvPresetsProvider")] public bool IsTvPresetsProvider;
|
||||||
/// 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; }
|
|
||||||
|
|
||||||
[JsonProperty("helpMessage")]
|
|
||||||
public string HelpMessage { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Indicates the room
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("isTvPresetsProvider")]
|
|
||||||
public bool IsTvPresetsProvider;
|
|
||||||
|
|
||||||
public EssentialsTechRoomConfig()
|
public EssentialsTechRoomConfig()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,11 +17,11 @@ namespace PepperDash.Essentials.Room
|
|||||||
|
|
||||||
public class EssentialsRoomEmergencyContactClosure : EssentialsRoomEmergencyBase
|
public class EssentialsRoomEmergencyContactClosure : EssentialsRoomEmergencyBase
|
||||||
{
|
{
|
||||||
IEssentialsRoom Room;
|
EssentialsRoomBase Room;
|
||||||
string Behavior;
|
string Behavior;
|
||||||
bool TriggerOnClose;
|
bool TriggerOnClose;
|
||||||
|
|
||||||
public EssentialsRoomEmergencyContactClosure(string key, EssentialsRoomEmergencyConfig config, IEssentialsRoom room) :
|
public EssentialsRoomEmergencyContactClosure(string key, EssentialsRoomEmergencyConfig config, EssentialsRoomBase room) :
|
||||||
base(key)
|
base(key)
|
||||||
{
|
{
|
||||||
Room = room;
|
Room = room;
|
||||||
|
|||||||
@@ -1,821 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
using PepperDash.Essentials.Room.Config;
|
|
||||||
using PepperDash.Essentials.Devices.Common.Codec;
|
|
||||||
using PepperDash.Essentials.Devices.Common.VideoCodec;
|
|
||||||
using PepperDash.Essentials.Devices.Common.AudioCodec;
|
|
||||||
using PepperDash.Essentials.Core.DeviceTypeInterfaces;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials
|
|
||||||
{
|
|
||||||
public class EssentialsCombinedHuddleVtc1Room : EssentialsRoomBase, IEssentialsHuddleVtc1Room
|
|
||||||
{
|
|
||||||
private bool _codecExternalSourceChange;
|
|
||||||
public event EventHandler<VolumeDeviceChangeEventArgs> CurrentVolumeDeviceChange;
|
|
||||||
public event SourceInfoChangeHandler CurrentSourceChange;
|
|
||||||
|
|
||||||
|
|
||||||
//************************
|
|
||||||
// Call-related stuff
|
|
||||||
|
|
||||||
public BoolFeedback InCallFeedback { get; private set; }
|
|
||||||
|
|
||||||
///// <summary>
|
|
||||||
///// Make this more specific
|
|
||||||
///// </summary>
|
|
||||||
//public List<CodecActiveCallItem> ActiveCalls { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// States: 0 for on hook, 1 for video, 2 for audio, 3 for telekenesis
|
|
||||||
/// </summary>
|
|
||||||
public IntFeedback CallTypeFeedback { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public BoolFeedback PrivacyModeIsOnFeedback { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// When something in the room is sharing with the far end or through other means
|
|
||||||
/// </summary>
|
|
||||||
public BoolFeedback IsSharingFeedback { get; private set; }
|
|
||||||
|
|
||||||
//************************
|
|
||||||
|
|
||||||
protected override Func<bool> OnFeedbackFunc
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return () =>
|
|
||||||
{
|
|
||||||
|
|
||||||
var displays = Displays.OfType<DisplayBase>().ToList();
|
|
||||||
|
|
||||||
var val = CurrentSourceInfo != null
|
|
||||||
&& CurrentSourceInfo.Type == eSourceListItemType.Route
|
|
||||||
&& displays.Count > 0;
|
|
||||||
//&& disp.PowerIsOnFeedback.BoolValue;
|
|
||||||
return val;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
protected override Func<bool> IsWarmingFeedbackFunc
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return () => Displays.OfType<TwoWayDisplayBase>().Any((d) => d.IsWarmingUpFeedback.BoolValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
protected override Func<bool> IsCoolingFeedbackFunc
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return () => Displays.OfType<TwoWayDisplayBase>().Any((d) => d.IsCoolingDownFeedback.BoolValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public EssentialsHuddleVtc1PropertiesConfig PropertiesConfig { get; private set; }
|
|
||||||
|
|
||||||
private List<IRoutingSinkWithSwitching> Displays;
|
|
||||||
|
|
||||||
public IRoutingSinkWithSwitching DefaultDisplay { get; private set; }
|
|
||||||
|
|
||||||
public IBasicVolumeControls DefaultAudioDevice { get; private set; }
|
|
||||||
public IBasicVolumeControls DefaultVolumeControls { get; private set; }
|
|
||||||
|
|
||||||
public VideoCodecBase VideoCodec { get; private set; }
|
|
||||||
|
|
||||||
public AudioCodecBase AudioCodec { get; private set; }
|
|
||||||
|
|
||||||
public bool ExcludeFromGlobalFunctions { get; set; }
|
|
||||||
|
|
||||||
public string DefaultSourceItem { get; set; }
|
|
||||||
|
|
||||||
public ushort DefaultVolume { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// If room is off, enables power on to last source. Default true
|
|
||||||
/// </summary>
|
|
||||||
public bool EnablePowerOnToLastSource { get; set; }
|
|
||||||
string LastSourceKey;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the volume control device, and attaches/removes InUseTrackers with "audio"
|
|
||||||
/// tag to device.
|
|
||||||
/// </summary>
|
|
||||||
public IBasicVolumeControls CurrentVolumeControls
|
|
||||||
{
|
|
||||||
get { return _CurrentAudioDevice; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value == _CurrentAudioDevice) return;
|
|
||||||
|
|
||||||
var oldDev = _CurrentAudioDevice;
|
|
||||||
// derigister this room from the device, if it can
|
|
||||||
if (oldDev is IInUseTracking)
|
|
||||||
(oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio");
|
|
||||||
var handler = CurrentVolumeDeviceChange;
|
|
||||||
if (handler != null)
|
|
||||||
CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange));
|
|
||||||
_CurrentAudioDevice = value;
|
|
||||||
if (handler != null)
|
|
||||||
CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange));
|
|
||||||
// register this room with new device, if it can
|
|
||||||
if (_CurrentAudioDevice is IInUseTracking)
|
|
||||||
(_CurrentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
IBasicVolumeControls _CurrentAudioDevice;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The SourceListItem last run - containing names and icons
|
|
||||||
/// </summary>
|
|
||||||
public SourceListItem CurrentSourceInfo
|
|
||||||
{
|
|
||||||
get { return _CurrentSourceInfo; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value == _CurrentSourceInfo) return;
|
|
||||||
|
|
||||||
var handler = CurrentSourceChange;
|
|
||||||
// remove from in-use tracker, if so equipped
|
|
||||||
if (_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking)
|
|
||||||
(_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.RemoveUser(this, "control");
|
|
||||||
|
|
||||||
if (handler != null)
|
|
||||||
handler(_CurrentSourceInfo, ChangeType.WillChange);
|
|
||||||
|
|
||||||
_CurrentSourceInfo = value;
|
|
||||||
|
|
||||||
// add to in-use tracking
|
|
||||||
if (_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking)
|
|
||||||
(_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.AddUser(this, "control");
|
|
||||||
if (handler != null)
|
|
||||||
handler(_CurrentSourceInfo, ChangeType.DidChange);
|
|
||||||
|
|
||||||
var vc = VideoCodec as IHasExternalSourceSwitching;
|
|
||||||
if (vc != null && !_codecExternalSourceChange)
|
|
||||||
{
|
|
||||||
vc.SetSelectedSource(CurrentSourceInfoKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
_codecExternalSourceChange = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SourceListItem _CurrentSourceInfo;
|
|
||||||
|
|
||||||
public string CurrentSourceInfoKey { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// "codecOsd"
|
|
||||||
/// </summary>
|
|
||||||
public string DefaultCodecRouteString { get { return "codecOsd"; } }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Temporary implementation. Returns the schedule-ready object or null if none. Fow now,
|
|
||||||
/// always returns the VideoCodec if it is capable
|
|
||||||
/// </summary>
|
|
||||||
public IHasScheduleAwareness ScheduleSource { get { return VideoCodec as IHasScheduleAwareness; } }
|
|
||||||
|
|
||||||
CCriticalSection SourceSelectLock = new CCriticalSection();
|
|
||||||
|
|
||||||
public EssentialsCombinedHuddleVtc1Room(DeviceConfig config)
|
|
||||||
: base(config)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
PropertiesConfig = JsonConvert.DeserializeObject<EssentialsHuddleVtc1PropertiesConfig>
|
|
||||||
(config.Properties.ToString());
|
|
||||||
|
|
||||||
VideoCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.VideoCodecKey) as
|
|
||||||
PepperDash.Essentials.Devices.Common.VideoCodec.VideoCodecBase;
|
|
||||||
|
|
||||||
|
|
||||||
if (VideoCodec == null)
|
|
||||||
throw new ArgumentNullException("codec cannot be null");
|
|
||||||
|
|
||||||
AudioCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.AudioCodecKey) as
|
|
||||||
PepperDash.Essentials.Devices.Common.AudioCodec.AudioCodecBase;
|
|
||||||
if (AudioCodec == null)
|
|
||||||
Debug.Console(0, this, "No Audio Codec Found");
|
|
||||||
|
|
||||||
DefaultAudioDevice = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultAudioKey) as IBasicVolumeControls;
|
|
||||||
|
|
||||||
Displays = new List<IRoutingSinkWithSwitching>();
|
|
||||||
|
|
||||||
Initialize();
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Error building room: \n{0}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Initialize()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (DefaultAudioDevice is IBasicVolumeControls)
|
|
||||||
DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls;
|
|
||||||
else if (DefaultAudioDevice is IHasVolumeDevice)
|
|
||||||
DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice;
|
|
||||||
CurrentVolumeControls = DefaultVolumeControls;
|
|
||||||
|
|
||||||
|
|
||||||
// Combines call feedback from both codecs if available
|
|
||||||
InCallFeedback = new BoolFeedback(() =>
|
|
||||||
{
|
|
||||||
bool inAudioCall = false;
|
|
||||||
bool inVideoCall = false;
|
|
||||||
|
|
||||||
if (AudioCodec != null)
|
|
||||||
inAudioCall = AudioCodec.IsInCall;
|
|
||||||
|
|
||||||
if (VideoCodec != null)
|
|
||||||
inVideoCall = VideoCodec.IsInCall;
|
|
||||||
|
|
||||||
if (inAudioCall || inVideoCall)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
SetupDisplays();
|
|
||||||
|
|
||||||
// Get Microphone Privacy object, if any MUST HAPPEN AFTER setting InCallFeedback
|
|
||||||
this.MicrophonePrivacy = EssentialsRoomConfigHelper.GetMicrophonePrivacy(PropertiesConfig, this);
|
|
||||||
|
|
||||||
Debug.Console(2, this, "Microphone Privacy Config evaluated.");
|
|
||||||
|
|
||||||
// Get emergency object, if any
|
|
||||||
this.Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this);
|
|
||||||
|
|
||||||
Debug.Console(2, this, "Emergency Config evaluated.");
|
|
||||||
|
|
||||||
|
|
||||||
VideoCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
|
|
||||||
VideoCodec.IsReadyChange += (o, a) => { this.SetCodecExternalSources(); SetCodecBranding(); };
|
|
||||||
|
|
||||||
if (AudioCodec != null)
|
|
||||||
AudioCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
|
|
||||||
|
|
||||||
IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue);
|
|
||||||
VideoCodec.SharingContentIsOnFeedback.OutputChange += (o, a) => this.IsSharingFeedback.FireUpdate();
|
|
||||||
|
|
||||||
// link privacy to VC (for now?)
|
|
||||||
PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue);
|
|
||||||
VideoCodec.PrivacyModeIsOnFeedback.OutputChange += (o, a) => this.PrivacyModeIsOnFeedback.FireUpdate();
|
|
||||||
|
|
||||||
CallTypeFeedback = new IntFeedback(() => 0);
|
|
||||||
|
|
||||||
SetSourceListKey();
|
|
||||||
|
|
||||||
EnablePowerOnToLastSource = true;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Error Initializing Room: {0}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetupDisplays()
|
|
||||||
{
|
|
||||||
//DefaultDisplay = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultDisplayKey) as IRoutingSinkWithSwitching;
|
|
||||||
|
|
||||||
var destinationList = ConfigReader.ConfigObject.DestinationLists[PropertiesConfig.DestinationListKey];
|
|
||||||
|
|
||||||
foreach (var destination in destinationList)
|
|
||||||
{
|
|
||||||
var dest = destination.Value.SinkDevice as IRoutingSinkWithSwitching;
|
|
||||||
|
|
||||||
if (dest != null)
|
|
||||||
{
|
|
||||||
Displays.Add(dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
var display = dest as DisplayBase;
|
|
||||||
if (display != null)
|
|
||||||
{
|
|
||||||
// Link power, warming, cooling to display
|
|
||||||
var dispTwoWay = display as IHasPowerControlWithFeedback;
|
|
||||||
if (dispTwoWay != null)
|
|
||||||
{
|
|
||||||
dispTwoWay.PowerIsOnFeedback.OutputChange += (o, a) =>
|
|
||||||
{
|
|
||||||
if (dispTwoWay.PowerIsOnFeedback.BoolValue != OnFeedback.BoolValue)
|
|
||||||
{
|
|
||||||
//if (!dispTwoWay.PowerIsOnFeedback.BoolValue)
|
|
||||||
// CurrentSourceInfo = null;
|
|
||||||
OnFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
if (dispTwoWay.PowerIsOnFeedback.BoolValue)
|
|
||||||
{
|
|
||||||
SetDefaultLevels();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
display.IsWarmingUpFeedback.OutputChange += (o, a) =>
|
|
||||||
{
|
|
||||||
IsWarmingUpFeedback.FireUpdate();
|
|
||||||
if (!IsWarmingUpFeedback.BoolValue)
|
|
||||||
(CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume);
|
|
||||||
};
|
|
||||||
display.IsCoolingDownFeedback.OutputChange += (o, a) =>
|
|
||||||
{
|
|
||||||
IsCoolingDownFeedback.FireUpdate();
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetSourceListKey()
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrEmpty(PropertiesConfig.SourceListKey))
|
|
||||||
{
|
|
||||||
SetSourceListKey(PropertiesConfig.SourceListKey);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetSourceListKey(Key);
|
|
||||||
}
|
|
||||||
|
|
||||||
SetCodecExternalSources();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void CustomSetConfig(DeviceConfig config)
|
|
||||||
{
|
|
||||||
var newPropertiesConfig = JsonConvert.DeserializeObject<EssentialsHuddleVtc1PropertiesConfig>(config.Properties.ToString());
|
|
||||||
|
|
||||||
if (newPropertiesConfig != null)
|
|
||||||
PropertiesConfig = newPropertiesConfig;
|
|
||||||
|
|
||||||
ConfigWriter.UpdateRoomConfig(config);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CustomActivate()
|
|
||||||
{
|
|
||||||
// Add Occupancy object from config
|
|
||||||
if (PropertiesConfig.Occupancy != null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Setting Occupancy Provider for room");
|
|
||||||
this.SetRoomOccupancy(DeviceManager.GetDeviceForKey(PropertiesConfig.Occupancy.DeviceKey) as
|
|
||||||
IOccupancyStatusProvider, PropertiesConfig.Occupancy.TimeoutMinutes);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.LogoUrlLightBkgnd = PropertiesConfig.LogoLight.GetLogoUrlLight();
|
|
||||||
this.LogoUrlDarkBkgnd = PropertiesConfig.LogoDark.GetLogoUrlDark();
|
|
||||||
|
|
||||||
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
|
|
||||||
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
|
|
||||||
|
|
||||||
return base.CustomActivate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
protected override void EndShutdown()
|
|
||||||
{
|
|
||||||
VideoCodec.EndAllCalls();
|
|
||||||
|
|
||||||
SetDefaultLevels();
|
|
||||||
|
|
||||||
RunDefaultPresentRoute();
|
|
||||||
|
|
||||||
CrestronEnvironment.Sleep(1000);
|
|
||||||
|
|
||||||
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Shutting down room");
|
|
||||||
|
|
||||||
RunRouteAction("roomOff");
|
|
||||||
VideoCodec.StopSharing();
|
|
||||||
VideoCodec.StandbyActivate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Routes the default source item, if any. Returns true when default route exists
|
|
||||||
/// </summary>
|
|
||||||
public override bool RunDefaultPresentRoute()
|
|
||||||
{
|
|
||||||
if (DefaultSourceItem != null)
|
|
||||||
RunRouteAction(DefaultSourceItem);
|
|
||||||
|
|
||||||
return DefaultSourceItem != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets up the room when started into call mode without presenting a source
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public bool RunDefaultCallRoute()
|
|
||||||
{
|
|
||||||
RunRouteAction(DefaultCodecRouteString);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RunRouteActionCodec(string routeKey, string sourceListKey)
|
|
||||||
{
|
|
||||||
_codecExternalSourceChange = true;
|
|
||||||
RunRouteAction(routeKey, sourceListKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="routeKey"></param>
|
|
||||||
public void RunRouteAction(string routeKey)
|
|
||||||
{
|
|
||||||
RunRouteAction(routeKey, new Action(() => { }));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="routeKey"></param>
|
|
||||||
/// <param name="souceListKey"></param>
|
|
||||||
/// <param name="successCallback"></param>
|
|
||||||
public void RunRouteAction(string routeKey, string sourceListKey)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(sourceListKey))
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "No sourceListKey present. RunRouteAction assumes default source list.");
|
|
||||||
RunRouteAction(routeKey, new Action(() => { }));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "sourceListKey present but not yet implemented");
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="routeKey"></param>
|
|
||||||
/// <param name="souceListKey"></param>
|
|
||||||
/// <param name="successCallback"></param>
|
|
||||||
public void RunRouteAction(string routeKey, string sourceListKey, Action successCallback)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(sourceListKey))
|
|
||||||
{
|
|
||||||
RunRouteAction(routeKey, successCallback);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets a source from config list SourceListKey and dynamically build and executes the
|
|
||||||
/// route or commands
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name"></param>
|
|
||||||
public void RunRouteAction(string routeKey, Action successCallback)
|
|
||||||
{
|
|
||||||
// Run this on a separate thread
|
|
||||||
new CTimer(o =>
|
|
||||||
{
|
|
||||||
// try to prevent multiple simultaneous selections
|
|
||||||
SourceSelectLock.TryEnter();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
|
|
||||||
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Run route action '{0}'", routeKey);
|
|
||||||
var dict = ConfigReader.ConfigObject.GetSourceListForKey(SourceListKey);
|
|
||||||
if (dict == null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "WARNING: Config source list '{0}' not found", SourceListKey);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to get the list item by it's string key
|
|
||||||
if (!dict.ContainsKey(routeKey))
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "WARNING: No item '{0}' found on config list '{1}'",
|
|
||||||
routeKey, SourceListKey);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// End usage timer on last source
|
|
||||||
if (!string.IsNullOrEmpty(LastSourceKey))
|
|
||||||
{
|
|
||||||
var usageLastSource = dict[LastSourceKey].SourceDevice as IUsageTracking;
|
|
||||||
if (usageLastSource != null && usageLastSource.UsageTracker != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// There MAY have been failures in here. Protect
|
|
||||||
usageLastSource.UsageTracker.EndDeviceUsage();
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "*#* EXCEPTION in end usage tracking:\r{0}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let's run it
|
|
||||||
var item = dict[routeKey];
|
|
||||||
if (routeKey.ToLower() != "roomoff")
|
|
||||||
{
|
|
||||||
|
|
||||||
LastSourceKey = routeKey;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
CurrentSourceInfoKey = null;
|
|
||||||
|
|
||||||
// hand off the individual routes to this helper
|
|
||||||
foreach (var route in item.RouteList)
|
|
||||||
DoRouteItem(route);
|
|
||||||
|
|
||||||
// Start usage timer on routed source
|
|
||||||
var usageNewSource = item.SourceDevice as IUsageTracking;
|
|
||||||
if (usageNewSource != null && usageNewSource.UsageTracker != null) // Have to make sure there is a usage tracker!
|
|
||||||
{
|
|
||||||
(item.SourceDevice as IUsageTracking).UsageTracker.StartDeviceUsage();
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if this can be moved into common, base-class method -------------
|
|
||||||
|
|
||||||
|
|
||||||
// Set volume control, using default if non provided
|
|
||||||
IBasicVolumeControls volDev = null;
|
|
||||||
// Handle special cases for volume control
|
|
||||||
if (string.IsNullOrEmpty(item.VolumeControlKey)
|
|
||||||
|| item.VolumeControlKey.Equals("$defaultAudio", StringComparison.OrdinalIgnoreCase))
|
|
||||||
volDev = DefaultVolumeControls;
|
|
||||||
//else if (item.VolumeControlKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase))
|
|
||||||
// volDev = DefaultDisplay as IBasicVolumeControls;
|
|
||||||
// Or a specific device, probably rarely used.
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var dev = DeviceManager.GetDeviceForKey(item.VolumeControlKey);
|
|
||||||
if (dev is IBasicVolumeControls)
|
|
||||||
volDev = dev as IBasicVolumeControls;
|
|
||||||
else if (dev is IHasVolumeDevice)
|
|
||||||
volDev = (dev as IHasVolumeDevice).VolumeDevice;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (volDev != CurrentVolumeControls)
|
|
||||||
{
|
|
||||||
// zero the volume on the device we are leaving.
|
|
||||||
// Set the volume to default on device we are entering
|
|
||||||
if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback)
|
|
||||||
{
|
|
||||||
var vd = CurrentVolumeControls as IBasicVolumeWithFeedback;
|
|
||||||
SavedVolumeLevels[vd] = (uint)vd.VolumeLevelFeedback.IntValue;
|
|
||||||
vd.SetVolume(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
CurrentVolumeControls = volDev;
|
|
||||||
if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback)
|
|
||||||
{
|
|
||||||
var vd = CurrentVolumeControls as IBasicVolumeWithFeedback;
|
|
||||||
ushort vol = (SavedVolumeLevels.ContainsKey(vd) ? (ushort)SavedVolumeLevels[vd] : DefaultVolume);
|
|
||||||
vd.SetVolume(vol);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// -----------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// store the name and UI info for routes
|
|
||||||
if (item.SourceKey == "$off")
|
|
||||||
{
|
|
||||||
CurrentSourceInfoKey = routeKey;
|
|
||||||
CurrentSourceInfo = null;
|
|
||||||
}
|
|
||||||
else if (item.SourceKey != null)
|
|
||||||
{
|
|
||||||
CurrentSourceInfoKey = routeKey;
|
|
||||||
CurrentSourceInfo = item;
|
|
||||||
}
|
|
||||||
|
|
||||||
OnFeedback.FireUpdate();
|
|
||||||
|
|
||||||
if (OnFeedback.BoolValue)
|
|
||||||
{
|
|
||||||
if (VideoCodec.UsageTracker.InUseTracker.InUseFeedback.BoolValue)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Video Codec in use, deactivating standby on codec");
|
|
||||||
VideoCodec.StandbyDeactivate();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (VideoCodec.StandbyIsOnFeedback.BoolValue)
|
|
||||||
{
|
|
||||||
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
|
|
||||||
if (successCallback != null)
|
|
||||||
successCallback();
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "ERROR in routing: {0}", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
SourceSelectLock.Leave();
|
|
||||||
}, 0); // end of CTimer
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="route"></param>
|
|
||||||
void DoRouteItem(SourceRouteListItem route)
|
|
||||||
{
|
|
||||||
// if there is a $defaultAll on route, run two separate
|
|
||||||
if (route.DestinationKey.Equals("$defaultAll", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
foreach (var display in Displays)
|
|
||||||
{
|
|
||||||
var tempVideo = new SourceRouteListItem
|
|
||||||
{
|
|
||||||
DestinationKey = display.Key,
|
|
||||||
SourceKey = route.SourceKey,
|
|
||||||
Type = eRoutingSignalType.Video
|
|
||||||
};
|
|
||||||
DoRoute(tempVideo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
DoRoute(route);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="route"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
bool DoRoute(SourceRouteListItem route)
|
|
||||||
{
|
|
||||||
IRoutingSink dest = null;
|
|
||||||
|
|
||||||
if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase))
|
|
||||||
dest = DefaultAudioDevice as IRoutingSink;
|
|
||||||
//else if (route.DestinationKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase))
|
|
||||||
// dest = DefaultDisplay;
|
|
||||||
else
|
|
||||||
dest = DeviceManager.GetDeviceForKey(route.DestinationKey) as IRoutingSink;
|
|
||||||
|
|
||||||
if (dest == null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Cannot route, unknown destination '{0}'", route.DestinationKey);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (route.SourceKey.Equals("$off", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
dest.ReleaseRoute();
|
|
||||||
if (dest is IHasPowerControl)
|
|
||||||
(dest as IHasPowerControl).PowerOff();
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var source = DeviceManager.GetDeviceForKey(route.SourceKey) as IRoutingOutputs;
|
|
||||||
if (source == null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Cannot route unknown source '{0}' to {1}", route.SourceKey, route.DestinationKey);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
dest.ReleaseAndMakeRoute(source, route.Type);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void RoomVacatedForTimeoutPeriod(object o)
|
|
||||||
{
|
|
||||||
//Implement this
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Does what it says
|
|
||||||
/// </summary>
|
|
||||||
public override void SetDefaultLevels()
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Restoring default levels");
|
|
||||||
var vc = CurrentVolumeControls as IBasicVolumeWithFeedback;
|
|
||||||
if (vc != null)
|
|
||||||
vc.SetVolume(DefaultVolume);
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Will power the room on with the last-used source
|
|
||||||
/// </summary>
|
|
||||||
public override void PowerOnToDefaultOrLastSource()
|
|
||||||
{
|
|
||||||
if (!EnablePowerOnToLastSource || LastSourceKey == null)
|
|
||||||
return;
|
|
||||||
RunRouteAction(LastSourceKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Runs "roomOff" action on all rooms not set to ExcludeFromGlobalFunctions
|
|
||||||
/// </summary>
|
|
||||||
public static void AllRoomsOff()
|
|
||||||
{
|
|
||||||
var allRooms = DeviceManager.AllDevices.Where(d =>
|
|
||||||
d is IEssentialsRoom && !(d as IEssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions);
|
|
||||||
foreach (var room in allRooms)
|
|
||||||
(room as IEssentialsHuddleSpaceRoom).RunRouteAction("roomOff");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Setup the external sources for the Cisco Touch 10 devices that support IHasExternalSourceSwitch
|
|
||||||
/// </summary>
|
|
||||||
private void SetCodecExternalSources()
|
|
||||||
{
|
|
||||||
var videoCodecWithExternalSwitching = VideoCodec as IHasExternalSourceSwitching;
|
|
||||||
|
|
||||||
if (videoCodecWithExternalSwitching == null || !videoCodecWithExternalSwitching.ExternalSourceListEnabled)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// Get the tie line that the external switcher is connected to
|
|
||||||
string codecInputConnectorName = ConfigReader.ConfigObject.TieLines.SingleOrDefault(
|
|
||||||
x => x.DestinationKey == VideoCodec.Key && x.DestinationPort == videoCodecWithExternalSwitching.ExternalSourceInputPort).DestinationPort;
|
|
||||||
|
|
||||||
videoCodecWithExternalSwitching.ClearExternalSources();
|
|
||||||
videoCodecWithExternalSwitching.RunRouteAction = RunRouteActionCodec;
|
|
||||||
var srcList = ConfigReader.ConfigObject.SourceLists.SingleOrDefault(x => x.Key == SourceListKey).Value.OrderBy(kv => kv.Value.Order); ;
|
|
||||||
|
|
||||||
foreach (var kvp in srcList)
|
|
||||||
{
|
|
||||||
var srcConfig = kvp.Value;
|
|
||||||
|
|
||||||
if (kvp.Key != DefaultCodecRouteString && kvp.Key != "roomOff")
|
|
||||||
{
|
|
||||||
videoCodecWithExternalSwitching.AddExternalSource(codecInputConnectorName, kvp.Key, srcConfig.PreferredName, PepperDash.Essentials.Devices.Common.VideoCodec.Cisco.eExternalSourceType.desktop);
|
|
||||||
videoCodecWithExternalSwitching.SetExternalSourceState(kvp.Key, PepperDash.Essentials.Devices.Common.VideoCodec.Cisco.eExternalSourceMode.Ready);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "Error setting codec external sources: {0}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetCodecBranding()
|
|
||||||
{
|
|
||||||
var vcWithBranding = VideoCodec as IHasBranding;
|
|
||||||
|
|
||||||
if (vcWithBranding == null) return;
|
|
||||||
|
|
||||||
Debug.Console(1, this, "Setting Codec Branding");
|
|
||||||
vcWithBranding.InitializeBranding(Key);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IPrivacy Members
|
|
||||||
|
|
||||||
|
|
||||||
public void PrivacyModeOff()
|
|
||||||
{
|
|
||||||
VideoCodec.PrivacyModeOff();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void PrivacyModeOn()
|
|
||||||
{
|
|
||||||
VideoCodec.PrivacyModeOn();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void PrivacyModeToggle()
|
|
||||||
{
|
|
||||||
VideoCodec.PrivacyModeToggle();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -207,7 +207,7 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
DefaultAudioDevice = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultAudioKey) as IBasicVolumeControls;
|
DefaultAudioDevice = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultAudioKey) as IBasicVolumeControls;
|
||||||
|
|
||||||
InitializeRoom();
|
Initialize();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -215,7 +215,7 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitializeRoom()
|
void Initialize()
|
||||||
{
|
{
|
||||||
if (DefaultAudioDevice is IBasicVolumeControls)
|
if (DefaultAudioDevice is IBasicVolumeControls)
|
||||||
DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls;
|
DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls;
|
||||||
@@ -645,9 +645,9 @@ namespace PepperDash.Essentials
|
|||||||
public static void AllRoomsOff()
|
public static void AllRoomsOff()
|
||||||
{
|
{
|
||||||
var allRooms = DeviceManager.AllDevices.Where(d =>
|
var allRooms = DeviceManager.AllDevices.Where(d =>
|
||||||
d is IEssentialsHuddleSpaceRoom && !(d as IEssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions);
|
d is EssentialsHuddleSpaceRoom && !(d as EssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions);
|
||||||
foreach (var room in allRooms)
|
foreach (var room in allRooms)
|
||||||
(room as IEssentialsHuddleSpaceRoom).RunRouteAction("roomOff", (room as IEssentialsHuddleSpaceRoom).SourceListKey);
|
(room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff", (room as EssentialsHuddleSpaceRoom).SourceListKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IPrivacy Members
|
#region IPrivacy Members
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using PepperDash.Essentials.Room.Config;
|
|||||||
|
|
||||||
namespace PepperDash.Essentials
|
namespace PepperDash.Essentials
|
||||||
{
|
{
|
||||||
public class EssentialsHuddleSpaceRoom : EssentialsRoomBase, IEssentialsHuddleSpaceRoom
|
public class EssentialsHuddleSpaceRoom : EssentialsRoomBase, IHasCurrentSourceInfoChange, IRunRouteAction, IRunDefaultPresentRoute, IHasCurrentVolumeControls, IHasDefaultDisplay
|
||||||
{
|
{
|
||||||
public event EventHandler<VolumeDeviceChangeEventArgs> CurrentVolumeDeviceChange;
|
public event EventHandler<VolumeDeviceChangeEventArgs> CurrentVolumeDeviceChange;
|
||||||
public event SourceInfoChangeHandler CurrentSourceChange;
|
public event SourceInfoChangeHandler CurrentSourceChange;
|
||||||
@@ -156,7 +156,7 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
DefaultAudioDevice = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultAudioKey) as IRoutingSinkWithSwitching;
|
DefaultAudioDevice = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultAudioKey) as IRoutingSinkWithSwitching;
|
||||||
|
|
||||||
InitializeRoom();
|
Initialize();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -164,7 +164,7 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitializeRoom()
|
void Initialize()
|
||||||
{
|
{
|
||||||
if (DefaultAudioDevice is IBasicVolumeControls)
|
if (DefaultAudioDevice is IBasicVolumeControls)
|
||||||
DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls;
|
DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls;
|
||||||
@@ -202,28 +202,11 @@ namespace PepperDash.Essentials
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
SetupEnvironmentalControlDevices();
|
|
||||||
|
|
||||||
SetSourceListKey();
|
SetSourceListKey();
|
||||||
|
|
||||||
EnablePowerOnToLastSource = true;
|
EnablePowerOnToLastSource = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetupEnvironmentalControlDevices()
|
|
||||||
{
|
|
||||||
if (PropertiesConfig.Environment != null)
|
|
||||||
{
|
|
||||||
if (PropertiesConfig.Environment.Enabled)
|
|
||||||
{
|
|
||||||
foreach (var d in PropertiesConfig.Environment.DeviceKeys)
|
|
||||||
{
|
|
||||||
var envDevice = DeviceManager.GetDeviceForKey(d) as EssentialsDevice;
|
|
||||||
EnvironmentalControlDevices.Add(envDevice);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetSourceListKey()
|
private void SetSourceListKey()
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(PropertiesConfig.SourceListKey))
|
if (!string.IsNullOrEmpty(PropertiesConfig.SourceListKey))
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ using PepperDash.Essentials.Core.DeviceTypeInterfaces;
|
|||||||
|
|
||||||
namespace PepperDash.Essentials
|
namespace PepperDash.Essentials
|
||||||
{
|
{
|
||||||
public class EssentialsHuddleVtc1Room : EssentialsRoomBase, IEssentialsHuddleVtc1Room
|
public class EssentialsHuddleVtc1Room : EssentialsRoomBase, IHasCurrentSourceInfoChange,
|
||||||
|
IPrivacy, IHasCurrentVolumeControls, IRunRouteAction, IRunDefaultCallRoute, IHasVideoCodec, IHasAudioCodec, IHasDefaultDisplay, IHasInCallFeedback
|
||||||
{
|
{
|
||||||
private bool _codecExternalSourceChange;
|
|
||||||
public event EventHandler<VolumeDeviceChangeEventArgs> CurrentVolumeDeviceChange;
|
public event EventHandler<VolumeDeviceChangeEventArgs> CurrentVolumeDeviceChange;
|
||||||
public event SourceInfoChangeHandler CurrentSourceChange;
|
public event SourceInfoChangeHandler CurrentSourceChange;
|
||||||
|
|
||||||
@@ -178,12 +178,10 @@ namespace PepperDash.Essentials
|
|||||||
handler(_CurrentSourceInfo, ChangeType.DidChange);
|
handler(_CurrentSourceInfo, ChangeType.DidChange);
|
||||||
|
|
||||||
var vc = VideoCodec as IHasExternalSourceSwitching;
|
var vc = VideoCodec as IHasExternalSourceSwitching;
|
||||||
if (vc != null && !_codecExternalSourceChange)
|
if (vc != null)
|
||||||
{
|
{
|
||||||
vc.SetSelectedSource(CurrentSourceInfoKey);
|
vc.SetSelectedSource(CurrentSourceInfoKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
_codecExternalSourceChange = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SourceListItem _CurrentSourceInfo;
|
SourceListItem _CurrentSourceInfo;
|
||||||
@@ -210,17 +208,14 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
PropertiesConfig = JsonConvert.DeserializeObject<EssentialsHuddleVtc1PropertiesConfig>
|
PropertiesConfig = JsonConvert.DeserializeObject<EssentialsHuddleVtc1PropertiesConfig>
|
||||||
(config.Properties.ToString());
|
(config.Properties.ToString());
|
||||||
DefaultDisplay = DeviceManager.GetDeviceForKey((PropertiesConfig as EssentialsHuddleVtc1PropertiesConfig).DefaultDisplayKey) as IRoutingSinkWithSwitching;
|
DefaultDisplay = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultDisplayKey) as IRoutingSinkWithSwitching;
|
||||||
|
|
||||||
VideoCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.VideoCodecKey) as
|
VideoCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.VideoCodecKey) as
|
||||||
PepperDash.Essentials.Devices.Common.VideoCodec.VideoCodecBase;
|
PepperDash.Essentials.Devices.Common.VideoCodec.VideoCodecBase;
|
||||||
|
|
||||||
|
|
||||||
if (VideoCodec == null)
|
if (VideoCodec == null)
|
||||||
{
|
throw new ArgumentNullException("codec cannot be null");
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Error, "No Video Codec set. Please check 'videoCodecKey' property in room config");
|
|
||||||
throw new ArgumentNullException("VideoCodec cannot be null");
|
|
||||||
}
|
|
||||||
|
|
||||||
AudioCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.AudioCodecKey) as
|
AudioCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.AudioCodecKey) as
|
||||||
PepperDash.Essentials.Devices.Common.AudioCodec.AudioCodecBase;
|
PepperDash.Essentials.Devices.Common.AudioCodec.AudioCodecBase;
|
||||||
@@ -228,13 +223,8 @@ namespace PepperDash.Essentials
|
|||||||
Debug.Console(0, this, "No Audio Codec Found");
|
Debug.Console(0, this, "No Audio Codec Found");
|
||||||
|
|
||||||
DefaultAudioDevice = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultAudioKey) as IBasicVolumeControls;
|
DefaultAudioDevice = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultAudioKey) as IBasicVolumeControls;
|
||||||
if (DefaultAudioDevice == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Error, "No Default Audio Device set. Please check 'defaultAudioKey' property in room config");
|
|
||||||
throw new ArgumentNullException("DefaultAudioDevice cannot be null");
|
|
||||||
}
|
|
||||||
|
|
||||||
InitializeRoom();
|
Initialize();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -242,7 +232,7 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitializeRoom()
|
void Initialize()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -334,8 +324,6 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
CallTypeFeedback = new IntFeedback(() => 0);
|
CallTypeFeedback = new IntFeedback(() => 0);
|
||||||
|
|
||||||
SetupEnvironmentalControlDevices();
|
|
||||||
|
|
||||||
SetSourceListKey();
|
SetSourceListKey();
|
||||||
|
|
||||||
EnablePowerOnToLastSource = true;
|
EnablePowerOnToLastSource = true;
|
||||||
@@ -346,21 +334,6 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetupEnvironmentalControlDevices()
|
|
||||||
{
|
|
||||||
if (PropertiesConfig.Environment != null)
|
|
||||||
{
|
|
||||||
if (PropertiesConfig.Environment.Enabled)
|
|
||||||
{
|
|
||||||
foreach (var d in PropertiesConfig.Environment.DeviceKeys)
|
|
||||||
{
|
|
||||||
var envDevice = DeviceManager.GetDeviceForKey(d) as EssentialsDevice;
|
|
||||||
EnvironmentalControlDevices.Add(envDevice);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void SetSourceListKey()
|
private void SetSourceListKey()
|
||||||
{
|
{
|
||||||
@@ -444,24 +417,10 @@ namespace PepperDash.Essentials
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public bool RunDefaultCallRoute()
|
public bool RunDefaultCallRoute()
|
||||||
{
|
{
|
||||||
Debug.Console(2, this, "RunDefaultCallRoute() Currently Sharing Content: {0}", VideoCodec.SharingContentIsOnFeedback.BoolValue);
|
|
||||||
|
|
||||||
if (VideoCodec.SharingContentIsOnFeedback.BoolValue)
|
|
||||||
{
|
|
||||||
Debug.Console(2, this, "Currently sharing content. Ignoring request to run default call route.");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
RunRouteAction(DefaultCodecRouteString);
|
RunRouteAction(DefaultCodecRouteString);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RunRouteActionCodec(string routeKey, string sourceListKey)
|
|
||||||
{
|
|
||||||
_codecExternalSourceChange = true;
|
|
||||||
RunRouteAction(routeKey, sourceListKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -487,8 +446,7 @@ namespace PepperDash.Essentials
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.Console(1, this, "sourceListKey present but not yet implemented");
|
Debug.Console(1, this, "sourceListKey present but not yet implemented");
|
||||||
|
throw new NotImplementedException();
|
||||||
RunRouteAction(routeKey, new Action(() => { }));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -505,11 +463,7 @@ namespace PepperDash.Essentials
|
|||||||
RunRouteAction(routeKey, successCallback);
|
RunRouteAction(routeKey, successCallback);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
throw new NotImplementedException();
|
||||||
Debug.Console(1, this, "sourceListKey present but not yet implemented");
|
|
||||||
|
|
||||||
RunRouteAction(routeKey, successCallback);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -708,12 +662,11 @@ namespace PepperDash.Essentials
|
|||||||
IRoutingSink dest = null;
|
IRoutingSink dest = null;
|
||||||
|
|
||||||
if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase))
|
if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase))
|
||||||
dest = DefaultAudioDevice as IRoutingSink;
|
dest = DefaultAudioDevice as IRoutingSinkNoSwitching;
|
||||||
else if (route.DestinationKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase))
|
else if (route.DestinationKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase))
|
||||||
dest = DefaultDisplay;
|
dest = DefaultDisplay;
|
||||||
else
|
else
|
||||||
dest = DeviceManager.GetDeviceForKey(route.DestinationKey) as IRoutingSink;
|
dest = DeviceManager.GetDeviceForKey(route.DestinationKey) as IRoutingSinkNoSwitching;
|
||||||
|
|
||||||
|
|
||||||
if (dest == null)
|
if (dest == null)
|
||||||
{
|
{
|
||||||
@@ -746,28 +699,6 @@ namespace PepperDash.Essentials
|
|||||||
//Implement this
|
//Implement this
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool AllowVacancyTimerToStart()
|
|
||||||
{
|
|
||||||
bool allowVideo = true;
|
|
||||||
bool allowAudio = true;
|
|
||||||
|
|
||||||
if (VideoCodec != null)
|
|
||||||
{
|
|
||||||
Debug.Console(2,this, Debug.ErrorLogLevel.Notice, "Room {0} {1} in a video call", Key, VideoCodec.IsInCall ? "is" : "is not");
|
|
||||||
allowVideo = !VideoCodec.IsInCall;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AudioCodec != null)
|
|
||||||
{
|
|
||||||
Debug.Console(2,this, Debug.ErrorLogLevel.Notice, "Room {0} {1} in an audio call", Key, AudioCodec.IsInCall ? "is" : "is not");
|
|
||||||
allowAudio = !AudioCodec.IsInCall;
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(2, this, "Room {0} allowing vacancy timer to start: {1}", Key, allowVideo && allowAudio);
|
|
||||||
|
|
||||||
return allowVideo && allowAudio;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Does what it says
|
/// Does what it says
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -794,9 +725,9 @@ namespace PepperDash.Essentials
|
|||||||
public static void AllRoomsOff()
|
public static void AllRoomsOff()
|
||||||
{
|
{
|
||||||
var allRooms = DeviceManager.AllDevices.Where(d =>
|
var allRooms = DeviceManager.AllDevices.Where(d =>
|
||||||
d is IEssentialsRoom && !(d as IEssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions);
|
d is EssentialsHuddleSpaceRoom && !(d as EssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions);
|
||||||
foreach (var room in allRooms)
|
foreach (var room in allRooms)
|
||||||
(room as IEssentialsHuddleSpaceRoom).RunRouteAction("roomOff");
|
(room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -819,7 +750,7 @@ namespace PepperDash.Essentials
|
|||||||
x => x.DestinationKey == VideoCodec.Key && x.DestinationPort == videoCodecWithExternalSwitching.ExternalSourceInputPort).DestinationPort;
|
x => x.DestinationKey == VideoCodec.Key && x.DestinationPort == videoCodecWithExternalSwitching.ExternalSourceInputPort).DestinationPort;
|
||||||
|
|
||||||
videoCodecWithExternalSwitching.ClearExternalSources();
|
videoCodecWithExternalSwitching.ClearExternalSources();
|
||||||
videoCodecWithExternalSwitching.RunRouteAction = RunRouteActionCodec;
|
videoCodecWithExternalSwitching.RunRouteAction = RunRouteAction;
|
||||||
var srcList = ConfigReader.ConfigObject.SourceLists.SingleOrDefault(x => x.Key == SourceListKey).Value.OrderBy(kv => kv.Value.Order); ;
|
var srcList = ConfigReader.ConfigObject.SourceLists.SingleOrDefault(x => x.Key == SourceListKey).Value.OrderBy(kv => kv.Value.Order); ;
|
||||||
|
|
||||||
foreach (var kvp in srcList)
|
foreach (var kvp in srcList)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
public class EssentialsTechRoom : EssentialsRoomBase, ITvPresetsProvider, IBridgeAdvanced, IRunDirectRouteAction
|
public class EssentialsTechRoom : EssentialsRoomBase, ITvPresetsProvider, IBridgeAdvanced, IRunDirectRouteAction
|
||||||
{
|
{
|
||||||
public EssentialsTechRoomConfig PropertiesConfig { get; private set; }
|
private readonly EssentialsTechRoomConfig _config;
|
||||||
private readonly Dictionary<string, TwoWayDisplayBase> _displays;
|
private readonly Dictionary<string, TwoWayDisplayBase> _displays;
|
||||||
|
|
||||||
private readonly DevicePresetsModel _tunerPresets;
|
private readonly DevicePresetsModel _tunerPresets;
|
||||||
@@ -57,16 +57,16 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
public EssentialsTechRoom(DeviceConfig config) : base(config)
|
public EssentialsTechRoom(DeviceConfig config) : base(config)
|
||||||
{
|
{
|
||||||
PropertiesConfig = config.Properties.ToObject<EssentialsTechRoomConfig>();
|
_config = config.Properties.ToObject<EssentialsTechRoomConfig>();
|
||||||
|
|
||||||
_tunerPresets = new DevicePresetsModel(String.Format("{0}-presets", config.Key), PropertiesConfig.PresetsFileName);
|
_tunerPresets = new DevicePresetsModel(String.Format("{0}-presets", config.Key), _config.PresetsFileName);
|
||||||
|
|
||||||
_tunerPresets.SetFileName(PropertiesConfig.PresetsFileName);
|
_tunerPresets.SetFileName(_config.PresetsFileName);
|
||||||
|
|
||||||
_tunerPresets.PresetRecalled += TunerPresetsOnPresetRecalled;
|
_tunerPresets.PresetRecalled += TunerPresetsOnPresetRecalled;
|
||||||
|
|
||||||
_tuners = GetDevices<IRSetTopBoxBase>(PropertiesConfig.Tuners);
|
_tuners = GetDevices<IRSetTopBoxBase>(_config.Tuners);
|
||||||
_displays = GetDevices<TwoWayDisplayBase>(PropertiesConfig.Displays);
|
_displays = GetDevices<TwoWayDisplayBase>(_config.Displays);
|
||||||
|
|
||||||
RoomPowerIsOnFeedback = new BoolFeedback(() => RoomPowerIsOn);
|
RoomPowerIsOnFeedback = new BoolFeedback(() => RoomPowerIsOn);
|
||||||
|
|
||||||
@@ -107,18 +107,14 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
private void TunerPresetsOnPresetRecalled(ISetTopBoxNumericKeypad device, string channel)
|
private void TunerPresetsOnPresetRecalled(ISetTopBoxNumericKeypad device, string channel)
|
||||||
{
|
{
|
||||||
//Debug.Console(2, this, "TunerPresetsOnPresetRecalled");
|
|
||||||
|
|
||||||
if (!_currentPresets.ContainsKey(device.Key))
|
if (!_currentPresets.ContainsKey(device.Key))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Debug.Console(2, this, "Tuner Key: {0} Channel: {1}", device.Key, channel);
|
|
||||||
|
|
||||||
_currentPresets[device.Key] = channel;
|
_currentPresets[device.Key] = channel;
|
||||||
|
|
||||||
if (CurrentPresetsFeedbacks.ContainsKey(device.Key))
|
if (!CurrentPresetsFeedbacks.ContainsKey(device.Key))
|
||||||
{
|
{
|
||||||
CurrentPresetsFeedbacks[device.Key].FireUpdate();
|
CurrentPresetsFeedbacks[device.Key].FireUpdate();
|
||||||
}
|
}
|
||||||
@@ -153,7 +149,7 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
private void CreateOrUpdateScheduledEvents()
|
private void CreateOrUpdateScheduledEvents()
|
||||||
{
|
{
|
||||||
var eventsConfig = PropertiesConfig.ScheduledEvents;
|
var eventsConfig = _config.ScheduledEvents;
|
||||||
|
|
||||||
GetOrCreateScheduleGroup();
|
GetOrCreateScheduleGroup();
|
||||||
|
|
||||||
@@ -187,12 +183,11 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
var roomEvent = _roomScheduledEventGroup.ScheduledEvents[scheduledEvent.Key];
|
var roomEvent = _roomScheduledEventGroup.ScheduledEvents[scheduledEvent.Key];
|
||||||
|
|
||||||
//if (SchedulerUtilities.CheckEventTimeForMatch(roomEvent, DateTime.Parse(scheduledEvent.Time)) &&
|
if (!SchedulerUtilities.CheckEventTimeForMatch(roomEvent, DateTime.Parse(scheduledEvent.Time)) &&
|
||||||
// SchedulerUtilities.CheckEventRecurrenceForMatch(roomEvent, scheduledEvent.Days))
|
!SchedulerUtilities.CheckEventRecurrenceForMatch(roomEvent, scheduledEvent.Days))
|
||||||
//{
|
{
|
||||||
// Debug.Console(1, this, "Existing event matches new event properties. Nothing to update");
|
return;
|
||||||
// return;
|
}
|
||||||
//}
|
|
||||||
|
|
||||||
Debug.Console(1, this,
|
Debug.Console(1, this,
|
||||||
"Existing event does not match new config properties. Deleting existing event '{0}' and creating new event from configuration",
|
"Existing event does not match new config properties. Deleting existing event '{0}' and creating new event from configuration",
|
||||||
@@ -207,21 +202,21 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
//update config based on key of scheduleEvent
|
//update config based on key of scheduleEvent
|
||||||
GetOrCreateScheduleGroup();
|
GetOrCreateScheduleGroup();
|
||||||
var existingEventIndex = PropertiesConfig.ScheduledEvents.FindIndex((e) => e.Key == scheduledEvent.Key);
|
var existingEventIndex = _config.ScheduledEvents.FindIndex((e) => e.Key == scheduledEvent.Key);
|
||||||
|
|
||||||
if (existingEventIndex < 0)
|
if (existingEventIndex < 0)
|
||||||
{
|
{
|
||||||
PropertiesConfig.ScheduledEvents.Add(scheduledEvent);
|
_config.ScheduledEvents.Add(scheduledEvent);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PropertiesConfig.ScheduledEvents[existingEventIndex] = scheduledEvent;
|
_config.ScheduledEvents[existingEventIndex] = scheduledEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
//create or update event based on config
|
//create or update event based on config
|
||||||
CreateOrUpdateSingleEvent(scheduledEvent);
|
CreateOrUpdateSingleEvent(scheduledEvent);
|
||||||
//save config
|
//save config
|
||||||
Config.Properties = JToken.FromObject(PropertiesConfig);
|
Config.Properties = JToken.FromObject(_config);
|
||||||
|
|
||||||
CustomSetConfig(Config);
|
CustomSetConfig(Config);
|
||||||
//Fire Event
|
//Fire Event
|
||||||
@@ -230,7 +225,7 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
public List<ScheduledEventConfig> GetScheduledEvents()
|
public List<ScheduledEventConfig> GetScheduledEvents()
|
||||||
{
|
{
|
||||||
return PropertiesConfig.ScheduledEvents ?? new List<ScheduledEventConfig>();
|
return _config.ScheduledEvents ?? new List<ScheduledEventConfig>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnScheduledEventUpdate()
|
private void OnScheduledEventUpdate()
|
||||||
@@ -242,14 +237,14 @@ namespace PepperDash.Essentials
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
handler(this, new ScheduledEventEventArgs {ScheduledEvents = PropertiesConfig.ScheduledEvents});
|
handler(this, new ScheduledEventEventArgs {ScheduledEvents = _config.ScheduledEvents});
|
||||||
}
|
}
|
||||||
|
|
||||||
public event EventHandler<ScheduledEventEventArgs> ScheduledEventsChanged;
|
public event EventHandler<ScheduledEventEventArgs> ScheduledEventsChanged;
|
||||||
|
|
||||||
private void HandleScheduledEvent(ScheduledEvent schevent, ScheduledEventCommon.eCallbackReason type)
|
private void HandleScheduledEvent(ScheduledEvent schevent, ScheduledEventCommon.eCallbackReason type)
|
||||||
{
|
{
|
||||||
var eventConfig = PropertiesConfig.ScheduledEvents.FirstOrDefault(e => e.Key == schevent.Name);
|
var eventConfig = _config.ScheduledEvents.FirstOrDefault(e => e.Key == schevent.Name);
|
||||||
|
|
||||||
if (eventConfig == null)
|
if (eventConfig == null)
|
||||||
{
|
{
|
||||||
@@ -272,7 +267,7 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
Debug.Console(2, this,
|
Debug.Console(2, this,
|
||||||
@"Attempting to run action:
|
@"Attempting to run action:
|
||||||
Key: {0}
|
DeviceKey: {0}
|
||||||
MethodName: {1}
|
MethodName: {1}
|
||||||
Params: {2}"
|
Params: {2}"
|
||||||
, a.DeviceKey, a.MethodName, a.Params);
|
, a.DeviceKey, a.MethodName, a.Params);
|
||||||
@@ -286,11 +281,11 @@ Params: {2}"
|
|||||||
{
|
{
|
||||||
Debug.Console(2, this, "Room Powering On");
|
Debug.Console(2, this, "Room Powering On");
|
||||||
|
|
||||||
var dummySource = DeviceManager.GetDeviceForKey(PropertiesConfig.DummySourceKey) as IRoutingOutputs;
|
var dummySource = DeviceManager.GetDeviceForKey(_config.DummySourceKey) as IRoutingOutputs;
|
||||||
|
|
||||||
if (dummySource == null)
|
if (dummySource == null)
|
||||||
{
|
{
|
||||||
Debug.Console(1, this, "Unable to get source with key: {0}", PropertiesConfig.DummySourceKey);
|
Debug.Console(1, this, "Unable to get source with key: {0}", _config.DummySourceKey);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -375,35 +370,16 @@ Params: {2}"
|
|||||||
{
|
{
|
||||||
bridge.AddJoinMap(Key, joinMap);
|
bridge.AddJoinMap(Key, joinMap);
|
||||||
}
|
}
|
||||||
|
uint i;
|
||||||
if (PropertiesConfig.IsPrimary)
|
if (_config.IsPrimary)
|
||||||
{
|
{
|
||||||
Debug.Console(1, this, "Linking Primary system Tuner Preset Mirroring");
|
i = 0;
|
||||||
if (PropertiesConfig.MirroredTuners != null && PropertiesConfig.MirroredTuners.Count > 0)
|
foreach (var feedback in CurrentPresetsFeedbacks)
|
||||||
{
|
{
|
||||||
foreach (var tuner in PropertiesConfig.MirroredTuners)
|
feedback.Value.LinkInputSig(trilist.StringInput[(uint) (joinMap.CurrentPreset.JoinNumber + i)]);
|
||||||
{
|
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)
|
||||||
@@ -419,35 +395,15 @@ Params: {2}"
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
i = 0;
|
||||||
|
foreach (var setTopBox in _tuners)
|
||||||
{
|
{
|
||||||
Debug.Console(1, this, "Linking Secondary system Tuner Preset Mirroring");
|
var tuner = setTopBox;
|
||||||
|
|
||||||
if (PropertiesConfig.MirroredTuners != null && PropertiesConfig.MirroredTuners.Count > 0)
|
trilist.SetStringSigAction(joinMap.CurrentPreset.JoinNumber + i, s => _tunerPresets.Dial(s, tuner.Value));
|
||||||
{
|
|
||||||
foreach (var tuner in PropertiesConfig.MirroredTuners)
|
|
||||||
{
|
|
||||||
var t = _tuners[tuner.Value];
|
|
||||||
|
|
||||||
if (t == null)
|
i++;
|
||||||
{
|
|
||||||
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));
|
|
||||||
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
using PepperDash.Essentials.Room.Config;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials
|
|
||||||
{
|
|
||||||
public interface IEssentialsHuddleSpaceRoom : IEssentialsRoom, IHasCurrentSourceInfoChange, IRunRouteAction, IRunDefaultPresentRoute, IHasDefaultDisplay, IHasCurrentVolumeControls
|
|
||||||
{
|
|
||||||
bool ExcludeFromGlobalFunctions { get; }
|
|
||||||
|
|
||||||
void RunRouteAction(string routeKey);
|
|
||||||
|
|
||||||
EssentialsHuddleRoomPropertiesConfig PropertiesConfig { get; }
|
|
||||||
|
|
||||||
IBasicVolumeControls CurrentVolumeControls { get; }
|
|
||||||
|
|
||||||
event EventHandler<VolumeDeviceChangeEventArgs> CurrentVolumeDeviceChange;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
|
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
using PepperDash.Essentials.Room.Config;
|
|
||||||
using PepperDash.Essentials.Devices.Common.Codec;
|
|
||||||
using PepperDash.Essentials.Devices.Common.VideoCodec;
|
|
||||||
using PepperDash.Essentials.Devices.Common.AudioCodec;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials
|
|
||||||
{
|
|
||||||
public interface IEssentialsHuddleVtc1Room : IEssentialsRoom, IHasCurrentSourceInfoChange,
|
|
||||||
IPrivacy, IHasCurrentVolumeControls, IRunRouteAction, IRunDefaultCallRoute, IHasVideoCodec, IHasAudioCodec, IHasDefaultDisplay, IHasInCallFeedback
|
|
||||||
{
|
|
||||||
EssentialsHuddleVtc1PropertiesConfig PropertiesConfig { get; }
|
|
||||||
|
|
||||||
bool ExcludeFromGlobalFunctions { get; }
|
|
||||||
|
|
||||||
void RunRouteAction(string routeKey);
|
|
||||||
|
|
||||||
IHasScheduleAwareness ScheduleSource { get; }
|
|
||||||
|
|
||||||
new BoolFeedback InCallFeedback { get; }
|
|
||||||
|
|
||||||
new BoolFeedback PrivacyModeIsOnFeedback { get; }
|
|
||||||
|
|
||||||
string DefaultCodecRouteString { get; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,161 +11,135 @@ using PepperDash.Core;
|
|||||||
using PepperDash.Essentials.Core;
|
using PepperDash.Essentials.Core;
|
||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
using PepperDash.Essentials.Core.PageManagers;
|
using PepperDash.Essentials.Core.PageManagers;
|
||||||
using PepperDash.Essentials.Core.UI;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials
|
namespace PepperDash.Essentials
|
||||||
{
|
{
|
||||||
public class EssentialsTouchpanelController : TouchpanelBase
|
public class EssentialsTouchpanelController : EssentialsDevice, IHasBasicTriListWithSmartObject
|
||||||
{
|
{
|
||||||
|
public BasicTriListWithSmartObject Panel { get; private set; }
|
||||||
|
|
||||||
public PanelDriverBase PanelDriver { get; private set; }
|
public PanelDriverBase PanelDriver { get; private set; }
|
||||||
|
|
||||||
CTimer BacklightTransitionedOnTimer;
|
CTimer BacklightTransitionedOnTimer;
|
||||||
|
|
||||||
|
public EssentialsTouchpanelController(string key, string name, Tswx52ButtonVoiceControl tsw,
|
||||||
|
string projectName, string sgdPath)
|
||||||
|
: base(key, name)
|
||||||
|
{
|
||||||
|
Panel = tsw;
|
||||||
|
tsw.LoadSmartObjects(sgdPath);
|
||||||
|
tsw.SigChange += Panel_SigChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EssentialsTouchpanelController(string key, string name, Dge100 dge, string projectName, string sgdPath)
|
||||||
|
: base(key, name)
|
||||||
|
{
|
||||||
|
Panel = dge;
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(sgdPath))
|
||||||
|
dge.LoadSmartObjects(sgdPath);
|
||||||
|
else
|
||||||
|
Debug.Console(1, this, "No SGD file path defined");
|
||||||
|
|
||||||
|
dge.SigChange += Panel_SigChange;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Config constructor
|
/// Config constructor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public EssentialsTouchpanelController(string key, string name, BasicTriListWithSmartObject panel, CrestronTouchpanelPropertiesConfig config)
|
public EssentialsTouchpanelController(string key, string name, string type, CrestronTouchpanelPropertiesConfig props, uint id)
|
||||||
: base(key, name, panel, config)
|
: base(key, name)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Creating touchpanel hardware...");
|
||||||
|
type = type.ToLower();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (type == "crestronapp")
|
||||||
|
{
|
||||||
|
var app = new CrestronApp(id, Global.ControlSystem);
|
||||||
|
app.ParameterProjectName.Value = props.ProjectName;
|
||||||
|
Panel = app;
|
||||||
}
|
}
|
||||||
|
else if (type == "tsw550")
|
||||||
|
Panel = new Tsw550(id, Global.ControlSystem);
|
||||||
/// <summary>
|
else if (type == "tsw552")
|
||||||
/// Sets up drivers and links them to the room specified
|
Panel = new Tsw552(id, Global.ControlSystem);
|
||||||
/// </summary>
|
else if (type == "tsw560")
|
||||||
/// <param name="roomKey">key of room to link the drivers to</param>
|
Panel = new Tsw560(id, Global.ControlSystem);
|
||||||
protected override void SetupPanelDrivers(string roomKey)
|
else if (type == "tsw750")
|
||||||
{
|
Panel = new Tsw750(id, Global.ControlSystem);
|
||||||
// Clear out any existing actions
|
else if (type == "tsw752")
|
||||||
Panel.ClearAllSigActions();
|
Panel = new Tsw752(id, Global.ControlSystem);
|
||||||
|
else if (type == "tsw760")
|
||||||
Debug.Console(0, this, "Linking TP '{0}' to Room '{1}'", Key, roomKey);
|
Panel = new Tsw760(id, Global.ControlSystem);
|
||||||
|
else if (type == "tsw1050")
|
||||||
var mainDriver = new EssentialsPanelMainInterfaceDriver(Panel, _config);
|
Panel = new Tsw1050(id, Global.ControlSystem);
|
||||||
// Then the sub drivers
|
else if (type == "tsw1052")
|
||||||
|
Panel = new Tsw1052(id, Global.ControlSystem);
|
||||||
// spin up different room drivers depending on room type
|
else if (type == "tsw1060")
|
||||||
var room = DeviceManager.GetDeviceForKey(roomKey);
|
Panel = new Tsw1060(id, Global.ControlSystem);
|
||||||
if (room is IEssentialsHuddleSpaceRoom)
|
|
||||||
{
|
|
||||||
// Screen Saver Driver
|
|
||||||
|
|
||||||
mainDriver.ScreenSaverController = new ScreenSaverController(mainDriver, _config);
|
|
||||||
|
|
||||||
// Header Driver
|
|
||||||
Debug.Console(0, this, "Adding header driver");
|
|
||||||
mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, _config);
|
|
||||||
|
|
||||||
// AV Driver
|
|
||||||
Debug.Console(0, this, "Adding huddle space AV driver");
|
|
||||||
var avDriver = new EssentialsHuddlePanelAvFunctionsDriver(mainDriver, _config);
|
|
||||||
avDriver.DefaultRoomKey = roomKey;
|
|
||||||
mainDriver.AvDriver = avDriver;
|
|
||||||
avDriver.CurrentRoom = room as IEssentialsHuddleSpaceRoom;
|
|
||||||
|
|
||||||
// Environment Driver
|
|
||||||
if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Adding environment driver");
|
|
||||||
mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, _config);
|
|
||||||
|
|
||||||
mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment);
|
|
||||||
}
|
|
||||||
|
|
||||||
mainDriver.HeaderDriver.SetupHeaderButtons(avDriver, avDriver.CurrentRoom);
|
|
||||||
|
|
||||||
if (Panel is TswFt5ButtonSystem)
|
|
||||||
{
|
|
||||||
var tsw = Panel as TswFt5ButtonSystem;
|
|
||||||
// Wire up hard keys
|
|
||||||
tsw.Power.UserObject = new Action<bool>(b => { if (!b) avDriver.PowerButtonPressed(); });
|
|
||||||
if (mainDriver.EnvironmentDriver != null)
|
|
||||||
tsw.Lights.UserObject = new Action<bool>(b =>
|
|
||||||
{
|
|
||||||
if (!b)
|
|
||||||
{
|
|
||||||
mainDriver.EnvironmentDriver.Toggle();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
tsw.Up.UserObject = new Action<bool>(avDriver.VolumeUpPress);
|
|
||||||
tsw.Down.UserObject = new Action<bool>(avDriver.VolumeDownPress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (room is IEssentialsHuddleVtc1Room)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Adding huddle space VTC AV driver");
|
|
||||||
|
|
||||||
// Screen Saver Driver
|
|
||||||
mainDriver.ScreenSaverController = new ScreenSaverController(mainDriver, _config);
|
|
||||||
|
|
||||||
// Header Driver
|
|
||||||
mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, _config);
|
|
||||||
|
|
||||||
// AV Driver
|
|
||||||
var avDriver = new EssentialsHuddleVtc1PanelAvFunctionsDriver(mainDriver, _config);
|
|
||||||
|
|
||||||
var codecDriver = new PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver(Panel, avDriver,
|
|
||||||
(room as IEssentialsHuddleVtc1Room).VideoCodec, mainDriver.HeaderDriver);
|
|
||||||
avDriver.SetVideoCodecDriver(codecDriver);
|
|
||||||
avDriver.DefaultRoomKey = roomKey;
|
|
||||||
mainDriver.AvDriver = avDriver;
|
|
||||||
avDriver.CurrentRoom = room as IEssentialsHuddleVtc1Room;
|
|
||||||
|
|
||||||
// Environment Driver
|
|
||||||
if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Adding environment driver");
|
|
||||||
mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, _config);
|
|
||||||
|
|
||||||
mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment);
|
|
||||||
}
|
|
||||||
|
|
||||||
mainDriver.HeaderDriver.SetupHeaderButtons(avDriver, avDriver.CurrentRoom);
|
|
||||||
|
|
||||||
|
|
||||||
if (Panel is TswFt5ButtonSystem)
|
|
||||||
{
|
|
||||||
var tsw = Panel as TswFt5ButtonSystem;
|
|
||||||
// Wire up hard keys
|
|
||||||
tsw.Power.UserObject = new Action<bool>(b => { if (!b) avDriver.EndMeetingPress(); });
|
|
||||||
if (mainDriver.EnvironmentDriver != null)
|
|
||||||
tsw.Lights.UserObject = new Action<bool>(b =>
|
|
||||||
{
|
|
||||||
if (!b)
|
|
||||||
{
|
|
||||||
mainDriver.EnvironmentDriver.Toggle();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
tsw.Up.UserObject = new Action<bool>(avDriver.VolumeUpPress);
|
|
||||||
tsw.Down.UserObject = new Action<bool>(avDriver.VolumeDownPress);
|
|
||||||
}
|
|
||||||
|
|
||||||
LoadAndShowDriver(mainDriver);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.Console(0, this, "ERROR: Cannot load AvFunctionsDriver for room '{0}'", roomKey);
|
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW controller with type '{0}'", type);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW base class. Panel will not function: {0}", e.Message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reserved sigs
|
||||||
|
if (Panel is TswFt5ButtonSystem)
|
||||||
|
{
|
||||||
|
var tsw = Panel as TswFt5ButtonSystem;
|
||||||
|
tsw.ExtenderSystemReservedSigs.Use();
|
||||||
|
tsw.ExtenderSystemReservedSigs.DeviceExtenderSigChange
|
||||||
|
+= ExtenderSystemReservedSigs_DeviceExtenderSigChange;
|
||||||
|
|
||||||
|
tsw.ButtonStateChange += new ButtonEventHandler(Tsw_ButtonStateChange);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Panel.Register() != eDeviceRegistrationUnRegistrationResponse.Success)
|
||||||
|
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "WARNING: Registration failed. Continuing, but panel may not function: {0}", Panel.RegistrationFailureReason);
|
||||||
|
|
||||||
|
// Give up cleanly if SGD is not present.
|
||||||
|
var sgdName = Global.FilePathPrefix + "sgd" + Global.DirectorySeparator + props.SgdFile;
|
||||||
|
if (!File.Exists(sgdName))
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, "Smart object file '{0}' not present in User folder. Looking for embedded file", sgdName);
|
||||||
|
|
||||||
|
sgdName = Global.ApplicationDirectoryPathPrefix + Global.DirectorySeparator + "SGD" + Global.DirectorySeparator + props.SgdFile;
|
||||||
|
|
||||||
|
if (!File.Exists(sgdName))
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, "Unable to find SGD file '{0}' in User sgd or application SGD folder. Exiting touchpanel load.", sgdName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Panel.LoadSmartObjects(sgdName);
|
||||||
|
Panel.SigChange += Panel_SigChange;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadAndShowDriver(PanelDriverBase driver)
|
public void LoadAndShowDriver(PanelDriverBase driver)
|
||||||
{
|
{
|
||||||
if (PanelDriver != null)
|
|
||||||
{
|
|
||||||
var mainDriver = PanelDriver as EssentialsPanelMainInterfaceDriver;
|
|
||||||
if (mainDriver != null)
|
|
||||||
{
|
|
||||||
mainDriver.Dispose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PanelDriver = driver;
|
PanelDriver = driver;
|
||||||
driver.Show();
|
driver.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void ExtenderSystemReservedSigs_DeviceExtenderSigChange(DeviceExtender currentDeviceExtender, SigEventArgs args)
|
void HomePressed()
|
||||||
|
{
|
||||||
|
if (BacklightTransitionedOnTimer == null)
|
||||||
|
PanelDriver.BackButtonPressed();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ExtenderSystemReservedSigs_DeviceExtenderSigChange(DeviceExtender currentDeviceExtender, SigEventArgs args)
|
||||||
{
|
{
|
||||||
// If the sig is transitioning on, mark it in case it was home button that transitioned it
|
// If the sig is transitioning on, mark it in case it was home button that transitioned it
|
||||||
var blOnSig = (Panel as TswFt5ButtonSystem).ExtenderSystemReservedSigs.BacklightOnFeedback;
|
var blOnSig = (Panel as TswFt5ButtonSystem).ExtenderSystemReservedSigs.BacklightOnFeedback;
|
||||||
@@ -203,86 +177,158 @@ namespace PepperDash.Essentials
|
|||||||
act(value);
|
act(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Panel_SigChange(object currentDevice, Crestron.SimplSharpPro.SigEventArgs args)
|
||||||
|
{
|
||||||
|
if (Debug.Level == 2)
|
||||||
|
Debug.Console(2, this, "Sig change: {0} {1}={2}", args.Sig.Type, args.Sig.Number, args.Sig.StringValue);
|
||||||
|
var uo = args.Sig.UserObject;
|
||||||
|
if (uo is Action<bool>)
|
||||||
|
(uo as Action<bool>)(args.Sig.BoolValue);
|
||||||
|
else if (uo is Action<ushort>)
|
||||||
|
(uo as Action<ushort>)(args.Sig.UShortValue);
|
||||||
|
else if (uo is Action<string>)
|
||||||
|
(uo as Action<string>)(args.Sig.StringValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Tsw_ButtonStateChange(GenericBase device, ButtonEventArgs args)
|
||||||
|
{
|
||||||
|
var uo = args.Button.UserObject;
|
||||||
|
if(uo is Action<bool>)
|
||||||
|
(uo as Action<bool>)(args.Button.State == eButtonState.Pressed);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class EssentialsTouchpanelControllerFactory : EssentialsDeviceFactory<EssentialsTouchpanelController>
|
public class EssentialsTouchpanelControllerFactory : EssentialsDeviceFactory<EssentialsTouchpanelController>
|
||||||
{
|
{
|
||||||
public EssentialsTouchpanelControllerFactory()
|
public EssentialsTouchpanelControllerFactory()
|
||||||
{
|
{
|
||||||
TypeNames = new List<string>() { "crestronapp", "tsw550", "tsw750", "tsw1050", "tsw560", "tsw760", "tsw1060", "tsw570", "tsw770", "ts770", "tsw1070", "ts1070", "xpanel" };
|
TypeNames = new List<string>() { "tsw550", "tsw750", "tsw1050", "tsw560", "tsw760", "tsw1060", "xpanel" };
|
||||||
}
|
}
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||||
{
|
{
|
||||||
var comm = CommFactory.GetControlPropertiesConfig(dc);
|
var comm = CommFactory.GetControlPropertiesConfig(dc);
|
||||||
var props = JsonConvert.DeserializeObject<CrestronTouchpanelPropertiesConfig>(dc.Properties.ToString());
|
var props = Newtonsoft.Json.JsonConvert.DeserializeObject<CrestronTouchpanelPropertiesConfig>(dc.Properties.ToString());
|
||||||
|
|
||||||
var panel = GetPanelForType(dc.Type, comm.IpIdInt, props.ProjectName);
|
|
||||||
|
|
||||||
if (panel == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Unable to create Touchpanel for type {0}. Touchpanel Controller WILL NOT function correctly", dc.Type);
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(1, "Factory Attempting to create new EssentialsTouchpanelController");
|
Debug.Console(1, "Factory Attempting to create new EssentialsTouchpanelController");
|
||||||
|
|
||||||
var panelController = new EssentialsTouchpanelController(dc.Key, dc.Name, panel, props);
|
var panelController = new EssentialsTouchpanelController(dc.Key, dc.Name, dc.Type, props, comm.IpIdInt);
|
||||||
|
|
||||||
|
panelController.AddPostActivationAction(() =>
|
||||||
|
{
|
||||||
|
var mainDriver = new EssentialsPanelMainInterfaceDriver(panelController.Panel, props);
|
||||||
|
// Then the sub drivers
|
||||||
|
|
||||||
|
// spin up different room drivers depending on room type
|
||||||
|
var room = DeviceManager.GetDeviceForKey(props.DefaultRoomKey);
|
||||||
|
if (room is EssentialsHuddleSpaceRoom)
|
||||||
|
{
|
||||||
|
// Screen Saver Driver
|
||||||
|
mainDriver.ScreenSaverController = new ScreenSaverController(mainDriver, props);
|
||||||
|
|
||||||
|
// Header Driver
|
||||||
|
Debug.Console(0, panelController, "Adding header driver");
|
||||||
|
mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props);
|
||||||
|
|
||||||
|
// AV Driver
|
||||||
|
Debug.Console(0, panelController, "Adding huddle space AV driver");
|
||||||
|
var avDriver = new EssentialsHuddlePanelAvFunctionsDriver(mainDriver, props);
|
||||||
|
avDriver.DefaultRoomKey = props.DefaultRoomKey;
|
||||||
|
mainDriver.AvDriver = avDriver;
|
||||||
|
avDriver.CurrentRoom = room as EssentialsHuddleSpaceRoom;
|
||||||
|
|
||||||
|
// Environment Driver
|
||||||
|
if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0)
|
||||||
|
{
|
||||||
|
Debug.Console(0, panelController, "Adding environment driver");
|
||||||
|
mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, props);
|
||||||
|
|
||||||
|
mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment);
|
||||||
|
}
|
||||||
|
|
||||||
|
mainDriver.HeaderDriver.SetupHeaderButtons(avDriver, avDriver.CurrentRoom);
|
||||||
|
|
||||||
|
panelController.LoadAndShowDriver(mainDriver); // This is a little convoluted.
|
||||||
|
|
||||||
|
if (panelController.Panel is TswFt5ButtonSystem)
|
||||||
|
{
|
||||||
|
var tsw = panelController.Panel as TswFt5ButtonSystem;
|
||||||
|
// Wire up hard keys
|
||||||
|
tsw.Power.UserObject = new Action<bool>(b => { if (!b) avDriver.PowerButtonPressed(); });
|
||||||
|
//tsw.Home.UserObject = new Action<bool>(b => { if (!b) HomePressed(); });
|
||||||
|
if (mainDriver.EnvironmentDriver != null)
|
||||||
|
tsw.Lights.UserObject = new Action<bool>(b =>
|
||||||
|
{
|
||||||
|
if (!b)
|
||||||
|
{
|
||||||
|
//mainDriver.AvDriver.PopupInterlock.ShowInterlockedWithToggle(mainDriver.EnvironmentDriver.BackgroundSubpageJoin);
|
||||||
|
mainDriver.EnvironmentDriver.Toggle();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
tsw.Up.UserObject = new Action<bool>(avDriver.VolumeUpPress);
|
||||||
|
tsw.Down.UserObject = new Action<bool>(avDriver.VolumeDownPress);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (room is EssentialsHuddleVtc1Room)
|
||||||
|
{
|
||||||
|
Debug.Console(0, panelController, "Adding huddle space VTC AV driver");
|
||||||
|
|
||||||
|
// Screen Saver Driver
|
||||||
|
mainDriver.ScreenSaverController = new ScreenSaverController(mainDriver, props);
|
||||||
|
|
||||||
|
// Header Driver
|
||||||
|
mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props);
|
||||||
|
|
||||||
|
// AV Driver
|
||||||
|
var avDriver = new EssentialsHuddleVtc1PanelAvFunctionsDriver(mainDriver, props);
|
||||||
|
|
||||||
|
var codecDriver = new PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver(panelController.Panel, avDriver,
|
||||||
|
(room as EssentialsHuddleVtc1Room).VideoCodec, mainDriver.HeaderDriver);
|
||||||
|
avDriver.SetVideoCodecDriver(codecDriver);
|
||||||
|
avDriver.DefaultRoomKey = props.DefaultRoomKey;
|
||||||
|
mainDriver.AvDriver = avDriver;
|
||||||
|
avDriver.CurrentRoom = room as EssentialsHuddleVtc1Room;
|
||||||
|
|
||||||
|
// Environment Driver
|
||||||
|
if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0)
|
||||||
|
{
|
||||||
|
Debug.Console(0, panelController, "Adding environment driver");
|
||||||
|
mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, props);
|
||||||
|
|
||||||
|
mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment);
|
||||||
|
}
|
||||||
|
|
||||||
|
mainDriver.HeaderDriver.SetupHeaderButtons(avDriver, avDriver.CurrentRoom);
|
||||||
|
|
||||||
|
panelController.LoadAndShowDriver(mainDriver); // This is a little convoluted.
|
||||||
|
|
||||||
|
if (panelController.Panel is TswFt5ButtonSystem)
|
||||||
|
{
|
||||||
|
var tsw = panelController.Panel as TswFt5ButtonSystem;
|
||||||
|
// Wire up hard keys
|
||||||
|
tsw.Power.UserObject = new Action<bool>(b => { if (!b) avDriver.EndMeetingPress(); });
|
||||||
|
//tsw.Home.UserObject = new Action<bool>(b => { if (!b) HomePressed(); });
|
||||||
|
if (mainDriver.EnvironmentDriver != null)
|
||||||
|
tsw.Lights.UserObject = new Action<bool>(b =>
|
||||||
|
{
|
||||||
|
if (!b)
|
||||||
|
{
|
||||||
|
//mainDriver.AvDriver.PopupInterlock.ShowInterlockedWithToggle(mainDriver.EnvironmentDriver.BackgroundSubpageJoin);
|
||||||
|
mainDriver.EnvironmentDriver.Toggle();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
tsw.Up.UserObject = new Action<bool>(avDriver.VolumeUpPress);
|
||||||
|
tsw.Down.UserObject = new Action<bool>(avDriver.VolumeDownPress);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Console(0, panelController, "ERROR: Cannot load AvFunctionsDriver for room '{0}'", props.DefaultRoomKey);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return panelController;
|
return panelController;
|
||||||
}
|
}
|
||||||
|
|
||||||
private BasicTriListWithSmartObject GetPanelForType(string type, uint id, string projectName)
|
|
||||||
{
|
|
||||||
type = type.ToLower();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (type == "crestronapp")
|
|
||||||
{
|
|
||||||
var app = new CrestronApp(id, Global.ControlSystem);
|
|
||||||
app.ParameterProjectName.Value = projectName;
|
|
||||||
return app;
|
|
||||||
}
|
|
||||||
else if (type == "xpanel")
|
|
||||||
return new XpanelForSmartGraphics(id, Global.ControlSystem);
|
|
||||||
else if (type == "tsw550")
|
|
||||||
return new Tsw550(id, Global.ControlSystem);
|
|
||||||
else if (type == "tsw552")
|
|
||||||
return new Tsw552(id, Global.ControlSystem);
|
|
||||||
else if (type == "tsw560")
|
|
||||||
return new Tsw560(id, Global.ControlSystem);
|
|
||||||
else if (type == "tsw750")
|
|
||||||
return new Tsw750(id, Global.ControlSystem);
|
|
||||||
else if (type == "tsw752")
|
|
||||||
return new Tsw752(id, Global.ControlSystem);
|
|
||||||
else if (type == "tsw760")
|
|
||||||
return new Tsw760(id, Global.ControlSystem);
|
|
||||||
else if (type == "tsw1050")
|
|
||||||
return new Tsw1050(id, Global.ControlSystem);
|
|
||||||
else if (type == "tsw1052")
|
|
||||||
return new Tsw1052(id, Global.ControlSystem);
|
|
||||||
else if (type == "tsw1060")
|
|
||||||
return new Tsw1060(id, Global.ControlSystem);
|
|
||||||
else if (type == "tsw570")
|
|
||||||
return new Tsw570(id, Global.ControlSystem);
|
|
||||||
else if (type == "tsw770")
|
|
||||||
return new Tsw770(id, Global.ControlSystem);
|
|
||||||
else if (type == "ts770")
|
|
||||||
return new Ts770(id, Global.ControlSystem);
|
|
||||||
else if (type == "tsw1070")
|
|
||||||
return new Tsw1070(id, Global.ControlSystem);
|
|
||||||
else if (type == "ts1070")
|
|
||||||
return new Ts1070(id, Global.ControlSystem);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW controller with type '{0}'", type);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW base class. Panel will not function: {0}", e.Message);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,16 +49,6 @@ namespace PepperDash.Essentials
|
|||||||
/// 1006
|
/// 1006
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint CallEndAllConfirmVisible = 1006;
|
public const uint CallEndAllConfirmVisible = 1006;
|
||||||
/// <summary>
|
|
||||||
/// 1007
|
|
||||||
/// </summary>
|
|
||||||
public const uint MeetingPasswordVisible = 1007;
|
|
||||||
/// <summary>
|
|
||||||
/// 1008
|
|
||||||
/// </summary>
|
|
||||||
public const uint MeetingLeavePress = 1008;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -113,7 +103,7 @@ namespace PepperDash.Essentials
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 1202
|
/// 1202
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint VCStagingInactivePopoverWithRecentsVisible = 1202;
|
public const uint VCStagingInactivePopoverVisible = 1202;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -131,11 +121,6 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint VCRecentsVisible = 1206;
|
public const uint VCRecentsVisible = 1206;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 1202
|
|
||||||
/// </summary>
|
|
||||||
public const uint VCStagingInactivePopoverWithoutRecentsVisible = 1207;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 1208
|
/// 1208
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -163,11 +148,6 @@ namespace PepperDash.Essentials
|
|||||||
public const uint VCFavoriteVisibleStart = 1221;
|
public const uint VCFavoriteVisibleStart = 1221;
|
||||||
// RANGE IN USE
|
// RANGE IN USE
|
||||||
public const uint VCFavoriteVisibleEnd = 1225;
|
public const uint VCFavoriteVisibleEnd = 1225;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 1230
|
|
||||||
/// </summary>
|
|
||||||
public const uint VCStagingMeetNowPress = 1230;
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 1231
|
/// 1231
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -263,10 +243,6 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint VCCameraSelectBarWithoutModeVisible = 1261;
|
public const uint VCCameraSelectBarWithoutModeVisible = 1261;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 1262
|
|
||||||
/// </summary>
|
|
||||||
public const uint VCCameraAutoModeIsOnFb = 1262;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 1271
|
/// 1271
|
||||||
@@ -768,9 +744,9 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint SourceBackgroundOverlayClosePress = 15044;
|
public const uint SourceBackgroundOverlayClosePress = 15044;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15045
|
/// 15045 - Visibility for the bar containing call navigation button list
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint ZoomRoomContentSharingVisible = 15045;
|
public const uint CallStagingBarVisible = 15045;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15046
|
/// 15046
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -788,10 +764,6 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint NextMeetingModalVisible = 15049;
|
public const uint NextMeetingModalVisible = 15049;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15050
|
|
||||||
/// </summary>
|
|
||||||
public const uint NextMeetingNotificationRibbonVisible = 15050;
|
|
||||||
/// <summary>
|
|
||||||
/// 15051
|
/// 15051
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint Display1SelectPressAndFb = 15051;
|
public const uint Display1SelectPressAndFb = 15051;
|
||||||
@@ -859,11 +831,6 @@ namespace PepperDash.Essentials
|
|||||||
/// 15067
|
/// 15067
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint NotificationRibbonVisible = 15067;
|
public const uint NotificationRibbonVisible = 15067;
|
||||||
/// <summary>
|
|
||||||
/// 15068
|
|
||||||
/// </summary>
|
|
||||||
public const uint HeaderMeetingInfoVisible = 15068;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15083 - Press for Call help desk on AC/VC
|
/// 15083 - Press for Call help desk on AC/VC
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -968,24 +935,5 @@ namespace PepperDash.Essentials
|
|||||||
/// 15214
|
/// 15214
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint PinDialogDot4 = 15214;
|
public const uint PinDialogDot4 = 15214;
|
||||||
|
|
||||||
// Password Prompt Dialog **************************
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 15301
|
|
||||||
/// </summary>
|
|
||||||
public const uint PasswordPromptDialogVisible = 15301;
|
|
||||||
/// <summary>
|
|
||||||
/// 15302
|
|
||||||
/// </summary>
|
|
||||||
public const uint PasswordPromptTextPress = 15302;
|
|
||||||
/// <summary>
|
|
||||||
/// 15306
|
|
||||||
/// </summary>
|
|
||||||
public const uint PasswordPromptCancelPress = 15306;
|
|
||||||
/// <summary>
|
|
||||||
/// 15307
|
|
||||||
/// </summary>
|
|
||||||
public const uint PasswordPromptErrorVisible = 15307;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -27,33 +27,6 @@ namespace PepperDash.Essentials
|
|||||||
/// 1004
|
/// 1004
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint CallSharedSourceNameText = 1004;
|
public const uint CallSharedSourceNameText = 1004;
|
||||||
/// <summary>
|
|
||||||
/// 1005
|
|
||||||
/// </summary>
|
|
||||||
public const uint MeetingIdText = 1005;
|
|
||||||
/// <summary>
|
|
||||||
/// 1006
|
|
||||||
/// </summary>
|
|
||||||
public const uint MeetingHostText = 1006;
|
|
||||||
/// <summary>
|
|
||||||
/// 1007
|
|
||||||
/// </summary>
|
|
||||||
public const uint MeetingPasswordText = 1007;
|
|
||||||
/// <summary>
|
|
||||||
/// 1008
|
|
||||||
/// </summary>
|
|
||||||
public const uint MeetingLeaveText = 1008;
|
|
||||||
/// <summary>
|
|
||||||
/// 1009
|
|
||||||
/// </summary>
|
|
||||||
public const uint MeetingNameText = 1009;
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 1240 - Used to determine text for meeting start button
|
|
||||||
///</summary>
|
|
||||||
public const uint MeetingStartButtonText = 1240;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -145,14 +118,6 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
//----- through 3120
|
//----- through 3120
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 3201
|
|
||||||
/// </summary>
|
|
||||||
public const uint PasswordPromptMessageText = 3201;
|
|
||||||
/// <summary>
|
|
||||||
/// 3202
|
|
||||||
/// </summary>
|
|
||||||
public const uint PasswordPromptPasswordText = 3202;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 3812
|
/// 3812
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
{
|
{
|
||||||
// Video Codec
|
// Video Codec
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 1234: values 0 = Connect, 1 = End, 2 = Start Meeting
|
/// 1234: values 0 = Connect, 1 = End
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint VCStagingConnectButtonMode = 1234;
|
public const uint VCStagingConnectButtonMode = 1234;
|
||||||
|
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
public SourceListItem SourceItem { get; private set; }
|
public SourceListItem SourceItem { get; private set; }
|
||||||
|
|
||||||
private IHasCurrentSourceInfoChange _room;
|
|
||||||
|
|
||||||
public SubpageReferenceListSourceItem(uint index, SubpageReferenceList owner,
|
public SubpageReferenceListSourceItem(uint index, SubpageReferenceList owner,
|
||||||
SourceListItem sourceItem, Action<bool> routeAction)
|
SourceListItem sourceItem, Action<bool> routeAction)
|
||||||
: base(index, owner)
|
: base(index, owner)
|
||||||
@@ -27,7 +25,6 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
public void RegisterForSourceChange(IHasCurrentSourceInfoChange room)
|
public void RegisterForSourceChange(IHasCurrentSourceInfoChange room)
|
||||||
{
|
{
|
||||||
_room = room;
|
|
||||||
room.CurrentSourceChange -= room_CurrentSourceInfoChange;
|
room.CurrentSourceChange -= room_CurrentSourceInfoChange;
|
||||||
room.CurrentSourceChange += room_CurrentSourceInfoChange;
|
room.CurrentSourceChange += room_CurrentSourceInfoChange;
|
||||||
}
|
}
|
||||||
@@ -47,9 +44,6 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
Owner.BoolInputSig(Index, 1).UserObject = null;
|
Owner.BoolInputSig(Index, 1).UserObject = null;
|
||||||
Owner.StringInputSig(Index, 1).StringValue = "";
|
Owner.StringInputSig(Index, 1).StringValue = "";
|
||||||
|
|
||||||
if(_room != null)
|
|
||||||
_room.CurrentSourceChange -= room_CurrentSourceInfoChange;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -146,18 +146,18 @@
|
|||||||
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// void CurrentRoom_CurrentSourceInfoChange(IEssentialsRoom room, SourceListItem info, ChangeType type)
|
// void CurrentRoom_CurrentSourceInfoChange(EssentialsRoomBase room, SourceListItem info, ChangeType type)
|
||||||
// {
|
// {
|
||||||
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// void CurrentRoom_CurrentDisplay1SourceChange(IEssentialsRoom room, SourceListItem info, ChangeType type)
|
// void CurrentRoom_CurrentDisplay1SourceChange(EssentialsRoomBase room, SourceListItem info, ChangeType type)
|
||||||
// {
|
// {
|
||||||
// TriList.StringInput[UIStringJoin.Display1SourceLabel].StringValue = PendingSource.PreferredName;
|
// TriList.StringInput[UIStringJoin.Display1SourceLabel].StringValue = PendingSource.PreferredName;
|
||||||
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// void CurrentRoom_CurrentDisplay2SourceChange(IEssentialsRoom room, SourceListItem info, ChangeType type)
|
// void CurrentRoom_CurrentDisplay2SourceChange(EssentialsRoomBase room, SourceListItem info, ChangeType type)
|
||||||
// {
|
// {
|
||||||
// TriList.StringInput[UIStringJoin.Display2SourceLabel].StringValue = PendingSource.PreferredName;
|
// TriList.StringInput[UIStringJoin.Display2SourceLabel].StringValue = PendingSource.PreferredName;
|
||||||
// }
|
// }
|
||||||
|
|||||||
@@ -97,10 +97,10 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
TriList.SetSigFalseAction(ButtonPressJoinBase + 1, ShadeDevice.Open);
|
TriList.SetSigFalseAction(ButtonPressJoinBase + 1, ShadeDevice.Open);
|
||||||
|
|
||||||
TriList.SetSigFalseAction(ButtonPressJoinBase + 2, (ShadeDevice as IShadesOpenCloseStop).Stop);
|
TriList.SetSigFalseAction(ButtonPressJoinBase + 2, (ShadeDevice as IShadesOpenCloseStop).StopOrPreset);
|
||||||
|
|
||||||
if (ShadeDevice is IShadesOpenCloseStop)
|
if(ShadeDevice is RelayControlledShade)
|
||||||
TriList.SetString(StringJoinBase + 2, "Stop");
|
TriList.SetString(StringJoinBase + 2, (ShadeDevice as RelayControlledShade).StopOrPresetButtonLabel);
|
||||||
|
|
||||||
TriList.SetSigFalseAction(ButtonPressJoinBase + 3, ShadeDevice.Close);
|
TriList.SetSigFalseAction(ButtonPressJoinBase + 3, ShadeDevice.Close);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ using PepperDash.Core;
|
|||||||
using PepperDash.Essentials.Core;
|
using PepperDash.Essentials.Core;
|
||||||
using PepperDash.Essentials.Core.SmartObjects;
|
using PepperDash.Essentials.Core.SmartObjects;
|
||||||
using PepperDash.Essentials.Core.PageManagers;
|
using PepperDash.Essentials.Core.PageManagers;
|
||||||
using PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces;
|
|
||||||
using PepperDash.Essentials.Room.Config;
|
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;
|
||||||
@@ -53,7 +52,7 @@ namespace PepperDash.Essentials
|
|||||||
CaretInterlock = new JoinedSigInterlock(TriList);
|
CaretInterlock = new JoinedSigInterlock(TriList);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetUpGear(IAVDriver avDriver, IEssentialsRoom currentRoom)
|
void SetUpGear(IAVDriver avDriver, EssentialsRoomBase currentRoom)
|
||||||
{
|
{
|
||||||
// Gear
|
// Gear
|
||||||
TriList.SetString(UIStringJoin.HeaderButtonIcon5, "Gear");
|
TriList.SetString(UIStringJoin.HeaderButtonIcon5, "Gear");
|
||||||
@@ -106,7 +105,7 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
string message = null;
|
string message = null;
|
||||||
var room = DeviceManager.GetDeviceForKey(Config.DefaultRoomKey)
|
var room = DeviceManager.GetDeviceForKey(Config.DefaultRoomKey)
|
||||||
as IEssentialsHuddleSpaceRoom;
|
as EssentialsHuddleSpaceRoom;
|
||||||
if (room != null)
|
if (room != null)
|
||||||
message = room.PropertiesConfig.HelpMessage;
|
message = room.PropertiesConfig.HelpMessage;
|
||||||
else
|
else
|
||||||
@@ -165,7 +164,7 @@ namespace PepperDash.Essentials
|
|||||||
CallCaretVisible = tempJoin + 10;
|
CallCaretVisible = tempJoin + 10;
|
||||||
TriList.SetSigFalseAction(tempJoin, () =>
|
TriList.SetSigFalseAction(tempJoin, () =>
|
||||||
{
|
{
|
||||||
avDriver.ShowActiveCallsListOrMeetingInfo();
|
avDriver.ShowActiveCallsList();
|
||||||
if(avDriver.CurrentRoom.InCallFeedback.BoolValue)
|
if(avDriver.CurrentRoom.InCallFeedback.BoolValue)
|
||||||
CaretInterlock.ShowInterlocked(CallCaretVisible);
|
CaretInterlock.ShowInterlocked(CallCaretVisible);
|
||||||
});
|
});
|
||||||
@@ -192,30 +191,26 @@ namespace PepperDash.Essentials
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var meetingInfoCodec = codec as IHasMeetingInfo;
|
|
||||||
|
|
||||||
// Set mode of header button
|
// Set mode of header button
|
||||||
SetHeaderCallIcon(codec);
|
if (!codec.IsInCall)
|
||||||
|
{
|
||||||
|
HeaderCallButtonIconSig.StringValue = "DND";
|
||||||
|
//HeaderCallButton.SetIcon(HeaderListButton.OnHook);
|
||||||
|
}
|
||||||
|
else if (codec.ActiveCalls.Any(c => c.Type == eCodecCallType.Video))
|
||||||
|
HeaderCallButtonIconSig.StringValue = "Misc-06_Dark";
|
||||||
|
//HeaderCallButton.SetIcon(HeaderListButton.Camera);
|
||||||
|
//TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 2);
|
||||||
|
else
|
||||||
|
HeaderCallButtonIconSig.StringValue = "Misc-09_Dark";
|
||||||
|
//HeaderCallButton.SetIcon(HeaderListButton.Phone);
|
||||||
|
//TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 1);
|
||||||
|
|
||||||
// Set the call status text
|
// Set the call status text
|
||||||
Debug.Console(1, "Active Call Count: {0}", codec.ActiveCalls.Count);
|
|
||||||
|
|
||||||
if (codec.ActiveCalls.Count > 0)
|
if (codec.ActiveCalls.Count > 0)
|
||||||
{
|
{
|
||||||
if (codec.ActiveCalls.Count == 1 && meetingInfoCodec == null)
|
if (codec.ActiveCalls.Count == 1)
|
||||||
TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "1 Active Call");
|
TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "1 Active Call");
|
||||||
else if (codec.ActiveCalls.Count == 1 && meetingInfoCodec != null)
|
|
||||||
{
|
|
||||||
var headerCallStatusLabel = meetingInfoCodec.MeetingInfo.IsSharingMeeting
|
|
||||||
? "Sharing-Only Meeting"
|
|
||||||
: "Active Meeting";
|
|
||||||
|
|
||||||
headerCallStatusLabel = meetingInfoCodec.MeetingInfo.WaitingForHost
|
|
||||||
? "Waiting For Host"
|
|
||||||
: headerCallStatusLabel;
|
|
||||||
|
|
||||||
TriList.SetString(UIStringJoin.HeaderCallStatusLabel, headerCallStatusLabel);
|
|
||||||
}
|
|
||||||
else if (codec.ActiveCalls.Count > 1)
|
else if (codec.ActiveCalls.Count > 1)
|
||||||
TriList.SetString(UIStringJoin.HeaderCallStatusLabel, string.Format("{0} Active Calls", codec.ActiveCalls.Count));
|
TriList.SetString(UIStringJoin.HeaderCallStatusLabel, string.Format("{0} Active Calls", codec.ActiveCalls.Count));
|
||||||
}
|
}
|
||||||
@@ -223,31 +218,10 @@ namespace PepperDash.Essentials
|
|||||||
TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "No Active Calls");
|
TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "No Active Calls");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetHeaderCallIcon(VideoCodecBase codec)
|
|
||||||
{
|
|
||||||
if (!codec.IsInCall)
|
|
||||||
{
|
|
||||||
HeaderCallButtonIconSig.StringValue = "DND";
|
|
||||||
//HeaderCallButton.SetIcon(HeaderListButton.OnHook);
|
|
||||||
}
|
|
||||||
else if (codec.ActiveCalls.Any(c => c.Type == eCodecCallType.Video))
|
|
||||||
{
|
|
||||||
HeaderCallButtonIconSig.StringValue = "Misc-06_Dark";
|
|
||||||
}
|
|
||||||
//HeaderCallButton.SetIcon(HeaderListButton.Camera);
|
|
||||||
//TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 2);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
HeaderCallButtonIconSig.StringValue = "Misc-09_Dark";
|
|
||||||
}
|
|
||||||
//HeaderCallButton.SetIcon(HeaderListButton.Phone);
|
|
||||||
//TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sets up Header Buttons for the EssentialsHuddleVtc1Room type
|
/// Sets up Header Buttons for the EssentialsHuddleVtc1Room type
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SetupHeaderButtons(EssentialsHuddleVtc1PanelAvFunctionsDriver avDriver, IEssentialsHuddleVtc1Room currentRoom)
|
public void SetupHeaderButtons(EssentialsHuddleVtc1PanelAvFunctionsDriver avDriver, EssentialsHuddleVtc1Room currentRoom)
|
||||||
{
|
{
|
||||||
HeaderButtonsAreSetUp = false;
|
HeaderButtonsAreSetUp = false;
|
||||||
|
|
||||||
@@ -281,7 +255,7 @@ namespace PepperDash.Essentials
|
|||||||
TriList.SetSigFalseAction(UIBoolJoin.HeaderCallStatusLabelPress,
|
TriList.SetSigFalseAction(UIBoolJoin.HeaderCallStatusLabelPress,
|
||||||
() =>
|
() =>
|
||||||
{
|
{
|
||||||
avDriver.ShowActiveCallsListOrMeetingInfo();
|
avDriver.ShowActiveCallsList();
|
||||||
if (avDriver.CurrentRoom.InCallFeedback.BoolValue)
|
if (avDriver.CurrentRoom.InCallFeedback.BoolValue)
|
||||||
CaretInterlock.ShowInterlocked(CallCaretVisible);
|
CaretInterlock.ShowInterlocked(CallCaretVisible);
|
||||||
});
|
});
|
||||||
@@ -309,7 +283,7 @@ namespace PepperDash.Essentials
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sets up Header Buttons for the EssentialsHuddleSpaceRoom type
|
/// Sets up Header Buttons for the EssentialsHuddleSpaceRoom type
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SetupHeaderButtons(EssentialsHuddlePanelAvFunctionsDriver avDriver, IEssentialsHuddleSpaceRoom currentRoom)
|
public void SetupHeaderButtons(EssentialsHuddlePanelAvFunctionsDriver avDriver, EssentialsHuddleSpaceRoom currentRoom)
|
||||||
{
|
{
|
||||||
HeaderButtonsAreSetUp = false;
|
HeaderButtonsAreSetUp = false;
|
||||||
|
|
||||||
@@ -379,8 +353,6 @@ namespace PepperDash.Essentials
|
|||||||
headerPopupShown = true;
|
headerPopupShown = true;
|
||||||
else if (e.NewJoin == UIBoolJoin.HeaderActiveCallsListVisible)
|
else if (e.NewJoin == UIBoolJoin.HeaderActiveCallsListVisible)
|
||||||
headerPopupShown = true;
|
headerPopupShown = true;
|
||||||
else if (e.NewJoin == UIBoolJoin.HeaderMeetingInfoVisible)
|
|
||||||
headerPopupShown = true;
|
|
||||||
else if (e.NewJoin == UIBoolJoin.HelpPageVisible)
|
else if (e.NewJoin == UIBoolJoin.HelpPageVisible)
|
||||||
headerPopupShown = true;
|
headerPopupShown = true;
|
||||||
else if (e.NewJoin == UIBoolJoin.MeetingsOrContacMethodsListVisible)
|
else if (e.NewJoin == UIBoolJoin.MeetingsOrContacMethodsListVisible)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ namespace PepperDash.Essentials
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class EssentialsPanelMainInterfaceDriver : PanelDriverBase, IHasScreenSaverController, IDisposable
|
public class EssentialsPanelMainInterfaceDriver : PanelDriverBase, IHasScreenSaverController
|
||||||
{
|
{
|
||||||
CTimer InactivityTimer;
|
CTimer InactivityTimer;
|
||||||
|
|
||||||
@@ -69,35 +69,6 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IDisposable Members
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
var avDriver = AvDriver as PanelDriverBase;
|
|
||||||
if (avDriver != null)
|
|
||||||
{
|
|
||||||
avDriver.Hide();
|
|
||||||
}
|
|
||||||
if (ScreenSaverController != null)
|
|
||||||
{
|
|
||||||
ScreenSaverController.Dispose();
|
|
||||||
}
|
|
||||||
if (HeaderDriver != null)
|
|
||||||
{
|
|
||||||
HeaderDriver.Hide();
|
|
||||||
}
|
|
||||||
if (EnvironmentDriver != null)
|
|
||||||
{
|
|
||||||
EnvironmentDriver.Hide();
|
|
||||||
}
|
|
||||||
if (CurrentChildDriver != null)
|
|
||||||
{
|
|
||||||
CurrentChildDriver.Hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
void ExtenderTouchDetectionReservedSigs_DeviceExtenderSigChange(Crestron.SimplSharpPro.DeviceExtender currentDeviceExtender, Crestron.SimplSharpPro.SigEventArgs args)
|
void ExtenderTouchDetectionReservedSigs_DeviceExtenderSigChange(Crestron.SimplSharpPro.DeviceExtender currentDeviceExtender, Crestron.SimplSharpPro.SigEventArgs args)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -983,7 +983,7 @@
|
|||||||
// /// <summary>
|
// /// <summary>
|
||||||
// /// Handles source change
|
// /// Handles source change
|
||||||
// /// </summary>
|
// /// </summary>
|
||||||
// void _CurrentRoom_SourceInfoChange(IEssentialsRoom room,
|
// void _CurrentRoom_SourceInfoChange(EssentialsRoomBase room,
|
||||||
// SourceListItem info, ChangeType change)
|
// SourceListItem info, ChangeType change)
|
||||||
// {
|
// {
|
||||||
// if (change == ChangeType.WillChange)
|
// if (change == ChangeType.WillChange)
|
||||||
@@ -995,7 +995,7 @@
|
|||||||
// /// <summary>
|
// /// <summary>
|
||||||
// ///
|
// ///
|
||||||
// /// </summary>
|
// /// </summary>
|
||||||
// void _CurrentRoom_CurrentDisplay1SourceChange(IEssentialsRoom room, SourceListItem info, ChangeType type)
|
// void _CurrentRoom_CurrentDisplay1SourceChange(EssentialsRoomBase room, SourceListItem info, ChangeType type)
|
||||||
// {
|
// {
|
||||||
// if (type == ChangeType.DidChange)
|
// if (type == ChangeType.DidChange)
|
||||||
// {
|
// {
|
||||||
@@ -1021,7 +1021,7 @@
|
|||||||
// /// <summary>
|
// /// <summary>
|
||||||
// ///
|
// ///
|
||||||
// /// </summary>
|
// /// </summary>
|
||||||
// void _CurrentRoom_CurrentDisplay2SourceChange(IEssentialsRoom room, SourceListItem info, ChangeType type)
|
// void _CurrentRoom_CurrentDisplay2SourceChange(EssentialsRoomBase room, SourceListItem info, ChangeType type)
|
||||||
// {
|
// {
|
||||||
// if (type == ChangeType.DidChange)
|
// if (type == ChangeType.DidChange)
|
||||||
// {
|
// {
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ namespace PepperDash.Essentials
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IEssentialsHuddleSpaceRoom CurrentRoom
|
public EssentialsHuddleSpaceRoom CurrentRoom
|
||||||
{
|
{
|
||||||
get { return _CurrentRoom; }
|
get { return _CurrentRoom; }
|
||||||
set
|
set
|
||||||
@@ -86,7 +86,7 @@ namespace PepperDash.Essentials
|
|||||||
SetCurrentRoom(value);
|
SetCurrentRoom(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
IEssentialsHuddleSpaceRoom _CurrentRoom;
|
EssentialsHuddleSpaceRoom _CurrentRoom;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
@@ -306,7 +306,7 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.DisplayPowerTogglePress, () =>
|
TriList.SetSigFalseAction(UIBoolJoin.DisplayPowerTogglePress, () =>
|
||||||
{
|
{
|
||||||
if (CurrentRoom != null && CurrentRoom.DefaultDisplay != null && CurrentRoom.DefaultDisplay is IHasPowerControl)
|
if (CurrentRoom != null && CurrentRoom.DefaultDisplay is IHasPowerControl)
|
||||||
(CurrentRoom.DefaultDisplay as IHasPowerControl).PowerToggle();
|
(CurrentRoom.DefaultDisplay as IHasPowerControl).PowerToggle();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -498,7 +498,7 @@ namespace PepperDash.Essentials
|
|||||||
TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = true;
|
TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = true;
|
||||||
// Run default source when room is off and share is pressed
|
// Run default source when room is off and share is pressed
|
||||||
if (!CurrentRoom.OnFeedback.BoolValue)
|
if (!CurrentRoom.OnFeedback.BoolValue)
|
||||||
(CurrentRoom as IRunDefaultPresentRoute).RunDefaultPresentRoute();
|
CurrentRoom.RunDefaultPresentRoute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -583,7 +583,7 @@ namespace PepperDash.Essentials
|
|||||||
void UiSelectSource(string key)
|
void UiSelectSource(string key)
|
||||||
{
|
{
|
||||||
// Run the route and when it calls back, show the source
|
// Run the route and when it calls back, show the source
|
||||||
CurrentRoom.RunRouteAction(key);
|
CurrentRoom.RunRouteAction(key, new Action(() => { }));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -745,7 +745,7 @@ namespace PepperDash.Essentials
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Helper for property setter. Sets the panel to the given room, latching up all functionality
|
/// Helper for property setter. Sets the panel to the given room, latching up all functionality
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void RefreshCurrentRoom(IEssentialsHuddleSpaceRoom room)
|
public void RefreshCurrentRoom(EssentialsHuddleSpaceRoom room)
|
||||||
{
|
{
|
||||||
if (_CurrentRoom != null)
|
if (_CurrentRoom != null)
|
||||||
{
|
{
|
||||||
@@ -836,7 +836,7 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetCurrentRoom(IEssentialsHuddleSpaceRoom room)
|
void SetCurrentRoom(EssentialsHuddleSpaceRoom room)
|
||||||
{
|
{
|
||||||
if (_CurrentRoom == room) return;
|
if (_CurrentRoom == room) return;
|
||||||
// Disconnect current (probably never called)
|
// Disconnect current (probably never called)
|
||||||
@@ -871,7 +871,7 @@ namespace PepperDash.Essentials
|
|||||||
UpdateMCJoins(_CurrentRoom);
|
UpdateMCJoins(_CurrentRoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateMCJoins(IEssentialsHuddleSpaceRoom room)
|
void UpdateMCJoins(EssentialsHuddleSpaceRoom room)
|
||||||
{
|
{
|
||||||
TriList.SetString(UIStringJoin.RoomMcUrl, room.MobileControlRoomBridge.McServerUrl);
|
TriList.SetString(UIStringJoin.RoomMcUrl, room.MobileControlRoomBridge.McServerUrl);
|
||||||
TriList.SetString(UIStringJoin.RoomMcQrCodeUrl, room.MobileControlRoomBridge.QrCodeUrl);
|
TriList.SetString(UIStringJoin.RoomMcQrCodeUrl, room.MobileControlRoomBridge.QrCodeUrl);
|
||||||
@@ -918,7 +918,6 @@ namespace PepperDash.Essentials
|
|||||||
TriList.BooleanInput[StartPageVisibleJoin].BoolValue = true;
|
TriList.BooleanInput[StartPageVisibleJoin].BoolValue = true;
|
||||||
TriList.BooleanInput[UIBoolJoin.VolumeSingleMute1Visible].BoolValue = false;
|
TriList.BooleanInput[UIBoolJoin.VolumeSingleMute1Visible].BoolValue = false;
|
||||||
TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = false;
|
TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = false;
|
||||||
TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -316,7 +316,7 @@ namespace PepperDash.Essentials.UIDrivers
|
|||||||
void CommunicationMonitor_StatusChange(object sender, MonitorStatusChangeEventArgs e)
|
void CommunicationMonitor_StatusChange(object sender, MonitorStatusChangeEventArgs e)
|
||||||
{
|
{
|
||||||
var c = sender as ICommunicationMonitor;
|
var c = sender as ICommunicationMonitor;
|
||||||
if (c != null && StatusListDeviceIndexes.ContainsKey(c))
|
if (StatusListDeviceIndexes.ContainsKey(c))
|
||||||
{
|
{
|
||||||
var i = StatusListDeviceIndexes[c];
|
var i = StatusListDeviceIndexes[c];
|
||||||
StatusList.UShortInputSig(i, 1).UShortValue = (ushort)e.Status;
|
StatusList.UShortInputSig(i, 1).UShortValue = (ushort)e.Status;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
|
||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
using Crestron.SimplSharpPro;
|
using Crestron.SimplSharpPro;
|
||||||
using Crestron.SimplSharpPro.UI;
|
using Crestron.SimplSharpPro.UI;
|
||||||
@@ -9,13 +8,11 @@ using Crestron.SimplSharpPro.UI;
|
|||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
using PepperDash.Essentials.Core;
|
using PepperDash.Essentials.Core;
|
||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
using PepperDash.Essentials.Core.DeviceTypeInterfaces;
|
|
||||||
using PepperDash.Essentials.Core.SmartObjects;
|
using PepperDash.Essentials.Core.SmartObjects;
|
||||||
using PepperDash.Essentials.Core.PageManagers;
|
using PepperDash.Essentials.Core.PageManagers;
|
||||||
using PepperDash.Essentials.Room.Config;
|
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.VideoCodec.Interfaces;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials
|
namespace PepperDash.Essentials
|
||||||
{
|
{
|
||||||
@@ -53,7 +50,7 @@ namespace PepperDash.Essentials
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IEssentialsHuddleVtc1Room CurrentRoom
|
public EssentialsHuddleVtc1Room CurrentRoom
|
||||||
{
|
{
|
||||||
get { return _CurrentRoom; }
|
get { return _CurrentRoom; }
|
||||||
set
|
set
|
||||||
@@ -61,7 +58,7 @@ namespace PepperDash.Essentials
|
|||||||
SetCurrentRoom(value);
|
SetCurrentRoom(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
IEssentialsHuddleVtc1Room _CurrentRoom;
|
EssentialsHuddleVtc1Room _CurrentRoom;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// For hitting feedbacks
|
/// For hitting feedbacks
|
||||||
@@ -101,9 +98,6 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public SubpageReferenceList MeetingOrContactMethodModalSrl { get; set; }
|
public SubpageReferenceList MeetingOrContactMethodModalSrl { get; set; }
|
||||||
|
|
||||||
public uint CallListOrMeetingInfoPopoverVisibilityJoin { get; private set; }
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The list of buttons on the header. Managed with visibility only
|
/// The list of buttons on the header. Managed with visibility only
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -179,38 +173,10 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; private set; }
|
public PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
private UiDisplayMode _currentMode;
|
|
||||||
|
|
||||||
private bool _isZoomRoomWithNoExternalSources
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return CurrentRoom.VideoCodec is Essentials.Devices.Common.VideoCodec.ZoomRoom.ZoomRoom && _sourceListCount <= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private uint _sourceListCount;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The mode showing. Presentation or call.
|
/// The mode showing. Presentation or call.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
UiDisplayMode CurrentMode
|
UiDisplayMode CurrentMode = UiDisplayMode.Start;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _currentMode;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _currentMode)
|
|
||||||
{
|
|
||||||
_currentMode = value;
|
|
||||||
|
|
||||||
SetActivityFooterFeedbacks();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CTimer NextMeetingTimer;
|
CTimer NextMeetingTimer;
|
||||||
|
|
||||||
@@ -241,7 +207,6 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
MeetingOrContactMethodModalSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.MeetingListSRL, 3, 3, 5);
|
MeetingOrContactMethodModalSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.MeetingListSRL, 3, 3, 5);
|
||||||
|
|
||||||
CurrentMode = UiDisplayMode.Start;
|
|
||||||
|
|
||||||
// buttons are added in SetCurrentRoom
|
// buttons are added in SetCurrentRoom
|
||||||
//HeaderButtonsList = new SmartObjectHeaderButtonList(TriList.SmartObjects[UISmartObjectJoin.HeaderButtonList]);
|
//HeaderButtonsList = new SmartObjectHeaderButtonList(TriList.SmartObjects[UISmartObjectJoin.HeaderButtonList]);
|
||||||
@@ -354,7 +319,7 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.DisplayPowerTogglePress, () =>
|
TriList.SetSigFalseAction(UIBoolJoin.DisplayPowerTogglePress, () =>
|
||||||
{
|
{
|
||||||
if (CurrentRoom != null && CurrentRoom.DefaultDisplay != null && CurrentRoom.DefaultDisplay is IHasPowerControl)
|
if (CurrentRoom != null && CurrentRoom.DefaultDisplay is IHasPowerControl)
|
||||||
(CurrentRoom.DefaultDisplay as IHasPowerControl).PowerToggle();
|
(CurrentRoom.DefaultDisplay as IHasPowerControl).PowerToggle();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -366,17 +331,15 @@ namespace PepperDash.Essentials
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Allows PopupInterlock to be toggled if the calls list is already visible, or if the codec is in a call
|
/// Allows PopupInterlock to be toggled if the calls list is already visible, or if the codec is in a call
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void ShowActiveCallsListOrMeetingInfo()
|
public void ShowActiveCallsList()
|
||||||
{
|
{
|
||||||
TriList.SetBool(UIBoolJoin.CallEndAllConfirmVisible, true);
|
TriList.SetBool(UIBoolJoin.CallEndAllConfirmVisible, true);
|
||||||
|
if(PopupInterlock.CurrentJoin == UIBoolJoin.HeaderActiveCallsListVisible)
|
||||||
|
PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HeaderActiveCallsListVisible);
|
||||||
if(PopupInterlock.CurrentJoin == CallListOrMeetingInfoPopoverVisibilityJoin)
|
|
||||||
PopupInterlock.ShowInterlockedWithToggle(CallListOrMeetingInfoPopoverVisibilityJoin);
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(CurrentRoom.VideoCodec.IsInCall)
|
if((CurrentRoom.ScheduleSource as VideoCodecBase).IsInCall)
|
||||||
PopupInterlock.ShowInterlockedWithToggle(CallListOrMeetingInfoPopoverVisibilityJoin);
|
PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HeaderActiveCallsListVisible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -472,40 +435,28 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
void ShowNextMeetingTimerCallback()
|
void ShowNextMeetingTimerCallback()
|
||||||
{
|
{
|
||||||
//Update calendar for Zoom. Zoom doesn't automatically update when meetings are in the past
|
|
||||||
if (_isZoomRoomWithNoExternalSources)
|
|
||||||
{
|
|
||||||
CurrentRoom.ScheduleSource.GetSchedule();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Every 60 seconds, refresh the calendar
|
// Every 60 seconds, refresh the calendar
|
||||||
RefreshMeetingsList();
|
RefreshMeetingsList();
|
||||||
// check meetings list for the closest, joinable meeting
|
// check meetings list for the closest, joinable meeting
|
||||||
var ss = CurrentRoom.ScheduleSource;
|
var ss = CurrentRoom.ScheduleSource;
|
||||||
var meetings = ss.CodecSchedule.Meetings;
|
var meetings = ss.CodecSchedule.Meetings;
|
||||||
|
|
||||||
if (meetings.Count <= 0)
|
if (meetings.Count > 0)
|
||||||
{
|
{
|
||||||
return;
|
|
||||||
}
|
|
||||||
// If the room is off pester the user
|
// If the room is off pester the user
|
||||||
// If the room is on, and the meeting is joinable
|
// If the room is on, and the meeting is joinable
|
||||||
// and the LastMeetingDismissed != this meeting
|
// and the LastMeetingDismissed != this meeting
|
||||||
|
|
||||||
var lastMeetingDismissed = meetings.FirstOrDefault(m => m.Id == LastMeetingDismissedId);
|
var lastMeetingDismissed = meetings.FirstOrDefault(m => m.Id == LastMeetingDismissedId);
|
||||||
//Debug.Console(0, "*#* Room on: {0}, lastMeetingDismissedId: {1} {2} *#*",
|
Debug.Console(0, "*#* Room on: {0}, lastMeetingDismissedId: {1} {2} *#*",
|
||||||
// CurrentRoom.OnFeedback.BoolValue,
|
CurrentRoom.OnFeedback.BoolValue,
|
||||||
// LastMeetingDismissedId,
|
LastMeetingDismissedId,
|
||||||
// lastMeetingDismissed != null ? lastMeetingDismissed.StartTime.ToString("t", Global.Culture) : "");
|
lastMeetingDismissed != null ? lastMeetingDismissed.StartTime.ToShortTimeString() : "");
|
||||||
|
|
||||||
var meeting = meetings.LastOrDefault(m => m.Joinable);
|
var meeting = meetings.LastOrDefault(m => m.Joinable);
|
||||||
if (CurrentRoom.OnFeedback.BoolValue
|
if (CurrentRoom.OnFeedback.BoolValue
|
||||||
&& lastMeetingDismissed == meeting)
|
&& lastMeetingDismissed == meeting)
|
||||||
{
|
{
|
||||||
// meeting no longer joinable, hide popup
|
|
||||||
if(meeting == null)
|
|
||||||
HideNextMeetingPopup();
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -517,11 +468,9 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Upcoming meeting");
|
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Upcoming meeting");
|
||||||
TriList.SetString(UIStringJoin.NextMeetingStartTimeText, meeting.StartTime.ToString("t", Global.Culture));
|
TriList.SetString(UIStringJoin.NextMeetingStartTimeText, meeting.StartTime.ToShortTimeString());
|
||||||
TriList.SetString(UIStringJoin.NextMeetingEndTimeText, meeting.EndTime.ToString("t", Global.Culture));
|
TriList.SetString(UIStringJoin.NextMeetingEndTimeText, meeting.EndTime.ToShortTimeString());
|
||||||
TriList.SetString(UIStringJoin.NextMeetingTitleText, meeting.Title);
|
TriList.SetString(UIStringJoin.NextMeetingTitleText, meeting.Title);
|
||||||
TriList.SetString(UIStringJoin.NextMeetingNameText, meeting.Organizer);
|
TriList.SetString(UIStringJoin.NextMeetingNameText, meeting.Organizer);
|
||||||
TriList.SetString(UIStringJoin.NextMeetingButtonLabel, "Join");
|
TriList.SetString(UIStringJoin.NextMeetingButtonLabel, "Join");
|
||||||
@@ -544,7 +493,7 @@ namespace PepperDash.Essentials
|
|||||||
// indexOf = 3, 4 meetings :
|
// indexOf = 3, 4 meetings :
|
||||||
if (indexOfNext < meetings.Count)
|
if (indexOfNext < meetings.Count)
|
||||||
TriList.SetString(UIStringJoin.NextMeetingFollowingMeetingText,
|
TriList.SetString(UIStringJoin.NextMeetingFollowingMeetingText,
|
||||||
meetings[indexOfNext].StartTime.ToString("t", Global.Culture));
|
meetings[indexOfNext].StartTime.ToShortTimeString());
|
||||||
else
|
else
|
||||||
TriList.SetString(UIStringJoin.NextMeetingFollowingMeetingText, "No more meetings today");
|
TriList.SetString(UIStringJoin.NextMeetingFollowingMeetingText, "No more meetings today");
|
||||||
|
|
||||||
@@ -559,6 +508,7 @@ namespace PepperDash.Essentials
|
|||||||
TriList.SetBool(UIBoolJoin.NextMeetingModalVisible, true);
|
TriList.SetBool(UIBoolJoin.NextMeetingModalVisible, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
@@ -583,26 +533,19 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
void RoomOnAndDialMeeting(Meeting meeting)
|
void RoomOnAndDialMeeting(Meeting meeting)
|
||||||
{
|
{
|
||||||
Debug.Console(1, "[RoomOnAndDialMeeting] Joining meeting [{0}]", meeting);
|
|
||||||
Action dialAction = () =>
|
Action dialAction = () =>
|
||||||
{
|
{
|
||||||
var d = CurrentRoom.ScheduleSource as VideoCodecBase;
|
var d = CurrentRoom.ScheduleSource as VideoCodecBase;
|
||||||
if (d != null)
|
if (d != null)
|
||||||
{
|
{
|
||||||
Debug.Console(1,
|
|
||||||
"[RoomOnAndDialMeeting] [dialAction] Sending command to codec to join meeting {0}", meeting);
|
|
||||||
d.Dial(meeting);
|
d.Dial(meeting);
|
||||||
LastMeetingDismissedId = meeting.Id; // To prevent prompts for already-joined call
|
LastMeetingDismissedId = meeting.Id; // To prevent prompts for already-joined call
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (CurrentRoom.OnFeedback.BoolValue)
|
if (CurrentRoom.OnFeedback.BoolValue)
|
||||||
{
|
|
||||||
Debug.Console(1, "[RoomOnAndDialMeeting] Room is on.");
|
|
||||||
dialAction();
|
dialAction();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.Console(1, "RoomOnAndDialMeeting] Room is off or warming. Registering for Warming Feedback");
|
|
||||||
// Rig a one-time handler to catch when the room is warmed and then dial call
|
// Rig a one-time handler to catch when the room is warmed and then dial call
|
||||||
EventHandler<FeedbackEventArgs> oneTimeHandler = null;
|
EventHandler<FeedbackEventArgs> oneTimeHandler = null;
|
||||||
oneTimeHandler = (o, a) =>
|
oneTimeHandler = (o, a) =>
|
||||||
@@ -664,40 +607,12 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
void SetActivityFooterFeedbacks()
|
void SetActivityFooterFeedbacks()
|
||||||
{
|
{
|
||||||
if (CurrentRoom != null)
|
CallButtonSig.BoolValue = CurrentMode == UiDisplayMode.Call
|
||||||
{
|
|
||||||
var startMode = CurrentMode == UiDisplayMode.Start;
|
|
||||||
var presentationMode = CurrentMode == UiDisplayMode.Presentation;
|
|
||||||
var callMode = CurrentMode == UiDisplayMode.Call;
|
|
||||||
|
|
||||||
TriList.SetBool(StartPageVisibleJoin, startMode ? true : false);
|
|
||||||
|
|
||||||
if (presentationMode &&_isZoomRoomWithNoExternalSources)
|
|
||||||
{
|
|
||||||
// For now, if this is a Zoom Room and there are no shareable sources just display the informational subpage
|
|
||||||
TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, false);
|
|
||||||
TriList.SetBool(UIBoolJoin.ZoomRoomContentSharingVisible, true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Otherwise, show the staging bar
|
|
||||||
TriList.SetBool(UIBoolJoin.ZoomRoomContentSharingVisible, false);
|
|
||||||
TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, presentationMode ? true : false);
|
|
||||||
|
|
||||||
}
|
|
||||||
if (!presentationMode)
|
|
||||||
{
|
|
||||||
TriList.SetBool(UIBoolJoin.ZoomRoomContentSharingVisible, false);
|
|
||||||
TriList.SetBool(UIBoolJoin.SelectASourceVisible, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
CallButtonSig.BoolValue = callMode
|
|
||||||
&& CurrentRoom.ShutdownType == eShutdownType.None;
|
&& CurrentRoom.ShutdownType == eShutdownType.None;
|
||||||
ShareButtonSig.BoolValue = presentationMode
|
ShareButtonSig.BoolValue = CurrentMode == UiDisplayMode.Presentation
|
||||||
&& CurrentRoom.ShutdownType == eShutdownType.None;
|
&& CurrentRoom.ShutdownType == eShutdownType.None;
|
||||||
EndMeetingButtonSig.BoolValue = CurrentRoom.ShutdownType != eShutdownType.None;
|
EndMeetingButtonSig.BoolValue = CurrentRoom.ShutdownType != eShutdownType.None;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
@@ -708,13 +623,14 @@ namespace PepperDash.Essentials
|
|||||||
return;
|
return;
|
||||||
HideLogo();
|
HideLogo();
|
||||||
HideNextMeetingPopup();
|
HideNextMeetingPopup();
|
||||||
//TriList.SetBool(StartPageVisibleJoin, false);
|
TriList.SetBool(StartPageVisibleJoin, false);
|
||||||
//TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, false);
|
TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, false);
|
||||||
//TriList.SetBool(UIBoolJoin.SelectASourceVisible, false);
|
TriList.SetBool(UIBoolJoin.SelectASourceVisible, false);
|
||||||
if (CurrentSourcePageManager != null)
|
if (CurrentSourcePageManager != null)
|
||||||
CurrentSourcePageManager.Hide();
|
CurrentSourcePageManager.Hide();
|
||||||
PowerOnFromCall();
|
PowerOnFromCall();
|
||||||
CurrentMode = UiDisplayMode.Call;
|
CurrentMode = UiDisplayMode.Call;
|
||||||
|
SetActivityFooterFeedbacks();
|
||||||
VCDriver.Show();
|
VCDriver.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -727,63 +643,29 @@ namespace PepperDash.Essentials
|
|||||||
if (VCDriver.IsVisible)
|
if (VCDriver.IsVisible)
|
||||||
VCDriver.Hide();
|
VCDriver.Hide();
|
||||||
HideNextMeetingPopup();
|
HideNextMeetingPopup();
|
||||||
|
TriList.SetBool(StartPageVisibleJoin, false);
|
||||||
|
TriList.SetBool(UIBoolJoin.CallStagingBarVisible, false);
|
||||||
if (_isZoomRoomWithNoExternalSources)
|
TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, true);
|
||||||
{
|
|
||||||
if (!CurrentRoom.OnFeedback.BoolValue)
|
|
||||||
{
|
|
||||||
CurrentRoom.RunDefaultPresentRoute();
|
|
||||||
}
|
|
||||||
// For now, if this is a Zoom Room and there are no shareable sources just display the informational subpage
|
|
||||||
TriList.SetBool(UIBoolJoin.ZoomRoomContentSharingVisible, true);
|
|
||||||
|
|
||||||
var presentationMeetingCodec = CurrentRoom.VideoCodec as IHasPresentationOnlyMeeting;
|
|
||||||
var farEndContentStatusCodec = CurrentRoom.VideoCodec as IHasFarEndContentStatus;
|
|
||||||
var receivingContent = false;
|
|
||||||
|
|
||||||
if (farEndContentStatusCodec != null)
|
|
||||||
{
|
|
||||||
receivingContent = farEndContentStatusCodec.ReceivingContent.BoolValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (presentationMeetingCodec != null && !CurrentRoom.VideoCodec.IsInCall)
|
|
||||||
{
|
|
||||||
presentationMeetingCodec.StartSharingOnlyMeeting(eSharingMeetingMode.Laptop);
|
|
||||||
}
|
|
||||||
else if (CurrentRoom.VideoCodec.IsInCall && !CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue &&
|
|
||||||
!receivingContent)
|
|
||||||
{
|
|
||||||
CurrentRoom.VideoCodec.StartSharing();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CurrentSourcePageManager != null)
|
|
||||||
CurrentSourcePageManager.Hide();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Run default source when room is off and share is pressed
|
// Run default source when room is off and share is pressed
|
||||||
|
if (!CurrentRoom.OnFeedback.BoolValue)
|
||||||
|
{
|
||||||
if (!CurrentRoom.OnFeedback.BoolValue)
|
if (!CurrentRoom.OnFeedback.BoolValue)
|
||||||
{
|
{
|
||||||
// If there's no default, show UI elements
|
// If there's no default, show UI elements
|
||||||
if (!(CurrentRoom as IRunDefaultPresentRoute).RunDefaultPresentRoute())
|
if (!CurrentRoom.RunDefaultPresentRoute())
|
||||||
TriList.SetBool(UIBoolJoin.SelectASourceVisible, true);
|
TriList.SetBool(UIBoolJoin.SelectASourceVisible, true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else // room is on show what's active or select a source if nothing is yet active
|
else // room is on show what's active or select a source if nothing is yet active
|
||||||
{
|
{
|
||||||
if (CurrentRoom.CurrentSourceInfo == null ||
|
if(CurrentRoom.CurrentSourceInfo == null || CurrentRoom.CurrentSourceInfoKey == CurrentRoom.DefaultCodecRouteString)
|
||||||
(CurrentRoom.VideoCodec != null &&
|
|
||||||
CurrentRoom.CurrentSourceInfo.SourceDevice.Key == CurrentRoom.VideoCodec.OsdSource.Key))
|
|
||||||
TriList.SetBool(UIBoolJoin.SelectASourceVisible, true);
|
TriList.SetBool(UIBoolJoin.SelectASourceVisible, true);
|
||||||
else if (CurrentSourcePageManager != null)
|
else if (CurrentSourcePageManager != null)
|
||||||
{
|
|
||||||
TriList.SetBool(UIBoolJoin.SelectASourceVisible, false);
|
|
||||||
CurrentSourcePageManager.Show();
|
CurrentSourcePageManager.Show();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
SetupSourceList();
|
|
||||||
}
|
|
||||||
CurrentMode = UiDisplayMode.Presentation;
|
CurrentMode = UiDisplayMode.Presentation;
|
||||||
|
SetupSourceList();
|
||||||
|
SetActivityFooterFeedbacks();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -822,11 +704,9 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
void ShowCurrentSource()
|
void ShowCurrentSource()
|
||||||
{
|
{
|
||||||
if (CurrentRoom.CurrentSourceInfo == null || _isZoomRoomWithNoExternalSources)
|
if (CurrentRoom.CurrentSourceInfo == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CurrentMode = UiDisplayMode.Presentation;
|
|
||||||
|
|
||||||
if (CurrentRoom.CurrentSourceInfo.SourceDevice == null)
|
if (CurrentRoom.CurrentSourceInfo.SourceDevice == null)
|
||||||
{
|
{
|
||||||
TriList.SetBool(UIBoolJoin.SelectASourceVisible, true);
|
TriList.SetBool(UIBoolJoin.SelectASourceVisible, true);
|
||||||
@@ -863,7 +743,7 @@ namespace PepperDash.Essentials
|
|||||||
void UiSelectSource(string key)
|
void UiSelectSource(string key)
|
||||||
{
|
{
|
||||||
// Run the route and when it calls back, show the source
|
// Run the route and when it calls back, show the source
|
||||||
CurrentRoom.RunRouteAction(key);
|
CurrentRoom.RunRouteAction(key, new Action(() => { }));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1014,7 +894,7 @@ namespace PepperDash.Essentials
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Helper for property setter. Sets the panel to the given room, latching up all functionality
|
/// Helper for property setter. Sets the panel to the given room, latching up all functionality
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void RefreshCurrentRoom(IEssentialsHuddleVtc1Room room)
|
void RefreshCurrentRoom(EssentialsHuddleVtc1Room room)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (_CurrentRoom != null)
|
if (_CurrentRoom != null)
|
||||||
@@ -1032,18 +912,6 @@ namespace PepperDash.Essentials
|
|||||||
_CurrentRoom.IsWarmingUpFeedback.OutputChange -= CurrentRoom_IsWarmingFeedback_OutputChange;
|
_CurrentRoom.IsWarmingUpFeedback.OutputChange -= CurrentRoom_IsWarmingFeedback_OutputChange;
|
||||||
_CurrentRoom.IsCoolingDownFeedback.OutputChange -= CurrentRoom_IsCoolingDownFeedback_OutputChange;
|
_CurrentRoom.IsCoolingDownFeedback.OutputChange -= CurrentRoom_IsCoolingDownFeedback_OutputChange;
|
||||||
_CurrentRoom.InCallFeedback.OutputChange -= CurrentRoom_InCallFeedback_OutputChange;
|
_CurrentRoom.InCallFeedback.OutputChange -= CurrentRoom_InCallFeedback_OutputChange;
|
||||||
|
|
||||||
var scheduleAwareCodec = _CurrentRoom.VideoCodec as IHasScheduleAwareness;
|
|
||||||
if (scheduleAwareCodec != null)
|
|
||||||
{
|
|
||||||
scheduleAwareCodec.CodecSchedule.MeetingsListHasChanged -= CodecSchedule_MeetingsListHasChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
var meetingInfoCodec = _CurrentRoom.VideoCodec as IHasMeetingInfo;
|
|
||||||
if (meetingInfoCodec != null)
|
|
||||||
{
|
|
||||||
meetingInfoCodec.MeetingInfoChanged -= meetingInfoCodec_MeetingInfoChanged;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_CurrentRoom = room;
|
_CurrentRoom = room;
|
||||||
@@ -1076,23 +944,9 @@ namespace PepperDash.Essentials
|
|||||||
_CurrentRoom.CurrentSourceChange += CurrentRoom_SourceInfoChange;
|
_CurrentRoom.CurrentSourceChange += CurrentRoom_SourceInfoChange;
|
||||||
RefreshSourceInfo();
|
RefreshSourceInfo();
|
||||||
|
|
||||||
|
if (_CurrentRoom.VideoCodec is IHasScheduleAwareness)
|
||||||
var scheduleAwareCodec = _CurrentRoom.VideoCodec as IHasScheduleAwareness;
|
|
||||||
if (scheduleAwareCodec != null)
|
|
||||||
{
|
{
|
||||||
scheduleAwareCodec.CodecSchedule.MeetingsListHasChanged += CodecSchedule_MeetingsListHasChanged;
|
(_CurrentRoom.VideoCodec as IHasScheduleAwareness).CodecSchedule.MeetingsListHasChanged += CodecSchedule_MeetingsListHasChanged;
|
||||||
}
|
|
||||||
|
|
||||||
var meetingInfoCodec = _CurrentRoom.VideoCodec as IHasMeetingInfo;
|
|
||||||
if (meetingInfoCodec != null)
|
|
||||||
{
|
|
||||||
meetingInfoCodec.MeetingInfoChanged += new EventHandler<MeetingInfoEventArgs>(meetingInfoCodec_MeetingInfoChanged);
|
|
||||||
|
|
||||||
CallListOrMeetingInfoPopoverVisibilityJoin = UIBoolJoin.HeaderMeetingInfoVisible;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CallListOrMeetingInfoPopoverVisibilityJoin = UIBoolJoin.HeaderActiveCallsListVisible;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CallSharingInfoVisibleFeedback = new BoolFeedback(() => _CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue);
|
CallSharingInfoVisibleFeedback = new BoolFeedback(() => _CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue);
|
||||||
@@ -1104,8 +958,7 @@ namespace PepperDash.Essentials
|
|||||||
if (_CurrentRoom != null)
|
if (_CurrentRoom != null)
|
||||||
_CurrentRoom.CurrentSourceChange += new SourceInfoChangeHandler(CurrentRoom_CurrentSingleSourceChange);
|
_CurrentRoom.CurrentSourceChange += new SourceInfoChangeHandler(CurrentRoom_CurrentSingleSourceChange);
|
||||||
|
|
||||||
// Moved to EssentialsVideoCodecUiDriver
|
TriList.SetSigFalseAction(UIBoolJoin.CallStopSharingPress, () => _CurrentRoom.RunRouteAction("codecOsd", _CurrentRoom.SourceListKey));
|
||||||
//TriList.SetSigFalseAction(UIBoolJoin.CallStopSharingPress, () => _CurrentRoom.RunRouteAction("codecOsd", _CurrentRoom.SourceListKey));
|
|
||||||
|
|
||||||
(Parent as EssentialsPanelMainInterfaceDriver).HeaderDriver.SetupHeaderButtons(this, CurrentRoom);
|
(Parent as EssentialsPanelMainInterfaceDriver).HeaderDriver.SetupHeaderButtons(this, CurrentRoom);
|
||||||
}
|
}
|
||||||
@@ -1116,27 +969,7 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void meetingInfoCodec_MeetingInfoChanged(object sender, MeetingInfoEventArgs e)
|
void SetCurrentRoom(EssentialsHuddleVtc1Room room)
|
||||||
{
|
|
||||||
if (e.Info == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TriList.SetString(UIStringJoin.MeetingIdText, e.Info.Id);
|
|
||||||
TriList.SetString(UIStringJoin.MeetingHostText, e.Info.Host);
|
|
||||||
TriList.SetString(UIStringJoin.MeetingNameText, e.Info.Name);
|
|
||||||
|
|
||||||
TriList.SetString(UIStringJoin.MeetingPasswordText, e.Info.Password);
|
|
||||||
// Show the password fields if one is present
|
|
||||||
TriList.SetBool(UIBoolJoin.MeetingPasswordVisible, !string.IsNullOrEmpty(e.Info.Password));
|
|
||||||
|
|
||||||
TriList.SetString(UIStringJoin.CallSharedSourceNameText, e.Info.ShareStatus);
|
|
||||||
|
|
||||||
TriList.SetString(UIStringJoin.MeetingLeaveText, e.Info.IsHost ? "End Meeting" : "Leave Meeting");
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetCurrentRoom(IEssentialsHuddleVtc1Room room)
|
|
||||||
{
|
{
|
||||||
if (_CurrentRoom == room) return;
|
if (_CurrentRoom == room) return;
|
||||||
// Disconnect current (probably never called)
|
// Disconnect current (probably never called)
|
||||||
@@ -1171,7 +1004,7 @@ namespace PepperDash.Essentials
|
|||||||
UpdateMCJoins(_CurrentRoom);
|
UpdateMCJoins(_CurrentRoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateMCJoins(IEssentialsHuddleVtc1Room room)
|
void UpdateMCJoins(EssentialsHuddleVtc1Room room)
|
||||||
{
|
{
|
||||||
TriList.SetString(UIStringJoin.RoomMcUrl, room.MobileControlRoomBridge.McServerUrl);
|
TriList.SetString(UIStringJoin.RoomMcUrl, room.MobileControlRoomBridge.McServerUrl);
|
||||||
TriList.SetString(UIStringJoin.RoomMcQrCodeUrl, room.MobileControlRoomBridge.QrCodeUrl);
|
TriList.SetString(UIStringJoin.RoomMcQrCodeUrl, room.MobileControlRoomBridge.QrCodeUrl);
|
||||||
@@ -1202,7 +1035,7 @@ namespace PepperDash.Essentials
|
|||||||
if (CurrentRoom.CurrentSourceInfo != null && CurrentRoom.CurrentSourceInfo.DisableCodecSharing)
|
if (CurrentRoom.CurrentSourceInfo != null && CurrentRoom.CurrentSourceInfo.DisableCodecSharing)
|
||||||
{
|
{
|
||||||
Debug.Console(1, CurrentRoom, "Transitioning to in-call, cancelling non-sharable source");
|
Debug.Console(1, CurrentRoom, "Transitioning to in-call, cancelling non-sharable source");
|
||||||
CurrentRoom.RunRouteAction("codecOsd");
|
CurrentRoom.RunRouteAction("codecOsd", CurrentRoom.SourceListKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1249,8 +1082,7 @@ namespace PepperDash.Essentials
|
|||||||
Debug.Console(1, "**** KEY {0}", kvp.Key);
|
Debug.Console(1, "**** KEY {0}", kvp.Key);
|
||||||
|
|
||||||
}
|
}
|
||||||
_sourceListCount = (i - 1);
|
SourceStagingSrl.Count = (ushort)(i - 1);
|
||||||
SourceStagingSrl.Count = (ushort)_sourceListCount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1273,30 +1105,6 @@ namespace PepperDash.Essentials
|
|||||||
/// <param name="type"></param>
|
/// <param name="type"></param>
|
||||||
void CurrentRoom_CurrentSingleSourceChange(SourceListItem info, ChangeType type)
|
void CurrentRoom_CurrentSingleSourceChange(SourceListItem info, ChangeType type)
|
||||||
{
|
{
|
||||||
Debug.Console(1, "AvFunctionsDriver: CurrentSingleSourceChange");
|
|
||||||
|
|
||||||
// Show the Select a source subpage
|
|
||||||
if (TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "AvFunctionsDriver: CurrentSingleSourceChange SourceStagingBarVisisble: true");
|
|
||||||
|
|
||||||
if (_CurrentRoom.CurrentSourceInfo == null || (_CurrentRoom.VideoCodec != null && _CurrentRoom.CurrentSourceInfo.SourceDevice.Key == _CurrentRoom.VideoCodec.OsdSource.Key))
|
|
||||||
{
|
|
||||||
Debug.Console(1, "AvFunctionsDriver: CurrentSingleSourceChange Showing SelectASourceVisible");
|
|
||||||
TriList.SetBool(UIBoolJoin.SelectASourceVisible, true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TriList.SetBool(UIBoolJoin.SelectASourceVisible, false);
|
|
||||||
Debug.Console(1, "AvFunctionsDriver: CurrentSingleSourceChange Hiding SelectASourceVisible");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(1, "AvFunctionsDriver: CurrentSingleSourceChange Hiding SelectASourceVisible");
|
|
||||||
TriList.SetBool(UIBoolJoin.SelectASourceVisible, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue && _CurrentRoom.CurrentSourceInfo != null)
|
if (_CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue && _CurrentRoom.CurrentSourceInfo != null)
|
||||||
TriList.StringInput[UIStringJoin.CallSharedSourceNameText].StringValue = _CurrentRoom.CurrentSourceInfo.PreferredName;
|
TriList.StringInput[UIStringJoin.CallSharedSourceNameText].StringValue = _CurrentRoom.CurrentSourceInfo.PreferredName;
|
||||||
}
|
}
|
||||||
@@ -1339,6 +1147,7 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
// See if this is helpful or if the callback response in the codec class maybe doesn't come it time?
|
// See if this is helpful or if the callback response in the codec class maybe doesn't come it time?
|
||||||
// Let's build list from event
|
// Let's build list from event
|
||||||
|
// CurrentRoom.ScheduleSource.GetSchedule();
|
||||||
|
|
||||||
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListIcon, "Calendar");
|
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListIcon, "Calendar");
|
||||||
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Today's Meetings");
|
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Today's Meetings");
|
||||||
@@ -1347,8 +1156,8 @@ namespace PepperDash.Essentials
|
|||||||
foreach (var m in CurrentRoom.ScheduleSource.CodecSchedule.Meetings)
|
foreach (var m in CurrentRoom.ScheduleSource.CodecSchedule.Meetings)
|
||||||
{
|
{
|
||||||
i++;
|
i++;
|
||||||
MeetingOrContactMethodModalSrl.StringInputSig(i, 1).StringValue = m.StartTime.ToString("t", Global.Culture);
|
MeetingOrContactMethodModalSrl.StringInputSig(i, 1).StringValue = m.StartTime.ToShortTimeString();
|
||||||
MeetingOrContactMethodModalSrl.StringInputSig(i, 2).StringValue = m.EndTime.ToString("t", Global.Culture);
|
MeetingOrContactMethodModalSrl.StringInputSig(i, 2).StringValue = m.EndTime.ToShortTimeString();
|
||||||
MeetingOrContactMethodModalSrl.StringInputSig(i, 3).StringValue = m.Title;
|
MeetingOrContactMethodModalSrl.StringInputSig(i, 3).StringValue = m.Title;
|
||||||
MeetingOrContactMethodModalSrl.StringInputSig(i, 4).StringValue = string.Format("<br>{0}",m.Organizer);
|
MeetingOrContactMethodModalSrl.StringInputSig(i, 4).StringValue = string.Format("<br>{0}",m.Organizer);
|
||||||
MeetingOrContactMethodModalSrl.StringInputSig(i, 5).StringValue = "Join";
|
MeetingOrContactMethodModalSrl.StringInputSig(i, 5).StringValue = "Join";
|
||||||
@@ -1393,12 +1202,12 @@ namespace PepperDash.Essentials
|
|||||||
var value = _CurrentRoom.OnFeedback.BoolValue;
|
var value = _CurrentRoom.OnFeedback.BoolValue;
|
||||||
TriList.BooleanInput[UIBoolJoin.RoomIsOn].BoolValue = value;
|
TriList.BooleanInput[UIBoolJoin.RoomIsOn].BoolValue = value;
|
||||||
|
|
||||||
//TriList.BooleanInput[StartPageVisibleJoin].BoolValue = !value;
|
TriList.BooleanInput[StartPageVisibleJoin].BoolValue = !value;
|
||||||
|
|
||||||
if (value) //ON
|
if (value) //ON
|
||||||
{
|
{
|
||||||
SetupActivityFooterWhenRoomOn();
|
SetupActivityFooterWhenRoomOn();
|
||||||
//TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false;
|
TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false;
|
||||||
TriList.BooleanInput[UIBoolJoin.VolumeDualMute1Visible].BoolValue = true;
|
TriList.BooleanInput[UIBoolJoin.VolumeDualMute1Visible].BoolValue = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1409,8 +1218,9 @@ namespace PepperDash.Essentials
|
|||||||
VCDriver.Hide();
|
VCDriver.Hide();
|
||||||
SetupActivityFooterWhenRoomOff();
|
SetupActivityFooterWhenRoomOff();
|
||||||
ShowLogo();
|
ShowLogo();
|
||||||
//TriList.BooleanInput[UIBoolJoin.VolumeDualMute1Visible].BoolValue = false;
|
SetActivityFooterFeedbacks();
|
||||||
//TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = false;
|
TriList.BooleanInput[UIBoolJoin.VolumeDualMute1Visible].BoolValue = false;
|
||||||
|
TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = false;
|
||||||
// Clear this so that the pesky meeting warning can resurface every minute when off
|
// Clear this so that the pesky meeting warning can resurface every minute when off
|
||||||
LastMeetingDismissedId = null;
|
LastMeetingDismissedId = null;
|
||||||
}
|
}
|
||||||
@@ -1633,7 +1443,7 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IAVWithVCDriver : IAVDriver
|
public interface IAVWithVCDriver : IAVDriver
|
||||||
{
|
{
|
||||||
IEssentialsHuddleVtc1Room CurrentRoom { get; }
|
EssentialsHuddleVtc1Room CurrentRoom { get; }
|
||||||
|
|
||||||
PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; }
|
PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1645,8 +1455,6 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
void PrepareForCodecIncomingCall();
|
void PrepareForCodecIncomingCall();
|
||||||
|
|
||||||
uint CallListOrMeetingInfoPopoverVisibilityJoin { get; }
|
|
||||||
|
|
||||||
SubpageReferenceList MeetingOrContactMethodModalSrl { get; }
|
SubpageReferenceList MeetingOrContactMethodModalSrl { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
var prevJoin = CurrentJoin;
|
var prevJoin = CurrentJoin;
|
||||||
var wasShown = _IsShown;
|
var wasShown = _IsShown;
|
||||||
//Debug.Console(2, "Trilist {0:X2}, interlock swapping {1} for {2}", TriList.ID, CurrentJoin, join);
|
Debug.Console(2, "Trilist {0:X2}, interlock swapping {1} for {2}", TriList.ID, CurrentJoin, join);
|
||||||
if (CurrentJoin == join && TriList.BooleanInput[join].BoolValue)
|
if (CurrentJoin == join && TriList.BooleanInput[join].BoolValue)
|
||||||
return;
|
return;
|
||||||
SetButDontShow(join);
|
SetButDontShow(join);
|
||||||
@@ -71,7 +71,7 @@ namespace PepperDash.Essentials
|
|||||||
var prevJoin = CurrentJoin;
|
var prevJoin = CurrentJoin;
|
||||||
var wasShown = IsShown;
|
var wasShown = IsShown;
|
||||||
|
|
||||||
//Debug.Console(2, "Trilist {0:X2}, interlock swapping {1} for {2}", TriList.ID, CurrentJoin, join);
|
Debug.Console(2, "Trilist {0:X2}, interlock swapping {1} for {2}", TriList.ID, CurrentJoin, join);
|
||||||
if (CurrentJoin == join)
|
if (CurrentJoin == join)
|
||||||
HideAndClear();
|
HideAndClear();
|
||||||
else
|
else
|
||||||
@@ -92,7 +92,7 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
var prevJoin = CurrentJoin;
|
var prevJoin = CurrentJoin;
|
||||||
var wasShown = IsShown;
|
var wasShown = IsShown;
|
||||||
//Debug.Console(2, "Trilist {0:X2}, interlock hiding {1}", TriList.ID, CurrentJoin);
|
Debug.Console(2, "Trilist {0:X2}, interlock hiding {1}", TriList.ID, CurrentJoin);
|
||||||
Hide();
|
Hide();
|
||||||
CurrentJoin = 0;
|
CurrentJoin = 0;
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ namespace PepperDash.Essentials
|
|||||||
var prevJoin = CurrentJoin;
|
var prevJoin = CurrentJoin;
|
||||||
var wasShown = IsShown;
|
var wasShown = IsShown;
|
||||||
|
|
||||||
//Debug.Console(2, "Trilist {0:X2}, interlock hiding {1}", TriList.ID, CurrentJoin);
|
Debug.Console(2, "Trilist {0:X2}, interlock hiding {1}", TriList.ID, CurrentJoin);
|
||||||
if (CurrentJoin > 0)
|
if (CurrentJoin > 0)
|
||||||
{
|
{
|
||||||
TriList.BooleanInput[CurrentJoin].BoolValue = false;
|
TriList.BooleanInput[CurrentJoin].BoolValue = false;
|
||||||
@@ -125,7 +125,7 @@ namespace PepperDash.Essentials
|
|||||||
var prevJoin = CurrentJoin;
|
var prevJoin = CurrentJoin;
|
||||||
var wasShown = IsShown;
|
var wasShown = IsShown;
|
||||||
|
|
||||||
//Debug.Console(2, "Trilist {0:X2}, interlock showing {1}", TriList.ID, CurrentJoin);
|
Debug.Console(2, "Trilist {0:X2}, interlock showing {1}", TriList.ID, CurrentJoin);
|
||||||
if (CurrentJoin > 0)
|
if (CurrentJoin > 0)
|
||||||
{
|
{
|
||||||
TriList.BooleanInput[CurrentJoin].BoolValue = true;
|
TriList.BooleanInput[CurrentJoin].BoolValue = true;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace PepperDash.Essentials
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Driver responsible for controlling the screenshaver showing the client logo, MC connection information and QR Code. Moves the elements around to prevent screen burn in
|
/// Driver responsible for controlling the screenshaver showing the client logo, MC connection information and QR Code. Moves the elements around to prevent screen burn in
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ScreenSaverController : PanelDriverBase, IDisposable
|
public class ScreenSaverController : PanelDriverBase
|
||||||
{
|
{
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -42,7 +42,7 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
PositionInterlock = new JoinedSigInterlock(parent.TriList);
|
PositionInterlock = new JoinedSigInterlock(parent.TriList);
|
||||||
|
|
||||||
var cmdName = String.Format("shwscrsvr-{0:X2}", parent.TriList.ID);
|
var cmdName = String.Format("shwscrsvr-{0}", parent.TriList.ID);
|
||||||
|
|
||||||
CrestronConsole.AddNewConsoleCommand((o) => Show(), cmdName, "Shows Panel Screensaver", ConsoleAccessLevelEnum.AccessOperator);
|
CrestronConsole.AddNewConsoleCommand((o) => Show(), cmdName, "Shows Panel Screensaver", ConsoleAccessLevelEnum.AccessOperator);
|
||||||
|
|
||||||
@@ -51,8 +51,6 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
public override void Show()
|
public override void Show()
|
||||||
{
|
{
|
||||||
//Debug.Console(2, "Showing ScreenSaverController: {0:X2}", TriList.ID);
|
|
||||||
|
|
||||||
if (_parent.AvDriver != null)
|
if (_parent.AvDriver != null)
|
||||||
{
|
{
|
||||||
_parent.AvDriver.PopupInterlock.ShowInterlocked(UIBoolJoin.MCScreenSaverVisible);
|
_parent.AvDriver.PopupInterlock.ShowInterlocked(UIBoolJoin.MCScreenSaverVisible);
|
||||||
@@ -67,11 +65,10 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
public override void Hide()
|
public override void Hide()
|
||||||
{
|
{
|
||||||
//Debug.Console(2, "Hiding ScreenSaverController: {0:X2}", TriList.ID);
|
Debug.Console(1, "Hiding ScreenSaverController");
|
||||||
|
|
||||||
if (PositionTimer != null)
|
if (PositionTimer != null)
|
||||||
{
|
{
|
||||||
//Debug.Console(2, "Stopping PositionTimer: {0:X2}", TriList.ID);
|
|
||||||
PositionTimer.Stop();
|
PositionTimer.Stop();
|
||||||
PositionTimer.Dispose();
|
PositionTimer.Dispose();
|
||||||
PositionTimer = null;
|
PositionTimer = null;
|
||||||
@@ -89,8 +86,6 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
void StartPositionTimer()
|
void StartPositionTimer()
|
||||||
{
|
{
|
||||||
//Debug.Console(2, "Starting Position Timer: {0:X2}", TriList.ID);
|
|
||||||
|
|
||||||
if (PositionTimer == null)
|
if (PositionTimer == null)
|
||||||
{
|
{
|
||||||
PositionTimer = new CTimer((o) => PositionTimerExpired(), PositionTimeoutMs);
|
PositionTimer = new CTimer((o) => PositionTimerExpired(), PositionTimeoutMs);
|
||||||
@@ -122,7 +117,7 @@ namespace PepperDash.Essentials
|
|||||||
CurrentPositionIndex = 0;
|
CurrentPositionIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Debug.Console(2, "ScreenSaver Position Timer Expired: Setting new position: {0} ID: {1:X2}", CurrentPositionIndex, TriList.ID);
|
Debug.Console(1, "ScreenSaver Position Timer Expired: Setting new position: {0}", CurrentPositionIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -134,19 +129,9 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
void ClearAllPositions()
|
void ClearAllPositions()
|
||||||
{
|
{
|
||||||
//Debug.Console(2, "Hiding all screensaver positions: {0:X2}", TriList.ID);
|
Debug.Console(1, "Hiding all screensaver positions");
|
||||||
|
|
||||||
PositionInterlock.HideAndClear();
|
PositionInterlock.HideAndClear();
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IDisposable Members
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
Hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -38,7 +38,7 @@ namespace PepperDash.Essentials
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sets feedback for the given room
|
/// Sets feedback for the given room
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SetFeedbackForRoom(IEssentialsHuddleSpaceRoom room)
|
public void SetFeedbackForRoom(EssentialsHuddleSpaceRoom room)
|
||||||
{
|
{
|
||||||
var itemToSet = Items.FirstOrDefault(i => i.Room == room);
|
var itemToSet = Items.FirstOrDefault(i => i.Room == room);
|
||||||
if (itemToSet != null)
|
if (itemToSet != null)
|
||||||
@@ -48,11 +48,11 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
public class SmartObjectRoomsListItem
|
public class SmartObjectRoomsListItem
|
||||||
{
|
{
|
||||||
public IEssentialsHuddleSpaceRoom Room { get; private set; }
|
public EssentialsHuddleSpaceRoom Room { get; private set; }
|
||||||
SmartObjectRoomsList Parent;
|
SmartObjectRoomsList Parent;
|
||||||
public uint Index { get; private set; }
|
public uint Index { get; private set; }
|
||||||
|
|
||||||
public SmartObjectRoomsListItem(IEssentialsHuddleSpaceRoom room, uint index, SmartObjectRoomsList parent,
|
public SmartObjectRoomsListItem(EssentialsHuddleSpaceRoom room, uint index, SmartObjectRoomsList parent,
|
||||||
Action<bool> buttonAction)
|
Action<bool> buttonAction)
|
||||||
{
|
{
|
||||||
Room = room;
|
Room = room;
|
||||||
|
|||||||
@@ -12,5 +12,5 @@ namespace PepperDash.Essentials
|
|||||||
///// <summary>
|
///// <summary>
|
||||||
///// The handler type for a Room's SourceInfoChange
|
///// The handler type for a Room's SourceInfoChange
|
||||||
///// </summary>
|
///// </summary>
|
||||||
//public delegate void SourceInfoChangeHandler(IEssentialsRoom room, SourceListItem info, ChangeType type);
|
//public delegate void SourceInfoChangeHandler(EssentialsRoomBase room, SourceListItem info, ChangeType type);
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Globalization;
|
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
using Crestron.SimplSharpPro;
|
using Crestron.SimplSharpPro;
|
||||||
@@ -15,7 +14,6 @@ using PepperDash.Essentials.Core.SmartObjects;
|
|||||||
using PepperDash.Essentials.Core.Touchpanels.Keyboards;
|
using PepperDash.Essentials.Core.Touchpanels.Keyboards;
|
||||||
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.VideoCodec.Interfaces;
|
|
||||||
using PepperDash.Essentials.Devices.Common.Cameras;
|
using PepperDash.Essentials.Devices.Common.Cameras;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.UIDrivers.VC
|
namespace PepperDash.Essentials.UIDrivers.VC
|
||||||
@@ -85,9 +83,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
StringBuilder SearchStringBuilder = new StringBuilder();
|
StringBuilder SearchStringBuilder = new StringBuilder();
|
||||||
BoolFeedback SearchStringBackspaceVisibleFeedback;
|
BoolFeedback SearchStringBackspaceVisibleFeedback;
|
||||||
|
|
||||||
StringFeedback PasswordStringFeedback;
|
|
||||||
StringBuilder PasswordStringBuilder = new StringBuilder();
|
|
||||||
|
|
||||||
ModalDialog IncomingCallModal;
|
ModalDialog IncomingCallModal;
|
||||||
|
|
||||||
eKeypadMode KeypadMode;
|
eKeypadMode KeypadMode;
|
||||||
@@ -128,24 +123,26 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
|
|
||||||
codec.CallStatusChange += new EventHandler<CodecCallStatusItemChangeEventArgs>(Codec_CallStatusChange);
|
codec.CallStatusChange += new EventHandler<CodecCallStatusItemChangeEventArgs>(Codec_CallStatusChange);
|
||||||
|
|
||||||
|
// If the codec is ready, then get the values we want, otherwise wait
|
||||||
|
if (Codec.IsReady)
|
||||||
|
Codec_IsReady();
|
||||||
|
else
|
||||||
|
codec.IsReadyChange += (o, a) => Codec_IsReady();
|
||||||
|
|
||||||
//InCall = new BoolFeedback(() => false);
|
//InCall = new BoolFeedback(() => false);
|
||||||
LocalPrivacyIsMuted = new BoolFeedback(() => false);
|
LocalPrivacyIsMuted = new BoolFeedback(() => false);
|
||||||
|
|
||||||
VCControlsInterlock = new JoinedSigInterlock(triList);
|
VCControlsInterlock = new JoinedSigInterlock(triList);
|
||||||
VCCameraControlModeInterlock = new JoinedSigInterlock(triList);
|
VCCameraControlModeInterlock = new JoinedSigInterlock(triList);
|
||||||
|
|
||||||
VCControlsInterlock.HideAndClear();
|
|
||||||
|
|
||||||
/* if (CodecHasFavorites || codec is IHasZoomRoomLayouts) //Checking for Zoom Room...picked a ZoomRoom specific interface to check for
|
if (CodecHasFavorites)
|
||||||
VCControlsInterlock.SetButDontShow(UIBoolJoin.VCKeypadWithFavoritesVisible);
|
VCControlsInterlock.SetButDontShow(UIBoolJoin.VCKeypadWithFavoritesVisible);
|
||||||
else
|
else
|
||||||
VCControlsInterlock.SetButDontShow(UIBoolJoin.VCKeypadVisible); */
|
VCControlsInterlock.SetButDontShow(UIBoolJoin.VCKeypadVisible);
|
||||||
|
|
||||||
StagingBarsInterlock = new JoinedSigInterlock(triList);
|
StagingBarsInterlock = new JoinedSigInterlock(triList);
|
||||||
if(Codec is IHasCallHistory)
|
StagingBarsInterlock.SetButDontShow(UIBoolJoin.VCStagingInactivePopoverVisible);
|
||||||
StagingBarsInterlock.SetButDontShow(UIBoolJoin.VCStagingInactivePopoverWithRecentsVisible);
|
|
||||||
else
|
|
||||||
StagingBarsInterlock.SetButDontShow(UIBoolJoin.VCStagingInactivePopoverWithoutRecentsVisible);
|
|
||||||
|
|
||||||
StagingButtonsFeedbackInterlock = new JoinedSigInterlock(triList);
|
StagingButtonsFeedbackInterlock = new JoinedSigInterlock(triList);
|
||||||
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress);
|
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress);
|
||||||
@@ -153,8 +150,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
// Return formatted when dialing, straight digits when in call
|
// Return formatted when dialing, straight digits when in call
|
||||||
DialStringFeedback = new StringFeedback(() =>
|
DialStringFeedback = new StringFeedback(() =>
|
||||||
{
|
{
|
||||||
// Format the number feedback if in dial mode and the codec is not IHasStartMeeting (ZoomRoom)
|
if (KeypadMode == eKeypadMode.Dial)
|
||||||
if (KeypadMode == eKeypadMode.Dial && !(Codec is IHasStartMeeting))
|
|
||||||
return GetFormattedDialString(DialStringBuilder.ToString());
|
return GetFormattedDialString(DialStringBuilder.ToString());
|
||||||
else
|
else
|
||||||
return DialStringBuilder.ToString();
|
return DialStringBuilder.ToString();
|
||||||
@@ -181,23 +177,9 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
});
|
});
|
||||||
SearchStringFeedback.LinkInputSig(triList.StringInput[UIStringJoin.CodecDirectorySearchEntryText]);
|
SearchStringFeedback.LinkInputSig(triList.StringInput[UIStringJoin.CodecDirectorySearchEntryText]);
|
||||||
|
|
||||||
PasswordStringFeedback = new StringFeedback(() =>
|
|
||||||
{
|
|
||||||
if (PasswordStringBuilder.Length > 0)
|
|
||||||
{
|
|
||||||
Parent.Keyboard.EnableGoButton();
|
|
||||||
return PasswordStringBuilder.ToString();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Parent.Keyboard.DisableGoButton();
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
PasswordStringFeedback.LinkInputSig(triList.StringInput[UIStringJoin.PasswordPromptPasswordText]);
|
|
||||||
|
|
||||||
SetupDirectoryList();
|
SetupDirectoryList();
|
||||||
|
|
||||||
|
|
||||||
SearchStringBackspaceVisibleFeedback = new BoolFeedback(() => SearchStringBuilder.Length > 0);
|
SearchStringBackspaceVisibleFeedback = new BoolFeedback(() => SearchStringBuilder.Length > 0);
|
||||||
SearchStringBackspaceVisibleFeedback.LinkInputSig(triList.BooleanInput[UIBoolJoin.VCDirectoryBackspaceVisible]);
|
SearchStringBackspaceVisibleFeedback.LinkInputSig(triList.BooleanInput[UIBoolJoin.VCDirectoryBackspaceVisible]);
|
||||||
|
|
||||||
@@ -214,18 +196,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
triList.SetSigHeldAction(UIBoolJoin.VCDirectoryBackspacePress, 500,
|
triList.SetSigHeldAction(UIBoolJoin.VCDirectoryBackspacePress, 500,
|
||||||
StartSearchBackspaceRepeat, StopSearchBackspaceRepeat, SearchKeypadBackspacePress);
|
StartSearchBackspaceRepeat, StopSearchBackspaceRepeat, SearchKeypadBackspacePress);
|
||||||
|
|
||||||
|
|
||||||
if (Codec is IPasswordPrompt)
|
|
||||||
{
|
|
||||||
SetupPasswordPrompt();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// If the codec is ready, then get the values we want, otherwise wait
|
|
||||||
if (Codec.IsReady)
|
|
||||||
Codec_IsReady();
|
|
||||||
else
|
|
||||||
codec.IsReadyChange += (o, a) => Codec_IsReady();
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -321,20 +291,24 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
void Codec_CallStatusChange(object sender, CodecCallStatusItemChangeEventArgs e)
|
void Codec_CallStatusChange(object sender, CodecCallStatusItemChangeEventArgs e)
|
||||||
{
|
{
|
||||||
var call = e.CallItem;
|
var call = e.CallItem;
|
||||||
var meetingInfoSender = sender as IHasMeetingInfo;
|
|
||||||
|
|
||||||
switch (e.CallItem.Status)
|
switch (e.CallItem.Status)
|
||||||
{
|
{
|
||||||
case eCodecCallStatus.Connected:
|
case eCodecCallStatus.Connected:
|
||||||
// fire at SRL item
|
// fire at SRL item
|
||||||
|
KeypadMode = eKeypadMode.DTMF;
|
||||||
|
DialStringBuilder.Remove(0, DialStringBuilder.Length);
|
||||||
|
DialStringFeedback.FireUpdate();
|
||||||
|
DialStringTextCheckEnables();
|
||||||
Parent.ShowNotificationRibbon("Connected", 2000);
|
Parent.ShowNotificationRibbon("Connected", 2000);
|
||||||
OnCallConnected();
|
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress);
|
||||||
|
ShowKeypad();
|
||||||
|
((Parent.CurrentRoom as IHasCurrentVolumeControls).CurrentVolumeControls as IBasicVolumeWithFeedback).MuteOff();
|
||||||
//VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCKeypadVisible);
|
//VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCKeypadVisible);
|
||||||
break;
|
break;
|
||||||
case eCodecCallStatus.Connecting:
|
case eCodecCallStatus.Connecting:
|
||||||
// fire at SRL item
|
// fire at SRL item
|
||||||
Parent.ShowNotificationRibbon("Connecting", 0);
|
Parent.ShowNotificationRibbon("Connecting", 0);
|
||||||
OnCallConnected();
|
|
||||||
break;
|
break;
|
||||||
case eCodecCallStatus.Dialing:
|
case eCodecCallStatus.Dialing:
|
||||||
Parent.ShowNotificationRibbon("Connecting", 0);
|
Parent.ShowNotificationRibbon("Connecting", 0);
|
||||||
@@ -350,10 +324,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
DialStringBuilder.Remove(0, DialStringBuilder.Length);
|
DialStringBuilder.Remove(0, DialStringBuilder.Length);
|
||||||
DialStringFeedback.FireUpdate();
|
DialStringFeedback.FireUpdate();
|
||||||
Parent.ShowNotificationRibbon("Disconnected", 2000);
|
Parent.ShowNotificationRibbon("Disconnected", 2000);
|
||||||
Debug.Console(0, "Setting Connect Button mode to 0");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case eCodecCallStatus.Disconnecting:
|
case eCodecCallStatus.Disconnecting:
|
||||||
break;
|
break;
|
||||||
@@ -374,32 +345,16 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
ShowIncomingModal(call);
|
ShowIncomingModal(call);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
TriList.UShortInput[UIUshortJoin.VCStagingConnectButtonMode].UShortValue = (ushort)(Codec.IsInCall ? 1 : 0);
|
||||||
if (meetingInfoSender != null && Codec.IsInCall)
|
|
||||||
{
|
|
||||||
var meetingInfo = meetingInfoSender.MeetingInfo;
|
|
||||||
|
|
||||||
TriList.UShortInput[UIUshortJoin.VCStagingConnectButtonMode].UShortValue =
|
|
||||||
(ushort) (meetingInfo.IsSharingMeeting ? 2 : 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
TriList.UShortInput[UIUshortJoin.VCStagingConnectButtonMode].UShortValue =
|
|
||||||
(ushort) (Codec.IsInCall ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint stageJoin;
|
uint stageJoin;
|
||||||
if (Codec.IsInCall)
|
if (Codec.IsInCall)
|
||||||
stageJoin = UIBoolJoin.VCStagingActivePopoverVisible;
|
stageJoin = UIBoolJoin.VCStagingActivePopoverVisible;
|
||||||
else
|
else
|
||||||
{
|
stageJoin = UIBoolJoin.VCStagingInactivePopoverVisible;
|
||||||
if (Codec is IHasCallHistory)
|
|
||||||
stageJoin = UIBoolJoin.VCStagingInactivePopoverWithRecentsVisible;
|
|
||||||
else
|
|
||||||
stageJoin = UIBoolJoin.VCStagingInactivePopoverWithoutRecentsVisible;
|
|
||||||
}
|
|
||||||
if (IsVisible)
|
if (IsVisible)
|
||||||
StagingBarsInterlock.ShowInterlocked(stageJoin);
|
StagingBarsInterlock.ShowInterlocked(stageJoin);
|
||||||
else
|
else
|
||||||
@@ -411,36 +366,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
UpdateHeaderActiveCallList();
|
UpdateHeaderActiveCallList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnCallConnected()
|
|
||||||
{
|
|
||||||
HidePasswordPrompt();
|
|
||||||
KeypadMode = eKeypadMode.DTMF;
|
|
||||||
DialStringBuilder.Remove(0, DialStringBuilder.Length);
|
|
||||||
DialStringFeedback.FireUpdate();
|
|
||||||
DialStringTextCheckEnables();
|
|
||||||
|
|
||||||
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress);
|
|
||||||
ShowKeypad();
|
|
||||||
|
|
||||||
UnmuteRoomOnCallConnect();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UnmuteRoomOnCallConnect()
|
|
||||||
{
|
|
||||||
var volControl = Parent.CurrentRoom as IHasCurrentVolumeControls;
|
|
||||||
|
|
||||||
if (volControl == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var currentVolControls = volControl.CurrentVolumeControls as IBasicVolumeWithFeedback;
|
|
||||||
|
|
||||||
if (currentVolControls != null)
|
|
||||||
{
|
|
||||||
currentVolControls.MuteOff();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Redraws the calls list on the header
|
/// Redraws the calls list on the header
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -464,8 +389,8 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
ActiveCallsSRL.Count = (ushort)activeList.Count;
|
ActiveCallsSRL.Count = (ushort)activeList.Count;
|
||||||
|
|
||||||
// If Active Calls list is visible and codec is not in a call, hide the list
|
// If Active Calls list is visible and codec is not in a call, hide the list
|
||||||
if (!Codec.IsInCall && Parent.PopupInterlock.CurrentJoin == Parent.CallListOrMeetingInfoPopoverVisibilityJoin)
|
if (!Codec.IsInCall && Parent.PopupInterlock.CurrentJoin == UIBoolJoin.HeaderActiveCallsListVisible)
|
||||||
Parent.PopupInterlock.ShowInterlockedWithToggle(Parent.CallListOrMeetingInfoPopoverVisibilityJoin);
|
Parent.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HeaderActiveCallsListVisible);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -556,67 +481,20 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
TriList.SetSigFalseAction(UIBoolJoin.VCStagingRecentsPress, ShowRecents);
|
TriList.SetSigFalseAction(UIBoolJoin.VCStagingRecentsPress, ShowRecents);
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.VCStagingCameraPress, ShowCameraControls);
|
TriList.SetSigFalseAction(UIBoolJoin.VCStagingCameraPress, ShowCameraControls);
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.VCStagingConnectPress, ConnectPress);
|
TriList.SetSigFalseAction(UIBoolJoin.VCStagingConnectPress, ConnectPress);
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.VCStagingMeetNowPress, MeetNowPress);
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.CallStopSharingPress, CallStopSharingPress);
|
|
||||||
|
|
||||||
var meetingInfoCodec = Codec as IHasMeetingInfo;
|
|
||||||
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.CallEndPress, () =>
|
TriList.SetSigFalseAction(UIBoolJoin.CallEndPress, () =>
|
||||||
{
|
{
|
||||||
if (Codec.ActiveCalls.Count > 1)
|
if (Codec.ActiveCalls.Count > 1)
|
||||||
{
|
{
|
||||||
Parent.PopupInterlock.ShowInterlocked(Parent.CallListOrMeetingInfoPopoverVisibilityJoin);
|
Parent.PopupInterlock.ShowInterlocked(UIBoolJoin.HeaderActiveCallsListVisible);
|
||||||
}
|
|
||||||
else if (meetingInfoCodec != null && Codec.ActiveCalls.Count == 1)
|
|
||||||
{
|
|
||||||
var meetingInfo = meetingInfoCodec.MeetingInfo;
|
|
||||||
|
|
||||||
if (meetingInfo != null && meetingInfo.IsSharingMeeting)
|
|
||||||
{
|
|
||||||
var presentationMeetingCodec = Codec as IHasPresentationOnlyMeeting;
|
|
||||||
if (presentationMeetingCodec != null)
|
|
||||||
{
|
|
||||||
presentationMeetingCodec.StartNormalMeetingFromSharingOnlyMeeting();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
Codec.EndAllCalls();
|
Codec.EndAllCalls();
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Codec.EndAllCalls();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.CallEndAllConfirmPress, () =>
|
TriList.SetSigFalseAction(UIBoolJoin.CallEndAllConfirmPress, () =>
|
||||||
{
|
{
|
||||||
Parent.PopupInterlock.HideAndClear();
|
Parent.PopupInterlock.HideAndClear();
|
||||||
Codec.EndAllCalls();
|
Codec.EndAllCalls();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
if (meetingInfoCodec != null)
|
|
||||||
{
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.MeetingLeavePress, () =>
|
|
||||||
{
|
|
||||||
Parent.PopupInterlock.HideAndClear();
|
|
||||||
|
|
||||||
if (meetingInfoCodec.MeetingInfo.IsHost)
|
|
||||||
{
|
|
||||||
Codec.EndAllCalls();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var startMeetingCodec = Codec as IHasStartMeeting;
|
|
||||||
if (startMeetingCodec != null)
|
|
||||||
{
|
|
||||||
startMeetingCodec.LeaveMeeting();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetupCameraControls()
|
void SetupCameraControls()
|
||||||
@@ -632,21 +510,16 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
|
|
||||||
VCControlsInterlock.StatusChanged += new EventHandler<StatusChangedEventArgs>(VCControlsInterlock_StatusChanged);
|
VCControlsInterlock.StatusChanged += new EventHandler<StatusChangedEventArgs>(VCControlsInterlock_StatusChanged);
|
||||||
|
|
||||||
var codecOffCameras = Codec as IHasCameraOff;
|
|
||||||
|
|
||||||
var supportsCameraOffMode = Codec.SupportsCameraOff;
|
var codecOffCameras = Codec as IHasCameraOff;
|
||||||
|
|
||||||
var codecAutoCameras = Codec as IHasCameraAutoMode;
|
var codecAutoCameras = Codec as IHasCameraAutoMode;
|
||||||
|
|
||||||
var supportsAutoCameraMode = Codec.SupportsCameraAutoMode;
|
if (codecAutoCameras != null)
|
||||||
|
|
||||||
if (codecAutoCameras != null && supportsAutoCameraMode)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
CameraModeList.SetItemButtonAction(1,(b) => codecAutoCameras.CameraAutoModeOn());
|
CameraModeList.SetItemButtonAction(1,(b) => codecAutoCameras.CameraAutoModeOn());
|
||||||
TriList.SmartObjects[UISmartObjectJoin.VCCameraMode].BooleanInput["Item 1 Visible"].BoolValue = true;
|
TriList.SmartObjects[UISmartObjectJoin.VCCameraMode].BooleanInput["Item 1 Visible"].BoolValue = true;
|
||||||
codecAutoCameras.CameraAutoModeIsOnFeedback.LinkInputSig(CameraModeList.SmartObject.BooleanInput["Item 1 Selected"]);
|
codecAutoCameras.CameraAutoModeIsOnFeedback.LinkInputSig(CameraModeList.SmartObject.BooleanInput["Item 1 Selected"]);
|
||||||
codecAutoCameras.CameraAutoModeIsOnFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.VCCameraAutoModeIsOnFb]);
|
|
||||||
//TriList.SmartObjects[UISmartObjectJoin.VCCameraMode].BooleanOutput["Item 1 Pressed"].SetSigFalseAction(
|
//TriList.SmartObjects[UISmartObjectJoin.VCCameraMode].BooleanOutput["Item 1 Pressed"].SetSigFalseAction(
|
||||||
//() => codecAutoCameras.CameraAutoModeOn());
|
//() => codecAutoCameras.CameraAutoModeOn());
|
||||||
|
|
||||||
@@ -672,7 +545,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Manual button always visible
|
// Manual button always visible
|
||||||
@@ -682,9 +554,8 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
//TriList.SmartObjects[UISmartObjectJoin.VCCameraMode].BooleanOutput["Item 2 Pressed"].SetSigFalseAction(
|
//TriList.SmartObjects[UISmartObjectJoin.VCCameraMode].BooleanOutput["Item 2 Pressed"].SetSigFalseAction(
|
||||||
// () => ShowCameraManualMode());
|
// () => ShowCameraManualMode());
|
||||||
|
|
||||||
if (codecOffCameras != null && supportsCameraOffMode)
|
if (codecOffCameras != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
TriList.SmartObjects[UISmartObjectJoin.VCCameraMode].BooleanInput["Item 3 Visible"].BoolValue = true;
|
TriList.SmartObjects[UISmartObjectJoin.VCCameraMode].BooleanInput["Item 3 Visible"].BoolValue = true;
|
||||||
codecOffCameras.CameraIsOffFeedback.LinkInputSig(CameraModeList.SmartObject.BooleanInput["Item 3 Selected"]);
|
codecOffCameras.CameraIsOffFeedback.LinkInputSig(CameraModeList.SmartObject.BooleanInput["Item 3 Selected"]);
|
||||||
CameraModeList.SetItemButtonAction(3, (b) => codecOffCameras.CameraOff());
|
CameraModeList.SetItemButtonAction(3, (b) => codecOffCameras.CameraOff());
|
||||||
@@ -712,7 +583,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -899,14 +769,12 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
|
|
||||||
if (camerasCodec != null && camerasCodec.SelectedCamera != null)
|
if (camerasCodec != null && camerasCodec.SelectedCamera != null)
|
||||||
{
|
{
|
||||||
Debug.Console(2, "Attempting to map camera actions to selected camera: '{0}'", camerasCodec.SelectedCamera.Key);
|
|
||||||
var dpad = CameraPtzPad;
|
var dpad = CameraPtzPad;
|
||||||
|
|
||||||
var camera = camerasCodec.SelectedCamera as IHasCameraPtzControl;
|
var camera = camerasCodec.SelectedCamera as IHasCameraPtzControl;
|
||||||
if (camera != null)
|
if (camera != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
Debug.Console(2, "Selected camera is IHasCameraPtzControl");
|
|
||||||
if (camerasCodec.SelectedCamera.CanTilt)
|
if (camerasCodec.SelectedCamera.CanTilt)
|
||||||
{
|
{
|
||||||
dpad.SigUp.SetBoolSigAction((b) =>
|
dpad.SigUp.SetBoolSigAction((b) =>
|
||||||
@@ -971,46 +839,25 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(2, "Selected Camera is not IHasCameraPtzControl. No controls to map");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(2, "Codec does not have cameras of selected camera is null");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determines if codec is in manual camera control mode and shows feedback
|
// Determines if codec is in manual camera control mode and shows feedback
|
||||||
void ShowCameraManualMode()
|
void ShowCameraManualMode()
|
||||||
{
|
{
|
||||||
Debug.Console(2, "ShowCameraManualMode");
|
|
||||||
|
|
||||||
var inManualMode = true;
|
var inManualMode = true;
|
||||||
|
|
||||||
var codecOffCameras = Codec as IHasCameraOff;
|
var codecOffCameras = Codec as IHasCameraOff;
|
||||||
|
|
||||||
var codecAutoCameras = Codec as IHasCameraAutoMode;
|
var codecAutoCameras = Codec as IHasCameraAutoMode;
|
||||||
|
|
||||||
var supportsAutoCameras = codecAutoCameras != null && Codec.SupportsCameraAutoMode;
|
|
||||||
|
|
||||||
if (codecOffCameras != null && codecOffCameras.CameraIsOffFeedback.BoolValue)
|
if (codecOffCameras != null && codecOffCameras.CameraIsOffFeedback.BoolValue)
|
||||||
{
|
{
|
||||||
inManualMode = false;
|
inManualMode = false;
|
||||||
|
|
||||||
var codecCameraMute = Codec as IHasCameraMute;
|
|
||||||
|
|
||||||
if (codecCameraMute != null)
|
|
||||||
{
|
|
||||||
codecCameraMute.CameraMuteOff();
|
|
||||||
inManualMode = true;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear auto mode
|
// Clear auto mode
|
||||||
if (supportsAutoCameras)
|
if (codecAutoCameras != null )
|
||||||
{
|
{
|
||||||
if (codecAutoCameras.CameraAutoModeIsOnFeedback.BoolValue)
|
if (codecAutoCameras.CameraAutoModeIsOnFeedback.BoolValue)
|
||||||
{
|
{
|
||||||
@@ -1101,7 +948,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
// if it's today, show a simpler string
|
// if it's today, show a simpler string
|
||||||
string timeText = null;
|
string timeText = null;
|
||||||
if (c.StartTime.Date == DateTime.Now.Date)
|
if (c.StartTime.Date == DateTime.Now.Date)
|
||||||
timeText = c.StartTime.ToString("t", Global.Culture);
|
timeText = c.StartTime.ToShortTimeString();
|
||||||
else if (c.StartTime == DateTime.MinValue)
|
else if (c.StartTime == DateTime.MinValue)
|
||||||
timeText = "";
|
timeText = "";
|
||||||
else
|
else
|
||||||
@@ -1158,20 +1005,21 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
void SetupDirectoryList()
|
void SetupDirectoryList()
|
||||||
{
|
{
|
||||||
var codec = Codec as IHasDirectory;
|
var codec = Codec as IHasDirectory;
|
||||||
if (codec == null)
|
if (codec != null)
|
||||||
{
|
{
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
DirectoryList = new SmartObjectDynamicList(TriList.SmartObjects[UISmartObjectJoin.VCDirectoryList],
|
DirectoryList = new SmartObjectDynamicList(TriList.SmartObjects[UISmartObjectJoin.VCDirectoryList],
|
||||||
true, 1300);
|
true, 1300);
|
||||||
codec.DirectoryResultReturned += dir_DirectoryResultReturned;
|
codec.DirectoryResultReturned += new EventHandler<DirectoryEventArgs>(dir_DirectoryResultReturned);
|
||||||
|
|
||||||
if (codec.PhonebookSyncState.InitialSyncComplete)
|
if (codec.PhonebookSyncState.InitialSyncComplete)
|
||||||
SetCurrentDirectoryToRoot();
|
SetCurrentDirectoryToRoot();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
codec.PhonebookSyncState.InitialSyncCompleted += PhonebookSyncState_InitialSyncCompleted;
|
codec.PhonebookSyncState.InitialSyncCompleted += new EventHandler<EventArgs>(PhonebookSyncState_InitialSyncCompleted);
|
||||||
|
}
|
||||||
|
|
||||||
|
RefreshDirectory();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1180,15 +1028,11 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
void SetCurrentDirectoryToRoot()
|
void SetCurrentDirectoryToRoot()
|
||||||
{
|
{
|
||||||
var hasDirectory = Codec as IHasDirectory;
|
(Codec as IHasDirectory).SetCurrentDirectoryToRoot();
|
||||||
|
|
||||||
if (hasDirectory == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
hasDirectory.SetCurrentDirectoryToRoot();
|
|
||||||
SearchKeypadClear();
|
SearchKeypadClear();
|
||||||
|
|
||||||
|
RefreshDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1200,17 +1044,10 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
{
|
{
|
||||||
var codec = Codec as IHasDirectory;
|
var codec = Codec as IHasDirectory;
|
||||||
|
|
||||||
if (codec == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!codec.CurrentDirectoryResultIsNotDirectoryRoot.BoolValue)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetCurrentDirectoryToRoot();
|
SetCurrentDirectoryToRoot();
|
||||||
|
|
||||||
|
RefreshDirectory();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1220,7 +1057,8 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
void dir_DirectoryResultReturned(object sender, DirectoryEventArgs e)
|
void dir_DirectoryResultReturned(object sender, DirectoryEventArgs e)
|
||||||
{
|
{
|
||||||
RefreshDirectory(e.Directory);
|
|
||||||
|
RefreshDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1252,24 +1090,13 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="dir"></param>
|
||||||
void RefreshDirectory()
|
void RefreshDirectory()
|
||||||
{
|
{
|
||||||
var codec = Codec as IHasDirectory;
|
if ((Codec as IHasDirectory).CurrentDirectoryResult.CurrentDirectoryResults.Count > 0)
|
||||||
|
|
||||||
if (codec == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
RefreshDirectory(codec.CurrentDirectoryResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
void RefreshDirectory(CodecDirectory directory)
|
|
||||||
{
|
|
||||||
if (directory.CurrentDirectoryResults.Count > 0)
|
|
||||||
{
|
{
|
||||||
ushort i = 0;
|
ushort i = 0;
|
||||||
foreach (var r in directory.CurrentDirectoryResults)
|
foreach (var r in (Codec as IHasDirectory).CurrentDirectoryResult.CurrentDirectoryResults)
|
||||||
{
|
{
|
||||||
if (i == DirectoryList.MaxCount)
|
if (i == DirectoryList.MaxCount)
|
||||||
{
|
{
|
||||||
@@ -1289,35 +1116,21 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
// If more than one contact method, show contact method modal dialog
|
// If more than one contact method, show contact method modal dialog
|
||||||
DirectoryList.SetItemButtonAction(i, b =>
|
DirectoryList.SetItemButtonAction(i, b =>
|
||||||
{
|
{
|
||||||
if (b)
|
if (!b)
|
||||||
{
|
{
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Refresh the contact methods list
|
// Refresh the contact methods list
|
||||||
RefreshContactMethodsModalList(dc);
|
RefreshContactMethodsModalList(dc);
|
||||||
Parent.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.MeetingsOrContacMethodsListVisible);
|
Parent.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.MeetingsOrContacMethodsListVisible);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (dc.ContactMethods.Count == 1)
|
|
||||||
{
|
|
||||||
var invitableContact = dc as IInvitableContact;
|
|
||||||
|
|
||||||
if (invitableContact != null)
|
|
||||||
{
|
|
||||||
DirectoryList.SetItemButtonAction(i, b => { if (!b) Codec.Dial(invitableContact); });
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If only one contact method, just dial that method
|
// If only one contact method, just dial that method
|
||||||
DirectoryList.SetItemButtonAction(i, b => { if (!b) Codec.Dial(dc.ContactMethods[0].Number); });
|
DirectoryList.SetItemButtonAction(i, b => { if (!b) Codec.Dial(dc.ContactMethods[0].Number); });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Unable to dial contact. No availble ContactMethod(s) specified");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // is DirectoryFolder
|
else // is DirectoryFolder
|
||||||
{
|
{
|
||||||
DirectoryList.SetItemMainText(i, string.Format("[+] {0}", r.Name));
|
DirectoryList.SetItemMainText(i, string.Format("[+] {0}", r.Name));
|
||||||
@@ -1342,6 +1155,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
|
|
||||||
DirectoryList.SetItemMainText(1, "No Results Found");
|
DirectoryList.SetItemMainText(1, "No Results Found");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RefreshContactMethodsModalList(DirectoryContact contact)
|
void RefreshContactMethodsModalList(DirectoryContact contact)
|
||||||
@@ -1387,7 +1201,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
var lc = Codec as IHasCodecLayouts;
|
var lc = Codec as IHasCodecLayouts;
|
||||||
if (lc != null)
|
if (lc != null)
|
||||||
{
|
{
|
||||||
|
TriList.SetSigFalseAction(UIBoolJoin.VCLayoutTogglePress, lc.LocalLayoutToggleSingleProminent);
|
||||||
lc.LocalLayoutFeedback.LinkInputSig(TriList.StringInput[UIStringJoin.VCLayoutModeText]);
|
lc.LocalLayoutFeedback.LinkInputSig(TriList.StringInput[UIStringJoin.VCLayoutModeText]);
|
||||||
lc.LocalLayoutFeedback.OutputChange += (o,a) =>
|
lc.LocalLayoutFeedback.OutputChange += (o,a) =>
|
||||||
{
|
{
|
||||||
@@ -1400,7 +1214,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
var cisco = Codec as PepperDash.Essentials.Devices.Common.VideoCodec.Cisco.CiscoSparkCodec;
|
var cisco = Codec as PepperDash.Essentials.Devices.Common.VideoCodec.Cisco.CiscoSparkCodec;
|
||||||
if (cisco != null)
|
if (cisco != null)
|
||||||
{
|
{
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.VCLayoutTogglePress, lc.LocalLayoutToggleSingleProminent);
|
|
||||||
// Cisco has min/max buttons that need special sauce
|
// Cisco has min/max buttons that need special sauce
|
||||||
cisco.SharingContentIsOnFeedback.OutputChange += CiscoSharingAndPresentation_OutputChanges;
|
cisco.SharingContentIsOnFeedback.OutputChange += CiscoSharingAndPresentation_OutputChanges;
|
||||||
//cisco.PresentationViewMaximizedFeedback.OutputChange += CiscoSharingAndPresentation_OutputChanges;
|
//cisco.PresentationViewMaximizedFeedback.OutputChange += CiscoSharingAndPresentation_OutputChanges;
|
||||||
@@ -1408,16 +1221,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
TriList.SetSigFalseAction(UIBoolJoin.VCMinMaxPress, cisco.MinMaxLayoutToggle);
|
TriList.SetSigFalseAction(UIBoolJoin.VCMinMaxPress, cisco.MinMaxLayoutToggle);
|
||||||
}
|
}
|
||||||
|
|
||||||
var zoomRoom = Codec as PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom.ZoomRoom;
|
|
||||||
if (zoomRoom != null)
|
|
||||||
{
|
|
||||||
TriList.BooleanInput[UIBoolJoin.VCLayoutToggleEnable].BoolValue = true;
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.VCLayoutTogglePress, lc.LocalLayoutToggle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1445,21 +1249,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
void RevealKeyboard()
|
void RevealKeyboard()
|
||||||
{
|
{
|
||||||
if (_passwordPromptDialogVisible)
|
if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadWithFavoritesVisible && KeypadMode == eKeypadMode.Dial)
|
||||||
{
|
|
||||||
Debug.Console(2, "Attaching Keyboard to PasswordPromptDialog");
|
|
||||||
DetachDialKeyboard();
|
|
||||||
DetachSearchKeyboard();
|
|
||||||
var kb = Parent.Keyboard;
|
|
||||||
kb.KeyPress -= Keyboard_PasswordKeyPress;
|
|
||||||
kb.KeyPress += Keyboard_PasswordKeyPress;
|
|
||||||
kb.HideAction = this.DetachPasswordKeyboard;
|
|
||||||
kb.GoButtonText = "Submit";
|
|
||||||
kb.GoButtonVisible = true;
|
|
||||||
PasswordStringCheckEnables();
|
|
||||||
kb.Show();
|
|
||||||
}
|
|
||||||
else if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadWithFavoritesVisible && KeypadMode == eKeypadMode.Dial)
|
|
||||||
{
|
{
|
||||||
var kb = Parent.Keyboard;
|
var kb = Parent.Keyboard;
|
||||||
kb.KeyPress -= Keyboard_DialKeyPress;
|
kb.KeyPress -= Keyboard_DialKeyPress;
|
||||||
@@ -1481,7 +1271,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
SearchStringKeypadCheckEnables();
|
SearchStringKeypadCheckEnables();
|
||||||
kb.Show();
|
kb.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1537,32 +1326,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Event handler for keyboard dialing
|
|
||||||
/// </summary>
|
|
||||||
void Keyboard_PasswordKeyPress(object sender, PepperDash.Essentials.Core.Touchpanels.Keyboards.KeyboardControllerPressEventArgs e)
|
|
||||||
{
|
|
||||||
if (_passwordPromptDialogVisible)
|
|
||||||
{
|
|
||||||
if (e.Text != null)
|
|
||||||
PasswordStringBuilder.Append(e.Text);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (e.SpecialKey == KeyboardSpecialKey.Backspace)
|
|
||||||
PasswordKeypadBackspacePress();
|
|
||||||
else if (e.SpecialKey == KeyboardSpecialKey.Clear)
|
|
||||||
PasswordKeypadClear();
|
|
||||||
else if (e.SpecialKey == KeyboardSpecialKey.GoButton)
|
|
||||||
{
|
|
||||||
(Codec as IPasswordPrompt).SubmitPassword(PasswordStringBuilder.ToString());
|
|
||||||
HidePasswordPrompt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PasswordStringFeedback.FireUpdate();
|
|
||||||
PasswordStringCheckEnables();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Call
|
/// Call
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1576,11 +1339,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
Parent.Keyboard.KeyPress -= Keyboard_SearchKeyPress;
|
Parent.Keyboard.KeyPress -= Keyboard_SearchKeyPress;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DetachPasswordKeyboard()
|
|
||||||
{
|
|
||||||
Parent.Keyboard.KeyPress -= Keyboard_PasswordKeyPress;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Shows the camera controls subpage
|
/// Shows the camera controls subpage
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1658,22 +1416,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingRecentsPress);
|
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingRecentsPress);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Meet Now button
|
|
||||||
/// </summary>
|
|
||||||
void MeetNowPress()
|
|
||||||
{
|
|
||||||
var startMeetingCodec = Codec as IHasStartMeeting;
|
|
||||||
if (startMeetingCodec != null)
|
|
||||||
{
|
|
||||||
startMeetingCodec.StartMeeting(startMeetingCodec.DefaultMeetingDurationMin);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(2, "Codce does not implment IHasStartMeeting. Cannot meet now");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Connect call button
|
/// Connect call button
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1684,16 +1426,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
Codec.Dial(DialStringBuilder.ToString());
|
Codec.Dial(DialStringBuilder.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Stop Sharing button
|
|
||||||
/// </summary>
|
|
||||||
void CallStopSharingPress()
|
|
||||||
{
|
|
||||||
Codec.StopSharing();
|
|
||||||
Parent.CurrentRoom.RunRouteAction("codecOsd", Parent.CurrentRoom.SourceListKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1860,40 +1592,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
Parent.Keyboard.DisableGoButton();
|
Parent.Keyboard.DisableGoButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clears the Password keypad
|
|
||||||
/// </summary>
|
|
||||||
void PasswordKeypadClear()
|
|
||||||
{
|
|
||||||
PasswordStringBuilder.Remove(0, PasswordStringBuilder.Length);
|
|
||||||
PasswordStringFeedback.FireUpdate();
|
|
||||||
PasswordStringCheckEnables();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
void PasswordKeypadBackspacePress()
|
|
||||||
{
|
|
||||||
PasswordStringBuilder.Remove(PasswordStringBuilder.Length - 1, 1);
|
|
||||||
|
|
||||||
PasswordStringFeedback.FireUpdate();
|
|
||||||
PasswordStringCheckEnables();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Checks the enabled states of various elements around the keypad
|
|
||||||
/// </summary>
|
|
||||||
void PasswordStringCheckEnables()
|
|
||||||
{
|
|
||||||
var textIsEntered = PasswordStringBuilder.Length > 0;
|
|
||||||
if (textIsEntered)
|
|
||||||
Parent.Keyboard.EnableGoButton();
|
|
||||||
else
|
|
||||||
Parent.Keyboard.DisableGoButton();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the text value for the keypad dial entry field
|
/// Returns the text value for the keypad dial entry field
|
||||||
@@ -1939,62 +1637,5 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
Dial = 0,
|
Dial = 0,
|
||||||
DTMF
|
DTMF
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetupPasswordPrompt()
|
|
||||||
{
|
|
||||||
var passwordPromptCodec = Codec as IPasswordPrompt;
|
|
||||||
|
|
||||||
passwordPromptCodec.PasswordRequired += new EventHandler<PasswordPromptEventArgs>(passwordPromptCodec_PasswordRequired);
|
|
||||||
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.PasswordPromptCancelPress, HidePasswordPrompt);
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.PasswordPromptTextPress, RevealKeyboard);
|
|
||||||
}
|
|
||||||
|
|
||||||
void passwordPromptCodec_PasswordRequired(object sender, PasswordPromptEventArgs e)
|
|
||||||
{
|
|
||||||
if (e.LoginAttemptCancelled)
|
|
||||||
{
|
|
||||||
HidePasswordPrompt();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(e.Message))
|
|
||||||
{
|
|
||||||
TriList.SetString(UIStringJoin.PasswordPromptMessageText, e.Message);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.LoginAttemptFailed)
|
|
||||||
{
|
|
||||||
// TODO: Show a message modal to indicate the login attempt failed
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TriList.SetBool(UIBoolJoin.PasswordPromptErrorVisible, e.LastAttemptWasIncorrect);
|
|
||||||
|
|
||||||
ShowPasswordPrompt();
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool _passwordPromptDialogVisible;
|
|
||||||
|
|
||||||
void ShowPasswordPrompt()
|
|
||||||
{
|
|
||||||
// Clear out any previous data
|
|
||||||
PasswordKeypadClear();
|
|
||||||
|
|
||||||
_passwordPromptDialogVisible = true;
|
|
||||||
TriList.SetBool(UIBoolJoin.PasswordPromptDialogVisible, _passwordPromptDialogVisible);
|
|
||||||
RevealKeyboard();
|
|
||||||
}
|
|
||||||
|
|
||||||
void HidePasswordPrompt()
|
|
||||||
{
|
|
||||||
if (_passwordPromptDialogVisible)
|
|
||||||
{
|
|
||||||
_passwordPromptDialogVisible = false;
|
|
||||||
Parent.Keyboard.Hide();
|
|
||||||
TriList.SetBool(UIBoolJoin.PasswordPromptDialogVisible, _passwordPromptDialogVisible);
|
|
||||||
PasswordKeypadClear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,10 +54,6 @@ Utilization of Essentials Framework falls into the following categories:
|
|||||||
|
|
||||||
For detailed documentation, see the [Wiki](https://github.com/PepperDash/EssentialsFramework/wiki).
|
For detailed documentation, see the [Wiki](https://github.com/PepperDash/EssentialsFramework/wiki).
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
* Check out our [Discord Server](https://discord.gg/rWyeRH3K)
|
|
||||||
|
|
||||||
## How-To (Getting Started)
|
## How-To (Getting Started)
|
||||||
|
|
||||||
See [Getting Started](https://github.com/PepperDash/Essentials/wiki/Get-started#how-to-get-started)
|
See [Getting Started](https://github.com/PepperDash/Essentials/wiki/Get-started#how-to-get-started)
|
||||||
|
|||||||
@@ -42,6 +42,3 @@ devjson:2 {"deviceKey":"display01Comm-com", "methodName":"SendText", "params": [
|
|||||||
|
|
||||||
devjson:10 {"deviceKey":"dmLink-ssh", "methodName":"Connect", "params": []}
|
devjson:10 {"deviceKey":"dmLink-ssh", "methodName":"Connect", "params": []}
|
||||||
|
|
||||||
devjson:2 {"deviceKey":"roomCombiner", "methodName":"SetRoomCombinationScenario", "params": ["combined"]}
|
|
||||||
|
|
||||||
devjson:2 {"deviceKey":"roomCombiner", "methodName":"SetRoomCombinationScenario", "params": ["divided"]}
|
|
||||||
@@ -46,33 +46,6 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
bridge.PrintJoinMaps();
|
bridge.PrintJoinMaps();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static void JoinmapMarkdown(string command)
|
|
||||||
{
|
|
||||||
var targets = command.Split(' ');
|
|
||||||
|
|
||||||
var bridgeKey = targets[0].Trim();
|
|
||||||
|
|
||||||
var bridge = DeviceManager.GetDeviceForKey(bridgeKey) as EiscApiAdvanced;
|
|
||||||
|
|
||||||
if (bridge == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Unable to find advanced bridge with key: '{0}'", bridgeKey);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (targets.Length > 1)
|
|
||||||
{
|
|
||||||
var deviceKey = targets[1].Trim();
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(deviceKey)) return;
|
|
||||||
bridge.MarkdownJoinMapForDevice(deviceKey, bridgeKey);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bridge.MarkdownForBridge(bridgeKey);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -109,7 +82,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
{
|
{
|
||||||
public EiscApiPropertiesConfig PropertiesConfig { get; private set; }
|
public EiscApiPropertiesConfig PropertiesConfig { get; private set; }
|
||||||
|
|
||||||
public Dictionary<string, JoinMapBaseAdvanced> JoinMaps { get; private set; }
|
protected Dictionary<string, JoinMapBaseAdvanced> JoinMaps { get; private set; }
|
||||||
|
|
||||||
public BasicTriList Eisc { get; private set; }
|
public BasicTriList Eisc { get; private set; }
|
||||||
|
|
||||||
@@ -254,19 +227,6 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
joinMap.Value.PrintJoinMapInfo();
|
joinMap.Value.PrintJoinMapInfo();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// Generates markdown for all join maps on this bridge
|
|
||||||
/// </summary>
|
|
||||||
public virtual void MarkdownForBridge(string bridgeKey)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Writing Joinmaps to files for EISC IPID: {0}", Eisc.ID.ToString("X"));
|
|
||||||
|
|
||||||
foreach (var joinMap in JoinMaps)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Generating markdown for device '{0}':", joinMap.Key);
|
|
||||||
joinMap.Value.MarkdownJoinMapInfo(joinMap.Key, bridgeKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Prints the join map for a device by key
|
/// Prints the join map for a device by key
|
||||||
@@ -285,23 +245,6 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
Debug.Console(0, "Join map for device '{0}' on EISC '{1}':", deviceKey, Key);
|
Debug.Console(0, "Join map for device '{0}' on EISC '{1}':", deviceKey, Key);
|
||||||
joinMap.PrintJoinMapInfo();
|
joinMap.PrintJoinMapInfo();
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// Prints the join map for a device by key
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="deviceKey"></param>
|
|
||||||
public void MarkdownJoinMapForDevice(string deviceKey, string bridgeKey)
|
|
||||||
{
|
|
||||||
var joinMap = JoinMaps[deviceKey];
|
|
||||||
|
|
||||||
if (joinMap == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Unable to find joinMap for device with key: '{0}'", deviceKey);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(0, "Join map for device '{0}' on EISC '{1}':", deviceKey, Key);
|
|
||||||
joinMap.MarkdownJoinMapInfo(deviceKey, bridgeKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Used for debugging to trigger an action based on a join number and type
|
/// Used for debugging to trigger an action based on a join number and type
|
||||||
@@ -442,7 +385,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
{
|
{
|
||||||
public EiscApiAdvancedFactory()
|
public EiscApiAdvancedFactory()
|
||||||
{
|
{
|
||||||
TypeNames = new List<string> { "eiscapiadv", "eiscapiadvanced", "eiscapiadvancedserver", "eiscapiadvancedclient", "vceiscapiadv", "vceiscapiadvanced" };
|
TypeNames = new List<string> { "eiscapiadv", "eiscapiadvanced", "vceiscapiadv", "vceiscapiadvanced" };
|
||||||
}
|
}
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||||
@@ -451,52 +394,26 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
|
|
||||||
var controlProperties = CommFactory.GetControlPropertiesConfig(dc);
|
var controlProperties = CommFactory.GetControlPropertiesConfig(dc);
|
||||||
|
|
||||||
BasicTriList eisc;
|
|
||||||
|
|
||||||
switch (dc.Type.ToLower())
|
switch (dc.Type.ToLower())
|
||||||
{
|
{
|
||||||
case "eiscapiadv":
|
case "eiscapiadv":
|
||||||
case "eiscapiadvanced":
|
case "eiscapiadvanced":
|
||||||
{
|
{
|
||||||
eisc = new ThreeSeriesTcpIpEthernetIntersystemCommunications(controlProperties.IpIdInt,
|
var eisc = new ThreeSeriesTcpIpEthernetIntersystemCommunications(controlProperties.IpIdInt,
|
||||||
controlProperties.TcpSshProperties.Address, Global.ControlSystem);
|
controlProperties.TcpSshProperties.Address, Global.ControlSystem);
|
||||||
break;
|
return new EiscApiAdvanced(dc, eisc);
|
||||||
}
|
|
||||||
case "eiscapiadvancedserver":
|
|
||||||
{
|
|
||||||
eisc = new EISCServer(controlProperties.IpIdInt, Global.ControlSystem);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "eiscapiadvancedclient":
|
|
||||||
{
|
|
||||||
eisc = new EISCClient(controlProperties.IpIdInt, controlProperties.TcpSshProperties.Address, Global.ControlSystem);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case "vceiscapiadv":
|
case "vceiscapiadv":
|
||||||
case "vceiscapiadvanced":
|
case "vceiscapiadvanced":
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(controlProperties.RoomId))
|
var eisc = new VirtualControlEISCClient(controlProperties.IpIdInt, InitialParametersClass.RoomId,
|
||||||
{
|
|
||||||
Debug.Console(0, Debug.ErrorLogLevel.Error, "Unable to build VC-4 EISC Client for device {0}. Room ID is missing or empty", dc.Key);
|
|
||||||
eisc = null;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
eisc = new VirtualControlEISCClient(controlProperties.IpIdInt, controlProperties.RoomId,
|
|
||||||
Global.ControlSystem);
|
Global.ControlSystem);
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
eisc = null;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (eisc == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new EiscApiAdvanced(dc, eisc);
|
return new EiscApiAdvanced(dc, eisc);
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -46,14 +46,6 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
public JoinDataComplete RawOccupancyUsFeedback = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 },
|
public JoinDataComplete RawOccupancyUsFeedback = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Raw Occupancy Us Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
new JoinMetadata { Description = "Raw Occupancy Us Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
[JoinName("IdentityModeOn")]
|
|
||||||
public JoinDataComplete IdentityMode = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Enable Identity Mode", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("IdentityModeFeedback")]
|
|
||||||
public JoinDataComplete IdentityModeFeedback = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Identity Mode Feedback", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("EnableLedFlash")]
|
[JoinName("EnableLedFlash")]
|
||||||
public JoinDataComplete EnableLedFlash = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 },
|
public JoinDataComplete EnableLedFlash = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Enable Led Flash", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
new JoinMetadata { Description = "Enable Led Flash", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "DM Chassis enable audio breakaway routing",
|
Description = "DM Chassis enable audio breakaway routing",
|
||||||
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||||
JoinType = eJoinType.Digital
|
JoinType = eJoinType.Digital
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -20,14 +20,10 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "DM Chassis enable USB breakaway routing",
|
Description = "DM Chassis enable USB breakaway routing",
|
||||||
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||||
JoinType = eJoinType.Digital
|
JoinType = eJoinType.Digital
|
||||||
});
|
});
|
||||||
|
|
||||||
[JoinName("Name")]
|
|
||||||
public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DM Chassis Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
|
||||||
|
|
||||||
[JoinName("SystemId")]
|
[JoinName("SystemId")]
|
||||||
public JoinDataComplete SystemId = new JoinDataComplete(new JoinData { JoinNumber = 10, JoinSpan = 1 },
|
public JoinDataComplete SystemId = new JoinDataComplete(new JoinData { JoinNumber = 10, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "DM Chassis SystemId Get/Set/Trigger/", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.DigitalAnalog });
|
new JoinMetadata { Description = "DM Chassis SystemId Get/Set/Trigger/", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.DigitalAnalog });
|
||||||
@@ -88,10 +84,6 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
public JoinDataComplete OutputStreamCardState = new JoinDataComplete(new JoinData { JoinNumber = 1601, JoinSpan = 32 },
|
public JoinDataComplete OutputStreamCardState = new JoinDataComplete(new JoinData { JoinNumber = 1601, JoinSpan = 32 },
|
||||||
new JoinMetadata { Description = "DM Chassis Stream Output Start (1), Stop (2), Pause (3) with Feedback", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Analog });
|
new JoinMetadata { Description = "DM Chassis Stream Output Start (1), Stop (2), Pause (3) with Feedback", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Analog });
|
||||||
|
|
||||||
[JoinName("NoRouteName")]
|
|
||||||
public JoinDataComplete NoRouteName = new JoinDataComplete(new JoinData { JoinNumber = 100, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DM Chassis Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
|
||||||
|
|
||||||
[JoinName("InputNames")]
|
[JoinName("InputNames")]
|
||||||
public JoinDataComplete InputNames = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 32 },
|
public JoinDataComplete InputNames = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 32 },
|
||||||
new JoinMetadata { Description = "DM Chassis Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
new JoinMetadata { Description = "DM Chassis Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||||
@@ -104,7 +96,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
new JoinDataComplete(new JoinData {JoinNumber = 501, JoinSpan = 200},
|
new JoinDataComplete(new JoinData {JoinNumber = 501, JoinSpan = 200},
|
||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "DM Chassis Video Input Names",
|
Description = "Video Input Name",
|
||||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||||
JoinType = eJoinType.Serial
|
JoinType = eJoinType.Serial
|
||||||
});
|
});
|
||||||
@@ -114,7 +106,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
new JoinDataComplete(new JoinData { JoinNumber = 701, JoinSpan = 200 },
|
new JoinDataComplete(new JoinData { JoinNumber = 701, JoinSpan = 200 },
|
||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "DM Chassis Audio Input Names",
|
Description = "Video Input Name",
|
||||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||||
JoinType = eJoinType.Serial
|
JoinType = eJoinType.Serial
|
||||||
});
|
});
|
||||||
@@ -123,7 +115,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
new JoinDataComplete(new JoinData { JoinNumber = 901, JoinSpan = 200 },
|
new JoinDataComplete(new JoinData { JoinNumber = 901, JoinSpan = 200 },
|
||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "DM Chassis Video Output Names",
|
Description = "Video Input Name",
|
||||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||||
JoinType = eJoinType.Serial
|
JoinType = eJoinType.Serial
|
||||||
});
|
});
|
||||||
@@ -132,7 +124,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
new JoinDataComplete(new JoinData { JoinNumber = 1101, JoinSpan = 200 },
|
new JoinDataComplete(new JoinData { JoinNumber = 1101, JoinSpan = 200 },
|
||||||
new JoinMetadata
|
new JoinMetadata
|
||||||
{
|
{
|
||||||
Description = "DM Chassis Audio Output Names",
|
Description = "Video Input Name",
|
||||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||||
JoinType = eJoinType.Serial
|
JoinType = eJoinType.Serial
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -28,36 +28,10 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
public JoinDataComplete EdidSerialNumber = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 },
|
public JoinDataComplete EdidSerialNumber = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "DM RMC EDID Serial Number", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
new JoinMetadata { Description = "DM RMC EDID Serial Number", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||||
|
|
||||||
[JoinName("Name")]
|
|
||||||
public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DM RMC Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
|
||||||
|
|
||||||
[JoinName("AudioVideoSource")]
|
[JoinName("AudioVideoSource")]
|
||||||
public JoinDataComplete AudioVideoSource = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
public JoinDataComplete AudioVideoSource = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "DM RMC Audio Video Source Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
new JoinMetadata { Description = "DM RMC Audio Video Source Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
||||||
|
|
||||||
[JoinName("HdcpSupportCapability")]
|
|
||||||
public JoinDataComplete HdcpSupportCapability = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DM RMC HDCP Support Capability", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("Port1HdcpState")]
|
|
||||||
public JoinDataComplete Port1HdcpState = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DM RMC Port 1 (DM) HDCP State Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("Port2HdcpState")]
|
|
||||||
public JoinDataComplete Port2HdcpState = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DM TX Port 2 (HDMI) HDCP State Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("HdmiInputSync")]
|
|
||||||
public JoinDataComplete HdmiInputSync = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DM RMC HDMI Input Sync", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("HdcpInputPortCount")]
|
|
||||||
public JoinDataComplete HdcpInputPortCount = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Number of Input Ports that support HDCP", JoinCapabilities = eJoinCapabilities.ToSIMPL, 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>
|
||||||
@@ -72,8 +46,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="joinStart">Join this join map will start at</param>
|
/// <param name="joinStart">Join this join map will start at</param>
|
||||||
/// <param name="type">Type of the child join map</param>
|
/// <param name="type">Type of the child join map</param>
|
||||||
protected DmRmcControllerJoinMap(uint joinStart, Type type)
|
protected DmRmcControllerJoinMap(uint joinStart, Type type) : base(joinStart, type)
|
||||||
: base(joinStart, type)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,10 +32,6 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
public JoinDataComplete CurrentInputResolution = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
public JoinDataComplete CurrentInputResolution = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "DM TX Current Input Resolution", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
new JoinMetadata { Description = "DM TX Current Input Resolution", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||||
|
|
||||||
[JoinName("Name")]
|
|
||||||
public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DM TX Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
|
||||||
|
|
||||||
[JoinName("VideoInput")]
|
[JoinName("VideoInput")]
|
||||||
public JoinDataComplete VideoInput = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
public JoinDataComplete VideoInput = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "DM TX Video Input Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
new JoinMetadata { Description = "DM TX Video Input Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
||||||
@@ -46,7 +42,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
|
|
||||||
[JoinName("HdcpSupportCapability")]
|
[JoinName("HdcpSupportCapability")]
|
||||||
public JoinDataComplete HdcpSupportCapability = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 },
|
public JoinDataComplete HdcpSupportCapability = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "DM TX HDCP Support Capability", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
|
new JoinMetadata { Description = "DM TX HDCP Support Capability", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Analog });
|
||||||
|
|
||||||
[JoinName("Port1HdcpState")]
|
[JoinName("Port1HdcpState")]
|
||||||
public JoinDataComplete Port1HdcpState = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 },
|
public JoinDataComplete Port1HdcpState = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 },
|
||||||
@@ -64,16 +60,6 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
public JoinDataComplete VgaContrast = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 },
|
public JoinDataComplete VgaContrast = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "DM TX Online", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
new JoinMetadata { Description = "DM TX Online", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
||||||
|
|
||||||
[JoinName("Port3HdcpState")]
|
|
||||||
public JoinDataComplete Port3HdcpState = new JoinDataComplete(new JoinData { JoinNumber = 8, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DM TX Port 3 HDCP State Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("HdcpInputPortCount")]
|
|
||||||
public JoinDataComplete HdcpInputPortCount = new JoinDataComplete(new JoinData { JoinNumber = 9, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Number of Input Ports that support HDCP", JoinCapabilities = eJoinCapabilities.ToSIMPL, 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>
|
||||||
@@ -88,8 +74,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="joinStart">Join this join map will start at</param>
|
/// <param name="joinStart">Join this join map will start at</param>
|
||||||
/// <param name="type">Type of the child join map</param>
|
/// <param name="type">Type of the child join map</param>
|
||||||
protected DmTxControllerJoinMap(uint joinStart, Type type)
|
protected DmTxControllerJoinMap(uint joinStart, Type type) : base(joinStart, type)
|
||||||
: base(joinStart, type)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,19 +7,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
|
|
||||||
[JoinName("MasterVolumeLevel")]
|
[JoinName("MasterVolumeLevel")]
|
||||||
public JoinDataComplete MasterVolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
public JoinDataComplete MasterVolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Master Volume Signed dB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
new JoinMetadata { Description = "Master Volume Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
||||||
|
|
||||||
[JoinName("MasterVolumeLevelScaled")]
|
|
||||||
public JoinDataComplete MasterVolumeLevelScaled = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Master Volume 16bit Scaled Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("MixerPresetRecall")]
|
|
||||||
public JoinDataComplete MixerPresetRecall = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Mixer Preset Recall Set", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("MixerEqPresetRecall")]
|
|
||||||
public JoinDataComplete MixerEqPresetRecall = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Mixer Eq Preset Recall Set", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("MasterVolumeMuteOn")]
|
[JoinName("MasterVolumeMuteOn")]
|
||||||
public JoinDataComplete MasterVolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
public JoinDataComplete MasterVolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
||||||
@@ -35,19 +23,11 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
|
|
||||||
[JoinName("MasterVolumeDown")]
|
[JoinName("MasterVolumeDown")]
|
||||||
public JoinDataComplete MasterVolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 },
|
public JoinDataComplete MasterVolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Master Volume Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
new JoinMetadata { Description = "Master Volume Mute Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
[JoinName("MasterVolumeLevelScaledSend")]
|
|
||||||
public JoinDataComplete MasterVolumeLevelScaledSend = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Master Volume Scaled Send Enable/Disable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("SourceVolumeLevel")]
|
[JoinName("SourceVolumeLevel")]
|
||||||
public JoinDataComplete SourceVolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 },
|
public JoinDataComplete SourceVolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Source Volume Signed dB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
new JoinMetadata { Description = "Source Volume Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
||||||
|
|
||||||
[JoinName("SourceVolumeLevelScaled")]
|
|
||||||
public JoinDataComplete SourceVolumeLevelScaled = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Source Volume 16bit Scaled Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("SourceVolumeMuteOn")]
|
[JoinName("SourceVolumeMuteOn")]
|
||||||
public JoinDataComplete SourceVolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 },
|
public JoinDataComplete SourceVolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 },
|
||||||
@@ -63,19 +43,11 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
|
|
||||||
[JoinName("SourceVolumeDown")]
|
[JoinName("SourceVolumeDown")]
|
||||||
public JoinDataComplete SourceVolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 },
|
public JoinDataComplete SourceVolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Source Volume Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
new JoinMetadata { Description = "Source Volume Mute Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
[JoinName("SourceVolumeLevelScaledSend")]
|
|
||||||
public JoinDataComplete SourceVolumeLevelScaledSend = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Source Volume Scaled Send Enable/Disable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("Codec1VolumeLevel")]
|
[JoinName("Codec1VolumeLevel")]
|
||||||
public JoinDataComplete Codec1VolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 1 },
|
public JoinDataComplete Codec1VolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Codec1 Volume Signed dB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
new JoinMetadata { Description = "Codec1 Volume Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
||||||
|
|
||||||
[JoinName("Codec1VolumeLevelScaled")]
|
|
||||||
public JoinDataComplete Codec1VolumeLevelScaled = new JoinDataComplete(new JoinData { JoinNumber = 22, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Codec1 Volume 16bit Scaled Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("Codec1VolumeMuteOn")]
|
[JoinName("Codec1VolumeMuteOn")]
|
||||||
public JoinDataComplete Codec1VolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 1 },
|
public JoinDataComplete Codec1VolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 21, JoinSpan = 1 },
|
||||||
@@ -91,19 +63,11 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
|
|
||||||
[JoinName("Codec1VolumeDown")]
|
[JoinName("Codec1VolumeDown")]
|
||||||
public JoinDataComplete Codec1VolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 24, JoinSpan = 1 },
|
public JoinDataComplete Codec1VolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 24, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Codec1 Volume Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
new JoinMetadata { Description = "Codec1 Volume Mute Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
[JoinName("Codec1VolumeLevelScaledSend")]
|
|
||||||
public JoinDataComplete Codec1VolumeLevelScaledSend = new JoinDataComplete(new JoinData { JoinNumber = 25, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Codec1 Volume Scaled Send Enable/Disable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("Codec2VolumeLevel")]
|
[JoinName("Codec2VolumeLevel")]
|
||||||
public JoinDataComplete Codec2VolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 31, JoinSpan = 1 },
|
public JoinDataComplete Codec2VolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 31, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Codec2 Volume Signed dB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
new JoinMetadata { Description = "Codec2 Volume Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
||||||
|
|
||||||
[JoinName("Codec2VolumeLevelScaled")]
|
|
||||||
public JoinDataComplete Codec2VolumeLevelScaled = new JoinDataComplete(new JoinData { JoinNumber = 32, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Codec2 Volume 16bit Scaled Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("Codec2VolumeMuteOn")]
|
[JoinName("Codec2VolumeMuteOn")]
|
||||||
public JoinDataComplete Codec2VolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 31, JoinSpan = 1 },
|
public JoinDataComplete Codec2VolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 31, JoinSpan = 1 },
|
||||||
@@ -119,39 +83,8 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
|
|
||||||
[JoinName("Codec2VolumeDown")]
|
[JoinName("Codec2VolumeDown")]
|
||||||
public JoinDataComplete Codec2VolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 34, JoinSpan = 1 },
|
public JoinDataComplete Codec2VolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 34, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Codec2 Volume Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
new JoinMetadata { Description = "Codec2 Volume Mute Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
[JoinName("Codec2VolumeLevelScaledSend")]
|
|
||||||
public JoinDataComplete Codec2VolumeLevelScaledSend = new JoinDataComplete(new JoinData { JoinNumber = 35, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Codec2 Volume Scaled Send Enable/Disable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("MicsMasterVolumeLevel")]
|
|
||||||
public JoinDataComplete MicsMasterVolumeLevel = new JoinDataComplete(new JoinData { JoinNumber = 41, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "MicsMaster Volume Signed dB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("MicsMasterVolumeLevelScaled")]
|
|
||||||
public JoinDataComplete MicsMasterVolumeLevelScaled = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "MicsMaster Volume 16bit Scaled Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("MicsMasterVolumeMuteOn")]
|
|
||||||
public JoinDataComplete MicsMasterVolumeMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 41, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "MicsMaster Volume Mute On Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("MicsMasterVolumeMuteOff")]
|
|
||||||
public JoinDataComplete MicsMasterVolumeMuteOff = new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "MicsMaster Volume Mute Off Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("MicsMasterVolumeUp")]
|
|
||||||
public JoinDataComplete MicsMasterVolumeUp = new JoinDataComplete(new JoinData { JoinNumber = 43, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "MicsMaster Volume Level Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("MicsMasterVolumeDown")]
|
|
||||||
public JoinDataComplete MicsMasterVolumeDown = new JoinDataComplete(new JoinData { JoinNumber = 44, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "MicsMaster Volume Level Down", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("MicsMasterVolumeLevelScaledSend")]
|
|
||||||
public JoinDataComplete MicsMasterVolumeLevelScaledSend = new JoinDataComplete(new JoinData { JoinNumber = 45, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Mics Master Volume Scaled Send Enable/Disable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
/// <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
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.Bridges
|
|
||||||
{
|
|
||||||
public class DmpsMicrophoneControllerJoinMap : JoinMapBaseAdvanced
|
|
||||||
{
|
|
||||||
[JoinName("MicGain")]
|
|
||||||
public JoinDataComplete MicGain = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Mic Gain dB Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("MicGainScaled")]
|
|
||||||
public JoinDataComplete MicGainScaled = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Mic Gain 16bit Scaled Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("MicMuteOn")]
|
|
||||||
public JoinDataComplete MicMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Mic Mute On Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("MicMuteOff")]
|
|
||||||
public JoinDataComplete MicMuteOff = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Mic Mute Off Set / Get", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("MicGainScaledSend")]
|
|
||||||
public JoinDataComplete MicGainScaledSend = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Mic Gain Scaled Send Enable/Disable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("MicName")]
|
|
||||||
public JoinDataComplete MicName = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Mic Name Get", 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 DmpsMicrophoneControllerJoinMap(uint joinStart)
|
|
||||||
: this(joinStart, typeof(DmpsMicrophoneControllerJoinMap))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <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 DmpsMicrophoneControllerJoinMap(uint joinStart, Type type)
|
|
||||||
: base(joinStart, type)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,26 +4,6 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
{
|
{
|
||||||
public class DmpsRoutingControllerJoinMap : JoinMapBaseAdvanced
|
public class DmpsRoutingControllerJoinMap : JoinMapBaseAdvanced
|
||||||
{
|
{
|
||||||
[JoinName("EnableRouting")]
|
|
||||||
public JoinDataComplete EnableRouting = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DMPS Enable Audio and Video Routing", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("SystemPowerOn")]
|
|
||||||
public JoinDataComplete SystemPowerOn = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DMPS System Power On Get/Set", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("SystemPowerOff")]
|
|
||||||
public JoinDataComplete SystemPowerOff = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DMPS System Power Off Get/Set", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("FrontPanelLockOn")]
|
|
||||||
public JoinDataComplete FrontPanelLockOn = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DMPS Front Panel Lock On Get/Set", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("FrontPanelLockOff")]
|
|
||||||
public JoinDataComplete FrontPanelLockOff = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "DMPS Front Panel Lock Off Get/Set", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("VideoSyncStatus")]
|
[JoinName("VideoSyncStatus")]
|
||||||
public JoinDataComplete VideoSyncStatus = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 32 },
|
public JoinDataComplete VideoSyncStatus = new JoinDataComplete(new JoinData { JoinNumber = 101, JoinSpan = 32 },
|
||||||
new JoinMetadata { Description = "DM Input Video Sync", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
new JoinMetadata { Description = "DM Input Video Sync", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||||
@@ -52,44 +32,6 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
public JoinDataComplete OutputNames = new JoinDataComplete(new JoinData { JoinNumber = 301, JoinSpan = 32 },
|
public JoinDataComplete OutputNames = new JoinDataComplete(new JoinData { JoinNumber = 301, JoinSpan = 32 },
|
||||||
new JoinMetadata { Description = "DM Chassis Output Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
new JoinMetadata { Description = "DM Chassis Output Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||||
|
|
||||||
[JoinName("InputVideoNames")]
|
|
||||||
public JoinDataComplete InputVideoNames =
|
|
||||||
new JoinDataComplete(new JoinData { JoinNumber = 501, JoinSpan = 32 },
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Video Input Name",
|
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
|
||||||
JoinType = eJoinType.Serial
|
|
||||||
});
|
|
||||||
|
|
||||||
[JoinName("InputAudioNames")]
|
|
||||||
public JoinDataComplete InputAudioNames =
|
|
||||||
new JoinDataComplete(new JoinData { JoinNumber = 701, JoinSpan = 32 },
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Audio Input Name",
|
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
|
||||||
JoinType = eJoinType.Serial
|
|
||||||
});
|
|
||||||
[JoinName("OutputVideoNames")]
|
|
||||||
public JoinDataComplete OutputVideoNames =
|
|
||||||
new JoinDataComplete(new JoinData { JoinNumber = 901, JoinSpan = 32 },
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Video Output Name",
|
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
|
||||||
JoinType = eJoinType.Serial
|
|
||||||
});
|
|
||||||
[JoinName("OutputAudioNames")]
|
|
||||||
public JoinDataComplete OutputAudioNames =
|
|
||||||
new JoinDataComplete(new JoinData { JoinNumber = 1101, JoinSpan = 32 },
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Audio Output Name",
|
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
|
||||||
JoinType = eJoinType.Serial
|
|
||||||
});
|
|
||||||
|
|
||||||
[JoinName("OutputCurrentVideoInputNames")]
|
[JoinName("OutputCurrentVideoInputNames")]
|
||||||
public JoinDataComplete OutputCurrentVideoInputNames = new JoinDataComplete(new JoinData { JoinNumber = 2001, JoinSpan = 32 },
|
public JoinDataComplete OutputCurrentVideoInputNames = new JoinDataComplete(new JoinData { JoinNumber = 2001, JoinSpan = 32 },
|
||||||
new JoinMetadata { Description = "DM Chassis Video Output Currently Routed Video Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
new JoinMetadata { Description = "DM Chassis Video Output Currently Routed Video Input Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||||
|
|||||||
@@ -5,9 +5,6 @@ namespace PepperDash.Essentials.Core.Bridges.JoinMaps
|
|||||||
{
|
{
|
||||||
public class GlsPartitionSensorJoinMap : JoinMapBaseAdvanced
|
public class GlsPartitionSensorJoinMap : JoinMapBaseAdvanced
|
||||||
{
|
{
|
||||||
|
|
||||||
#region Digital
|
|
||||||
|
|
||||||
[JoinName("IsOnline")]
|
[JoinName("IsOnline")]
|
||||||
public JoinDataComplete IsOnline = new JoinDataComplete(
|
public JoinDataComplete IsOnline = new JoinDataComplete(
|
||||||
new JoinData
|
new JoinData
|
||||||
@@ -22,6 +19,19 @@ namespace PepperDash.Essentials.Core.Bridges.JoinMaps
|
|||||||
JoinType = eJoinType.Digital
|
JoinType = eJoinType.Digital
|
||||||
});
|
});
|
||||||
|
|
||||||
|
[JoinName("Name")]
|
||||||
|
public JoinDataComplete Name = new JoinDataComplete(
|
||||||
|
new JoinData
|
||||||
|
{
|
||||||
|
JoinNumber = 1,
|
||||||
|
JoinSpan = 1
|
||||||
|
},
|
||||||
|
new JoinMetadata
|
||||||
|
{
|
||||||
|
Description = "Sensor Name",
|
||||||
|
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||||
|
JoinType = eJoinType.Serial
|
||||||
|
});
|
||||||
|
|
||||||
[JoinName("Enable")]
|
[JoinName("Enable")]
|
||||||
public JoinDataComplete Enable = new JoinDataComplete(
|
public JoinDataComplete Enable = new JoinDataComplete(
|
||||||
@@ -93,10 +103,6 @@ namespace PepperDash.Essentials.Core.Bridges.JoinMaps
|
|||||||
JoinType = eJoinType.Digital
|
JoinType = eJoinType.Digital
|
||||||
});
|
});
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Analog
|
|
||||||
|
|
||||||
[JoinName("Sensitivity")]
|
[JoinName("Sensitivity")]
|
||||||
public JoinDataComplete Sensitivity = new JoinDataComplete(
|
public JoinDataComplete Sensitivity = new JoinDataComplete(
|
||||||
new JoinData
|
new JoinData
|
||||||
@@ -111,28 +117,6 @@ namespace PepperDash.Essentials.Core.Bridges.JoinMaps
|
|||||||
JoinType = eJoinType.Analog
|
JoinType = eJoinType.Analog
|
||||||
});
|
});
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
#region Serial
|
|
||||||
|
|
||||||
[JoinName("Name")]
|
|
||||||
public JoinDataComplete Name = new JoinDataComplete(
|
|
||||||
new JoinData
|
|
||||||
{
|
|
||||||
JoinNumber = 1,
|
|
||||||
JoinSpan = 1
|
|
||||||
},
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Sensor Name",
|
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
|
||||||
JoinType = eJoinType.Serial
|
|
||||||
});
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
/// <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>
|
||||||
@@ -162,139 +146,16 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
|
|||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Obsolete("use PepperDash.Essentials.Core.Bridges.JoinMaps version")]
|
[Obsolete("use PepperDash.Essentials.Core.Bridges.JoinMaps version")]
|
||||||
public class GlsPartitionSensorJoinMap:JoinMapBaseAdvanced
|
public class GlsPartitionSensorJoinMap : PepperDash.Essentials.Core.Bridges.JoinMaps.GlsPartitionSensorJoinMap
|
||||||
{
|
{
|
||||||
[JoinName("IsOnline")]
|
|
||||||
public JoinDataComplete IsOnline = new JoinDataComplete(
|
|
||||||
new JoinData
|
|
||||||
{
|
|
||||||
JoinNumber = 1,
|
|
||||||
JoinSpan = 1
|
|
||||||
},
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Sensor Is Online",
|
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
|
||||||
JoinType = eJoinType.Digital
|
|
||||||
});
|
|
||||||
|
|
||||||
[JoinName("Name")]
|
|
||||||
public JoinDataComplete Name = new JoinDataComplete(
|
|
||||||
new JoinData
|
|
||||||
{
|
|
||||||
JoinNumber = 1,
|
|
||||||
JoinSpan = 1
|
|
||||||
},
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Sensor Name",
|
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
|
||||||
JoinType = eJoinType.Serial
|
|
||||||
});
|
|
||||||
|
|
||||||
[JoinName("Enable")]
|
|
||||||
public JoinDataComplete Enable = new JoinDataComplete(
|
|
||||||
new JoinData
|
|
||||||
{
|
|
||||||
JoinNumber = 2,
|
|
||||||
JoinSpan = 1
|
|
||||||
},
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Sensor Enable",
|
|
||||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
|
||||||
JoinType = eJoinType.Digital
|
|
||||||
});
|
|
||||||
|
|
||||||
[JoinName("PartitionSensed")]
|
|
||||||
public JoinDataComplete PartitionSensed = new JoinDataComplete(
|
|
||||||
new JoinData
|
|
||||||
{
|
|
||||||
JoinNumber = 3,
|
|
||||||
JoinSpan = 1
|
|
||||||
},
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Sensor Partition Sensed",
|
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
|
||||||
JoinType = eJoinType.Digital
|
|
||||||
});
|
|
||||||
|
|
||||||
[JoinName("PartitionNotSensed")]
|
|
||||||
public JoinDataComplete PartitionNotSensed = new JoinDataComplete(
|
|
||||||
new JoinData
|
|
||||||
{
|
|
||||||
JoinNumber = 4,
|
|
||||||
JoinSpan = 1
|
|
||||||
},
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Sensor Partition Not Sensed",
|
|
||||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
|
||||||
JoinType = eJoinType.Digital
|
|
||||||
});
|
|
||||||
|
|
||||||
[JoinName("IncreaseSensitivity")]
|
|
||||||
public JoinDataComplete IncreaseSensitivity = new JoinDataComplete(
|
|
||||||
new JoinData
|
|
||||||
{
|
|
||||||
JoinNumber = 6,
|
|
||||||
JoinSpan = 1
|
|
||||||
},
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Sensor Increase Sensitivity",
|
|
||||||
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
|
||||||
JoinType = eJoinType.Digital
|
|
||||||
});
|
|
||||||
|
|
||||||
[JoinName("DecreaseSensitivity")]
|
|
||||||
public JoinDataComplete DecreaseSensitivity = new JoinDataComplete(
|
|
||||||
new JoinData
|
|
||||||
{
|
|
||||||
JoinNumber = 7,
|
|
||||||
JoinSpan = 1
|
|
||||||
},
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Sensor Decrease Sensitivity",
|
|
||||||
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
|
||||||
JoinType = eJoinType.Digital
|
|
||||||
});
|
|
||||||
|
|
||||||
[JoinName("Sensitivity")]
|
|
||||||
public JoinDataComplete Sensitivity = new JoinDataComplete(
|
|
||||||
new JoinData
|
|
||||||
{
|
|
||||||
JoinNumber = 2,
|
|
||||||
JoinSpan = 1
|
|
||||||
},
|
|
||||||
new JoinMetadata
|
|
||||||
{
|
|
||||||
Description = "Sensor Sensitivity",
|
|
||||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
|
||||||
JoinType = eJoinType.Analog
|
|
||||||
});
|
|
||||||
|
|
||||||
/// <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 GlsPartitionSensorJoinMap(uint joinStart)
|
public GlsPartitionSensorJoinMap(uint joinStart)
|
||||||
: this(joinStart, typeof(GlsPartitionSensorJoinMap))
|
: this(joinStart, typeof(GlsPartitionSensorJoinMap))
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
protected GlsPartitionSensorJoinMap(uint joinStart, Type type) : base(joinStart, type)
|
||||||
/// 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 GlsPartitionSensorJoinMap(uint joinStart, Type type)
|
|
||||||
: base(joinStart, type)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.Bridges
|
|
||||||
{
|
|
||||||
public class IAnalogInputJoinMap : JoinMapBaseAdvanced
|
|
||||||
{
|
|
||||||
|
|
||||||
[JoinName("InputValue")]
|
|
||||||
public JoinDataComplete InputValue = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Input Value", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
[JoinName("MinimumChange")]
|
|
||||||
public JoinDataComplete MinimumChange = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Minimum voltage change required to reflect a change", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
/// <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 IAnalogInputJoinMap(uint joinStart)
|
|
||||||
: this(joinStart, typeof(IAnalogInputJoinMap))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <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 IAnalogInputJoinMap(uint joinStart, Type type)
|
|
||||||
: base(joinStart, type)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -7,7 +7,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
|
|
||||||
[JoinName("InputState")]
|
[JoinName("InputState")]
|
||||||
public JoinDataComplete InputState = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
public JoinDataComplete InputState = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Input State", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
new JoinMetadata { Description = "Room Email Url", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
||||||
|
|
||||||
/// <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
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.Bridges
|
|
||||||
{
|
|
||||||
public class IDigitalOutputJoinMap : JoinMapBaseAdvanced
|
|
||||||
{
|
|
||||||
|
|
||||||
[JoinName("OutputState")]
|
|
||||||
public JoinDataComplete OutputState = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Get / Set state of Digital Input", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
/// <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 IDigitalOutputJoinMap(uint joinStart)
|
|
||||||
: this(joinStart, typeof(IDigitalOutputJoinMap))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <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 IDigitalOutputJoinMap(uint joinStart, Type type)
|
|
||||||
: base(joinStart, type)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.Bridges
|
|
||||||
{
|
|
||||||
public class PduJoinMapBase : JoinMapBaseAdvanced
|
|
||||||
{
|
|
||||||
[JoinName("Name")]
|
|
||||||
public JoinDataComplete Name = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "PDU Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
|
||||||
|
|
||||||
[JoinName("Online")]
|
|
||||||
public JoinDataComplete Online = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "PDU Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("OutletCount")]
|
|
||||||
public JoinDataComplete OutletCount = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Number of COntrolled Outlets", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
|
|
||||||
|
|
||||||
[JoinName("OutletName")]
|
|
||||||
public JoinDataComplete OutletName = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Outlet Name", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
|
||||||
|
|
||||||
[JoinName("OutletEnabled")]
|
|
||||||
public JoinDataComplete OutletEnabled = new JoinDataComplete(new JoinData { JoinNumber = 11, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Outlet Enabled", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("OutletPowerCycle")]
|
|
||||||
public JoinDataComplete OutletPowerCycle = new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Outlet Power Cycle", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("OutletPowerOn")]
|
|
||||||
public JoinDataComplete OutletPowerOn = new JoinDataComplete(new JoinData { JoinNumber = 13, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Outlet Power On", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("OutletPowerOff")]
|
|
||||||
public JoinDataComplete OutletPowerOff = new JoinDataComplete(new JoinData { JoinNumber = 14, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Outlet Power Off", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <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 PduJoinMapBase(uint joinStart)
|
|
||||||
:base(joinStart, typeof(PduJoinMapBase))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <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>
|
|
||||||
public PduJoinMapBase(uint joinStart, Type type)
|
|
||||||
: base(joinStart, type)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -45,7 +45,7 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
new JoinMetadata { Description = "Processor Last Boot", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
new JoinMetadata { Description = "Processor Last Boot", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||||
|
|
||||||
[JoinName("ProgramOffsetJoin")]
|
[JoinName("ProgramOffsetJoin")]
|
||||||
public JoinDataComplete ProgramOffsetJoin = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 5 },
|
public JoinDataComplete ProgramOffsetJoin = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "All Program Data is offset between slots by 5 - First Joins Start at 11", JoinCapabilities = eJoinCapabilities.None, JoinType = eJoinType.None });
|
new JoinMetadata { Description = "All Program Data is offset between slots by 5 - First Joins Start at 11", JoinCapabilities = eJoinCapabilities.None, JoinType = eJoinType.None });
|
||||||
|
|
||||||
[JoinName("ProgramStart")]
|
[JoinName("ProgramStart")]
|
||||||
@@ -132,23 +132,6 @@ namespace PepperDash.Essentials.Core.Bridges
|
|||||||
public JoinDataComplete DhcpStatus = new JoinDataComplete(new JoinData { JoinNumber = 86, JoinSpan = 1 },
|
public JoinDataComplete DhcpStatus = new JoinDataComplete(new JoinData { JoinNumber = 86, JoinSpan = 1 },
|
||||||
new JoinMetadata { Description = "Processor Ethernet Dhcp Status", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
new JoinMetadata { Description = "Processor Ethernet Dhcp Status", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
|
||||||
|
|
||||||
[JoinName("ProcessorRebot")]
|
|
||||||
public JoinDataComplete ProcessorReboot = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Reboot processor", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("IsAppliance")]
|
|
||||||
public JoinDataComplete IsAppliance = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Is appliance Fb", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("IsServer")]
|
|
||||||
public JoinDataComplete IsServer = new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Is server Fb", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
[JoinName("ProgramReset")]
|
|
||||||
public JoinDataComplete ProgramReset = new JoinDataComplete(new JoinData { JoinNumber = 15, JoinSpan = 1 },
|
|
||||||
new JoinMetadata { Description = "Resets the program", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
|
|
||||||
|
|
||||||
|
|
||||||
/// <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>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -11,10 +11,8 @@ using PepperDash.Core;
|
|||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
namespace PepperDash.Essentials.Core
|
||||||
{
|
{
|
||||||
public class CecPortController : Device, IBasicCommunicationWithStreamDebugging
|
public class CecPortController : Device, IBasicCommunication
|
||||||
{
|
{
|
||||||
public CommunicationStreamDebugging StreamDebugging { get; private set; }
|
|
||||||
|
|
||||||
public event EventHandler<GenericCommMethodReceiveBytesArgs> BytesReceived;
|
public event EventHandler<GenericCommMethodReceiveBytesArgs> BytesReceived;
|
||||||
public event EventHandler<GenericCommMethodReceiveTextArgs> TextReceived;
|
public event EventHandler<GenericCommMethodReceiveTextArgs> TextReceived;
|
||||||
|
|
||||||
@@ -25,8 +23,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
public CecPortController(string key, Func<EssentialsControlPropertiesConfig, ICec> postActivationFunc,
|
public CecPortController(string key, Func<EssentialsControlPropertiesConfig, ICec> postActivationFunc,
|
||||||
EssentialsControlPropertiesConfig config):base(key)
|
EssentialsControlPropertiesConfig config):base(key)
|
||||||
{
|
{
|
||||||
StreamDebugging = new CommunicationStreamDebugging(key);
|
|
||||||
|
|
||||||
AddPostActivationAction(() =>
|
AddPostActivationAction(() =>
|
||||||
{
|
{
|
||||||
Port = postActivationFunc(config);
|
Port = postActivationFunc(config);
|
||||||
@@ -58,18 +54,12 @@ namespace PepperDash.Essentials.Core
|
|||||||
if (bytesHandler != null)
|
if (bytesHandler != null)
|
||||||
{
|
{
|
||||||
var bytes = Encoding.GetEncoding(28591).GetBytes(s);
|
var bytes = Encoding.GetEncoding(28591).GetBytes(s);
|
||||||
if (StreamDebugging.RxStreamDebuggingIsEnabled)
|
|
||||||
Debug.Console(0, this, "Received: '{0}'", ComTextHelper.GetEscapedText(bytes));
|
|
||||||
bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes));
|
bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes));
|
||||||
}
|
}
|
||||||
var textHandler = TextReceived;
|
var textHandler = TextReceived;
|
||||||
if (textHandler != null)
|
if (textHandler != null)
|
||||||
{
|
|
||||||
if (StreamDebugging.RxStreamDebuggingIsEnabled)
|
|
||||||
Debug.Console(0, this, "Received: '{0}'", s);
|
|
||||||
textHandler(this, new GenericCommMethodReceiveTextArgs(s));
|
textHandler(this, new GenericCommMethodReceiveTextArgs(s));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#region IBasicCommunication Members
|
#region IBasicCommunication Members
|
||||||
|
|
||||||
@@ -77,8 +67,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
{
|
{
|
||||||
if (Port == null)
|
if (Port == null)
|
||||||
return;
|
return;
|
||||||
if (StreamDebugging.TxStreamDebuggingIsEnabled)
|
|
||||||
Debug.Console(0, this, "Sending {0} characters of text: '{1}'", text.Length, text);
|
|
||||||
Port.StreamCec.Send.StringValue = text;
|
Port.StreamCec.Send.StringValue = text;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,8 +75,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
if (Port == null)
|
if (Port == null)
|
||||||
return;
|
return;
|
||||||
var text = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length);
|
var text = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length);
|
||||||
if (StreamDebugging.TxStreamDebuggingIsEnabled)
|
|
||||||
Debug.Console(0, this, "Sending {0} bytes: '{1}'", bytes.Length, ComTextHelper.GetEscapedText(bytes));
|
|
||||||
Port.StreamCec.Send.StringValue = text;
|
Port.StreamCec.Send.StringValue = text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -92,20 +92,18 @@ namespace PepperDash.Essentials.Core
|
|||||||
|
|
||||||
void OnDataReceived(string s)
|
void OnDataReceived(string s)
|
||||||
{
|
{
|
||||||
|
|
||||||
var bytesHandler = BytesReceived;
|
var bytesHandler = BytesReceived;
|
||||||
if (bytesHandler != null)
|
if (bytesHandler != null)
|
||||||
{
|
{
|
||||||
var bytes = Encoding.GetEncoding(28591).GetBytes(s);
|
var bytes = Encoding.GetEncoding(28591).GetBytes(s);
|
||||||
if (StreamDebugging.RxStreamDebuggingIsEnabled)
|
|
||||||
Debug.Console(0, this, "Received: '{0}'", ComTextHelper.GetEscapedText(bytes));
|
|
||||||
bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes));
|
bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes));
|
||||||
}
|
}
|
||||||
var textHandler = TextReceived;
|
var textHandler = TextReceived;
|
||||||
if (textHandler != null)
|
if (textHandler != null)
|
||||||
{
|
{
|
||||||
if (StreamDebugging.RxStreamDebuggingIsEnabled)
|
if (StreamDebugging.RxStreamDebuggingIsEnabled)
|
||||||
Debug.Console(0, this, "Received: '{0}'", s);
|
Debug.Console(0, this, "Recevied: '{0}'", s);
|
||||||
|
|
||||||
textHandler(this, new GenericCommMethodReceiveTextArgs(s));
|
textHandler(this, new GenericCommMethodReceiveTextArgs(s));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -183,8 +183,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
[JsonConverter(typeof(ComSpecJsonConverter))]
|
[JsonConverter(typeof(ComSpecJsonConverter))]
|
||||||
public ComPort.ComPortSpec ComParams { get; set; }
|
public ComPort.ComPortSpec ComParams { get; set; }
|
||||||
|
|
||||||
public string RoomId { get; set; }
|
|
||||||
|
|
||||||
public string CresnetId { get; set; }
|
public string CresnetId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
{
|
{
|
||||||
Communication = comm;
|
Communication = comm;
|
||||||
PortGather = new CommunicationGather(Communication, '\x0d');
|
PortGather = new CommunicationGather(Communication, '\x0d');
|
||||||
//PortGather.LineReceived += this.Port_LineReceived;
|
PortGather.LineReceived += this.Port_LineReceived;
|
||||||
CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, props.CommunicationMonitorProperties);
|
CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, props.CommunicationMonitorProperties);
|
||||||
LineEnding = props.LineEnding;
|
LineEnding = props.LineEnding;
|
||||||
}
|
}
|
||||||
@@ -47,6 +47,13 @@ namespace PepperDash.Essentials.Core
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Port_LineReceived(object dev, GenericCommMethodReceiveTextArgs args)
|
||||||
|
{
|
||||||
|
if (Debug.Level == 2)
|
||||||
|
Debug.Console(2, this, "RX: '{0}'",
|
||||||
|
ShowHexResponse ? ComTextHelper.GetEscapedText(args.Text) : args.Text);
|
||||||
|
}
|
||||||
|
|
||||||
void SendLine(string s)
|
void SendLine(string s)
|
||||||
{
|
{
|
||||||
//if (Debug.Level == 2)
|
//if (Debug.Level == 2)
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
public GenericComm(DeviceConfig config)
|
public GenericComm(DeviceConfig config)
|
||||||
: base(config)
|
: base(config)
|
||||||
{
|
{
|
||||||
|
|
||||||
PropertiesConfig = CommFactory.GetControlPropertiesConfig(config);
|
PropertiesConfig = CommFactory.GetControlPropertiesConfig(config);
|
||||||
|
|
||||||
var commPort = CommFactory.CreateCommForDevice(config);
|
var commPort = CommFactory.CreateCommForDevice(config);
|
||||||
@@ -97,6 +96,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
// this is a permanent event handler. This cannot be -= from event
|
// this is a permanent event handler. This cannot be -= from event
|
||||||
CommPort.TextReceived += (s, a) =>
|
CommPort.TextReceived += (s, a) =>
|
||||||
{
|
{
|
||||||
|
Debug.Console(2, this, "RX: {0}", a.Text);
|
||||||
trilist.SetString(joinMap.TextReceived.JoinNumber, a.Text);
|
trilist.SetString(joinMap.TextReceived.JoinNumber, a.Text);
|
||||||
};
|
};
|
||||||
trilist.SetStringSigAction(joinMap.SendText.JoinNumber, s => CommPort.SendText(s));
|
trilist.SetStringSigAction(joinMap.SendText.JoinNumber, s => CommPort.SendText(s));
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Crestron.SimplSharp;
|
||||||
using Crestron.SimplSharp.Net.Http;
|
using Crestron.SimplSharp.Net.Http;
|
||||||
using Crestron.SimplSharp.Ssh;
|
|
||||||
using Crestron.SimplSharpPro.EthernetCommunication;
|
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
|
using PepperDash.Core.DebugThings;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
namespace PepperDash.Essentials.Core
|
||||||
{
|
{
|
||||||
@@ -16,130 +17,59 @@ namespace PepperDash.Essentials.Core
|
|||||||
public GenericHttpClient(string key, string name, string hostname)
|
public GenericHttpClient(string key, string name, string hostname)
|
||||||
: base(key, name)
|
: base(key, name)
|
||||||
{
|
{
|
||||||
Client = new HttpClient {HostName = hostname};
|
Client = new HttpClient();
|
||||||
}
|
Client.HostName = hostname;
|
||||||
|
|
||||||
|
|
||||||
public GenericHttpClient(string key, string name, string hostname, GenericHttpClientConnectionOptions options)
|
|
||||||
: base(key, name)
|
|
||||||
{
|
|
||||||
Client = new HttpClient
|
|
||||||
{
|
|
||||||
HostName = hostname,
|
|
||||||
Accept = options.Accept,
|
|
||||||
KeepAlive = options.KeepAlive,
|
|
||||||
Password = options.Password,
|
|
||||||
Timeout = options.Timeout,
|
|
||||||
TimeoutEnabled = options.TimeoutEnabled,
|
|
||||||
UserAgent = options.UserAgent,
|
|
||||||
UserName = options.UserName,
|
|
||||||
Version = options.Version
|
|
||||||
};
|
|
||||||
if (options.Port > 0) Client.Port = options.Port;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send a HTTP Get Request to a client
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="path">Path to request node</param>
|
/// <param name="path"></param>
|
||||||
public void SendText(string path)
|
public void SendText(string path)
|
||||||
{
|
{
|
||||||
var url = string.Format("http://{0}/{1}", Client.HostName, path);
|
HttpClientRequest request = new HttpClientRequest();
|
||||||
var request = new HttpClientRequest()
|
string url = string.Format("http://{0}/{1}", Client.HostName, path);
|
||||||
{
|
request.Url = new UrlParser(url);
|
||||||
Url = new UrlParser(url)
|
HttpClient.DISPATCHASYNC_ERROR error = Client.DispatchAsyncEx(request, Response, request);
|
||||||
};
|
Debug.Console(2, this, "GenericHttpClient SentRequest TX:'{0}'", url);
|
||||||
var error = Client.DispatchAsyncEx(request, Response, request);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Send a HTTP Get Request to a client using a formatted string
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="format">Path</param>
|
|
||||||
/// <param name="items">Parameters for Path String Formatting</param>
|
|
||||||
public void SendText(string format, params object[] items)
|
public void SendText(string format, params object[] items)
|
||||||
{
|
{
|
||||||
var url = string.Format("http://{0}/{1}", Client.HostName, string.Format(format, items));
|
HttpClientRequest request = new HttpClientRequest();
|
||||||
var request = new HttpClientRequest()
|
string url = string.Format("http://{0}/{1}", Client.HostName, string.Format(format, items));
|
||||||
{
|
request.Url = new UrlParser(url);
|
||||||
Url = new UrlParser(url)
|
HttpClient.DISPATCHASYNC_ERROR error = Client.DispatchAsyncEx(request, Response, request);
|
||||||
};
|
Debug.Console(2, this, "GenericHttpClient SentRequest TX:'{0}'", url);
|
||||||
var error = Client.DispatchAsyncEx(request, Response, request);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Send a unidirectional HTTP Get Request to a client using a formatted string
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="format">Path</param>
|
|
||||||
/// <param name="items">Parameters for Path String Formatting</param>
|
|
||||||
public void SendTextNoResponse(string format, params object[] items)
|
public void SendTextNoResponse(string format, params object[] items)
|
||||||
{
|
{
|
||||||
var url = string.Format("http://{0}/{1}", Client.HostName, string.Format(format, items));
|
HttpClientRequest request = new HttpClientRequest();
|
||||||
var request = new HttpClientRequest()
|
string url = string.Format("http://{0}/{1}", Client.HostName, string.Format(format, items));
|
||||||
{
|
request.Url = new UrlParser(url);
|
||||||
Url = new UrlParser(url)
|
|
||||||
};
|
|
||||||
Client.Dispatch(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Send an HTTP Request of a specific request type
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="requestType">HTTP Request Type</param>
|
|
||||||
/// <param name="path">Path to request node</param>
|
|
||||||
public void SendText(RequestType requestType, string path)
|
|
||||||
{
|
|
||||||
var url = string.Format("http://{0}/{1}", Client.HostName, path);
|
|
||||||
var request = new HttpClientRequest()
|
|
||||||
{
|
|
||||||
Url = new UrlParser(url),
|
|
||||||
RequestType = requestType
|
|
||||||
};
|
|
||||||
var error = Client.DispatchAsyncEx(request, Response, request);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Send an HTTP Request of a specific request type using a formatted string
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="requestType">HTTP Request Type</param>
|
|
||||||
/// <param name="format">Path</param>
|
|
||||||
/// <param name="items">Parameters for Path String Formatting</param>
|
|
||||||
public void SendText(RequestType requestType, string format, params object[] items)
|
|
||||||
{
|
|
||||||
var url = string.Format("http://{0}/{1}", Client.HostName, string.Format(format, items));
|
|
||||||
var request = new HttpClientRequest()
|
|
||||||
{
|
|
||||||
Url = new UrlParser(url),
|
|
||||||
RequestType = requestType
|
|
||||||
};
|
|
||||||
var error = Client.DispatchAsyncEx(request, Response, request);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Send a unidirectional HTTP Request of a specific request type using a formatted string
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="requestType">HTTP Request Type</param>
|
|
||||||
/// <param name="format">Path</param>
|
|
||||||
/// <param name="items">Parameters for Path String Formatting</param>
|
|
||||||
public void SendTextNoResponse(RequestType requestType, string format, params object[] items)
|
|
||||||
{
|
|
||||||
var url = string.Format("http://{0}/{1}", Client.HostName, string.Format(format, items));
|
|
||||||
var request = new HttpClientRequest()
|
|
||||||
{
|
|
||||||
Url = new UrlParser(url)
|
|
||||||
};
|
|
||||||
Client.Dispatch(request);
|
Client.Dispatch(request);
|
||||||
|
Debug.Console(2, this, "GenericHttpClient SentRequest TX:'{0}'", url);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Response(HttpClientResponse response, HTTP_CALLBACK_ERROR error, object request)
|
private void Response(HttpClientResponse response, HTTP_CALLBACK_ERROR error, object request)
|
||||||
{
|
{
|
||||||
if (error != HTTP_CALLBACK_ERROR.COMPLETED) return;
|
if (error == HTTP_CALLBACK_ERROR.COMPLETED)
|
||||||
|
{
|
||||||
var responseReceived = response;
|
var responseReceived = response;
|
||||||
|
|
||||||
if (responseReceived.ContentString.Length <= 0) return;
|
if (responseReceived.ContentString.Length > 0)
|
||||||
if (ResponseRecived == null) return;
|
{
|
||||||
var httpClientRequest = request as HttpClientRequest;
|
if (ResponseRecived != null)
|
||||||
if (httpClientRequest != null)
|
ResponseRecived(this, new GenericHttpClientEventArgs(responseReceived.ContentString, (request as HttpClientRequest).Url.ToString(), error));
|
||||||
ResponseRecived(this, new GenericHttpClientEventArgs(responseReceived.ContentString, httpClientRequest.Url.ToString(), error));
|
|
||||||
|
Debug.Console(2, this, "GenericHttpClient ResponseReceived");
|
||||||
|
Debug.Console(2, this, "RX:{0}", responseReceived.ContentString);
|
||||||
|
Debug.Console(2, this, "TX:{0}", (request as HttpClientRequest).Url.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -177,8 +107,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class GenericHttpClientEventArgs : EventArgs
|
public class GenericHttpClientEventArgs : EventArgs
|
||||||
{
|
{
|
||||||
public string ResponseText { get; private set; }
|
public string ResponseText { get; private set; }
|
||||||
@@ -191,84 +119,4 @@ namespace PepperDash.Essentials.Core
|
|||||||
Error = error;
|
Error = error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Objedct to set parameters for HTTP Requests
|
|
||||||
/// </summary>
|
|
||||||
public class GenericHttpClientConnectionOptions
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets content types that are acceptable for the response. The default
|
|
||||||
/// value is "text/html, image/gif, image/jpeg, image/png, */*".
|
|
||||||
/// </summary>
|
|
||||||
[DefaultValue("text/html, image/gif, image/jpeg, image/png")]
|
|
||||||
public string Accept { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Controls whether to use HTTP Keep-Alive to keep the connection alive between
|
|
||||||
/// requests. If enabled (true) , once a request is made and a connection is
|
|
||||||
/// established, this connection is kept open and used for future requests. If
|
|
||||||
/// disabled, the connection is closed, and a new connection is created for future
|
|
||||||
/// requests.
|
|
||||||
/// </summary>
|
|
||||||
[DefaultValue(true)]
|
|
||||||
public bool KeepAlive { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This property controls whether the request operation will do an automatic
|
|
||||||
/// timeout checking. If timeout handling is turned on (i.e. this property is
|
|
||||||
/// set to true) and a request takes longer than Timeout, it will be terminated.
|
|
||||||
/// </summary>
|
|
||||||
[DefaultValue(true)]
|
|
||||||
public bool TimeoutEnabled { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the maximum amount of time (in seconds) that a client will wait
|
|
||||||
/// for a server response within a single request. The default value is 60 seconds
|
|
||||||
/// (1 minute). The timeout handling can be activated via the TimeoutEnabled
|
|
||||||
/// property.
|
|
||||||
/// </summary>
|
|
||||||
[DefaultValue(60)]
|
|
||||||
public int Timeout { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the version identifier of the UserAgent. Can be used to mimic
|
|
||||||
/// particular browsers like Internet Explorer 6.0
|
|
||||||
/// </summary>
|
|
||||||
[DefaultValue("1.1")]
|
|
||||||
public string Version { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the identifier of the software being used to retrieve data via
|
|
||||||
/// the URL. Some custom HTTP servers check this HTTP header to provide content
|
|
||||||
/// optimized for particular HTTP browsers.
|
|
||||||
/// </summary>
|
|
||||||
[DefaultValue("Crestron SimplSharp HTTP Client")]
|
|
||||||
public string UserAgent { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Name that will be inserted into the Authorization HTTP header in the request
|
|
||||||
/// to the server.
|
|
||||||
/// </summary>
|
|
||||||
public string UserName { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Password that will be inserted into the Authorization HTTP header in the
|
|
||||||
/// request to the server.
|
|
||||||
/// </summary>
|
|
||||||
public string Password { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The server Port that you intend the client to connect to. If you do not
|
|
||||||
/// assign a port number on this property, the port number in the parsed URL
|
|
||||||
/// will be used. If a port number is assigned in the parsed URL, it will take
|
|
||||||
/// precedence over this property.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// If you do not assign a port number on this property, the port number in the
|
|
||||||
/// parsed URL will be used.
|
|
||||||
/// </remarks>
|
|
||||||
///
|
|
||||||
public int Port { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,11 @@
|
|||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Crestron.SimplSharp;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using PepperDash.Core;
|
||||||
|
using PepperDash.Essentials.Core;
|
||||||
|
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
@@ -20,25 +25,12 @@ namespace PepperDash.Essentials.Core.Config
|
|||||||
[JsonProperty("sourceLists")]
|
[JsonProperty("sourceLists")]
|
||||||
public Dictionary<string, Dictionary<string, SourceListItem>> SourceLists { get; set; }
|
public Dictionary<string, Dictionary<string, SourceListItem>> SourceLists { get; set; }
|
||||||
|
|
||||||
[JsonProperty("destinationLists")]
|
|
||||||
public Dictionary<string, Dictionary<string,DestinationListItem>> DestinationLists { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("tieLines")]
|
[JsonProperty("tieLines")]
|
||||||
public List<TieLineConfig> TieLines { get; set; }
|
public List<TieLineConfig> TieLines { get; set; }
|
||||||
|
|
||||||
[JsonProperty("joinMaps")]
|
[JsonProperty("joinMaps")]
|
||||||
public Dictionary<string, JObject> JoinMaps { get; set; }
|
public Dictionary<string, JObject> JoinMaps { get; set; }
|
||||||
|
|
||||||
public BasicConfig()
|
|
||||||
{
|
|
||||||
Info = new InfoConfig();
|
|
||||||
Devices = new List<DeviceConfig>();
|
|
||||||
SourceLists = new Dictionary<string, Dictionary<string, SourceListItem>>();
|
|
||||||
DestinationLists = new Dictionary<string, Dictionary<string, DestinationListItem>>();
|
|
||||||
TieLines = new List<TieLineConfig>();
|
|
||||||
JoinMaps = new Dictionary<string, JObject>();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Checks SourceLists for a given list and returns it if found. Otherwise, returns null
|
/// Checks SourceLists for a given list and returns it if found. Otherwise, returns null
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -50,21 +42,6 @@ namespace PepperDash.Essentials.Core.Config
|
|||||||
return SourceLists[key];
|
return SourceLists[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves a DestinationListItem based on the key
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="key">key of the item to retrieve</param>
|
|
||||||
/// <returns>DestinationListItem if the key exists, null otherwise</returns>
|
|
||||||
public Dictionary<string, DestinationListItem> GetDestinationListForKey(string key)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(key) || !DestinationLists.ContainsKey(key))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return DestinationLists[key];
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Checks Devices for an item with a Key that matches and returns it if found. Otherwise, retunes null
|
/// Checks Devices for an item with a Key that matches and returns it if found. Otherwise, retunes null
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -31,21 +31,6 @@ namespace PepperDash.Essentials.Core.Config
|
|||||||
[JsonProperty("properties")]
|
[JsonProperty("properties")]
|
||||||
[JsonConverter(typeof(DevicePropertiesConverter))]
|
[JsonConverter(typeof(DevicePropertiesConverter))]
|
||||||
public JToken Properties { get; set; }
|
public JToken Properties { get; set; }
|
||||||
|
|
||||||
public DeviceConfig(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Key = dc.Key;
|
|
||||||
Uid = dc.Uid;
|
|
||||||
Name = dc.Name;
|
|
||||||
Group = dc.Group;
|
|
||||||
Type = dc.Type;
|
|
||||||
|
|
||||||
Properties = JToken.Parse(dc.Properties.ToString());
|
|
||||||
|
|
||||||
//Properties = JToken.FromObject(dc.Properties);
|
|
||||||
}
|
|
||||||
|
|
||||||
public DeviceConfig() {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -54,11 +54,11 @@ namespace PepperDash.Essentials.Core.Config
|
|||||||
{
|
{
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
|
||||||
var deviceConfigIndex = ConfigReader.ConfigObject.Devices.FindIndex(d => d.Key.Equals(config.Key));
|
var deviceConfig = ConfigReader.ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(config.Key));
|
||||||
|
|
||||||
if (deviceConfigIndex >= 0)
|
if (deviceConfig != null)
|
||||||
{
|
{
|
||||||
ConfigReader.ConfigObject.Devices[deviceConfigIndex] = config;
|
deviceConfig = config;
|
||||||
|
|
||||||
Debug.Console(1, "Updated config of device: '{0}'", config.Key);
|
Debug.Console(1, "Updated config of device: '{0}'", config.Key);
|
||||||
|
|
||||||
@@ -74,13 +74,13 @@ namespace PepperDash.Essentials.Core.Config
|
|||||||
{
|
{
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
|
||||||
var roomConfigIndex = ConfigReader.ConfigObject.Rooms.FindIndex(d => d.Key.Equals(config.Key));
|
var deviceConfig = ConfigReader.ConfigObject.Rooms.FirstOrDefault(d => d.Key.Equals(config.Key));
|
||||||
|
|
||||||
if (roomConfigIndex >= 0)
|
if (deviceConfig != null)
|
||||||
{
|
{
|
||||||
ConfigReader.ConfigObject.Rooms[roomConfigIndex] = config;
|
deviceConfig = config;
|
||||||
|
|
||||||
Debug.Console(1, "Updated room of device: '{0}'", config.Key);
|
Debug.Console(1, "Updated config of device: '{0}'", config.Key);
|
||||||
|
|
||||||
success = true;
|
success = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,13 +51,6 @@ namespace PepperDash.Essentials.Core.Config
|
|||||||
|
|
||||||
[JsonProperty("rooms")]
|
[JsonProperty("rooms")]
|
||||||
public List<DeviceConfig> Rooms { get; set; }
|
public List<DeviceConfig> Rooms { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public EssentialsConfig()
|
|
||||||
: base()
|
|
||||||
{
|
|
||||||
Rooms = new List<DeviceConfig>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -1,106 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
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.CrestronIO
|
|
||||||
{
|
|
||||||
public class C2NIoController:CrestronGenericBaseDevice, IComPorts, IIROutputPorts, IRelayPorts
|
|
||||||
{
|
|
||||||
private C2nIo _device;
|
|
||||||
|
|
||||||
public C2NIoController(string key, Func<DeviceConfig, C2nIo> preActivationFunc, DeviceConfig config):base(key, config.Name)
|
|
||||||
{
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
_device = preActivationFunc(config);
|
|
||||||
|
|
||||||
RegisterCrestronGenericBase(_device);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Implementation of IComPorts
|
|
||||||
|
|
||||||
public CrestronCollection<ComPort> ComPorts
|
|
||||||
{
|
|
||||||
get { return _device.ComPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfComPorts
|
|
||||||
{
|
|
||||||
get { return _device.NumberOfComPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Implementation of IIROutputPorts
|
|
||||||
|
|
||||||
public CrestronCollection<IROutputPort> IROutputPorts
|
|
||||||
{
|
|
||||||
get { return _device.IROutputPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfIROutputPorts
|
|
||||||
{
|
|
||||||
get { return _device.NumberOfIROutputPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Implementation of IRelayPorts
|
|
||||||
|
|
||||||
public CrestronCollection<Relay> RelayPorts
|
|
||||||
{
|
|
||||||
get { return _device.RelayPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfRelayPorts
|
|
||||||
{
|
|
||||||
get { return _device.NumberOfRelayPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
|
|
||||||
public class C2NIoControllerFactory : EssentialsDeviceFactory<C2NIoController>
|
|
||||||
{
|
|
||||||
public C2NIoControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "c2nio" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new C2N-IO Device");
|
|
||||||
|
|
||||||
return new C2NIoController(dc.Key, GetC2NIoDevice, dc);
|
|
||||||
}
|
|
||||||
|
|
||||||
static C2nIo GetC2NIoDevice(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 C2nIo", parentKey);
|
|
||||||
return new C2nIo(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 C2nIo", parentKey);
|
|
||||||
return new C2nIo(cresnetId, cresnetBridge.CresnetBranches[branchId]);
|
|
||||||
}
|
|
||||||
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -34,7 +34,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||||
{
|
{
|
||||||
Debug.Console(1, "Factory Attempting to create new DIN-CEN-CN2 Device");
|
Debug.Console(1, "Factory Attempting to create new C2N-RTHS Device");
|
||||||
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
var control = CommFactory.GetControlPropertiesConfig(dc);
|
||||||
var ipid = control.IpIdInt;
|
var ipid = control.IpIdInt;
|
||||||
|
|||||||
@@ -1,80 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
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.CrestronIO
|
|
||||||
{
|
|
||||||
public class DinIo8Controller:CrestronGenericBaseDevice, IIOPorts
|
|
||||||
{
|
|
||||||
private DinIo8 _device;
|
|
||||||
|
|
||||||
public DinIo8Controller(string key, Func<DeviceConfig, DinIo8> preActivationFunc, DeviceConfig config):base(key, config.Name)
|
|
||||||
{
|
|
||||||
AddPreActivationAction(() =>
|
|
||||||
{
|
|
||||||
_device = preActivationFunc(config);
|
|
||||||
|
|
||||||
RegisterCrestronGenericBase(_device);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Implementation of IIOPorts
|
|
||||||
|
|
||||||
public CrestronCollection<Versiport> VersiPorts
|
|
||||||
{
|
|
||||||
get { return _device.VersiPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int NumberOfVersiPorts
|
|
||||||
{
|
|
||||||
get { return _device.NumberOfVersiPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public class DinIo8ControllerFactory : EssentialsDeviceFactory<DinIo8Controller>
|
|
||||||
{
|
|
||||||
public DinIo8ControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "DinIo8" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new DinIo8 Device");
|
|
||||||
|
|
||||||
return new DinIo8Controller(dc.Key, GetDinIo8Device, dc);
|
|
||||||
}
|
|
||||||
|
|
||||||
static DinIo8 GetDinIo8Device(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 DinIo8", parentKey);
|
|
||||||
return new DinIo8(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 DinIo8", parentKey);
|
|
||||||
return new DinIo8(cresnetId, cresnetBridge.CresnetBranches[branchId]);
|
|
||||||
}
|
|
||||||
Debug.Console(0, "Device {0} is not a valid cresnet master", parentKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -15,7 +15,5 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
public uint PortNumber { get; set; }
|
public uint PortNumber { get; set; }
|
||||||
[JsonProperty("disablePullUpResistor")]
|
[JsonProperty("disablePullUpResistor")]
|
||||||
public bool DisablePullUpResistor { get; set; }
|
public bool DisablePullUpResistor { get; set; }
|
||||||
[JsonProperty("minimumChange")]
|
|
||||||
public int MinimumChange { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -16,7 +16,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// Wrapper class for CEN-IO-DIGIN-104 digital input module
|
/// Wrapper class for CEN-IO-DIGIN-104 digital input module
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Description("Wrapper class for the CEN-IO-DIGIN-104 diginal input module")]
|
[Description("Wrapper class for the CEN-IO-DIGIN-104 diginal input module")]
|
||||||
public class CenIoDigIn104Controller : CrestronGenericBaseDevice, IDigitalInputPorts
|
public class CenIoDigIn104Controller : EssentialsDevice, IDigitalInputPorts
|
||||||
{
|
{
|
||||||
public CenIoDi104 Di104 { get; private set; }
|
public CenIoDi104 Di104 { get; private set; }
|
||||||
|
|
||||||
@@ -53,16 +53,9 @@ namespace PepperDash.Essentials.Core
|
|||||||
Debug.Console(1, "Factory Attempting to create new CEN-DIGIN-104 Device");
|
Debug.Console(1, "Factory Attempting to create new CEN-DIGIN-104 Device");
|
||||||
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
var control = CommFactory.GetControlPropertiesConfig(dc);
|
||||||
if (control == null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-DIGIN-104 Device, control properties not found");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var ipid = control.IpIdInt;
|
var ipid = control.IpIdInt;
|
||||||
if (ipid != 0) return new CenIoDigIn104Controller(dc.Key, dc.Name, new CenIoDi104(ipid, Global.ControlSystem));
|
|
||||||
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-IR-104 Device using IP-ID-{0}", ipid);
|
return new CenIoDigIn104Controller(dc.Key, dc.Name, new Crestron.SimplSharpPro.GeneralIO.CenIoDi104(ipid, Global.ControlSystem));
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,208 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
|
||||||
|
|
||||||
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Represents a generic digital input deviced tied to a versiport
|
|
||||||
/// </summary>
|
|
||||||
public class GenericVersiportAnalogInputDevice : EssentialsBridgeableDevice, IAnalogInput
|
|
||||||
{
|
|
||||||
public Versiport InputPort { get; private set; }
|
|
||||||
|
|
||||||
public IntFeedback InputValueFeedback { get; private set; }
|
|
||||||
public IntFeedback InputMinimumChangeFeedback { get; private set; }
|
|
||||||
|
|
||||||
Func<int> InputValueFeedbackFunc
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return () => InputPort.AnalogIn;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Func<int> InputMinimumChangeFeedbackFunc
|
|
||||||
{
|
|
||||||
get { return () => InputPort.AnalogMinChange; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericVersiportAnalogInputDevice(string key, string name, Func<IOPortConfig, Versiport> postActivationFunc, IOPortConfig config) :
|
|
||||||
base(key, name)
|
|
||||||
{
|
|
||||||
InputValueFeedback = new IntFeedback(InputValueFeedbackFunc);
|
|
||||||
InputMinimumChangeFeedback = new IntFeedback(InputMinimumChangeFeedbackFunc);
|
|
||||||
|
|
||||||
AddPostActivationAction(() =>
|
|
||||||
{
|
|
||||||
InputPort = postActivationFunc(config);
|
|
||||||
|
|
||||||
InputPort.Register();
|
|
||||||
|
|
||||||
InputPort.SetVersiportConfiguration(eVersiportConfiguration.AnalogInput);
|
|
||||||
InputPort.AnalogMinChange = (ushort)(config.MinimumChange > 0 ? config.MinimumChange : 655);
|
|
||||||
if (config.DisablePullUpResistor)
|
|
||||||
InputPort.DisablePullUpResistor = true;
|
|
||||||
|
|
||||||
InputPort.VersiportChange += InputPort_VersiportChange;
|
|
||||||
|
|
||||||
Debug.Console(1, this, "Created GenericVersiportAnalogInputDevice on port '{0}'. DisablePullUpResistor: '{1}'", config.PortNumber, InputPort.DisablePullUpResistor);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Set minimum voltage change for device to update voltage changed method
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="value">valid values range from 0 - 65535, representing the full 100% range of the processor voltage source. Check processor documentation for details</param>
|
|
||||||
public void SetMinimumChange(ushort value)
|
|
||||||
{
|
|
||||||
InputPort.AnalogMinChange = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void InputPort_VersiportChange(Versiport port, VersiportEventArgs args)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Versiport change: {0}", args.Event);
|
|
||||||
|
|
||||||
if(args.Event == eVersiportEvent.AnalogInChange)
|
|
||||||
InputValueFeedback.FireUpdate();
|
|
||||||
if (args.Event == eVersiportEvent.AnalogMinChangeChange)
|
|
||||||
InputMinimumChangeFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#region Bridge Linking
|
|
||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
|
||||||
{
|
|
||||||
var joinMap = new IAnalogInputJoinMap(joinStart);
|
|
||||||
|
|
||||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
|
||||||
joinMap = JsonConvert.DeserializeObject<IAnalogInputJoinMap>(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.");
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
|
||||||
|
|
||||||
// Link feedback for input state
|
|
||||||
InputValueFeedback.LinkInputSig(trilist.UShortInput[joinMap.InputValue.JoinNumber]);
|
|
||||||
InputMinimumChangeFeedback.LinkInputSig(trilist.UShortInput[joinMap.MinimumChange.JoinNumber]);
|
|
||||||
trilist.SetUShortSigAction(joinMap.MinimumChange.JoinNumber, SetMinimumChange);
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Unable to link device '{0}'. Input is null", Key);
|
|
||||||
Debug.Console(1, this, "Error: {0}", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
trilist.OnlineStatusChange += (d, args) =>
|
|
||||||
{
|
|
||||||
if (!args.DeviceOnLine) return;
|
|
||||||
InputValueFeedback.FireUpdate();
|
|
||||||
InputMinimumChangeFeedback.FireUpdate();
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void trilist_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
public static Versiport GetVersiportDigitalInput(IOPortConfig dc)
|
|
||||||
{
|
|
||||||
|
|
||||||
IIOPorts ioPortDevice;
|
|
||||||
|
|
||||||
if (dc.PortDeviceKey.Equals("processor"))
|
|
||||||
{
|
|
||||||
if (!Global.ControlSystem.SupportsVersiport)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetVersiportAnalogInput: Processor does not support Versiports");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
ioPortDevice = Global.ControlSystem;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var ioPortDev = DeviceManager.GetDeviceForKey(dc.PortDeviceKey) as IIOPorts;
|
|
||||||
if (ioPortDev == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetVersiportAnalogInput: Device {0} is not a valid device", dc.PortDeviceKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
ioPortDevice = ioPortDev;
|
|
||||||
}
|
|
||||||
if (ioPortDevice == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetVersiportAnalogInput: Device '0' is not a valid IIOPorts Device", dc.PortDeviceKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dc.PortNumber > ioPortDevice.NumberOfVersiPorts)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetVersiportAnalogInput: Device {0} does not contain a port {1}", dc.PortDeviceKey, dc.PortNumber);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if(!ioPortDevice.VersiPorts[dc.PortNumber].SupportsAnalogInput)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetVersiportAnalogInput: Device {0} does not support AnalogInput on port {1}", dc.PortDeviceKey, dc.PortNumber);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return ioPortDevice.VersiPorts[dc.PortNumber];
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public class GenericVersiportAbalogInputDeviceFactory : EssentialsDeviceFactory<GenericVersiportAnalogInputDevice>
|
|
||||||
{
|
|
||||||
public GenericVersiportAbalogInputDeviceFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "versiportanaloginput" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new Generic Versiport Device");
|
|
||||||
|
|
||||||
var props = JsonConvert.DeserializeObject<IOPortConfig>(dc.Properties.ToString());
|
|
||||||
|
|
||||||
if (props == null) return null;
|
|
||||||
|
|
||||||
var portDevice = new GenericVersiportAnalogInputDevice(dc.Key, dc.Name, GenericVersiportAnalogInputDevice.GetVersiportDigitalInput, props);
|
|
||||||
|
|
||||||
return portDevice;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO
|
|
||||||
{
|
|
||||||
public interface IAnalogInput
|
|
||||||
{
|
|
||||||
IntFeedback InputValueFeedback { get; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
|
|
||||||
using PepperDash.Core;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Wrapper class for CEN-IO-IR-104 module
|
|
||||||
/// </summary>
|
|
||||||
[Description("Wrapper class for the CEN-IO-IR-104 module")]
|
|
||||||
public class CenIoIr104Controller : CrestronGenericBaseDevice, IIROutputPorts
|
|
||||||
{
|
|
||||||
private readonly CenIoIr104 _ir104;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Constructor
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="key"></param>
|
|
||||||
/// <param name="name"></param>
|
|
||||||
/// <param name="ir104"></param>
|
|
||||||
public CenIoIr104Controller(string key, string name, CenIoIr104 ir104)
|
|
||||||
: base(key, name, ir104)
|
|
||||||
{
|
|
||||||
_ir104 = ir104;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IDigitalInputPorts Members
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// IR port collection
|
|
||||||
/// </summary>
|
|
||||||
public CrestronCollection<IROutputPort> IROutputPorts
|
|
||||||
{
|
|
||||||
get { return _ir104.IROutputPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Number of relay ports property
|
|
||||||
/// </summary>
|
|
||||||
public int NumberOfIROutputPorts
|
|
||||||
{
|
|
||||||
get { return _ir104.NumberOfIROutputPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// CEN-IO-IR-104 controller fatory
|
|
||||||
/// </summary>
|
|
||||||
public class CenIoIr104ControllerFactory : EssentialsDeviceFactory<CenIoIr104Controller>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Constructor
|
|
||||||
/// </summary>
|
|
||||||
public CenIoIr104ControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "cenioir104" };
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Build device CEN-IO-IR-104
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="dc"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new CEN-IO-IR-104 Device");
|
|
||||||
|
|
||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
if (control == null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-IR-104 Device, control properties not found");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var ipid = control.IpIdInt;
|
|
||||||
if(ipid != 0) return new CenIoIr104Controller(dc.Key, dc.Name, new CenIoIr104(ipid, Global.ControlSystem));
|
|
||||||
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-IR-104 Device using IP-ID-{0}", ipid);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,189 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
|
||||||
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
|
||||||
|
|
||||||
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Represents a generic digital input deviced tied to a versiport
|
|
||||||
/// </summary>
|
|
||||||
public class GenericVersiportDigitalOutputDevice : EssentialsBridgeableDevice, IDigitalOutput
|
|
||||||
{
|
|
||||||
public Versiport OutputPort { get; private set; }
|
|
||||||
|
|
||||||
public BoolFeedback OutputStateFeedback { get; private set; }
|
|
||||||
|
|
||||||
Func<bool> OutputStateFeedbackFunc
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return () => OutputPort.DigitalOut;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public GenericVersiportDigitalOutputDevice(string key, string name, Func<IOPortConfig, Versiport> postActivationFunc, IOPortConfig config) :
|
|
||||||
base(key, name)
|
|
||||||
{
|
|
||||||
OutputStateFeedback = new BoolFeedback(OutputStateFeedbackFunc);
|
|
||||||
|
|
||||||
AddPostActivationAction(() =>
|
|
||||||
{
|
|
||||||
OutputPort = postActivationFunc(config);
|
|
||||||
|
|
||||||
OutputPort.Register();
|
|
||||||
|
|
||||||
|
|
||||||
if (!OutputPort.SupportsDigitalOutput)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Device does not support configuration as a Digital Output");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
OutputPort.SetVersiportConfiguration(eVersiportConfiguration.DigitalOutput);
|
|
||||||
|
|
||||||
|
|
||||||
OutputPort.VersiportChange += OutputPort_VersiportChange;
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void OutputPort_VersiportChange(Versiport port, VersiportEventArgs args)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Versiport change: {0}", args.Event);
|
|
||||||
|
|
||||||
if(args.Event == eVersiportEvent.DigitalOutChange)
|
|
||||||
OutputStateFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Set value of the versiport digital output
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="state">value to set the output to</param>
|
|
||||||
public void SetOutput(bool state)
|
|
||||||
{
|
|
||||||
if (OutputPort.SupportsDigitalOutput)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Passed the Check");
|
|
||||||
|
|
||||||
OutputPort.DigitalOut = state;
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Versiport does not support Digital Output Mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Bridge Linking
|
|
||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
|
||||||
{
|
|
||||||
var joinMap = new IDigitalOutputJoinMap(joinStart);
|
|
||||||
|
|
||||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
|
||||||
joinMap = JsonConvert.DeserializeObject<IDigitalOutputJoinMap>(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.");
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
|
||||||
|
|
||||||
// Link feedback for input state
|
|
||||||
OutputStateFeedback.LinkInputSig(trilist.BooleanInput[joinMap.OutputState.JoinNumber]);
|
|
||||||
trilist.SetBoolSigAction(joinMap.OutputState.JoinNumber, SetOutput);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Unable to link device '{0}'. Input is null", Key);
|
|
||||||
Debug.Console(1, this, "Error: {0}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
public static Versiport GetVersiportDigitalOutput(IOPortConfig dc)
|
|
||||||
{
|
|
||||||
|
|
||||||
IIOPorts ioPortDevice;
|
|
||||||
|
|
||||||
if (dc.PortDeviceKey.Equals("processor"))
|
|
||||||
{
|
|
||||||
if (!Global.ControlSystem.SupportsVersiport)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetVersiportDigitalOuptut: Processor does not support Versiports");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
ioPortDevice = Global.ControlSystem;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var ioPortDev = DeviceManager.GetDeviceForKey(dc.PortDeviceKey) as IIOPorts;
|
|
||||||
if (ioPortDev == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetVersiportDigitalOuptut: Device {0} is not a valid device", dc.PortDeviceKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
ioPortDevice = ioPortDev;
|
|
||||||
}
|
|
||||||
if (ioPortDevice == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetVersiportDigitalOuptut: Device '0' is not a valid IOPorts Device", dc.PortDeviceKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dc.PortNumber > ioPortDevice.NumberOfVersiPorts)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetVersiportDigitalOuptut: Device {0} does not contain a port {1}", dc.PortDeviceKey, dc.PortNumber);
|
|
||||||
}
|
|
||||||
var port = ioPortDevice.VersiPorts[dc.PortNumber];
|
|
||||||
return port;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public class GenericVersiportDigitalOutputDeviceFactory : EssentialsDeviceFactory<GenericVersiportDigitalInputDevice>
|
|
||||||
{
|
|
||||||
public GenericVersiportDigitalOutputDeviceFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "versiportoutput" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create new Generic Versiport Device");
|
|
||||||
|
|
||||||
var props = JsonConvert.DeserializeObject<IOPortConfig>(dc.Properties.ToString());
|
|
||||||
|
|
||||||
if (props == null) return null;
|
|
||||||
|
|
||||||
var portDevice = new GenericVersiportDigitalOutputDevice(dc.Key, dc.Name, GenericVersiportDigitalOutputDevice.GetVersiportDigitalOutput, props);
|
|
||||||
|
|
||||||
return portDevice;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.CrestronIO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Represents a device that provides digital input
|
|
||||||
/// </summary>
|
|
||||||
public interface IDigitalOutput
|
|
||||||
{
|
|
||||||
BoolFeedback OutputStateFeedback { get; }
|
|
||||||
void SetOutput(bool state);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharpPro;
|
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Wrapper class for CEN-IO-RY-104 relay module
|
|
||||||
/// </summary>
|
|
||||||
[Description("Wrapper class for the CEN-IO-RY-104 relay module")]
|
|
||||||
public class CenIoRy104Controller : CrestronGenericBaseDevice, IRelayPorts
|
|
||||||
{
|
|
||||||
private readonly CenIoRy104 _ry104;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Constructor
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="key"></param>
|
|
||||||
/// <param name="name"></param>
|
|
||||||
/// <param name="ry104"></param>
|
|
||||||
public CenIoRy104Controller(string key, string name, CenIoRy104 ry104)
|
|
||||||
: base(key, name, ry104)
|
|
||||||
{
|
|
||||||
_ry104 = ry104;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Relay port collection
|
|
||||||
/// </summary>
|
|
||||||
public CrestronCollection<Relay> RelayPorts
|
|
||||||
{
|
|
||||||
get { return _ry104.RelayPorts; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Number of relay ports property
|
|
||||||
/// </summary>
|
|
||||||
public int NumberOfRelayPorts
|
|
||||||
{
|
|
||||||
get { return _ry104.NumberOfRelayPorts; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// CEN-IO-RY Controller factory
|
|
||||||
/// </summary>
|
|
||||||
public class CenIoRy104ControllerFactory : EssentialsDeviceFactory<CenIoRy104Controller>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Constructor
|
|
||||||
/// </summary>
|
|
||||||
public CenIoRy104ControllerFactory()
|
|
||||||
{
|
|
||||||
TypeNames = new List<string>() { "ceniory104" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory Attempting to create a new CEN-IO-RY-104 Device");
|
|
||||||
|
|
||||||
var controlPropertiesConfig = CommFactory.GetControlPropertiesConfig(dc);
|
|
||||||
if (controlPropertiesConfig == null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-RY-104 Device, control properties not found");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var ipid = controlPropertiesConfig.IpIdInt;
|
|
||||||
if (ipid != 0) return new CenIoRy104Controller(dc.Key, dc.Name, new CenIoRy104(ipid, Global.ControlSystem));
|
|
||||||
|
|
||||||
Debug.Console(1, "Factory failed to create a new CEN-IO-RY-104 Device using IP-ID-{0}", ipid);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -44,12 +44,6 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
{
|
{
|
||||||
RelayOutput = postActivationFunc(config);
|
RelayOutput = postActivationFunc(config);
|
||||||
|
|
||||||
if (RelayOutput == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Unable to get parent relay device for device key {0} and port {1}", config.PortDeviceKey, config.PortNumber);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
RelayOutput.Register();
|
RelayOutput.Register();
|
||||||
|
|
||||||
RelayOutput.StateChange += RelayOutput_StateChange;
|
RelayOutput.StateChange += RelayOutput_StateChange;
|
||||||
@@ -67,36 +61,33 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
{
|
{
|
||||||
if (!Global.ControlSystem.SupportsRelay)
|
if (!Global.ControlSystem.SupportsRelay)
|
||||||
{
|
{
|
||||||
Debug.Console(0, "Processor does not support relays");
|
Debug.Console(0, "GetRelayDevice: Processor does not support relays");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
relayDevice = Global.ControlSystem;
|
relayDevice = Global.ControlSystem;
|
||||||
|
|
||||||
return relayDevice.RelayPorts[dc.PortNumber];
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
var essentialsDevice = DeviceManager.GetDeviceForKey(dc.PortDeviceKey);
|
|
||||||
if (essentialsDevice == null)
|
|
||||||
{
|
{
|
||||||
Debug.Console(0, "Device {0} was not found in Device Manager. Check configuration or for errors with device.", dc.PortDeviceKey);
|
var relayDev = DeviceManager.GetDeviceForKey(dc.PortDeviceKey) as IRelayPorts;
|
||||||
|
if (relayDev == null)
|
||||||
|
{
|
||||||
|
Debug.Console(0, "GetRelayDevice: Device {0} is not a valid device", dc.PortDeviceKey);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
relayDevice = relayDev;
|
||||||
relayDevice = essentialsDevice as IRelayPorts;
|
}
|
||||||
|
|
||||||
if (relayDevice == null)
|
if (relayDevice == null)
|
||||||
{
|
{
|
||||||
Debug.Console(0, "Device {0} is not a valid relay parent. Please check configuration.", dc.PortDeviceKey);
|
Debug.Console(0, "GetRelayDevice: Device '0' is not a valid IRelayPorts Device", dc.PortDeviceKey);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dc.PortNumber <= relayDevice.NumberOfRelayPorts)
|
if (dc.PortNumber > relayDevice.NumberOfRelayPorts)
|
||||||
{
|
{
|
||||||
return relayDevice.RelayPorts[dc.PortNumber];
|
Debug.Console(0, "GetRelayDevice: Device {0} does not contain a port {1}", dc.PortDeviceKey, dc.PortNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Console(0, "Device {0} does not contain a port {1}", dc.PortDeviceKey, dc.PortNumber);
|
return relayDevice.RelayPorts[dc.PortNumber];
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -209,6 +200,58 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
var portDevice = new GenericRelayDevice(dc.Key, dc.Name, GetRelay, props);
|
var portDevice = new GenericRelayDevice(dc.Key, dc.Name, GetRelay, props);
|
||||||
|
|
||||||
return portDevice;
|
return portDevice;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (props.PortDeviceKey == "processor")
|
||||||
|
portDevice = Global.ControlSystem as IRelayPorts;
|
||||||
|
else
|
||||||
|
portDevice = DeviceManager.GetDeviceForKey(props.PortDeviceKey) as IRelayPorts;
|
||||||
|
|
||||||
|
if (portDevice == null)
|
||||||
|
Debug.Console(0, "Unable to add relay device with key '{0}'. Port Device does not support relays", key);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var cs = (portDevice as CrestronControlSystem);
|
||||||
|
|
||||||
|
if (cs != null)
|
||||||
|
{
|
||||||
|
// The relay is on a control system processor
|
||||||
|
if (!cs.SupportsRelay || props.PortNumber > cs.NumberOfRelayPorts)
|
||||||
|
{
|
||||||
|
Debug.Console(0, "Port Device: {0} does not support relays or does not have enough relays");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// The relay is on another device type
|
||||||
|
|
||||||
|
if (props.PortNumber > portDevice.NumberOfRelayPorts)
|
||||||
|
{
|
||||||
|
Debug.Console(0, "Port Device: {0} does not have enough relays");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Relay relay = portDevice.RelayPorts[props.PortNumber];
|
||||||
|
|
||||||
|
if (!relay.Registered)
|
||||||
|
{
|
||||||
|
if (relay.Register() == eDeviceRegistrationUnRegistrationResponse.Success)
|
||||||
|
return new GenericRelayDevice(key, relay);
|
||||||
|
else
|
||||||
|
Debug.Console(0, "Attempt to register relay {0} on device with key '{1}' failed.", props.PortNumber, props.PortDeviceKey);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new GenericRelayDevice(key, relay);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Future: Check if portDevice is 3-series card or other non control system that supports versiports
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -73,30 +73,15 @@ namespace PepperDash.Essentials.Core
|
|||||||
{
|
{
|
||||||
//Debug.Console(1, this, " Does not require registration. Skipping");
|
//Debug.Console(1, this, " Does not require registration. Skipping");
|
||||||
|
|
||||||
if (Hardware.Registerable && !Hardware.Registered)
|
|
||||||
{
|
|
||||||
var response = Hardware.RegisterWithLogging(Key);
|
var response = Hardware.RegisterWithLogging(Key);
|
||||||
if (response != eDeviceRegistrationUnRegistrationResponse.Success)
|
if (response != eDeviceRegistrationUnRegistrationResponse.Success)
|
||||||
{
|
{
|
||||||
//Debug.Console(0, this, "ERROR: Cannot register Crestron device: {0}", response);
|
//Debug.Console(0, this, "ERROR: Cannot register Crestron device: {0}", response);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
IsRegistered.FireUpdate();
|
IsRegistered.FireUpdate();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
AddPostActivationAction(() =>
|
|
||||||
{
|
|
||||||
if (Hardware.Registerable && !Hardware.Registered)
|
|
||||||
{
|
|
||||||
var response = Hardware.RegisterWithLogging(Key);
|
|
||||||
}
|
|
||||||
|
|
||||||
IsRegistered.FireUpdate();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var f in Feedbacks)
|
foreach (var f in Feedbacks)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,9 +12,8 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
|||||||
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
||||||
{
|
{
|
||||||
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
||||||
public interface IHasBranding
|
public interface IHasBranding:PepperDash.Essentials.Core.DeviceTypeInterfaces.IHasBranding
|
||||||
{
|
{
|
||||||
bool BrandingEnabled { get; }
|
|
||||||
void InitializeBranding(string roomKey);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
||||||
{
|
{
|
||||||
@@ -17,13 +16,7 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
|||||||
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
||||||
{
|
{
|
||||||
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
||||||
public interface IHasPhoneDialing
|
public interface IHasPhoneDialing:PepperDash.Essentials.Core.DeviceTypeInterfaces.IHasPhoneDialing
|
||||||
{
|
{
|
||||||
BoolFeedback PhoneOffHookFeedback { get; }
|
|
||||||
StringFeedback CallerIdNameFeedback { get; }
|
|
||||||
StringFeedback CallerIdNumberFeedback { get; }
|
|
||||||
void DialPhoneCall(string number);
|
|
||||||
void EndPhoneCall();
|
|
||||||
void SendDtmfToPhone(string digit);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,16 +20,7 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
|||||||
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
||||||
{
|
{
|
||||||
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
||||||
public interface ILanguageDefinition
|
public interface ILanguageDefinition:PepperDash.Essentials.Core.DeviceTypeInterfaces.ILanguageDefinition
|
||||||
{
|
{
|
||||||
string LocaleName { get; set; }
|
|
||||||
string FriendlyName { get; set; }
|
|
||||||
bool Enable { get; set; }
|
|
||||||
List<LanguageLabel> UiLabels { get; set; }
|
|
||||||
List<LanguageLabel> Sources { get; set; }
|
|
||||||
List<LanguageLabel> Destinations { get; set; }
|
|
||||||
List<LanguageLabel> SourceGroupNames { get; set; }
|
|
||||||
List<LanguageLabel> DestinationGroupNames { get; set; }
|
|
||||||
List<LanguageLabel> RoomNames { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -15,11 +15,8 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
|||||||
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
||||||
{
|
{
|
||||||
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
||||||
public interface ILanguageProvider
|
public interface ILanguageProvider:PepperDash.Essentials.Core.DeviceTypeInterfaces.ILanguageProvider
|
||||||
{
|
{
|
||||||
ILanguageDefinition CurrentLanguage { get; set; }
|
|
||||||
|
|
||||||
event EventHandler CurrentLanguageChanged;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -8,19 +8,11 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IMobileControl : IKeyed
|
public interface IMobileControl : IKeyed
|
||||||
{
|
{
|
||||||
void CreateMobileControlRoomBridge(IEssentialsRoom room, IMobileControl parent);
|
void CreateMobileControlRoomBridge(EssentialsRoomBase room, IMobileControl parent);
|
||||||
|
|
||||||
void LinkSystemMonitorToAppServer();
|
void LinkSystemMonitorToAppServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Describes a MobileSystemController that accepts IEssentialsRoom
|
|
||||||
/// </summary>
|
|
||||||
public interface IMobileControl3 : IMobileControl
|
|
||||||
{
|
|
||||||
void CreateMobileControlRoomBridge(IEssentialsRoom room, IMobileControl parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Describes a MobileControl Room Bridge
|
/// Describes a MobileControl Room Bridge
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -28,10 +20,6 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
|||||||
{
|
{
|
||||||
event EventHandler<EventArgs> UserCodeChanged;
|
event EventHandler<EventArgs> UserCodeChanged;
|
||||||
|
|
||||||
event EventHandler<EventArgs> UserPromptedForCode;
|
|
||||||
|
|
||||||
event EventHandler<EventArgs> ClientJoined;
|
|
||||||
|
|
||||||
string UserCode { get; }
|
string UserCode { get; }
|
||||||
|
|
||||||
string QrCodeUrl { get; }
|
string QrCodeUrl { get; }
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Describes the functionality required to prompt a user to enter a password
|
|
||||||
/// </summary>
|
|
||||||
public interface IPasswordPrompt
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Notifies when a password is required or is entered incorrectly
|
|
||||||
/// </summary>
|
|
||||||
event EventHandler<PasswordPromptEventArgs> PasswordRequired;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Submits the password
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="password"></param>
|
|
||||||
void SubmitPassword(string password);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class PasswordPromptEventArgs : EventArgs
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Indicates if the last submitted password was incorrect
|
|
||||||
/// </summary>
|
|
||||||
public bool LastAttemptWasIncorrect { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Indicates that the login attempt has failed
|
|
||||||
/// </summary>
|
|
||||||
public bool LoginAttemptFailed { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Indicates that the process was cancelled and the prompt should be dismissed
|
|
||||||
/// </summary>
|
|
||||||
public bool LoginAttemptCancelled { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A message to be displayed to the user
|
|
||||||
/// </summary>
|
|
||||||
public string Message { get; private set; }
|
|
||||||
|
|
||||||
public PasswordPromptEventArgs(bool lastAttemptIncorrect, bool loginFailed, bool loginCancelled, string message)
|
|
||||||
{
|
|
||||||
LastAttemptWasIncorrect = lastAttemptIncorrect;
|
|
||||||
LoginAttemptFailed = loginFailed;
|
|
||||||
LoginAttemptCancelled = loginCancelled;
|
|
||||||
Message = message;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -15,11 +15,7 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
|||||||
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
namespace PepperDash_Essentials_Core.DeviceTypeInterfaces
|
||||||
{
|
{
|
||||||
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
[Obsolete("Use PepperDash.Essentials.Core.DeviceTypeInterfaces")]
|
||||||
public class LanguageLabel
|
public class LanguageLabel: PepperDash.Essentials.Core.DeviceTypeInterfaces.LanguageLabel
|
||||||
{
|
{
|
||||||
public string Key { get; set; }
|
|
||||||
public string Description { get; set; }
|
|
||||||
public string DisplayText { get; set; }
|
|
||||||
public uint JoinNumber { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
using Newtonsoft.Json;
|
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
public class DestinationListItem
|
|
||||||
{
|
|
||||||
[JsonProperty("sinkKey")]
|
|
||||||
public string SinkKey { get; set; }
|
|
||||||
|
|
||||||
private EssentialsDevice _sinkDevice;
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public EssentialsDevice SinkDevice
|
|
||||||
{
|
|
||||||
get { return _sinkDevice ?? (_sinkDevice = DeviceManager.GetDeviceForKey(SinkKey) as EssentialsDevice); }
|
|
||||||
}
|
|
||||||
|
|
||||||
[JsonProperty("preferredName")]
|
|
||||||
public string PreferredName
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrEmpty(Name))
|
|
||||||
{
|
|
||||||
return Name;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SinkDevice == null ? "---" : SinkDevice.Name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[JsonProperty("name")]
|
|
||||||
public string Name { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("includeInDestinationList")]
|
|
||||||
public bool IncludeInDestinationList { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("order")]
|
|
||||||
public int Order { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("surfaceLocation")]
|
|
||||||
public int SurfaceLocation { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("verticalLocation")]
|
|
||||||
public int VerticalLocation { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("horizontalLocation")]
|
|
||||||
public int HorizontalLocation { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty("sinkType")]
|
|
||||||
public eRoutingSignalType SinkType { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -19,25 +19,10 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="json"></param>
|
/// <param name="json"></param>
|
||||||
public static void DoDeviceActionWithJson(string json)
|
public static void DoDeviceActionWithJson(string json)
|
||||||
{
|
|
||||||
if (String.IsNullOrEmpty(json))
|
|
||||||
{
|
|
||||||
CrestronConsole.ConsoleCommandResponse(
|
|
||||||
"Please provide a JSON object matching the format {\"deviceKey\":\"myDevice\", \"methodName\":\"someMethod\", \"params\": [\"param1\", true]}.\r\nIf the method has no parameters, the \"params\" object may be omitted.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
var action = JsonConvert.DeserializeObject<DeviceActionWrapper>(json);
|
var action = JsonConvert.DeserializeObject<DeviceActionWrapper>(json);
|
||||||
|
|
||||||
DoDeviceAction(action);
|
DoDeviceAction(action);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
CrestronConsole.ConsoleCommandResponse("Incorrect format for JSON. Please check that the format matches {\"deviceKey\":\"myDevice\", \"methodName\":\"someMethod\", \"params\": [\"param1\", true]}");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -49,62 +34,28 @@ namespace PepperDash.Essentials.Core
|
|||||||
var key = action.DeviceKey;
|
var key = action.DeviceKey;
|
||||||
var obj = FindObjectOnPath(key);
|
var obj = FindObjectOnPath(key);
|
||||||
if (obj == null)
|
if (obj == null)
|
||||||
{
|
|
||||||
CrestronConsole.ConsoleCommandResponse("Unable to find object at path {0}", key);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
if (action.Params == null)
|
|
||||||
{
|
|
||||||
//no params, so setting action.Params to empty array
|
|
||||||
action.Params = new object[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
CType t = obj.GetType();
|
CType t = obj.GetType();
|
||||||
try
|
var method = t.GetMethod(action.MethodName);
|
||||||
{
|
|
||||||
var methods = t.GetMethods().Where(m => m.Name == action.MethodName).ToList();
|
|
||||||
|
|
||||||
var method = methods.Count == 1 ? methods[0] : methods.FirstOrDefault(m => m.GetParameters().Length == action.Params.Length);
|
|
||||||
|
|
||||||
if (method == null)
|
if (method == null)
|
||||||
{
|
{
|
||||||
CrestronConsole.ConsoleCommandResponse(
|
Debug.Console(0, "Method '{0}' not found", action.MethodName);
|
||||||
"Unable to find method with name {0} and that matches parameters {1}", action.MethodName,
|
|
||||||
action.Params);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var mParams = method.GetParameters();
|
var mParams = method.GetParameters();
|
||||||
|
// Add empty params if not provided
|
||||||
var convertedParams = mParams
|
if (action.Params == null) action.Params = new object[0];
|
||||||
.Select((p, i) => ConvertType(action.Params[i], p.ParameterType))
|
if (mParams.Length > action.Params.Length)
|
||||||
|
{
|
||||||
|
Debug.Console(0, "Method '{0}' requires {1} params", action.MethodName, mParams.Length);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
object[] convertedParams = mParams
|
||||||
|
.Select((p, i) => Convert.ChangeType(action.Params[i], p.ParameterType,
|
||||||
|
System.Globalization.CultureInfo.InvariantCulture))
|
||||||
.ToArray();
|
.ToArray();
|
||||||
method.Invoke(obj, convertedParams);
|
object ret = method.Invoke(obj, convertedParams);
|
||||||
|
|
||||||
CrestronConsole.ConsoleCommandResponse("Method {0} successfully called on device {1}", method.Name,
|
|
||||||
action.DeviceKey);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
CrestronConsole.ConsoleCommandResponse("Unable to call method with name {0}. {1}", action.MethodName,
|
|
||||||
ex.Message);}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static object ConvertType(object value, Type conversionType)
|
|
||||||
{
|
|
||||||
if (!conversionType.IsEnum)
|
|
||||||
{
|
|
||||||
return Convert.ChangeType(value, conversionType, System.Globalization.CultureInfo.InvariantCulture);
|
|
||||||
}
|
|
||||||
|
|
||||||
var stringValue = Convert.ToString(value);
|
|
||||||
|
|
||||||
if (String.IsNullOrEmpty(stringValue))
|
|
||||||
{
|
|
||||||
throw new InvalidCastException(
|
|
||||||
String.Format("{0} cannot be converted to a string prior to conversion to enum"));
|
|
||||||
}
|
|
||||||
return Enum.Parse(conversionType, stringValue, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -291,8 +242,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
//var props = t.GetProperties().Select(p => new PropertyNameType(p, obj));
|
//var props = t.GetProperties().Select(p => new PropertyNameType(p, obj));
|
||||||
//return JsonConvert.SerializeObject(props, Formatting.Indented);
|
//return JsonConvert.SerializeObject(props, Formatting.Indented);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DeviceActionWrapper
|
public class DeviceActionWrapper
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
public static class DeviceManager
|
public static class DeviceManager
|
||||||
{
|
{
|
||||||
public static event EventHandler<EventArgs> AllDevicesActivated;
|
public static event EventHandler<EventArgs> AllDevicesActivated;
|
||||||
public static event EventHandler<EventArgs> AllDevicesRegistered;
|
|
||||||
|
|
||||||
private static readonly CCriticalSection DeviceCriticalSection = new CCriticalSection();
|
private static readonly CCriticalSection DeviceCriticalSection = new CCriticalSection();
|
||||||
private static readonly CEvent AllowAddDevicesCEvent = new CEvent(false, true);
|
private static readonly CEvent AllowAddDevicesCEvent = new CEvent(false, true);
|
||||||
@@ -47,7 +46,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
CrestronConsole.AddNewConsoleCommand(SimulateComReceiveOnDevice, "devsimreceive",
|
CrestronConsole.AddNewConsoleCommand(SimulateComReceiveOnDevice, "devsimreceive",
|
||||||
"Simulates incoming data on a com device", ConsoleAccessLevelEnum.AccessOperator);
|
"Simulates incoming data on a com device", ConsoleAccessLevelEnum.AccessOperator);
|
||||||
|
|
||||||
CrestronConsole.AddNewConsoleCommand(SetDeviceStreamDebugging, "setdevicestreamdebug", "set comm debug [deviceKey] [off/rx/tx/both] ([minutes])", ConsoleAccessLevelEnum.AccessOperator);
|
CrestronConsole.AddNewConsoleCommand(s => SetDeviceStreamDebugging(s), "setdevicestreamdebug", "set comm debug [deviceKey] [off/rx/tx/both] ([minutes])", ConsoleAccessLevelEnum.AccessOperator);
|
||||||
CrestronConsole.AddNewConsoleCommand(s => DisableAllDeviceStreamDebugging(), "disableallstreamdebug", "disables stream debugging on all devices", ConsoleAccessLevelEnum.AccessOperator);
|
CrestronConsole.AddNewConsoleCommand(s => DisableAllDeviceStreamDebugging(), "disableallstreamdebug", "disables stream debugging on all devices", ConsoleAccessLevelEnum.AccessOperator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,12 +57,9 @@ namespace PepperDash.Essentials.Core
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
OnAllDevicesRegistered();
|
|
||||||
|
|
||||||
DeviceCriticalSection.Enter();
|
DeviceCriticalSection.Enter();
|
||||||
AddDeviceEnabled = false;
|
AddDeviceEnabled = false;
|
||||||
// PreActivate all devices
|
// PreActivate all devices
|
||||||
Debug.Console(0,"****PreActivation starting...****");
|
|
||||||
foreach (var d in Devices.Values)
|
foreach (var d in Devices.Values)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -73,12 +69,9 @@ namespace PepperDash.Essentials.Core
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Debug.Console(0, d, "ERROR: Device {1} PreActivation failure: {0}", e.Message, d.Key);
|
Debug.Console(0, d, "ERROR: Device PreActivation failure:\r{0}", e);
|
||||||
Debug.Console(1, d, "Stack Trace: {0}", e.StackTrace);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Debug.Console(0, "****PreActivation complete****");
|
|
||||||
Debug.Console(0, "****Activation starting...****");
|
|
||||||
|
|
||||||
// Activate all devices
|
// Activate all devices
|
||||||
foreach (var d in Devices.Values)
|
foreach (var d in Devices.Values)
|
||||||
@@ -90,14 +83,10 @@ namespace PepperDash.Essentials.Core
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Debug.Console(0, d, "ERROR: Device {1} Activation failure: {0}", e.Message, d.Key);
|
Debug.Console(0, d, "ERROR: Device Activation failure:\r{0}", e);
|
||||||
Debug.Console(1, d, "Stack Trace: {0}", e.StackTrace);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Console(0, "****Activation complete****");
|
|
||||||
Debug.Console(0, "****PostActivation starting...****");
|
|
||||||
|
|
||||||
// PostActivate all devices
|
// PostActivate all devices
|
||||||
foreach (var d in Devices.Values)
|
foreach (var d in Devices.Values)
|
||||||
{
|
{
|
||||||
@@ -108,13 +97,10 @@ namespace PepperDash.Essentials.Core
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Debug.Console(0, d, "ERROR: Device {1} PostActivation failure: {0}", e.Message, d.Key);
|
Debug.Console(0, d, "ERROR: Device PostActivation failure:\r{0}", e);
|
||||||
Debug.Console(1, d, "Stack Trace: {0}", e.StackTrace);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Console(0, "****PostActivation complete****");
|
|
||||||
|
|
||||||
OnAllDevicesActivated();
|
OnAllDevicesActivated();
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@@ -132,15 +118,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void OnAllDevicesRegistered()
|
|
||||||
{
|
|
||||||
var handler = AllDevicesRegistered;
|
|
||||||
if (handler != null)
|
|
||||||
{
|
|
||||||
handler(null, new EventArgs());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Calls activate on all Device class items
|
/// Calls activate on all Device class items
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -388,17 +365,19 @@ namespace PepperDash.Essentials.Core
|
|||||||
var outputPorts = ((device as IRoutingOutputs) != null) ? (device as IRoutingOutputs).OutputPorts : null;
|
var outputPorts = ((device as IRoutingOutputs) != null) ? (device as IRoutingOutputs).OutputPorts : null;
|
||||||
if (inputPorts != null)
|
if (inputPorts != null)
|
||||||
{
|
{
|
||||||
CrestronConsole.ConsoleCommandResponse("Device {0} has {1} Input Ports:{2}", s, inputPorts.Count, CrestronEnvironment.NewLine);
|
Debug.Console(0, "Device {0} has {1} Input Ports:", s, inputPorts.Count);
|
||||||
foreach (var routingInputPort in inputPorts)
|
foreach (var routingInputPort in inputPorts)
|
||||||
{
|
{
|
||||||
CrestronConsole.ConsoleCommandResponse("{0}{1}", routingInputPort.Key, CrestronEnvironment.NewLine);
|
Debug.Console(0, "{0}", routingInputPort.Key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (outputPorts == null) return;
|
if (outputPorts != null)
|
||||||
CrestronConsole.ConsoleCommandResponse("Device {0} has {1} Output Ports:{2}", s, outputPorts.Count, CrestronEnvironment.NewLine);
|
{
|
||||||
|
Debug.Console(0, "Device {0} has {1} Output Ports:", s, outputPorts.Count);
|
||||||
foreach (var routingOutputPort in outputPorts)
|
foreach (var routingOutputPort in outputPorts)
|
||||||
{
|
{
|
||||||
CrestronConsole.ConsoleCommandResponse("{0}{1}", routingOutputPort.Key, CrestronEnvironment.NewLine);
|
Debug.Console(0, "{0}", routingOutputPort.Key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -408,15 +387,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// <param name="s"></param>
|
/// <param name="s"></param>
|
||||||
public static void SetDeviceStreamDebugging(string s)
|
public static void SetDeviceStreamDebugging(string s)
|
||||||
{
|
{
|
||||||
if (String.IsNullOrEmpty(s) || s.Contains("?"))
|
|
||||||
{
|
|
||||||
CrestronConsole.ConsoleCommandResponse(
|
|
||||||
@"SETDEVICESTREAMDEBUG [{deviceKey}] [OFF |TX | RX | BOTH] [timeOutInMinutes]
|
|
||||||
{deviceKey} [OFF | TX | RX | BOTH] - Device to set stream debugging on, and which setting to use
|
|
||||||
timeOutInMinutes - Set timeout for stream debugging. Default is 30 minutes");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var args = s.Split(' ');
|
var args = s.Split(' ');
|
||||||
|
|
||||||
var deviceKey = args[0];
|
var deviceKey = args[0];
|
||||||
@@ -433,7 +403,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
|
|
||||||
if (device == null)
|
if (device == null)
|
||||||
{
|
{
|
||||||
CrestronConsole.ConsoleCommandResponse("Unable to get device with key: {0}", deviceKey);
|
Debug.Console(0, "Unable to get device with key: {0}", deviceKey);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -445,7 +415,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
CrestronConsole.ConsoleCommandResponse("Unable to convert setting value. Please use off/rx/tx/both");
|
Debug.Console(0, "Unable to convert setting value. Please use off/rx/tx/both");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -456,18 +426,18 @@ namespace PepperDash.Essentials.Core
|
|||||||
var min = Convert.ToUInt32(timeout);
|
var min = Convert.ToUInt32(timeout);
|
||||||
|
|
||||||
device.StreamDebugging.SetDebuggingWithSpecificTimeout(debugSetting, min);
|
device.StreamDebugging.SetDebuggingWithSpecificTimeout(debugSetting, min);
|
||||||
CrestronConsole.ConsoleCommandResponse("Device: '{0}' debug level set to {1} for {2} minutes", deviceKey, debugSetting, min);
|
Debug.Console(0, "Device: '{0}' debug level set to {1) for {2} minutes", deviceKey, debugSetting, min);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
CrestronConsole.ConsoleCommandResponse("Unable to convert minutes or settings value. Please use an integer value for minutes. Error: {0}", e);
|
Debug.Console(0, "Unable to convert minutes or settings value. Please use an integer value for minutes. Errro: {0}", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
device.StreamDebugging.SetDebuggingWithDefaultTimeout(debugSetting);
|
device.StreamDebugging.SetDebuggingWithDefaultTimeout(debugSetting);
|
||||||
CrestronConsole.ConsoleCommandResponse("Device: '{0}' debug level set to {1} for default time (30 minutes)", deviceKey, debugSetting);
|
Debug.Console(0, "Device: '{0}' debug level set to {1) for default time (30 minutes)", deviceKey, debugSetting);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,34 +19,13 @@ namespace PepperDash.Essentials.Core
|
|||||||
protected EssentialsDevice(string key)
|
protected EssentialsDevice(string key)
|
||||||
: base(key)
|
: base(key)
|
||||||
{
|
{
|
||||||
SubscribeToActivateComplete();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected EssentialsDevice(string key, string name)
|
protected EssentialsDevice(string key, string name)
|
||||||
: base(key, name)
|
: base(key, name)
|
||||||
{
|
{
|
||||||
SubscribeToActivateComplete();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SubscribeToActivateComplete()
|
|
||||||
{
|
|
||||||
DeviceManager.AllDevicesActivated += DeviceManagerOnAllDevicesActivated;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DeviceManagerOnAllDevicesActivated(object sender, EventArgs eventArgs)
|
|
||||||
{
|
|
||||||
CrestronInvoke.BeginInvoke((o) =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Initialize();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Exception initializing device: {0}", ex.Message);
|
|
||||||
Debug.Console(1, this, Debug.ErrorLogLevel.Error, "Stack Trace: {0}", ex.StackTrace);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +36,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
|
|
||||||
public DescriptionAttribute(string description)
|
public DescriptionAttribute(string description)
|
||||||
{
|
{
|
||||||
//Debug.Console(2, "Setting Description: {0}", description);
|
Debug.Console(2, "Setting Description: {0}", description);
|
||||||
_Description = description;
|
_Description = description;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +53,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
|
|
||||||
public ConfigSnippetAttribute(string configSnippet)
|
public ConfigSnippetAttribute(string configSnippet)
|
||||||
{
|
{
|
||||||
//Debug.Console(2, "Setting Config Snippet {0}", configSnippet);
|
Debug.Console(2, "Setting Config Snippet {0}", configSnippet);
|
||||||
_ConfigSnippet = configSnippet;
|
_ConfigSnippet = configSnippet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +82,7 @@ namespace PepperDash.Essentials.Core
|
|||||||
{
|
{
|
||||||
foreach (var typeName in TypeNames)
|
foreach (var typeName in TypeNames)
|
||||||
{
|
{
|
||||||
//Debug.Console(2, "Getting Description Attribute from class: '{0}'", typeof(T).FullName);
|
Debug.Console(2, "Getting Description Attribute from class: '{0}'", typeof(T).FullName);
|
||||||
var descriptionAttribute = typeof(T).GetCustomAttributes(typeof(DescriptionAttribute), true) as DescriptionAttribute[];
|
var descriptionAttribute = typeof(T).GetCustomAttributes(typeof(DescriptionAttribute), true) as DescriptionAttribute[];
|
||||||
string description = descriptionAttribute[0].Description;
|
string description = descriptionAttribute[0].Description;
|
||||||
var snippetAttribute = typeof(T).GetCustomAttributes(typeof(ConfigSnippetAttribute), true) as ConfigSnippetAttribute[];
|
var snippetAttribute = typeof(T).GetCustomAttributes(typeof(ConfigSnippetAttribute), true) as ConfigSnippetAttribute[];
|
||||||
@@ -131,15 +110,4 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string MinimumEssentialsFrameworkVersion { get; protected set; }
|
public string MinimumEssentialsFrameworkVersion { get; protected set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class EssentialsPluginDevelopmentDeviceFactory<T> : EssentialsDeviceFactory<T>, IPluginDevelopmentDeviceFactory where T : EssentialsDevice
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Specifies the minimum version of Essentials required for a plugin to run. Must use the format Major.Minor.Build (ex. "1.4.33")
|
|
||||||
/// </summary>
|
|
||||||
public string MinimumEssentialsFrameworkVersion { get; protected set; }
|
|
||||||
|
|
||||||
public List<string> DevelopmentEssentialsFrameworkVersions { get; protected set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using PepperDash.Essentials.Core.Config;
|
|
||||||
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.Devices
|
|
||||||
{
|
|
||||||
public interface IReconfigurableDevice
|
|
||||||
{
|
|
||||||
event EventHandler<EventArgs> ConfigChanged;
|
|
||||||
|
|
||||||
DeviceConfig Config { get; }
|
|
||||||
|
|
||||||
void SetConfig(DeviceConfig config);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -7,7 +7,7 @@ using Crestron.SimplSharp;
|
|||||||
namespace PepperDash.Essentials.Core
|
namespace PepperDash.Essentials.Core
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defines minimal volume and mute control methods
|
/// Defines minimal volume control methods
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IBasicVolumeControls
|
public interface IBasicVolumeControls
|
||||||
{
|
{
|
||||||
@@ -16,52 +16,16 @@ namespace PepperDash.Essentials.Core
|
|||||||
void MuteToggle();
|
void MuteToggle();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Defines basic volume control methods
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasVolumeControl
|
|
||||||
{
|
|
||||||
void VolumeUp(bool pressRelease);
|
|
||||||
void VolumeDown(bool pressRelease);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Defines volume control methods and properties with feedback
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasVolumeControlWithFeedback : IHasVolumeControl
|
|
||||||
{
|
|
||||||
void SetVolume(ushort level);
|
|
||||||
IntFeedback VolumeLevelFeedback { get; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Defines basic mute control methods
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasMuteControl
|
|
||||||
{
|
|
||||||
void MuteToggle();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Defines mute control methods and properties with feedback
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasMuteControlWithFeedback : IHasMuteControl
|
|
||||||
{
|
|
||||||
BoolFeedback MuteFeedback { get; }
|
|
||||||
void MuteOn();
|
|
||||||
void MuteOff();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds feedback and direct volume level set to IBasicVolumeControls
|
/// Adds feedback and direct volume level set to IBasicVolumeControls
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IBasicVolumeWithFeedback : IBasicVolumeControls
|
public interface IBasicVolumeWithFeedback : IBasicVolumeControls
|
||||||
{
|
{
|
||||||
BoolFeedback MuteFeedback { get; }
|
void SetVolume(ushort level);
|
||||||
void MuteOn();
|
void MuteOn();
|
||||||
void MuteOff();
|
void MuteOff();
|
||||||
void SetVolume(ushort level);
|
|
||||||
IntFeedback VolumeLevelFeedback { get; }
|
IntFeedback VolumeLevelFeedback { get; }
|
||||||
|
BoolFeedback MuteFeedback { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Crestron.SimplSharp;
|
|
||||||
using PepperDash.Core;
|
|
||||||
using PepperDash.Essentials.Core;
|
|
||||||
|
|
||||||
namespace PepperDash_Essentials_Core.Devices
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interface for any device that is able to control it'spower and has a configurable reboot time
|
|
||||||
/// </summary>
|
|
||||||
[Obsolete("PepperDash_Essentials_Core.Devices is Deprecated - use PepperDash.Essentials.Core")]
|
|
||||||
public interface IHasPowerCycle : IKeyName, IHasPowerControlWithFeedback
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Delay between power off and power on for reboot
|
|
||||||
/// </summary>
|
|
||||||
int PowerCycleTimeMs { get;}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Reboot outlet
|
|
||||||
/// </summary>
|
|
||||||
void PowerCycle();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Interface for any device that contains a collection of IHasPowerReboot Devices
|
|
||||||
/// </summary>
|
|
||||||
[Obsolete("PepperDash_Essentials_Core.Devices is Deprecated - use PepperDash.Essentials.Core")]
|
|
||||||
public interface IHasControlledPowerOutlets : IKeyName
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Collection of IPduOutlets
|
|
||||||
/// </summary>
|
|
||||||
ReadOnlyDictionary<int, IHasPowerCycle> PduOutlets { get; }
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
using Crestron.SimplSharp;
|
|
||||||
using PepperDash.Core;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interface for any device that has a battery that can be monitored
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasBatteryStats : IKeyName
|
|
||||||
{
|
|
||||||
int BatteryPercentage { get; }
|
|
||||||
int BatteryCautionThresholdPercentage { get; }
|
|
||||||
int BatteryWarningThresholdPercentage { get; }
|
|
||||||
BoolFeedback BatteryIsWarningFeedback { get; }
|
|
||||||
BoolFeedback BatteryIsCautionFeedback { get; }
|
|
||||||
BoolFeedback BatteryIsOkFeedback { get; }
|
|
||||||
IntFeedback BatteryPercentageFeedback { get; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Interface for any device that has a battery that can be monitored and the ability to charge and discharge
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasBatteryCharging : IHasBatteryStats
|
|
||||||
{
|
|
||||||
BoolFeedback BatteryIsCharging { get; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Interface for any device that has multiple batteries that can be monitored
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasBatteries : IKeyName
|
|
||||||
{
|
|
||||||
ReadOnlyDictionary<string, IHasBatteryStats> Batteries { get; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface IHasBatteryStatsExtended : IHasBatteryStats
|
|
||||||
{
|
|
||||||
int InputVoltage { get; }
|
|
||||||
int OutputVoltage { get; }
|
|
||||||
int InptuCurrent { get; }
|
|
||||||
int OutputCurrent { get; }
|
|
||||||
|
|
||||||
IntFeedback InputVoltageFeedback { get; }
|
|
||||||
IntFeedback OutputVoltageFeedback { get; }
|
|
||||||
IntFeedback InputCurrentFeedback { get; }
|
|
||||||
IntFeedback OutputCurrentFeedback { get; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Interface for any device that is able to control its power, has a configurable reboot time, and has batteries that can be monitored
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasPowerCycleWithBattery : IHasPowerCycle, IHasBatteryStats
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Interface for any device that is able to control it's power and has a configurable reboot time
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasPowerCycle : IKeyName, IHasPowerControlWithFeedback
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Delay between power off and power on for reboot
|
|
||||||
/// </summary>
|
|
||||||
int PowerCycleTimeMs { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Reboot outlet
|
|
||||||
/// </summary>
|
|
||||||
void PowerCycle();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Interface for any device that contains a collection of IHasPowerReboot Devices
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasControlledPowerOutlets : IKeyName
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Collection of IPduOutlets
|
|
||||||
/// </summary>
|
|
||||||
ReadOnlyDictionary<int, IHasPowerCycle> PduOutlets { get; }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -7,15 +7,13 @@ using Crestron.SimplSharpPro.DeviceSupport;
|
|||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
using PepperDash.Essentials.Core.Bridges;
|
||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.Devices
|
namespace PepperDash.Essentials.Core.Devices
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class ReconfigurableDevice : EssentialsDevice, IReconfigurableDevice
|
public abstract class ReconfigurableDevice : EssentialsDevice
|
||||||
{
|
{
|
||||||
public event EventHandler<EventArgs> ConfigChanged;
|
public event EventHandler<EventArgs> ConfigChanged;
|
||||||
|
|
||||||
@@ -54,12 +52,10 @@ namespace PepperDash.Essentials.Core.Devices
|
|||||||
Name = config.Name;
|
Name = config.Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Used by the extending class to allow for any custom actions to be taken (tell the ConfigWriter to write config, etc)
|
/// Used by the extending class to allow for any custom actions to be taken (tell the ConfigWriter to write config, etc)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="config"></param>
|
/// <param name="Config"></param>
|
||||||
protected virtual void CustomSetConfig(DeviceConfig config)
|
protected virtual void CustomSetConfig(DeviceConfig config)
|
||||||
{
|
{
|
||||||
ConfigWriter.UpdateDeviceConfig(config);
|
ConfigWriter.UpdateDeviceConfig(config);
|
||||||
|
|||||||
@@ -130,24 +130,10 @@ namespace PepperDash.Essentials.Core
|
|||||||
[JsonProperty("sourceListKey")]
|
[JsonProperty("sourceListKey")]
|
||||||
public string SourceListKey { get; set; }
|
public string SourceListKey { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Indicates if the device associated with this source is controllable
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("isControllable")]
|
|
||||||
public bool IsControllable { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Indicates that the device associated with this source has audio available
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("isAudioSource")]
|
|
||||||
public bool IsAudioSource { get; set; }
|
|
||||||
|
|
||||||
public SourceListItem()
|
public SourceListItem()
|
||||||
{
|
{
|
||||||
Icon = "Blank";
|
Icon = "Blank";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SourceRouteListItem
|
public class SourceRouteListItem
|
||||||
|
|||||||
@@ -105,6 +105,9 @@ namespace PepperDash.Essentials.Core
|
|||||||
protected void LinkDisplayToApi(DisplayBase displayDevice, BasicTriList trilist, uint joinStart, string joinMapKey,
|
protected void LinkDisplayToApi(DisplayBase displayDevice, BasicTriList trilist, uint joinStart, string joinMapKey,
|
||||||
EiscApiAdvanced bridge)
|
EiscApiAdvanced bridge)
|
||||||
{
|
{
|
||||||
|
var inputNumber = 0;
|
||||||
|
var inputKeys = new List<string>();
|
||||||
|
|
||||||
var joinMap = new DisplayControllerJoinMap(joinStart);
|
var joinMap = new DisplayControllerJoinMap(joinStart);
|
||||||
|
|
||||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
||||||
@@ -121,11 +124,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
Debug.Console(0,this,"Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
Debug.Console(0,this,"Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
||||||
}
|
}
|
||||||
|
|
||||||
LinkDisplayToApi(displayDevice, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void LinkDisplayToApi(DisplayBase displayDevice, BasicTriList trilist, DisplayControllerJoinMap joinMap)
|
|
||||||
{
|
|
||||||
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}", displayDevice.Name);
|
Debug.Console(0, "Linking to Display: {0}", displayDevice.Name);
|
||||||
|
|
||||||
@@ -137,9 +135,6 @@ namespace PepperDash.Essentials.Core
|
|||||||
commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
|
commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
|
||||||
}
|
}
|
||||||
|
|
||||||
var inputNumber = 0;
|
|
||||||
var inputKeys = new List<string>();
|
|
||||||
|
|
||||||
var inputNumberFeedback = new IntFeedback(() => inputNumber);
|
var inputNumberFeedback = new IntFeedback(() => inputNumber);
|
||||||
|
|
||||||
// Two way feedbacks
|
// Two way feedbacks
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user