PepperDash.Essentials.Plugin.BiampTesira
2.5.2-alpha-90
See the version list below for details.
dotnet add package PepperDash.Essentials.Plugin.BiampTesira --version 2.5.2-alpha-90
NuGet\Install-Package PepperDash.Essentials.Plugin.BiampTesira -Version 2.5.2-alpha-90
<PackageReference Include="PepperDash.Essentials.Plugin.BiampTesira" Version="2.5.2-alpha-90" />
paket add PepperDash.Essentials.Plugin.BiampTesira --version 2.5.2-alpha-90
#r "nuget: PepperDash.Essentials.Plugin.BiampTesira, 2.5.2-alpha-90"
// Install PepperDash.Essentials.Plugin.BiampTesira as a Cake Addin #addin nuget:?package=PepperDash.Essentials.Plugin.BiampTesira&version=2.5.2-alpha-90&prerelease // Install PepperDash.Essentials.Plugin.BiampTesira as a Cake Tool #tool nuget:?package=PepperDash.Essentials.Plugin.BiampTesira&version=2.5.2-alpha-90&prerelease
Tesira DSP Essentials Plugin (c) 2023
NOTE : INVALID TAGS BREAK THIS RELEASE
License
Provided under MIT license
Overview
The Tesira plugin provides device control over the Biamp Tesira family of DSPs with regards to the most commonly used and requested attriute and control types.
Compatibility
This plugin has been tested with both Crestron 3-Series and 4-Series processors. It implements all available essentials interfaces relevant to a device of this type. This includes but is not limited to AudioCodecBase
, IHasDspPresets
, IBasicVolumeWithFeedback
, IRoutingWithFeedback
and IDeviceInfoProvider
. Documentation for which controls implement each interface will be documented in each relevant controls section. Additionally, every component implements IKeyed
and all devices are added to the DeviceManager
unpon instantiation.
Cloning Instructions
After forking this repository into your own GitHub space, you can create a new repository using this one as the template. Then you must install the necessary dependencies as indicated below.
Dependencies
The Essentials libraries are required. They referenced via nuget. You must have nuget.exe installed and in the PATH
environment variable to use the following command. Nuget.exe is available at nuget.org.
Installing Dependencies
To install dependencies once nuget.exe is installed, run the following command from the root directory of your repository:
nuget install .\packages.config -OutputDirectory .\packages -excludeVersion
.
To verify that the packages installed correctly, open the plugin solution in your repo and make sure that all references are found, then try and build it.
Feature Notes
Version 2.0.0+ now offers developers the opportunity to individually bridge each control rather than the entire DSP object. This should lead to more flexibility in development. In documentation below, all references to the original object type will be referred to as Legacy, while new object data will be referred to as Standalone
When utilizing a standalone object within a Eisc bridge, it is addressed utilizing first the name of the base device, followed by a pair of two hyphens, then the key of the component.
It is exceptionally important that all keys are unique. In a future version, it's likely that this naming convention will become more verbose, but as of now, to prevent key names from being ridiculously long, I've opted to trust users to police themselves.
For a parent device with a key of dsp-1
and a component with the key of Fader01
, the Standalone component key is dsp-1--Fader01
.
The only exception to this rule is for the Base Standalone object, which has a key suffix of DeviceInfo
Important to note this version of the plugin currently implements both eiscApi and EiscApiAdvanced as valid bridge types
"type": "eiscApiAdvanced"
Installation
This plugin is provided as a published nuget package for your convenience.
Place the *.cplz file in the /users/programxx/plugins folder, and restart your program.
Controls and Configs
DeviceInfo
This object is built by default with a Biamp Tesira DSP and provides a method to send hardware-specific data across the bridge to SIMPL
This data is only accessible by linking the device to the bridge. The component key is always DeviceInfo
- therefore when a Biamp Tesira DSP with the key dsp-1
is instantiated, a DeviceInfo component
with the key of dsp-1--DeviceInfo
will be added to the DeviceManager
and will be accessible to any Essentials Bridge.
This device will also allow a direct passthru connection to the device if necessary and a method by which to trigger control resubscription.
If you do not choose to bridge a Standalone object, limited data is available on the Legacy object.
This control implements Essentials interfaces
IDeviceInfoProvider
andIKeyed
Digitals
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
1 | 1 | R | Device Online |
N/A | 1 | W | Resubscribe Controls |
Analogs
None
Serials
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
N/A | 1 | R | Device Name |
N/A | 2 | RW | Command Passthrough |
N/A | 3 | R | Serial Number |
N/A | 4 | R | Firmware Version |
N/A | 5 | R | Hostname |
N/A | 6 | R | IP Address |
N/A | 7 | R | MAC Address |
Config Notes
This configuration matches a standard essentials device configuration at the base level, with only the type being different. This may have the type
tesira
,tesiraforte
,tesiraserver
,tesiradsp
, ortesira-dsp
.
"key": "TesiraDsp-1",
"name": "TesiraDspTesting",
"type": "tesiraDsp",
"group": "dsp",
"properties": {
"control": {
"endOfLineString": "\n",
"deviceReadyResponsePattern": "",
"method": "ssh",
"tcpSshProperties": {
"address": "10.11.50.191",
"port": 22,
"autoReconnect": true,
"AutoReconnectIntervalMs": 10000,
"username": "default",
"password": "default"
}
}
}
}
Level / Mute
Controls objects with the attribute type of "level" or "mute" and subscribes to them as necessary.
This component only reports the level of the audio signal relative the the adjustable range
Within the Legacy object, this Join map represents a control that is part of an array of controls. Each join number = Join Map Number + fader bridgeIndex
as defined by the config.
Within the Standalone object, this join map represents a single control as defined by the key in the bridge.
This Control implements Essentials interfaces
IKeyed
andIBasicVolumeWithFeedback
Digitals
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
200 | 6 | R | Channel Visible |
400 | 5 | RW | Mute Toggle |
600 | 3 | RW | Mute On |
800 | 4 | RW | Mute Off |
1000 | 1 | W | Volume Up |
1200 | 2 | W | Volume Down |
Analogs
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
200 | 1 | RW | Volume Level |
400 | 2 | R | Icon (0 - Level, 1 - Mic) |
600 | 3 | R | ControlType (0 Mute/Level, 1 LevelOnly, 2 MuteOnly) |
800 | 4 | R | Permissions (Pass From Config) |
Serials
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
200 | 1 | R | Control Label (Pass From Config) |
Config Example
All Level/Mute configs must be part of a dictionary called faderControlBlocks.
"faderControlBlocks": {
"LevelControl01": {
"enabled": true,
"isMic": false,
"hasLevel": true,
"hasMute": true,
"index1" : 1,
"index2" : 0,
"label": "Room",
"levelInstanceTag": "ROOMVOL",
"muteInstanceTag": "ROOMVOL",
"unmuteOnVolChange" : true,
"incrementAmount" : "2.0",
"permissions" : 0,
"bridgeIndex" : 1
}
Config Notes
enabled - enables the control to be subscribed and controlled. label - Passed directly across the eisc as the Label value. isMic - drives the icon feedback. hasLevel - in conjunction with hasMute, sets the ControlType. hasMute - in conjunction with hasStatus, sets the ControlType. index1 - Index 1 of the control point. index2 - Index 2 of the control point. levelInstanceTag - Instance tag of the level control. muteInstanceTag - Instance tag of the mute control. unmuteOnVolChange - if true, will unmute a muted control when the level increases. incrementAmount - the value in decimals by which a mute increment or decrement command will manipulate the level. permissions - Passed directly across the eisc as the Permissions value. bridgeIndex - The index of the control on a Legacy object
In the provided example config object, given a base object key of dsp-1
, this control would have a standalone key of dsp-1--LevelControl01
.
Switcher
Note - Version 2.5.0 added the ability to configure SourceSelectors and Routers as different objects. It is recommended to use this mechanism in new projects.
Controls objects with the attribute type of sourceSelection
and subscribes to them as necessary; input
is not subscribed to.
Within the Legacy object, this Join map represents a control that is part of an array of controls. Each join number = Join Map Number + fader bridgeIndex
as defined by the config.
Within the Standalone object, this join map represents a single control as defined by the key in the bridge.
This control implements Essentials interfaces
IKeyed
andIRoutingWithFeedback
Digitals
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
150 | 1 | W | Poll |
Analogs
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
150 | 1 | RW | Source Selection |
Serials
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
150 | 1 | R | Control Label (Pass From Config) |
N/A | 2 | R | Source List XSIG (If Configured) or Routed Source |
Config Example
All sourceSelector and router configs must be part of a dictionary called switcherControlBlocks. Router configs require that the "type" be set to "router"
"switcherControlBlocks" : {
"SwitcherControl01" : {
"enabled" : true,
"label" : "switcher01",
"index1" : 1
"switcherInstanceTag" : "SourceSelector1",
"type": "router",
"bridgeIndex" : 1,
"showRoutedStringFeedback": true,
"pollIntervalMs" : 90000,
"switcherInputs" : {
"1" : {"label": "Input1" },
"2" : {"label": "Input2" },
},
"switcherOutputs" : {
"1" : { "label": "Output1" },
"2" : { "label": "Output2" },
}
}
}
Config Notes
enabled - enables the control to be subscribed and controlled. label - Passed directly across the eisc as the Label value. index1 - Index 1 of the control point. type - Valid Types are sourceSelector or router switcherInstanceTag - Instance tag of the sourceSelection control bridgeIndex - The index of the control on a Legacy object switcherInputs - This is a dictionary of labels for inputs of the switcher. The keys must be integers. switcherOutputs - This is a dictionary of labels for outputs of the switcher. This is earmarked for future usage. The keys must be integers.
In the provided example config object, given a base object key of dsp-1
, this control would have a standalone key of dsp-1--SwitcherControl01
.
Router
Controls objects with the attribute type of input
. No Subscriptions available on this control block
Within the Legacy object, this Join map represents a control that is part of an array of controls. Each join number = Join Map Number + fader bridgeIndex
as defined by the config.
Within the Standalone object, this join map represents a single control as defined by the key in the bridge.
This control implements Essentials interfaces
IKeyed
andIRoutingWithFeedback
Digitals
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
150 | 1 | W | Poll |
Analogs
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
150 | 1 | RW | Source Selection |
Serials
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
150 | 1 | R | Control Label (Pass From Config) |
N/A | 2 | R | Source List XSIG (If Configured) or Routed Source |
Config Example
All sourceSelector and router configs must be part of a dictionary called routerControlBlocks.
"routerControlBlocks" : {
"RouterControl01" : {
"enabled" : true,
"label" : "switcher01",
"index1" : 1
"routerInstanceTag" : "Router1",
"bridgeIndex" : 1,
"showRoutedStringFeedback": true,
"pollIntervalMs" : 90000,
"routerInputs" : {
"1" : {"label": "Input1" },
"2" : {"label": "Input2" },
},
"routerOutput" : {
"label": "Output1" }
}
}
}
Config Notes
enabled - enables the control to be subscribed and controlled. label - Passed directly across the eisc as the Label value. index1 - Index of the output number on the router that you wish to control. routerInstanceTag - Instance tag of the router input selection control bridgeIndex - The index of the control on a Legacy object routerInputs - This is a dictionary of labels for inputs of the router block. The keys must be integers. routerOutput - This is an object defining the label of the associated output. This is earmarked for future usage.
In the provided example config object, given a base object key of dsp-1
, this control would have a standalone key of dsp-1--RouterControl01
.
SourceSelector
Controls and subscribes to objects with the attribute type of sourceSelector
.
Within the Legacy object, this Join map represents a control that is part of an array of controls. Each join number = Join Map Number + fader bridgeIndex
as defined by the config.
Within the Standalone object, this join map represents a single control as defined by the key in the bridge.
This control implements Essentials interfaces
IKeyed
andIRoutingWithFeedback
Digitals
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
150 | 1 | W | Poll |
Analogs
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
150 | 1 | RW | Source Selection |
Serials
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
150 | 1 | R | Control Label (Pass From Config) |
N/A | 2 | R | Source List XSIG (If Configured) or Routed Source |
Config Example
All sourceSelector and router configs must be part of a dictionary called routerControlBlocks.
"sourceSelectorControlBlocks" : {
"sourceSelectorControl01" : {
"enabled" : true,
"label" : "sourceSelector01",
"index1" : 1
"sourceSelectorInstanceTag" : "SourceSelector1",
"bridgeIndex" : 1,
"showRoutedStringFeedback": true,
"pollIntervalMs" : 90000,
"sourceSelectorInputs" : {
"1" : {"label": "Input1" },
"2" : {"label": "Input2" },
}
}
}
Config Notes
enabled - enables the control to be subscribed and controlled. label - Passed directly across the eisc as the Label value. index1 - Index of the output number on the sourceSelector that you wish to control. sourceSelectorInstanceTag - Instance tag of the sourceSelection control bridgeIndex - The index of the control on a Legacy object sourceSelectorInputs - This is a dictionary of labels for inputs of the source selector block. The keys must be integers.
In the provided example config object, given a base object key of dsp-1
, this control would have a standalone key of dsp-1--sourceSelectorControl01
.
State
Controls objects with the attribute type of "state" and subscribes to them as necessary.
Within the Legacy object, this Join map represents a control that is part of an array of controls. Each join number = Join Map Number + fader bridgeIndex
as defined by the config.
Within the Standalone object, this join map represents a single control as defined by the key in the bridge.
This control implements Essentials interface
IKeyed
Digitals
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
1300 | 1 | RW | State Toggle |
1450 | 2 | RW | State On |
1600 | 3 | RW | State Off |
Analogs
None
Serials
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
1300 | 1 | R | Control Label (Pass From Config) |
Config Example
All state configs must be part of a dictionary called stateControlBlocks.
"stateControlBlocks" : {
"StateControl1" : {
"enabled" : true,
"label" : "State01",
"stateInstanceTag" : "LogicState1",
"index" : 1,
"bridgeIndex" : 1
}
}
In the provided example config object, given a base object key of dsp-1
, this control would have a standalone key of dsp-1--StateControl1
.
Config Notes
enabled - enables the control to be subscribed and controlled. label - Passed directly across the eisc as the Label value. index - Index of the control point. stateInstanceTag - Instance tag of the state control bridgeIndex - The index of the control on a Legacy object
Presets
If you intend to ONLY do direct preset calling by string, this object is NOT required to recall presets. This activity is provided by the base level device object for the Tesira DSP. It is also provided by the Standalone object Presets
. This config object is required regardless of control object if preset control iby index is required.
This control implements Essentials interfaces
IHasDspPreset
andIKeyed
Digitals
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
100 | 1 | W | Select Preset By Index |
N/A | 1 | R | Preset is Available By Index |
Analogs
None
Serials
Legacy Join | Join | Type (RW) | Description |
---|---|---|---|
100 | 1 | R | Preset Name by Index |
100 | 1 | W | Recall Preset By Name |
Config Example
All preset configs must be part of a dictionary called presets.
"presets" : {
"SomeUniqueKey": {
"label" : "Default",
"presetName" : "Default Levels",
"presetId" : 1101,
"presetIndex" : 1
}
}
In the provided example config object, given a base object key of dsp-1
, this control would have a standalone key of dsp-1--Presets
.
Config Notes
label - Passed directly across the eisc as the Label value. presetName - the actual name of the preset as defined in biamp software presetID - the ID of the preset as defined in biamp software presetIndex - the index of the preset for the digital press recall
If a
presetName
is defined, you don't need apresetId
and vice versa. One or the other will be fine. If you are utilizing the "select preset by name" methodology, no presets need be defined in config.
Dialer
VoIP Controls are tested
POTS Controls are added, but as of yet untested.
DTMF is automatically managed based on current hook state.
Within the Legacy object, this Join map represents a control that is part of an array of controls. Each join number = Join Map Number + (1 + (50 * (n- 1))), where n is the index of the dialer as defined by bridgeIndex
.
For example, Incoming Call for Line 1 would be at join 3101, while the incoming call for Line 2 would be at join 3151.
Within the Standalone object, this join map represents a single control as defined by the key in the bridge.
This control implements Essentials interfaces
AudioCodecBase
andIKeyed
Digitals
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
3100 | 1 | R | Incoming Call |
3106 | 2 | W | Answer |
3107 | 3 | W | End Call |
3110 | 4 | W | Keypad 0 |
3111 | 5 | W | Keypad 1 |
3112 | 6 | W | Keypad 2 |
3113 | 7 | W | Keypad 3 |
3114 | 8 | W | Keypad 4 |
3115 | 9 | W | Keypad 5 |
3116 | 10 | W | Keypad 6 |
3117 | 11 | W | Keypad 7 |
3118 | 12 | W | Keypad 8 |
3119 | 13 | W | Keypad 9 |
3120 | 14 | W | Keypad * |
3121 | 15 | W | Keypad # |
3122 | 16 | W | Keypad Clear |
3123 | 17 | W | Keypad Backspace |
3124 | 18 | RW | Dial |
3125 | 19 | RW | Auto Answer On |
3126 | 20 | RW | Auto Answer Off |
3127 | 21 | RW | Auto Answer Toggle |
3129 | 22 | RW | On Hook |
3130 | 23 | RW | Off Hook |
3132 | 24 | RW | Do Not Disturb Toggle |
3133 | 25 | RW | Do Not Disturb On |
3134 | 26 | RW | Do Not Disturb Off |
Analogs
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
3100 | 1 | R | CallState Value |
Serials
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
3100 | 1 | RW | Dial String |
3101 | 2 | RW | Dialer Label |
3102 | 3 | RW | Last Number Dialed |
3104 | 4 | R | Caller ID Number |
3105 | 5 | R | Caller ID Name |
Config Example
All dialer configs must be part of a dictionary called dialerControlBlocks.
"dialerControlBlocks" : {
"Dialer1" : {
"enabled" : true,
"label" : "Dialer 01",
"isVoip" : true,
"dialerInstanceTag" : "Dialer1",
"controlStatusInstanceTag" : "VoIPControlStatus1",
"index" : 1,
"callAppearance" : 1,
"clearOnHangup" : true,
"appendDtmf" : false,
"bridgeIndex" : 1
}
}
In the provided example config object, given a base object key of dsp-1
, this control would have a standalone key of dsp-1--Dialer1
.
Config Notes
enabled - enables the control to be subscribed and controlled. label - Passed directly across the eisc as the Label value. index - Index of the line you wish to manage. dialerInstanceTag - Instance tag of the dialer control controlStatusInstanceTag - Instance tag of the controlStatus control isVoip - sets the device type to VoIP for internal configuration. callAppearance - the index of the call appearance you wish to contorl in a VoIP line. clearOnHangup - if true will clear the Dial String whenever the line goes on hook. appendDtmf - if true will append DTMF digit presses to Dial String bridgeIndex - The index of the control on a Legacy object
Meter
Enables metering on the sepecified meter.
Using this is a bad idea, please avoid unless specifically requested.
Within the Legacy object this Join map represents a control that is part of an array of controls. Each join number = Join Map Number + bridgeIndex
as defined by the config.
Within the Standalone object, this join map represents a single control as defined by the key in the bridge.
This control implements Essentials interface
IKeyed
Digitals
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
3501 | 1 | RW | Meter Toggle |
Analogs
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
3501 | 1 | R | Meter Feedback |
Serials
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
3501 | 1 | R | Control Label (Pass From Config) |
Config Example
All state configs must be part of a dictionary called meterControlBlocks.
"meterControlBlocks" : {
"Meter1" : {
"enabled" : true,
"label" : "State01",
"meterInstanceTag" : "Meter1",
"index" : 1,
"bridgeIndex" : 1
}
}
In the provided example config object, given a base object key of dsp-1
, this control would have a standalone key of dsp-1--Meter1
.
Config Notes
enabled - enables the control to be subscribed and controlled. label - Passed directly across the eisc as the Label value. meterInstanceTag - Instance tag of the meter control index - Index of the control point. bridgeIndex - The index of the control on a Legacy object
Crosspoint State Control
Provides a control point for a single crosspoint on a MatrixMixer.
This Join map represents a control that is part of an array of controls. Each join number = Join Map Number + State Index as defined by the config.
This control implements Essentials interface
IKeyed
Digitals
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
2001 | 1 | RW | Crosspoint Toggle |
2002 | 2 | W | Crosspoint On |
2003 | 3 | W | Crosspoint Off |
Analogs
None
Serials
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
2001 | 1 | R | Control Label (Pass From Config) |
Config Example
All state configs must be part of a dictionary called crosspointStateControlBlocks.
"crosspointStateControlBlocks" : {
"Crosspoint1" : {
"enabled" : true,
"label" : "Crosspoint1-2",
"matrixInstanceTag" : "Meter1",
"index1" : 1,
"index2" : 2,
"bridgeIndex" : 1
}
}
In the provided example config object, given a base object key of dsp-1
, this control would have a standalone key of dsp-1--Crosspoint1
.
Config Notes
enabled - enables the control to be subscribed and controlled
label - Passed directly across the eisc as the Label value
index1 - Input of the crosspoint to be controlled
index2 - Output of the crosspoint to be controlled
stateInstanceTag - Instance tag of the meter block
bridgeIndex - The index of the control on a Legacy object
RoomCombiner
Controls Biamp Tesira RoomCombiner objects. Control of LevelOut, MuteOut, and group selection is supported.
MuteOut is not a subscribed control for this block. Polling is simulated on each trigger of the mute, but there is no unsolicited feedback for mute status.
In order to keep the types of joins similar to a standard fader object, the choice was made to not provide direct control for wall states in this component. If direct wall state control is required, utilize a State Control
block.
Within the Legacy object, this Join map represents a control that is part of an array of controls. Each join number = Join Map Number + roomCombiner bridgeIndex
as defined by the config.
Within the Standalone object, this join map represents a single control as defined by the key in the bridge.
This control implements Essentials interfaces
IBasicVolumeWithFeedback
andIKeyed
Digitals
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
2206 | 6 | R | Channel Visible |
2203 | 5 | RW | Mute Toggle |
2204 | 3 | RW | Mute On |
2205 | 4 | RW | Mute Off |
2201 | 1 | W | Volume Up |
2202 | 2 | W | Volume Down |
Analogs
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
2201 | 1 | RW | Volume Level |
2202 | 2 | R | Icon (0 - Level, 1 - Mic) |
2204 | 3 | RW | Set/Get the Combine Group Number for Room Combination |
2203 | 4 | R | Permissions (Pass From Config) |
Serials
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
2201 | 1 | R | Control Label (Pass From Config) |
Config Example
All RoomCombiner configs must be part of a dictionary called roomCombinerControlBlocks.
"roomCombinerControlBlocks": {
"Room01": {
"enabled": true,
"label": "Room 1",
"isMic": false,
"roomIndex" : 1,
"roomCombinerInstanceTag": "RoomCombiner1",
"unmuteOnVolChange" : true,
"incrementAmount" : "2.0",
"permissions" : 0,
"bridgeIndex" : 1
}
Config Notes
enabled - enables the control to be subscribed and controlled. label - Passed directly across the eisc as the Label value. isMic - drives the icon feedback. roomIndex - Index of the room on the combiner block. roomCombinerInstanceTag - Instance tag of the room combiner control. unmuteOnVolChange - if true, will unmute a muted control when the level increases. incrementAmount - the value in decimals by which a mute increment or decrement command will manipulate the level. permissions - Passed directly across the eisc as the Permissions value. bridgeIndex - The index of the control on a Legacy object
In the provided example config object, given a base object key of dsp-1
, this control would have a standalone key of dsp-1--Room01
.
Tesira Expanders
Provides status updates for tesira expander devices related to health and device properties
Tesira Expander block is not supported in the Legacy bridge API. In order to utilize this control, one must directly bridge the control using the key <dspKey>--Expanders
Within the Standalone object, this join map represents each element in a list of Expander Devices
Digitals
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
N/A | 1 | R | Device Online |
Analogs
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
N/A | N/A | N/A | N/A |
Serials
Legacy Join | Standalone Join | Type (RW) | Description |
---|---|---|---|
N/A | 1 | R | Expander Hostname |
N/A | 2 | R | Expander Serial Number |
N/A | 3 | R | Expander Firmware |
N/A | 4 | R | Expaner MAC Address |
Config Example
All Tesira Expander config objects must be part of a dictionary called tesiraExpanderBlocks.
"tesiraExpanderBlocks": {
"Expander01": {
"hostname" : "MIC-01"
"index" : 1
},
"Expander02": {
"hostname" : "AMP-01"
"index" : 2
}
}
Config Notes
hostname - The hostname of the expander to be tracked. This value must match the configured expander index - The index within the bridged control where this device ins mapped. The joinmap of a device is equal to the join multipled by the index
In the provided example config object, given a base object key of dsp-1
, this control would have a standalone key of dsp-1--Expanders
.
Full Example Essentials Device Config
This config will create an internal loopback EISC on IPID D1 for a ssh-controlled tesira.
{
"system": {},
"system_url": "http://portal-QA.devcloud.pepperdash.com/templates/0f50640b-bc89-42d5-998f-81d137d3fc98#/template_summary",
"template": {
"devices": [
{
"key": "processor",
"uid": 0,
"type": "rmc3",
"name": "RMC3",
"group": "processor",
"supportedConfigModes": [
"compliance",
"essentials"
],
"supportedSystemTypes": [
"hudType",
"presType",
"vtcType",
"custom"
],
"supportsCompliance": true,
"properties": {}
},
{
"key": "TesiraDsp-1",
"name": "TesiraDspTesting",
"type": "tesiraDsp",
"group": "dsp",
"properties": {
"control": {
"endOfLineString": "\n",
"deviceReadyResponsePattern": "",
"method": "ssh",
"tcpSshProperties": {
"address": "10.11.50.191",
"port": 22,
"autoReconnect": true,
"AutoReconnectIntervalMs": 10000,
"username": "default",
"password": "default"
}
},
"faderControlBlocks": {
"Fader1": {
"enabled": true,
"isMic": false,
"hasLevel": true,
"hasMute": true,
"index1" : 1,
"index2" : 0,
"label": "Room",
"levelInstanceTag": "ROOMVOL",
"muteInstanceTag": "ROOMVOL",
"unmuteOnVolChange" : true,
"incrementAmount" : "2.0",
"permissions" : 0,
"bridgeIndex" : 1
},
"Fader2": {
"enabled": true,
"isMic": false,
"hasLevel": true,
"hasMute": true,
"index1" : 1,
"index2" : 0,
"label": "VTC",
"levelInstanceTag": "VTCRXVOL",
"muteInstanceTag": "VTCRXVOL",
"unmuteOnVolChange" : true,
"incrementAmount" : "2.0"
"permissions" : 1,
"bridgeIndex" : 2
},
"Fader3": {
"enabled": true,
"isMic": false,
"hasLevel": true,
"hasMute": true,
"index1" : 1,
"index2" : 0,
"label": "ATC",
"levelInstanceTag": "ATCRXVOL",
"muteInstanceTag": "ATCRXVOL",
"unmuteOnVolChange" : true,
"incrementAmount" : "2.0"
"permissions" : 2,
"bridgeIndex" : 3
},
"Fader4": {
"enabled": true,
"isMic": false,
"hasLevel": true,
"hasMute": true,
"index1" : 1,
"index2" : 0,
"label": "PGM",
"levelInstanceTag": "PGMVOL",
"muteInstanceTag": "PGMVOL",
"unmuteOnVolChange" : true,
"incrementAmount" : "2.0"
"permissions" : 0,
"bridgeIndex" : 4
}
},
"dialerControlBlocks" : {
"Dialer1" : {
"enabled" : true,
"label" : "Dialer 1",
"isVoip" : true,
"dialerInstanceTag" : "Dialer1",
"controlStatusInstanceTag" : "VoIPControlStatus1",
"index" : 1,
"callAppearance" : 1,
"clearOnHangup" : true,
"appendDtmf" : false
"bridgeIndex" : 1
}
},
"stateControlBlocks" : {
"State1" : {
"enabled" : true,
"label" : "State01",
"stateInstanceTag" : "LogicState1",
"index" : 1,
"bridgeIndex" : 1
},
"State2" : {
"enabled" : true,
"label" : "State02",
"stateInstanceTag" : "LogicState1",
"index" : 2,
"bridgeIndex" : 2
},
"State3" : {
"enabled" : true,
"label" : "State02",
"stateInstanceTag" : "LogicState1",
"index" : 3,
"bridgeIndex" : 3
},
"State4" : {
"enabled" : true,
"label" : "State02",
"stateInstanceTag" : "LogicState1",
"index" : 4
"bridgeIndex" : 4
}
},
"switcherControlBlocks" : {
"switcherControl1" : {
"enabled" : true,
"label" : "switcher01",
"switcherInstanceTag" : "SourceSelector1",
"index1" : 1,
"bridgeIndex" : 1,
"switcherInputs" : {
"1" : {"label": "Input1" },
"2" : {"label": "Input2" },
},
"switcherOutputs" : {
"1" : {"label": "Output1" },
"2" : {"label": "Output2" },
}
}
},
"crosspointStateControlBlocks" : {
"Crosspoint1" : {
"enabled" : true,
"label" : "Crosspoint1-2",
"matrixInstanceTag" : "Meter1",
"index1" : 1,
"index2" : 2,
"bridgeIndex" : 1
}
},
"meterControlBlocks" : {
"Meter1" : {
"enabled" : true,
"label" : "State01",
"meterInstanceTag" : "Meter1",
"index" : 1,
"bridgeIndex" : 1
}
},
"roomCombinerControlBlocks": {
"Room01": {
"enabled": true,
"label": "Room 1",
"isMic": false,
"roomIndex" : 1,
"roomCombinerInstanceTag": "RoomCombiner1",
"unmuteOnVolChange" : true,
"incrementAmount" : "2.0",
"permissions" : 0,
"bridgeIndex" : 1
}
},
"presets" : {
"1": {
"label" : "Default",
"preset" : "Default Levels"
"presetIndex" : 1
},
"2" : {
"label" : "High",
"Preset" : "Noise Reduction High"
"presetIndex" : 2
}
},
"tesiraExpanderBlocks": {
"Expander01": {
"hostname" : "MIC-01"
"index" : 1
},
"Expander02": {
"hostname" : "AMP-01"
"index" : 2
}
}
}
},
{
"key": "eisc-Dsp",
"uid": 4,
"name": "Bridge Dsp",
"group": "api",
"type": "eiscApiAdvanced",
"properties": {
"control": {
"tcpSshProperties": {
"address": "127.0.0.2",
"port": 0
},
"ipid": "D1",
"method": "ipidTcp"
},
"devices": [
{
"deviceKey": "TesiraDsp-1",
"joinStart": 1
}
]
}
}
],
"info": {
"comment": "",
"lastModifiedDate": "2017-03-06T23:14:40.290Z",
"lastUid": 12,
"processorType": "Rmc3",
"requiredControlSofwareVersion": "",
"systemType": "MPR"
},
"rooms": [],
"tieLines": []
}
}
RoadMap
A Method by which we can continue even with "bad" instance tags in the config. Currently, this causes everything to fail upon subscription.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET Framework | net35 is compatible. net40 was computed. net403 was computed. net45 was computed. net451 was computed. net452 was computed. net46 was computed. net461 was computed. net462 was computed. net463 was computed. net47 is compatible. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2.5.2-hotfix-99 | 132 | 1/19/2024 |
2.5.2-hotfix-98 | 115 | 1/19/2024 |
2.5.2-hotfix-97 | 91 | 1/19/2024 |
2.5.2-hotfix-95 | 104 | 1/19/2024 |
2.5.2-hotfix-105 | 93 | 6/3/2024 |
2.5.2-hotfix-102 | 116 | 4/22/2024 |
2.5.2-hotfix-101 | 143 | 3/4/2024 |
2.5.2-hotfix-100 | 115 | 1/19/2024 |
2.5.2-feature-4-series.2 | 57 | 5/17/2024 |
2.5.2-alpha-96 | 101 | 1/19/2024 |
2.5.2-alpha-93 | 135 | 7/5/2023 |
2.5.2-alpha-92 | 147 | 7/5/2023 |
2.5.2-alpha-91 | 127 | 6/21/2023 |
2.5.2-alpha-90 | 128 | 6/21/2023 |
2.5.2-alpha-103 | 108 | 5/1/2024 |
2.5.1 | 308 | 6/9/2023 |
2.5.1-hotfix-89 | 140 | 6/9/2023 |
2.5.1-alpha-88 | 161 | 6/7/2023 |
2.5.0 | 229 | 5/18/2023 |
2.4.2-alpha-87 | 144 | 5/18/2023 |
2.4.2-alpha-86 | 158 | 5/18/2023 |
2.4.1 | 216 | 5/16/2023 |
2.4.1-hotfix-85 | 151 | 5/16/2023 |
2.4.0 | 223 | 5/16/2023 |
2.3.5-hotfix-82 | 157 | 5/16/2023 |
2.3.5-hotfix-79 | 134 | 5/16/2023 |
2.3.5-hotfix-73 | 152 | 4/26/2023 |
2.3.5-beta-83 | 156 | 5/16/2023 |
2.3.5-alpha-84 | 149 | 5/16/2023 |
2.3.5-alpha-81 | 142 | 5/16/2023 |
2.3.5-alpha-80 | 126 | 5/16/2023 |
2.3.5-alpha-78 | 132 | 5/16/2023 |
2.3.5-alpha-77 | 155 | 5/16/2023 |
2.3.5-alpha-76 | 169 | 5/15/2023 |
2.3.5-alpha-75 | 142 | 5/11/2023 |
2.3.5-alpha-74 | 122 | 5/5/2023 |
2.3.5-alpha-72 | 172 | 4/19/2023 |
2.3.4 | 293 | 4/11/2023 |
2.3.4-hotfix-71 | 176 | 4/11/2023 |
2.3.4-hotfix-70 | 172 | 3/21/2023 |
2.3.4-hotfix-66 | 163 | 3/16/2023 |
2.3.4-hotfix-65 | 145 | 3/15/2023 |
2.3.4-alpha-69 | 201 | 3/16/2023 |
2.3.4-alpha-68 | 198 | 3/16/2023 |
2.3.4-alpha-67 | 207 | 3/16/2023 |
2.3.3 | 287 | 3/15/2023 |
2.3.3-hotfix-64 | 184 | 3/14/2023 |
2.3.3-hotfix-63 | 163 | 3/14/2023 |
2.3.2 | 334 | 2/28/2023 |
2.3.1 | 304 | 2/21/2023 |
2.3.1-hotfix-62 | 139 | 2/20/2023 |
2.3.0 | 328 | 2/17/2023 |
2.2.2-hotfix-58 | 157 | 2/9/2023 |
2.2.2-alpha-61 | 155 | 2/17/2023 |
2.2.2-alpha-60 | 182 | 2/17/2023 |
2.2.2-alpha-59 | 156 | 2/17/2023 |
2.2.2-alpha-57 | 172 | 2/4/2023 |
2.2.1 | 383 | 1/26/2023 |
2.2.1-alpha-56 | 195 | 1/26/2023 |
2.2.1-alpha-55 | 194 | 1/23/2023 |
2.2.0 | 374 | 1/16/2023 |
2.1.2-hotfix-48 | 176 | 9/21/2022 |
2.1.2-hotfix-47 | 173 | 9/19/2022 |
2.1.2-hotfix-46 | 170 | 9/10/2022 |
2.1.2-hotfix-45 | 174 | 8/28/2022 |
2.1.2-alpha-54 | 156 | 1/13/2023 |
2.1.2-alpha-53 | 184 | 1/13/2023 |
2.1.2-alpha-52 | 177 | 1/13/2023 |
2.1.2-alpha-51 | 161 | 12/21/2022 |
2.1.2-alpha-50 | 197 | 9/22/2022 |
2.1.2-alpha-49 | 175 | 9/22/2022 |
2.1.1 | 560 | 7/19/2022 |
2.1.0 | 506 | 7/19/2022 |
2.0.12-hotfix-38 | 212 | 4/29/2022 |
2.0.12-alpha-44 | 188 | 7/18/2022 |
2.0.12-alpha-37 | 190 | 4/13/2022 |
2.0.11 | 546 | 3/4/2022 |
2.0.11-hotfix-33 | 174 | 2/21/2022 |
2.0.11-beta-34 | 182 | 3/4/2022 |
2.0.11-alpha-36 | 195 | 3/4/2022 |
2.0.10 | 382 | 12/16/2021 |
2.0.10-hotfix-26 | 249 | 10/21/2021 |
2.0.10-alpha-29 | 201 | 12/7/2021 |
2.0.10-alpha-28 | 245 | 12/6/2021 |
2.0.10-alpha-27 | 207 | 12/6/2021 |
2.0.10-alpha-25 | 294 | 10/20/2021 |
2.0.9 | 455 | 9/29/2021 |
2.0.9-hotfix-24 | 269 | 9/28/2021 |
2.0.9-alpha-23 | 227 | 8/9/2021 |
2.0.8 | 462 | 7/12/2021 |
2.0.8-alpha-22 | 261 | 7/12/2021 |
2.0.8-alpha-21 | 285 | 6/25/2021 |
2.0.8-alpha-20 | 256 | 6/25/2021 |
2.0.8-alpha-19 | 247 | 6/15/2021 |
2.0.8-alpha-18 | 323 | 6/11/2021 |
2.0.7 | 393 | 5/20/2021 |
2.0.7-alpha-17 | 311 | 5/14/2021 |
2.0.7-alpha-16 | 207 | 5/14/2021 |
2.0.7-alpha-15 | 194 | 5/14/2021 |
2.0.7-alpha-12 | 220 | 5/13/2021 |
2.0.7-alpha-11 | 213 | 5/12/2021 |
2.0.7-alpha-10 | 279 | 5/12/2021 |
2.0.6 | 385 | 5/11/2021 |
2.0.6-alpha-7 | 223 | 5/11/2021 |
2.0.6-alpha-6 | 224 | 5/11/2021 |
2.0.5 | 398 | 4/16/2021 |
2.0.5-alpha-5 | 214 | 4/14/2021 |
2.0.2-beta-47 | 448 | 11/2/2020 |
2.0.2-beta-42 | 515 | 10/23/2020 |
2.0.2-beta-31 | 429 | 9/17/2020 |
2.0.2-alpha-46 | 530 | 10/30/2020 |
2.0.2-alpha-45 | 355 | 10/27/2020 |
2.0.2-alpha-44 | 432 | 10/26/2020 |
2.0.2-alpha-43 | 380 | 10/26/2020 |
2.0.2-alpha-41 | 424 | 10/23/2020 |
2.0.2-alpha-40 | 479 | 10/23/2020 |
2.0.2-alpha-39 | 370 | 10/12/2020 |
2.0.2-alpha-38 | 397 | 10/12/2020 |
2.0.2-alpha-33 | 390 | 9/18/2020 |
2.0.2-alpha-29 | 378 | 9/17/2020 |