2025-04-11 09:40:32 +08:00

282 lines
10 KiB
C

#ifndef __IMI_PRO_H__
#define __IMI_PRO_H__
/*******************************************************************************
Copyright: - 2023- Copyrights of EigenComm Ltd.
File name: - imipro.h
Description: - IMS module/device interface
History: - 2023/04/10, Original created
******************************************************************************/
#include "imicomm.h"
/*********************************************************************************
*******************************************************************************
* Macros
*******************************************************************************
*********************************************************************************/
#define IMI_PRO_MAX_FILE_NUM 10
#define IMI_PRO_FILENAME_MAX_LEN 31
#define IMI_PRO_JSON_CFG_MAX_LEN 2047
#define IMI_PRO_PATH_MAX_LEN 127
#define IMI_PRO_VALUE_MAX_LEN 63
#define IMI_IP_MAX_STR_LEN 40
#define IMI_APN_MAX_STR_LEN 100
#define IMI_PRODUCT_NAME_MAX_LEN 32 /*user-agent header, eg: "SIP/2.0 (EigenComm Ltd)" */
#define IMI_XCAP_URI_MAX_LEN 64
#define IMI_BSF_URI_MAX_LEN 64
#define IMI_DIGEST_NAME_MAX_LEN 64
#define IMI_DIGEST_PWD_MAX_LEN 32
/******************************************************************************
*****************************************************************************
* IMI enum
*****************************************************************************
******************************************************************************/
typedef enum IMI_PRO_PRIM_ID_TAG
{
IMI_PRO_PRIM_BASE = 0,
/* follow by IMI_REG_PRIM_ID */
IMI_PRO_SET_CFG_REQ = 0x0100, //ImiProSetCfgReq
IMI_PRO_SET_CFG_CNF, //ImiProSetCfgCnf
IMI_PRO_GET_CFG_FILE_LIST_REQ, //ImiProGetCfgFileListReq
IMI_PRO_GET_CFG_FILE_LIST_CNF, //ImiProGetCfgFileListCnf
IMI_PRO_READ_USAGE_SETTING_REQ, //ImiProReadUsageSettingReq
IMI_PRO_READ_USAGE_SETTING_CNF, //ImiProReadUsageSettingCnf
IMI_PRO_PRIM_END = 0x0fff
}IMI_PRO_PRIM_ID;
typedef enum ImiProOperType_Tag
{
IMI_PRO_OPER_TYPE_DELETE_CFG = 0,
IMI_PRO_OPER_TYPE_SET_CFG,
IMI_PRO_OPER_TYPE_GET_CFG
}
ImiProOperType;
/******************************************************************************
*****************************************************************************
* IMI STRUCT
*****************************************************************************
******************************************************************************/
typedef struct ImiProCfgFile_Tag
{
CHAR fileName[IMI_PRO_FILENAME_MAX_LEN + 1];//+1 for '\0'
}
ImiProCfgFile;
/**
* ICM config struct
*/
typedef struct ImiSupSrvCfg_Tag
{
UINT32 simServsAutoQuery :1; /*ut switch, influence on all UT*/
UINT32 colpUtEnable:1; /*COIP, choice via UT or UE local policy*/
UINT32 colrUtEnable:1; /*COIR, choice via UT or UE local policy*/
UINT32 clipUtEnable:1; /*ClIP, choice via UT or UE local policy*/
UINT32 clirUtEnable:1; /*ClIR, choice via UT or UE local policy*/
UINT32 utAuthType: 2; /*0:GBA-ME; 1,GBA-DIGEST;2,GBA-UICC;3,HTTP-DIGEST*/
UINT32 ipPerferType :1; /*0:V4 Prefer; 1: V6 perfer*/
UINT32 resv: 24;
CHAR xcapRootUri[IMI_XCAP_URI_MAX_LEN];
CHAR bsfRootUri[IMI_BSF_URI_MAX_LEN];
CHAR digestName[IMI_DIGEST_NAME_MAX_LEN];
CHAR digestPwd[IMI_DIGEST_PWD_MAX_LEN];
UINT16 xcapPort;
UINT16 bsfPort;
}ImiSupSrvCfg; /* already 136 bytes */
typedef struct ImiIcmCfg_Tag
{
UINT32 imsOLte : 1; /*whether IMS over LTE is enable*/
UINT32 imsOIp : 1; /*whether IMS over IP (VoIP), only used for test case, and IPPcscf must configed */
UINT32 autoReg : 1;
UINT32 ipType : 3; /*ImsIpType*/
UINT32 quickReReg : 1;
UINT32 norBrCid : 4;
UINT32 emcBrCid : 4;
UINT32 norCallWhenEmcBrNotSupp :1;
UINT32 :16;
UINT8 ipPcscf[IMI_IP_MAX_STR_LEN]; /*whether using IP string? cost to much memory - TBD*/
CHAR imsApn[IMI_APN_MAX_STR_LEN];
ImiSupSrvCfg supSrvCfg;
}ImiIcmCfg; /* already 144 bytes */
/**
* UA config struct
*/
typedef struct ImiUaRegCfg_Tag
{
UINT32 bIpSec : 1;
UINT32 bUnSubBfDereg : 1;
UINT32 :30;
UINT16 svcInfoBp; /* bitmap of: ICfgRegSvcInfoBP */
UINT16 TregSec; /* Treg in unit of second, if not cfg, set to 0 */
UINT16 ueCliPort; /* UE client port */
UINT16 pcscfSrvPort;
UINT8 authType; /* ICfgRegAuthType */
UINT8 ipsecEncAlgoBp; /* bitmap of: ICfgRegIpsecEncAlgoBP */
UINT8 ipsecIntAlgoBp; /* bitmap of: ICfgRegIpsecIntAlgoBP */
UINT8 rsvd;
}ImiUaRegCfg; /* 16 bytes */
typedef struct ImiUaCallCfg_Tag
{
UINT32 localNumberType : 1; /* local number type: home-local or geo-local */
UINT32 bReliable18x : 1; /* whether support 18x reliable transmission */
UINT32 bPrecondition : 1; /* whether support precondition */
UINT32 bAmrNb : 1; /* whether support AMR-NB */
UINT32 bAmrWb : 1; /* whether support AMR-WB */
UINT32 bTelephoneEvent : 1; /* whether support Telephone-Event */
UINT32 sessionRefresher : 2; /* session refresher: specified by server, UAC or UAS */
UINT32 bBandWidthEfficient : 1; /* whether support BandWidth-efficient */
UINT32 bOctetAllign : 1; /* whether support Octet-allign */
UINT32 modeChangePeriod : 2; /* 1 or 2(default value) */
UINT32 modeChangeCapa : 2; /* 1 or 2(default value) */
UINT32 bPortMut : 1; /* whether support rtp port multiplier */
UINT32 bSupportPrakNegoSdp : 1; /* whether support nego SDP(include precondition status) within PRACK request */
UINT32 bEarlyMediaSupport : 1; /* whether support early media */
UINT32 :15;
UINT8 amrNbModesBp; /* ICfgCallAmrNbModeBP */
UINT8 rsvd;
UINT16 amrWbModesBp; /* ICfgCallAmrWbModeBP */
UINT8 amrNbPTNum; /* AMR-NB payload type number, 102(default value) */
UINT8 amrWbPTNum; /* AMR-WB payload type number, 104(default value) */
UINT8 dtmf1PTNum; /* payload type number of dtmf sample rate 8000, 105(default value) */
UINT8 dtmf2PTNum; /* payload type number of dtmf sample rate 16000, 100(default value) */
UINT8 pTimeMs; /* ptime. default value:20 */
UINT8 maxPTimeMs; /* maxptime. default value:240 */
UINT16 maxRedunancyTimeMs; /* maxRed. default value:120[0-65535] */
UINT8 tqos; /* tqos time length in unit of second:5 [0-20] */
UINT8 tCalls; /* tcall time length in unit of second:5[0-255] */
UINT16 sessionTimer; /* session time length in unit of second:1800[1800-7200] */
UINT16 iWaitTermTimer; /*session term timer*/
UINT16 iWaitAcceptTimer; /*mo call session accept timer*/
UINT16 iWaitAnswerTimer; /*mt call session answer timer*/
UINT8 iWaitMoRingTimer; /*call session mo ring timer*/
UINT8 iWaitMtRingTimer; /*call session mt ring timer*/
}ImiUaCallCfg; /* 28 bytes */
typedef struct ImiUaSmsCfg_Tag
{
UINT32 rsvd;
}ImiUaSmsCfg;
/*
* sip cfg struct
*/
typedef struct ImiSipCfg_Tag
{
UINT32 bMergeSameHeader : 1; /* whether merge multiLine header to one line when decode*/
UINT32 : 31;
UINT16 T1ms;
UINT16 T2ms;
UINT16 T4ms;
UINT16 Tcsec;
UINT16 Tdsec;
UINT16 rsvd0;
UINT8 tpType; /* ImsTpType */
UINT8 tcpConnTryCout; /* must >= 1 */
UINT16 tcpConnTms;
CHAR prodName[IMI_PRODUCT_NAME_MAX_LEN]; /* 32 bytes, end with '\0' */
}ImiSipCfg; /* 48 bytes */
/*
* transport cfg struct
*/
typedef struct ImiTpCfg_Tag
{
UINT32 rsvd;
}ImiTpCfg;
/******************************************************************************
* IMI_PRO_SET_CFG_REQ
* AT+ECIMSJSON=<filename>,<oper>,<path>,<value>
******************************************************************************/
typedef struct ImiProSetCfgReq_Tag
{
ImiProCfgFile jsonFile;
UINT8 oper; //ImiProOperType
UINT8 rsv[3];
CHAR path[IMI_PRO_PATH_MAX_LEN + 1];//+1 for '\0'
CHAR value[IMI_PRO_VALUE_MAX_LEN + 1];//+1 for '\0'
}
ImiProSetCfgReq;
//IMI_PRO_SET_CFG_CNF
typedef struct ImiProSetCfgCnf_Tag
{
UINT8 oper; //ImiProOperType
UINT8 resvd;
UINT16 cnfLen;//Json cfg length
CHAR *pJsonCfg;//the pointer to cfg params in Json file, this memory is allocated by IMA,
//shall be free by CMS/AT CNF
}
ImiProSetCfgCnf;
/******************************************************************************
* IMI_PRO_GET_CFG_FILE_LIST_REQ
* AT+ECIMSJSON=?
******************************************************************************/
typedef ImiEmptySig ImiProGetCfgFileListReq;
//IMI_PRO_GET_CFG_FILE_LIST_CNF
typedef struct ImiProGetCfgFileListCnf_Tag
{
UINT8 fileNum; //file number
UINT8 rsv[3];
ImiProCfgFile jsonFile[IMI_PRO_MAX_FILE_NUM];
}
ImiProGetCfgFileListCnf;
/******************************************************************************
* IMI_PRO_READ_USAGE_SETTING_REQ
* AT+ECIMSRUS
******************************************************************************/
typedef ImiEmptySig ImiProReadUsageSettingReq;
//IMI_PRO_READ_USAGE_SETTING_CNF
typedef struct ImiProReadUsageSettingCnf_Tag
{
ImiIcmCfg icmCfg;
ImiUaRegCfg uaRegCfg;
ImiUaCallCfg uaCallCfg;
ImiUaSmsCfg uaSmsCfg;
ImiSipCfg sipCfg;
ImiTpCfg tpCfg;
}
ImiProReadUsageSettingCnf;
#endif