FreeCalypso > hg > fc-selenite
view src/g23m-gsm/cc/cc.h @ 26:db9c43a9e218
components: condat2 paths changed to just condat
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 15 Jul 2018 23:12:02 +0000 |
parents | d393cd9bb723 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : | Modul : +----------------------------------------------------------------------------- | 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 Call Control. +----------------------------------------------------------------------------- */ #ifndef CC_H #define CC_H #ifdef TI_PS_HCOMM_CHANGE #include "cl_hComm_handle.h" #endif #ifdef TI_GSP_STR2IND_S2I_STRING typedef unsigned int T_S2I_STRING; #else typedef char * T_S2I_STRING; #define S2I_STRING(x) (x) #endif #ifdef TI_PS_OP_VSI_NO_CALL_ID #define TIMER_START(C,I,T) vsi_t_start_nc(I,T) #define TIMER_PSTART(C,I,T,R) vsi_t_pstart_nc(I,T,R) #define TIMER_STOP(C,I) vsi_t_stop_nc(I) #define TIMER_STATUS(C,I,T) vsi_t_status_nc(I,T) #define SUSPEND_SELF(C,T) vsi_t_sleep_nc(T) #define SYSTEM_TIME(C,T) vsi_t_time_nc(T) #else /* TI_PS_OP_VSI_NO_CALL_ID */ #define TIMER_START(C,I,T) vsi_t_start(C,I,T) #define TIMER_PSTART(C,I,T,R) vsi_t_pstart(C,I,T,R) #define TIMER_STOP(C,I) vsi_t_stop(C,I) #define TIMER_STATUS(C,I,T) vsi_t_status(C,I,T) #define SUSPEND_SELF(C,T) vsi_t_sleep(C,T) #define SYSTEM_TIME(C,T) vsi_t_time(C,T) #endif /* TI_PS_OP_VSI_NO_CALL_ID */ #ifdef MNCC_TI_BERLIN /* The code is compiled for TI Berlin, some differences (for now) */ #define TI_BERLIN /* Texas Instruments Berlin wants to compile for GSM always */ #define TI_GSM /* Define TI_CAUSE_U16 for TI Berlin U16 bitmap cause concept */ #define TI_CAUSE_U16 /* Make a compatible definition for "no cause present" */ #define CAUSE_CC_NO_ERROR MNCC_CAUSE_NO_MS_CAUSE /* Protocoldiscriminator CC */ #define M_MM_PD_CC 3 /* Originating entity for MMCM */ #define NAS_ORG_ENTITY_CC MMCM_ORG_ENTITY_CC /* * TI Berlin has no "NAS_" defines and typedef, map what's needed to compile */ #define NAS_CH_SDCCH MMCM_CH_SDCCH #define NAS_CH_TCH_F MMCM_CH_TCH_F #define NAS_CH_TCH_H MMCM_CH_TCH_H #define NAS_CHM_SIG_ONLY MMCM_CHM_SIG_ONLY #define NAS_CHM_SPEECH MMCM_CHM_SPEECH #define NAS_CHM_SPEECH_V2 MMCM_CHM_SPEECH_V2 #define NAS_CHM_SPEECH_V3 MMCM_CHM_SPEECH_V3 #define NAS_CHM_DATA_9_6 MMCM_CHM_DATA_9_6 #define NAS_CHM_DATA_4_8 MMCM_CHM_DATA_4_8 #define NAS_CHM_DATA_2_4 MMCM_CHM_DATA_2_4 #define NAS_CHM_DATA_14_4 MMCM_CHM_DATA_14_4 typedef T_MNCC_fac_inf T_NAS_fac_inf; #else /* TI DK */ #define IS_CAUSE_INVALID(cause) (cause EQ CAUSE_CC_NO_ERROR) #endif /* else, #ifdef MNCC_TI_BERLIN */ /* * Some macros to give the optimize the chance to optimize code away, * making it possible to save some #ifdefs for GSM / UMTS only configurations. */ #ifdef TI_DUAL_MODE /* In dual mode we have to evaluate the RAT at runtime */ #define IS_RAT_UMTS_FDD() (cc_current_rat EQ PS_RAT_UMTS_FDD) #define IS_RAT_GSM() (cc_current_rat EQ PS_RAT_GSM) #else #ifdef TI_GSM /* GSM/GPRS only phone, RAT is always GSM/GPRS */ #define IS_RAT_UMTS_FDD() FALSE #define IS_RAT_GSM() TRUE #else /* UMTS only phone, RAT is always UMTS */ #define IS_RAT_UMTS_FDD() TRUE #define IS_RAT_GSM() FALSE #endif #endif /* #ifdef TI_DUAL_MODE */ /* * Definition whether bearer caps shall be traced */ #ifndef NTRACE #define TRACE_BCAP #endif /* * Definition whether a shared CCD buffer shall be used */ #define SHARED_CCD_BUF /*==== CONSTANTS ==================================================*/ /* * Macros */ #ifdef FRAME_OFFSET_ZERO #define GET_PD(s,p) p = s.buf[3] & 0x0F #define GET_TI(s,t) t = (s.buf[3] & 0xF0)>>4 #define SET_PD(s,p) s.buf[3] = (s.buf[3] & 0xF0) + p #define SET_TI(s,t) s.buf[3] = (s.buf[3] & 0x0F) + (t<<4) #else #define GET_PD(s,p) ccd_decodeByte(s.buf,(USHORT)(s.o_buf+4),4,&p) #define GET_TI(s,t) ccd_decodeByte(s.buf,s.o_buf,4,&t) #define GET_TI_EXT(s,t) ccd_decodeByte(s.buf,(USHORT)(s.o_buf+8),8,&t) #define SET_PD(s,p) ccd_codeByte(s.buf,(USHORT)(s.o_buf-4),4,p) #define SET_TI(s,t) ccd_codeByte(s.buf,(USHORT)(s.o_buf-8),4,t) #endif #define SET_DTMF_MOD( key, mode ) (((key) & 0x7F) | ((mode) << 7)) #define GET_DTMF_MOD( key ) (((key) & 0x80) >> 7) /* * The assert() macro as defined by the frame stops the task, * not only in simulation but also on the target. For the * simulation this is a desired behaviour, for the target it is not. */ #ifndef WIN32 #undef assert #define assert(x) if (!(x)) { TRACE_ERROR ("Assertion failed"); } #endif /* * Bitoffset for encoding/decoding */ #define CC_ENCODE_OFFSET L3_CODING_OFFSET #define ENCODE_OFFSET CC_ENCODE_OFFSET /* macro used by mem alloc macros */ /* * Dynamic Configuration Numbers */ /* Not present currently for entity CC */ #ifdef WIN32 #define ID_STD 7 #endif/* WIN32 */ /* * Timer indices, configuration parameters */ #define T303 0 #define T305 1 #define T308 2 #define T310 3 #define T313 4 #define T323 5 #define T332 6 #define T335 7 #define T336 8 #define T337 9 #define NUM_OF_CC_TIMERS MAX_CC_TIMER /* * Information Element Identifier */ #define PROGRESS_IEI 0x1E #define REPEAT_IEI 0x0D #define CONNECTED_NUMBER_IEI 0x4C #define CONNECTED_SUBADDR_IEI 0x4D #define CAUSE_IEI 0x08 #define NOTIFICATION_IEI 0x00 /* ???? */ #define SIGNAL_IEI 0x34 #define CALLING_PARTY_BCD_IEI 0x5C #define CALLING_PARTY_SUB_IEI 0x5D #define CALLED_PARTY_BCD_IEI 0x5E #define CALLED_PARTY_SUB_IEI 0x6D #define BEARER_CAP_IEI 0x04 /* * Call Type */ #define CALL_TYPE_MTC 1 #define CALL_TYPE_MOC 0 /* * DTMF States */ #define DTMF_IDLE 0 #define DTMF_SEND_REQUEST 1 #define DTMF_STOP_REQUEST 2 #define DTMF_SEND_ACKNOWLEDGE 3 /* * DTMF mode */ #define DTMF_AUTO 0 #define DTMF_MAN 1 /* * Compatibility Check Result Codes */ #define OKAY 0 #define NEGOTIATION 1 #define ERROR 2 #define BAD_SUBADDRESS 3 /* * Intermediate States */ #define CS_101 0xd #define CS_261 0xe /* * Maximum Length of SDU */ #define LEN_U_SETUP (128*8) #define LEN_U_RELEASE_COMPLETE ( 34*8) #define LEN_U_RELEASE ( 34*8) #define LEN_U_DISCONNECT ( 33*8) #define LEN_U_MODIFY_REJ ( 47*8) #define LEN_U_CONNECT ( 2*8) #define LEN_U_ALERT ( 2*8) #define LEN_U_USER_USER ( 5*8) #define LEN_U_FACILITY ( 5*8) /* * Max number of speech codecs for bearer capabilities */ #define MAX_SPEECH_CODECS 5 /* * Define the valid flag for the extended transaction identifier */ #define EXTENDED_TI_VALID 0x80 /*==== TYPES ======================================================*/ typedef struct { UBYTE t_mode; ULONG t_val; } T_TIMER_CONFIG; typedef struct { UBYTE state; UBYTE mode; UBYTE key; /* Last key which was sent */ UBYTE read; UBYTE write; UBYTE buf[DTMF_BUF_SIZE]; } T_DTMF; typedef struct { UBYTE serv1; UBYTE serv2; UBYTE ri; T_M_CC_bearer_cap bc1; T_M_CC_bearer_cap bc2; T_MNCC_bcpara bcpara1; T_MNCC_bcpara bcpara2; UBYTE neg_serv1; UBYTE neg_serv2; UBYTE neg_ri; T_M_CC_bearer_cap neg_bc1; T_M_CC_bearer_cap neg_bc2; T_MNCC_bcpara neg_bcpara1; T_MNCC_bcpara neg_bcpara2; UBYTE active_service; UBYTE mt; UBYTE ti; /* Transaction Identifier */ UBYTE ti_ext; /* extension octet of ti, if any */ UBYTE ti_rec; BOOL ti_ext_pres; /* presence of extension octet of ti */ UBYTE index_ti; UBYTE error; UBYTE error_count; UBYTE error_inf [MAX_ERROR_TAGS]; UBYTE channel_type; UBYTE channel_mode; UBYTE progress_desc[MAX_CC_CALLS]; UBYTE new_itc; UBYTE old_itc; T_M_CC_calling_subaddr my_party_subaddr; BOOL negotiation; UBYTE timer [MAX_CC_TIMER]; UBYTE stored_ti_values [MAX_CC_CALLS]; UBYTE call_type [MAX_CC_CALLS]; // PATCH LE 10.04.00 // new variables to check disconnect collision UBYTE disc_coll [MAX_CC_CALLS]; // END PATCH LE 10.04.00 UBYTE t308_counter [MAX_CC_CALLS]; T_DTMF dtmf [MAX_CC_CALLS]; UBYTE state [MAX_CC_CALLS]; UBYTE hold_state [MAX_CC_CALLS]; UBYTE mpty_state [MAX_CC_CALLS]; /* stores the cause used by the MS (not by the network) */ USHORT cc_cause [MAX_CC_CALLS]; #ifdef OPTION_REF T_PRIM * stored_prim [MAX_STORED_PRIM]; #else T_PRIM stored_prim [MAX_STORED_PRIM]; #endif UBYTE stored_prim_write; UBYTE stored_prim_read; UBYTE stored_prim_in; UBYTE stored_prim_out; EF_MSCAP mscap; // EF_MSSUP mssup; T_M_CC_call_ctrl_cap call_ctrl_cap; /* The pointer to the readily built uplink SETUP or EC SETUP message */ T_MMCM_DATA_REQ * stored_setup; T_MNCC_bcpara sns_bcpara; UBYTE sns_mode; UBYTE ctm_ena; /* Connection element to be used in a MTC, set by at+cbst */ UBYTE conn_elem; /* Pointer to stored MMCC_DATA_REQ which contains the CCBS SETUP message */ T_MMCM_DATA_REQ * stored_ccbs_setup; /* Establishment cause */ USHORT estcs; /* Number of retries to establish a MO call */ UBYTE setup_attempts; /* Transaction identifier for setup reattempt, NOT_PRESENT_8BIT if none */ UBYTE setup_reattempt_ti; /* Buffer for trace outputs, it doesn't save you anything if this * buffer is kept on the stack as stack is a scarce resource */ #ifdef TRACE_BCAP char string_buf[80]; #endif /* #ifdef TRACE_BCAP */ } T_CC_DATA; /*==== EXPORT =====================================================*/ /* * Prototypes Formatter */ EXTERN void for_init (void); EXTERN void for_mmcm_est_ind (T_MMCM_ESTABLISH_IND * mmcm_establish_ind); EXTERN void for_mmcm_data_ind (T_MMCM_DATA_IND * mmcm_data_ind ); EXTERN void for_decode (T_PRIM * prim, BOOL est_flag); EXTERN void for_d_alert (void); EXTERN void for_d_call_proceed (void); EXTERN void for_d_connect (void); EXTERN void for_d_facility (void); EXTERN void for_d_disconnect (void); EXTERN void for_b_modify (void); EXTERN void for_b_modify_comp (void); EXTERN void for_b_modify_rej (void); EXTERN void for_b_notify (void); EXTERN void for_d_progress (void); EXTERN void for_d_release (void); EXTERN void for_d_release_comp (void); EXTERN void for_d_cc_establishment (void); EXTERN void for_d_recall (void); EXTERN void for_d_setup (void); EXTERN void for_d_start_dtmf_ack (void); EXTERN void for_d_start_dtmf_rej (void); EXTERN void for_b_status (void); EXTERN void for_d_hold_rej (void); EXTERN void for_d_retrieve_rej (void); EXTERN void for_b_congest_ctrl (void); EXTERN void for_b_user_information (void); EXTERN BOOL cc_check_critical_error (UBYTE ccd_err); EXTERN void for_mmcm_sync_ind (T_MMCM_SYNC_IND * mmcm_sync_ind ); EXTERN void for_mmcm_est_cnf (T_MMCM_ESTABLISH_CNF * mmcm_establish_cnf ); EXTERN void for_mmcm_rel_ind (T_MMCM_RELEASE_IND * mmcm_release_ind ); EXTERN void for_mmcm_err_ind (T_MMCM_ERROR_IND * mmcm_error_ind ); EXTERN void for_mmcm_reest_cnf (T_MMCM_REESTABLISH_CNF* mmcm_reestablish_cnf); EXTERN void for_mmcm_prompt_ind (T_MMCM_PROMPT_IND * mmcm_prompt_ind); EXTERN void for_est_req (T_MMCM_ESTABLISH_REQ * mmcm_establish_req ); EXTERN void for_rel_req (void); EXTERN void for_reest_req (void); EXTERN void for_start_cc (T_U_START_CC * start_cc); EXTERN void for_cc_est_confirm (T_U_CC_EST_CONF * est_cnf); EXTERN void for_setup (T_U_SETUP * setup); EXTERN void for_emergency_setup (T_U_EMERGE_SETUP * emerg_setup); EXTERN void for_status (T_B_STATUS * status); EXTERN void for_release_complete (T_U_RELEASE_COMP * rel_com); EXTERN void for_disconnect (T_U_DISCONNECT * disconnect); EXTERN void for_modify_reject (T_B_MODIFY_REJ * modify_rej); EXTERN void for_modify_complete (T_B_MODIFY_COMP * mod_com); EXTERN void for_start_dtmf (T_U_START_DTMF * start_dtmf); EXTERN void for_stop_dtmf (void); EXTERN void for_call_confirm (T_U_CALL_CONF * call_confirm); EXTERN void for_release (T_U_RELEASE * release); EXTERN void for_connect_ack (T_B_CONNECT_ACK *b_connect_ack); EXTERN void for_retrieve (void); EXTERN void for_hold (void); EXTERN void for_user_information (T_B_USER_INFO * user_info); EXTERN void for_congestion_control (T_B_CONGEST_CTRL * cong); EXTERN void for_modify (T_B_MODIFY * modify); EXTERN void for_connect (T_U_CONNECT * connect); EXTERN void for_alert (T_U_ALERT * alert); EXTERN void for_facility (T_U_FACILITY * facility); EXTERN void for_pd (T_MMCM_DATA_REQ * mmcm_data_req); /* * Prototypes Formatter Functions */ EXTERN BOOL for_check_called_party_bcd (UBYTE ton, UBYTE npi); EXTERN BOOL for_check_called_party_sub (T_M_CC_called_subaddr * called_subaddr); EXTERN BOOL for_check_calling_party_bcd (T_M_CC_calling_num * calling_num); EXTERN BOOL for_check_calling_party_sub (T_M_CC_calling_subaddr * calling_subaddr); EXTERN void for_check_call_state (T_M_CC_call_state * call_state); EXTERN BOOL for_check_cc_cause (T_M_CC_cc_cause * cc_cause); EXTERN BOOL for_check_notification (T_M_CC_notific * notify); EXTERN BOOL for_check_progress_indicator (T_M_CC_progress * progress); EXTERN BOOL for_check_repeat_indicator (UBYTE repeat); EXTERN BOOL for_check_signal (UBYTE signal); EXTERN BOOL cc_check_critical_error (UBYTE ccd_err); /* * If all entities are linked into one module this definitions * prefixes all this functions with the enity name */ #ifdef OPTION_MULTITHREAD #define for_set_conditional_error _ENTITY_PREFIXED(for_set_conditional_error) #ifdef REL99 #define for_set_content_error _ENTITY_PREFIXED(for_set_content_error) #endif #define for_set_mandatory_error _ENTITY_PREFIXED(for_set_mandatory_error) #define for_set_optional_error _ENTITY_PREFIXED(for_set_optional_error) #endif EXTERN void for_set_conditional_error (UBYTE iei); EXTERN void for_set_mandatory_error (UBYTE iei); EXTERN void for_set_optional_error (UBYTE iei); /* * Prototypes Call Control (Establishment) */ EXTERN void cc_init (void); EXTERN void cc_init_data (void); EXTERN void cc_mncc_configure_req (T_MNCC_CONFIGURE_REQ * mncc_configure_req); EXTERN void cc_mncc_setup_req (T_MNCC_SETUP_REQ * mncc_setup_req ); EXTERN void cc_mncc_prompt_res (T_MNCC_PROMPT_RES * prompt); EXTERN void cc_mncc_prompt_rej (T_MNCC_PROMPT_REJ * prompt); EXTERN void cc_mncc_alert_req (T_MNCC_ALERT_REQ * mncc_alert_req ); EXTERN void cc_mncc_setup_res (T_MNCC_SETUP_RES * mncc_setup_res ); EXTERN void cc_alert (T_D_ALERT * alert); EXTERN void cc_call_proceeding (T_D_CALL_PROCEED * proceed); EXTERN void cc_connect (T_D_CONNECT * connect); EXTERN void cc_connect_ack (void); EXTERN void cc_progress (T_D_PROGRESS * progress); EXTERN void cc_setup (T_D_SETUP * setup); EXTERN void cc_sync_ind (T_MMCM_SYNC_IND *mmcc_sync_ind); EXTERN void cc_est_cnf (void); EXTERN void cc_reest_cnf (void); EXTERN void cc_cc_establishment (T_U_SETUP * setup); EXTERN void cc_recall (T_D_RECALL * recall); #ifdef SIM_TOOLKIT EXTERN void cc_mncc_bearer_cap_req (T_MNCC_BEARER_CAP_REQ * bc_req); #endif /* SIM_TOOLKIT */ /* * Prototypes Call Control (Active Phase) */ EXTERN void cc_mncc_facility_req (T_MNCC_FACILITY_REQ * mncc_facility_req ); EXTERN void cc_mncc_start_dtmf_req (T_MNCC_START_DTMF_REQ * mncc_start_dtmf_req); EXTERN void cc_reset_dtmf (void); EXTERN void cc_mncc_modify_req (T_MNCC_MODIFY_REQ * mncc_modify_req ); EXTERN void cc_mncc_user_req (T_MNCC_USER_REQ * mncc_user_req ); EXTERN void cc_mncc_hold_req (T_MNCC_HOLD_REQ * mncc_hold_req ); EXTERN void cc_mncc_retrieve_req (T_MNCC_RETRIEVE_REQ * mncc_retrieve_req ); EXTERN void cc_mncc_sync_req (T_MNCC_SYNC_REQ * mncc_sync_req ); EXTERN void cc_mncc_status_res (T_MNCC_STATUS_RES * mncc_status_res ); EXTERN void cc_facility (T_D_FACILITY * facility); EXTERN void cc_start_dtmf_ack (T_D_START_DTMF_ACK * start_dtmf_ack); EXTERN void cc_start_dtmf_rej (T_D_START_DTMF_REJ * start_dtmf_rej); EXTERN void cc_stop_dtmf (void); EXTERN void cc_stop_dtmf_ack (void); EXTERN void cc_hold_ack (void); EXTERN void cc_hold_rej (T_D_HOLD_REJ * hold_rej); EXTERN void cc_retrieve_ack (void); EXTERN void cc_retrieve_rej (T_D_RETRIEVE_REJ * retrieve_rej); EXTERN void cc_congestion_control (T_B_CONGEST_CTRL * cong); EXTERN void cc_user_information (T_B_USER_INFO * user); EXTERN void cc_modify (T_B_MODIFY * modify); EXTERN void cc_mod_reject (void); EXTERN void cc_mod_complete (void); EXTERN void cc_modify_complete (T_B_MODIFY_COMP * mod_com); EXTERN void cc_modify_reject (T_B_MODIFY_REJ * mod_rej); EXTERN void cc_status (T_B_STATUS * status); EXTERN void cc_status_enquiry (void); EXTERN void cc_unknown_message (void); /* * Prototypes Call Control (Release) */ EXTERN void cc_mncc_disconnect_req (T_MNCC_DISCONNECT_REQ * mncc_disconnect_req); EXTERN void cc_mncc_reject_req (T_MNCC_REJECT_REQ * rej); EXTERN void cc_mncc_release_req (T_MNCC_RELEASE_REQ * mncc_release_req ); EXTERN void cc_disconnect (T_D_DISCONNECT * disconnect); EXTERN void cc_release (T_D_RELEASE * release); EXTERN void cc_release_complete (T_D_RELEASE_COMP * rel_com); EXTERN void cc_rel_ind (USHORT cause); EXTERN void cc_err_ind (T_MMCM_ERROR_IND *mmcm_error_ind); /* * Prototypes Call Control Functions */ EXTERN BOOL cc_voice_capability (void); EXTERN BOOL cc_bcs_compatible (const T_M_CC_bearer_cap * bc1, const T_M_CC_bearer_cap * bc2, BOOL full); EXTERN void cc_build_llc (UBYTE * v_low_layer_compat, T_M_CC_low_layer_comp * low_layer_compat, const T_M_CC_bearer_cap * bc); EXTERN void cc_build_bc (T_M_CC_bearer_cap * bearer_cap, UBYTE * serv, const T_MNCC_bcpara * bc_params); EXTERN void cc_set_conn_elem (T_M_CC_bearer_cap * bearer_cap, UBYTE conn_elem, UBYTE flow_control); EXTERN void cc_set_sync_async (T_M_CC_bearer_cap * bearer_cap, const T_MNCC_bcpara * bcpara); EXTERN void cc_set_user_rate (T_M_CC_bearer_cap * bearer_cap, UBYTE rate, UBYTE modem_type); EXTERN void cc_build_call_confirm (T_U_CALL_CONF * call_cnf, USHORT cause); EXTERN void cc_build_cc_est_confirm (T_U_CC_EST_CONF * cc_est_conf, USHORT cause); EXTERN void cc_build_congestion_control (const T_MNCC_USER_REQ * user, T_B_CONGEST_CTRL * cong_ctrl); EXTERN void cc_build_disconnect (T_U_DISCONNECT * disconnect, USHORT cause, const T_NAS_fac_inf * fac_inf, UBYTE ss_ver); EXTERN void cc_build_emergency_setup (T_U_EMERGE_SETUP * emergency_setup); EXTERN void cc_build_facility (const T_MNCC_FACILITY_REQ * facility, T_U_FACILITY * facility_msg); EXTERN void cc_build_mncc_alert_ind (const T_D_ALERT * alert, T_MNCC_ALERT_IND * alert_ind); EXTERN void cc_build_mncc_proceed_ind (const T_D_CALL_PROCEED * proceed, T_MNCC_CALL_PROCEED_IND * proceed_ind); EXTERN void cc_build_mncc_facility_ind (const T_D_FACILITY * facility, T_MNCC_FACILITY_IND * facility_ind); EXTERN void cc_build_mncc_progress_ind (const T_D_PROGRESS * progress, T_MNCC_PROGRESS_IND * progress_ind); EXTERN void cc_build_mncc_setup_cnf (const T_D_CONNECT * connect, T_MNCC_SETUP_CNF * setup_cnf); EXTERN void cc_build_mncc_setup_ind (const T_D_SETUP * setup, T_MNCC_SETUP_IND * setup_ind); EXTERN void cc_build_modify (const T_MNCC_MODIFY_REQ * modify, T_B_MODIFY * modify_msg); EXTERN void cc_build_modify_complete (T_B_MODIFY_COMP * modify_com); EXTERN void cc_build_modify_reject (T_B_MODIFY_REJ * modify_rej, USHORT cause); EXTERN void cc_build_release (T_U_RELEASE * release, USHORT cause, const T_NAS_fac_inf * fac_inf, UBYTE ss_ver); EXTERN void cc_build_release_complete (T_U_RELEASE_COMP * rel_com, USHORT cause); EXTERN void cc_build_start_cc (T_U_START_CC * start_cc); EXTERN void cc_build_llc_hlc (T_U_SETUP * setup); EXTERN void cc_build_cc_capabilities (T_U_SETUP * setup); EXTERN void cc_build_setup (T_U_SETUP * setup_msg, const T_MNCC_SETUP_REQ *setup_prm); EXTERN void cc_build_start_dtmf (UBYTE key, T_U_START_DTMF * start_dtmf); EXTERN void cc_build_alert (T_U_ALERT * alert_msg); EXTERN void cc_build_connect (T_U_CONNECT * connect_msg); EXTERN void cc_build_status (T_B_STATUS * status, USHORT cause); EXTERN void cc_build_user_ind_from_cong (T_MNCC_USER_IND * user, const T_B_CONGEST_CTRL * cong); EXTERN void cc_build_user_ind_from_user (T_MNCC_USER_IND * user_ind, const T_B_USER_INFO * user); EXTERN void cc_build_user_information (T_MNCC_USER_REQ * user, T_B_USER_INFO * user_msg); EXTERN BOOL cc_check_error_flag (void); EXTERN UBYTE cc_compatibility_check (const T_D_SETUP * setup); EXTERN UBYTE cc_basic_service_align (T_U_SETUP * setup); EXTERN UBYTE cc_count_active_connections (void); EXTERN void cc_disconnect_after_timeout (void); EXTERN void cc_encode_cause (T_M_CC_cc_cause * cc_cause, USHORT cause); EXTERN UBYTE cc_mtc_check_subaddr (const T_D_SETUP * setup); EXTERN UBYTE cc_moc_compatibility (const T_D_CALL_PROCEED * proceed); EXTERN void cc_set_state (UBYTE new_state); EXTERN UBYTE cc_check_bc (const T_M_CC_bearer_cap * bearer_cap, T_M_CC_bearer_cap * neg_bearer_cap, T_MNCC_bcpara * bcpara, UBYTE * service, BOOL * negotiation); EXTERN void cc_set_radio_channel_requirement (T_M_CC_bearer_cap * bearer_cap, const T_MNCC_bcpara * bc_para); EXTERN void cc_set_trans_cap (T_M_CC_bearer_cap * bearer_cap, const T_MNCC_bcpara * bcpara); EXTERN void cc_set_data_default_parameter (T_M_CC_bearer_cap * bearer_cap); EXTERN void cc_build_facility_ind (UBYTE context, UBYTE valid, const T_M_CC_facility * facility); EXTERN void cc_build_user_user_ind (UBYTE context, UBYTE valid, T_M_CC_user_user * user_user); EXTERN UBYTE cc_check_capabilities (const T_MNCC_bcpara * bcpara); EXTERN void cc_check_transparent_async (UBYTE * found, const T_M_CC_bearer_cap * bearer_cap, T_M_CC_bearer_cap * neg_bearer_cap, T_MNCC_bcpara * bcpara, BOOL * negotiation); EXTERN void cc_check_non_transparent_async (UBYTE * found, const T_M_CC_bearer_cap * bearer_cap, T_M_CC_bearer_cap * neg_bearer_cap, T_MNCC_bcpara * bcpara, BOOL * negotiation); EXTERN UBYTE cc_check_transparent_fax (const T_M_CC_bearer_cap * bearer_cap, T_M_CC_bearer_cap * neg_bearer_cap, T_MNCC_bcpara * bcpara, BOOL * negotiation); #ifdef SIM_TOOLKIT EXTERN UBYTE cc_bearer_cap_code (const T_MNCC_bcpara *bcpara, T_MNCC_bcconf *bcconf ); EXTERN UBYTE cc_bearer_cap_decode (const T_MNCC_bcconf *bcconf, T_MNCC_bcpara *bcpara ); #endif /* CQ 23619: Added supplementary diagnostic handling */ EXTERN UBYTE cc_get_ss_diag ( USHORT curr_cause, T_D_DISCONNECT * disc); EXTERN UBYTE cc_build_cause (T_M_CC_cc_cause * decoded_cause_val, UBYTE * raw_cause_bytes); /* Implements Measure# 3 and streamline encoding */ EXTERN void cc_send_status (USHORT cause); /* * Prototypes Services */ /* * If all entities are linked into one module this definitions * prefixes all this functions with the enity name */ #ifdef OPTION_MULTITHREAD #define srv_convert_ti _ENTITY_PREFIXED(srv_convert_ti) #define srv_define_ti _ENTITY_PREFIXED(srv_define_ti) #define srv_free_ti _ENTITY_PREFIXED(srv_free_ti) #define srv_free_stored_setup _ENTITY_PREFIXED(srv_free_stored_setup) #define srv_store_prim _ENTITY_PREFIXED(srv_store_prim) #define srv_use_stored_prim _ENTITY_PREFIXED(srv_use_stored_prim) #endif EXTERN UBYTE srv_convert_ti (UBYTE ti); EXTERN UBYTE srv_define_ti (void); EXTERN void srv_free_ti (void); EXTERN void srv_free_stored_setup (void); EXTERN void srv_store_prim (T_PRIM * prim); EXTERN void srv_use_stored_prim (void); /* * Prototypes Timer */ /* * If all entities are linked into one module this definitions * prefixes all this functions with the enity name */ #ifdef OPTION_MULTITHREAD #define tim_exec_timeout _ENTITY_PREFIXED(tim_exec_timeout) #define tim_t303_u0_1 _ENTITY_PREFIXED(tim_t303_u0_1) #define tim_t303_u1 _ENTITY_PREFIXED(tim_t303_u1) #define tim_t305_u11 _ENTITY_PREFIXED(tim_t305_u11) #define tim_t308_u19 _ENTITY_PREFIXED(tim_t308_u19) #define tim_t310_u3 _ENTITY_PREFIXED(tim_t310_u3) #define tim_t313_u8 _ENTITY_PREFIXED(tim_t313_u8) #define tim_t323_u26 _ENTITY_PREFIXED(tim_t323_u26) #define tim_t332_u0_3 _ENTITY_PREFIXED(tim_t332_u0_3) #define tim_t335_u0_5 _ENTITY_PREFIXED(tim_t335_u0_5) #define tim_t336 _ENTITY_PREFIXED(tim_t336) #define tim_t337 _ENTITY_PREFIXED(tim_t337) #endif EXTERN void tim_exec_timeout (USHORT index); EXTERN void tim_t303_u0_1 (void); EXTERN void tim_t303_u1 (void); EXTERN void tim_t305_u11 (void); EXTERN void tim_t308_u19 (void); EXTERN void tim_t310_u3 (void); EXTERN void tim_t313_u8 (void); EXTERN void tim_t323_u26 (void); EXTERN void tim_t332_u0_3 (void); EXTERN void tim_t335_u0_5 (void); EXTERN void tim_t336 (void); EXTERN void tim_t337 (void); /* * Prototypes Customer Specific Functions */ GLOBAL void cc_csf_ms_cap (void); #ifdef TRACE_BCAP #define trace_buf cc_data->string_buf #endif /* #ifdef TRACE_BCAP */ /* * CC uses two timers for each instance, one for DTMF operation (T336, T337) * and one for the support of all other CC timers. * The timer for the supervision of the CC states is addressed by the * transaction identifier, the timer for the supervision of DTMF operation * is addressed by the transaction identifier plus an offset of MAX_CC_CALLS. * The macros are looking a little bit too complicated, * but they have the advantage of avoiding a lot of #ifdefs in the * code and it is expected that the if clauses are optimized * away by the C compiler. So no disadvantage at runtime is expected * if these macros remain macros and are not altered to functions. */ #define TIMER_CC 0 /* Used to stop all timers except T336, T337 */ #define TIMER_DTMF 1 /* Uses to stop T336, T337 which control DTMF */ #define TIMERSTART(i,v) \ if ((i NEQ T336) AND (i NEQ T337)) \ TIMER_START (cc_handle, (USHORT)(cc_data->index_ti), v); \ else \ TIMER_START (cc_handle, (USHORT)(cc_data->index_ti+MAX_CC_CALLS), v); #define TIMERSTOP(i) \ if (i EQ TIMER_CC) \ TIMER_STOP (cc_handle, (USHORT)(cc_data->index_ti)); \ else \ TIMER_STOP (cc_handle, (USHORT)(cc_data->index_ti+MAX_CC_CALLS)); /* * If all entities are linked into one module this definitions * prefixes the global data with the enity name */ #ifdef OPTION_MULTITHREAD #ifdef TI_PS_HCOMM_CHANGE #else #define hCommMMI _ENTITY_PREFIXED(hCommMMI) #define hCommMM _ENTITY_PREFIXED(hCommMM) #endif #endif #ifdef TI_PS_HCOMM_CHANGE #else EXTERN T_HANDLE hCommMMI; /* MMI Communication */ EXTERN T_HANDLE hCommMM; /* MM Communication */ #endif EXTERN T_HANDLE cc_handle; /* * If all entities are linked into one module this definitions * prefixes the global data with the enity name */ #ifdef OPTION_MULTITHREAD #define _decodedMsg _ENTITY_PREFIXED(_decodedMsg) #endif #if !defined SHARED_CCD_BUF #define CCD_START #define CCD_END EXTERN UBYTE _decodedMsg []; #else EXTERN UBYTE * _decodedMsg; #define CCD_START _decodedMsg = ccd_begin(); #define CCD_END ccd_end(); #endif /* * If all entities are linked into one module this definitions * prefixes the global data with the enity name */ #ifdef OPTION_MULTITHREAD #define data_base _ENTITY_PREFIXED(data_base) #endif #ifdef OPTION_MULTIPLE_INSTANCE EXTERN T_CC_DATA data_base [MAX_INSTANCES]; #define GET_INSTANCE(p) &data_base[D2P(p)->custom.route.inst_no] #else EXTERN T_CC_DATA data_base; #define GET_INSTANCE_DATA register T_CC_DATA *cc_data= &data_base #endif /* * If all entities are linked into one module this definitions * prefixes the global data with the entity name */ #define bc_prio_0 _ENTITY_PREFIXED(bc_prio_0) EXTERN const UBYTE bc_prio_0 [4]; #ifndef _TMS470 int sprintf (char *, const char *, ...); /* Use appropriate include ... */ #define Sprintf sprintf #endif #ifdef WIN32 EXTERN UBYTE std; #endif /* WIN32 */ EXTERN void cc_pei_primitive (T_PRIM * prim); #endif