PROGRAM_NAME='NOVA, BLOX, RS-232, BASIC, 3-97, BA' (* DATE:05/20/99 TIME:15:53:25 *) (***********************************************************) (* The following code block is provided as a guide to *) (* programming the device(s) listed above. This is a *) (* sample only, and will most likely require modification *) (* to be integrated into a master program. *) (* *) (* Device-specific protocols should be obtained directly *) (* from the equipment manufacturer to ensure compliance *) (* with the most current versions. Within the limits *) (* imposed by any non-disclosure agreements, AMX will *) (* provide protocols upon request. *) (* *) (* If further programming assistance is required, please *) (* contact your AMX customer support team. *) (* *) (***********************************************************) (* GENERAL FUNCTION LIST - *) (* STATUS, SWITCHING (4 X 1) *) (***********************************************************) (* NOTES: *) (* --THIS 4x1 SWITCHER IS CONTROLLED IN A DIFFERENT MANNER *) (* FROM MOST OTHER SWITCHERS. BESIDES HAVING A CURRENTLY *) (* SELECTED INPUT, IT ALSO HAS A CURRENT "POSITION". THE *) (* "POSITION" IS A TOOL USED FOR SELECTING A NEW INPUT, *) (* AND IT FUNCTIONS LIKE A BOOKMARK OR A POINTER TO A *) (* PARTICULAR INPUT. IN ORDER TO SELECT A NEW INPUT, THE *) (* "POSITION" MUST BE MOVED TO THE DESIRED INPUT, AND *) (* THEN A SWITCH CAN BE MADE USING THE "TAKE" COMMAND. *) (* EXAMPLE- TO SELECT INPUT #3 AS THE CURRENT INPUT, *) (* FIRST MOVE THE "POSITION" TO INPUT #3 (USING THE *) (* "NEXT" AND "PREVIOUS" COMMANDS), THEN SEND A "TAKE" *) (* COMMAND; THIS RESULTS IN INPUT #3 BEING SWITCHED TO *) (* THE SWITCHER'S OUTPUT. *) (* --THE "NEXT" AND "PREVIOUS" COMMANDS ONLY CHANGE THE *) (* "POSITION". THEY DO NOT AFFECT THE CURRENT INPUT. THE *) (* ONLY WAY TO CHANGE THE CURRENT INPUT IS WITH "TAKE" *) (* COMMAND. *) (* --THE CURRENT VALUE OF "POSITION" CAN BE REQUESTED *) (* WITH THE "STATUS" COMMAND (BUT THERE IS NOT ANY WAY *) (* TO REQUEST THE CURRENT INPUT). *) (* --FROM INPUT #4, THE "NEXT" COMMAND WILL MOVE POSITION *) (* TO INPUT #1; FROM INPUT #1, THE "PREVIOUS" COMMAND *) (* WILL MOVE POSITION TO INPUT #4. *) (* --SWITCHER REQUIRES AT LEAST 1/10 SECOND BETWEEN *) (* CONSECUTIVE COMMAND STRINGS. *) (* *) (***********************************************************) (* DEVICE NUMBER DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_DEVICE SWITCHER = 1 (* AXC-232: NOVA V-SW *) TP = 128 (***********************************************************) (* CONSTANT DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_CONSTANT STATUS_CMD = 3 NEXT_CMD = 5 TAKE_CMD = 6 PREV_CMD = 8 RESPONSE_STR = '@INPUT:' (***********************************************************) (* VARIABLE DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_VARIABLE SWITCHER_BUFFER[50] SWITCHER_ADDRESS[2] CURRENT_POSITION RESPONSE_LOC (***********************************************************) (* LATCHING DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_LATCHING (***********************************************************) (* MUTUALLY EXCLUSIVE DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_MUTUALLY_EXCLUSIVE (***********************************************************) (* SUBROUTINE DEFINITIONS GO BELOW *) (***********************************************************) (* ALL STRINGS BEGIN WITH '*' AND END WITH '$'; ADDRESS IS *) (* 2 BYTES ASCII; COMMAND IS 1 BYTE ASCII; NO CHECKSUM. *) DEFINE_CALL 'SEND TO NOVA' (CARD,ADDR[2],CMD) { SEND_STRING CARD,"'*',ADDR,CMD,'$'" } (***********************************************************) (* STARTUP CODE GOES BELOW *) (***********************************************************) DEFINE_START CREATE_BUFFER SWITCHER,SWITCHER_BUFFER SWITCHER_ADDRESS = '01' (***********************************************************) (* THE ACTUAL PROGRAM GOES BELOW *) (***********************************************************) DEFINE_PROGRAM PUSH[TP,11] (* STATUS *) CALL 'SEND TO NOVA' (SWITCHER,SWITCHER_ADDRESS,STATUS_CMD) PUSH[TP,12] (* NEXT *) CALL 'SEND TO NOVA' (SWITCHER,SWITCHER_ADDRESS,NEXT_CMD) PUSH[TP,13] (* PREVIOUS *) CALL 'SEND TO NOVA' (SWITCHER,SWITCHER_ADDRESS,PREV_CMD) PUSH[TP,14] (* TAKE *) CALL 'SEND TO NOVA' (SWITCHER,SWITCHER_ADDRESS,TAKE_CMD) (* RESPONSES FROM NOVA (BY COMMAND BEING RESPONDED TO) - *) (* --NEXT, PREVIOUS, STATUS COMMANDS: *) (* "'@INPUT:',x,' ',y,'$'" *) (* x = CURRENT POSITION VALUE (NOT CURRENT INPUT), *) (* ASCII REPRESENTATION. *) (* y = EITHER 'TAKE', IF x = CURRENT INPUT; OR *) (* 'NEXT', IF x <> CURRENT INPUT. *) (* --TAKE COMMAND: *) (* "'@',$0D,$0A,'TAKE',$0D,$0A,'$',$0D,$0A" *) (* ($0D = CARRIAGE RETURN, $0A = LINEFEED) *) IF (LENGTH_STRING(SWITCHER_BUFFER)) { RESPONSE_LOC = FIND_STRING(SWITCHER_BUFFER,"RESPONSE_STR",1) IF (RESPONSE_LOC) CURRENT_POSITION = SWITCHER_BUFFER[RESPONSE_LOC+7] SWITCHER_BUFFER = "" } (* TO PERFORM A SWITCH GIVEN ONLY THE DESIRED INPUT: *) (* 1) SEND A "STATUS" REQUEST TO THE SWITCHER. *) (* 2) AFTER RECEIVING THE UPDATED CURRENT POSITION, IF THE *) (* CURRENT POSITION IS NOT EQUAL TO THE DESIRED INPUT, *) (* SEND A "NEXT" COMMAND. REPEAT THIS STEP UNTIL THE *) (* CURRENT POSITION IS EQUAL TO THE DESIRED INPUT. *) (* 3) SEND A "TAKE" COMMAND. *) (***********************************************************) (* END OF PROGRAM *) (* DO NOT PUT ANY CODE BELOW THIS COMMENT *) (***********************************************************)