{ *************************************************************************** } MODULE mod_tcs_io_comint_handling ; { *************************************************************************** } INCLUDE mod_common_hard_io, mod_common_global_flags, mod_handle_tracing ; { *************************************************************************** } EXPORT proced_tcs_read_status, {PROCEDURE read comint card status byte } proced_tcs_toggle_buffer, {PROCEDURE toggle half of double buffer read } proced_tcs_release_dbbuilder, {PROCEDURE release data block builder } proced_tcs_disable_db_builder,{PROCEDURE disable data block builder } proced_tcs_pause, {PROCEDURE force data block builder full line } proced_tcs_resume, {PROCEDURE release data block builder full } proced_tcs_reset_comint ; {PROCEDURE reset comint card } { *************************************************************************** } IMPORT PortA,{PortB,}PortC, PortD, {from module MOD_COMMON_HARD_IO } reg_drv11j_pilot, {from module MOD_COMMON_HARD_IO } reg_drv11j_assist, {from module MOD_COMMON_HARD_IO } drv11j_registers, {from module MOD_COMMON_HARD_IO } outdbra,{outdbrb,}outdbrc, {from module MOD_COMMON_HARD_IO } indbrd, {from module MOD_COMMON_HARD_IO } comint_stat, {from module MOD_COMMON_HARD_IO } cbus_param_list, {from module MOD_COMMON_HARD_IO } status_type, ok, {already_done, io_failure,} {from module MOD_COMMON_GLOBAL_FLAGS } inline_tracing, trace_error, {from module MOD_HANDLE_TRACING } handle_trc_err ; {from module MOD_HANDLE_TRACING } { *************************************************************************** } %INCLUDE 'SITE_DEPENDENT.CST/LIST' TYPE byte = [BYTE] 0..255 ; word = [WORD] 0..65535 ; { *************************************************************************** } { *************************************************************************** } PROCEDURE proced_tcs_read_status ( p_drv11j : ^drv11j_registers ; param :^cbus_param_list := NIL ; VAR comint_status :[OPTIONAL] comint_stat ) ; BEGIN DISABLE_SWITCH ; indbrd.comstat::BYTE := READ_REGISTER (p_drv11j^[PortD].buffer.highbyte ) ; IF ( param <> NIL ) THEN param^.status := indbrd.comstat::BYTE ; IF PRESENT( comint_status ) THEN comint_status := indbrd.comstat ; ENABLE_SWITCH ; END ; { *************************************************************************** } { *************************************************************************** } PROCEDURE proced_tcs_toggle_buffer ; BEGIN DISABLE_SWITCH ; outdbrc.comctrl.togglebuf := 1 ; WRITE_REGISTER ( reg_drv11j_pilot^[PortC].buffer::WORD, outdbrc::WORD ) ; outdbrc.comctrl.togglebuf := 0 ; WRITE_REGISTER ( reg_drv11j_pilot^[PortC].buffer::WORD, outdbrc::WORD ) ; ENABLE_SWITCH ; END ; { *************************************************************************** } { *************************************************************************** } PROCEDURE proced_tcs_release_dbbuilder ; BEGIN DISABLE_SWITCH ; outdbrc.comctrl.disdbb := 1 ; outdbrc.comctrl.cbusreqst := 1 ; WRITE_REGISTER ( reg_drv11j_pilot^[PortC].buffer::WORD, outdbrc::WORD ) ; WRITE_REGISTER ( reg_drv11j_assist^[PortC].buffer::WORD, outdbrc::WORD ) ; ENABLE_SWITCH ; END; { *************************************************************************** } { *************************************************************************** } PROCEDURE proced_tcs_disable_db_builder ; BEGIN DISABLE_SWITCH ; outdbrc.comctrl.disdbb := 0 ; WRITE_REGISTER ( reg_drv11j_pilot^[PortC].buffer::WORD, outdbrc::WORD ) ; WRITE_REGISTER ( reg_drv11j_assist^[PortC].buffer::WORD, outdbrc::WORD ) ; ENABLE_SWITCH ; END; { *************************************************************************** } { *************************************************************************** } PROCEDURE proced_tcs_pause ( VAR status :[OPTIONAL] status_type ) ; VAR timeout_flag_pilot : BOOLEAN ; timeout_flag_assist : BOOLEAN ; wait_dbb : INTEGER ; BEGIN IF PRESENT(status) THEN status := ok ; DISABLE_SWITCH ; outdbrc.comctrl.disfrmwrk := 1 ; WRITE_REGISTER ( reg_drv11j_pilot^[PortC].buffer::WORD, outdbrc::WORD ) ; WRITE_REGISTER ( reg_drv11j_assist^[PortC].buffer::WORD, outdbrc::WORD ) ; wait_dbb := 0 ; timeout_flag_pilot := FALSE ; wait_for_dbb_pilot : indbrd.comstat::BYTE := READ_REGISTER (reg_drv11j_pilot^[PortD].buffer.highbyte ) ; IF ( ( indbrd.comstat.dbbusy = 1 ) OR ( indbrd.comstat.reqstwait = 1 ) ) THEN BEGIN wait_dbb := wait_dbb + 1 ; IF ( wait_dbb > p_pause_timeout ) THEN timeout_flag_pilot := TRUE ELSE GOTO wait_for_dbb_pilot ; END ; wait_dbb := 0 ; timeout_flag_assist := FALSE ; wait_for_dbb_assist : indbrd.comstat::BYTE := READ_REGISTER (reg_drv11j_assist^[PortD].buffer.highbyte ) ; IF ( ( indbrd.comstat.dbbusy = 1 ) OR ( indbrd.comstat.reqstwait = 1 ) ) THEN BEGIN wait_dbb := wait_dbb + 1 ; IF ( wait_dbb > p_pause_timeout ) THEN timeout_flag_assist := TRUE ELSE GOTO wait_for_dbb_assist ; END ; ENABLE_SWITCH ; IF ( timeout_flag_pilot = TRUE ) THEN IF ( inline_tracing(trace_error) <> 0 ) THEN handle_trc_err ( TAG := 'CMI/FEB%', MESSAGE := ' Pause Trigger Framework Timeout' + ' on Pilot COMINT' ) ; IF ( timeout_flag_assist = TRUE ) THEN IF ( inline_tracing(trace_error) <> 0 ) THEN handle_trc_err ( TAG := 'CMI/FEB%', MESSAGE := ' Pause Trigger Framework Timeout' + ' on Assistant COMINT' ) ; END; { *************************************************************************** } { *************************************************************************** } PROCEDURE proced_tcs_resume ; BEGIN DISABLE_SWITCH ; outdbrc.comctrl.disfrmwrk := 0 ; WRITE_REGISTER ( reg_drv11j_pilot^[PortC].buffer::WORD, outdbrc::WORD ) ; WRITE_REGISTER ( reg_drv11j_assist^[PortC].buffer::WORD, outdbrc::WORD ) ; ENABLE_SWITCH ; END; { *************************************************************************** } { *************************************************************************** } PROCEDURE proced_tcs_reset_comint ; BEGIN DISABLE_SWITCH ; { { *** force "good" control word *** } { outdbrc.comctrl.disdbb := 1 ; { outdbrc.comctrl.disfrmwrk := 0 ; { outdbrc.comctrl.readspy := 0 ; { outdbrc.comctrl.disdbsend := 0 ; { outdbrc.comctrl.cbusreqst := 1 ; { outdbrc.comctrl.startdb := 0 ; { WRITE_REGISTER (drv11j^[PortC].buffer::WORD, outdbrc::WORD ) ; } { *** reset card *** } outdbra.comini := 1 ; outdbra.cominibar := 0 ; WRITE_REGISTER ( reg_drv11j_pilot^[PortA].buffer::WORD, outdbra::WORD ) ; WRITE_REGISTER ( reg_drv11j_assist^[PortA].buffer::WORD, outdbra::WORD ) ; WAIT_ANY ( TIME := -1000000 ) ; {wait .1S} outdbra.comini := 0 ; outdbra.cominibar := 1 ; WRITE_REGISTER ( reg_drv11j_pilot^[PortA].buffer::WORD, outdbra::WORD ) ; WRITE_REGISTER ( reg_drv11j_assist^[PortA].buffer::WORD, outdbra::WORD ) ; WAIT_ANY ( TIME := -1000000 ) ; {wait .1S} ENABLE_SWITCH ; END; { *************************************************************************** } { *************************************************************************** } END .