Displaying a Logo on Input with No Signal on DGX
Table of Contents
Question:
How do I display a logo on an input with No Signal on DGX?
Answer:
This is a working example of NetLinx code to use a Media Player to generate a logo instead of blue/black screen when no signal present. Unlike the DVX, the DGX does not have a way to display a logo when there is no signal. Since the DGX has no logo generator, you’ll have to provide one yourself. You can use anything that will output the video or image you want. A google/Amazon search for ‘HDMI Media Player’ will give you plenty of results. For this purpose, you can pick one up for under $40.00 and load your logo into the unit. You will also need an open input on the DGX.
Once you’ve got the image loaded and playing, plug it into an open input on the DGX. You can incorporate the attached code as your routing routine. You can modify as necessary for Video only route (VI instead of CI).
This code consists of an example main source code file. As it sits, it’s setup for a DGX-1600. This is easily expandable by adding more definitions (all shown in the code comments, and warnings when compiled) or contractable by removing some.
This code will route the media player logo to an output that has an input routed with no signal attached. If an input is routed in this fashion, the code will keep the logo routed until someone plugs in a valid signal, then it will make the route from the valid signal until it’s lost, then show the logo again, etc, etc.
PROGRAM_NAME='Logo On No Signal DGX'
(***********************************************************)
(***********************************************************)
(* FILE_LAST_MODIFIED_ON: 04/05/2006 AT: 09:00:25 *)
(***********************************************************)
(* System Type : NetLinx *)
(***********************************************************)
(* REV HISTORY: *)
(***********************************************************)
(*
$History: $
*)
(***********************************************************)
(* DEVICE NUMBER DEFINITIONS GO BELOW *)
(***********************************************************)
DEFINE_DEVICE
dvDGX_SWITCHER = 5002:1:1 // SWR PORT 1 FOR SENDING ROUTING COMMANDS
#WARN 'ADD/REMOVE DEFINITIONS FOR BIGGER/SMALLER SWITCHERS'
dvDGX_SWITCHER1 = 5002:1:1 // SWITCHER PORT 1
dvDGX_SWITCHER2 = 5002:2:1 // SWITCHER PORT 2
dvDGX_SWITCHER3 = 5002:3:1 // SWITCHER PORT 3
dvDGX_SWITCHER4 = 5002:4:1 // SWITCHER PORT 4
dvDGX_SWITCHER5 = 5002:5:1 // SWITCHER PORT 5
dvDGX_SWITCHER6 = 5002:6:1 // SWITCHER PORT 6
dvDGX_SWITCHER7 = 5002:7:1 // SWITCHER PORT 7
dvDGX_SWITCHER8 = 5002:8:1 // SWITCHER PORT 8
dvDGX_SWITCHER9 = 5002:9:1 // SWITCHER PORT 9
dvDGX_SWITCHER10 = 5002:10:1 // SWITCHER PORT 10
dvDGX_SWITCHER11 = 5002:11:1 // SWITCHER PORT 11
dvDGX_SWITCHER12 = 5002:12:1 // SWITCHER PORT 12
dvDGX_SWITCHER13 = 5002:13:1 // SWITCHER PORT 13
dvDGX_SWITCHER14 = 5002:14:1 // SWITCHER PORT 14
dvDGX_SWITCHER15 = 5002:15:1 // SWITCHER PORT 15
dvDGX_SWITCHER16 = 5002:16:1 // SWITCHER PORT 16
dvTP = 10001:1:0
(***********************************************************)
(* CONSTANT DEFINITIONS GO BELOW *)
(***********************************************************)
DEFINE_CONSTANT
#WARN 'SET TO NUMBER OF CHANNELS ON DGX (8,16,32,64)'
MAX_DGX_CHANNELS = 16
(***********************************************************)
(* DATA TYPE DEFINITIONS GO BELOW *)
(***********************************************************)
DEFINE_TYPE
(***********************************************************)
(* VARIABLE DEFINITIONS GO BELOW *)
(***********************************************************)
DEFINE_VARIABLE
#WARN 'CHANGE TO WHICHEVER INPUT WILL HAVE THE LOGO GENERATOR'
VOLATILE INTEGER nLogoInput = 16 // CHANGE TO WHICHEVER INPUT WILL HAVE THE LOGO GENERATOR
VOLATILE INTEGER nInValidSignal[MAX_DGX_CHANNELS]
#WARN 'ADD/REMOVE DEVICES TO ARRAY BASED ON DGX SIZE'
VOLATILE DEV dvSwrInputs[] =
{
dvDGX_SWITCHER1,
dvDGX_SWITCHER2,
dvDGX_SWITCHER3,
dvDGX_SWITCHER4,
dvDGX_SWITCHER5,
dvDGX_SWITCHER6,
dvDGX_SWITCHER7,
dvDGX_SWITCHER8,
dvDGX_SWITCHER9,
dvDGX_SWITCHER10,
dvDGX_SWITCHER11,
dvDGX_SWITCHER12,
dvDGX_SWITCHER13,
dvDGX_SWITCHER14,
dvDGX_SWITCHER15,
dvDGX_SWITCHER16
}
(***********************************************************)
(* LATCHING DEFINITIONS GO BELOW *)
(***********************************************************)
DEFINE_LATCHING
(***********************************************************)
(* MUTUALLY EXCLUSIVE DEFINITIONS GO BELOW *)
(***********************************************************)
DEFINE_MUTUALLY_EXCLUSIVE
(***********************************************************)
(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *)
(***********************************************************)
(* EXAMPLE: DEFINE_FUNCTION <RETURN_TYPE> <NAME> (<PARAMETERS>) *)
(* EXAMPLE: DEFINE_CALL '<NAME>' (<PARAMETERS>) *)
DEFINE_CALL 'MAKE ROUTE' (INTEGER nIn,nOut)
{
#WARN 'ADD/REMOVE CASES FOR BIGGER/SMALLER SWITCHERS'
SWITCH(nIn)
{
CASE 1:CANCEL_WAIT_UNTIL 'SIGNAL1'
CASE 2:CANCEL_WAIT_UNTIL 'SIGNAL2'
CASE 3:CANCEL_WAIT_UNTIL 'SIGNAL3'
CASE 4:CANCEL_WAIT_UNTIL 'SIGNAL4'
CASE 5:CANCEL_WAIT_UNTIL 'SIGNAL5'
CASE 6:CANCEL_WAIT_UNTIL 'SIGNAL6'
CASE 7:CANCEL_WAIT_UNTIL 'SIGNAL7'
CASE 8:CANCEL_WAIT_UNTIL 'SIGNAL8'
CASE 9:CANCEL_WAIT_UNTIL 'SIGNAL9'
CASE 10:CANCEL_WAIT_UNTIL 'SIGNAL10'
CASE 11:CANCEL_WAIT_UNTIL 'SIGNAL11'
CASE 12:CANCEL_WAIT_UNTIL 'SIGNAL12'
CASE 13:CANCEL_WAIT_UNTIL 'SIGNAL13'
CASE 14:CANCEL_WAIT_UNTIL 'SIGNAL14'
CASE 15:CANCEL_WAIT_UNTIL 'SIGNAL15'
CASE 16:CANCEL_WAIT_UNTIL 'SIGNAL16'
}
IF(nInValidSignal[nIn]) // IF THERE'S A SIGNAL WHEN ROUTEDED...ROUTE IT
{
SEND_COMMAND dvDGX_SWITCHER,"'CI',ITOA(nIn),'O',ITOA(nOut)"
}
ELSE // SEND INPUT WITH LOGO GENERATOR TO SELECTED OUTPUT. IF SOMEONE CONNECTS A SOURCE WHILE SUPPOSED TO BE ROUTED...ROUTE IT
{
SEND_COMMAND dvDGX_SWITCHER,"'CI',ITOA(nLogoInput),'O',ITOA(nOut)" // ROUTE LOGO INPUT TO SELECTED OUTPUT
#WARN 'ADD/REMOVE CASES FOR BIGGER/SMALLER SWITCHERS'
SWITCH(nIn)// IF SOMEONE CONNECTS A SOURCE WHILE SUPPOSED TO BE ROUTED...ROUTE IT
{
CASE 1:
{
WAIT_UNTIL(nInValidSignal[1]) 'SIGNAL1' // IF SOMEONE CONNECTS A SOURCE WHILE SUPPOSED TO BE ROUTED...
{
SEND_COMMAND dvDGX_SWITCHER,"'CI1O',ITOA(nOut)" // ROUTE IT
}
}
CASE 2:
{
WAIT_UNTIL(nInValidSignal[2]) 'SIGNAL2'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI2O',ITOA(nOut)"
}
}
CASE 3:
{
WAIT_UNTIL(nInValidSignal[3]) 'SIGNAL3'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI3O',ITOA(nOut)"
}
}
CASE 4:
{
WAIT_UNTIL(nInValidSignal[4]) 'SIGNAL4'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI4O',ITOA(nOut)"
}
}
CASE 5:
{
WAIT_UNTIL(nInValidSignal[5]) 'SIGNAL5'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI5O',ITOA(nOut)"
}
}
CASE 6:
{
WAIT_UNTIL(nInValidSignal[6]) 'SIGNAL6'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI6O',ITOA(nOut)"
}
}
CASE 7:
{
WAIT_UNTIL(nInValidSignal[7]) 'SIGNAL7'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI7O',ITOA(nOut)"
}
}
CASE 8:
{
WAIT_UNTIL(nInValidSignal[8]) 'SIGNAL8'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI8O',ITOA(nOut)"
}
}
CASE 9:
{
WAIT_UNTIL(nInValidSignal[9]) 'SIGNAL9'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI9O',ITOA(nOut)"
}
}
CASE 10:
{
WAIT_UNTIL(nInValidSignal[10]) 'SIGNAL10'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI10O',ITOA(nOut)"
}
}
CASE 11:
{
WAIT_UNTIL(nInValidSignal[11]) 'SIGNAL11'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI11O',ITOA(nOut)"
}
}
CASE 12:
{
WAIT_UNTIL(nInValidSignal[12]) 'SIGNAL12'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI12O',ITOA(nOut)"
}
}
CASE 13:
{
WAIT_UNTIL(nInValidSignal[13]) 'SIGNAL13'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI13O',ITOA(nOut)"
}
}
CASE 14:
{
WAIT_UNTIL(nInValidSignal[14]) 'SIGNAL14'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI14O',ITOA(nOut)"
}
}
CASE 15:
{
WAIT_UNTIL(nInValidSignal[15]) 'SIGNAL15'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI15O',ITOA(nOut)"
}
}
CASE 16:
{
WAIT_UNTIL(nInValidSignal[16]) 'SIGNAL16'
{
SEND_COMMAND dvDGX_SWITCHER,"'CI16O',ITOA(nOut)"
}
}
}
}
}
(***********************************************************)
(* STARTUP CODE GOES BELOW *)
(***********************************************************)
DEFINE_START
(***********************************************************)
(* THE EVENTS GO BELOW *)
(***********************************************************)
DEFINE_EVENT
DATA_EVENT[dvSwrInputs] // Parsing DGX for valid signal
{
COMMAND:
{
LOCAL_VAR INTEGER nWhichInputPort
nWhichInputPort = GET_LAST(dvSwrInputs)
SELECT
{
ACTIVE(FIND_STRING(DATA.TEXT,"'VIDIN_STATUS-VALID SIGNAL'",1)):
{
nInValidSignal[nWhichInputPort] = 1
}
ACTIVE(FIND_STRING(DATA.TEXT,"'VIDIN_STATUS-NO SIGNAL'",1)):
{
nInValidSignal[nWhichInputPort] = 0
}
}
}
}
BUTTON_EVENT[dvTP,100] // MAKE A ROUTE
{
PUSH:
{
CALL 'MAKE ROUTE' (1,5) // INPUT 1 TO OUTPUT 5
}
}
(*****************************************************************)
(* *)
(* !!!! WARNING !!!! *)
(* *)
(* Due to differences in the underlying architecture of the *)
(* X-Series masters, changing variables in the DEFINE_PROGRAM *)
(* section of code can negatively impact program performance. *)
(* *)
(* See Differences in DEFINE_PROGRAM Program Execution section *)
(* of the NX-Series Controllers WebConsole & Programming Guide *)
(* for additional and alternate coding methodologies. *)
(*****************************************************************)
DEFINE_PROGRAM
(*****************************************************************)
(* END OF PROGRAM *)
(* *)
(* !!! DO NOT PUT ANY CODE BELOW THIS COMMENT !!! *)
(* *)
(*****************************************************************)
Table of Contents