PROGRAM_NAME='PRINCETON, AF30HD CRT MONITOR, RS232, 07-20-99, MJR' (* DATE:07/21/99 TIME:15:44:35 *) (***********************************************************) (* 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. *) (* *) (******) (* NOTE - DO NOT SEND ANY STRINGS TO THIS MONITOR WITHOUT *) (* THE PROPER '$' TO END EACH STRING. IF YOU DO, *) (* THE MONITOR BECOMES UNCONTROLLABLE AND MUST BE *) (* UNPLUGGED TO BE RESET. *) (******) (***********************************************************) (* GENERAL FUNCTION LIST - *) (* POWER - ON/OFF *) (* VID MUTE - ON/OFF (!!USE MOMENTARY FB!!) *) (* INPUTS - VIDEO, SVIDEO, VGA, YP1, YP2, RGB *) (* VOLUME CONTROL - UP/DOWN *) (***********************************************************) (* System Type : AXCENT 3 *) (***********************************************************) (***********************************************************) (* DEVICE NUMBER DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_DEVICE MONITOR = 1 (* PRINCETON AF30HD 9600/8/N/1 *) (* FG10-889-04 *) TP = 192 (* AXT-MCA/MCV *) (***********************************************************) (* CONSTANT DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_CONSTANT (* !! !! *) (* !! DO NOT OVERRIDE THESE CONSTANTS !! *) (* !! !! *) #IF_NOT_DEFINED MN_FUNCTION_CONST #DEFINE MN_FUNCTION_CONST MN_POWER_SET = 9 (* POWER STATE *) MN_VOLUME_SET = 24 (* VOLUME *) MN_MUTE_SET = 26 MN_VIDEO = 31 (* INPUTS SELECTED *) MN_SVIDEO = 32 MN_VGA = 33 MN_YP1 = 34 MN_YP2 = 35 MN_RGB = 36 MN_133 = 37 (* ASPECT RATIOS SELECTED *) MN_166 = 38 MN_178 = 39 MN_ANA = 40 #END_IF #IF_NOT_DEFINED MN_DATA_CONST #DEFINE MN_DATA_CONST MN_SET_ON = 1 MN_SET_OFF = 2 MN_SET_TOGGLE = 3 MN_INCREASE = 4 MN_DECREASE = 5 #END_IF #IF_NOT_DEFINED MN_FEEDBACK_CONST #DEFINE MN_FEEDBACK_CONST MN_ON_FB = 200 MN_OFF_FB = 201 MN_MUTE_FB = 202 MN_VIDEO_FB = 203 MN_SVIDEO_FB = 204 MN_VGA_FB = 205 MN_YP1_FB = 206 MN_YP2_FB = 207 MN_RGB_FB = 208 MN_VOL_UP_FB = 209 MN_VOL_DN_FB = 210 MN_133_FB = 211 MN_166_FB = 212 MN_178_FB = 213 MN_ANA_FB = 214 MN_BUSY = 254 #END_IF #IF_NOT_DEFINED PRIMN_DEFEAT_FEEDBACK PRIMN_DEFEAT_FEEDBACK = 0 #END_IF (***********************************************************) (* VARIABLE DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_VARIABLE ON_DELAY (***********************************************************) (* LATCHING DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_LATCHING (***********************************************************) (* MUTUALLY EXCLUSIVE DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_MUTUALLY_EXCLUSIVE (***********************************************************) (* SUBROUTINE DEFINITIONS GO BELOW *) (***********************************************************) (**************************************) (* NAME: PRINCETON AF30HD FUNCTION *) (* PURPOSE: SYSTEM CALL LIKE FORMAT *) (* FOR FUNCTION OF AF30HD *) (**************************************) DEFINE_CALL 'PRIMN00F' (DEV,FUNC,DATA) { SELECT { ACTIVE (FUNC = MN_POWER_SET) : { IF (DATA = MN_SET_ON) { IF(![DEV,MN_ON_FB]) { ON[ON_DELAY] WAIT 100 'ON DELAY' OFF[ON_DELAY] } OFF[DEV,MN_ON_FB] OFF[DEV,MN_OFF_FB] OFF[DEV,MN_MUTE_FB] ON[DEV,MN_ON_FB] SEND_STRING DEV,"'PON$'" } ELSE IF (DATA = MN_SET_OFF) { OFF[DEV,MN_ON_FB] OFF[DEV,MN_OFF_FB] ON[DEV,MN_OFF_FB] SEND_STRING DEV,"'POF$'" } } (***********************************************************) (* NOTE - THE MONITOR ACCEPTS THE VOLUME COMMANDS IN THE *) (* REVERSE ORDER. TO INCREASE VOLUME, THE MONITOR *) (* MUST BE SENT THE "'VDN$'" STRING AND AND TO *) (* DECREASE THE "'VUP$'" STRING. *) (***********************************************************) ACTIVE (FUNC = MN_VOLUME_SET) : { IF (DATA = MN_INCREASE) { OFF[DEV,MN_VOL_UP_FB] OFF[DEV,MN_VOL_DN_FB] ON[DEV,MN_VOL_UP_FB] SEND_STRING DEV,"'VDN$'" } ELSE IF (DATA = MN_DECREASE) { OFF[DEV,MN_VOL_DN_FB] OFF[DEV,MN_VOL_UP_FB] ON[DEV,MN_VOL_DN_FB] SEND_STRING DEV,"'VUP$'" } } (***********************************************************) (* NOTE - THE MUTE COMMAND DOES NOT WORK *) (***********************************************************) ACTIVE (FUNC = MN_MUTE_SET) : { [DEV,MN_MUTE_FB] = ![DEV,MN_MUTE_FB] SEND_STRING DEV,"'MUT$'" } ACTIVE (FUNC = MN_VIDEO) : IF (!ON_DELAY) { IF (![DEV,MN_OFF_FB]) { OFF[DEV,MN_VIDEO_FB] OFF[DEV,MN_SVIDEO_FB] OFF[DEV,MN_VGA_FB] OFF[DEV,MN_YP1_FB] OFF[DEV,MN_YP2_FB] OFF[DEV,MN_RGB_FB] ON[DEV,MN_VIDEO_FB] } SEND_STRING DEV,"'VID$'" } ACTIVE (FUNC = MN_SVIDEO) : IF (!ON_DELAY) { IF (![DEV,MN_OFF_FB]) { OFF[DEV,MN_VIDEO_FB] OFF[DEV,MN_SVIDEO_FB] OFF[DEV,MN_VGA_FB] OFF[DEV,MN_YP1_FB] OFF[DEV,MN_YP2_FB] OFF[DEV,MN_RGB_FB] ON[DEV,MN_SVIDEO_FB] } SEND_STRING DEV,"'SVD$'" } ACTIVE (FUNC = MN_VGA) : IF (!ON_DELAY) { IF (![DEV,MN_OFF_FB]) { OFF[DEV,MN_VIDEO_FB] OFF[DEV,MN_SVIDEO_FB] OFF[DEV,MN_VGA_FB] OFF[DEV,MN_YP1_FB] OFF[DEV,MN_YP2_FB] OFF[DEV,MN_RGB_FB] ON[DEV,MN_VGA_FB] } SEND_STRING DEV,"'VGA$'" } ACTIVE (FUNC = MN_YP1) : IF (!ON_DELAY) { IF (![DEV,MN_OFF_FB]) { OFF[DEV,MN_VIDEO_FB] OFF[DEV,MN_SVIDEO_FB] OFF[DEV,MN_VGA_FB] OFF[DEV,MN_YP1_FB] OFF[DEV,MN_YP2_FB] OFF[DEV,MN_RGB_FB] ON[DEV,MN_YP1_FB] } SEND_STRING DEV,"'YP1$'" } ACTIVE (FUNC = MN_YP2) : IF (!ON_DELAY) { IF (![DEV,MN_OFF_FB]) { OFF[DEV,MN_VIDEO_FB] OFF[DEV,MN_SVIDEO_FB] OFF[DEV,MN_VGA_FB] OFF[DEV,MN_YP1_FB] OFF[DEV,MN_YP2_FB] OFF[DEV,MN_RGB_FB] ON[DEV,MN_YP2_FB] } SEND_STRING DEV,"'YP2$'" } ACTIVE (FUNC = MN_RGB) : IF (!ON_DELAY) { IF (![DEV,MN_OFF_FB]) { OFF[DEV,MN_VIDEO_FB] OFF[DEV,MN_SVIDEO_FB] OFF[DEV,MN_VGA_FB] OFF[DEV,MN_YP1_FB] OFF[DEV,MN_YP2_FB] OFF[DEV,MN_RGB_FB] ON[DEV,MN_RGB_FB] } SEND_STRING DEV,"'RGB$'" } ACTIVE (FUNC = MN_133) : IF (!ON_DELAY) { IF (![DEV,MN_OFF_FB]) { OFF[DEV,MN_133_FB] OFF[DEV,MN_166_FB] OFF[DEV,MN_178_FB] OFF[DEV,MN_ANA_FB] ON[DEV,MN_133_FB] } SEND_STRING DEV,"'133$'" } ACTIVE (FUNC = MN_166) : IF (!ON_DELAY) { IF (![DEV,MN_OFF_FB]) { OFF[DEV,MN_133_FB] OFF[DEV,MN_166_FB] OFF[DEV,MN_178_FB] OFF[DEV,MN_ANA_FB] ON[DEV,MN_166_FB] } SEND_STRING DEV,"'166$'" } ACTIVE (FUNC = MN_178) : IF (!ON_DELAY) { IF (![DEV,MN_OFF_FB]) { OFF[DEV,MN_133_FB] OFF[DEV,MN_166_FB] OFF[DEV,MN_178_FB] OFF[DEV,MN_ANA_FB] ON[DEV,MN_178_FB] } SEND_STRING DEV,"'178$'" } ACTIVE (FUNC = MN_ANA) : IF (!ON_DELAY) { IF (![DEV,MN_OFF_FB]) { OFF[DEV,MN_133_FB] OFF[DEV,MN_166_FB] OFF[DEV,MN_178_FB] OFF[DEV,MN_ANA_FB] ON[DEV,MN_ANA_FB] } SEND_STRING DEV,"'ANA$'" } } } (**************************************) (* NAME: PRIMN001 *) (* PURPOSE: SYSTEM CALL LIKE FORMAT *) (* FOR PRINCETON AF30HD *) (**************************************) DEFINE_CALL 'PRIMN001' (DEV,TP,PWONB,PWOFFB,VIDB,SVIDB,VGAB,YP1B,YP2B, RGBB,VOLUPB,VOLDNB,MUTEB,AR133B,AR166B,AR178B,ARANAB) { PUSH[TP,PWONB] (* POWER ON *) IF (![DEV,MN_BUSY]) { ON[DEV,MN_BUSY] WAIT 5 'Dev Busy' OFF[DEV,MN_BUSY] CALL 'PRIMN00F' (DEV,MN_POWER_SET,MN_SET_ON) } PUSH[TP,PWOFFB] (* POWER OFF *) IF (![DEV,MN_BUSY]) { ON[DEV,MN_BUSY] WAIT 5 'Dev Busy' OFF[DEV,MN_BUSY] CALL 'PRIMN00F' (DEV,MN_POWER_SET,MN_SET_OFF) } PUSH[TP,VIDB] (* SELECT VIDEO INPUT *) IF (![DEV,MN_BUSY]) { ON[DEV,MN_BUSY] WAIT 5 'Dev Busy' OFF[DEV,MN_BUSY] CALL 'PRIMN00F' (DEV,MN_VIDEO,MN_SET_ON) } PUSH[TP,SVIDB] (* SELECT SVIDEO INPUT *) IF (![DEV,MN_BUSY]) { ON[DEV,MN_BUSY] WAIT 5 'Dev Busy' OFF[DEV,MN_BUSY] CALL 'PRIMN00F' (DEV,MN_SVIDEO,MN_SET_ON) } PUSH[TP,VGAB] (* SELECT VGA INPUT *) IF (![DEV,MN_BUSY]) { ON[DEV,MN_BUSY] WAIT 5 'Dev Busy' OFF[DEV,MN_BUSY] CALL 'PRIMN00F' (DEV,MN_VGA,MN_SET_ON) } PUSH[TP,YP1B] (* SELECT YPbPr1 INPUT *) IF (![DEV,MN_BUSY]) { ON[DEV,MN_BUSY] WAIT 5 'Dev Busy' OFF[DEV,MN_BUSY] CALL 'PRIMN00F' (DEV,MN_YP1,MN_SET_ON) } PUSH[TP,YP2B] (* SELECT YPbPr2 INPUT *) IF (![DEV,MN_BUSY]) { ON[DEV,MN_BUSY] WAIT 5 'Dev Busy' OFF[DEV,MN_BUSY] CALL 'PRIMN00F' (DEV,MN_YP2,MN_SET_ON) } PUSH[TP,RGBB] (* SELECT RGB INPUT *) IF (![DEV,MN_BUSY]) { ON[DEV,MN_BUSY] WAIT 5 'Dev Busy' OFF[DEV,MN_BUSY] CALL 'PRIMN00F' (DEV,MN_RGB,MN_SET_ON) } PUSH[TP,VOLUPB] (* VOLUME UP *) { CALL 'PRIMN00F' (DEV,MN_VOLUME_SET,MN_INCREASE) } PUSH[TP,VOLDNB] (* VOLUME DOWN *) { CALL 'PRIMN00F' (DEV,MN_VOLUME_SET,MN_DECREASE) } PUSH[TP,MUTEB] (* MUTE *) { CALL 'PRIMN00F' (DEV,MN_MUTE_SET,MN_SET_TOGGLE) } PUSH[TP,AR133B] (* SELECT ASPECT RATIO 1.33 *) IF (![DEV,MN_BUSY]) { ON[DEV,MN_BUSY] WAIT 5 'Dev Busy' OFF[DEV,MN_BUSY] CALL 'PRIMN00F' (DEV,MN_133,MN_SET_ON) } PUSH[TP,AR166B] (* SELECT ASPECT RATIO 1.66 *) IF (![DEV,MN_BUSY]) { ON[DEV,MN_BUSY] WAIT 5 'Dev Busy' OFF[DEV,MN_BUSY] CALL 'PRIMN00F' (DEV,MN_166,MN_SET_ON) } PUSH[TP,AR178B] (* SELECT ASPECT RATIO 1.78 *) IF (![DEV,MN_BUSY]) { ON[DEV,MN_BUSY] WAIT 5 'Dev Busy' OFF[DEV,MN_BUSY] CALL 'PRIMN00F' (DEV,MN_178,MN_SET_ON) } PUSH[TP,ARANAB] (* SELECT ASPECT RATIO ANAMORPHIC *) IF (![DEV,MN_BUSY]) { ON[DEV,MN_BUSY] WAIT 5 'Dev Busy' OFF[DEV,MN_BUSY] CALL 'PRIMN00F' (DEV,MN_ANA,MN_SET_ON) } (* FEEDBACK *) IF (!PRIMN_DEFEAT_FEEDBACK) { [TP,PWONB] = [DEV,MN_ON_FB] [TP,PWOFFB] = [DEV,MN_OFF_FB] [TP,MUTEB] = [DEV,MN_MUTE_FB] && [DEV,MN_ON_FB] [TP,VIDB] = [DEV,MN_VIDEO_FB] && [DEV,MN_ON_FB] [TP,SVIDB] = [DEV,MN_SVIDEO_FB] && [DEV,MN_ON_FB] [TP,VGAB] = [DEV,MN_VGA_FB] && [DEV,MN_ON_FB] [TP,YP1B] = [DEV,MN_YP1_FB] && [DEV,MN_ON_FB] [TP,YP2B] = [DEV,MN_YP2_FB] && [DEV,MN_ON_FB] [TP,RGBB] = [DEV,MN_RGB_FB] && [DEV,MN_ON_FB] [TP,VOLUPB] = [DEV,MN_VOL_UP_FB] [TP,VOLDNB] = [DEV,MN_VOL_DN_FB] [TP,AR133B] = [DEV,MN_133_FB] && [DEV,MN_ON_FB] [TP,AR166B] = [DEV,MN_166_FB] && [DEV,MN_ON_FB] [TP,AR178B] = [DEV,MN_178_FB] && [DEV,MN_ON_FB] [TP,ARANAB] = [DEV,MN_ANA_FB] && [DEV,MN_ON_FB] } } (***********************************************************) (* STARTUP CODE GOES BELOW *) (***********************************************************) DEFINE_START SEND_COMMAND MONITOR,"'SET BAUD 9600,N,8,1'" CALL 'PRIMN00F' (MONITOR,MN_POWER_SET,MN_SET_OFF) (***********************************************************) (* THE ACTUAL PROGRAM GOES BELOW *) (***********************************************************) DEFINE_PROGRAM (* SYSTEM CALLS TO SET UP MONITOR FUNCTIONS *) CALL 'PRIMN001' (MONITOR,TP,1,2,3,4,5,6,7,8,0,0,11,12,13,14,15) (***********************************************************) (* NOTE - THE MONITOR ACCEPTS THE VOLUME COMMANDS IN THE *) (* REVERSE ORDER. TO INCREASE VOLUME, THE MONITOR *) (* MUST BE SENT THE "'VDN$'" STRING AND AND TO *) (* DECREASE THE "'VUP$'" STRING. *) (***********************************************************) PUSH[TP,9] (* RAMP VOLUME UP *) { OFF[MONITOR,MN_VOL_UP_FB] OFF[MONITOR,MN_VOL_DN_FB] OFF[MONITOR,MN_MUTE_FB] ON[MONITOR,MN_VOL_UP_FB] SEND_STRING MONITOR,"'VDN$'" } [TP,9] = [MONITOR,MN_VOL_UP_FB] PUSH[TP,10] (* RAMP VOLUME DOWN *) { OFF[MONITOR,MN_VOL_UP_FB] OFF[MONITOR,MN_VOL_DN_FB] OFF[MONITOR,MN_MUTE_FB] ON[MONITOR,MN_VOL_DN_FB] SEND_STRING MONITOR,"'VUP$'" } [TP,10] = [MONITOR,MN_VOL_DN_FB] RELEASE[TP,9] RELEASE[TP,10] { OFF[MONITOR,MN_VOL_DN_FB] OFF[MONITOR,MN_VOL_UP_FB] CANCEL_WAIT 'VOL RAMP' } IF ([MONITOR,MN_VOL_UP_FB] || [MONITOR,MN_VOL_DN_FB]) { WAIT 5 'VOL RAMP' { SELECT { ACTIVE([MONITOR,MN_VOL_UP_FB]) : SEND_STRING MONITOR,"'VDN$'" ACTIVE([MONITOR,MN_VOL_DN_FB]) : SEND_STRING MONITOR,"'VUP$'" } } } (***********************************************************) (* END OF PROGRAM *) (* DO NOT PUT ANY CODE BELOW THIS COMMENT *) (***********************************************************)