#ifndef __IMI_CC_H__ #define __IMI_CC_H__ /******************************************************************************* Copyright: - 2023- Copyrights of EigenComm Ltd. File name: - imicc.h Description: - IMS CC interface History: - 2023/04/10, Original created ******************************************************************************/ /********************************************************************************* ***************************************************************************** * Includes ***************************************************************************** *********************************************************************************/ #include "imicomm.h" /********************************************************************************* ***************************************************************************** * Macros ***************************************************************************** *********************************************************************************/ #define IMI_CC_MAX_DIAL_NUMBER_STR_LEN 80//TS24.008 10.5.4.7 called party BCD number digit max 40 octets #define IMI_CC_MAX_SUB_ADDR_LEN 20//TS24.008 10.5.4.8 #define IMI_CC_MAX_ALPHA_ID_STR_LEN 32 #define IMI_CC_MAX_CURRENT_CALLS 6 #define IMI_CC_MAX_SINGLE_EMG_NUM_STR_LEN 12 //must be equel to IMS_MAX_SINGLE_EMG_NUM_STR_LEN #define IMI_CC_MAX_EMG_NUMS 20 //must be equel to IMS_MAX_EMG_NUMS #define IMI_CC_MAX_TOTAL_EMG_NUM_STR_LEN 256 //must be equel to IMS_EMG_NUM_MAX_STR_LEN /****************************************************************************** ***************************************************************************** * IMI enum ***************************************************************************** ******************************************************************************/ typedef enum IMI_CC_PRIM_ID_TAG { IMI_CC_PRIM_BASE = 0, IMI_CC_MAKE_CALL_REQ, /* ImiCcMakeCallReq, ATD[;] */ IMI_CC_MAKE_CALL_CNF, /* ImiCcMakeCallCnf */ IMI_CC_ANSWER_CALL_REQ, /* ImiCcAnswerCallReq, ATA */ IMI_CC_ANSWER_CALL_CNF, /* ImiCcAnswerCallCnf */ IMI_CC_HANGUP_CALL_REQ, /* ImiCcHangupCallReq, ATH/AT+CHUP */ IMI_CC_HANGUP_CALL_CNF, /* ImiCcHangupCallCnf */ IMI_CC_LIST_CURRENT_CALL_REQ, /* ImiCcListCurrentCallReq, AT+CLCC */ IMI_CC_LIST_CURRENT_CALL_CNF, /* ImiCcListCurrentCallCnf */ IMI_CC_SEND_DTMF_STR_REQ, /* ImiCcSendDtmfStrReq, AT+VTS=[,] */ IMI_CC_SEND_DTMF_STR_CNF, /* ImiCcSendDtmfStrCnf */ IMI_CC_SET_DTMF_DURATION_REQ, /* ImiCcSetDtmfDurationReq, AT+VTD= */ IMI_CC_SET_DTMF_DURATION_CNF, /* ImiCcSetDtmfDurationCnf */ IMI_CC_GET_DTMF_DURATION_REQ, /* ImiCcGetDtmfDurationReq, AT+VTD? */ IMI_CC_GET_DTMF_DURATION_CNF, /* ImiCcGetDtmfDurationCnf */ /*unsolicited indication*/ IMI_CC_INCOMING_CALL_IND, /*ImiCcIncomingCallInd, RING/+CRING*/ IMI_CC_CONN_LINE_ID_PRE_IND, /*ImiCcConnLineIdPreInd, +COLP, MO call display remote number*/ IMI_CC_CALL_LINE_ID_PRE_IND, /*ImiCcCallLineIdPreInd, +CLIP, MT call display remote number*/ IMI_CC_CALL_CONNECT_IND, IMI_CC_CALL_DISCONNECT_IND, /*ImiCcCallDisconnectInd, NO CARRIER */ IMI_CC_CALL_WAITING_IND, /*ImiCcCallWaitingInd, +CCWA*/ IMI_CC_CALL_SS_IND, /*ImiCcCallSsInd, +ECCSSN*/ /*internal Ind*/ IMI_CC_CALL_STATE_IND, IMI_CC_SET_EMG_NUM_REQ, IMI_CC_SET_EMG_NUM_CNF, IMI_CC_GET_EMG_NUM_REQ, IMI_CC_GET_EMG_NUM_CNF, IMI_CC_PRIM_END = 0x01ff }IMI_CC_PRIM_ID; typedef enum ImiCcResultCodeTag { IMI_CC_SUCC = 0, // IMI_CC_NO_CARRIER, IMI_CC_BUSY //IMI_CC_NO_ANSWER ? } ImiCcResultCode; typedef enum ImiCcCallDirectionTag { MO_CALL = 0, MT_CALL = 1 } ImiCcCallDirection; typedef enum ImiCcCallStateTag { IMI_CC_CALL_ACTIVE = 0, IMI_CC_CALL_HELD = 1, IMI_CC_CALL_DIALING_MO = 2, IMI_CC_CALL_ALERTING_MO = 3, IMI_CC_CALL_INCOMING = 4, IMI_CC_CALL_WAITING = 5, IMI_CC_CALL_INVALID = 0xFF } ImiCcCallState; typedef enum ImiCcCallModeTag { IMI_CC_MODE_VOICE = 0, IMI_CC_MODE_DATA = 1, IMI_CC_MODE_FAX = 2 } ImiCcCallMode; typedef enum ImiCcRingTypeTag { IMI_CC_RING_TYPE_ASYNC = 0, IMI_CC_RING_TYPE_SYNC = 1, IMI_CC_RING_TYPE_REL_ASYNC = 2, IMI_CC_RING_TYPE_REL_SYNC = 3, IMI_CC_RING_TYPE_FAX = 4, IMI_CC_RING_TYPE_VOICE = 5, IMI_CC_RING_TYPE_VOICE_VIDEO = 6 } ImiCcRingType; /* * call number type refer to TS24.008 10.5.4.7 */ typedef enum ImiCcCallNumTypeTag { IMI_CC_NUM_TYPE_UNKNOWN = 129,//unknown type IMI_CC_NUM_TYPE_INTER_NUMBER = 145,//international number IMI_CC_NUM_TYPE_NATIONAL_NUMBER = 161 //national number } ImiCcCallNumType; typedef enum ImiCcCallHangupTypeTag { IMI_CC_HANGUP_ALL = 0, IMI_CC_HANGUP_ALL_HOLD_WAIT = 1, IMI_CC_HANGUP_ONGOING = 2 } ImiCcCallHangupType; typedef enum ImiCcCliValidityTag { IMI_CC_CLI_VALID = 0, IMI_CC_CLI_WITHHELD_BY_ORIG = 1,//CLI has been withheld by the originator IMI_CC_CLI_INVALID_BY_NW = 2, IMI_CC_CLI_INVALID_MO_PAYPHONE = 3, IMI_CC_CLI_INVALID_OTHER = 4 } ImiCcCliValidity; typedef enum ImiCcEmgNumModeTag { IMI_CC_EMG_NUM_QUERY = 0, IMI_CC_EMG_NUM_ADD = 1, IMI_CC_EMG_NUM_DEL = 2, } ImiCcEmgNumMode; typedef enum ImiCcEmgNumCategoryTag { IMI_CC_EMG_CATEGORY_GENERIC = 0, IMI_CC_EMG_CATEGORY_AMBULANCE = 1, IMI_CC_EMG_CATEGORY_POLICE = 2, IMI_CC_EMG_CATEGORY_FIRE = 3, IMI_CC_EMG_CATEGORY_MARINE = 4, IMI_CC_EMG_CATEGORY_MOUNTAIN = 5, } ImiCcEmgNumCategory; /****************************************************************************** ***************************************************************************** * IMI STRUCT ***************************************************************************** ******************************************************************************/ typedef struct ImiCcCallInfoTag { UINT8 callId;//call Id number, 1-N, current 1-3? UINT8 direction;//ImiCcCallDirection UINT8 state;//ImiCcCallState UINT8 mode;//ImiCcCallMode BOOL bMpty;// whether the call is one of multiparty (conference) call parties UINT8 type;//ImiCcCallNumType UINT8 resvd; UINT8 dialNumStrLen; CHAR dialNumStr[IMI_CC_MAX_DIAL_NUMBER_STR_LEN]; } ImiCcCallInfo; /****************************************************************************** * IMI_CC_MAKE_CALL_REQ * ATD ******************************************************************************/ typedef struct ImiCcMakeCallReqTag { UINT8 dialNumStrLen; UINT8 clir; UINT16 resvd2; CHAR dialNumStr[IMI_CC_MAX_DIAL_NUMBER_STR_LEN + 1]; } ImiCcMakeCallReq; //IMI_CC_MAKE_CALL_CNF typedef struct ImiCcMakeCallCnfTag { UINT8 ccRc;//ImiCcResultCode UINT8 resvd1; UINT16 resvd2; } ImiCcMakeCallCnf; /****************************************************************************** * IMI_CC_ANSWER_CALL_REQ * ATA ******************************************************************************/ typedef ImiEmptySig ImiCcAnswerCallReq; //IMI_CC_ANSWER_CALL_CNF typedef struct ImiCcAnswerCallCnfTag { UINT8 ccRc;//ImiCcResultCode UINT8 resvd1; UINT16 resvd2; } ImiCcAnswerCallCnf; /****************************************************************************** * IMI_CC_HANGUP_CALL_REQ * ATH/AT+CHUP ******************************************************************************/ typedef struct ImiCcHangupCallReqTag { UINT8 type;// UINT8 resvd1; UINT16 resvd2; } ImiCcHangupCallReq; //IMI_CC_HANGUP_CALL_CNF typedef ImiEmptySig ImiCcHangupCallCnf; /****************************************************************************** * IMI_CC_LIST_CURRENT_CALL_REQ * AT+CLCC ******************************************************************************/ typedef ImiEmptySig ImiCcListCurrCallReq; //IMI_CC_LIST_CURRENT_CALL_CNF typedef struct ImiCcListCurrCallCnfTag { ImiCcCallInfo callInfoList[IMI_CC_MAX_CURRENT_CALLS]; } ImiCcListCurrCallCnf; /** * IMI_CC_SEND_DTMF_STR_REQ */ typedef struct ImiCcSendDtmfStrReqTag { UINT16 duration;//ms BOOL durationPresent; UINT8 dtmfStrLen; UINT8 dtmfStr[IMI_CC_MAX_DIAL_NUMBER_STR_LEN]; } ImiCcSendDtmfStrReq; /** * IMI_CC_SEND_DTMF_STR_CNF */ typedef ImiEmptySig ImiCcSendDtmfStrCnf; /** * IMI_CC_SET_DTMF_DURATION_REQ */ typedef struct ImiCcSetDtmfDurationReqTag { UINT16 duration;//ms UINT16 resvd; } ImiCcSetDtmfDurationReq; /** * IMI_CC_SET_DTMF_DURATION_CNF */ typedef ImiEmptySig ImiCcSetDtmfDurationCnf; /** * IMI_CC_GET_DTMF_DURATION_REQ */ typedef ImiEmptySig ImiCcGetDtmfDurationReq; /** * IMI_CC_GET_DTMF_DURATION_CNF */ typedef struct ImiCcGetDtmfDurationCnfTag { UINT16 duration;//ms UINT16 resvd; } ImiCcGetDtmfDurationCnf; /** * IMI_CC_INCOMING_CALL_IND */ typedef struct ImiCcIncomingCallIndTag { UINT8 type;//ImiCcRingType UINT8 rsvd1; UINT16 rsvd2; } ImiCcIncomingCallInd; /** * IMI_CC_CONN_LINE_ID_PRE_IND * +COLP */ typedef struct ImiCcConnLineIdPreIndTag { UINT8 type;//ImiCcCallNumType UINT8 dialNumStrLen; UINT8 saType; UINT8 subAddrStrLen; UINT8 alphaStrLen; UINT8 rsvd1; UINT16 rsvd2; CHAR dialNumStr[IMI_CC_MAX_DIAL_NUMBER_STR_LEN]; CHAR subAddrStr[IMI_CC_MAX_SUB_ADDR_LEN]; CHAR alphaStr[IMI_CC_MAX_ALPHA_ID_STR_LEN]; } ImiCcConnLineIdPreInd; /** * IMI_CC_CALL_LINE_ID_PRE_IND * +CLIP */ typedef struct ImiCcCallLineIdPreIndTag { UINT8 type;//ImiCcCallNumType UINT8 dialNumStrLen; UINT8 saType; UINT8 subAddrStrLen; UINT8 alphaStrLen; UINT8 cliValidity;//ImiCcCliValidity UINT16 rsvd; CHAR dialNumStr[IMI_CC_MAX_DIAL_NUMBER_STR_LEN]; CHAR subAddrStr[IMI_CC_MAX_SUB_ADDR_LEN]; CHAR alphaStr[IMI_CC_MAX_ALPHA_ID_STR_LEN]; } ImiCcCallLineIdPreInd; /** * IMI_CC_CALL_DISCONNECT_IND */ typedef ImiEmptySig ImiCcCallDisconnectInd; /** * IMI_CC_CALL_WAITING_IND * +CCWA */ typedef struct ImiCcCallWaitingIndTag { BOOL bFirstRpt;//whether the first report, call waiting urc is not repeat but RING repeat if call waiting URC disabled UINT8 type;//ImiCcCallNumType UINT8 class; UINT8 cliValidity; UINT8 dialNumStrLen; UINT8 alphaStrLen; UINT16 resvd2; CHAR dialNumStr[IMI_CC_MAX_DIAL_NUMBER_STR_LEN]; CHAR alphaStr[IMI_CC_MAX_ALPHA_ID_STR_LEN]; } ImiCcCallWaitingInd; typedef struct ImiCcSsIndTag { UINT8 callId; UINT8 ssId; } ImiCcSsInd; typedef struct ImiCcSetEmgNumReqTag { UINT8 mode; //ImiCcEmgNumMode UINT8 type; UINT8 category; UINT8 emgNumCount; CHAR emgNum[IMI_CC_MAX_EMG_NUMS][IMI_CC_MAX_SINGLE_EMG_NUM_STR_LEN + 1]; } ImiCcSetEmgNumReq; typedef struct ImiCcSetEmgNumCnfTag { UINT8 ccRc;//ImiCcResultCode UINT8 mode; UINT8 type; UINT8 emgNumCount; UINT8 category[IMI_CC_MAX_EMG_NUMS]; CHAR emgNum[IMI_CC_MAX_EMG_NUMS][IMI_CC_MAX_SINGLE_EMG_NUM_STR_LEN + 1]; } ImiCcSetEmgNumCnf; typedef struct ImiCcGetEmgNumReqTag { UINT32 resvd; } ImiCcGetEmgNumReq; typedef struct ImiCcGetEmgNumCnfTag { UINT8 ccRc;//ImiCcResultCode UINT8 resvd; UINT8 emgNumCount; UINT8 emgNumCountNoSim; UINT8 category[IMI_CC_MAX_EMG_NUMS]; UINT8 categoryNoSim[IMI_CC_MAX_EMG_NUMS]; CHAR emgNum[IMI_CC_MAX_EMG_NUMS][IMI_CC_MAX_SINGLE_EMG_NUM_STR_LEN + 1]; CHAR emgNumNoSim[IMI_CC_MAX_EMG_NUMS][IMI_CC_MAX_SINGLE_EMG_NUM_STR_LEN + 1]; } ImiCcGetEmgNumCnf; #endif