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