FreeCalypso > hg > fc-selenite
diff src/g23m-fad/fad/fad.h @ 1:d393cd9bb723
src/g23m-*: initial import from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 15 Jul 2018 04:40:46 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/g23m-fad/fad/fad.h Sun Jul 15 04:40:46 2018 +0000 @@ -0,0 +1,690 @@ +/* ++----------------------------------------------------------------------------- +| Project : GSM-F&D (8411) +| Modul : FAD ++----------------------------------------------------------------------------- +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++----------------------------------------------------------------------------- +| Purpose : Definitions for the Protocol Stack Entity +| Fax Adaptation 3.45 ++----------------------------------------------------------------------------- +*/ + + +#ifndef FAD_H +#define FAD_H + +#include "cl_ribu.h" + +/* + * Macros + */ + +#undef TRACE_FAD_DL_TCF + +#define TRACE_FAD_DL_STATUS +#define TRACE_FAD_UL_STATUS + +#ifndef _SIMULATION_ /* keeps testcases passing */ +#define BMI_TCF_WORKAROUND +#endif + +#ifndef NTRACE + +/* for trace purposes */ + +#define SERVICE_NAME_KER "KER" +#define SERVICE_NAME_RCV "RCV" +#define SERVICE_NAME_RCVSUB "RCVSUB" +#define SERVICE_NAME_SND "SND" +#define SERVICE_NAME_SNDSUB "SNDSUB" + +#endif + +#define KER ker. +#define RCV rcv. +#define RCVSUB rcv.sub. +#define SND snd. +#define SNDSUB snd.sub. + +#define SHARED_FAX_DATA_RAM + +/* + * instance management + */ + +#define GET_INSTANCE(p) &fad_data_base[0] + +/* + * Constants + */ + +/* + * global unchangeable constants + */ +#define SBM_MAX_PRIMS 10 /* max numbers of prims in SBM */ +#define FRAME_SIZE 8 /* num of data bytes in fad frame */ +#define MAX_NEW_FRAMES 9 /* number of 64 bit frames + which can be received + in one ra_data_ind primitive */ + +#define MAX_SDU_SIZE (MAX_NEW_FRAMES * FRAME_SIZE) + +/*==== TYPES ======================================================*/ + +/* + * Constants + */ + +/* + * Bitoffset for encoding/decoding + */ +#define ENCODE_OFFSET 0 + +/* + * Dynamic Configuration Numbers + */ + +/* + * States of the entity process KERNEL + */ +#define KER_NULL 0 +#define IDLE 1 +#define BCS_REC 2 +#define BCS_TRA 3 +#define MSG_REC_TCF 4 +#define MSG_REC 5 +#define MSG_TRA_TCF 6 +#define MSG_TRA 7 + +/* + * States of the entity process SND + */ +#define SYNC_SND 0 +#define PREAM_SND 1 +#define TCF_SND 2 +#define TRAIN_SND 3 +#define TRAIN_CNF_SND 4 +#define BCS_SND 5 +#define MSG_SND 6 + +/* + * States of the entity process RCV + */ +#define SYNC_RCV 0 +#define PREAM_RCV 1 +#define TCF_RCV 2 +#define TRAIN_RCV 3 +#define BCS_RCV 4 +#define MSG_RCV 5 + +/* substates */ +#define SUB_IDLE 0 +#define SUB_PREAMBLE 1 +#define SUB_TCF 2 +#define SUB_POST_TCF 3 +#define SUB_DATA 4 + +/* + * FAD Constants + */ + +/* shared */ + +/* phase identifiers */ +#define IDENT_BCS_REC 0x11 +#define IDENT_MSG_REC 0x33 +#define IDENT_MSG_TRA 0x44 + +/* Layer 1 TI frame */ +#define L1_TI_LEN 40 + +/* RCV specific */ + +#ifdef _TARGET_ +#define FAD_DESCBUF_LEN 8 +#endif + +#define BCS_TOLERANCE 70 /* 70% tolerance for correct BCS data */ +#define TRAIN_TOLERANCE 50 + +/* SND specific */ + +/* Frame formats */ + +#define FR_SEQ_SYNC "\x3E\x37\x50\x96\xC1\xC8\xAF\x69" +#define FR_SEQ_PREAMBLE "\x11\x7E" /* BCS-REC + preamble */ +#define FR_SEQ_TRAIN_SND "\x33\x0F" /* MSG-REC + STATUS */ +#define FR_SEQ_TRAIN_RCV "\x44\x0F" /* MSG-TRA + STATUS */ +#define FR_SEQ_TCF "\x00\x00\x00\x00\x00\x00\x00\x00" + +#define VAL_TCF 0x00 +#define HDLC_FLAG 0x7E +#define VAL_TRAIN 0x0F + +/* length in bytes */ +#define LEN_SEQ_SYNC FRAME_SIZE +#define LEN_SEQ_PREAMBLE 2 +#define LEN_SEQ_TCF FRAME_SIZE +#define LEN_SEQ_TRAIN 2 + +#define SYNC_CYCLE_NONE 0 +#define SYNC_CYCLE_7200 4 +#define SYNC_CYCLE_12000 6 + +#define SYNC_RESET 3 + +#define REPEAT_FOREVER 0xFFFF /* bytes remaining - SYNC */ + +#define PREAMBLE_BYTES_TI_EXP 30 /* = 400 ms (give some extra tolerance to required 850 ms) */ +#define PREAMBLE_BYTES_TI_SND 74 /* = 1 sec */ + +#define TIME_AWAIT_TCF 75 /* 75 millisec. */ +#define TIME_TCF_SND 1500 /* 1500 millisec. */ +#define TIME_TCF_RCV 1350 /* 1500 millisec. - 10% */ + +#ifdef _SIMULATION_ +#define TIME_THRESHOLD 5000 /* 5-sec. MSG buffer - T.32, §7.4 */ +#else +#define TIME_THRESHOLD_TI 1000 +#endif + +#define MAX_SND_FRAMES 3 +#define SND_FRAME_LEN FRAME_SIZE /* 11.01.99/DL: 24 -> 8 */ +#define RCV_FRAME_LEN 24 +#define HDLC_LEN (RCV_FRAME_LEN * 12) +#define BCS_BUF_LEN (SND_FRAME_LEN * MAX_SND_FRAMES * 16) /* 336 */ + +#ifdef _SIMULATION_ +#define BCS_RATE 300 +#define HDLC_REPEAT 8 +#endif + +/* frame types - FAD internal */ +#define FT_PREAMBLE 0x06 +#define FT_TRAIN_RESPONSE 0x07 +#define FT_NONE 0x0F + +/*==== TYPES ======================================================*/ + +/* + * entity global data + */ + +/* + * send buffer management + */ +#define SBM_PRIMBUF_SIZE (SBM_MAX_PRIMS+1) + +typedef T_FAD_DATA_REQ T_SBM_PRIM; +typedef UBYTE T_SBM_PRIM_INDEX; + +typedef struct +{ + T_SBM_PRIM *Prim; +} T_SBM_PRIMSLOT; + +/* + * receive buffer management + */ +#define RBM_PQ_MAX_PRIM 10 +#define RBM_PQ_SIZE (RBM_PQ_MAX_PRIM+1) + +typedef T_FAD_DATA_IND T_RBM_PRIM; + +/* + * data for send buffer management + */ + +typedef struct +{ + USHORT syncCycle; + USHORT framesUntilSync; + USHORT CurrPrimOff; + USHORT CurrPrimLen; + USHORT FrameSize; + UBYTE frames[MAX_SDU_SIZE]; + T_RIBU ribu; + T_SBM_PRIMSLOT Prim[SBM_PRIMBUF_SIZE]; + T_SBM_PRIM_INDEX PA; +} T_SBM; + +/* + * data for receive buffer management + */ + +#define DL_RIBU_DEPTH 4 + +typedef struct +{ + BOOL Initialised; + USHORT FramesPerPrim; + USHORT FramesInCurrPrim; + T_RIBU_FD *ribu; + T_RBM_PRIM *CurrPrim; + T_RIBU PQ; + T_RBM_PRIM *PQ_Array[RBM_PQ_SIZE]; +} T_RBM_FAD; + +typedef struct +{ + UBYTE state; +#ifndef NTRACE + char *name; + char *state_name; +#endif + BOOL forward_data; +} T_KER; + +typedef struct +{ + UBYTE state; +#ifndef NTRACE + char *name; + char *state_name; +#endif +} T_STATE; + +typedef struct +{ + UBYTE state; +#ifndef NTRACE + char *name; + char *state_name; +#endif + T_STATE sub; /* substate */ + + UBYTE reset; + BOOL send_status; + BOOL send_ready_to_t30; + BOOL final; + UBYTE seq_buf [BCS_BUF_LEN]; + UBYTE ul_FD_align[L1_TI_LEN]; + + USHORT ra_req_frames; + USHORT seq_buflen; + USHORT seq_bufpos; + USHORT bytes_to_send; + USHORT threshold; /* T.32: 5-sec. buffer */ + USHORT data_to_send; + USHORT data_bufpos; + USHORT frames_per_prim; + USHORT trans_rate; + + T_FD FD; + U8 FD_buf[BCS_BUF_LEN]; + + T_FAD_DATA_REQ *fad_data_req; +#ifdef _TARGET_ + T_RA_DATA_REQ ra_data_req; +#endif +} T_SND; + +#define FLAGFOUND_MIN 5 + +typedef struct +{ + UBYTE state; +#ifndef NTRACE + char *name; + char *state_name; +#endif + T_STATE sub; /* substate */ + + BOOL train_flg; + BOOL prim_ready; + BOOL data_incoming; + BOOL t30_req_frames; + BOOL data_in_rbm; + BOOL preamble_pending; + BOOL bcs_pending; + UBYTE bcs_data_len; + UBYTE hdlc [HDLC_LEN]; + + UBYTE FlagFound; /* HDLC flag in preamble found */ + UBYTE AlignShift; /* shift of HDLC flag in received RA_DATA_IND */ + USHORT AlignWord; + + USHORT bytes_good; + USHORT bytes_expect; + USHORT bytes_rcvd; + USHORT hdlc_len; + USHORT data_bufpos; +} T_RCV; + +typedef struct +{ + T_KER ker; + T_SND snd; + T_RCV rcv; + T_SBM sbm; + T_RBM_FAD rbm; +} T_FAD_DATA; + +/* + * SBM, RBM: constants, type defs + */ +#define ENTITY_DATA fad_data + +/*==== EXPORT =====================================================*/ +/* + * instance data base + */ + +#ifdef FAD_PEI_C +GLOBAL T_FAD_DATA *fad_data; +#else +EXTERN T_FAD_DATA *fad_data; +#endif + +#ifdef SHARED_FAX_DATA_RAM + + /*lint -e526 : not defined */ + EXTERN UBYTE l2r_data_base[]; + EXTERN ULONG l2r_data_magic_num; + + #define fad_data_base ((T_FAD_DATA*)l2r_data_base) + + #define fad_data_magic_num l2r_data_magic_num + +#else /* !SHARED_FAX_DATA_RAM */ + + #ifdef FAD_PEI_C + GLOBAL T_FAD_DATA fad_data_base[1]; + GLOBAL ULONG fad_data_magic_num; + #else + EXTERN T_FAD_DATA fad_data_base[]; + EXTERN ULONG fad_data_magic_num; + #endif + +#endif /* !SHARED_FAX_DATA_RAM */ + +#define FAD_DATA_MAGIC_NUM (('F'<<24) + ('A'<<16) + ('D'<<8)) /* "FAD",NUL */ + +/* + * Prototypes + * + * FAD KERNEL + * + * KERNEL primitive processing + */ + +#ifdef USE_L1FD_FUNC_INTERFACE + EXTERN void l1i_ra_detect_req(T_RA_DETECT_REQ *ra_detect_req); +#endif + +#ifdef OPTION_MULTITHREAD + #define ker_fad_activate_req _ENTITY_PREFIXED(ker_fad_activate_req) + #define ker_fad_deactivate_req _ENTITY_PREFIXED(ker_fad_deactivate_req) + #define ker_fad_modify_req _ENTITY_PREFIXED(ker_fad_modify_req) + #define ker_fad_data_req _ENTITY_PREFIXED(ker_fad_data_req) + #define ker_fad_snd_tcf_req _ENTITY_PREFIXED(ker_fad_snd_tcf_req) + #define ker_fad_rcv_tcf_req _ENTITY_PREFIXED(ker_fad_rcv_tcf_req) + #define ker_fad_ready_req _ENTITY_PREFIXED(ker_fad_ready_req) + #define ker_fad_ignore_req _ENTITY_PREFIXED(ker_fad_ignore_req) +#endif + +EXTERN void ker_fad_activate_req (T_FAD_ACTIVATE_REQ *fad_activate_req); +EXTERN void ker_fad_deactivate_req (T_FAD_DEACTIVATE_REQ *fad_deactivate_req); +EXTERN void ker_fad_modify_req (T_FAD_MODIFY_REQ *fad_modify_req); +EXTERN void ker_fad_data_req (T_FAD_DATA_REQ *fad_data_req); +EXTERN void ker_fad_snd_tcf_req (T_FAD_SND_TCF_REQ *fad_snd_tcf_req); +EXTERN void ker_fad_rcv_tcf_req (T_FAD_RCV_TCF_REQ *fad_rcv_tcf_req); +EXTERN void ker_fad_ready_req (T_FAD_READY_REQ *fad_ready_req); +EXTERN void ker_fad_ignore_req (T_FAD_IGNORE_REQ *fad_ignore_req); + +/* + * KERNEL signal processing + */ + +/* + * KERNEL procedures + */ + +#ifdef OPTION_MULTITHREAD + #define ker_init _ENTITY_PREFIXED(ker_init) + #define ker_SetError _ENTITY_PREFIXED(ker_SetError) +#endif + +EXTERN void ker_init (void); +EXTERN void ker_SetError (USHORT cause); + +/* + * FAD RCV + * + * RCV primitive processing + */ + +#ifdef OPTION_MULTITHREAD + #define rcv_ra_data_ind _ENTITY_PREFIXED(rcv_ra_data_ind) + +#endif + +EXTERN void rcv_ra_data_ind (T_RA_DATA_IND *ra_data_ind); + +/* + * RCV signal processing + */ +#ifdef OPTION_MULTITHREAD +/* KER -> RCV */ + #define sig_ker_rcv_await_tcf_req _ENTITY_PREFIXED(sig_ker_rcv_await_tcf_req) + #define sig_ker_rcv_ready_req _ENTITY_PREFIXED(sig_ker_rcv_ready_req) + #define sig_ker_rcv_reset_req _ENTITY_PREFIXED(sig_ker_rcv_reset_req) +/* RCV -> KER */ + #define sig_rcv_ker_preamble_ind _ENTITY_PREFIXED(sig_rcv_ker_preamble_ind) + #define sig_rcv_ker_tcf_ind _ENTITY_PREFIXED(sig_rcv_ker_tcf_ind) + #define sig_rcv_ker_train_ind _ENTITY_PREFIXED(sig_rcv_ker_train_ind) + #define sig_rcv_ker_train_end_ind _ENTITY_PREFIXED(sig_rcv_ker_train_end_ind) + #define sig_rcv_ker_bcs_ind _ENTITY_PREFIXED(sig_rcv_ker_bcs_ind) + #define sig_rcv_ker_msg_ind _ENTITY_PREFIXED(sig_rcv_ker_msg_ind) + #define sig_rcv_ker_status_ind _ENTITY_PREFIXED(sig_rcv_ker_status_ind) + #define sig_rcv_ker_error_ind _ENTITY_PREFIXED(sig_rcv_ker_error_ind) +#endif + +EXTERN void sig_ker_rcv_await_tcf_req (void); +EXTERN void sig_ker_rcv_ready_req (void); +EXTERN void sig_ker_rcv_reset_req (void); + +EXTERN void sig_rcv_ker_preamble_ind (void); +EXTERN void sig_rcv_ker_tcf_ind (void); +EXTERN void sig_rcv_ker_train_ind (void); +EXTERN void sig_rcv_ker_train_end_ind (void); +EXTERN void sig_rcv_ker_bcs_ind (UBYTE *hdlc, USHORT hdlc_len); +EXTERN void sig_rcv_ker_msg_ind (T_FAD_DATA_IND *fad_data_ind); +EXTERN void sig_rcv_ker_status_ind (void); +EXTERN void sig_rcv_ker_error_ind (USHORT cause); + +/* + * RCV procedures + */ + +#ifdef OPTION_MULTITHREAD + #define rcv_init _ENTITY_PREFIXED(rcv_init) + #define rcv_ResetFormatter _ENTITY_PREFIXED(rcv_ResetFormatter) + #define rcv_FrameType _ENTITY_PREFIXED(rcv_FrameType) + #define rcv_SetHdlcFrame _ENTITY_PREFIXED(rcv_SetHdlcFrame) + #define rcv_SetErrorRatio _ENTITY_PREFIXED(rcv_SetErrorRatio) + #define rcv_GetMsgData _ENTITY_PREFIXED(rcv_GetMsgData) + #define rcv_SetFinalBuffer _ENTITY_PREFIXED(rcv_SetFinalBuffer) +#endif + +EXTERN void rcv_init (void); +EXTERN void rcv_ResetFormatter (void); +EXTERN UBYTE rcv_FrameType (T_FD *pFD); +EXTERN void rcv_SetHdlcFrame (T_FD *pFD, UBYTE *hdlc_data, USHORT *hdlc_len); +EXTERN void rcv_SetErrorRatio (T_FD *pFD); + +EXTERN BOOL rcv_StoreMsgData (T_FD *pFD, BOOL *primAvail); + +EXTERN BOOL rcv_GetMsgData (T_FAD_DATA_IND **fad_data_ind, BOOL data_incoming); +EXTERN void rcv_SetFinalBuffer (void); + +#ifdef _TARGET_ +EXTERN void l1i_ra_detect_req(T_RA_DETECT_REQ *ra_detect_req); +#endif + +/* + * FAD SND + * + * SND primitive processing + */ + +#ifdef OPTION_MULTITHREAD + #define snd_ra_ready_ind _ENTITY_PREFIXED(snd_ra_ready_ind) +#endif + +EXTERN void snd_ra_ready_ind (T_RA_READY_IND *ra_ready_ind); + +/* + * SND signal processing + */ +#ifdef OPTION_MULTITHREAD +/* KER -> SND */ + #define sig_ker_snd_activate_req _ENTITY_PREFIXED(sig_ker_snd_activate_req) + #define sig_ker_snd_sync_req _ENTITY_PREFIXED(sig_ker_snd_sync_req) + #define sig_ker_snd_train_req _ENTITY_PREFIXED(sig_ker_snd_train_req) + #define sig_ker_snd_tcf_req _ENTITY_PREFIXED(sig_ker_snd_tcf_req) + #define sig_ker_snd_preamble_req _ENTITY_PREFIXED(sig_ker_snd_preamble_req) + #define sig_ker_snd_bcs_req _ENTITY_PREFIXED(sig_ker_snd_bcs_req) + #define sig_ker_snd_status_req _ENTITY_PREFIXED(sig_ker_snd_status_req) +/* SND -> KER */ + #define sig_snd_ker_ready_ind _ENTITY_PREFIXED(sig_snd_ker_ready_ind) + #define sig_snd_ker_data_sent_ind _ENTITY_PREFIXED(sig_snd_ker_data_sent_ind) +#endif + +EXTERN void sig_ker_snd_activate_req (T_FAD_ACTIVATE_REQ *fad_activate_req); +EXTERN void sig_ker_snd_sync_req (BOOL reset); +EXTERN void sig_ker_snd_train_req (T_FAD_DATA_REQ *fad_data_req, + BOOL send_fax); +EXTERN void sig_ker_snd_tcf_req (void); +EXTERN void sig_ker_snd_preamble_req (T_FAD_DATA_REQ *fad_data_req); +EXTERN void sig_ker_snd_bcs_req (T_FAD_DATA_REQ *fad_data_req); +EXTERN void sig_ker_snd_status_req (void); +EXTERN void sig_ker_snd_msg_req (T_FAD_DATA_REQ *fad_data_req); + +EXTERN void sig_snd_ker_ready_ind (void); +EXTERN void sig_snd_ker_data_sent_ind (void); + +/* + * SND procedures + */ + +#ifdef OPTION_MULTITHREAD + #define snd_init _ENTITY_PREFIXED(snd_init) + #define snd_SendReset _ENTITY_PREFIXED(snd_SendReset) + #define snd_SetSequence _ENTITY_PREFIXED(snd_SetSequence) + #define snd_SendSequence _ENTITY_PREFIXED(snd_SendSequence) + #define snd_DurationToBytes _ENTITY_PREFIXED(snd_DurationToBytes) + #define snd_BuildStatusFrames _ENTITY_PREFIXED(snd_BuildStatusFrames) + #define snd_StoreMsgData _ENTITY_PREFIXED(snd_StoreMsgData) + #define snd_SendMsgData _ENTITY_PREFIXED(snd_SendMsgData) + #define snd_SendBcsData _ENTITY_PREFIXED(snd_SendBcsData) +#endif + +EXTERN void snd_init (void); +GLOBAL void snd_SendReset (USHORT bytes_to_send); +EXTERN void snd_SetSequence (UBYTE *seq_buf, USHORT *seq_buflen, + UBYTE *sequence, USHORT seq_len, + USHORT repeat); +EXTERN USHORT snd_SendSequence (USHORT bytes_to_send, UBYTE fr_type); +EXTERN USHORT snd_DurationToBytes (USHORT trans_rate, USHORT duration); + +#ifdef _SIMULATION_ +EXTERN void snd_BuildStatusFrames(T_FAD_DATA_REQ *fad_data_req, USHORT max_bytes); +#else +EXTERN void snd_BuildStatusFrames(T_FAD_DATA_REQ *fad_data_req); +#endif + +EXTERN void snd_StoreMsgData (T_FAD_DATA_REQ *fad_data_req); +EXTERN BOOL snd_SendMsgData (UBYTE req_frames); + +#ifdef _SIMULATION_ +EXTERN void snd_SendBcsData (USHORT bytes_to_send); +#else +EXTERN void snd_SendBcsData (void); +#endif + +/* SBM_RBM_BEGIN */ +/* + * Send Buffer Management SBM + */ +#ifdef OPTION_MULTITHREAD + #define sbm_init _ENTITY_PREFIXED(sbm_init) + #define sbm_store_prim _ENTITY_PREFIXED(sbm_store_prim) + #define sbm_get_frame _ENTITY_PREFIXED(sbm_get_frame) + #define sbm_free_empty_prims _ENTITY_PREFIXED(sbm_free_empty_prims) +#endif + +EXTERN void sbm_init (USHORT frameSize); +EXTERN void sbm_store_prim (T_SBM_PRIM *sendPrim); +EXTERN BOOL sbm_get_frame (T_FRAME_DESC *frameDesc, UBYTE reqFrames); +EXTERN void sbm_free_empty_prims (void); + +/* + * Receive Buffer Management RBM + */ + +#ifdef OPTION_MULTITHREAD + #define rbm_init _ENTITY_PREFIXED(rbm_init ) + #define rbm_deinit _ENTITY_PREFIXED(rbm_deinit ) + #define rbm_reset _ENTITY_PREFIXED(rbm_reset ) + #define rbm_store_frames _ENTITY_PREFIXED(rbm_store_frames ) + #define rbm_get_prim _ENTITY_PREFIXED(rbm_get_prim ) + #define rbm_get_curr_prim _ENTITY_PREFIXED(rbm_get_curr_prim ) +#endif + +EXTERN void rbm_init(USHORT framesPerPrim); +EXTERN void rbm_deinit(BOOL final); +EXTERN void rbm_reset(void); + +EXTERN BOOL rbm_store_frames(T_FD *pFDw, BOOL *primIsReady); + +EXTERN T_RBM_PRIM *rbm_get_prim(void); +EXTERN T_RBM_PRIM *rbm_get_curr_prim(void); + +/* + * Communication handles + */ +#ifdef OPTION_MULTITHREAD + #define hCommT30 _ENTITY_PREFIXED(hCommT30) +#ifdef _SIMULATION_ + #define hCommRA _ENTITY_PREFIXED(hCommRA) +#endif +#endif + +#ifdef FAD_PEI_C + +GLOBAL T_HANDLE fad_handle; /* own handle */ +GLOBAL T_HANDLE hCommT30 = VSI_ERROR; /* T30 Communication */ +#ifdef _SIMULATION_ +GLOBAL T_HANDLE hCommRA = VSI_ERROR; /* RA Communication */ +#endif + +#else + +EXTERN T_HANDLE fad_handle; /* own handle */ +EXTERN T_HANDLE hCommT30; /* T30 Communication */ +#ifdef _SIMULATION_ +EXTERN T_HANDLE hCommRA; /* RA Communication */ +#endif + +#endif + +GLOBAL void fad_exec_timeout(USHORT index); + +#define BYTE2HEXSTR(B, H) {UBYTE b, *a = (UBYTE*)(H);\ + b = (((UBYTE)(B)) >> 4) & 0x0F;\ + if (b > 9) b += 'A'-10; else b += '0'; *a = b;\ + b = ((UBYTE)(B)) & 0x0F;\ + if (b > 9) b += 'A'-10; else b += '0'; *(a+1) = b;} + +#endif