{ *************************************************************************** } MODULE mod_handle_geosec ; { Created 30-AUG-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE } { *************************************************************************** } INCLUDE mod_common_global_flags, mod_def_hardware_tables, mod_def_physics_tables, mod_handle_tracing, mod_handle_registers, mod_handle_scalers, mod_common_hard_io ; {from the TRICS hardware IO library } { *************************************************************************** } EXPORT geosec_start_dgtz_signal, {PROCEDURE enable/disable start digitize signals} reset_geosec_strtdig_scaler,{PROCEDURE reset geo sec's start digitize scaler} reset_geosec_febusy_scaler, {PROCEDURE reset geo sec's front-end busy scaler} show_geosec ; {PROCEDURE show a geo section programming } { *************************************************************************** } IMPORT L1_obey_L15, {from module MOD_COMMON_GLOBAL_FLAGS } status_type, ok, already_done, io_failure,{wrong_mode, not_found,} {from module MOD_COMMON_GLOBAL_FLAGS } trace_info, trace_warn, trace_error,{from module MOD_HANDLE_TRACING } inline_tracing, {from module MOD_HANDLE_TRACING } handle_trc_inf, {from module MOD_HANDLE_TRACING } handle_trc_wrn, {from module MOD_HANDLE_TRACING } handle_trc_err, {from module MOD_HANDLE_TRACING } mtgstdig, {from module MOD_DEF_HARDWARE_TABLES } sbscstdig, sbscfebz, {from module MOD_DEF_HARDWARE_TABLES } {possible_allocation,} {from module MOD_DEF_PHYSICS_TABLES } all_none, all_coor,{all_phat, all_redundancy, all_forcedb,} {firstgeosec, lastgeosec,} {from module MOD_DEF_PHYSICS_TABLES } {signal_status,} normal_pulse, inhibited, geosec, {from module MOD_DEF_PHYSICS_TABLES } update_register, {from module MOD_HANDLE_REGISTERS } read_sbscalers, {from module MOD_HANDLE_SCALERS } reset_sbscaler, {from module MOD_HANDLE_SCALERS } cbus_param_list ; {from module MOD_COMMON_HARD_IO } { *************************************************************************** } { *************************************************************************** } TYPE bit = [BIT(1)] 0..1 ; byte = [BYTE] 0..255 ; VAR tag : VARYING_STRING(8) := 'HGS/ODB%' ; { *************************************************************************** } { *************************************************************************** } PROCEDURE geosec_start_dgtz_signal ( tagext : VARYING_STRING(8) := '' ; geosecnum : INTEGER ; enable : BOOLEAN ; iopar :^cbus_param_list ; VAR status : [OPTIONAL] status_type ) ; VAR io_status : status_type ; data : byte ; BEGIN IF PRESENT(status) THEN status := ok ; geosec[geosecnum]^.status.initialized := FALSE ; { *** check on the previous state } IF ( enable = TRUE ) THEN BEGIN IF ( inline_tracing(trace_info) <> 0 ) THEN handle_trc_inf ( TAG := tag + tagext, MESSAGE := ' Setting Geo Section #' + CONVERT(STRING,geosecnum) + ' Start Digitized Normally Enabled' ) ; IF ( geosec[geosecnum]^.acqsignal.start_digit = normal_pulse ) THEN BEGIN IF PRESENT(status) THEN status := already_done ; IF ( inline_tracing(trace_warn) <> 0 ) THEN handle_trc_wrn ( TAG := tag + tagext, MESSAGE := ' Geo Section #' + CONVERT(STRING,geosecnum) + ' Start Digitized Already Enabled' ) ; END ; END ELSE BEGIN IF ( inline_tracing(trace_info) <> 0 ) THEN handle_trc_inf ( TAG := tag + tagext, MESSAGE := ' Setting Geo Section #' + CONVERT(STRING,geosecnum) + ' Start Digitized Inhibited ' ) ; IF ( geosec[geosecnum]^.acqsignal.start_digit = inhibited ) THEN BEGIN IF PRESENT(status) THEN status := already_done ; IF ( inline_tracing(trace_warn) <> 0 ) THEN handle_trc_wrn ( TAG := tag + tagext, MESSAGE := ' Geo Section #' + CONVERT(STRING,geosecnum) + ' Start Digitized Already Inhibited ' ) ; END ; END ; { *** modify the physics data base } IF ( enable = TRUE ) THEN geosec[geosecnum]^.acqsignal.start_digit := normal_pulse {enab start dgt} ELSE geosec[geosecnum]^.acqsignal.start_digit := inhibited ; {disable " " } { *** modify the hardware data base } IF ( enable = TRUE ) THEN BEGIN IF ( L1_obey_L15 = TRUE ) THEN data := 2 ELSE data := 0 ; END ELSE data := 1 ; update_register ( TAGEXT := tagext, CARD := ADDRESS(mtgstdig), REGISTER := ADDRESS(mtgstdig.channelreg[31-geosecnum]), IOPAR := iopar, DATA := data, STATUS := io_status ) ; IF ( io_status = io_failure ) THEN BEGIN IF ( inline_tracing(trace_error) <> 0 ) THEN handle_trc_err ( TAG := tag + tagext, MESSAGE := ' Failure Programming Geo Section #' + CONVERT(STRING,geosecnum) + ' Start Digitize Signal' ) ; IF PRESENT(status) THEN status := io_status ; END ; END ; { *************************************************************************** } { *************************************************************************** } PROCEDURE reset_geosec_strtdig_scaler ( tagext : VARYING_STRING(8) := '' ; geosecnum : INTEGER ; iopar :^cbus_param_list ; VAR status : [OPTIONAL] status_type ); VAR scaler : INTEGER ; io_status : status_type ; BEGIN IF PRESENT(status) THEN status := ok ; { *** compute the correct sbsc relative scaler } scaler := geosecnum ; { *** reset scaler } reset_sbscaler ( TAGEXT := tagext, CARD := ADDRESS(sbscstdig), REGISTER := ADDRESS(sbscstdig.datareg), IOPAR := iopar, SCALER := scaler, STATUS := io_status ) ; IF ( io_status = io_failure ) THEN BEGIN IF ( inline_tracing(trace_error) <> 0 ) THEN handle_trc_err ( TAG := tag + tagext, MESSAGE := ' Failure Programming Geo Section #' + CONVERT(STRING,geosecnum) + ' Reset Start Digitize Scaler' ) ; IF PRESENT(status) THEN status := io_status ; END ; END ; { *************************************************************************** } { *************************************************************************** } PROCEDURE reset_geosec_febusy_scaler ( tagext : VARYING_STRING(8) := '' ; geosecnum : INTEGER ; iopar :^cbus_param_list ; VAR status : [OPTIONAL] status_type ); VAR scaler : INTEGER ; io_status : status_type ; BEGIN IF PRESENT(status) THEN status := ok ; { *** compute the correct sbsc relative scaler } scaler := geosecnum ; { *** reset scaler } reset_sbscaler ( TAGEXT := tagext, CARD := ADDRESS(sbscfebz), REGISTER := ADDRESS(sbscfebz.datareg), IOPAR := iopar, SCALER := scaler, STATUS := io_status ) ; IF ( io_status = io_failure ) THEN BEGIN IF ( inline_tracing(trace_error) <> 0 ) THEN handle_trc_err ( TAG := tag + tagext, MESSAGE := ' Failure Programming Geo Section #' + CONVERT(STRING,geosecnum) + ' Reset Front End Busy Scaler' ) ; IF PRESENT(status) THEN status := io_status ; END ; END ; { *************************************************************************** } { *************************************************************************** } PROCEDURE show_geosec ( tagext : VARYING_STRING(8) := '' ; geosecnum : INTEGER ; iopar :^cbus_param_list ; VAR status : [OPTIONAL] status_type ); VAR io_status : status_type ; BEGIN IF PRESENT(status) THEN status := ok ; handle_trc_inf ( TAG := tag, MESSAGE := ' Current Programming of Geo Section #' + CONVERT(STRING,geosecnum) + ' -->' ) ; IF ( geosec[geosecnum]^.allocated = ALL_NONE ) THEN handle_trc_inf ( MESSAGE := ' Not Allocated ' ) ELSE IF ( geosec[geosecnum]^.allocated = ALL_COOR ) THEN handle_trc_inf ( MESSAGE := ' Allocated to COOR ' ) ; IF ( geosec[geosecnum]^.acqsignal.start_digit = normal_pulse ) THEN handle_trc_inf ( MESSAGE := ' Normal Start Digitize Signal ' ) ELSE IF ( geosec[geosecnum]^.acqsignal.start_digit = inhibited ) THEN handle_trc_inf ( MESSAGE := ' Start Digitize Signal is Inhibited ' ) ; read_sbscalers ( TAGEXT := tagext, CARD := ADDRESS(sbscstdig), REGISTER := ADDRESS(sbscstdig.datareg), IOPAR := iopar, STATUS := io_status ) ; IF ( io_status = io_failure ) THEN IF PRESENT(status) THEN status := io_status ; handle_trc_inf ( MESSAGE := ' Start Digitize Scaler : %X_' + HEX(iopar^.a_sbsc[4,geosecnum],2,2) + HEX(iopar^.a_sbsc[3,geosecnum],2,2) + HEX(iopar^.a_sbsc[2,geosecnum],2,2) + HEX(iopar^.a_sbsc[1,geosecnum],2,2) ) ; read_sbscalers ( TAGEXT := tagext, CARD := ADDRESS(sbscfebz), REGISTER := ADDRESS(sbscfebz.datareg), IOPAR := iopar, STATUS := io_status ) ; IF ( io_status = io_failure ) THEN IF PRESENT(status) THEN status := io_status ; handle_trc_inf ( MESSAGE := ' Front End Busy Scaler : %X_' + HEX(iopar^.a_sbsc[4,geosecnum],2,2) + HEX(iopar^.a_sbsc[3,geosecnum],2,2) + HEX(iopar^.a_sbsc[2,geosecnum],2,2) + HEX(iopar^.a_sbsc[1,geosecnum],2,2) ) ; END ; { *************************************************************************** } { *************************************************************************** } END .