{ *************************************************************************** } MODULE mod_handle_jet_list ; { Created 23-JAN-1992 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_common_hard_io ; {from the TRICS hardware IO library } { *************************************************************************** } EXPORT prog_jet_list ; {PROCEDURE program andor card for sp.trg. vs Ref.set } { *************************************************************************** } IMPORT 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 } cbus_register, {from module MOD_DEF_HARDWARE_TABLES } jet_list_aoc, {from module MOD_DEF_HARDWARE_TABLES } LT_list_aoc, {from module MOD_DEF_HARDWARE_TABLES } threshold_reference_set_number, {from module MOD_DEF_HARDWARE_TABLES } threshold_comparison_type, LgTile_cmp, participate, no_participate, {from module MOD_DEF_PHYSICS_TABLES } sptrg, {from module MOD_DEF_PHYSICS_TABLES } jet_list_progr, {from module MOD_DEF_PHYSICS_TABLES } update_register, {from module MOD_HANDLE_REGISTERS } cbus_param_list ; {from module MOD_COMMON_HARD_IO } { *************************************************************************** } { *************************************************************************** } %INCLUDE 'SITE_DEPENDENT.CST/LIST' TYPE bit = [BIT(1)] 0..1 ; byte = [BYTE] 0..255 ; byte_by_bit = [BYTE] PACKED RECORD bit0 : [POS(0)] bit ; bit1 : [POS(1)] bit ; bit2 : [POS(2)] bit ; bit3 : [POS(3)] bit ; bit4 : [POS(4)] bit ; bit5 : [POS(5)] bit ; bit6 : [POS(6)] bit ; bit7 : [POS(7)] bit ; END ; VAR tag : VARYING_STRING(8) := 'HJL/ODB%' ; { *************************************************************************** } { *************************************************************************** } PROCEDURE prog_jet_list ( tagext : VARYING_STRING(8) := '' ; refset_type : threshold_comparison_type ; refset_num : threshold_reference_set_number ; sptrgnum : INTEGER ; in_jet_list : BOOLEAN := TRUE ; iopar :^cbus_param_list ; VAR status : [OPTIONAL] status_type ) ; VAR bytenum : INTEGER ; bytemask : byte ; p_regaddr :^cbus_register ; io_status : status_type ; BEGIN IF PRESENT(status) THEN status := ok ; IF ( in_jet_list = TRUE ) THEN sptrg[sptrgnum]^.status.initialized := FALSE ; { *** check on the previous state } IF ( in_jet_list = TRUE ) THEN BEGIN IF ( inline_tracing(trace_info) <> 0 ) THEN handle_trc_inf ( TAG := tag + tagext, MESSAGE := ' Setting Spec Trig #' + CONVERT(STRING,sptrgnum) + ' part of Jet List ' + CONVERT(STRING,refset_type) + ',' + CONVERT(STRING,refset_num) ) ; IF ( jet_list_progr[refset_type,refset_num].bit[sptrgnum] = participate ) THEN BEGIN IF PRESENT(status) THEN status := already_done ; IF ( inline_tracing(trace_warn) <> 0 ) THEN handle_trc_wrn ( TAG := tag + tagext, MESSAGE := ' Spec Trigger #' + CONVERT(STRING,sptrgnum) + ' already part of Jet List ' + CONVERT(STRING,refset_type) + ',' + CONVERT(STRING,refset_num) ) ; END ; END ELSE BEGIN IF ( inline_tracing(trace_info) <> 0 ) THEN handle_trc_inf ( TAG := tag + tagext, MESSAGE := ' Setting Spec Trigger #' + CONVERT(STRING,sptrgnum) + ' not part of Jet List ' + CONVERT(STRING,refset_type) + ',' + CONVERT(STRING,refset_num) ) ; IF ( jet_list_progr[refset_type,refset_num].bit[sptrgnum] = no_participate ) THEN BEGIN IF PRESENT(status) THEN status := already_done ; IF ( inline_tracing(trace_warn) <> 0 ) THEN handle_trc_wrn ( TAG := tag + tagext, MESSAGE := ' Spec Trigger #' + CONVERT(STRING,sptrgnum) + ' already not part of Jet List ' + CONVERT(STRING,refset_type) + ',' + CONVERT(STRING,refset_num) ) ; END ; END ; { *** modify the physics data base } IF ( in_jet_list = TRUE ) THEN jet_list_progr[refset_type,refset_num].bit[sptrgnum] := participate ELSE jet_list_progr[refset_type,refset_num].bit[sptrgnum] := no_participate ; { *** compute the correct jet list andor card sub register number } bytenum := sptrgnum DIV 8 ; bytemask := jet_list_progr[refset_type,refset_num].byte[bytenum] ; { *** modify the hardware data base } IF ( refset_type <> LgTile_cmp ) THEN BEGIN p_regaddr := ADDRESS(jet_list_aoc.maskreg[refset_type,refset_num,bytenum]) ; update_register ( TAGEXT := tagext, CARD := ADDRESS(jet_list_aoc), REGISTER := p_regaddr, IOPAR := iopar, DATA := bytemask , STATUS := io_status ) ; END ELSE BEGIN p_regaddr := ADDRESS(LT_list_aoc.maskreg[refset_num,bytenum]) ; update_register ( TAGEXT := tagext, CARD := ADDRESS(LT_list_aoc), REGISTER := p_regaddr, IOPAR := iopar, DATA := bytemask , STATUS := io_status ) ; END ; IF ( io_status = io_failure ) THEN BEGIN IF ( inline_tracing(trace_error) <> 0 ) THEN handle_trc_err ( TAG := tag + tagext, MESSAGE := ' Failure Programming Spec Trigger #' + CONVERT(STRING,sptrgnum) + ' for Jet List ' + CONVERT(STRING,refset_type) + ',' + CONVERT(STRING,refset_num) ) ; IF PRESENT(status) THEN status := io_status ; END ; END ; { *************************************************************************** } { *************************************************************************** } END .