Create a latching button on Core PRO
Scope
This HelpDoc will dive into the topic of utilizing latching memory slots to help create a "push on, push off" behavior for a button
This document is for users of Pathfinder Core PRO.
Description
Here is the problem we are trying to solve for:
"I have a User Button on my console (imagine this is a Fusion LCD 10 button module, Quasar MTS user buttons or router control panels)When I push the button the first time I want to route Program 1 of the console into the air chain.When I push the same button a second time I want to route my automation playback audio into the air chain.If I press the button a third time I want to put the studio live again, and so on in a loop"
The problem above can be solved in part by using a Latching Memory Slot in Pathfinder Core PRO. Latching Memory Slots offer these two unique features: The value of the memory slot can only be set True or False, the memory slot can be "triggered" to flip flop between True or False.
You can take a User Button and bind the "mousedown" state so that it "triggers" the memory slot. Each press of the button will flip the value between True and False. If the memory slot value was TRUE, pressing the button will change it to FALSE. Press the button again and the slot value will go back to TRUE and so on.
Logic Flows (or bindings in User Panels themselves) elsewhere can read this memory slot value. The TRUE or FALSE value of the latching memory slot can be used to signify two possible states.
We start our example by defining what TRUE and FALSE will signify:
TRUE = Studio is LIVE
FALSE = Automation audio ONLY (studio bypassed)
In table form, here is what we want the memory slot values to do when set:
If Memory Slot Value = TRUE, then do these things: | If Memory Slot Value = FALSE, then do these things: |
Route Livewire channel 5009 (Program 1 bus) to DST 3 on an xNode | Route Livewire channel 7012 (Automation mix) to DST3 on an xNode |
Set the button Indicator property to ON | Set the button Indicator property to OFF |
Set the User Button Caption to say "LIVE!!!" | Set the User Button Caption to say "STUDIO BYPASS" |
Configuration
Create memory slot
Go to the Memory Slots page and create a new Latching Memory Slot with the parameters below. Set the Name field to be something relevant to your installation |
Create user panel button
If you have an existing user panel, add a new button onto the canvas. Otherwise, create a new user panel, add a button and save the panel This is also a good time to set the "backcoloroff" and "backcoloron" properties of the button. These define which color the button will show if the indicator is ON or OFF. The default is Green for "backcoloroff" and Red for "backcoloron" |
Map user panel button to hardware (optional)
This step is optional if you do not have a hardware user button. However, if you have a hardware button such as those found in Axia Router Control Panels, Element,Fusion and Quasar consoles you will need link them together. A step by step how-to can be found here, look at section "Map the software button to the hardware button" |
Save your changes to the user panel |
Set the "mousedown" action of button
Here we will set the "mousedown" action of the button to "trigger" the latching memory slot Click the small button next to "mousedown" under event At the bottom of the page select the End Point icon (right side) of the mini logic flow |
When the Property Selector window appears, select "API" property mode first Expand MemorySlots, find the name of your Latching Memory Slot and open expand that too. Choose "Trigger" as the Property. Click the Select button. |
The "Translator Properties" window will appear. The translator only needs one statement: True = True (If button is pressed down, trigger the latching memory slot) Click on the first default translator line *=* to highlight it. Modify it as shown below, True = True The Translator Properties should only have one entry as shown: Click Done on the "Translator Properties" window |
Clicking Done on the "Translator Properties" window, will bring up this question prompt: Click Cancel |
Save your changes to the user panel |
Set the "indicator" property of button
Click on the small button next to "indicator" property At the bottom of the page, select the Start Point icon (right side) of the mini logic flow |
The "Property Selector" window appears. In a previous step we had selected "API" property mode. Make sure to set it back to "simple" Expand Memory, find the name of your Latching Memory Slot and expand that too. Choose "SlotValue" as the Property. Click the Select button. |
A "Translator Properties" window will appear. Click on the first default translator line *=* to highlight it We want to modify the first line so that it is set as True = ON. Click the Add button Modify the second line so that it appears as False = OFF The Translator Properties list should like this: Click the Done button |
Clicking Done on the "Translator Properties" window, will bring up this question prompt Click Cancel |
Save your changes to the user panel |
Set the "caption" property of button
Click the small button next to "caption" property At the bottom of the page select the Start Point icon (right side) of the mini logic flow |
The "Property Selector" window appears. Expand Memory, find the name of your Latching Memory Slot and expand that too. Choose "SlotValue" as the Property. Click the Select button. |
A "Translator Properties" window will appear. We want to use two translator lines Click on the first default translator line *=* to highlight it We want to modify the first line so that it is set as True = "LIVE!!!". Click the Add button Modify the second line so that it appears as False = STUDIO BYPASS The Translator Properties list should like this: Click Done on the Translator Properties window |
Save your changes to the user panel |
Create a Logic Flow outside the user panel
Up to this point we have the following programmed:
Each press of the button will "trigger" the memory slot between True and False.
The Indicator of the button is set ON and OFF by the current memory slot value.
The Caption of the button is also set by the current memory slot value.
Now we will create a Logic Flow outside of the user panel. The logic flow will read the latching memory slot value. The logic flow will set a route change to a destination on an xNode. The value of the memory slot will determine which Livewire channel is routed to the destination
Go to the Logic Flows page and create a new logic flow Double Click on the Start Point (Left Icon) |
The "Property Selector" window appears. Expand Memory, find the name of your Latching Memory Slot and expand that too. Choose "SlotValue" as the Property. Click the Select button. |
Double Click on the End Point (Right Icon) |
The "Property Selector" window appears. We are going to find a Destination of an xNode that feeds audio to our studio transmitter link. Expand Routers, expand Axia Audio, Find the Destination that corresponds to the Device and Destination we wish to make the change to. Expand that. Select CurrentSourcePath In my example I have an xNode on 10.0.18, Destination #1 which is named STL INPUT, is what I want to make the change to I selected the "CurrentSourcePath" property. However you could also select "CurrentChannelNumber" property Using "CurrentSourcePath" will give us a dropdown menu in the List Translator windows, to help find Livewire Source we want to Route to the xNode Destination. Using "CurrentChannelNumber", you will need to know the Livewire channel number. The List Translator will expect a numerical value provided by you Click the Select button |
Double click on the List Translator (middle icon) |
A "Translator Properties" window will appear. We want to use two translator lines Click on the first default translator line *=* to highlight it We want to modify the first line so that it is set as True = The Source we wish to route to the xNode destination. Click the Add button For my example here, this will route Program 1, Livewire channel 1001, from an Axia Studio Engine to the xNode Destination when the memory slot value is True (this is our live studio audio) Modify the second line so that it appears as False = The Source we wish to route to the xNode destination For my example here, this will route VMIX 1 sub mix, Livewire channel 216, from an Axia Studio Engine to the xNode Destination when the memory slot value is False (this is our automation only audio mix) Here is what the two entries should look like. The first entry might not show the Source name correctly, this is just a display bug. Click Done on the Translator Properties window |
Apply your changes to the logic flow page |
Test it out
Let's verify and review everything is working as expected
Launch the User Panel you created. Go to the User Panels page and click the Window icon next to the panel name the button exists in |
Press the button several times, we should see several things change on each press The Caption on the button should change between "LIVE!!!" and "STUDIO BYPASS" The color of the button should change between Red and Green The Memory Slot Value should change between True and False The Logic Flow should be setting the Route of Program 1 or VMIX1 Sub to the xNode destination The xNode destination, as seen from the xNode web gui, should also change between channel number 1001 and 216 (you will need to refresh the web page to see the changes) |
Additional thoughts...
It is worth noting that some properties in Core PRO have a value called "swap". An example of this would be a console fader's ON_State property. In this case, the use of a latching memory slot is extra work. Just bind the the button's "mousedown" property to set "swap" value of the console fader ON_State.
The Latching Memory Slot by design only has two values, or two state. If you need more than two conditions possible, This HelpDoc, goes over the same scenario as this HelpDoc but instead utilizes a Numeric Memory Slot. The end of that document then shows how easy it is to support more than two states
The steps outlined above can be easily manipulated handle other uses:
- Change the end point of the logic flow to set a GPIO port's GPO Pin state instead. One could use this to manually start and stop iProfiler Skimmer Recordings on demand
- Use the latching memory slot value as a conditional on other flows as a "lock/ unlock". This could be used to prevent other buttons from working until they are "unlocked" first, by pressing the one "lock/unlock" button
- In its truest form, "latch" down the Talkback command to a codec or headphone source.
Let us know how we can help
If you have further questions on this topic or have ideas about improving this document please contact us