Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Pathfinder Core PRO offers you ultimate control of your Axia network. It is a toolbox that allows you to fashion your own custom workflows for your users. At its foundation it provides router control. By communicating with Axia devices on your network, it brings the sources and destinations together into a common user interface that can then be used to make route changes anywhere in the system.
It also offers control over console parameters, metering, audio levels, and many more parameters that an Axia system provides. Plus, it allows you to design your own user interfaces to display this information and provide your users with whatever degree of control and information over the system you deem appropriate. Building on the highly successful PathfinderPro product line, Pathfinder Core PRO strives to make the information about your Axia system more dynamic, visible, and accessible than ever before.
Pathfinder Core PRO uses modern web browser tools to bring a rich and dynamic user experience to the product, including web sockets and HTML5. This comes at the expense of being unable to support older web browsers. For example, web sockets are only supported in Internet Explorer 10 and later. Most of our development work has been done using Google Chrome which should provide the most consistent and best user experience. If you find things that do not work or behave properly in a specific browser or do not update the data properly, please feel free to file a report with Axia support so that we can investigate the issue. We are always striving to improve the user experience across all browsers.
If data does not seem to display properly or if data is missing, refreshing the webpage is sometimes helpful. Many browsers also have a key combination that will force a refresh from the serving device rather than relying on cached data; for instance, holding the CTRL and SHIFT keys while clicking the refresh button in Google Chrome.
All links necessary to configure, control, and monitor your Pathfinder Core PRO system are on the left-hand side of the Pathfinder Core PRO web pages. This will be referred to throughout the manual as the Navigation Bar.
While the links on this bar are presented alphabetically for ease of use, this manual will skip from link to link as we go through a logical progression of using the system.
The right corner of each web page displays a network connection icon. In normal situations it should look like:
This icon tells you whether the underlying web socket used to obtain and set information from the web page to and from Pathfinder Core PRO is open and communicating properly. If it is not, the icon will look like this, indicating a communication problem between your browser and Pathfinder Core PRO:
Check network connectivity between your browser and Pathfinder Core PRO and verify Pathfinder Core PRO is booted and functioning properly. An additional symptom of this problem may be that configurations look as if they were blank. Before panicking and assuming that your Pathfinder Core PRO has somehow been wiped of its settings, check to see if the network icon is in an unconnected state.
Many of the configuration pages in Pathfinder Core PRO need to present lists of data. For example:
There are a few conventions that apply whenever you see a list like this in Pathfinder Core PRO. The first is the Search box in the right corner.
Typing in the search box will dynamically filter the list. These filters are also often stored by the browser, so if you return to a page and do not see the expected data in the list, check the search field to see if you have a filter on the list.
Next, notice that each column header has arrows next to the header names. Clicking on the header will sort the list according to the data in that column. The column that only has the single arrow represents the current sort column. Clicking on that column a second time will flip the arrow to the other direction and flip the sort from incrementing to decrementing and back again.
Many of the lists will have the hyphen sign in the last column of the list. Clicking this Delete icon removes the selected list item from the system.
Many of the lists will also have a plus sign at the bottom of the list. This sign indicates that items may be added to the list. Clicking the Add icon will usually open another dialog box with specifics for adding the new item.
When lists expand beyond what can be viewed on a single page, page navigation buttons will appear:
Important Note: These navigation tools are subject to the search field. In the case above for instance, if we were to type FUSION into the search field, we may get only a single returned entry and the page buttons would only show a single page.
Pathfinder Core PRO includes an event system called Logic Flows. Because Logic Flows can reach into almost every part of the system, they present a bit of a Catch 22 when it comes to introducing certain subjects in a manual.
There are certain subjects - such as Memory Slots - that are primarily useful in the context of Logic Flows, so you have to understand Logic Flows in order to make the best use of Memory Slots. However, the examples and discussions within the Logic Flow section of this manual also will refer to Memory Slots in order to present some of its examples.
Wherever possible, we have attempt to note this and refer to the relevant sections of this manual. However, as a reader, be prepared to skip around if necessary. If the manual is read from front to back, there may be points where we refer to subjects covered in a later section.
Reference
Notes
1
Select an entries value from the dropdown list to define how many entries are shown on each page. Options include 10, 25, 50, or 100 entries.
2
This field displays the total number of items shown on this page and the total number of returned entries.
3
If your search returns more entries than can be displayed on a single page, click the navigation buttons to move through the pages of returned results.
The installation and service instructions in this manual are for use by qualified personnel only. This equipment is not suitable for use in locations where children are likely to be present. To avoid electric shock, do not perform any servicing other than that contained in the operating instructions unless you are qualified to do so. Refer all servicing to qualified personnel. This instrument has an auto-ranging line voltage input. Ensure the power voltage is within the specified range of 100-240VAC. The "~" symbol, if used, indicates an alternating current supply. Equipment must be connected to protective earthing by means of a power cord connected to a socket outlet. Equipment with an earthing terminal should be connected to a proper ground system with 20 - 14 AWG (0.5 - 1.5mm) wire.
User Warnings and Cautions
This symbol, whenever it appears, alerts you to the presence of uninsulated, dangerous voltage inside the enclosure - voltage which may be sufficient to constitute a risk of shock. Disconnect equipment from all power sources before any servicing of parts.
This symbol, whenever it appears, alerts you to important operating and maintenance instructions. Read the manual.
This symbol, whenever it appears, identifies the associated terminal as a protective earth ground for protection against electric shock in case of a fault. The terminal should be connected to a proper ground system with 20 - 14 AWG (0.5 - 1.5mm) wire.
This symbol, whenever it appears, indicates a fuse to protect against excessive current. When replacing fuses, use only the type and rating of the original fuse as indicated by the manufacturer. Never install a fuse with a higher current value.
The instrument power supply incorporates an internal fuse. Hazardous voltages may still be present on some of the primary parts even when the fuse has blown. If fuse replacement is required, replace the fuse only with the same type and value for continued protection against fire.
The product's power cord is the primary disconnect device. The socket outlet should be located near the device and easily accessible. The unit should not be located such that access to the power cord is impaired. If the unit is incorporated into an equipement rack, an easily accessible safety disconnect should be included in the rack design.
To reduce the risk of electrical shock, do not expose this product to rain or moisture. This unit is for indoor use only.
This equipment requires the free flow of air for adequate cooling. Do not block the ventilation openings on the rear and sides of the unit. Failure to allow proper ventilation could damage the unit or create a fire hazard. Do not place the units on a carpet, bedding, or other materials that could interfere with any panel ventilation openings.
If the equipment is used in a manner not specified by the manufacturer, the protection provided by the equipment may be impaired.
This equipment generates, uses, and can radiate radio-frequency energy. If it is not installed and used as directed by this manual, it may cause interference to radio communication. This equipment complies with the limits for a Class A computing device as specified by FCC rules, part 15, subpart j, which are designed to provide reasonable protection against such interferences when this type of equipment is operated in a commercial environment. Operation of this equipment in a residential area is likely to cause interference. If it does, the user will be required to eliminate the interference at the user's expense. Note: Objectionable interference to TV or radio reception can occur if other devices are connected to this device without the use of shielded interconnect cables. FCC rules require the use of shielded cables.
This digital apparatus does not exceed the Class A limits for radio noise emissions set out in the radio interference regulations of the Canadian department of communications.
Le présent appareil numérique n’émet pas de bruits radioélectriques dépassant les limites applicables aux appareils numériques (de Class A) prescrites dans le règlement sur le brouillage radioélectrique édicté par le ministère des communications du Canada.
This device complies with the requirements of the EEC council directives:
93/68/EEC (CE marking)
73/23/EEC (Safety – Low voltage directive)
89/336/EEC (Electromagnetic compatibility
Conformity is declared to those standards: EN50081-1, EN50082-1.
Telos is a trademark of TLS Corp. All other trademarks are the property of their respective holders.
All versions, claims of compatibility, trademarks, etc. of hardware and software products not made by The Telos Alliance which are mentioned in this manual or accompanying material are informational only. The Telos Alliance makes no endorsement of any particular product for any purpose, nor claims any responsibility for operation or accuracy. We reserve the right to make improvements or changes in the products described in this manual which may affect the product specifications or to revise the manual without notice.
This document and its content are copyrighted by TLS Corporation and may not be copied, reproduced, or distributed in any form without expressed written permission.
Patent information can be found at www.TelosAlliance.com/legal.
The features and operations of most products and equipment are determined largely by software. Telos Alliance strives to provide the most stable and feature-rich software available, and we encourage you to check for software updates from time to time by visiting our website or by contacting us directly.
We welcome feedback on any aspect of our products or this manual. In the past, many good ideas from users have made their way into software revisions or new products. Please contact us with your comments or suggestions.
By phone or fax: You may reach our Telos Support Team in emergencies by calling +1 216-622-0247. For billing questions or other non-emergency technical questions, call +1 216-241-7225 between 9:00 AM to 5:00 PM USA Eastern Time, Monday through Friday.
By e-mail: Non-emergency technical support is available at Support@TelosAlliance.com.
By web: A direct support request may be initiated via our website at https://www.telosalliance.com/support-request.
Our main product support page also has a variety of helpful information at www.telosalliance.com/support.
You must contact Telos Alliance before returning any equipment for factory service. We will need your unit’s serial number, located on the back of the unit. We will issue a return authorization number, which must be written on the exterior of your shipping container. Please do not include cables or accessories unless specifically requested by the Technical Support Engineer. Be sure to adequately insure your shipment for its replacement value. Packages without proper authorization may be refused. US customers, please contact Telos Alliance Technical Support at +1-216-622-0247. All other customers should contact their local representative to make arrangements for service.
For the latest Telos Alliance warrant information, please visit www.telosalliance.com/warranty.
Register your product today to get the full benefits of our warranty, support, and product updates at www.telosalliance.com/product-registration.
Telos Alliance, 1241 Superior Avenue, Cleveland, OH 44114 USA. Telephone +1-216-241-7225.
The Devices link in the navigation bar displays a list of all devices discovered by Pathfinder Core PRO.
Each device entry in the list includes the following options:
Important Note: When a device is removed from the system, it will also remove all entries in the Audio and GPIO router for that device. It is important to note that if Livewire Discovery is enabled on the system page, the device may get re-discovered and added back into the list if it is still on the network.
Some devices cannot be discovered automatically. These include Axia OLED and LCD rackmount button panels. Additionally, you may want to add a device into the system without enabling the full network discovery engine. To add these into the system, click the Add button on the Devices dialog.
A dialog box will appear that allows you to define a range of IP addresses to scan and the investigation method to use.
Pathfinder Core PRO includes a virtual GPIO node which may be accessed by browsing to the GPIO navigation bar link under the System items.
This virtual node behaves very much like the GPIO portion of an Axia Livewire driver except that the number of ports is dynamically adjustable and includes a few additional features as described below.
When you first open the GPIO link it will recognize that the internal GPIO node has not been added to the devices table and will ask if you would like to add it. The node may only be used and/or configured after it has been added to the device list.
Click OK to discover and add the internal GPIO node into the device list. This will also discover the GPIO points into the GPIO router as well.
It is important to understand the various ways GPIOs may be used in an Axia environment.
Software GPIOs with no source address assignment will simply allow closures to be directly tripped on either GPI or GPO by Pathfinder Core PRO
Example: SRCA:””
If a source address field for a GPIO port uses a Livewire channel number in its address field, it will listen to and generate closures to and from an Axia Console over multicast
Example: SRCA:9501
Finally, if the source address uses an IPAddress/port format it means that the GPIO port should use TCP to connect to the device at that IP Address, monitor the GPIs from the selected port on that device, and mirror those closures on this port’s GPOs; this is the method used by the PathfinderCore PRO GPIO router to route GPIO data across a network
Example: SRCA:”172.16.1.23/8”
By default, Pathfinder Core PRO’s GPIO node works in the same way as described above; clicking Edit in the GPIO table allows advanced users to manipulate advanced properties
Important Note: By manipulating IRoute Mode and ORoute Mode, it is possible to make a multicast or unicast GPIO route where one port’s inputs and outputs mirror another port.
Reference
Description
1
Clicking this link takes you directly to the device’s configuration web page.
2
If a different login is required by the device click this link to set the password.
3
Clicking this icon will remove this device from the system. See notes below for details.
4
The connection recycle icon should rarely, if ever, be used. Clicking this icon will cause Pathfinder to drop and reconnect its connection to the device.
Reference
Description
1
If you are adding a single device, type the same IP address in both boxes. The To box should auto-populate when you type an IP address into the IP Address box.
2
If you are adding an Axia audio or GPIO device, select Lwrp as the investigation type. See note below. If you are adding an Axia rackmount OLED or LCD panel, use the Lwcp investigation type.
3
Clicking Investigate will cause the system to try and contact a device on the requested IP address using the defined investigation type. If a device can be contacted and data can be discovered from the device, it will be added to the Devices list. Its routing resources will also be added to the requisite routers.
Reference
Description
1
Once the device has been added you will see the list of GPIO ports. By default, there are 4 ports in the system.
2
You can add additional GPIO ports by typing a new port count at the top of the screen and then clicking Update. This allows you to add any number of GPIO ports into the local virtual GPIO node.
3
Click the edit link to change the property values for any GPIO port. See the Pathfinder Core PRO GPIO Properties section below for details.
Field
Description
Port Name
This allows you to type a unique name for this GPIO port.
MCast Mode
Selecting Node from the drop-down list allows the port to behave like a Livewire driver GPIO port when a Livewire channel number is typed in the source address. Specifically, the port will listen to GPIO messages from the console fader on which the Livewire channel number is loaded and change its GPO pins accordingly. Tripping the GPI pins of the port will send closures to the Axia Console.
Selecting console allows the port to behave as if it were an Axia console. Therefore, GPIs that are tripped on this node will be sent to the GPOs of other GPIO ports on the network that have the same channel number assigned. Tripping a GPI on one of those other devices will cause the GPO on this port to change.
IRoute Mode
By default, this will be set to O. This property only applies to situations where an IP/Port or Livewire channel is used in the source address. When a GPI comes in from either of these sources, it is applied to a GPO on the port. This property allows you to change this behavior and apply the incoming GPI to either the GPI or to None which means it is ignored.
ORoute Mode
This property defines where inbound GPOs will be sent. By default, they are sent nowhere as this setting replicates other GPIO node functionality. When using IP/Port source addressing the Pathfinder Core PRO GPIO node is unique in that it will also subscribe to GPO changes for the port and these may be routed to I, O, or None. See note below.
Source Address
This field may be left blank if the closures will be used by Pathfinder and do not need to follow another port or console functionality. Alternatively, you may type a Livewire channel number or IP/Port value to this field. If you type an IP/Port value, you do not need to assign it in the configuration user interface. The GPIO router will allow you to manipulate this field much more easily by just making route changes.
When you first log in to the Pathfinder Core PRO web page, you will be presented with the System Status page. This is the same web page displayed when clicking the System link in the navigation bar.
This screen is primarily informational outside of the licensing configuration fields. There are four sections:
This shows which of the two Firmware Banks is currently active and the version of software running in that Bank.
This shows the current license in the system and its capabilities.
This shows graphs representing the current CPU, memory, Ethernet utilization, and available disk space. The graphs are updated automatically every two seconds.
This section provides download links to the online documentation.
Under the System heading in the navigation bar is a Configuration link. If you've already referenced the Quick Start Guide, you will have already been introduced to this page.
Access the web interface by typing in the IP address configured earlier in a web browser; an authentication window will appear; type the following values: Username = Admin Password = Admin
Select Sign In to load the Pathfinder Core PRO control panel
From the links in the left-hand navigation bar, click Configuration under the System heading
Next to Livewire Endpoint Discovery, click Start
When a new device is discovered, the system will add it to its device list and add any route points provided by the device into the audio and GPIO router. This is one of the first options you will use when configuring a new system as it is how you will discover the equipment that Pathfinder Core PRO can control.
When discovery is enabled, the button will say Stop instead of Start; clicking the button will stop any additional automatic discovery.
Important Note: Pathfinder Core PRO uses the IP address of a device as the unique identifier of that device within the system. If you change the IP address of a device, Pathfinder Core PRO will treat it as a new device. This is why we recommend setting up your basic Axia infrastructure first before introducing Pathfinder Core PRO to the mix.
Current IP address information is visible in the Network Configuration section of the System > Configuration page.
System IP options can be edited using the front panel display or through the web GUI.
Click the Configure button to open the network interface’s Edit screen
Type the IP Address, Netmask, and Gateway values and click OK, or click Cancel to leave this dialog without making any changes
Important Note: Network interface changes will not take effect until you reboot the system. Therefore, after changing the IP options, you will notice that Network Configuration screen will show the changes in parenthesis and will sport a shiny new Reboot button.
The DNS section lists the currently defined DNS servers.
With correctly configured DNS settings, the system can send emails to administrators and employees alerting them to network changes requiring attention. For example, you can send emails when critical sources or destinations such as air chains become silent. To do this, the system needs to be able to resolve email server names with the correct IP addresses to send the email through. The DNS entries can also be used when entering NTP server information. Talk to your network administrator if you are unsure of which DNS servers to use.
Click the DNS Server Configure button to open the Dns Entries dialog, allowing you to add, remove, and reorder DNS server entries
Click Add to add a new DNS server to the list and Remove to remove a DNS server entry
To move a DNS Server up or down in the priority list, select a DNS server entry and click the << or >> buttons
Click OK to save your changes or Cancel to leave the dialog without making any changes
Important Note: DNS changes do not require a reboot to become active.
Each Pathfinder Core PRO system includes a base license allowing a 1000 license point pool to be allocated between both Axia Audio Sources and Logic Flow endpoints.
Important Note: The licensing model changed with version 1.6 of Pathfinder Core PRO. In previous versions, the base license provided only 500 Axia Audio Sources and 500 Logic Flow endpoints, and add-on licenses would have to be applied to one or the other. Many customers found they needed more Axia Audio Source points but did not need as many Logic Flow points, resulting in the new licensing model defining the shared license point pool. We also added the new license types described below.
If you purchased a hardware-based Pathfinder Core PRO, the base license is pre‑installed. If you purchased a virtual machine license, there are three possible license types:
Additional licenses to add functionality may be purchased through your Axia distributer, with each additional licenses providing either an additional 500 (the Pathfinder Core PRO Add-On 500) or 100 (the Pathfinder Core PRO Add-On 100) license points.
Add-on licenses are shared between the Pathfinder Core PRO units that are participating in a clustered system. This means that if you need a redundant Pathfinder Core PRO system that supports 1400 license points, you will need to purchase two Pathfinder Core PRO systems (each of which comes with a base license or backup license) and a single add-on license to add the additional 500 sources. The add-on license allows both systems in the cluster to mirror and synchronize the full 1400 license point functionality.
Important Note: Virtual sources and GPIO sources do not count against the license. Only Axia Audio Sources with enabled streams and Logic Flow endpoints are counted in the licensing. Additionally, Logic Flows which are dynamically created by the system during HTML5 panel binding and/or hardware mapping do not count against your licensing. If you have questions regarding the licensing model, please contact Axia support or your Axia distributor.
To view or add additional licenses, click the System heading on the navigation bar and then click the Edit Licenses link
The licensing page will display your base license information; it will also provide a list of your additional licenses
Click the New License line then type the new Request Code and License Key to add a new license
Finally, click Submit Changes to add the license to the system; license changes may require a reboot to become effective; click the Configuration link under System to find the reboot button
The Backup/Restore page presents a list of all backups in the system. If this is the first time using this page, there will probably not be any backups present in the system.
To take a new backup, or to upload a backup from your local computer back into the system, click the plus icon.
To create a new backup, type a name for the backup, select whether you want logs and/or the IP address to be included in the backup, and then click Take. Click Cancel to exit the dialog without making any changes.
The backup will include any configuration files needed to return your system to its current state.
If logs are included, the backup will also include all system and application logs currently on the system. The log information can be very useful to Axia support if they are trying to assist in troubleshooting an issue, and it is likely they will ask you to take a backup including log files and send it to them.
If you intend to restore the backup on a different Pathfinder Core PRO, you may not wish to include IP addresses so the restore process does not overwrite the IP addresses of the other unit.
Important Note: After taking a new backup it is highly recommended that you click on the link to the backup file and download it to your local computer to store it in a safe location. Backups that live on the Pathfinder Core PRO system are not true backups because if the system or storage medium were to fail, both the system and the backups could be lost. Downloading a backup to your local system will also allow you to send the backup to support if necessary.
Backups are stored in the software Bank. When you move to a new software Bank, you will not be able to directly access the backups from the previous Bank. However, if the backup is saved to your local computer, you can easily upload it back into a new Bank if desired.
To restore your configuration to a new system, a factory default system, or a system that has had the desired backup removed from the system, click Choose File.
Select a System Backup file on your local system, then click Upload. After the upload is complete, the backup will be available in the Backup/Restore list.
The minus icon will delete a backup from the system.
Since there is limited space on the storage medium it is recommended to keep only a few backups on the system at a time.
Click the Restore link next to a stored backup. The system will request confirmation that you really wish to restore the system to that state.
After confirming the operation, the system will shut down active services, restore the configuration files to the state of that backup, and reboot.
Important Note: The restore function typically happens quickly, but keep in mind that the system will not be operational during the restore and reboot process.
One of the Pathfinder Core PRO Administrator’s most important tasks is periodic firmware updates. This project is undergoing a very active development lifecycle with many new features planned for future versions. That, in addition to fixes for any bugs reported to us by our users, will make occasional updates of the firmware in your Pathfinder Core PRO system necessary.
The system has two software Banks so that if there is a need to return to an earlier version, it will live in the preceding Bank. To upgrade your system:
Take a backup of your system as explained in the Taking Backups section above; we always recommend backing up your system before making any major change just to be safe; the backup process generates its own backup as well, but it never hurts to have another copy stored on your local computer
Download the new firmware version from the Axia Audio web site to your local computer; the file name extension will be .pfc_upd which stands for Pathfinder Core PRO update package; it is also a good idea to take a moment to scan the release notes to understand the changes between the version you are currently running and the version to which you will be upgrading
Select the Upload Update link under the System heading in the navigation bar; this page will display the Bank on which you are not currently running, as the update will always load to the inactive bank
Click Browse and select the file you downloaded from the Axia web site
The File Upload bar will change to the name of the file which you have selected to upload and a status bar will appear with the Begin button; if the file is not correct for the type of system you have (for example, you attempt to install VM software to a Fanless Engine platform) a warning will appear
Click Begin to begin the updating process
A new page will appear with a progress bar that presents stages along with some additional information regarding what is taking place at that point of the update process; the update may take several minutes to complete
Important Note: It is important to understand the status of the configuration files during an upgrade process. The configuration files for the system reside within the currently executing Bank. During the upgrade process, a backup of the configuration from the currently running Bank is automatically made. After the new software is written into the new Bank, the configuration is then restored into the new Bank so that when you boot into the new Bank it has the same configuration that is in the currently executing Bank. However, if you then boot into the new Bank and make changes to the configuration in the new Bank, those changes will not reside in the old Bank. If you wish to return to the old Bank and you have made changes to the configuration, you should back up the configuration on the new Bank, boot into the old Bank, and then restore the backup. This process is outlined in the section on Backup and Restore.
Once the update is complete, you should receive a Processing Succeeded message; because you are updating the Bank which is currently active, the system should continue to run even if there was an error with the update
If you receive an error message instead of Processing Succeeded, please contact Axia support
To boot into the updated Bank and start using the new software, click the Bank Control link in the navigation bar
Bank Control displays the software versions in both Banks of the system and offers control over the currently executing software revision Bank. Click the Bank Control link under the System heading in the navigation bar to view this page.
The Bank button can be used to select which Bank will be used on the next reboot. It also displays the currently selected Bank as the next Bank that will be active at reboot.
After changing the Bank that will be used on the next reboot, a Reboot button will appear on the page.
Clicking Reboot will reboot into the newly selected Bank.
The information tables display the software version in each Bank. An asterisk will be present next to the Bank that is currently executing.
Important Note: When you select a new Bank, the system creates a temporary mark in the system to boot into that Bank. After the system boots into the new Bank, that temporary mark is turned into a normal reboot setting so the newly selected Bank will be used on subsequent reboots. This is called "cementing the Bank". If something goes wrong with the upgrade and the Bank is unusable, the Bank does not get cemented and rebooting the system either automatically or by disconnecting power will cause the system to boot into the previously working Bank. The new Bank will only get cemented for future boots if it boots successfully.
This also means that after rebooting into a new Bank you should return to the Bank control web page to make sure the boot was successful and you are executing on the desired Bank. If the boot fails, it could fail back to the previous Bank and you will only know that by double-checking this page.
Important Note: We have occasionally seen some browsers try to cache the state of this page even though we have requested that it does not do so in the web page code. If you reboot and the executing asterisk does not change, try refreshing the web page. Some browsers have an extra button you can hold down while refreshing to force the web page to refresh rather than rely on the cache; for example, with Google Chrome, hold Shift+CTRL while clicking the refresh icon.
Since configuration files reside within the executing Bank, if you are switching to a different Bank the configuration may be different. It is always recommended to take a backup of your configuration before switching Banks, and then restore that configuration on the new Bank.
If you are switching Banks immediately after upgrading the firmware, then this backup and restore have been already completed as part of the upgrade process. Otherwise, it is recommended to review the backup and restore procedures earlier in this manual. Conversely, this also means if you make a mistake in the configuration in a new Bank, you can boot back into the old Bank to get to an older and successfully working configuration, though using backups and restores is a more efficient way of doing this.
Click the Services link on the navigation bar to view the Services page.
This page will only be used in conjunction with Axia tech support, but it is worth discussing what this page represents. To make Pathfinder Core PRO as robust as possible, the system has a sophisticated watchdog process. This process monitors the state of each of the services in the system and is responsible for sending ping messages to each service to make sure they are still responsive at the application layer. If a service fails to respond within a certain period of time, the watchdog will restart the service. In a rare and catastrophic situation where the watchdog is not able to achieve proper responsiveness of a service, it might also restart all services or even reboot the system after enough subsequent failures.
This screen shows each service, when it was last started, and the most recent ping and response time. If you watch this screen you should notice the pings changing at approximately 5-second intervals.
In many ways, this page is equivalent to the Services control panel in a Windows machine.
Click on the Time link under the System heading of the navigation bar to view the Time settings. The System Time configuration page allows you to define NTP servers, set the system’s time zone, and sync the current time to that of your local PC.
Use the Current Timezone drop-down to select the correct time zone for the system.
Click Set time from PC to update Pathfinder Core PRO’s current time to that of your local PC.
Defining NTP servers in the Ntp servers list is recommended so that Pathfinder Core PRO can update its time automatically and always be as accurate as possible.
There are a number of reasons why it is important to keep Pathfinder Core PRO’s time accurate. The first is that the system has the ability to define events that happen at specific dates and times. Those events will, of course, fire at incorrect times if the system’s time is not up to date. Additionally, log files use the system’s time settings to keep track of when changes happen.
Finally, proper cluster synchronization relies on date and time settings to determine whether a specific piece of information is more up-to-date on one system or another and therefore whether synchronization of that piece of information needs to take place. Talk to your network administrator if you have questions about which NTP servers to use.
In order to send emails from Logic Flows, the server parameters must first be defined in the system in order to let Pathfinder Core PRO know which email server to use to send email messages. Under the System section of the navigation bar, click the Email Settings link.
These settings are like those used by any other email client application.
Important Note: While most servers require authentication, some provide security based on the source IP address rather than user credentials. Using a blank username and password will cause Pathfinder Core PRO to skip including any credentials in the email sends. After applying a blank password, the field will most likely show a series of stars, but this does not indicate the presence of a password. In addition to masking the characters of a password, this field also masks the length of the password for security reasons. Therefore, even a blank password will display a constant number of stars in the field after the password has been applied.
Once you have the parameters configured correctly, click Apply Changes to store them to the system. This button must be clicked before Send Test Email will use the new settings.
Use the Send Test Email button to generate a test email. The page will ask for a destination email address and will then attempt to send the message. Any errors will be reported. Once you can successfully send test emails, you are ready to create messages that may be used by Pathfinder Core PRO’s event system, Logic Flows.
Go to the Email Messages section of this manual for more details about creating email messages determine when those messages are sent.
Clicking on the Routers link in the navigation bar will present a list of routers in the system:
Pathfinder Core PRO currently supports:
Axia Audio Routers
Axia GPIO Routers
Imagine Routers
Virtual Routers
Sap Property Routers
The Axia Audio Router and Axia GPIO Router are automatically generated based on devices discovered in the system. These two routers will always be in the system and may not be removed. Imagine Routers, Virtual Routers, and Sap Property Routers may be created and removed from the Routers page.
Clicking on the Details link for any router will present a new screen with the routing status of the router:
This screen has three tabs on the top: Points, Routes, and XY.
The Points tab simply lists sources and destinations in the router along with relevant information for each. The columns in each list are broken into two major sections:
Source/Destination: Details related directly to the source or destination such as the source’s name, Livewire channel, and availability.
Host: Information about the host device where a source or destination resides.
Since these lists can contain many entries, the search box can be used to narrow the list.
For users that have administrative rights to the router, some additional configuration tools may also be present depending on the type of router. For example, when viewing the Axia Audio router, a button will be present for adding AES67 sources to the router. In the Virtual router, controls will exist for adding additional virtual sources and destinations to the router. These additional controls will be discussed below under the section for each router type.
The Routes tab displays the current source-to-destination routing of the router.
Again, this screen is divided into two sides. The source information for each active route is on the left, and the destination information is on the right. The columns display information about each active route:
Route changes may be made from the Routes tab by either:
Selecting an entry in the routing list and clicking Change Route
Double-clicking on an entry in the routing list
Either of these actions will present a dialog with a list of sources that may be assigned to the currently selected destination:
On the Select Source dialog, select the source in the source list and click Take to change the route or double-click on a source in the source list.
Click Cancel to exit the route selection dialog without making changes
Since this list can contain many entries, the search box can be used to narrow the list.
The search filter can persist as you navigate between pages so if you return to the route page and are not seeing sources or destinations that you expect to find, check to see if there is a search filter on the list.
Important Note: A Source will not be available in the Routes list if it is not routed to anything. It will be present in the Take list when you go to make a change as well as in the Points tab under sources, but the search function is only searching data that is in the list. If the source is not routed to any destination, it is not in the routes list because it is not involved in any active route.
Each route (destination) in a router can be Unlocked, Locked, or SystemLocked.
The lock state is represented by an icon in the Router’s Details table:
System Locked (except for virtual routers described below) indicates that the device itself does not allow route changes to be made on that IO. This is typically seen with console faders where source changes must be accomplished via a source profile load rather than a route change.
Important Note: Other than system locks, locking and unlocking is a Pathfinder state and does not actually change anything in the equipment as Axia equipment does not have lock parameters. Therefore, a locked route in Pathfinder Core PRO could still be changed by the device’s web page.
Locking or unlocking a route is as simple as clicking on the Destinations icon in the route list. Locked routes must be unlocked before they can be changed. In addition, it is possible to define whether a user has permission to change route locks. When defining a user, a field now exists to configure this:
Checking the Can Lock Routes checkbox will grant this user permissions to lock and unlock routes. This allows an Administrator to lock routes and make them unchangeable by normal users.
The Route locks do not apply option is reserved for future development.
Important Note: A virtual destination is comprised of one or more base destinations from other routers. If you lock a virtual destination, it will not lock the underlying base destination. This is by design and allows an Administrator to create a general user router with locked destinations and an engineering router where those same destinations are unlocked. However, if the base point becomes locked, then the virtual destination will display as system locked and the lock can only be removed by unlocking the lock on the base point. In the case where a virtual destination has multiple base points, the locking of any of the base points results in the entire virtual destination becoming system locked.
The fact that locking a virtual destination does not lock its underlying base point is different from how previous versions of Pathfinder worked.
The XY tab presents an XY grid which allows the user to graphically make route changes. This tab also mirrors the functionality of the XY component available in HTML5 user panels.
The Axia Audio Router is created automatically by the system. As devices are discovered or manually added to the system, they are analyzed to determine what audio sources and destinations they provide, and those sources and destinations are automatically loaded into this router.
When you use this router to make a route change, Pathfinder Core PRO is reaching out into the destination device and sending it a command to change the source assigned to that destination. This happens in much the same way as you could make the change from the device’s web page except that you can see all of the audio IOs in one location with Pathfinder Core PRO. Pathfinder Core PRO can also execute scene changes where it can make hundreds of route changes across many devices at once.
You may notice in the points tab that some sources will carry an IP Address of 255.255.255.255:93, have nothing in the host name column, and have “To:” at the start of their Name.
These sources are Axia Backfeeds generated by the mixing engines. They are not assigned a specific host because they are the one and only type of source that can dynamically change which device (Engine) is currently hosting them so they do not have a formal home. To learn more about Axia Backfeeds, see any of the Axia Mixing Console manuals.
The points tab of an Axia Audio Router will also have an Add AES67 Source button. Clicking this button will present a dialog for adding AES67 sources to the system.
Type the name and description by which the source will be identified in the system in the Source Name and Description fields. The AES67 specification allows for sources to be defined using a Unicast/Sip or multicast address format. The information required to define the source is different depending on the selected format and so different fields will be present depending on which definition you select. The example above shows the unicast method. Define the number and the host IP address required to define the Sip path. The resulting address field will automatically fill with the address required for this source based on these parameters.
If you select the multicast option, the required fields will change:
In this case, fill in the multicast IP address and adjust the other parameters to reflect the AES67 source settings, then click add to add the source.
Once added, you will notice that in the list of points AES67 sources will have a minus icon to allow deletion of the source and an edit field to return to the editing dialog shown above.
Once these sources are added to the router, Pathfinder Core PRO can instruct any Axia device destination that supports AES67 streams to receive a specific AES67 stream in the same way as normal Axia route changes are made.
The Axia GPIO Router is very similar to the Axia Audio Router. As devices get discovered which have GPIO ports, those ports are added to this router. And in a similar fashion to the Axia Audio Router, when you make route changes, Pathfinder Core PRO is reaching into the destination node and sending it a command which tells a specific GPO on that device to follow the GPIs of the selected source device and port. Due to the nature of GPIOs on an Axia network, this routing becomes a little more nuanced and could use some explanation.
There are three ways to route GPIO closures across an Axia network. The Axia GPIO Router in Pathfinder Core PRO only uses one of these methods. It is still important to understand all of the methods however as attempting to use conflicting methods at the same time on a GPIO port can cause erroneous and unpredictable closures.
First, within the Axia device itself, you can assign a channel number to a GPIO port. When you do this, you are creating a special situation where you are telling the port to bind itself to Axia Mixing Console GPIO signals from whatever console currently has loaded that Livewire channel number.
Second, you can assign an IP address and port number of a GPI to a GPO. This is called "snake mode" and it is what the GPIO Router uses to tell a device’s GPOs to mirror another port’s GPIs. Therefore, when you make a route change in the Pathfinder Axia GPIO Router from Node 1 Port 1 to Node 2 Port 4, any GPI closures on Node 1 Port 1, will be mirrored as GPOs in Node 2 Port 4. These route changes can also be updated dynamically, just as with any other router.
The third way that GPIOs can be used is to leave both the Livewire channel number and the routing assignment unassigned, then directly trip the closures using Pathfinder’s (or some other automation system’s) event system by sending closure commands to the device.
The reason it is important to understand these three methods of GPIO closures is that it is possible to do multiples of them at the same time which is occasionally useful but more often just a mistake. For example, we often see users who think that the GPIO ports should have a Livewire channel number and so just arbitrarily assign them. This can lead to a situation where the user has created Pathfinder events to make and respond to changes on those ports, but those same ports are also being fired by changes on the mixing console causing confusion and generating calls to Axia Support. It is important to first understand how you intend to use a given GPIO port then configure it correctly for that task.
To add an Imagine Router into Pathfinder Core PRO, you first must add the Imagine Device to the Devices list. In Devices, click Add, type the IP Address, and select Imagine LRC from the Investigation Type drop-down list.
Once the device has been successfully added, click on the Routers tab and click Add a new Router.
Imagine routers have multiple levels and Pathfinder Core PRO can control full routes that route all levels at once by adding the {ALL} level. Any given breakaway level may also be added separately. Or, both may be added in different routers. This allows routes that should target all levels to be made on the router with the All target and routes of individual breakaway levels to be made on the breakaway routers.
Once added, the router will discover the IOs made available by the selected level and routes may be manipulated in the same way as other routers in the system
Virtual routers are a special kind of router. You can think of a virtual router as a way to make a subset of routes you wish a specific user to use. For example, you could create a router that only contains the routes from the Axia Audio Router that are related to a specific studio. Or you could create a router that only contains the routes that are relevant to the final air chains. This allows you to create purpose-driven routers that display only the routes that are relevant to a specific set of tasks and are therefore much easier to navigate than browsing every source and destination on the network.
However, virtual routers can also go much deeper than just subsets of routes. For any specific virtual source or destination, you can also associate multiple real sources or destinations with that virtual source. That sounds complicated but is actually relatively simple and extremely powerful. For example, let’s say that every time you route a specific Audio Source to a specific Audio Destination, you also want to route a GPIO source that carries signaling information related to that audio source to a specific GPIO destination. An example of where this might be useful would be switching from a primary automation system to a backup automation system by creating a virtual source that contains both an audio and a GPIO source plus a virtual destination that contains both an audio and a GPIO destination. Now, when you use the virtual router to route that source to the destination, it will tell the underlying audio and GPIO routers to make both routes.
To create a virtual router, click the plus icon on the main routers page.
Provide a name and description for the router and click Add. The router id will autogenerate the next available router id number but can be overridden with your own id number. Be careful to use a unique id that is not already in use by another router.
After clicking Add, the virtual router will appear in the routers list. However, this router is currently empty as it does not have any sources or destinations. Click the Details button and select the Points tab.
The easiest way to populate a virtual router is to import some sources and destinations from a real router. In this case, we are going to select the Axia Audio Router from the import drop-down and then click Import Sources. You will then be presented with a list of importable sources.
Click on the sources you wish to import (Shift-click to select a range) then click the Import button. Repeat the procedure with the Import Destinations button to import additional destinations into the virtual router. Note that in general, you will leave the target id at -1. This will import the IOs to the end of the router. Setting a number other than -1 will try to import the new IOs at the number selected. This will fail if there are not enough open numbers at the target id to support the number of selected IOs.
At this point, you have a virtual router with only the sources and destinations you want available. This router can then be made available as the only router certain users have access to by using the user rights section, or it can be used to easily see and change certain critical routes without viewing the entire Audio router.
However, let’s dig a little deeper into each individual virtual IO. If you click the Edit link on one of the imported virtual sources, you will be presented with more details about the virtual source.
By default, when you import a source the name and description fields of the virtual source inherit the name of the imported source. But you can change this to any name or description you want using the name and description field. The Base Io Package allows you to define which real sources are a part of this virtual source. As mentioned earlier, it is possible to tie multiple sources together into a single virtual source package. For example, we could select the Gpio router from the Import From dialog, click Import, then select a gpio source to include in this package.
The Move Up, Move Down, and Renumber buttons allow you to change the order of the sources in the virtual source package. Once applied, this virtual source now has both a gpio and audio source and so routing that virtual source to a virtual destination will attempt to make both a gpio and audio route change underneath. The same process can be used to edit and manipulate the virtual destinations.
The Points tab on the virtual router also includes a Plus icon for manually adding virtual sources and destinations and a Minus icon for deleting a virtual source or destination from the router.
For those who are interested in what happens under the hood with virtual routers, this section is for you. Every virtual source or destination is a package. Within that package is a list of pointers to real sources or destinations. When you make a route change, the system does a number of things.
First, it attempts to organize the package according to the IO types of the pointers in both the source and destination package. For example, it will lump all of the GPIO points together and all of the Audio points together in each package. Then it will try to make one to one routes based on the order of the routes in the package.
This also allows you to lump multiple Audio sources and destinations into a single package. For example, if you were using some sort of immersive sound configuration that required multiple channels of audio (7.1, 22.2) to be routed at once, you could package all of the sources together into a virtual source package and all of the destinations together into a virtual destination package. When the virtual route is made, Pathfinder Core PRO will step through each line in the source package and try to apply it to the same line in the destination package in the order which they exist in the package. If the count in the source and destination packages does not match, the system will go as far as it can to create the matches. For example, if the source package has 1 source and the destination package has 2 destinations, only the first destination will get a route. If the source package has 2 sources and the destination package only has a single destination then only the first source will get applied anywhere.
In the same fashion, the state of virtual routes gets updated automatically as base routes in the packages change. If an audio route changes and the source and/or destination exists in a virtual router, an analysis is done to determine if the current route states of any of the source packages match what would happen if the source were applied to the destination. If they do, the virtual route is updated to reflect that source as the current route. If multiple source packages match the destination, then the first one with the most matches is displayed as the currently routed source.
If no source package matches a destination package, the route may have two other states. The first is “None”, which means that none of the destination package's destinations are assigned to anything. The other state is “Other”, which means that some of the destination package’s destinations have some route applied to them but it does not match up with any of the source packages in the virtual router. This explicitly displays a differentiation between a destination that is cleared and one that might be in use in some fashion, but not one that the virtual router can represent given its existing configuration.
The virtual router page also has a block of controls used for manipulating the order of the IOs in the router. These controls are only available to Administrative users. These buttons effectively alter the number of the IO in the virtual router. Since changing the IO numbering of a virtual router can have deeper consequences if the IOs are already in use by Logic Flows or device emulators, these buttons must be enabled by manually selecting the Enable Push/Move checkbox in order to prevent accidental changes.
It is recommended to sort by Port when using this feature as it manipulates up and down based on the port number and not the sort order. This is a design tool to create specific numbering for the virtual IOs and is most useful when those IOs will be exposed to emulated routing protocols that expect a number to be assigned to each IO.
Move Up – moves the IO up in the router effectively decreasing its IO number and swapping with its lower next-door neighbor if necessary.
Move Down – moves the IO down in the router effectively increasing its IO number and swapping with its higher next-door neighbor if necessary.
Push Up - moves the IO up in the router effectively decreasing its IO number and pushing any lower-numbered IOs it runs into up as well decreasing their numbers until it reaches a hole in the numbering or 0.
Push Down - moves the IO down in the router effectively increasing its IO number and pushing any higher-numbered IOs it runs into down as well increasing their numbers until it reaches a hole in the numbering or the highest value in the router.
By selecting the Sap Property Router type, any property that can be read from in Pathfinder Core PRO can become a router source and any property that can be written to can become a router destination.
For example, in the legacy Pathfinder Pro it was possible to create a router of individual GPIO pins instead of routing entire ports using the GPIOByPin router. This same functionality can be realized with SapPropertyRouter in Pathfinder Core PRO.
To create a Sap Property Router, browse to the Routers navigation link and click the Plus icon to create a new router.
Select the Sap Property Router from the drop-down list of available Router Types. Click Add to create the new router.
To add IOs to your new router, click the Details link and then click the Points tab.
Like the virtual router, you will see Import Sources and Import Destinations buttons as well as a Translation button. However, clicking these buttons for this router will display the property selector used in Logic Flows.
In the example above, we are going to select a GPI PinState property.
Type a name and description for the IO (or use the default) and click Select. Repeat for other pins you want as sources, then import the destinations.
Note that if the ports you are using for destinations are on a Livewire driver or Pathfinder Core PRO GPIO node, you can use GPI pins as the destination and route GPI to GPI. When you are done, it might look something like this:
If you go to the Routes tab you will see the destinations with a "take table" of the sources where you can make route changes.
In this example, GPI pin 5 has been routed to GPO pin 1. Therefore, any closures that take place on pin 5 will be replicated on pin 1.
Clicking the Translation button on the Points tab will open the translation pattern used for any values that pass from the source property to the routed destination properties. There is a single translation pattern that is used between the source values and destination values.
In the example above, the translation pattern is *=*. Using this pattern, a pin low on the source side will cause a pin low on all destinations to which the source is routed. By changing this translation to l=h and h=l, lows on the source would generate highs on any destination to which that source was routed.
Translation patterns may be applied to other properties. Applying a translation pattern of l=5000 to the Pulse state would force the output to go low for 5000ms each time the input went low. Without defining a h= value, nothing would happen when the input went high.
While we could achieve similar results with Logic Flows, configuring a router allows the start point of a flow to change dynamically. For example, suppose we have a Vmixer assigned to each air chain with channel 1 representing the feed from the studio console. There is a GPI pin in the studio which turns the Vmix channel on. This is simple to accomplish with a Logic Flow:
What if we have 5 studios and any one of them could be assigned to the air chain? Using Logic Flows this becomes much more complex because we must build flows for each studio-to-airchain variation. However, this becomes easy with a property router. On the source side of the router we select the GpiPinState property, and on the destination side we select all airchain Vmix IN state properties:
Once the items are selected, we can change the translation to:
Now when we route a studio pin to the airchain Vmix, the low from the studio will control the Vmix state of whichever airchain that studio happens to be routed to.
We can extend this example by using a virtual router where the virtual source package includes the audio console program buss audio source and the pin source from the SapProperty router, and the destination package includes the Vmix channel input audio destination and the Vmix state property from the property router.
These signals get married together such that a single virtual route change will switch both audio and signaling seamlessly. That virtual router can then be controlled by a third-party application using something like Probel without that application needing to know that we are actually switching numerous things under the hood. This opens up a whole new world of routing possibilities.
Another interesting example uses many of the new features described above. What if we wanted to route a TCP stream of song data to different destinations depending on what is currently on the air? We could create generic device emulators for each destination and each song data source. Using the regex capability, we could then add a watcher to the emulators on the source side that looks like:
Regex.Match((?s).*)
This will match any data coming in. Then, we create a new property router and choose the watcher TranslationValues for the soruces. For the destinations, we select the ToSend property of the destination generic emulators. This will essentially pass any data that comes into the source emulator to the output of destinations to which that source is routed. Then we could also marry those points into the air chain virtual router such that audio, studio pin to Vmix state, and songdata are all married together as a single virtual route.
Another possibility might be to route memory slots. Or, we could use the duration regex example above to capture different satellite duration data as source points in a router that then gets passed on to countdown clocks.
The point is, you can now route anything Pathfinder knows about.
In each example above, all sources and destinations in a given property router are of the same type. While this is not strictly required, it is usually good practice. Once you start mixing IO property types in the same router’s sources or destinations, the translation table can become non-intuitive and it is possible to output the wrong data to devices.
As there is no route state in the equipment for this type of routing, in order to retain the route state between restarts, this router must store all route changes (not the values transitioning through the routes) to the backing storage. In the case of the fanless engine which uses compact flash for this storage, we have implemented some protections to reduce the write cycles, though it is not recommended to make recursive millisecond route changes on Property routers if it can be avoided; for example, a rotation circuit that continuously loops through changing property routes. This is less of a concern with the R2 platform which uses SSD and the VM version.
Pathfinder Core Pro's Memory Slots provide a named location for storing data that can be used in Logic Flows. You can create and view Memory Slots via this link. You can also monitor the slot’s changes in real-time and alter the value of a memory slot directly from this page.
Add a memory slot by clicking the plus icon on the bottom-right corner of the memory slot list.
Pathfinder Core PRO has six different types of Memory Slots. Each one has its own options and properties:
Memory Slot: This is the traditional memory slot into which any kind of data may be stored
Latching Memory: This memory slot can only have a value of True or False; its write-only property is called Trigger; using a Logic Flow end point, you can set the trigger property to true and the slot value will toggle from true to false, or from false to true; see the latching example in the Logic Flows section of this manual for more details
Numeric Memory Slot: This memory slot only accepts numbers; its write-only properties are increment and decrement; use this in Logic Flows where you need to increment or decrement the value in the memory slot
Sap Property Memory Slot: This slot allows you to assign any property in the system to this memory slot; when this property value changes, the slot is updated with that value; the ellipsis button can be used to select the property to be used with this slot; it will present a property selection dialog similar to that of the dialog in Logic Flow endpoint editing
String Builder Memory Slot: This slot allows you to build a string based on values in other Memory Slots; the “IncludedSlots” field is used to enter a comma-delineated list of memory slot names to use in the builder; the pattern field is a text pattern with bracketed numbers used where slot values from the comma-delineated list should be inserted, for example:
In this case {0} will be replaced with the value of slot A and {1} will be replaced with the value of slot B. If Slot A’s value is "Fred" and Slot B’s value is "Telos Alliance", the value of this new memory slot called MyBuiltSlot would be: The Name is Fred and it is located at Telos Alliance. The value of this slot will update whenever Slot A or Slot B updates. This slot can be used to build text which is then used as labels on buttons or commands to generic emulators. When the included slot list contains slots that are Sap Property Memory Slots, this memory slot type can become even more powerful.
Time Stamp Memory Slot: This slot can be used to grab time stamps, which can be useful in displaying the last time something happened in a user panel
When you first create a time stamp memory slot, you will probably not apply a value. The pattern field can also be left blank. It can be used to specify the format of the time stamp which we will describe in more detail below. After creating the timestamp memory slot, it can be used in Logic Flows by applying an endpoint to the SetTimeStamp write-only property of the memory slot. For example:
This Logic Flow will set the memory slot to the current date and time every time the specified GPIO pin goes low.
The format of the date time stamp can be changed using the pattern field. If you edit the memory slot again you will see that the default format has been assigned to the memory slot:
The startup state drop-down applies to each of the memory slot types above and requires some explanation. This option allows you to determine the value of the slot when the system first starts up and before any flows are executed. It can be blank, a fixed value as defined when you create the slot, or last known. It is important to understand the last known option will attempt to store the state in the database each time the memory slot state changes. This can be more CPU- and time-intensive because of the compact flash storage within the Pathfinder Core PRO. As a result, this option should not be used in situations where the existing state of Axia devices will reset the memory slot to the correct state via the flows as the flows start-up anyway.
Timers allow Flows to be executed at specific times. This list shows the Timers that have been created and may be used in Logic Flows. The page shows up to date information as the Timer states changes.
To create a new Timer, click the Add icon on the Timers dialog to open the Timer Editor.
Three types of Timers can be created in Pathfinder Core PRO: Interval, Day of Week, and Date/Time.
If you want to create a Logic Flow with a delayed action, you could use a delay directly in the Flow, or you could create an Interval Timer. An Interval Timer raises an Elapsed property after a specified number of milliseconds.
Interval Timers can also be programmed to autoreset. An autoresetting Interval Timer will set the Elapsed flag to true after the Interval, and then immediately set it back to false and restart the countdown.
Leave the Autoreset and Enabled properties as false. Type a name for this Timer and apply it.
Now we can use this Timer in Logic Flows:
For example, an Interval Timer can be used in a Logic Flow so when GPI 1 goes low, it enables the Timer. Then the Elapsed property 5-seconds later causes GPI 2 pin to be set low:
Interval Timers have three additional write-only properties:
Reset: If the Timer is enabled, this property will disable and then re-enable the Timer to start the countdown over. If the Timer is disabled, this will set the elapsed property to false.
ResetStart: Stops the Timer (if it is running) and then starts the Timer to reset the countdown.
ResetStop: Disables the Timer and changes the elapsed state to false.
These are available in the Logic Flows simple tree when an Interval Timer endpoint is selected in the Logic Flow. Since these are write-only properties they will not be shown when Interval Timer start points are selected – only endpoints.
All three properties accept true/false values and setting any of them to true will initiate the reset. They do not need to be set to false again afterwards as passing the true value is just a trigger to initiate the reset. The value is not retained. These properties can be thought of more as actions than traditional properties.
If we want something to happen at a specific time every Monday, we could create a Day of Week Timer. With this type of Timer, you can specify a time and the days of the week on which the Timer should set its Elapsed property to true.
If we want something to happen on a specific day and time, we could create a Date/Time Timer. The Timer’s Elapsed property will be set to true at that day and time.
Clicking the calendar icon will present a user-friendly calendar for configuring the date and time.
In both the Day of Week and Date/Time Timers, it is important to understand the difference between clock time and fixed time. Within Pathfinder Core PRO, all times are stored with a UTC offset. Clock time means that the event will happen at a specific time (say 7PM) according to the clock regardless of the UTC offset. If you want an event to happen at 7PM according to what the clock shows both before and after a daylight savings shift, you should pick the clock time option.
However, if you are picking up a satellite feed and the region from which the feed originates does not shift their clock to daylight savings time, then you should select fixed time because the event will happen at a different time (according to your wall clock) before and after the daylight savings time shift. In this case, it is fixed to the time and UTC offset.
It is also important to understand that creating a Timer in Pathfinder Core PRO will not actually cause any changes to take place in the system. To do that, you would need to create a Logic Flow as shown above with a start point that uses the Timer’s elapsed property to then change some other property in the system. For example, if you wanted to execute a scene change every Monday at a specific time, you would create a Logic Flow that uses the Day of Week Timer shown above.
In this way, we can use Timers to cause delays, do repetitive operations (using the autoreset property of Interval Timers), or execute actions at specific days/times and/or on a recurring daily schedule.
A Scene is nothing more than a list of property changes. A Scene does not have to be just a route change or even include a route change. You could create a Scene that sets memory slots to specific values or that includes memory slot changes, VMix changes, fader changes, and button state changes. Any property available in the system can be a part of a Scene.
To create a new Scene or view and edit an existing Scene, click the Scenes icon in the navigation bar to open the Scenes page:
Note: The IsActive state depends on the state of all entries in the Scene. For example, if an xNode involved in the Scene is powered off, the Scene change will not be completed and the IsActive state will not change to True.
Begin by clicking the Scenes link in the left navigation pane in the Pathfinder Core Control Center. On the Scenes page, click the plus icon to create a new Scene.
Type a Name for the new Scene. To add events to your Scene, click the plus icon.
On the Import Ios dialog, select the router from the Import From drop-down list to populate the Destinations list.
Select the destinations to import, using the SHIFT key to select multiple destinations. When all destinations have been selected, click Import.
Note: Items from different routers may also be a part of the same Scene by clicking the plus icon again. Select the additional router from the routers drop-down, select the additional IOs, then click Import to bring them into the Scene.
After the import is complete, the Requested Value column in the Scene Editor will reflect the source that will be taken if that Scene item is executed. By default, it will be set to the current source routed to the destination. This can be changed by highlighting an item and clicking the RequestedSource link. This will open a list of sources present on the selected router so you can select an alternate source as the value for the route point in that Scene item.
Clicking the Destination link will allow you to select a different destination for the Scene item if you selected the wrong one and need to change it.
Clicking the minus icon will delete the item from the Scene.
Once all items for this Scene are set, click Apply to save the changes and return to the Scene list, at which point the Scene will be available for use.
In addition to Route Points, any property in the system can be a Scene item. After clicking the Add button to add a new Scene item to a Scene, you will also find an Endpoints button to switch the route destination dialog to a property selection dialog.
This is the same dialog used to select an endpoint in logic flows. In the example below, we are adding a program buss assignment property on a Fusion console to the Scene.
The Ios button will return to the route selection dialog.
The Select button will select the property and import it as a Scene item into the Scene. The system will remember whether the last item imported during a given Scene editing session was a property or route point and return to the last used dialog. You can switch back and forth using the Endpoints and IOs buttons from the corresponding dialog.
After importing a property, it will have slightly different links in the Scene itself. In this case, you will see a RequestedValue link and a Property link.
Click the Property link to change the property you selected if you selected the wrong one.
By default, the value used for the Property item is set to whatever it is at the time the Scene item is created. This can be changed by clicking the RequestedValue link.
This will open a value selector. The value selector may be different depending on the type of property you are manipulating. For example, if the item is a color property, it might present a color selection dialog. If the property requires text, a text box may be presented. Or it could present a drop-down of possible values. In the case above, the program buss assignment could either be on or off, so select the option you want the Scene item to set. Note this does not change the current state of the console in the system unless the Scene is activated. At this point, you are only editing what would happen if you activated the Scene.
The Scene editor also has “move up” and “move down” buttons.
These are used to organize the order in which a Scene sends its messages to the equipment when activated.
The order of items in a Scene is generally irrelevant because the system does not wait for a change to complete before sending the next change message. Changes are usually sent as a block so the actual changes may not happen in the equipment in the same order in which they were sent.
If the execution order is important it is possible to add pause items into the Scene. This will cause the Scene to pause as it iterates through the items for a defined duration, measured in milliseconds. To add a pause, click the Scene editor plus icon. From the Import Ios dialog, click Pause.
Type the Pause duration in milliseconds and click OK to add the Pause item to the Scene.
Like all items in the Scene, you may select a Pause item and use the Up and Down arrows to manipulate the order of the Scene messages and configure when pauses occur in the Scene execution.
Once all items have been added to your Scene and have been ordered correctly, click Apply to save your changes.
Once a Scene has been created, the list of Scenes will show whether the Scene is active or not in the IsActive field.
If you expect a Scene to be active and it is not, you can see what items failed to change by editing the Scene.
The Requested Value column will show the expected value for each Scene item for it to be considered active, while the Current Value column will show the current value of the Scene item.
Note: To refresh the CurrentValue data, you must exit and re-enter the Scene editor.
There are several properties that may be used with Scenes in Logic Flows. When an End point is selected each Scene has an ActivateScene property that can be set to true to cause all Scene items to be executed.
As a Start point, two properties are available: IsActive and SceneState.
The IsActive property will either be true or false depending on whether all items in the Scene are currently at their requested value.
The SceneState property extends this slightly with three options: All, Some, or None. This will change depending on the Scene items’ value, whether all items have their RequestedValue, some do, or none do.
Scene changes may be activated using Logic Flows using the ActivateScene property. This property is write-only and is only available when editing End points. For example, we could create a Logic Flow that executes a Scene change every time a specific LCD button is pressed.
A very common use of Logic Flows in Pathfinder Core PRO is to perform critical actions when an audio source or destination falls silent. For example, you could have a Logic Flow send you an email if the feed to the transmitter becomes silent. In order to accomplish this, you should use the Audio Alarms section of Pathfinder Core PRO.
Almost any audio source or destination in an Axia network can be monitored for silence, clipping, and audio presence.
Click the Audio Alarms link in the Navigation Bar to create, edit, and view audio alarms in the system.
Like other Pathfinder Core PRO pages, the Audio Alarms page updates dynamically as the alarm states change. Nine columns are displayed for each audio alarm.
Let’s create an example.
Click the Audio Alarms link in the Navigation Bar to create, edit, and view audio alarms in the system. On the Audio Alarms page, click the plus icon to add an Audio Alarm.
Complete the fields on the Audio Alarm Editor.
After clicking on the ellipsis button to open the Select IO screen (either Select Source or Select Destination, depending on how this alarm is configured), select the source or destination from the IO list and click Select.
Click Apply to save your changes to this alarm.
The Audio Alarms list view, like most lists in Pathfinder Core PRO, show alarm status changes in real time.
For example, the Timer State and Alarm State values will dynamically update in this list as alarm states change. This can be an excellent troubleshooting tool.
Once an alarm has been created, it is available for use in Logic Flows. In the Logic Flow below, we have created a Logic Flow that sends an email whenever the SilenceAlarm audio alarm has its Alarm State switch to Silent:
If we wanted to perform a different action when the alarm releases (audio returns), we would use the AudioPresent value in the translation list. For example, the following Logic Flow will light a button when audio is present and cause it to flash when there is silence.
Important Note: The thresholds used for silence detection and clipping are fixed in the code and cannot be changed. The silence threshold is set for -80db. The clipping threshold is set for -1db.
More possible audio alarm Logic Flows examples are covered in the Email Messages section since that is a common action to be taken when things get quiet.
Button
Description
Restart System
If you click the Reboot button, the system will ask for confirmation to make sure the button was not accidentally clicked, and will then reboot the system.
Factory Default System
Clicking the Factory Default button will erase all existing configuration data and return the system to the way it was shipped from the factory. Multiple confirmations are required as there is no undo option for this action. It is highly recommended that you make a backup of your system and download it to your local computer before using this option. See the section of this manual on Backup and Restore for details. Select the Erase License File checkbox if you also want to erase the licensing. It is important to note that erasing the license file will also erase the base license, and a call to Axia support will be necessary to re-license the system. Licenses are not included in the backup file.
Hostname
Displays the current hostname of the Pathfinder Core PRO. Click Edit to assign a new hostname to the system. Hostname changes require a restart to take effect.
Advanced Options
This section is for use in consultation with Axia support only as it provides methods for changing certain system variable and functionality.
Logout
Logs the current user out of the system and requests new login credentials.
License Type
Points
Notes
1
Pathfinder Core PRO VM
1000
The equivalent functionality to the hardware license
2
Pathfinder Core PRO VML
300
A lower license count and a correspondingly lower cost of entry
3
Pathfinder Core PRO VM Backup
0
Ideal for situations when adding a VM-based cluster node to a Pathfinder Core PRO cluster. This license will only work if clustered with another hardware or VM instance of Pathfinder Core PRO. In the case of a failure of the primary licensed Pathfinder Core PRO, the backup will continue to function as if it was the primary for up to 90 days while you repair the primary instance. If this 90-day limitation is not acceptable, normal full licenses may cluster as well without that restriction.
Field
Notes
Mail Server
Type the name of your mail server.
Port
Type the port number required by your mail server. Ports 25 and 587 are commonly used by SMTP mail servers. Check with your administrator or your hosting service provider to determine the correct Port setting.
Send User Name
Type the user name associated with your account on your mail server. See note below.
Send Password
Type the password associated with your account on your mail server. See Important Note below.
Send From Address
Type the email address that will be included in the outgoing message’s Send From field.
Ignore Certificate Errors
If you are using SSL encryption and the SSL/TLS certificate chain provided by the host is not in Pathfinder Core PRO’s trusted list, the message will not be sent and an error will be generated. Checking this option allows the system to use SSL encryption but ignore the SSL certificate error.
Use SSL/TSL
Check this option to use SSL encryption.
Critical Event Email Address
Type the email address of the administrator who should receive all emails generated by critical events such as a system restart or a service failure.
Column | Description |
Availability | This column indicates whether the source or destination is currently available for use. Options include:
|
Name | The Name of the source or destination. |
Livewire Channel (Axia Audio Sources Only) | The Livewire channel number assigned to the source. |
Description (Destinations) | The description of the destination. |
Column | Description |
IP Address | The IP Address of the source or destination host device. |
Name | The name of the source or destination host device. |
Port | The physical (or virtual) port number that identifies the source or destination on the device. |
Column | Description |
Name | The name of the source routed to this destination. |
Description | The description of the source routed to this destination. |
IO (Virtual Router Only) | The IO number of the source in the virtual router. |
Livewire Channel (Axia Audio Router Only) | The Livewire channel number of the source routed to this destination. |
HostName | The name of the device where the source resides. |
Column | Description |
Name | The name of the destination. |
Description | The description of the destination. |
IO (Virtual Router Only) | The IO number of the destination in the virtual router. |
HostName | The name of the device where the destination resides. |
Lock | The lock state of the destination. |
Field | Description |
Router Type | Select Imagine Lrc. |
Router Id | Id number of the router. Leave a value of 0 for an auto-generated Id. |
Router Name | Type a descriptive name for this Router. |
Router Description | Optionally, type a description for this Router. |
Select Lrc Device | From the drop-down list, select the specific device. |
Select Lrc Level | Select the LRC level in the router to control as described below. |
Column | Description |
Name | The name of the alarm. |
Type | The type of clearing alarm. Types can either be Silence or Clipping. If you wish to know when audio returns, use a silence alarm and then select the correct value for the Alarm state in Logic Flows. This will be discussed in greater detail below. |
Host | This displays the IP address of the device where the source or destination being monitored exists. |
SRC/DST | Displays whether the IO being monitored is a source or destination. |
IO | Displays the port number on the device of the input or output being monitored. |
Alarm Time | Displays the amount of time in milliseconds the selected source or destination must be silent (or clipping if the type is clipping) before the alarm is triggered. |
Release Time | Displays the amount of time in milliseconds that the selected source or destination must be not silent (or not clipping if the type is clipping) before the alarm is released. |
Timer State | This column shows the current countdown to Alarm Time or Release Time. For example, when a source being monitored goes silent, this column will show CountingToAlarm. Idle means that the source or destination is currently in the state represented by the AlarmState column. |
Alarm State | This column represents the current state of the alarm. Possible values include Silent, AudioPresent, and Clipping. This value will only change after the source or destination maintains the requested state for at least the amount of time defined in the Alarm Time or Release Time properties. |
Field | Notes |
Audio Alarm Name | Type a name for this Alarm. In the example above, AirChain. |
Alarm Type | Select the alarm type from the drop-down list. Options include Silence and Clipping. |
Alarm Time (ms) | Alarm time is the number of milliseconds the audio must be in the specified state before the alarm becomes active. The example above defines an alarm time of 15000ms or 1.5-seconds. |
Alarm Release Time | Alarm release time is the amount of time the audio needs to be in the opposing state after an alarm has tripped before the alarm clears. The example above defines an alarm release time of 5000ms, or .5-seconds. |
Alarm Channels | From the drop-down list, specify the channel the system should monitor to determine the alarm state. Options include Any, All, Left, or Right. |
Source/Destination | Select whether the alarm will be on a Source or Destination. |
IO | Click the ellipsis button to choose from the list of available sources or destinations. |
Lock State | Icon |
Locked |
Unlocked |
System Locked |
Ref | Description | Notes |
1 | Search bar | Search sources or destinations by typing in either the S or D field to reduce the number of columns and rows shown. Your search can be filtered even further by specifying a device using the dropdowns. The device dropdowns are not present on virtual routers and only exist on the audio and GPIO routers. |
2 | Sources | Source Names are displayed in the columns at the top of the table. Hovering over any column header will highlight the source with a yellow bar and show the source’s full description. Double-clicking a source column header repeatedly will cause the grid to jump to each destination the source is routed to and highlight it with the yellow hover bars. If the source is not routed to any destination, nothing will be highlighted. |
3 | Destinations | Destination Names are displayed to the left of each row. Hovering over any row header will highlight the destination with a yellow bar and show the destination’s full description. Double-clicking on a destination row header will cause the grid to jump to the source that is currently routed to that destination. If no source is routed to the destination, nothing will be highlighted. Greyed-out destination names indicate the destination is locked either at the user level or system level and cannot be changed. Double-clicking on a locked row header will still navigate to the locked cross-point if a route exists. |
4 | Scroll Bars | Scroll bars will appear if there are more destinations or sources than can be displayed. The scroll bars may be manipulated by dragging anywhere within the bar or by clicking and/or holding the arrows at either end of the scroll bar. The scroll bars are slightly wider than some normal windows scroll bars because the grid is optimized for touch panel use. |
5 | Action Buttons | To take, clear, or lock a route, click the desired cross-point to preset it and then click the corresponding button in the top left corner of the grid. There are three action button sets: |
6 | Routing Grid | Clicking a cross-point will preset it and enable the action buttons. Each cross-point will have one of several colors indicating the cross-point state: |
7 | Preset Rotate | When a preset is selected, this button will show the count of selected presets. Clicking the button will cause the hover bars to highlight the selection and move the scroll bars to the correct preset cross-point. If the matrix has been configured in multiple preset mode, this button will loop through the currently selected presets. The button will be grayed out and unavailable for use when no selection (presets) have been made. |
Reference | Column/Button | Notes |
1 | Name | The name of the Timer. |
2 | Type | The type of Timer. |
3 | Interval | In the case of Interval Timers, this column will display the time in milliseconds. In the case of Day of week Timers, the column will display the days per week that are selected. This column is not used for Date/Time Timers. |
4 | LastRaise | This column displays the date and time when the Timer last elapsed. If the Timer has never elapsed, it will display a default minimum date time value. |
5 | NextRaise | This column displays the date and time when the Timer is next scheduled to elapse. If the Timer has never been enabled, this column may also show a default minimum date time value. |
6 | Elapsed | The elapsed column will turn true if a Timer has elapsed. It is important to note that if a Timer is set to Autoreset, this value will immediately turn false again. |
7 | Enabled | This column displays whether the Timer is currently enabled. A Timer which is not enabled will never elapse. |
8 | Autoreset | A value of true indicates an Interval Timers set to auto reset. When the Timer elapses, it will automatically update its next raise time and start counting down again. |
9 | Edit | Clicking the Edit link allows you to edit and change the parameters of a Timer. |
10 | Delete | Clicking the minus icon allows you to delete a Timer from the system. |
11 | Add | Clicking the add icon allows the user to create a new Timer. |
Reference | Notes |
1 | The SceneName column lists the name of the Scene. Scene names may be preceded by a number and an underscore in some cases, indicating Scenes created by PathfinderPC_Core Client related to a specific router number. |
2 | The IsActive column displays either True or False depending on the state of all entries in the Scene. This column updates dynamically with each Scene’s current state. This property is also available to Logic Flows so a Flow can perform actions depending on the IsActive state. See note below. |
3 | The Activate button executes all changes within a Scene. |
4 | The Clone link creates a copy of the Scene. This is useful if you need to create multiple Scenes with the same items but different values for each item. |
5 | The Edit link will open the Scene Editor and display the data for an existing Scene. |
Logic Flows can be used to send e-mails when conditions exist in your system that require attention. For example, it is common to send e-mails to the station’s engineers when silence is detected at a transmitter site.
To send e-mails, you must first configure the e‑mail host settings under the System navigation section. If you have not configured these settings, please review the Email Settings section of the System chapter.
Once the e-mail host has been configured and test e-mails can be sent successfully, click the Email Messages link in the Navigation bar. This is where you can create e-mail messages that can be sent when specific actions take place in the system.
Click the plus icon to create a new email message
Complete the fields on the Email Message Editor
When all fields are complete, click Apply to save your changes
Once created, e-mail messages become available for use in Logic Flows. In the following example, we will send the AudioFailure email message whenever MyAlarm’s AlarmState becomes Silent. We accomplish this by setting the write-only property Send to the value True.
You can also change the body of the e-mail message as a Logic Flow end point. This becomes especially useful if you have several conditions that could cause an e-mail alert. For example, we could create a generic e-mail message making sure that the AutoSend on body change checkbox is engaged. Then we could create multiple Logic Flows, each of which alters the body of the message depending on the start point. For example:
Here we use two Logic Flows to send four different messages to the same e-mail recipients.
First Flow
If “AlarmA” is Silent -> Set the body of the “AudioFailure” message to be “My Alarm is Silent.”
If “AlarmA” has audio -> Set the body of the “AudioFailure” message to be “My Alarm is fine.”
Second Flow
If “AlarmB” is Silent -> Set the body of the “AudioFailure” message to be “AirChain Silent.”
If “AlarmB” has audio -> Set the body of the “AudioFailure” message to be “AirChain OK.”
Since we engaged the option to send the e-mail each time the body property of the e-mail changes, this is all that we need to do to handle four alarm conditions using one defined e-mail message.
Pathfinder Core PRO’s event system is called Logic Flows, and it enables information visualization so that you can see how things work within your system.
Click the Logic Flows link in the navigation bar to open the Logic Flows user interface.
Each Logic Flow can be thought of as an event. More specifically, a Logic Flow is a set of property translations. During an event, we convert an input property value to an output property value.
There are four components that may be used to design a Logic Flow:
Using these tools, you can visually build Logic Flows to accomplish just about any task you want.
When you first look at the Logic Flows screen you will see an organizational panel on the right called Views. Think of Views as folders in your computer’s file system - organizational containers into which you can place Flows, allowing you to keep all Flows related to a certain subject in the same place.
Important Note: Clicking the Views tab allows the panel to slide in and out.
To create a new View:
Check an existing View (this will become the parent View).
Click the Add (plus) button in the Views panel.
Type a Name for the new View and click OK.
Like your computer folder structure, you can nest Views as deep as you like. While you can add Flows to the master LogicFlows View (your “Root” folder), this is not recommended as LogicFlows is the one View that you cannot completely delete. Instead, devise a View naming strategy and create additional Views underneath LogicFlows to store your Flows.
Important Note: Each View is limited to 100 Flows.
There are two special Views called HardwareMaps and _panels. These Views are created by the system and used to manage the mapping of software buttons to hardware controls and bindings in HTML5 user panels. This is described in the chapter on HTML5 panels, but it is important to understand that these Views are managed by the system and should not be deleted.
With a View selected:
Important Note: You cannot select multiple Views for copy and paste operations, though if you select a View with child Views, those child Views are included in the copy operation. All pasted Logic Flows will be in a disabled state whether the operation started as a cut or a copy.
It is assumed that after completing a copy and paste you will want to modify the Start and End Points of the Flow to reproduce behavior using different End Points.
View, copy, and paste operations are completed by the Pathfinder Core PRO appliance rather than by the browser and so they do not require an Apply.
Under the hood, the browser sets a write-only CopyTo property on the copied View folder object via a SapV2 Set message. The value used in the set message is the path to which the View should be copied. The Pathfinder Core PRO Logic Flow engine then handles the data cloning.
To delete a View:
Select the View
Click the X button in the Views panel
The system will ask for confirmation; all Logic Flows and descendent Views of the View selected for deletion will be deleted as well
From left to right, the Toolbar controls are:
Toolbar controls will be enabled or disabled depending on whether the control is currently valid. For example, the Cut icon will not be enabled if you do not have a Flow selected that can be cut.
Understanding how these tools are used will be easier if we walk through creating a Flow.
Click the Logic Flows checkbox then click the Plus icon in the Views panel
Type a name for the new View and click OK
You can select "multiple Views" to view the Flows from multiple Views together on the same screen; in order to create new Flows, you must select a single View since the system has to know into which View to place the new Flow; click the newly created View’s checkbox to select the new View; click the root Logic Flows View to uncheck its checkbox so only your new View is selected
Once a single View is selected, the Add button (plus) in the main control panel for Logic Flows will switch from its disabled grey state to green; click the Add button to create a new Flow consisting of a Start Point, a Translator, and an End Point
Important Note: This Flow is in black and gray indicating that these are pending changes that have not been submitted to the system yet. So far, they only live in your local browser.
All Flows must have at least one Start Point, one Translator, and one End Point, which is the simplest Flow you can creat. However, we have not yet set parameters to define what this Flow will do. You can define the options for each block in this Flow by double-clicking on the block, though double-clicking on the Translator itself will not do anything until the Start Point and End Point are defined. The reason for this will be explained shortly.
Double-click on the Start Point block; its background will turn orange on the first click to indicate that it is selected.
The second click opens the property selector dialog. This dialog is used to select a property in the system that the new Flow will monitor for changes.
Use the arrows to expand and navigate into the objects in the system until you find the object and property you want to select. Properties will have a green dot next to them as opposed to the expansion arrow.
You can either click the property you want to monitor and then click Select, or just double-click the property to select it.
In this example, we are selecting the PinState property of GPI#1, Pin#1 on the Fusion device at 192.168.2.62. Notice that as you select properties in this dialog, a description of the property will usually appear underneath the tree window providing more detail about the property’s purpose.
Important Note: The property selector dialog has a simple list and an API list. The API list is only recommended for advanced users and so will not be discussed until later in the documentation.
Important Note: Hovering over the Start Point that has been assigned a property will cause a pop-up hover box to appear with more detailed information about the selected property.
Double-click on the End Point block and repeat the procedure to select the End Point or property we want this Flow to change; in this example, we are going to pick an LCD button, but you could also pick a GPO in order to make the GPO state follow the GPI state
At this point, the Flow looks something like:
Important Note: The list of available properties differs depending on whether you are editing a Start Point or an End Point. This is because the system is intelligent enough to know if a property is read only, read write, or write only. Properties that are read only may not be used as an End Point (something you want to change). The system will only display properties that make sense for the type of block you are editing.
With configured Start and End Points, you can edit the translation table by double-clicking the ListTranslator block
The dialog that opens allows you to enter a list of translations you want to execute as part of this Logic Flow. The other buttons on the translation list screen can be used to move translation definitions up and down in the list, insert new ones, and remove them.
Select the top translation point (*=*) to enable the drop-down boxes below; the left drop-down has Low and High as options, and the right drop-down has a list of indicator states; for this example, select Low in the left drop-down and On in the right drop-down
Click Add to add another translation to the list
For this example, select High in the left drop-down and Off in the right drop-down
You cannot edit the translation block until the Start and End Point properties are configured because the system will filter the list of possible options depending on the property selected. For example, in this case, Low and High were available options on the left, and indicator states were available on the right. If the Start Point had been the CurrentSource property of a destination, the right drop-down would present a list of available router sources.
Your Flow should now look something like this:
What we have just defined is that if the Start Point (GPI) is Low, then we are going to set the LCD Button indicator on the button to On. If the GPI is High, then we are going to set the LCD button indicator to Off. We are essentially defining a list of rules as to what the End Point value should be depending on the Start Point property value.
When creating translation items, the asterisk serves as a special wildcard that will be evaluated as “any” value. For example, we could have made the second entry in this translation list *=OFF.
Since the list is analyzed in order, this would mean that if the GPI is Low, then the indicator should be turned On. If the GPI is anything else other than Low, then the indicator should be turned OFF. In this case, using * or explicitly defining the High are equivalent because the GPI only has two possible states.
Where the * comes in useful is in situations where there are multiple options on the Start Point side. For example, if the Start Point was the current source routed to a destination, we could build the translation such that if a specific source is selected the indicator would be On, and then use the * to say if there is any other source routed, turn it Off.
Order is important. If you were to move *=Off to the top of the list, the indicator would always be Off because the first item in the list says if anything, then Off, and the system would never analyze any of the other items in the list.
Generally, a * should almost always appear at the end of a list of translations as a catchall. If there is a * on the right-hand side of the translation it means to pass the value from the left on unchanged. So *=* would pass anything from the Start Point to the End Point (or next step in the Flow) unchanged.
For those of you familiar with programming languages, this list works very much like a select case or switch statement. When the Start Point property changes, the value is analyzed in order through this list until a match is found and then the correct value is applied to the End Point or next step in the Flow. If no match is found, the End Point is not changed.
Once you are finished, click Done. The Flow will now look something like this:
This Flow is not active yet, and the black and gray states are showing us that this Flow has not been committed to Pathfinder Core PRO; in the top toolbar, the flashing Apply button indicates changes are pending; click Apply to commit the changes to Pathfinder Core PRO
The Flow will now change colors to indicate that it is a live and active Flow:
The Flow diagram does not simply show the design of the Logic Flows in your system. It also shows the live up-to-the-second state of each of the Flows. Using the Flow example created above, if we trip the source GPI to Low, we will see the diagram change to:
And if we switch it to High, it will change to:
Within the top of the translation box, we see the currently active translation state in text and a color change depending on that state. These dynamic changes indicating the state of the Flow makes for much easier monitoring and troubleshooting.
Note: These colors come from a file that may be edited in an advanced web page if necessary.
Translation points are one-to-one only. In other words, we are translating one value from a property to another value on another property. Combiners, on the other hand, allow us to pass values to multiple End Points and make logical decisions based on more than one Start Point.
To add a Combiner, click a Translator in an existing Flow to enable the Combiner tool in the toolbar; click the tool to insert a Combiner into the Flow
Using the Flow we created in the example above, it will look like this:
Combiners can perform many useful functions, but each Combiner type both require a minimum number of inputs and are limited to a maximum number of inputs.
As you attempt to change Combiner types, you will only see options that meet these restrictions. For example, with the single input in our sample Logic Flow, we are restricted to NOT, PASSTHRU, and DELAY Combiner types:
We can access the other Combiner types by adding the requisite number of inputs by clicking on the Combiner to select it; notice that both the Start Point and End Point tools then become available
Click on the Start Point tool to add a second input to our Flow
By adding a second input, you will notice the Combiner switches to AND.
With two inputs, we can perform other Combiner operations, including: AND, OR, NAND, NOR, XOR, XNOR, EQUALITY, and RELAY.
In this case, since the default AND Combiner is a logic gate, the translation types entering and exiting the Combiner are automatically switched to True/False. By assigning a second GPI pin to the second Start Point…
…we can change this event so that two buttons must be held simultaneously for the End Point change to happen. This Flow will light the indicator light on the button only if both GPI 1 and 2 are Low.
As it is, this Flow is not very useful, but if we were to change the End Point to be a route destination, it becomes more interesting; to do so, double-click on the End Point and instead of a GPIO, expand the Routers section and select the CurrentSourcePath property of one of the router destinations
Your Flow should now look something like this:
Edit the translation which is after the Combiner and change the translation so that True= one of the sources in the right-hand drop-down of the translation dialog; remove the False translation as we do not want to do anything if the buttons are released, and you end up with:
This essentially means a user must hold two GPIO buttons down simultaneously and then source SRC 4 will be routed to destination DST 2. This is a common scenario where we don’t want an accidentally bumped button to change the air chain routing.
Logical Combiners include AND, OR, NAND, NOR, XOR, XNOR, and NOT. All of these except NOT accept multiple inputs which must be translated to True or False on the input side. NOT only accepts a single input. In each case, the translation that feeds the input of these Combiners should be converted to a True or False like we did in the example above.
The output of the Translator then becomes either True or False based on the truth table associated with the logical type selected.
The PASSTHRU Combiner allows only one input but can pass the value from the Start Point translation to as many output Translators as you like, allowing you to change multiple output properties based on a single input property.
The RELAY Combiner allows you to define one Start Point property that will translate to a True or False. If it evaluates to True, the value from the second Start Point is passed through the Combiner to any translations on the output of the Combiner.
The diagram within the combination displays which Start Point translation is acting as the trigger and which is acting as the PASSTHRU:
This will achieve the same functionality as our previous example but in a different way. GPI 1 must be Low in order for changes taking place on GPI 2 to pass thru. If it is Low then changes from GPI 2 will be passed to the output translation which converts the Low to a route change.
The EQUALITY Combiner takes multiple inputs and will result in an output value of True or False depending on whether all input values match.
The EQUALITY Combiner also has a Case Insensitive checkbox which defines whether comparisons are done in a case sensitive or insensitive way:
This Combiner can be used in situations where the primary concern is whether the property states are equivalent or not.
The DELAY Combiner takes a single input and introduces delay directly into the Logic Flow. It works like a PASSTHRU Combiner in that it takes the input value and passes it through to the output but only after a configured number of milliseconds. There are also some additional parameters that can affect how this Combiner functions:
DELAY Combiners can be used in many situations where you need to introduce some delay into a Logic Flow. Previously this required using an interval timer. Therefore, there will be many situations where an interval timer is no longer necessary to accomplish the task as the delay can be built directly into the Flow. This also reduces licensing requirements as the DELAY Combiner does not require an intermediary timer End Point.
Interval timers are still useful in situations where a single delay needs to be stopped, started, reset, or manipulated by different Flows.
In this example, the EQUALITY Combiner outputs True or False depending on whether two silence alarms are in the same state. This can be useful if two audio channels should have the same audio. Silence is expected in certain situations, but we are trying to make sure that if audio is present on one, it is present on both and if it is silent on one then it is silent on both. True or False is translated into a message of AudioMatches or AudioDiffers. A delay is introduced to expunge short variations of alarm states and only pass on definitive states. This is one example of how the DELAY and EQUALITY Combiners might be used.
In many cases you may want the DELAY to pass a value through after the delay but then reset the output for the next change. For example, if we want a Flow that requires a user to hold a button down for a length of time before making a change, the Flow might look something like:
Our goal with this Flow is the following:
If the button is pressed, start a 5 second timer
If the button is released cancel the timer
If the button is held for 5 seconds make the route change
The DELAY Combiner has an input value and an output value. Changes only get passed to the output Translator when the Combiner’s output value changes. And the delay is only analyzed for countdown when the Combiner’s input value changes. For this example, we would set the DELAY Combiner parameters as follows:
The timer starts counting
If the user releases the button before the timer elapses, the input value of the Combiner gets set to False. Since this matches the cancel value, the delay timer stops counting
A route change is made
Since the Clear Value and Clear Output after countdown completes options are set, the output value of the Combiner is then set to False again so it is ready for the next button press
When the user releases the button, the Combiner input is set to False but since that is the Cancel field no change to the Combiner output is made
Without the Clear Value and Clear Output after countdown completes options, the output of the Combiner would remain True and so the next press would not change the output and therefore would not trigger another route.
If we cleared the Cancel value and did not use the Clear options, releasing the button would pass False to the output but 5 seconds after the button was released. It is important to note that a Cancel value if set will cancel the countdown, but the Cancel value does not get passed through.
These parameters will allow you to produce differing effects using the DELAY Combiner depending on the required goal.
By adding Combiners and Translators you can make any individual Flow as deep as you need it to be.
This example is not created to do anything specific; it is just shown to illustrate that you can theoretically continue to add Translators and Combiners as needed to get the logical job done. Translators and Combiners must alternate. You cannot have a Combiner next to a Combiner or a Translator next to a Translator, but the user interface helps with that by only enabling the controls you can use depending on which logic block you currently have selected.
Another relevant example is EAS. This is a pretty common EAS Flow that we see customers make:
Important Note: if you are going to use a Flow like this, it is critically important that you also turn on the Skip startup state request and wait for next change option. See the Advanced Options section on this option.
Without enabling this option, a restart of the system will request the current GPI state which is High and will therefore toggle the Previous route. In many cases this will route “nothing” to the air chain because no previous state exists yet.
However, even with that option enabled this Flow may produce unforeseen results. For example, what happens if the GPI goes Low and someone manually changes the route before it goes High again? At that point EAS is now the previous source when it does go High. This can be solved by using a slightly more complex Flow and Previous:
In this example, a route to Previous will only happen if the GPI is High and we are currently on the EAS source. This will function in a much more reliable manner.
While these examples have been EAS related the same rules apply to other uses of previous. More importantly, if you can avoid the use of Previous and design the Flows to be more specific, the outcome will also be more reliably specific.
If you select the End Point of a Flow, you will notice that the right Translator control in the control panel is available and not disabled. This is what is referred to as "extending a Flow". You can create a second Flow whose Start Point is the same as the End Point of the previous Flow.
If we go back to this example Flow:
Click on the End Point and then click the End Point control in the tool bar.
Our Flow now looks something like this:
In this case, the second Flow is joined to the first Flow because the Start and End properties are the same. Likewise, if we had added a second Flow using the + button and then set the Start Point to the DST 2 destination’s CurrentSourcePath, after we applied the change, the system would detect that the Flows should be joined and join them.
In this example we could now set the indicator of a button at the End Point of the second Flow:
What we have designed is a Flow where if you hold GPI buttons 1 and 2 down, PC4 source will be routed to PC4 destination. And if PC 4 source is routed to PC4 destination then LCD button 1’s indicator will be turned on. If anything else is routed to that destination then the Indicator will be off.
The system is intelligent enough to recognize when Flows should be joined into a single logical entity.
Cut, Copy, and Paste are standard tools and require little explanation. You can select a Flow by clicking in the area surrounding a Flow at which point the cut and copy icons become available. "Cut" will remove the Flow from the View and place it on the clipboard while "copy" will just make a copy of it on the clipboard. Once a Flow exists on the clipboard it can be pasted back into the current View or any other View.
The system does make some assumptions regarding pasting. If you copy a Flow and paste it back into the same View, the system assumes you are trying to duplicate the functionality with a new set of End Points. It will clear the outer Start and End Points of the pasted Flow so you can select new ones.
It is important to reiterate that none of the changes involved in a cut/copy/paste operation ever become a reality on the system until you click the Apply button, and that clicking the Cancel button will return to the last known applied state.
Each Flow can be assigned a title. If you double-click in the whitespace surrounding a Flow, the system will ask you for a title for the Flow. Click Apply to apply the title. Flows that have titles will display the titling text underneath the Flow.
Titling is a very important habit to form as it makes it much easier to glance at a Logic Flow View and understand the states of the Flows and which Flows are performing which functions. Additionally, it is useful as an organizational tool as Flows with titles will be displayed alphabetically within the View. Otherwise the Flow order within the View is somewhat arbitrary.
Translators, Combiners, and entire Flows may be enabled or disabled. Select the Translator, Combiner, or entire Flow (by clicking in the whitespace within the Flow), and then use the disable/enable button on the control panel.
This change is the only one that takes place immediately within Pathfinder Core PRO Logic Flows without the need to click Apply. The object will become greyed out and that particular object will no longer function, stopping the Logic Flow at that point. For example:
If you trigger the GPIs, their states will change within the attached Translators, but the End Point in the first half of the Flow will not change because the Combiner is disabled. This is a useful tool if you are testing logic up to a point but do not want the End Point (which might be an air chain change) to change. It is also useful if you want to temporarily disable a Flow during testing or troubleshooting.
If your system is clustered and you are Viewing Logic Flows on the secondary system, you may see a lighter gray form of disabling:
Also with clustering the upper right corner will show an Event System state:
In this case you are being shown that the final output will not actually execute on this server because the other server is currently in control of the event system. On that server, you will see:
And in the right corner:
Important Note: The event system is never actually turned off in Pathfinder Core PRO. When a Logic Flow needs to make a change to an End Point, it first checks to see if it has the lowest IP address of the currently active and online servers in the cluster. If so then it executes the action. If not, then it does not.
The Event System True or False will be hidden on systems that are not in a cluster because in that case the Logic Flow End Points will not be disabled by the clustering system.
You may notice when editing the Start or End Point of a Flow that if you select an object in the property selection tree (arrow icon) instead of a property (green dot icon), you will get a warning message that looks like:
Object translations are a slightly more advanced subject and should be used with caution (hence the warning), but they can also be extremely powerful. Object translations will most likely be used in situations where you want to mirror several different property states across a couple of objects. We could create a Translator Logic Flow where the Start Point is a VMIX sub mixer on Engine 1 and the End Point is a different VMIX sub mixer on a different engine:
This Translator looks slightly different in that the Start and End Points only have two pieces of information rather than the usual three.
If we do not alter the translation pattern from the default *=*, every change to every property of every sub-object under the sub mixer 1 will get mirrored to the equivalent object and property under sub mixer 2. For example, if sub mixer 1, channel 1 gets turned On, then sub mixer 2, channel 1 would also be turned On. If sub mixer 1, channel 3 has its TimeDown property changed, then sub mixer 2, channel 3 will also get its TimeDown property changed. This allows us to mirror an object’s settings.
When you edit the translation list and select an object translation, there are additional drop‑downs that allow us to specify the object’s properties as well as its values. For example, we could change the translation pattern from *=* to:
In this case, we are specifying that we only want this translation to operate on State properties. If sub mixer 1, channel 4’s State property gets turned on, so would sub mixer 2, channel 4’s state property. Other properties would not be affected.
Or, we could apply values such as:
This allows us to invert the states on the second sub mixer. Now when sub mixer 1, channel 5’s State property gets turned on, sub mixer 2 channel 5’s State property gets turned off and vice versa.
Another useful way to use Object Translators is when you want to set multiple properties on an object. For example:
In this case the Start Point is a normal property but the End Point is an object selection. If we click on the translation properties we can make the configuration look like this:
In this case, we are setting two different properties on the button each time the GPIO pin state changes High or Low. This can simplify the Flows and greatly reduce the licensing counts used when there are many button states that need to be set.
Object translation is extremely powerful in situations where you want to match multiple properties across two similar objects or multiple properties on a single object.
It is common to need a button to latch, where each press of the button will toggle something back and forth. Using the kind of logic shown above to accomplish this can get complicated because the state becomes a condition which is also an action. For example, many novice Pathfinder Core PRO users may try to create a Flow that looks like this:
Warning: Do not use this Flow. This is an example of what NOT to do!
The goal of this Flow is that each time a GPI goes Low, the user wants to toggle the on state of the fader back and forth between on and off.
The user has tried to create a Flow where if the GPI is Low and the button is on, it turns off, and if the GPI is Low and the button is off, then it turns on. The problem is that this creates a loop that lasts as long as the GPI is Low.
Setting the GPI to Low changes the state of the console channel which in turn causes the second half of the Flow to change it again and so on until the GPI is returned to High. This leads to interesting and convoluted loops resulting from trying to solve what on the surface appears to be a simple problem. To avoid this scenario, we have crafted two much simpler approaches to latching in Pathfinder Core PRO.
Many of the properties that have two states (On/Off, Low/High, etc.) also have a value that you can set called Swap. For example:
In this case, each time the button is pressed, the button state will be swapped (On to Off or Off to On).
If a Swap value is available, it is always preferable to other options.
To achieve similar behaviors for properties that do not have the Swap value, you can use the Latching Memory Slot. While basic memory slots can be created using the Logic Flows property tree as a shortcut, there are additional types that can only be created from the memory slots page as outlined in the Memory Slots chapter.
To create latching functionality, go to the memory slots link in the Navigation Bar and add a new memory slot using the plus icon. In the resulting dialog, switch the memory slot type to “Latching Memory Slot”. Provide a name for the slot and click Apply to create the slot.
The Latching memory slot can only have a value of True or False. For example, in Logic Flows we could now add a Flow such that whenever a button is pressed on the console, the Translator sets the trigger property to True:
It also has a property called "Trigger" which is write-only and cannot be read. Whenever you apply a True value to it, it automatically switches the SlotValue property of the memory slot from True or False to the opposite state. This simple Logic Flow will cause the latching memory slot to switch its value back and forth every time button 10 is pressed.
Next, we can create a second Logic Flow that defines what we want to happen depending on whether the Latching memory slot is True or False. For example:
Now the button will cause the latching memory slot to switch back and forth between True and False. If the slot’s value is True source sa_server_05, it will be routed to Destination sa_server_04. If the slot value is False, then whatever the previous source contains will be routed back to Destination sa_server_04.
It is important to reiterate that Swap is preferable where it is available. For example:
In this case, the Trigger property causes the latching memory slot to Swap between True and False each time the GPI goes Low, and then that True or False is translated to the on/off state of the fader. Engaging the GPIO repeatedly will cause the fader to turn on and off. The problem with this Flow is that the fader can also be turned on and off with the actual console button which causes the latching memory slot to get out of sync with the fader state. This could be solved with a third Flow if we allowed you to force the state of the memory slot each time the fader state changed, but this requires numerous Flows and the creation of a memory slot for every instance of this functionality. This approach feels too complicated to accomplish what should be a simple task.
The Swap value makes this much simpler and is all that is needed to solve this problem:
Each time the GPI goes Low, a value of Swap is sent to the fader. The device manager picks up this request, checks to see whether the fader is currently on or off, and sends the opposite state as a command to the equipment. The problem with the earlier Flows is that the Flow logic had to encapsulate all viable options of the existing state and specifically request what state to move to accordingly. The Swap property removes that complexity from the Flow logic and allows the system to handle it for you.
It is important to note that the Swap value is an action and so will only appear in the translation options for an End Point. It has no meaning for a Start Point because placed there, there it is not an actual state accordingly will not appear in the options on a Start Point. The user interface will present the option only where it is available. For example:
Important Note: Axia LCD buttons and user button indicators represent a special case in that they have more than two options including On, Off, Flash, Wink, and a variety of other flashing states. However, we chose to add a Swap value to this property because On and Off are the states that are most often used. If a button indicator is Off and the Swap value is sent, it will turn the indicator on. If it is in any other state when the Swap value is sent, the indicator will be turned off.
Detected devices identified as Infinity products have a SendToRestAPI property which can be used by Logic Flows to address the Infinity Rest API. The format of the commands addressed to this property should be as follows:
For example:
Note that Gets have not yet been implemented as we do not want to encourage polling logic. It is also important to know whether or not the value being sent needs to be wrapped in quotes.
Contact Telos support for details on properties that may be manipulated using the Infinity Rest API.
Dialing and status items are exposed in the Logic Flows simple tree under the Z/Ip One branch.
When viewing a Start Point there are several options:
It is important to understand the difference between Call#0 > State and ConnectionState. Call#0 > State lists all possible connection statuses including multiple options for Idle and options for how the connection was established. ConnectionState offers only Idle, Connecting, and Connected options making it suitable for situations where logic needs to be fired based on the connection being active or disconnected.
The ConnectedTo property will contain the phone book entry matching the one selected in the Call Connect property allowing you to display the current call connection phonebook entry name.
Important Note: In addition to these properties, the API tree contains a much larger set of properties matching those from the Z/Ip One Lwcp API. Consult the Z/Ip One documentation for details on these other properties.
When selecting an End Point in the Simple tree, the Z/Ip One branch includes several properties for any Z/Ip One in the system:
Connect and Drop can be used to establish and drop connections. After selecting the Connect property as a Logic Flow End Point, the translation list will display the list of entries in the Z/Ip One phone book. Currently, only phone book entries may be used for dialing:
Important Note: In general, the Codec settings will not be used as an End Point since those settings are normally stored within the call phone book entries.
There is also a special phonebook entry that only lives in Pathfinder Core PRO called None which, when dialed, will behave the same as the Drop item.
For example:
This Flow will dial the Z/Ip One every time Fader 1 is turned on and drop the call every time it is turned off.
The iPort branch in the simple tree exposes the Encoder and Decoder Enable and Disable options. We have limited those options to the simple tree as most other properties related to the iPort MPEG side of the configuration are considered advanced and are not normally dynamically adjusted.
Most of the other settings found on the Configuration pages of the iPort are available via the API.
When editing a Start Point or End Point, the property selection dialog has two modes: Simple and API.
The simple tree is what most users should use. It is designed to present the most commonly used objects and properties organized for quick access. Occasionally there may be a job that requires reaching beyond the normal options, and selecting the API tree will present a much wider array of objects and properties.
Pathfinder Core PRO has an advanced protocol called SapV2 which extends beyond most typical protocols and reaches the level of an API (application programming interface). It allows virtually complete control over the system. This API is the protocol used for all internal messaging between system services. If you want to learn more about this API, see the SapV2 appendix.
For this API to do its job successfully, almost every property and object must be available. The API section of the property selection dialog exposes the object and property tree available via that API.
To configure advanced options on a Translator, click the Advanced link on the Translator Properties window.
In the expanded Translator dialog is the Advanced Skip startup state request and wait for next change option:
By default, when the system starts (or when a Flow is applied to the system) the Flow asks for the current state of the Start Point and then applies the correct result to the End Point. In most cases this is desirable, but not always. For example, what if the Logic Flow in question was a latching GPIO on the Start Point and an automation system that gets tripped on the End Point?
If we needed to restart Pathfinder during that event, we would not want the automation system to be tripped again. Checking the Skip startup state request and wait for next change option overrides the default behavior and forces the system to wait for the next change that would cause the Flow to execute.
Important Note: When designing a system, it is important to test your logic before it goes live on air in case of a system restart and/or device restart.
Another highly relevant example for where the Skip Startup State option becomes important is with the commonly-used EAS example shown earlier in this section.
If the Logic Flow system detects a given Translator being activated more than 20 times in 1000 milliseconds, it will assume there is recursion involved and the Translator will be disabled to prevent excess CPU load. In some situations, this can create a False positive. For example:
In this Flow, the same memory slot is used for multiple entry points to a Flow, so a change to that memory slot could cause multiple pass-throughs of some Translators. If this Flow were to grow to a much larger variation with many more entry points of the same memory slot, it is possible to trip the recursion detection incorrectly.
Important Note: If a Translator gets disabled via the recursion detection, a log message is generated and an attempt will be made to send an email message to the critical event email address if configured.
Recursion detection threshold settings are modified in the expanded Translator dialog.
This value includes two parts separated by a forward slash. The first value indicates the analysis frequency; the second indicates the analysis duration in milliseconds. For example, typing 50/1000 will disable the Translator if it is being analyzed more than 50 times per 1000 milliseconds.
Additionally, there is an API property that that can change the default recursion settings for all new Translators:
This setting should be modified with extreme care as it will also update any existing Translators that are currently at the default settings. This can be CPU intensive and require a significant amount of writing to disk. Please make a backup before changing this value.
It is common to have a conversion list item in a translator of:
*=*
However, the * on the ToValue side does not need to be by itself. For example, you could have:
*=Hello I am *
In this case, the input value would replace the * in the output value. If the input value is Dan, the ToValue example above would output the string:
Hello I am Dan
This can provide similar functionality natively in the Flow translation as string builder memory slots.
* cannot be used in the middle of data on the "from" side. Use regular expressions for complex matching if needed.
The Advanced Conversion field, available in the expanded Translator dialog, allows users to bypass some of the helper dialogs and enter conversion statements directly.
While bypassing the helper dialogs can be useful in certain unique scenarios, those dialogs present information that is helpful when selecting a property but may or may not be the underlying value needed in the conversion. For example, when using the CurrentSourcePath property, the conversion list and normal drop-down list will show you the friendly name of the source. However, the actual conversion list item needs the uri based pathio which looks something like:
"tcp://172.16.1.53:93?l=SRC&d=src&i=6&t=aaudio"
If you are uncertain about the value requirement, create an example of what you are trying to do using the normal conversion list selection methods and then select it in the Advanced field to see the actual values that need to be applied. If you have questions, contact support.
Important note: Incorrectly entering data into this field can cause unpredictable results.
Conversion text syntax is:
<FromValue>=<ToValue>
For example:
l=True
If the From or True value needs to include a literal equals sign, then enclose the value in quotes. The From value will be abc=frz in this example:
"abc=frs"=True
If <NoChange> is applied to the ToValue portion of a translation, the output of the translator will not be changed. For example:
AAA=True
BBB=<NoChange>
*=False
In this case, an input FromValue of AAA will result in True, BBB will not cause anything to change on the output of the translator, and any other FromValue will result in False.
In many cases, a <NoChange> is not required because you can just opt not to supply the input which will result in nothing happening when that input occurs. But in a situation where you are using the * wildcard as a catchall but want to explicitly exclude a value from making a change, this can be used.
Important Note: <NoChange> is not applicable to the FromValue side of a translation and will be interpreted literally if entered on the FromValue side.
Regular expressions as described in the Watchers and Regular Expressions section in the Device Emulators chapter can also be used in the FromValue portion of a conversion list item. Regular expressions are added to the Advanced Conversion field as follows:
In this example, we are using the IsMatch property. Fader_Gain values that are not negative will result in a button turning On; otherwise, the button indicator will be Off. Because Fader_Gain generates significant data as it slides, we have also increased the recursion detection value to prevent this Flow from getting disabled.
Important Note: Using regular expressions can be slower and more CPU intensive. Use them only where needed and use the normal translations elsewhere.
Over the course of the examples above, you may have noticed an additional property in Combiners that we have not discussed yet called Raise Output.
The values for this property are Raise Output on Set and Raise Output on Change. The effects of this property are subtle but are important to understand:
In this Flow, if both pin 1 and pin 2 are Low, then pin 4 will be set Low. If either pin 1 or pin 2 is High, pin 4 will be set High. If the Combiner is set to Raise Output on Set, then any time either pin 1 or pin 2 is changed a message will be sent to set pin 4 to the corresponding value. So, if we assume pin 4 is currently High or Low and we set pin 1 to Low when pin 2 is still High, a message will get sent to pin 4 to go High.
However, if the setting is set to Raise Output on Change, no message will be sent to pin 4. When both pin 1 and 2 were High the resulting output of the And Combiner is False. When pin 1 goes Low, the resulting output of the And Combiner is still False. Its output value has not changed and so no message is sent.
The difference is subtle, but essentially with “Raise Output on Set”, a change message will be sent to the End Point any time the input of the Combiner changes even if it evaluates to the same output the Combiner was at before, whereas with “Raise Output on Change”, a change message will only be sent when the Combiner’s output changes.
Let’s look at another example of when Raise Output on Change could be useful:
In this example, GPIO pin state 4 appears at each pair of And Combiners on the left-hand side of the Flow. The buttons are button 1 of three different LCD panels. If all the Combiners in this Flow are set to Raise Output on Set, then the resulting End Point may get set 3 times when GPIO pin 4 changes. This is because a change to the pin would get fully passed through the Flow for each instance where it appears as a Start Point. However, if the left And Combiners are all set to Raise on Change, then the output will only get set for Combiners where the pin state change actually causes a different state on the output of the Combiner. This can greatly reduce load and improve performance in large and complex systems.
It is also important to note that this property is a new variable that must be stored in the backing storage. For backward compatibility with older software versions, Raise on Set will store the same way it historically has. However, any Flows that are changed to use Raise on Change will not be loadable by older software versions that do not support this property.
For advanced users, it is possible to change all of the Combiners to a particular setting using the port 9600 API. Each Logic Flow View has a write-only property called ChangeAllCombinerRaiseOutput. Using this property, all Combiners in a View and that View’s sub-Views can be set to the same value. This is useful for changing many Combiners at once but should be used with caution. It is recommended that a backup be taken before using this api command. For example:
See the API reference in Appendix 2 for details on how to use these commands.
Providing a list of every object and property in the system is beyond the scope of this documentation. One of the reasons we provide the description within the property selection dialog is to make the software self-documenting. However, it is useful to describe some of the more commonly used properties here if for no other reason than to generate ideas for how to use Flows within your environment. While this list is not inclusive, we encourage you to spend some time browsing the tree and examining the various available properties and their descriptions. And as always, our support staff stands ready to assist. Remember that due to the read/write nature of some of the properties, they may only appear and be available for use with a Start Point or an End Point.
Audio Alarms
AlarmState: Once an audio alarm has been configured, this property exhibits the current state of the alarm; it can be Unknown, AudioPresent, AudioSilent, or Clipping; logical decisions can be made when this state changes
LvlState: When a silence alarm is configured, Pathfinder Core PRO requests updates whenever the threshold value is passed for more than 250ms; this property carries the current state regardless of the current alarm countdown
Buttons
BackColorOn: Used to set the backcolor value when the button is on
BackColorOff: Used to set the backcolor value when the button is off
Ind: Used to set the indicator of the button on, off, or in a variety of flash states
Text: Used to set the Text value of a button
Key: This property will be UP or DOWN depending on whether the button is pressed or released
Console
ShowProfId: The id of the show profile loaded on the console; this can also be used to change the currently loaded show profile
ShowProfName: The name of the show profile loaded on the console
Asg_PGM1-4: Used to set or determine whether a specific console fader is assigned to any of the 4 program busses
Asg_Prev: Used to set or determine whether a specific console fader is assigned to the preView buss
Fader_Gain: Used to change the gain of a fader
MUTE_State: Used to set or determine if the mute state on a fader is engaged
OFF_But: Whether the Off button on a fader is up or down.
ON_But: Whether the On button on a fader is up or down
ON_State: Used to set or determine if a console fader is on or off
src_lwch: Carries the Livewire channel number loaded to a fader
talkback: Used to engage or sense the engagement of the talkback button on a fader
tt_cr: Used to engage or sense the engagement of the talk to control room button
tt_st: Used to engage or sense the engagement of the talk to studio button
tt_prev: Used to engage or sense the engagement of the talk to preView button
IND: Used to change the indicator state of user definable buttons on the console
KEY: Used to sense the key state of certain user definable buttons on the console
DeviceConnections
Connected: This property can be used to sense and react to connection problems with any of the Axia devices
Online: This property senses whether a device is responding to commands
Body: Used to change the body text of an email message
Subject: Used to change the subject of an email message
Send: Used to send a predefined email message
Emulators
Triggered: Used to determine when a Generic emulator’s watcher detects a defined input value
ToSend: Used to send data out a generic emulator port
Gpio
PinState: Used to change or sense changes on a GPIO pin
Memory
SlotValue: Used to sense changes or change the value of a memory slot
Trigger: Used to change the value of a latching memory slot from True to False or False to True
Routers
CurrentSourcePath: Used to sense or activate a route change on a specific destination
CurrentChannelNumber: Used to sense the Livewire channel number assigned to a destination. This property can also be used to make router changes using Livewire channel numbers for the source
CurrentSourceName: This property is updated with the name of the source that is currently routed to the selected destination
Scenes
IsActive: This property will be either True or False depending on whether all states in the scene are currently active
: Setting this property to True will make Pathfinder Core PRO initiate all of the changes in a scene
Startup
StartupFileProcessed: This property can be used to set up certain states after Pathfinder Core PRO has been restarted
Time
Enabled: Used to enable or disable a timer. Logical decisions can also be made depending on whether a timer is enabled or disabled
Elapsed: Becomes True when a timer elapses
VMIX
Gain: Used to sense or make changes to a VMIX fader’s gain setting
State: Used to turn VMIX channels on or off and sense the same state changes
TimeDown: Used to sense or make changes to the length of the fade-out when a VMIX fader is turned off
TimeUp: Used to sense or make changes to the length of the fade-in when a VMIX channel is turned on
Master_Gain: Used to sense or make changes to the master gain of a VMIX submixer
VMODE
AUDIO_MODE: Used to sense changes to the audio mode state of a VMODE IO
IN_SELECT: Used to sense changes to the IN_SELECT state of a VMODE IO
While this chapter has reviewed the details of Logic Flows, many of the other chapters of this manual will touch more on their uses as we detail how the aspects of the system functions and therefore what capabilities may be used.
Pathfinder Core PRO clustering is designed to address concerns over hardware failures. Clustering allows you to connect multiple networked Pathfinder Core PRO systems, so that they automatically and dynamically share configuration data and states. They also monitor each other, taking over processing events if one system fails.
As you prepare to configure your cluster:
Begin with a single Pathfinder Core PRO
Create the routers and add other required events and components
Take a backup of your configuration and download it to your local computer. See the section on Backup/Restore for more information. This will guarantee you can get back to your current operational state if you make a mistake when setting up your cluster.
Click the Clusters link in the navigation bar
Four buttons are available at the bottom of the Clusters page; Create, Join, Leave, and Manual Sync.
Note: Leave and Manual Sync are disabled until the system is part of a cluster.
First, click Create to create the cluster. The system will ask you to create a cluster administration password. This password is important because it will be used throughout the cluster so that the Pathfinder Core PRO units can log in to each other and synchronize data. When you provide this password, the system will create a special ClusterAdmin user for this purpose. You will be able to see this user when you view the Users navigation link and a severe warning will be issued if you try to change the password of that user since it must be identical across all systems. Once the cluster has been created, the Clusters link should look something like this:
The system is now part of a one node cluster. This display will show the hostname and IP address for each node in the cluster. When there is more than one systems in the cluster, the IsLocal field will show which of the systems you are currently logged into. It will also display the state of each Pathfinder Core PRO system in the cluster. The minus button should only be used in the rare situation where you need to forcefully remove a non-functioning node from the cluster. The preferred method is to go to the node to be removed and click the Leave button.
Now it's time to add the second system into the cluster. It is important to note that the second system’s configuration will be overwritten during this process. If the system is new, make sure you first assign an IP address using the front panel. The IP must have network access to the first unit in the cluster, so pay attention to the network configuration. You do not need to enable Livewire discovery on this second system.
On the second system, browse to the clusters link on the navigation bar, and then click the Join button. The system will ask for the IP address of any Pathfinder Core PRO system that is already a part of the cluster. It will also ask for the cluster administration password you provided when you created the cluster.
The system will now pop up a progress message box as the system joins the cluster.
The join process involves telling the first system that the new node is joining the cluster. It will then ask the first system to generate a special backup. The second system will download that backup and restore and then reboot. At that point, the cluster should be created, and you should be able to see both systems on the cluster page.
A successfully synchronized cluster should show all node states on the web page of all systems as SyncNewerChangesComplete. If that is not the case in your cluster and it does not resolve to that state within a few minutes after a restart, then contact Axia support to help determine why the cluster is not synchronizing properly.
Follow this procedure with subsequent Pathfinder Core PRO systems you wish to have join the cluster.
Once the cluster is created, changes to the configuration and state information are automatically synchronized across the Pathfinder Core PRO systems in the cluster. Additionally, in the case of a failure of one of the Pathfinder Core PRO systems, one of the other systems will begin processing the events. See the section on Events and Timers for more information.
Sometimes it may be desirable to force the cluster into synchronicity if there is some doubt that it is properly synchronized. In order to do this, browse to the system that is incorrect (out of sync) select the cluster menu item and select the manual sync button. This will ask for confirmation and then will request a backup from the other (known good) system, download and restore that backup and then reboot. This is usually a procedure that would be performed in the context of an Axia support session.
If you wish to leave a cluster, make sure that the system is connected to other nodes in the cluster. Then click on the Clusters link and click the Leave button. The system will revert back to a stand-alone system. It is important to note that after leaving a cluster, the configuration will still be the same as it was prior to leaving the system. It is recommended to quickly remove the system from the network and/or factory default the system. Otherwise, the system may start trying to process events that the rest of the cluster is also trying to process.
There are a number of elements of a Pathfinder Core PRO system that should only execute on a single system at a time so that a cluster is not requesting duplicate changes from a device. Examples of this are Logic Flows and Timers. Those will always execute on the system that is currently active and has the lowest IP address. Heartbeats are constantly sent and monitored between the systems so that if a system stops responding the next lowest IP address system will take over those responsibilities.
SapV2 is the protocol that is used both for cluster communications and for internal communications. This protocol is available on port 9600 and is described in more detail in the appendix of this manual. If the cluster does not seem to be working properly there is a great deal of information that can be collected about the clustering process using this protocol to try and solve the problem.
The Pathfinder Core PRO GPIO Node in a cluster is synchronized as well. Port additions, removals, and configurations applied to either Pathfinder Core PRO of the cluster will be replicated to the other Pathfinder Core PRO in the cluster.
Pin closure states will also be replicated in most cases. If the port has been configured with a multicast GPIO channel or snake routing assignment (IP/port), replication becomes a bit more nuanced. Closures that are directly tripped will still be replicated. However, closures that are sensed from the mcast or unicast snake (GPIs from the other snake port) will not be replicated. This is because it is assumed that both cluster nodes are monitoring those changes directly from the third piece of equipment and will pick up their states directly from the other end of the snake. Therefore, cluster replication of that state would in fact be redundant and could lead to race conditions.
When dealing with unicast snake mode (IP/port assignments), there are some additional clustering nuances to be aware of. These are most easily discussed via an example.
When you route a GPIO node to the Pathfinder Core PRO GPIO port, the address field in the GPIO port on both cluster nodes will get filled by IP Address/port. For example:
Pathfinder Core PRO A = 172.16.1.241
Pathfinder Core PRO B = 172.16.1.242
GPIO XNode = 172.16.1.85
If you route (using the Pathfinder Core PRO GPIO Router) the XNode GPIO source 1 to the Pathfinder Core PRO A or B destination 1, the destination port on both Pathfinder Core PROs will look like:
CFG GPO 1 SRCA:”172.16.1.85/1”
In this example both Pathfinder Core PROs are monitoring the GPI changes on port 1 of XNode at 172.16.1.85 and making matching changes on their GPO pins. This is straightforward.
However, if we route either of the Pathfinder Core PRO servers to the XNode GPIO things get a bit more interesting. We can only apply one IP Address to the SRCA field on the XNode destination. Therefore, Pathfinder Core PRO will use the Axia livewire address of whichever Pathfinder Core PRO in the cluster currently has its event system active. In the example above Pathfinder Core PRO A would typically be the active server in the cluster. When you make the route change on either Pathfinder Core PRO, the system will use the active server IP address on the XNode destination. The XNode destination would look like:
CFG GPO 1 SRCA:”172.16.1.241/1”
If Pathfinder Core PRO A Server were to fail or get shut down, the B Server will loop through its routes and find any destination that Pathfinder Core PRO A’s GPIO ports were routed to and switch them to Pathfinder Core PRO B’s external livewire ip address.
A Fails
XNode port gets reassigned:
CFG GPO 1 SRCA:”172.16.1.242/1”
If A comes back online the port will switch back to use the A server when the event system comes online again.
One important note about this is that the XNode GPIO clears its pin states to be all high each time a route change happens and then reassigns them to the new values based on the new GPIs. This means that if a snake route is held low on the XNode based on a low GPI on Pathfinder Core PRO, during a cluster failover those pins might flicker to high and then back to low. This is usually a virtually instantaneous flip.
This should only cause an issue if you have a Pathfinder Core PRO GPI that is unicast snake routed to an XNode (or other Axia GPIO device) GPO and that closure is both normally held low and you have an activity (such as an automation advance) that happens on the flip from high to low and you fail over to the secondary node in the cluster. But this is also similar to what would happen if a device supplying that same closure were to be restarted. Note that this is not an issue for multicast snake routing.
In the future we may address this issue by using floating IPs where the ip route would not change but rather the ip address used for the external routes would float/move between the Pathfinder Core PRO devices.
We highly recommend that users do some testing of this functionality to fully understand how it works. For the vast majority of use cases it should be seamless.
One of the powerful features of Axia Audio mixing engines are their virtual mixers. The Element and Fusion mix engines include sixteen virtual mixers which can be used to create mixes of various audio streams. These virtual mixers can be controlled using Logic Flows to dynamically create mixes of audio content based on changes in the system. Additionally, there is a web page for managing these virtual mixers, in effect creating on-screen mixers. To access this user interface, click the Vmix Control link on the navigation bar.
When you first open this web page, the faders will be dimmed out and none of the buttons will function as you first need to define which engine and which Vmixer to control. Select the mix engine from the Select Engine drop down, and then select one of the 16 virtual mixers from the Select Virtual Mixer drop down.
The interface will update to display the state of the selected virtual mixer. You can use the drop-down lists to switch between different Vmixers.
Each Vmixer has five input channels and a master fader. The master fader is labeled as Master and has the red slider. The input channel meters display the real-time metering of the source assigned to each fader. This metering is pre-fader, showing the level of incoming audio. The meter next to the Master fader displays the level at the output of the virtual mixer and is therefore post-Master fader.
Dragging a fader’s on-screen slider up or down will adjust the VMixer channel’s gain.
Clicking the On/Off buttons will turn a fader on and off. Turning a virtual mixer fader on or off is subject to the fade up and fade down time parameters. These can be changed by clicking on the fields next to the up arrow or down arrow in the Fade Time section. Times are entered in seconds. So if you have a fade up time of 1.2 seconds, when you click the On button the audio will fade in to the level defined by the fader over the course of 1.2 seconds. Then the fader control will dynamically allow you to control the level. The same is true when turning the fader off. Clicking the off button will fade the audio out dependent on the fade down time.
Finally, clicking on the source name at the top of each fader will allow you to select a different audio source for the fader. A list of available sources will appear.
Highlight the new source and click take to select the new source for the fader. Or, click cancel to return to the mixer web page.
It is also possible to generate direct links to a particular Vmixer. This can be useful if you wish to create a shortcut on a user’s desktop that will present a specific Vmixer. In order to create such a shortcut in Windows, right click on the desktop and select new shortcut. For the location type:
http://172.16.1.221/vmixcontrol.php?engine=172.16.1.63&vmixer=1
Replace the 172.16.1.221 with the IP address of your Pathfinder Core PRO. Replace the 172.16.1.63 address with the address of the mix engine you wish to control. And replace the 1 at the end of the link with the virtual mixer number within the engine you wish to control. Then click next and provide a name to create the shortcut. And finally, click finish. Or, just enter the address into the address bar of the user’s browser and then add it to favorites.
When you create the link this way, the user will not see Pathfinder Core PRO’s navigation bar or the drop downs to select a different engine or Vmixer. The web page will only present the specified virtual mixer.
Pathfinder Core PRO provides a variety of different logging mechanisms as well as maintaining its own internal system logs. There are two kinds of log files created by the system: System Logs and User Logs.
System Logs are created by the system’s internal services and primarily define information for use by the developers.
User Logs are where you can define changes on your Axia network that you want to be entered into log files for later review.
Click on the Logs link in the Navigation bar to view the current logs in the system as well as to define logging options.
To see the list of Log Writers that have been created in the system, click the Log Writers link on the User Log window.
Each Log Writer in the system will be displayed on this page by Name along with its type and location.
To create a new Log Writer, click on the plus icon on the Log Writers screen.
Type a Name for this Log Writer in the Log Writer Name field.
From the Log Writer Type drop-down list, select this Log Writer’s Type. There are four types of Log Writer that can be created:
If you are configuring a TCP Listener or Client Log Writer, type the TCP Port associated with the TCP application.
If you are configuring a Sys Log Log Writer, type the IP Address of the collector application
Use the selection window at the bottom of this dialog to select what log options you wish to log.
Expand the tree and check the items you wish to log. The available items are:
AudioAlarms
AlarmState: Generates a log message whenever an audio alarm state changes.
LvlState: Generates a log message whenever the audio threshold for silence is passed for longer than 250 ms. This occurs before the countdown to an alarm state begins. It can be used to log the actual transitions being reported by the equipment but may also generate a large amount of log content depending on the type of audio content being monitored.
ConnectMessage
Connected: Logs connections and disconnections from equipment. Use this log message to find equipment with which Pathfinder Core PRO is struggling to maintain a connection.
Online: Logs changes to the online/offline state of the device. For a device to be considered online, proper communications must be occurring on all identified ports.
Devices
VMIXGain: Logs changes to VMIXer gain settings.
VMIXState: Logs changes to VMIXer On/Off settings.
LegacyPanels
PanelPropertyChanged: Logs changes to properties of any of the controls in user panels.
LogicFlows
CombinerOutputChanged: Logs changes whenever a logic flow translator changes its output.
TranslatorOutputChanged: Logs changes whenever a logic flow translator changes its output.
MemorySlots
MemorySlotChanged: Logs whenever a memory slot changes its value.
MessageLogging (Note: use with support or when trying to find a problem as these can increase CPU load. These are for troubleshooting only.)
AccessViolations
LoginFailures
LoginSuccesses
LwcpIncoming: Lwcp incoming messages.
LwcpOutgoing: Lwcp outgoing messages.
LwrpIncoming: Lwrp incoming messages.
LwrpOutgoing: Lwrp outgoing messages.
SapV2ExternalIncoming: SapV2 messages coming from outside the system.
SapV2ExternalOutgoing: SapV2 messages being sent outside of the system.
SapV2InternalIncoming: Incoming sapV2 messages between services.
SapV2InternalOutgoing: Outgoing SapV2 messages between services.
RouterEvents
GPIO State: Logs changes to GPIOs within the system.
RouteState: Logs any route changes that take place within the system.
TimeEvents
Elapsed: Logs whenever timers elapse.
Enabled: Logs changes to a timer’s enabled state.
When all fields are complete, click Apply to save your changes and create the Log Writer.
Clicking a log Filename in the User Logs window opens the log in a browser.
Log entries can be viewed in the browser window directly or copied to a text file for more robust searches.
You may notice that some logs (such as the Silence logs in the screen shot below) have multiple copies with a period and a number at the end.
Due to space restrictions, Pathfinder Core PRO maintains an intelligent log rotation service which will rotate the log files as they become too large. Generally, log files are rotated four times with a new file created when the current log reaches approximately 4MB. When the fourth log gets too large, the oldest log is discarded and the filename reused.
There are some other rules which this service uses that might generate more aggressive log manipulation and/or deletion if space is becoming limited. For this reason, it is recommended that you use an outside syslog-based logging service to capture logs that you wish to store for longer periods of time. Review the Creating New Log Writers section for additional details.
Pathfinder Core PRO can emulate other routing systems. This can be particularly useful if you need to interface with an automation system that has not implemented any of the protocols that drive Axia routing systems.
Click the Device Emulators link in the navigation bar to display the list of device emulators currently defined in the system.
Click the plus icon in the Device Emulators page to create a new emulator
Type a unique Name for this emulator and select Generic Emulator from the Emulator Type drop-down list
Complete the Connection Settings; the Generic Device Emulator is just a TCP/UDP connection that can be used to send and receive custom messages from an automation system or some other third-party system
Important Note: Pathfinder Core Pro does not currently support serial ports. If you need serial port control, investigate serial-to-TCP converter solutions, or use Pathfinder’s Port Router application to bridge the serial data to TCP data.
Type your initialization message in the Init Message field; this message will be sent when this Generic Emulator connects allowing the emulator to automatically send login or other initialization messages, including special escape characters (see the Escape Characters section later in this chapter) In the case of Listener types, this message will be sent to each client that connects to the listener. In the case of Client connection types, this message will be sent each time the client connects. Generic Device Emulators have a write-only property that can be used by Logic Flows called ToSend. This property allows you to create a flow to send any kind of data out of the Generic Emulator you wish.
Generic Device Emulator can trigger actions based on incoming data; to define these actions, we create Watchers; each Watcher looks for information coming to the emulator port and when it sees that data, briefly sets the Watcher’s Triggered property to True To create a new Watcher, click the Add button and select the newly created Watcher from the list.
With the new Watcher selected, type a Name for this Watcher and the Value being watched for in the Name and Value fields directly below the Watcher list.
You can edit an existing Watcher by clicking on the Watcher entry in the list and updating the values in these Name and Value fields .
When all fields are complete, click Apply to save your changes and create the Emulator
Both the ToSend properties and the Watcher values support several special character strings to represent special characters:
Therefore, a Watcher that is watching for:
MyName\cr\lf
Is looking for the string “MyName” followed by a carriage return and line feed. However, in the following example, the double slashes are converted to a single literal slash for the case where you actually want to send the value “\cr\lf.”
MyName\\cr\\lf
The Name of the Watcher is used to identify the Watcher in the system and will appear as an object underneath the Emulator in the Logic Flows property selection tree.
In the example above, we have created a single Watcher on this device emulator named Hello, and it is watching for the value Hello. When we see the word “Hello” come into this emulator, then the Watcher’s momentary Triggered property will be set to True and then reset to False until the next time the value “Hello” is registered.
We can create a Logic Flow where the Start Point is the Triggered property of the Watcher and do anything we like in the system when we see the string “Hello” come in through the Device Emulator port.
In this Logic Flow we have defined that every time we see the string “Hello” on the Watcher in question, we will activate the scene AllTo1.
Additional properties related to Generic Emulators that may be used in Flows include:
Connected – This property will be True if there are any clients connected or if the TCP client is successfully connected and False otherwise
ConnectedCount – This property will retain the number of currently connected clients to the emulator
ConnectionLost – This property will switch to True and then back to False when a client disconnects
ConnectionObtained – This property will switch to True and then back to False each time a client connects
TriggeredValue - When the Watcher input is discovered, that value will be assigned to the TriggeredValue property momentarily and then the value will be set back to blank. It is momentary in order to raise changes when the same value enters the emulator repeatedly
Generic Device Emulator Watchers also support the use of regular expressions or Regexes. Pathfinder Code PRO uses the Microsoft .NET variation of regular expressions—an advanced language used for pattern matching in textual information.
Regular expressions parse the Watcher’s input relative to the regular expression pattern, tripping the Watcher’s Triggered property to True in case of a match. Pathfinder Code PRO Watchers make use of two flavors of regular expressions:
Regex.Match(<expression_pattern>)
Regex.IsMatch(<expression_pattern>)
To add a regular expression to a Watcher, type the RegEx statement in the Watcher Value field:
Regex.Match evaluates Watcher input against the expression, with valid matches resulting in the Triggered property being set to True. However, because a Regex can be used to match multiple different chunks of text, it is often also useful to have the exact chunk of text that was matched available to a Logic Flow. That is where the TriggeredValue property comes in.
Typing a Value like this Regex.Match(..ll.)will match any series of five characters where the third and fourth characters are l.
Watcher inputs like Yello, Hello, Mello, hhlll, hhllh, will trip the Watcher’s Triggered property to True and allow the TriggeredValue property to pass the input value that resulted in the match.
As another example, to extract a duration from a satellite message like this:
CBS050
We could use this regular expression in the Watcher’s Value field:
Regex.Match((?<=CBS).{3})
This Regex would set the Watcher’s Triggered property to True any time it sees six characters where the first three are CBS and allow the TriggeredValue property to pass only three characters that fall after the CBS. In this example, the TriggeredValue property would equal 050. This expression makes use of the lookbehind assertion of regular expressions.
A different Watcher could then be created for a different show from the same Emulator.
Regex.Match((?<=NBC).{3})
Regex.IsMatch() performs a similar function except rather than passing the value of the match, the TriggeredValue will output True if a match exists. This makes this method largely redundant since a match will also set the Triggered property to True, but there are times when this method can be useful in Logic Flows as discussed below.
Carriage returns and line feeds must be considered when the incoming data is a line‑based protocol. Failing to properly account for these special characters when parsing incoming data will cause incorrect results.
If your Watcher input will include carriage returns and line feeds at the end of each message, you could use something like (.*\r\n) or ((?s).*). The latter uses single line mode.
There are several options that can be used within the expression to modify the function of the pattern matcher. For example, by default the dot or period character ( . ) matches any character except the new line. If you want it to match the new line character as well, you can enable the single line option to modify the function of the wildcard within the pattern matcher:
Regex((?s).*).
The inline ?s modifies the regular expression engine to use the single line option when analyzing. These modifying options are documented here:
https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular- expression-options
Regular expressions are extremely advanced and can appear to be very complicated. One joke about regular expressions is that once you solve a problem with a regular expression you now have two problems. However, they can also be awesomely powerful for the situations where they are needed.
They are part of one of the most commonly used and advanced text pattern matching and manipulation languages across all programming languages used today. However, they will also be slower and more CPU intensive than the normal matches Pathfinder Core PRO performs because they have not been optimized at compile time in the same way as the native code. This is only one reason why they should be used with caution and sparingly. Use them only when you need them and not when Pathfinder Core PRO’s inherent pattern matching is a better option. Also test thoroughly. It is quite easy to design a regular expression that you think is correct but misses certain edge cases. The regex tester listed in the links below can be very useful in this case.
Again, this is an advanced feature and incorrect use can cause unpredictable results. But it is also a very powerful tool for certain situations.
Learn more about Regular expressions using these links:
There are two Probel routing protocols supported by Pathfinder Core PRO: Probel General Router and Probel General Switcher. The syntax of these protocols is different so it is important to consult the automation system’s manual regarding which protocol to use.
In both cases the protocol provides routing control. As a result, after selecting this protocol type, the web page will present a drop-down list with the available routers so that you can choose which router the Emulator will control.
Click the plus icon in the Device Emulators page to create a new emulator.
Type a unique Name for this emulator and select either Probel General Switcher or Probel General Router from the Emulator Type drop-down list.
Complete the Connection Settings.
Type Matrix and Level values, and select a Router from the drop-down list. When all fields are complete, click Apply to save your changes and create the Emulator.
Pathfinder Core PRO allows you to create your own custom user interface that can be displayed and used in a web browser on any device. This allows you to define precisely how your users interact with your Axia system in a way that supports your organization’s workflow. Currently, Google Chrome is the recommended browser for this feature.
HTML User Panels may be used and edited from the User Panels menu item. The Panels list includes HTML5 Panels and legacy Panels created with the legacy Panel designer.
Click the plus icon to create a new Panel and open the new Panel in the Panel Designer.
Click Save and type a name for your Panel to instantiate it before you begin adding components.
After saving and giving the Panel a name, the name of the Panel should appear in the upper corner:
Next set the size of the Panel. Click the main Panel to select it:
The property window on the right side of the Panel designer will display properties that can be modified for the selected component:
Panel dimensions can be set to a standard preset, set to a specific height or width, or autoscaled dynamically.
With the main Panel selected, click in the Property window’s Size field and select from a size preset.
The size of the Panel area in the Panel Designer should change based on your selection.
With the main Panel selected, click in the Property window’s Height or Width field and set a new height and width in pixels. Pixel values may be typed in, or you may click on the spinner control to adjust the value.
The size of the Panel area in the Panel Designer should change based on your changes.
Use autoscaling if you want the components in the panel to scale to the size of the browser window as it changes. With the main Panel selected, select an option from the autoscale dropdown.
While intuitively you might believe that height_and_width is the correct choice, it rarely is. This option can cause buttons and components to be stretched in strange ways.
On the other hand, scaling based on height alone will maintain the correct aspect of the component while just scaling it up and down:
In general, if the aspect ratio of the Panel objects is important and the Panel will be displayed on a widescreen monitor, it is best to choose scaling based on height. If it is a widescreen monitor turned sideways for portrait orientation, the best option is based on width.
If aspect ratio does not matter, for example when you are working only with square or rectangular buttons, autoscaling based on height and width may be used.
After creating your Panel, save it with one of the autoscaling options. Open the Panel in a browser and change the browser size to observe the autoscaling behavior and get a feel for which option is most appropriate.
As you evaluate the different autoscaling options, after resaving with a new option you must refresh your browser for the new option to be applied.
To add components to your Panel, expand the HTML and/or Custom sections in the left toolbar:
Hovering over any component will show a tooltip with the name of that component. We can illustrate adding and modifying components using a simple HTML button.
Click and drag the top-left HTML Button (the tooltip will say Button) from the toolbar into the Panel. After dropping the button in your Panel, it should be highlighted with a red box indicating it is the selected component.
To resize the component, click and drag the component’s red border. The border displays just inside the actual edges of the object by design so when aligning objects you can still see the object’s actual edges.
To move the component within the Pane, click and drag the center of the component. You can also use the arrow keys on your keyboard to nudge the selected component in any direction. Each press of an arrow key will move the component one pixel at a time unless the grid is enabled in which case it will move by the grid amount. See the Grid topic in the Tool Bar section below for additional details.
Important Note: By default, some components may resize both height and width when one or the other is dragged as non-scaled resizing causes the component to look skewed and stretched if the aspect ratio is not maintained. These are generally more complex components such as the console fader. Holding the SHIFT key while resizing overrides this behavior and allows you to skew the component if desired.
The property list on the right will update to include properties that may be adjusted for the currently selected component type. Clicking in a field and changing the property will make the corresponding change to the component. For example, with our button still selected, click in the Caption field and type a caption:
Expand the Style section and try adjusting the border>border-radius value or the font/text>font-size value.
As you can see there is a high degree of power to achieve exactly the desired design using the properties in the property grid.
Once you’ve achieved your design objectives, click Save to save your changes or click Cancel to return the Panel to its previous save state.
Important Note: There is no undo or redo feature, so saving frequently as you work is recommended.
Holding the SHIFT key while clicking in the User Panel property editor fields will bypass the usual helper dialogs and allow direct editing of the text. This can be useful for things like copying and pasting color values. SHIFT+click to highlight the text box without the helper dialog and then click again to edit the text for the property.
The top Tool Bar has several tools to help with the component layout:
The Cancel and Save buttons may be used to save your work or cancel pending changes and reload from the last save point. Frequent saves while working on the design are recommended.
These are the standard Cut, Copy, and Paste tools. These actions can be performed on any currently selected components.
You can select multiple components by holding the SHIFT key while you click additional components.
Clicking the Delete button will delete the currently select components. Be careful with this function as there is no undo though you can click cancel to return to the previously saved state.
The alignment tools will only be available for use if you have multiple components selected. You can select multiple components by holding the SHIFT key while you click additional components.
To illustrate, drag three or four buttons into the Panel. Then, while holding the SHIFT or CTRL key, click each component until the red select box is around each of them:
Once you have selected more than one component, the alignment tools will become available. These tools are:
In each case the system will align to the most extreme edge. For example, with the four buttons selected in the example above, clicking Align top will align all buttons to the top edge of the button closest to the top of the Panel.
Clicking Distribute horizontally will spread the buttons evenly between the left and right buttons.
The Magnet tool aligns and resizes items of like kind edge-to-edge. For example, create a new button and resize it. Then add a second button but leave it at the default size. If you then drag the small button so its edge meets the large button…
…the small button will immediately snap to the size of the large button and align itself to the large button’s edge.
This is extremely useful when trying to build a Panel with many same sized components lined up edge to edge. However, it can also be disconcerting when you want the components to be different sizes and/or not to line up. The Magnet tool is enabled by default but may be disabled by clicking on the tool.
If enabled, the Grid tool aligns a component’s location and size according to a grid of a specified pixel density. For example, if you enabled the grid with a pixel density of 10 pixels, you will notice that dragging components will jump by 10 pixels. This is useful when trying to evenly align components.
Each Panel has an index page which is the default page that will be loaded when the Panel is first displayed, but additional Pages may be created using the Page tool. Buttons or events may then be used to switch between the pages as described in the changing pages section of this chapter.
To design a new Page, click the down arrow and select the [newpage] option.
After clicking the [newpage] option, click Save and type a name for your new page. Then you can design a new page as if it was any other Panel.
If a Panel has multiple pages, you can use this same dropdown to select the page to edit.
You can clone your work to a new page by selecting the page to be cloned and then selecting the [clonepage] drop-down item. The system will ask you for a new page name for the cloned page.
You can delete a page by selecting the page background and clicking the delete icon. The system will then ask you if you want to delete the page. You cannot delete the default index page.
Once multiple pages have been created you can use the change property along with buttons or property changes that will switch from one page to another. This is described in the Changing Pages section of this chapter.
You were already introduced to the property grid in the section on adjusting properties above. This section will go into some additional detail. Drag a button onto your Panel and select it so that the property grid displays the available properties of the button.
Different components may have different property sections and sub-sections as well as properties that are specific to that component, but this is an example of the property sections you will see. Expanding the sections will display additional sections and properties.
There are also some properties that you will not find in the CSS reference above because they are custom to our usage of that component. For example, in the case of the button component, caption, HwMap, and indicator are all properties that are not standard CSS properties. We will describe their usage more in the examples below.
Each property in the property grid has a button between the property name and the property value at the end of the property name side of the grid. This is called a bind button.
The bind button defines the properties that should be exposed to PathfinderCore PRO for use in Logic Flows. In some cases, there may be hundreds of properties for a given component, but there are only a few that you will want to dynamically change while the Panel is running. For example, once you position a button on a Panel and size it to the size you desire, it is unlikely that you will want that position to change while your end-user is using the Panel. Therefore, there is really no need for the left and top properties to be cluttering up the Logic Flow tree. Clicking the bind button for a given property will turn the button blue.
Saving the Panel will then identify to PathfinderCore PRO that this is a property that we expect to dynamically manipulate with Logic Flows and so should be tracked by PathfinderCore PRO and made available to Logic Flows.
You may also notice that after enabling a property for binding that an image of a partial Logic Flow will appear at the bottom of the property grid:
This is a simple shortcut that allows you to generate a simple flow to bind values to the property without having to switch over to the Logic Flow designer. In addition, since these flows simply bind system states to Panel properties, the flows generated by this method do not count against your license count. It is an easy way to quickly add simple functionality. But it will be easier to understand with an example.
Let’s say we want the button we have dragged onto the Panel to trigger a route change. Select the button and enable the binding button on the mousedown event. We are defining what we want to happen when the button is pressed. Then double-click on the endpoint in the flow image.
This will open the normal property selection dialog used in Logic Flows:
Expand the Routers section, expand a router, and expand the destination you want to change when the button is pushed, and then click on the CurrentSourcePath Property. Then click select.
The system will automatically move to the translation dialog.
Click on the *=* item in the list and then select the True item in the left hand drop down and the source you want to route to the selected destination in the right hand drop down.
We have just defined that if the mousedown event is true, the sa_server_06 source will get routed to the TestTest destination. However, when you click Done you will get a pop-up message.
This message will only appear if you are generating flows on the mousedown or indicator properties of a button. In this case, it knows that since we are defining what we want the button to do, we probably also want some indication on the button that the requested action has been done. If we click OK, it will automatically turn the binding button on for the indicator property and open the flow definition for the indicator. In this case, it is smart enough to fill things in for us.
It is important to notice that the flow for the indicator property looks different than the one for the event.
The system also knows in which direction these flows should go. For example, with an event, the start point is not displayed in the flow because the event we have selected is the start point and the end point is what we are going to change. On the other hand, standard properties like the indicator are changed based on things that are changing in the system. So, you select what property in the system is causing the indicator to change. In that case, the partial flow shows the start point and the translation and the endpoint is the property of the Panel component we have selected. The rule of thumb is that events will display partial flows with an endpoint and other properties will display a flow with a start point. The missing part of the flow is the event or the property itself.
When we click OK in response to the message above you will notice the system will skip picking the start point. This is a special case for buttons where you are configuring the mouse down and indicator properties. Since we just defined what we want to change when mouse down is pressed, the pop-up message is asking whether we want the successful change of that route to be reflected in the indicator. So, if we click OK, the system automatically turns on the binding for indicator and fills in the start point with the destination selected, and then displays the translation settings.
You will also notice that the system is assuming you will want the indicator to be on if the selected source is routed to the destination and off if it is not.
Click Done.
You will notice that the flows are no longer gray and have turned blue to indicate they have been defined. Saving the Panel will cause the flows to be created and start working in Logic Flows. Flows created in this manner will be generated in a special folder in Logic Flows called _Panels. The flows in this folder may be monitored for troubleshooting purposes but they cannot be changed from within Logic Flows. They are only edited through the Panel designer.
Note: To see these flows working you need to go back to User Panels and open the Panel for usage by clicking on the Panel link rather than the edit link. It is helpful to have this open in a separate browser tab while you are working. Then, after saving changes in the designer, you can switch over to the tab with the running Panel, refresh the page, and see your changes in action.
To extend this example, turn on the binding for caption as well.
Now double click on the start point and select the same CurrentSourcePath property of the same destination. Now in the translation select what you want the button to say when the source is routed and what you want it to say when it is not.
Click Done and Save to save your changes. Executing the Panel should now display Routed or Not in the button’s caption depending on whether the selected source is routed to the destination.
A more useful change you can make with the caption property is to select the CurrentSourceName property of the destination in the Logic Flow property selector and use a *=* translation. You can change this by double-clicking the start point while the caption property is selected.
Now pick the currentSourceName Property instead of the CurrentSourcePath property and click select.
Change the translation to be *=*. Then click Done. Now the button’s caption will be tied to the name of whatever source is currently routed to the destination.
After saving the Panel and opening it up for use you should find that pressing the button will make the route change, the indicator will illuminate or go dark according to the back-color properties depending on whether the route is made, and the caption should display the name of the source that is routed to the destination.
By using these techniques, you can edit functionality into the Panel components in very easy and extremely powerful ways.
In many cases you may wish to create more complex flows than described in the examples above. For example, you may want your indicator state on a button to be the product of numerous conditions in the system. These kinds of Flows can still easily be created but must be created within the Logic Flows designer.
Simply enable the binding button for the properties these Flows need to manipulate without generating a Flow in designer. Save the Panel and then from within the Logic Flows property selector, these properties will be available for use:
If you are using Google Chrome, there are some command line options that will allow you to launch a Pathfinder Core PRO Panel as if it was an application. Copy and paste the following into a notepad or text editor:
When copied, this should be one line in the editor. The quotes at the beginning and end are part of the text so do not remove them. After the word “location,” there is an HTTP link.
Change [Username:Password]to match the credentials used in your system.
Change [IPAddress]to match the IP address of your Pathfinder Core PRO.
Change [ttt] to the name of the Panel you want to launch.
Change [index] if you want to target a page other than the default index page
For example, these values…
[Username:Password]= Admin:Admin
[IPAddress]= 172.16.1.56
[ttt] =YAPanel
[index] = Its_a_New_Page
…would result in a shortcut like this:
Once you have the edits made, select the entire text again and copy it to your clipboard.
Right-click on your desktop and create a new shortcut using your edited shortcut text. Double-clicking on the shortcut should now launch the Panel as its own application.
If you always want the Panel to launch in the same place on the screen you can add another option: window.moveTo(580,240). For example:
In the future, we will investigate a way to generate the shortcut (or at least the shortcut text) automatically.
Each component has many available CSS properties and component events. Many of these properties can be understood after some basic study that starts with a basic internet search for CSS property descriptions.
This section will describe each component, including custom properties beyond the standard CSS style properties.
We have included default images of the components below, but it is important to note that the CSS properties can be used to make the components look much different than the examples included below. Feel free to adjust border, color, and shadowing properties to achieve the design desired.
Important Note: Each component has an ID property allowing you to define a name for the component. This is useful in differentiating components in Logic Flows and debugging so it is a good habit to name components as you create them. IDs must be unique within the page.
The Button component can control and indicate changes in the system. In addition to standard CSS style attributes, customizable properties include:
Wherever this button can be used, a Console Button could also be used. The difference is that the Console Button has a slightly more elegant look.
Labels can be used to generate textual label information in the system. In addition to standard CSS style attributes, customizable properties include:
Input boxes allow user input. In addition to standard CSS style attributes, customizable properties include:
In addition to mousedown and mouseup events, Input Box events include:
Both change and input events raise the current entered value.
The Web Page component is an HTML iframe which allows you to embed a web page from another site into the Panel. This component can be used to display video streams and other web page content.
In addition to standard CSS style attributes, customizable properties include:
If you intend to use this as a background component with other components on top, you may need to manually adjust the z-index property of this component or the overlaid components to get them to display properly.
The Web Page component includes this event:
Especially during testing, it is important to note that some sites (notably, Google) prevent their content from being displayed in an iframe.
The Image component allows you to embed an image in a page. This component can be used to create background borders around a set of components.
It is recommended to use the background-image property rather than the src property to assign an image to this component.
Before you use an image component, remember most elements also support the background-image property. For example, you can apply a background-image to the Panel itself or to buttons and labels.
HTML5 User Panels support two different kinds of meters (providing visualizations of Audio IOs that support metering) and two different kinds of faders (allowing gain manipulation of Audio IOs.)
Gradient Meter
This component can be tied to Audio IOs that support metering in the system. See the Setting the IO Property topic in this chapter.
In addition to standard CSS style attributes, customizable properties include:
LED Meter
This component can be tied to Audio IOs that support metering in the system. See the Setting the IO Property topic in this chapter.
In addition to standard CSS style attributes, customizable properties include:
Fader
This component can be tied to Audio IOs that support gain manipulation. See the Setting the IO Property topic in this chapter. The Fader can also control non-audio control points. See the Setting the Control Property topic in this chapter.
The control displays the Fader value as you hover over the Fader. Fader values can be manipulated using the mouse wheel, dragging with the mouse, or touch and drag on a touch screen.
In addition to standard CSS style attributes, customizable properties include:
Additional Default Fader style properties:
Additional Simple Fader style properties:
Console Fader
This component can be tied to Audio IOs that support gain manipulation. See the Setting the IO Property topic in this chapter.
The control displays the Fader value as you hover over the Fader. Fader values can be manipulated using the mouse wheel.
The Console Fader is a smart fader capable of displaying different properties depending on the type of IO assigned to it.
In the example above, this Console Fader has been assigned to a Fusion console input. When loaded, the component updates the controls according to the type of IO to which it has been assigned. In this case it shows the name of the source profile, a meter obtained from the input stage of the fader (see note below), the program buss assignments, a fader which maps to the Fusion fader, A and B user buttons, Talk and Preview buttons, and ON and OFF.
This component will dynamically adjust what it displays depending on the type of IO it is associated with. Those changes will only be shown when the Panel is executed. That is when the capabilities of the assigned IO are analyzed. For example, after dragging a console fader onto the Panel and assigning IOs, when the Panel is executed you may see controls that look like:
In this case the first Fader is tied to the channel input of an Axia console. The second fader is tied to a VMIX channel input so the component changes to show the time up and down parameters. The third shows an XNode source.
Important Note: When the control property is used, metering is defined by the IO property but the controls (fader, on/off, etc) are defined by the control property. If nothing is selected in the control property, the control point is inferred by the IO property. If nothing is selected in the IO property but the control property is used, then no metering will appear.
Many of the properties discussed above in the Fader object have also been exposed in the Console Fader so that the color and style of the slider within the larger console fader object may be manipulated. These styles correspond directly to the styles.
In addition to standard CSS style attributes, customizable properties include:
Additional Default Fader style properties:
Additional Simple Fader style properties:
Setting the IO Property
Meters and Faders must be tied to an Audio IO using the component’s IO property. For example:
Drag a Gradient Meter into a User Panel and resize it to an appropriate size
Click the IO property to open the IO Select Source dialog box
The link at the top of the page will display whether sources or destinations are currently being displayed. Clicking the link will toggle between the two
Click an IO whose metering you want to be tied to the meter and click select
You can use the Search box to narrow down the list of available sources or destinations
The IO field will fill with the path of the selected IO
Since we are in the designer, no metering will be displayed. It will only display when the Panel is executed.
Important Note: Enabling the binding button for the IO parameter will make it available to Logic Flows, allowing you to dynamically change the IO assigned to the meter or fader.
Setting the Control Property
Traditionally a Fader or a Console Fader is assigned its control point using the IO selection which presents a list of sources and destinations in the main audio router. Selecting a specific source or destination allows the Fader to function intelligently and present the correct controls to the user of the Panel.
However, when applied to console faders this functionality assumes the use of FaCH.
FaCH is the control of the physical fader based on its position in the console whereas LwCH allows control over a fader with a specific Livewire channel loaded to it wherever it resides in the console. Additionally, some consoles (Qor-based consoles such as IQ and Radius) do not have a direct correlation between the IOs exposed to the router and the faders those IOs may or may not be tied to. In these cases, the system cannot infer control from the IO property.
The control property addresses this problem by adding an override of the control portion of the component.
When the control property is used, the metering is defined by the IO property, but the controls (fader, on/off, etc) are defined by the control property. If nothing is selected in the control property, the control point is inferred by the IO property. If nothing is selected in the IO property but the control property is used, then no metering will appear.
Using the control property, Lwch options and Qor faders are now available to these components where previously they were not available. It is important to note that Lwch and Qor faders do not have directly inferable metering points, so if metering is desired it must be manually selected with the IO property in addition to the control point with the control property. It is possible that in the future we may add code to attempt to figure out a correct metering point for the assignment but for now it must be a manual decision. It is also important to note that the control property currently only displays fader objects as control point options. xNode sources and destination control points and Vmix points should be selected using the IO property. In the future, those as well as xNode mix points may be selectable via the control property as well.
To enable the control property of an existing Fader or Console Fader control:
With the Fader or Console Fader control selected, click the control field in the Property window
In the Select Gain Control Point dialog, click on the device to control and click Select
Controlling Numeric Properties
If the fader is a standard fader rather than a console fader, you can alternatively set it to control any numeric property in the system.
After selecting the fader and the control field, Click the Endpoints button to change the Select Gain control Point dialog to the Property selection tree. From there you can connect to any numeric property in the tree
If you select a non-numeric property, the system will give you a warning. Avoid using non-numeric properties with the control property. See Controlling Non‑Numeric Properties below
Accept the default Translator properties
Save your Panel. The Fader will now control and update based on the value of the memory slot
For this to work properly there are several other properties that can be used:
Important Note: When using the control property to select the functionality for the fader, the system will try to automatically set the min, max, and step properties if the system knows what they should be for the given control point.
Controlling Non-Numeric Properties
Another option is not to use the control property to bind the functionality and instead to bind the displayvalue and valuechange properties directly to properties. This can be useful in situations where a translation is necessary.
For example, we could connect a Fader to a true/false or GPIO value.
In this case we do not use the control property but would instead enable the binding on the slidervalue property and the slidervaluechanged event.
Set the min property to 0, the max property to 1, the step property to 1, and type to linear
Set the slidervaluechanged event to the GPO pinstate of a GPIO port
For the translation, set 0 to Low and 1 to High
Set the slidervalue property to the same GPO pinstate as the slidervaluechanged event
Reverse the translation. That will make sure that if something else changes the GPIO pin that it will be updated in the fader:
For this example, you may also want to turn the metrics off since there are only two valid states.
This is probably not the best use case for this functionality, but it shows how you can use the Fader control to manipulate any value in the system either directly using the control property if it is a numeric property or via translation and the slidervalue and slidervaluechanged property and event.
The rotary Console Knob may be used in the same way as the Fader above. The same properties for numeric and non-numeric control as well as min, max, step, etc. properties also apply to the console knob object.
This control can also have its control property used to select a console fader or other numeric property in the system to control in the same manner as described for the fader control above. In addition, this component also shares the indicator property with button objects so that the knob color may be changed based on some indication state.
The Console Button component can control and indicate changes in the system. This button works the same as the HTML button but has a more interesting look.
In addition to standard CSS style attributes, customizable properties include:
The Qor/Iq Monitor Section acts as a monitor section for Iq/Qor based consoles. There are a few points worth noting about this component:
The meter option button is reserved for future use
The clock and timer functionality are controlled by Pathfinder Core PRO and not the console and so will not be in sync with the console timer and countdown clock. This is because those control points are not currently available in the LwcpSs control protocol
Dragging this component onto a Panel will present a monitor section for an Iq/Qor console:
To assign the component to a specific Iqx or Qor based console, select the component in the Panel and click the control property
In the list of available control points, you will find one for each Iq/Qor whose type is LwcpSsRoot. Those are the only control points that may be used with this component
Important Note: LwcpSs support must be enabled to use this component. If the component does not work as expected, verify support for this protocol has not been disabled. Access System>Configuration>Advanced Options and look for the following parameter:
SET Devices#0 LwcpSs=False
This version adds a Router XY Matrix component both as a User Panel component and as an additional tab on the Router-Details page. It can be added to a Panel using the Router XY Matrix component.
After adding the component to the page, resize it and use the select a router to use with it.
With the component selected, click the router property
Click the desired router in the list and click Select
The component will not populate with actual router data while viewed in the Panel Designer. This means that the actual column and row header size may be inflated since the default designer example population only has ten sources and destinations. It is useful to view it in the actual executing Panel to see how it will function.
Action Properties
Events
One of the interesting things you can do with the hover and preset events is to bind the path to the IO field of meters. This allows you to create a Panel where hovering over a cross-point also shows metering for that cross-point. Note that metering does not yet support IO binding to virtual router IOs.
Style Properties
Using the XY Matrix
Once a matrix has been added to a Panel, a router assigned to it, and the Panel saved, view the Panel to see how it functions.
Since this component mirrors the functionality of the XY matrix presented on the XY tab in Routers, refer to the Routers chapter for details on how the end-user can use the routing matrix once it is deployed on an HTML5 User Panel.
This component displays the current time using an analog clock style.
This component allows you to define and trigger a countdown. The clock will display the countdown value.
Custom properties include:
Currently, the timer does not automatically reset when the countdown completes. If that functionality is desired, it can be obtained by using the property bindings to hook the elapsed event to the reset state such that when the timer elapses, reset is triggered. This can be accomplished either by using the Flow in elapsed to change the reset or by using the Flow in reset to change based on the elapsed start point.
In both cases, the Panel must be saved with the binding buttons for these properties/events turned on to surface those options in the Flow property tree.
For example:
Enable the binding buttons for both elapsed and reset have been enabled and save your Panel
Select the reset property field and click the start point in the bottom corner
Browse to the User Panels group, locate the digital countdown control in your specific Panel, and select the elapsed Value property
Select True=True for the translation
Click Done. After saving the Panel if the countdown elapses the timer should automatically reset
This component displays the current time using a digital clock style.
This component allows you to define and trigger a countdown. The clock will display the countdown value.
Custom properties include:
Currently, the timer does not automatically reset when the countdown completes. If that functionality is desired, it can be obtained by using the property bindings to hook the elapsed event to the reset state such that when the timer elapses reset is triggered. This can be accomplished either by using the Flow in elapsed to change the reset or by using the Flow in reset to change based on the elapsed start point.
In both cases, the Panel must be saved with the binding buttons for these properties/events turned on to surface those options in the Flow property tree.
For example:
Enable the binding buttons for both elapsed and reset have been enabled and save your Panel
Select the reset property field and click the start point in the bottom corner
Browse to the User Panels group, locate the digital countdown control in your specific Panel, and select the elapsed Value property
Select True=True for the translation
Click Done. After saving the Panel if the countdown elapses the timer should automatically reset
At this point in time, the list selector component should be used primarily by advanced users that understand the API. In a future version, we will add options for simplifying the selection of list content and data. This component provides a drop-down list for selecting elements in the system. For example, it could be used as a source selector for a virtual router or a show profile selector for a console. Unfortunately, until we finish a more intuitive configuration user interface, some knowledge of the API and inner working of PathfinderCore PRO are required to configure this component. A thorough understanding of SapV2 (Appendix A) will help in the configuration of this component. Also, feel free to reach out to support for guidance.
There are 4 properties that are used together to describe the list options and another two for event and state:
Listsearchpath: This holds a SapV2 object path and optional property value for the root from which all objects in the list will be obtained; for example:
Routers#0.VirtualRouter#4 SapObjectType=VirtualSource
This specifies that we will be filling the list with data from virtual sources in virtual router number 4
Devices#0.Qor#[tcp://172.16.1.59:93].LwcpInterpreter#0.LwcpRoot#0.AppControl#0 ObjectName=ShowProfile
This specified that we will be filling the list with data from show profiles on the Qor at 172.16.1.59
Listsearchdepth: The number of branches below the listsearch path root to look for elements; many times, this will be 1 for one level deeper than the root selection, but it could be higher or -1 for infinite For Example:
Devices#0.Qor#[tcp://172.16.1.59:93].LwcpInterpreter#0.LwcpRoot#0.AppControl#0.ShowProfile#0
This is one branch deeper than the search path in the last example above
ItemDisplayProperty: This is the property that will be used as the display data for each object; this is what the user sees; in both of the examples above this would likely be the name property
Itemselectvalue: This is the property whose value will be used in the change and current value events. In the examples above it would be the Id and/or ObjectId properties
CurrentValue: this can be used by logic flows to select the displayed value
Change event: this can be used to make a change when a different item in the drop down is selected; the value that will be available in the translation is defined by the itemdisplayproperty
Let’s work through two examples.
List Selector Example 1
For example 1 we will use the selector to present a list of sources from a virtual router. When the user selects a different source, it will change a specific destination on that router. Make sure you have a virtual router in the system. In this case, we will use VirtualRouter 4. Set the following property values:
Listsearchpath: Routers#0.VirtualRouter#4 SapObjectType=VirtualSource
Listsearchdepth: 1
Itemdisplayproperty: Name
Itemdisplayvalue: Id
This means that we are looking for objects up to 1 level deep below the Routers#0.VirtualRouter#4 path whose SapObjectType=VirtualSource. The last part of this is important so that the selector does not also show destinations. For each source that is found the selector will create an item in the select list whose display value is taken from the name property and whose select value is taken from the id property. This will display a list of sources by name from virtual router 4 and the value used when a selection is made will be the source’s id.
Next, enable the binding on the currentvalue and change properties. For the change property select Destination 1’s current source property in the virtual router.
And use *=* for the translation. This will make sure that any time a new selection is made in the list, the number of that source will be passed to the destination’s currentsource property thereby affecting a route change.
For the currentvalue property, select destination 1’s current source again as the start point. Translation would again be *=*. This will ensure that if the destination route changes even by some other means that the drop down list will change to show the correct source.
In this way, we have created a route selector from a drop-down list.
List Selector Example 2
In example 2 we will use the selector to present a list of show profiles for a qor/iq. When the user selects a different show profile for the qor/iq, it will change the show profile. Set the following property values (modifying for your own device):
Listsearchpath: Devices#0.Qor#[tcp://172.16.1.59:93].LwcpInterpreter#0.LwcpRoot#0.AppControl#0 ObjectName=ShowProfile
Listsearchdepth: 1
Itemdisplayproperty: Name
Itemdisplayvalue: ObjectId
This means that we are looking for objects up to 1 level deep below the Devices#0.Qor#[tcp://172.16.1.59:93].LwcpInterpreter#0.LwcpRoot#0.AppControl#0 path whose SapObjectType=ShowProfile. For each show profile that is found the selector will create an item in the select list whose display value is taken from the name property and whose select value is taken from the ObjectId property. This will display a list of sources by name from Qor/Iq in question and the value used when a selection is made will be the show profile’s id.
Next enable the binding on the currentvalue and change properties. For the change property select the console’s appcontrol ShowProfId property.
And use *=* for the translation. This will make sure that any time a new selection is made in the list, the number of that show profile will be passed to the console’s showprofid property thereby affecting a show profile change.
For the currentvalue property, select showprofid property again as the start point. Again use *=* for the translation. This will ensure that if the show profile changes even by some other means, that the drop-down list will change to show the correct show profile.
In this way we have created a drop-down list for selecting a new show profile.
We realize that until more intuitive user configuration user interfaces are created, this component may be challenging. If you need to understand how to use it for a specific task, please reach out to support and realize that currently this is an advanced feature and may require some time for them to obtain the correct parameters for your task.
HTML or Console Buttons may be mapped to physical LCD buttons in the console or rack mount button panels. Hardware mapping makes the physical button mirror the behavior of the software button. To define this:
Click on a User Panel Button and click the HwMap fiel
A dialog will appear listing the known hardware buttons in the system
The Mapped To field will display a value if the button has already been hardware mapped as each hardware button can only be mapped to a single software button. Physical buttons do not have to be hardware mapped. They can also just be used directly with Logic Flows
If the button you want is not shown, make sure the LCD Panel or console is in the devices list. If not, it needs to be discovered. See the Discovery topic in Chapter 1 for more details on discovering devices.
LCD Panels must be manually discovered in devices using the add and Lwcp discovery. If a console device exists in the system but is not showing the LCD buttons, try pressing a few of the LCD buttons and then refreshing the web page.
Select the button you want to hardware map and click Select
Important Note: Once the Panel is saved, hardware mapping in HTML Panels takes place natively in the application and does not require hardware map Logic Flows as the legacy Panels did.
PULSE0 through PULSE10000 will flash an HTML or Console Button for the specified number of milliseconds (PULSE[ms])and then return to the last requested state. If the indicator state is changed while the pulse flash is in progress the new state will be returned once the flash time is complete. PULSE0 may be used to cancel an in-progress pulse. This allows the easy binding of state (ON/OFF) conditions while allowing an additional Flow to control flashing.
For example, if we want a GPI to cause a button to flash for 5 seconds and then turn on or off depending on the state of VMIX 1, we could build a Flow like this:
This type of Flow is useful for situations where you need to flash a button as an alert but retain a known state after the flashing is complete.
With the addition of PULSE, we can achieve the same functionality with a much simpler Flow:
In this case, the button indication is tied to the VMIX state but setting Pin 1 to Low will cause a 5000ms (5-second) flash. It will then return to whatever state the VMIX is currently in even if that state has changed during the duration of the pulse.
If the button is an HTML5 button this can be made even simpler by binding the indicator to the VMIX state within the User Panel and only implementing the PULSE (flash) flow in Logic Flows.
Creating additional pages is described in the page section of the toolbar documentation earlier in this chapter. In this section, we will explore how to switch between panels and pages. Switching between multiple Pages can be accomplished by using the ChangePage property. Let’s build an example set of linked pages. This example will create a map with an alarm state that can be clicked to obtain more details on the alarm from a second page.
Create a new Panel and click Save. Name the Panel TestMap
Click on your new Panel to select it. In the property grid, expand the style>background section and click the background-image property. A dialog will appear for selecting and uploading images
For this example, we will upload an image of a map of Ohio; click Choose File, select your stored image, and click Upload; the image will appear in the selection list. Click on the image and click Select; the background of the Panel will now display the image of Ohio
Drag a button into the Panel and position it next to Cleveland
Click on your new button to select it. In the Properties grid, modify the button’s Properties:
Your Panel should now look something like this:
Enable the binding for the indicator state of the button
Click on the Start Point and select a SilenceAlarm AlarmState
For the Translation, select AudioPresent as indicator OFF and Silent as ON
Click Done; when the system asks about the mouse down action, click Cancel; in this case, the mouse down is going to change pages and has nothing to do with the property we are picking for the indicator so we will set it separately
Turn on the binding for the Caption property
Click the Flow’s Start Point; select the same AlarmState property and click Select
For the Translation make Silent convert to Err and AudioPresent to OK. Click Done
Save the Panel; at this point, if we were to execute this Panel, the button next to Cleveland should be cyan and OK if the silence alarm has audio presence, and Err and Red if it is silent
From the Page drop down, select [NewPage]; save the new page with the name Cleveland
Drag a new button onto the new page and set its caption to Return
With the button still selected, enable the mouse down binding
Click the End Point. Expand the UserPanels section of the Logic Flow property selector. Expand UserPanel#TestMap>TestMap.Cleveland section and select the ChangePage property. Click Select
Note: If you do not see TestMap.Cleveland in the Logic Flow property selector, it means you have not yet saved the new page.
In the translation set True=TestMap.index and click Done
Click Cancel when asked about updating the button color properties
Save the Page. We have just defined that when we click the return button on the Cleveland page it will set the ChangePage property of the Cleveland page to TestMap.index, effectively returning to the index page
Use the Page drop down to select the index page again
Click the OK button to select it. Turn on the binding for the mouse down event
Click the End Point, select the UserPanels>UserPanel#TestMap>TestMap.index ChangePage property
In the Translation set True=TestMap.Cleveland then click Done
Click Cancel for the binding button color question and save the Panel
Launch the Panel; the button on the main map should switch caption and color based on the silence alarm state; clicking the OK button should take you to a new Page called Cleveland, while clicking the return button should take you back to the main map index page
You are always selecting the changepage property of the current page and defining the Page you want to move to in the button’s translation dialog.
Another interesting point is that the changepage property is also available to normal Logic Flows. For example, rather than binding this to the mousedown event, we could create a flow in Logic Flows that automatically switches the Panel page to the Cleveland Panel whenever a silence alarm occurs and back again when audio presence is restored. Additionally, the changepage property is not limited to pages within the same Panel. You could switch to a completely different Panel.
In a real use case, we would fill the Cleveland page with more information than just a return button. For example, we might create a system flow chart page with meters and buttons and silence alarm states of various parts of the chain to more easily determine where the failure occurred.
HTML5 Panels include a web page component which is essentially an HTML5 iframe component that can be used to embed other web pages and components (for example from a corporate page or video link) into a Panel. It can also be used to embed a different Panel into a parent Panel. For example:
Create a new Panel. Save the Panel and name it SubPanelTest
Drag two buttons into your new Panel
Drag in a web page component
Enable the binding on the src property of the web page component.
Click the left-hand button to select it, enable the binding for both indicator and mouse down, and save the Panel.
Select the mouse down property Flow diagram endpoint and select the iframe src property as the endpoint.
For the translation make the mousedown true equal to:
Replacing the Panel name (shared) and page name (page1) with the name of the Panel and page you wish to display as a subPanel.
It is important to use the framemin.php page rather than the frame.php page so that the full Pathfinder Core PRO header and menu system do not appear in the subPanel.
Click Done and allow the reverse binding to be set up so the indicator will light when the selected page is loaded in the iframe.
Repeat the procedure for the right-hand button, referencing a different page in your Translator statement.
Save your Panel.
When the main Panel is executed, the web page component will load with the Panels specified by your buttons as subPanels. In this way we can create shared content that can be loaded in multiple Panels as shown below:
The example above works great for many kinds of shared content. For example, we could create a Panel for each studio where one of the selection buttons loads a clock and meter subPanel, and another loads an airchain display subPanel.
The challenge comes when the shared subPanel needs to target different things depending on the parent Panel.
For example, what if the subPanel buttons in the examples above were source selectors but needed to target a different destination depending whether they were loaded in Studio 1’s parent Panel or Studio 2’s? The subPanel could be a specific and even paged set of selections common across all studios, but would need to target the fader on which ever studio the subPanel was loaded in.
The temptation to solve this problem would be to create some sort of Logic Flow that changes what happens depending on which Panel last loaded the subPanel (Studio 1, 2, etc.) However, this approach does not allow for the subPanel to be loaded in both at the same time. Also, the subPanel itself has no knowledge that it is loaded as a subcomponent of another Panel.
The only way to solve this problem is to introduce messaging internal to a given instance of a browser, allowing the subPanel to communicate with the parent Panel instead of with a specific destination and vice versa. That kind of messaging is the purpose of the Panel SetLocal and PanelMemorySlot.
Important Note: This is considered an advanced feature and is often used in tandem with the PanelMemorySlot feature.
Each HTML5 Panel includes a write only property called SetLocal. Selecting the overall Panel will display this property in the property tree:
This property sends messages to set another property on the running instance of the Panel, its parent, or a subPanel. Like the PanelMemorySlots property, this property operates inside a single, specific instance of a Panel rather than upon all running instances of a given Panel.
In general, this property’s value will not be set in the Panel designer. Instead, the binding will be enabled and then can be used or bound to other items in the Panel via the Panel’s internal flows. The syntax that makes this possible is:
<target>|<elementId>|<propertyName>=<PropertyValue>
For example, you could enable the binding of this property and then when a button is pressed you can set the value of this property to:
iframe_1|MyButton|Indicator=ON
The target portion can either be:
parent = assumes this Panel is loaded as a webbrowser (iframe) subPanel of another Panel and we wish to send a property change to the parent Panel.
local = tries to set a property on the local instance of the Panel
name of a web browser (iframe) element in the form = tries to set a property on an element in a Panel running in a web browser element in the existing Panel. This variation looks for an iframe in the current Panel of the correct name and then passes the property message to the web page running in that iframe.
Examples:
parent|MyButton|Indicator=ON
Attempts to turn the Indicator property On for a Button named MyButton that is expected to reside on a Panel in which this Panel is running as a subPanel.
local|MyButton|Indicator=ON
Attempts to turn the indicator property On for a button named My Button that is expected to reside on this instance of the Panel.
Iframe_1|MyButton|Indicator=ON
Attempts to turn the indicator property On for a button named MyButton that is expected to reside on a Panel loaded in a web browser (Iframe) element called Iframe_1.
It is important to understand that SetLocal sets properties only in this instance of the browser.
If you have the Studio 1 Panel loaded on two different computers and you perform an action that uses the SetLocal property to change an element’s property, that change will only happen on that computer’s instance of the Panel unless other external bindings are also in use.
If the change is bound to a component inside the Panel it will remain inside that instance of the Panel, but if it is bound to something like a route change that is outside of the Panel it will likely happen on all. This can be seen because using this property as a binding to a component inside the Panel will not generate a Panel based Logic Flow and binding it to something outside the Panel will. The nuances of this are a bit subtle but should become clear as we work through the example below.
Important Note: This is considered an advanced feature and is often used in tandem with the Panel SetLocal feature.
Panel Memory Slots are like normal memory slots except that they only live inside a browser instance of a Panel. They can be thought of as a javascript variable that also raises a change event inside the running instance of the Panel.
The item can be found in the custom tool section. Dragging it onto a Panel will create a dotted component. This component will be invisible when the Panel is actually executing.
Like the SetLocal property above, if this is bound using a Panel Flow to an item inside the Panel (button, iframe, etc), no flow in the larger pathfinder will be created. Instead the value will just be changed or affect change within the running instance of the Panel only. If the Flow is bound to an item outside the Panel (for example a route change of console fader state), then a Flow will be created.
The Panel Memory slot has three important properties/events in the property grid:
Returning to our example above:
In this example, what if the four buttons in the SubPanel are tied to sources on destinations dependent on which studio’s parent Panel the subPanel is loaded in. To accomplish this, we are going to use three Panel Memory Slots: two in the Studio1 parent Panel, and one in the SubPanel. Our configuration might look like this:
In addition to general Panel settings, we need to create two Panel Memory Slots: currentsource and selectsource.
Memory slot: currentsource
This memory slot will pass the currentsource value of a virtual router destination to a specific subpanel instance. This is accomplished using these bindings:
panelmemoryslotvalue will be bound to the currentsource property of a virtual router destination using a Panel flow and a translation like this: *=*
This means whenever the currentsource property of that virtual router destination changes, the currentsource value will be assigned to this memory slot.
panelmemoryslotchange will be bound to the setlocal property of the Studio1 Panel using a translation like this: *=iframe_1|currentsource|Panelmemoryslotvalue=*
This means whenever the currentsource value changes, it will attempt to also set the same value on whatever Panel is running in the subPanel loaded to iframe_1.
Memory slot: selectsource
This memory slot will change the route on the destination whenever its value changes.
panelmemoryslotchange will be tied to the same virtual router destination’s current source property.
raisetoserver needs to be set to true.
General Settings
setlocal needs to be enabled.
In this shared SubPanel, in addition to general Panel settings, we need to create one Panel Memory Slots: currentsource.
Memory slot: currentsource
This memory slot will receive and match the current source from the parent’s currentsource panelmemoryslotchange change event. This is accomplished using these bindings:
panelmemoryslotvalue must be enabled.
panelmemoryslotchange must be enabled.
*** General Settings
setlocal needs to be enabled.
We will bind each of the button indicators to the value of currentsource with a translation like:
1=On
*=Off
Where 1 is the source whose button indicator we want to light
When the Panel is running, this will cause the subPanel to light the correct button depending on which source number has been fed to it from the parent.
Last we will bind the button press to the Shared Panel’s setlocal property with a translation that looks like:
True=parent|selectsource|panelmemoryslotvalue=1
Where 1 is the source whose button has been pressed.
This will allow the button press to pass the source selected to the parent Panel’s selectsource memory slot. Which if we remember is bound via its change event to the actual destination’s currentsource.
The interesting part of the steps above is that we can now clone Panel 1 to Panel 2. In Panel 2 we change the bindings on currentsource and selectsource to a different destination for Studio2. And we make sure that the Panel selection buttons point to studio 2’s iframe rather than studio 1’s. But the shared Panel does not need any changes. It will just start working for studio 2 and studio 2’s destination. More importantly if we need to add functionality to the shared component it will work for both studios.
The key thought process that needs to be utilized is that if the shared content manipulates something specific then none of these steps are necessary. But if the shared content needs to manipulate something different depending on the parent Panel it is loaded in, then we need to pass messaging between the internal Panel and the parent to accomplish that.
This is one example of how these features may be used. It could be expanded greatly. For example, the src property of the iframe could be assigned using a setlocal so that it does not need to be updated for each studio page. Or we could add additional Panel memory slots for manipulating other destinations or even dynamically selecting the destination at the parent level.
Additionally, there are future features planned for embedded routing components that may make this specific example less necessary. However, even if we add such components there will always be situations that are custom and do not work with our preconceived components.
It should also be pointed out that in many situations it is probably simpler, easier, and more understandable to just clone. Because this is a more advanced feature it is also more advanced to understand. However, for the times when the embedded content is duplicated in too many places and needs to be periodically changed, this allows for that kind of reuse.
Prior to Pathfinder Core PRO’s HTML 5 Panels, User Panels could be created using a variation of PanelDesigner from the original Pathfinder PRO product. As this functionality is deprecated, we would urge all users to migrate to the much more powerful HTML5 Panels.
The Panels created in the original Pathfinder PRO are called Legacy User Panels and are not interoperable with the new HTML 5 Panels. For example, you cannot open an HTML5 Panel in PathfinderPC/Mini and you cannot open a Legacy User Panel in a web browser.
When you first log in to Pathfinder Core PRO, the username and password you use is: Username: Admin Password: Admin
However, this can be changed and controlled using the Users link on the navigation bar.
Click edit to change a user’s password or click the plus icon to add users to the system. Use the minus icon to delete users from the system. The system will not allow you to delete all users. At least one user must always exist in the system or there is no way to use it. Therefore, the user interface will show an error message if there is only one user left and you try to delete it.
After creating a new user, that user’s credentials may be used to log into the Pathfinder Core PRO’s web pages or using PathfinderClient, PathfinderMini, or PanelDesigner.
Users may be Administrative users who have access to everything or standard users. It is very important never to delete all of the Administrative users or you may lose access to the system requiring support to get access to the operating system to reset things. If you select a standard user, additional options will appear for defining what rights the user has. The CanLockRoutes defines whether the user has the ability to lock and unlock routes. The Route locks do not apply option is for future use.
The arrows next to each section may be expanded to specify the user rights. By default a standard user will see all navigation menu items but will have no rights in the API so most or all of the menu items will not populate with any data.
The menus section allows you to define which navigation bar menu items are available to the user.
The menus listed are the same as in the navigation bar on the web page. By setting items to hidden they will no longer appear in the user’s navigation bar.
The allowed APIs section defines in much more detail what the user may access via the web pages, port 9600 login, and the client applications:
Each item in the displayed list has several options:
Inherit means that branch in the tree inherits the rights of the parent branch. In the case of root level objects such as Logic Flows the inherited state is No Access. No Access explicitly denies access to that branch.
Display allows the user to display the resource but not change or use it. For example, if you wanted the user to be able to view the route states of a router but not make any route changes, then selecting display for the router access would be a good idea.
Change/Use allows the user to do normal operations with the resource but not change the definition of the resource. For example, in the case of routers, selecting change/use would allow the user to make route changes on the router but would not allow them to add sources or destinations to the router.
Full access allows the user to have complete control over the resource including the ability to add to or delete the resource. This is the equivalent of Administrative rights to the resource.
It is important to note that by default, branches below a specific branch inherit the parent’s properties. So, if you set the Routers branch to display, all routers will be displayed. You can then set no access on routers you do not want the user to see and/or Change/Use access to routers you want them to be able to use.
SapV2 stands for Software Authority Protocol Version 2. It is the glue that provides all the communication between the services insider Pathfinder Core PRO. It is also available for control and troubleshooting purposes on port 9600 for those who wish to take the seriously deep tech dive into Pathfinder Core PRO.
Important Note: Since SapV2 makes up the guts of inter-process communication within Pathfinder Core PRO, it is both incredibly powerful but also incredibly dangerous in the wrong hands. Backups are highly recommended before working with this protocol as it can be used not only to monitor objects but to create and destroy them. For instance, all of the web page user interfaces manipulate the Pathfinder Core PRO configuration using this API; therefore, you can do anything the configuration web pages can do using this protocol. BE CAREFUL!
In order to interact with SapV2, open a telnet session to port 9600 on the Pathfinder Core PRO.
In order to work with the system in any way using the protocol, you first must log in:
Replace the bracketed username and password with a valid user and password.
For example:
SapV2 syntax is based on Axia’s Lwcp specification for syntax, but with some additional features that allow for object and property discovery and listing. As such, the Lwcp documentation can be a useful precursor to reading this appendix.
All messages in SapV2 are case insensitive and end with a carriage return and line feed. Each SapV2 message may consist of an operator, object path, list of properties, and list of system items. The operator and object path are required. For example:
In the message above:
Operator = get
ObjectPath = Devices#0.AnalogNode#[tcp://172.16.1.81:93]
Properties = Name, Description
System Items = $TXID=555
The list of possible operators is listed and described later in this document.
The object path represents branches of a tree like a file system path where the separator between each branch is a period. Each branch consists of the branch type followed by the pound sign and the unique identifier for the branch. In the example above, there are two branches:
Devices#0
AnalogNode#[tcp://172.16.1.81:93]
The branch type of the first branch is Devices and the identifier is 0. The second branch type is AnalogNode and the identifier is [tcp://172.16.1.81:93]. The identifier for the second branch is wrapped in square brackets because the identifier includes symbols that are reserved for object path segregation – namely the period. If a branch identifier includes periods or the pound sign, the identifier must be wrapped in square brackets. Spaces are not allowed within branch identifiers and therefore are not allowed within the object path.
Commas between properties are optional. Commas should not be used between system items.
System items always come at the end of a message and system items all begin with the dollar sign. Therefore, when parsing a SapV2 message, the system item section begins when you encounter an un-escaped space followed by a dollar sign. Since any property value that includes a space must be enclosed in quotes, dollar signs after a space may exist in a property value if they are enclosed in quotes. If a double quote needs to be embedded within a property value, it needs to be escaped with the backslash - \”. If a carriage return and linefeed is to be embedded in the value of a property use the %BeginEncap% %EndEncap% as defined in the Lwcp specification.
For example:
In the example above the property value of Name is:
AAND-001-081 $Hello
The parser does not start parsing the system items when it reaches the space and dollar sign because it is enclosed in quotes as part of the property value. Instead, the system item list begins at $TXID.
In the following example, we needed to include a carriage return and linefeed as part of the value of a property, so we use encapsulation:
In this example, the value of the memory slot will be set to “My Name is Freddy” with a carriage return and linefeed between Is and Freddy. Some properties in the system also accept escape values to represent carriage return and line feed. For example, the generic protocol translator accepts \cr\lf for its ToSend property.
Unlike the current version of Lwcp, SapV2 has been designed to extend Lwcp to allow for the discovery for all objects and properties in the system. As in Lwcp, by using the get operator, you can specify an object path and a property and retrieve the property’s value:
However, in SapV2 if you do not specify a property, that means you are requesting a list of all the properties and values that the object has.
Additionally, if you place the object path separator at the end of the object path (the period), it means you are requesting the list of sub objects of the requested object.
In this way, it is possible to walk the tree and discover all objects and properties in the system.
If you wish to know when a list has been completely returned, you can add the $DONE system item.
By using the $DONE system item, the last item in the list carries the $DONE item.
If you only specify the period as the object path then you will get all of the root level objects.
Rather than walking the tree to discover all of the objects, it is also possible to use the $MAX_DEPTH system item to define multiple layers of returned branches at once.
Every branch that is up to two levels beyond the specified object path is returned in this case. If you leave off the ending period, it will return all of the same object paths above but it will also include all of the properties for each object path.
Using the $DONE in addition will return $DONE on the last message item in the list.
The value -1 is special to the Max_Depth system item as it represents infinite. Therefore, using a Max_Depth value of -1 returns everything below the current branch. For example, the following command would return all of the objects at any branch level underneath Devices#0:
This command would return all of the objects and their properties at any branch level underneath Devices#0:
Use the $MAX_DEPTH with some caution as it can take a bit of CPU power to generate some of these large lists. It is better to subscribe to changes of a certain branch and then cache the results of MAX_DEPTH rather than polling large lists.
It is also possible to use a property name with the MAX_DEPTH system item. For example:
Would list every instance of the PinState property that exists below Devices#0.WinDriver#[tcp://172.16.1.254:93] with the $DONE at the end. The response (abbreviated) below might look like:
Note: The example above is abbreviated. This would actually return 120 INDIs (24*5 pins).
Multiple properties may also be returned in which case only objects that contain both properties will be returned. For example:
You can also specify a value in a property and then only items where the property matches that value will be returned.
All of the examples above also work with subscriptions. For example:
This will not return anything immediately. Any time any property beneath Devices#0 changes, it will get returned.
If you wanted to subscribe to all GPIO changes you could send:
Most object may also be created and destroyed using the INIT and DEL operators. The arguments required to create an object can be obtained by sending a get command to the object path of an existing object with the special hidden property called Constructor. See Hidden Properties for details.
In this case, the final object in the path does not have an ID associated with it because the constructing parameters will define the ID as part of the construction process. If we were subscribed to MemorySlot changes, we should see the results of this creation returned as a NEW message.
Objects may be deleted from the system using the DEL operator and an object path. Properties are not valid in a Delete message.
If the connection has subscribed to changes that match this deletion, there will be a response:
The LED operator is the response for a DEL operation but will only be returned if a subscription has been made that matches the deletion object path.
The RFS operator stands for Request For Syntax and the server will respond with SFR which stands for Syntax For Request. The RFS operator allows you to discover what a specific property expects for its value.
We get a variety of information about the property from this command. We know that the property is read/write, that it expects an option and the valid options are l or h. We know that it is a stable property which means that its syntax should not be expected to change in future versions of PFCore unless carefully noted and/or with backward compatibility handling. We also know that the l or h may be displayed in a more user-friendly fashion in a UI as Low or High. And we know that this property is one that should be displayed in the simple tree of logic flows (IsSimpleUi).
The list of syntax types that will be returned is documented in the RFS/SFR notes later in this document.
It should be noted that in some places in the system (specifically underneath the Routers#0 root object), object identifiers use a URI type syntax. For example:
Routers#0.AxiaAudioRouter#1.AxiaAudioSource#[tcp://172.16.1.71:93?l=SRC&d=src&i=66&t=aaudio]
This identifier (tcp://172.16.1.71:93?l=SRC&d=src&i=66&t=aaudio) is called a PathIo and uniquely identifies an IO in the system. It may be broken up into its relative pieces as follows:
tcp://172.16.1.71:93: This is the uri of the ip address and port of the device on which the IO was discovered.
l=SRC: This stands for Level and could contain SRC, DST, GPI, GPO
d=src: This stands for Direction. This seems redundant to level but it is not. This defines whether the IO is a source or destination irrespective of whether it is a GPIO
i=66: This is the IO port identifier as reported by the equipment
t=aaudio: This is the type of IO which could include
aaudio: AxiaAudio
agpio: AxiaGpio
virt: Virtual
Each operator is comprised of up to 8 characters and are always terminated by a trailing whitespace.
SET: Request to update information on the system.
GET: Request for information from the system.
INDI: Indication that information on the system has changed.
SUB: Request to receive indications from an object path on the system when changes occur.
UNSUB: Request to stop receiving indications from an object path on the system.
RFS: Request for property formats of an object on the system.
SFR: Response to property format requests.
INIT: Request to create a new object.
NEW: Response message for a successful init if subscribed.
DEL: Deletes an object from the system.
LED: Response message operator for a delete message if subscribed.
NOP: No operation.
SYNC: Used to pass a message for cluster synchronization purposes.
LOGIN: Login to the system.
ACK: Acknowledgement from the system to a request tagged with the $ACK system item.
PUB*: Request to anchor the object path or paths.
UNPUB*: Request to un-anchor the object path, or paths.
ATCH*: Attaches to an object (macro for SUB then PUB on the object).
ATTACH*: Weak alias for ATCH.
HELP*: Request for helpful information about an object or property.
LINK*: Request to create a link between an object and a host object.
UNLINK*: Request to remove a link between an object and a host object.
* For Future use. Not currently implemented.
There are a couple of operators that break the rules about requiring an object path. These operators stand on their own as complete commands:
LOGOUT: Logout of the system.
EXIT: Request that the system breaks the current connection.
QUIT: Alias for Exit.
LOGIN {username} {password}
Example:
Returns:
GET {Object}.{Object} {Property}
Example:
Object may be a specific object. Object may be terminated with a full stop (.), which indicates that a listing of all descendent Objects is being requested.
Object may be terminated with a pound sign (#), which indicates that a listing of all objects matching that type is being requested. * * For Future use. Not currently implemented.
Property may not be specified, in which case it is a request for all of the properties for that object.
Important Note: Objects are often returned in alphabetical order to make them easier to read and/or use in a user interface. However, it takes extra CPU power to organize the return list alphabetically. For faster response times and lower CPU impact, the $UNSORTED system item may be used.
SET {Object}.{Object} {Property}={Value},{Property}={Value}
Sets a property value in the system. Use RFS to determine what the property expects and whether it is writable.
Example:
Note: A SET will only respond with a change message if there is a subscription active that meets the bounds of the change.
INDI {Object}.{Object} {Property}={Value}
This is a response from the server for a get command or for a change that is within the bounds of a subscription request.
Example:
SUB {Object}.{Object} {Property}
Subscriptions can be to an Object Path, an Object, or a Property. $MAX_DEPTH may also be used to subscribe to property changes at different depths.
Example:
INIT {Object}.{Object} {ConstructorProperty}={Value} {ConstructorProperty}={Value} ...
Creates an object which is defined as initable within the system.
Example:
DEL {Object}.{Object}
Deletes an object which may be removed from the system.
Example:
NOP {Object}.{Object}
This operator stands for No Operation. The rest of this message should be ignored, but it should still be structured as a valid SAPv2 Message. This can be used in configuration files that store SapMessages and essentially will act like remarking out the message. This allows you to leave the message in the file for future use. The system will read and parse the message, but will not act upon it.
Example:
Sync {Object}.{Object} Property
This operator stands for Synchronize. It is used exclusively for internal clustering synchronization messages.
Example:
RFS {Object}.{Object} {Property}
SFR {Object}.{Object} {Property}=[{Read/Write},{Syntax},{DirectSubscriptionOnly},{IsStable},{SyntaxUsage}],{Property}=[...]
RFS is a request for syntax request and SFR is the server’s response.
Example:
The SFR response may carry multiple pieces of information about the property including:
Read/Write Values
RO: Read Only
WO: Write Only
RW: Read and Write
Syntax Values
BOL[[true,TRUE,t,1],[false,FALSE,f,0]]: Boolean value with True and False specifics
ENU[Value,Value,Value(Display)]: Enumeration
LST[Separator,Syntax Type]: List
TBL[Header,Header,Header,Header,Header]: Table
NUM[Minimum,Maximum,Increments]: Numeric value
TXT[Restrictions]: Text value with Restrictions on what type of text
BIN: Binary value
HEX: Hexadecimal value
BMP: Bitmap value
PNG: Portable Network Graphics value
URI: Uniform Resource Indicator value
IsSimpleUi: True or False
IsStable: True or False
Notes on RFS implementation.
Plain Text: SyntaxType=TXT
Boolean: SyntaxType=BOL
Number: SyntaxType=NUM
Number range
SyntaxType=NUM[<Miniumum>,<Maximum>,<increment>]
SyntaxType=NUM(1,10,1)
Enum
SyntaxType=ENU[value(display),value(display),value(display)] *
IP Address: SyntaxType=TXT[Ip]
Netmask: SyntaxType=TXT[IpNetmask]
Mulicast IP: SyntaxType=TXT[IpMcast]
StaticOptionList
SyntaxType=OPT[Single:optvalue(display),optvalue(display)] *
MultiSelectStaticOptionList
SyntaxType=OPT[Multi:optvalue(display),optvalue(display)] *
StaticSapOptionList SyntaxType=OPT[SapSingle:(sapPathForList),valueProperty,displayproperty] *
StaticSapOptionList
SyntaxType=OPT[SapMulti:(sapPathForList),valueProperty,displayproperty] *
DateTime: SyntaxType=TIM
Color: SyntaxType=COL
Vb6 OLE Style Color: SyntaxType=OLE
URL: SyntaxType=URI
*display is optional - if not present uses the optvalue
Note1: Syntax types with options have the option data (shown in the outer []) expressed in the syntaxUsage field of SapProperty Attribute. Note2: ENU and StaticOptionList are really the same except the values in ENU must be numbers. Note3: If the SapSingle is used with an object path of .. , the .. refers to the object path 1 level up from the current object level (example if the property is on an object and the path to that object is devices#0.powerstation#0.lwcpinterpreter#0, .. means devices#0.powerstation#0. Note4: If the SapSingle is used with an object path of @ , the @ refers to the property object’s current object path.
{ObjectType}#{ObjectId}.{ObjectType}#{ObjectId}.{ObjectType}#{ObjectId} . . .
An Object path is comprised of a list of branches similar to a folder structure where the period is used as the separator. Each Branch is comprised of a type and an Id separated by the pound sign.
Example:
Devices#0.WinDriver#[tcp://172.16.1.254:93].LwrpInterpreter#0.LwrpRoot#0.Gpo#6.GpioPinState#4
If the id contains any characters that are reserved for the path architecture (. or #), the id must be enclosed in square brackets. Spaces are not allowed in object paths.
Property Names may not include spaces and must not begin with the dollar sign. The equals sign with no spaces is used between the property and its value where a value is relevant to the command usage.
This version includes data obtained from the STAT command in Lwrp for devices that support it. These read-only properties may be found in the API tree in logic flows under the device branch that supports it.
There are four types of STAT objects described below:
Important Note: Stat Sync data collection is not enabled by default as this process generates a lot of data, especially in systems with large numbers of xNodes. To enable stat sync data collection for a given device, use the API on port 9600 and send the command:
Also note that while turning the SubscribeToSync option on for a device will be saved between restarts, the state is not currently cluster synchronized.
Because the API matches the object layout of the device’s Lwrp protocol some of the new settings can be found in a variety of places. The new paths include:
LwrpInterpreter#0.LwrpRoot#0.Decoder# LwrpInterpreter#0.LwrpRoot#0.Encoder#
LwrpInterpreter#0.LwrpRoot#0.Cfg#0.Enc# LwrpInterpreter#0.LwrpRoot#0.Cfg#0.Dec#
For example, the destination properties for a decoder or encoder are available via the LwrpRoot#0.Cfg#0.Enc and LwrpRoot#0.Cfg#0.Dec paths whereas the encoder algorithm and bitrate settings are available via the LwrpRoot#0.Encoder and LwrpRoot#0.Decoder paths.
The LwrpRoot#0.Cfg#0.GPIO path controls whether the GPIO ports are enabled or disabled in the system. The actual GPIO port may or may not be present depending on whether the encoder or decoder are active. All of these paths are available for use in Logic Flows via the API tree, however, some are read-only and so will only appear when using a start point.
To figure out which properties match config options in the Iport UI, open a TCP connection to PathfinderCore PRO using Putty to port 9600 and subscribe to changes on the device in question.
Then you can make changes in the IPort’s UI and see the changed properties in Pathfinder Core PRO. This can be useful to see where certain properties are located in the API tree.
The Constructor property will return Init messages required to recreate an object that supports that property. However, it will not show up in the general list of properties for an object. It must be queried directly.
If the property value is to include a space, it must be surrounded by quotes.
If the property value is to include a carriage return and/or line feed, it must be encapsulated using %BeginEncap%%EndEncap%.
If a double quote needs to be included in the value, it needs to be escaped using the backslash.
$ACK: Request Acknowledgement to Operation.
$TRXID/$TRXI/$TXID: Transaction ID to track response to Operation.
$IND/$INDI: Request Indication from SET without needing a subscription.
$DONE: Requests that the DONE system item be applied to the last message returned from a request.
$PROPATTR: Specifies that the properties in the GET/RFS messages are Syntax Format properties - such as getting all properties that are Readwrite=RO.
$OP: Operation. Used in ACK Operation responses to denote the Operation that was sent with the $ACK System Item. Also used in Subscription operations where you want to specify only messages with a specific operator. For example DEL or LED messages. (eg. sub MemorySlots#0 $MAX_DEPTH=-1 $OP=LED).
$MAX_DEPTH: Used to specify the Depth of the subscription or return. -1 equals all object paths below the request.
$UNSORTED: Return messages do not need to be sorted for easier readability. Used when querying large lists where order does not matter.
$CONTAINS_PROP: Indicates a request for objects that contain the specific property. If message ends with object separator (.) then it will just return objects. Otherwise, it will return all properties of the objects that include the requested property. This is not valid for subscription messages. It is only valid for Get. Please note that this can cause heavy cpu load as it requires walking the object tree and iterating all properties in each object. Use sparingly and cautiously.
$EXCLUDE_PROPS: Exclude certain properties from the return.
$SHOW_CLUSTER: Certain objects related to clustering are hidden and not returned in subscription and get responses unless this system item is included
$CLUSTER_CHANGES: Subscribe to only changes that are related to cluster synchronization. Returns will carry this as well.
$CLUSTER_QUIET: This has special meaning to Set and Init messages. It means the message is the result of a Change on another server and is being set to keep in sync. And therefore the change should not be broadcast to other servers that have subscribed to cluster changes to prevent numerous duplicate messages.
$LAST_UPDATE: Used in conjunction with $CLUSTER_CHANGES to show the date/time stamp of the most recent update.
$INCLUDE_MOUNTS: This will also follow and include mount points from an object to a mounted object. For example, from a route point to the mounted device IO. It applies to Get, Set, and Sub operator. Mount points are currently used sparingly within PathfinderCore PRO so this option is only useful in come situations.
$STATUS*: Response status code
$COUNT*: Request for number of objects below the current object path
$DEPTH*: Request for an operation to be iterated to a specified depth. Default is 1, and a non-positive integer depth will result in infinite depth.
$TSTAMP*: Time stamp.
* For Future use. Not currently implemented.
$PROPATTR is the system item for Property Attribute. It can equal AND or OR.
$PROPATTR=AND <Default> $PROPATTR=OR
If this attribute is set it means that the properties defined in the property list of the Get/RFS message are not literal properties. Rather, they are requesting objects that have properties that have formats described in the property list.
For example:
The pipe allows listing multiple options for a format value. The And/OR in the PropAttr defines whether a match is made if either of them matches or only if all match when multiple properties exist in the message.
The Take/Clear button set will display either Take or Clear depending on whether the selected route is currently active or not. Click this button to either Take or Clear the route.
The Lock/Unlock button set may be used to add or remove a user-level lock to an existing cross-point. The ability to unlock a route is restricted by user permissions.
The Cancel button will clear all selected presets without making any changes.
No route exists at that cross-point
The route exists at that cross-point
The cross-point is locked at the system level
The cross-point is locked at the user level
The cross-point has been preset for an action
If the user presses the button, the input value gets set to True based on the inbound translation:
If the user does not release the button for 5 seconds, then the True value gets passed to the Combiner output which is being monitored by the output Translator:
The majority of these properties are standard CSS style properties used by any web page designer. One of the best references we have found for CSS properties is w3schools.com: . This link will provide information about all of the CSS properties exposed in the property grid along with their meaning and usage information.
To learn more about this feature visit:
(In true radio fashion, the KRUD logo was lifted with no regard to the copyright owned by Jim Radcliffe and Brian Wilson. Their work is genius. Check it out at . Even better, embed it in a Panel using the Web Page component.)
Important Note: to see a video presentation of the functionality described below visit this link:
Reference
Notes
1
The unique name of the e-mail message.
2
The SendTo e-mail addresses to which the message will be sent.
3
The Subject line to be used by the e-mail message.
4
Displays the last time the message was sent.
5
Displays information about whether the last send attempt was successful or failed.
6
Click edit to modify the associated e-mail message’s properties.
7
Click the minus icon to remove the associated e-mail message.
8
Click the plus icon to add a new e-mail message.
Field
Notes
Message Name
Type a Name for this email message. This name will be used when this message is accessed via Logic Flows or the API.
Recipient Email Address(s)
Type a comma-delineated list of e-mail addresses to which this message will be sent.
Subject
Type a Subject line for generated emails.
Auto send on body change
When checked, you have the option to define new body content in your e-mail via a Logic Flow, and have it send automatically without having to set the Send property.
Body
Type the text of the e-mail message. You can embed the date and time the message was sent into the subject or body of the email using the variable <%DateTime%>. In the example above, when the email is created, the Subject like would include the current date and time like this:
Hello YYY – 2017-12-14T13:51:28.033-05:00
While the Body of the message would look like this:
Audio failure? YYY? - 2017-12-14T13:51:28.033-05:00
Name
Description
Start Point
A property in the system being monitored for changes.
End Point
A property in the system which will be changed by the Logic Flow.
Translator
A list of changes that can be applied to the value of a property.
Combiner
A way to logically combine multiple states using logical operators such as AND, OR, NOT, etc.
Control
Description
Start Point
Allows you to add a Start Point and a Translator to the left side of a Combiner or to extend the Flow’s start to a new Flow.
Combiner
Allows you to add a Combiner.
End Point
Allows you to add an End Point and a Translator to the right side of a Combiner or to extend the Flow’s end into a new Flow.
Delete
Allows you to delete a Flow, Flow Combiner, or Translator.
Add
Creates a new Flow.
Cut
Cuts a Flow to the clipboard.
Copy
Copies a Flow to the clipboard.
Paste
Pastes a Flow from the clipboard.
Disable/Enable
Disables or Enables a Flow, Combiner, or Translator.
Apply Button
Applies pending changes to the system.
Clear Button
Clears pending changes and reverts to the system’s actual state.
Size Slider
Increases or decreases the size of the Flow objects in order to display more items on one screen.
Type
Minimum Inputs
Maximum Inputs
AND
2
Any
OR
2
Any
NAND
2
Any
NOR
2
Any
XOR
2
Any
XNOR
2
Any
NOT
1
1
RELAY
2
2
PASSTHRU
1
1
EQUALITY
2
Any
DELAY
1
1
Type
Minimum Inputs
Maximum Inputs
NOT
1
1
PASSTHRU
1
1
DELAY
1
1
Type
Minimum Inputs
Maximum Inputs
AND
2
Any
OR
2
Any
NAND
2
Any
NOR
2
Any
XOR
2
Any
XNOR
2
Any
RELAY
2
2
EQUALITY
2
Any
Field
Description
Delay Time
Type the Delay duration in milliseconds.
Reset delay if input changes
The delay countdown starts every time the input changes its value. If this option is selected the countdown will be reset whenever the input value changes.
If you have a parameter that is fluttering and you only want an action to happen if it settles down to a fixed value for more than x milliseconds, this option should be checked.
If you want the value to happen x milliseconds after a change even if additional changes happen during the countdown (delay time) then this option should be unchecked.
Output Value
From the drop-down list, select the option that defines whether the value that is passed through is the input value at the start of the delay countdown (Value at input when timer starts) or the end of the countdown (Value at input when timer ends).
This option accounts for the possibility that the input value could change again during the delay countdown and allows you to define which value gets passed through.
Cancel Value
Type an input value that will cancel the timer and not make any change to the Combiner output (not pass any different value through).
Clear output after countdown completes
Used to make the delay Combiner function in a momentary fashion. See note below.
Clear Value
Type a specific value as the clear state when the clear output after countdown completes option is selected.
Reference
Notes
1
The Filenames of all available logs. See “Log File Maintenance” section later in this chapter.
2
The date and time the log was Last Updated.
3
The File Size in kB of the log.
4
Options to either Delete or Clear the log.
Log File Type
Description
Log File
Stored locally on the Pathfinder Core PRO system, these logs are subject to regular rotation, deletion, and cleanup depending on space requirements. This Log File Type is useful for logging recent events but should not be relied upon for long term storage.
TCP Listener
This type of Log Writer will listen on a TCP port and send the log entries as plain text messages to any application that connects. For example, you could use a putty (telnet) session to connect to the system and monitor log changes dynamically.
TCP Client
This type of Log Writer will attempt to connect to an IP address and port, and if it can make the connection, will send the log messages as plain text messages to the listening application.
Syslog
This is the recommended method for long term log storage. Syslog is a highly utilized standard protocol for log collection, viewing, and storage used by many systems and IT scenarios. A number of syslog collection applications exist, both freeware and commercial. A quick internet search should provide you with a variety of options.
Field
Description
Connection Type
From the drop-down list, select either TCP/UDP Listener or TCP/UDP Client, depending on whether:
The system using this emulator will establish the connection to Pathfinder Core PRO (an inbound connection—select TCP/UDP Listener) or,
Pathfinder Core PRO should initiate the connection to the other device (an outbound connection—select TCP/UDP Client.)
Port
If the other device is initiating the connection to Pathfinder Core PRO (Pathfinder Core PRO is the TCP/UDP Listener) type the port on which Pathfinder Core PRO will listen for the connection.
If Pathfinder Core PRO needs to initiate and maintain the connection (Pathfinder Core PRO is the TCP/UDP Client) type the IP address and port of the device to which Pathfinder Core PRO should connect.
Escape Sequence
Character
\cr
Carriage Return
\lf
Line Feed
\t
Tab
\
used to un-escape an escape
\%XX
Hex value where XX is a two-character hex value for the character to send or receive.
Escape Sequence
Character
\r
Carriage Return
\n
Line Feed (new line)
\t
Tab
\e
Escape
Field
Description
Connection Type
From the drop-down list, select either TCP Listener or TCP Client, depending on whether:
The system using this emulator will establish the connection to Pathfinder Core PRO (an inbound connection—select TCP Listener) or,
Pathfinder Core PRO should initiate the connection to the other device (an outbound connection—select TCP Client.)
Port
If the other device is initiating the connection to Pathfinder Core PRO (Pathfinder Core PRO is the TCP Listener) type the port on which Pathfinder Core PRO will listen for the connection.
If Pathfinder Core PRO needs to initiate and maintain the connection (Pathfinder Core PRO is the TCP Client) type the IP address and port of the device to which Pathfinder Core PRO should connect.
Reference | Description |
1 | HTML5 Panels are displayed as links. Clicking that link will display the Panel within the context of the Pathfinder Core PRO web pages. |
2 | Click this icon to open the Panel in its own window without most of the browser menu systems. |
3 | Click the Edit link to open the Panel in the HTML Panel designer |
4 | Clicking the Clone link will make a duplicate of the Panel as it exists under a new Panel name. |
5 | Click the minus icon to delete a Panel |
6 | Click the plus icon to open the HTML Panel designer and create a new Panel. |
Auto Scale Setting | Description |
None | No value or selecting a value of none will disable Autoscale functionality, allowing the component size and placement to remain fixed regardless of the browser window size. |
based_on_height | As the user changes their browser’s height, the amount of change will be used as the factor for scaling up the height and width of the components. Changing the browser width will do nothing. |
based_on_width | As the user changes their browser’s width, the amount of change will be used as the factor for scaling up the height and width of the components. Changing the browser height will do nothing. |
height_and_width | As the user changes their browser’s height or width, the amount of change in height will be used as the factor for scaling the height of the components, the amount of change in width will be used as the factor for scaling the width of the components. |
Property | Function |
caption | Updates the inner HTML text of the button. |
hwmap | Used to select a hardware LCD button. This hardware LCD button will then mirror the behavior of the software button. See the Hardware Mapping Buttons topic below for more information. |
indicator | Used to set the button indication to On, Off, Flash, and PULSE0 through PULSE10000. See the Button Indicator PULSE Values topic below for more information. |
backcoloron | Sets the button’s color when the indicator state is on. |
backcoloroff | Sets the button’s color when the indicator state is off. |
Property | Function |
textContent | Updates the inner HTML text of the label. Binding this property allows the label caption to be dynamically updated by Flows. |
Property | Function |
value | Captured user input which can be applied to Logic Flows to make decisions and changes. |
type | Allows you to switch the input type between several different possibilities including text, number, color, etc. For example, if you drag an Input box onto a Panel and change the type to number and then fill in the min, max, and step properties, you will obtain an input box with a set of arrows for incrementing and decrementing the value property. |
Event | Function |
change | The change event is raised when the user presses ENTER or moves out of the input field |
input | The input event is raised as the user makes changes/types. |
Property | Function |
src | The url of the page to be displayed. |
Event | Function |
load | The load event cycles False when the frame starts to load and True when the loading is complete. |
Property | Function |
IO | Used to select the audio IO this meter will display. |
orientation | Used to select whether the meter will display horizontally or vertically. |
meterscale | Used to select the scale of the meter. Options include standard, linear, and british. |
metrics | Used to define whether the numerical values for the meter are displayed next to the meter or not. Options include none, lefttop, middle, rightbottom. |
optimumpercent | Defines the optimum meter percentage. |
autosizefont | Used to define whether the metrics font will scale automatically as the size of the meter is adjusted. |
led>color | Properties used to adjust the on and off colors used for each of three sections of the meter. |
Property | Function |
IO | Used to select the audio IO this meter will display. |
orientation | Used to select whether the meter will display horizontally or vertically. |
meterscale | Used to select the scale of the meter. Options include standard, linear, and british. |
metrics | Used to define whether the numerical values for the meter are displayed next to the meter or not. Options include none, lefttop, middle, rightbottom. |
autosizefont | Used to define whether the metrics font will scale automatically as the size of the meter is adjusted. |
led>color | Properties used to adjust the on and off colors used for each of three sections of the meter. |
led>border | Properties used to adjust the border settings of the individual LED blocks. |
Property | Function |
IO | Used to select the Audio IO this meter will display. |
control | Adds support for LwCH options and Qor faders. See the Setting the Control Property topic in this chapter. |
metrics | Determines how the numbering for the fader is displayed. Options include none and lefttop. |
metricoffset | The percent of width used for the metrics. |
metriclinecolor | The color used for the lines drawn for each metric line. |
slider-height | The percentage of the overall component height used for the slider height. The greater the percentage, the taller the slider. |
slider-width | The percentage of the overall component width used for the slider width. The greater the percentage, the wider the slider. |
slider-opacity | Modifying this value will alter the opacity of the slider. Values can range between 0 (fully transparent) and 1 (fully opaque.) |
slider-background | This property changes the slider color. The property accepts gradient values: linear-gradient(#770000, #ff0000) or solid colors: #770000 |
slider-back-color | Primarily used for the simple and touch bar styles, this will set the background color of the simple slider or of the touchbar. Clicking this field opens the standard color picker dialog. Additional color properties are available for these slider styles allowing for a great deal of granularity. See below for details. |
slider-margin-left | The margin offset for the slider. |
slider-border-style | The slider border style. |
slider-border-width | The slider border width. |
slider-border-radius | The slider border radius. |
slider-border-color | The slider border color. |
slidebarwidth | The width in pixels of the bar on which the slider rides. |
slidebarcolor | The color of the bar on which the fader rides. |
slidebarradius | The radius in pixels of the bar on which the fader rides. |
slidebardisplay | Determines whether the slider bar is displayed. |
faderimage | Rather than using the default designed slider, an image may be used. |
optimum | The gain level which is designed to be optimum or unity. |
type | Options are audio, which provides the ability to control Audio IOs, and linear, which provides the ability to control numeric values rather than audio sources. See Setting the Control Property below. |
autosizefont | Determine whether the metric font automatically scales as the size of the fader is adjusted. |
faderstyle | Fader objects can have one of three different styles: default, simple, and touchbar.
|
orientation | Options are vertical (the default), and horizontal. Currently, when you flip the orientation, the height and width values are retained, making for a squashed funky graphic. You can hold the SHIFT key while resizing the fader to stretch it into the correct size, or manually swap the width and height values in the property list and then clicking save in order to set the initial correct height to width scaling ratio. |
invert | Setting the invert property to true enables options to set the mouse, scroll wheel, and metric layouts to match changes in orientation. |
motioninvert | Once invert is set to true, motioninvert can be set to true to allow mouse and scroll wheel functions to move the Fader up and down regardless of the Fader’s orientation. Even if the Fader is upside-down for example, this property will allow mouse wheel up movements to increase the Fader value. Since Faders may be used to control other values instead of just audio, this opens up more of those possibilities. |
metrictextinvert | Once invert is set to true, metrictextinvert can be set to true to make the text upside down or right side up. It is also possible to turn the metrics off and use the Faders that way as well. |
Property | Function |
slider-top-color | Adjusts the color of the top edge of the default fader style. Due to opacity blending, this can be a subtle change. |
slider-bottom-color | Adjusts the color of the bottom edge of the default fader style. Due to opacity blending, this can be a subtle change. |
slider-default-line0-color | Adjusts the color of the first line on the default fader. |
slider-default-line1-color | Adjusts the color of the second line on the default fader. |
slider-default-line2-color | Adjusts the color of the third line on the default fader. |
slider-default-line3-color | Adjusts the color of the fourth line on the default fader. |
slider-default-line4-color | Adjusts the color of the fifth line on the default fader. |
slider-default-line5-color | Adjusts the color of the sixth line on the default fader. |
slider-default-line6-color | Adjusts the color of the seventh line on the default fader. |
Property | Function |
slider-simple-line-color | Adjusts the color of the line on the simple fader style. |
slider-simple-line-display | Adjusts whether the line on the simple fader style is displayed or not. |
Property | Function |
IO | Used to select the Audio IO this meter will display. |
control | Adds support for LwCH options and Qor faders. See the Setting the Control Property topic in this chapter. |
fader-slider-background | This property changes the slider color. The property accepts gradient values: linear-gradient(#770000, #ff0000) or solid colors: #770000 |
fader-slider-back-color | Primarily used for the simple and touch bar styles, this will set the background color of the simple slider or of the touchbar. Clicking this field opens the standard color picker dialog. Additional color properties are available for these slider styles allowing for a great deal of granularity. See below for details. |
optimum | The gain level which is designed to be optimum or unity. |
faderstyle | Fader objects can have one of three different styles: default, simple, and touchbar.
|
Property | Function |
fader-slider-top-color | Adjusts the color of the top edge of the default fader style. Due to opacity blending, this can be a subtle change. |
fader-slider-bottom-color | Adjusts the color of the bottom edge of the default fader style. Due to opacity blending, this can be a subtle change. |
fader-slider-default-line0-color | Adjusts the color of the first line on the default fader. |
fader-slider-default-line1-color | Adjusts the color of the second line on the default fader. |
fader-slider-default-line2-color | Adjusts the color of the third line on the default fader. |
fader-slider-default-line3-color | Adjusts the color of the fourth line on the default fader. |
fader-slider-default-line4-color | Adjusts the color of the fifth line on the default fader. |
fader-slider-default-line5-color | Adjusts the color of the sixth line on the default fader. |
fader-slider-default-line6-color | Adjusts the color of the seventh line on the default fader. |
Property | Function |
fader-slider-simple-line-color | Adjusts the color of the line on the simple fader style. |
fader-slider-simple-line-display | Adjusts whether the line on the simple fader style is displayed or not. |
Property | Notes |
min | The minimum value allowable by the Fader. |
max | The maximum value allowable by the Fader. |
step | The steps that can be used for the change. A value of 1 would mean the value has to be integers whereas a step value of .1 would allow for a single decimal place in the values. |
Type | This property has two options: Audio: the scale of the fader will follow a typical audio fader where larger moves in the optimal range of the fader relate to smaller decibel changes. Linear: the scale is a direct linear scale. |
Property | Function |
saconsolebutton-caption | Updates the text displayed on the button. |
hwmap | Used to select a hardware LCD button. This hardware LCD button will then mirror the behavior of the software button. |
indicator | Used to set the button indication to On, Off, or Flash. The colors used for On, Off, and the two flash colors are the backcoloroff and on properties. |
backccoloron | Color used when the indicator state is on. |
backccoloroff | Color used when the indicator state is off. |
saconsolebutton-image | Used instead of the standard CSS style background image to update an image inside the button. Because this component is built from several embedded HTML objects, this makes sure the correct inner component displays the image. |
border-gradient | Options include complex and simple. A value of simple will remove the background top-to-bottom gradient. No value or a value of complex produces a button centered in a background. But as you resize this can cause the button to be off by a pixel one way or the other. At smaller sizes this can become an objectionable artifact. The simple design is just a button with a border and therefore the border scales more perfectly. Complex gradients have a slightly softer feel while the simple gradients scale better. |
Property | Function |
trigger-take-clear | This property may be used by a Logic Flow and/or binding to remotely press the take/clear button. This will only have an effect if there is a cross point preset for action. |
trigger-lock | This property may be used by a Logic Flow and/or binding to remotely press the lock button. This will only have an effect if there is a cross point preset for action. |
trigger-cancel | This property may be used by a Logic Flow and/or binding to remotely press the cancel button. This will only have an effect if there is a cross point preset for action. |
set-preset | This property allows a Logic Flow to preset a cross-point. The syntax involves a string with the source and destination path with the X between the two. For example: tcp://172.16.1.97:93?l=SRC&d=src&i=2&t=aaudio X tcp://1 72.16.1.72:93?l=DST&d=dst&i=31&t=aaudio |
Property | Function |
hover-source-name | Event raises the name of the source for the cross-point that the mouse is currently hovering over. |
hover-source-description | Event raises the description of the source for the cross-point that the mouse is currently hovering over. |
hover-source-path | Event raises the path of the source for the cross- point that the mouse is currently hovering over. |
hover-destination-name | Event raises the name of the destination for the cross-point that the mouse is currently hovering over. |
hover-destination-description | Event raises the description of the destination for the cross-point that the mouse is currently hovering over. |
hover-destination-path | Event raises the path of the destination for the cross-point that the mouse is currently hovering over. |
preset-source-name | Event raises the name of the source for the cross-point that has been preset. |
preset-source-description | Event raises the description of the source for the cross-point that has been preset. |
preset-source-path | Event raises the path of the source for the cross- point that has been preset. |
preset-destination-name | Event raises the name of the destination for the cross-point that has been preset. |
preset-destination-description | Event raises the description of the destination for the cross-point that has been preset. |
preset-destination-path | Event raises the path of the destination for the cross-point that has been preset. |
Property | Function |
routerpath | Used to select the router which will be used with the matrix. |
matrix-mode | There are three ways you can configure the XY matrix to work: |
touch-hover | When this option is set to true and the matrix is being used with a touch screen, the first tap will generate the same hover lines as you see when hovering a mouse over the cross-point. The second touch will preset. If this property is false, the first touch will both set the hover lines and set the preset. |
destination-search, destination-device-search, source-search, source-device-search | Each of these corresponds to whether that particular search field appears and is available in the search bar. Setting all of them to false will hide the search bar. This is particularly useful for small matrices where searching is not necessary. Please note that even if the device selection drop-down fields are set to true, they will still not appear for virtual routers. They will only appear if used with an audio or GPIO router. Virtual routers will display the textual search fields for both source and destination if they are enabled in this property. |
fixed-col-row-length | This defines the length of the row and column headers in pixels. |
row-height | Defines the height of the rows and columns in the grid. It is important to note that the grid will always be filled. Therefore, if there are not enough entries to fill the grid, these parameters may be larger than this height. Also, if you reduce this parameter you may find the grid extending off the bottom of the component. To correct this, reduce the font-size as well until it fits again. The sizing of items in the grid is a delicate balance so if you start altering these parameters from the defaults, you may have to tweak to get it to display correctly. The height is intentionally large enough for touch use. |
route-engaged-color | This is the color (blue by default) of cross- points where a route exists. |
route-preset-color | This is this the color (dark red by default) of cross-points that have been preset for an action. |
route-hover-color | This is the color of the hover bars that show the row and column over which the mouse is hovered. |
grid-line-color | This is the color of the lines in the grid. |
disabled-button-text-color | This is the color of the text in disabled action buttons. |
enabled-button-text-color | This is the color of the text in enabled action buttons. This property is no longer used as the text color for enabled uses the specific button’s enabled color below. |
disabled-button-background-color | This is the background color of disabled buttons. |
enabled-button-background-color | This is the background color of enabled buttons. This is overridden by hover effects. |
locked-destination-background-color | This is the color of cross points that are locked. |
locked-destination-text-color | This is the color of the text in the row headers for destinations that are locked. |
matrix-scroll-bar-height | This is the height of the horizontal scroll bar and is also used as the width of the vertical scroll bar. Scroll bars will automatically disappear if all cross-points can fit on the matrix. |
matrix-search-bar-height | This is the height of the search bar. Please note that the correct way to hide the search bar is to disable the search field properties mentioned earlier in this property list. |
scroll-bar-color | This is the color of the active part of the scroll bars. |
scroll-bar-background-color | This is the color of the inactive (background) portion of the scroll bars. |
column-row-header-back-color | This is the background color of the row and column headers. |
column-row-text-color | This is the color of the text for column and row headers. |
route-hover-text-color | This is the color of the text for column and row headers when the hover/highlight selection bar is active on that row or column. |
cancel-enabled-button-color | This is the color used by the border and text when the cancel button is active as well as the background color of the cancel button if the button is enabled and the mouse is hovering or clicking on it. |
take-enabled-button-color | This is the color used by the border and text when the take/clear button is active as well as the background color of the take/clear button if the button is enabled and the mouse is hovering or clicking on it. |
lock-enabled-button-color | This is the color used by the border and text when the lock button is active as well as the background color of the lock button if the button is enabled and the mouse is hovering or clicking on it. |
preset-enabled-button-color | This is the color used by the border and text when the preset rotation button is active as well as the background color of the preset rotation button if the button is enabled and the mouse is hovering or clicking on it. |
disabled-button-border-color | This is the border color used by disabled action buttons. |
grid-offset | This is the number of pixels of offset between the edge of the matrix and the scroll bars. |
hover-event-timeout | This is the number of milliseconds that a cross-point must be hovered over before raising the hover events that may be used in Logic Flows. |
Property | Function |
countdownlength | The time in seconds for the countdown. |
countdownstart | Generally exposed via bindings for a Logic Flow to trigger the start of a countdown. Options are true or false. |
Elapsed Event | This event can be raised when the countdown timer completes. |
StopMode | This property defines what happens when countdownstart is set to false while the countdown is progressing. The options are:
|
CountUp | Changing this value to True instead of False will cause the timer to count up rather than down to the selected countdownlength. If countdownlength is zero it will count up indefinitely until stopped and/or reset. |
Reset | This is an action property that can be used by Logic Flows and/or bindings to reset the counter. Setting it to true will cause the timer to reset. |
ResetMode | This property defines what happens when a reset is issued and a countdown is in progress. The options are:
|
Property | Function |
countdownlength | The time in seconds for the countdown. |
countdownstart | Generally exposed via bindings for a Logic Flow to trigger the start of a countdown. Options are true or false. |
Elapsed Event | This event can be raised when the countdown timer completes. |
StopMode | This property defines what happens when countdownstart is set to false while the countdown is progressing. The options are:
|
CountUp | Changing this value to True instead of False will cause the timer to count up rather than down to the selected countdownlength. If countdownlength is zero it will count up indefinitely until stopped and/or reset. |
Reset | This is an action property that can be used by Logic Flows and/or bindings to reset the counter. Setting it to true will cause the timer to reset. |
ResetMode | This property defines what happens when a reset is issued and a countdown is in progress. The options are:
|
Property | Value |
caption | OK |
backcoloroff | cyan/#80FFFF |
style>opacity | .8 |
style>border>box-shadow | None |
Property | Notes |
panelmemoryslotvalue | The value of the Panel memory slot. |
raisetoserver | Used to determine whether change events are raised only inside the local instance of the Panel or also to the server. |
panelmemoryslotchange | An event that fires when the value changes. This event carries the new value rather than just a true or false as its data. |
Stat Object | Description |
STAT SRC | StatSourceAddress = Source Address data. |
STAT DST | Stream = Whether the stream assigned to this destination is up or down. Receive Address = Receive address data often used with Aes67 indications. |
STAT ICH | AesSync = Only appears on AES inputs and displays whether AES sync is in error or ok. |
STAT SYNC | Master – master synchronization data. Slave – slave synchronization data. Sync – Synchonization source. FrequencyAdjust – adjustment value in ppm. |
Icon
Function
Description
Rename
Clicking this icon gives you the option to Rename the selected View.
Cut
With a single View selected, click this icon to move the selected View to the clipboard.
Copy
With a single View selected (see note below), click this icon to copy the selected View to the clipboard.
Paste
After pasting a cut View back into the system, the original View is deleted. When pasting a copied View back into the system, you will be prompted to give the pasted View a new name.
State Toggle
Clicking this button will toggle all Logic Flows in the selected Views between Enabled and Disabled state. The recursion checkbox, if enabled, will also enable or disable flows in sub views if desired.
Align left | Align top | Align bottom | Align right | Distribute horizontally | Distribute vertically |
Reference
Notes
1
The name of the emulator.
2
The type of the emulator (Generic Emulator, Probel General Router, Probel General Switcher).
3
The connection type to be used with the emulator.
4
The Port used for the connection.
5
Click edit to modify the associated emulator’s properties.
6
Click the minus icon to remove the associated emulator.
7
Click the plus icon to add a new emulator. Pathfinder Core PRO currently supports three types of device emulation, each presenting slightly different configuration options depending on the emulator type.