FreeCalypso > hg > fc-magnetite
view src/g23m-fad/fad/fad.h @ 622:9f19cc5e46e8
FCDEV3B-751774 experiment documented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 18 Nov 2019 05:03:15 +0000 |
parents | 90eb61ecd093 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | 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