[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/protocol/interface/ims/imsvt_imcb_struct.h b/mcu/protocol/interface/ims/imsvt_imcb_struct.h
new file mode 100644
index 0000000..2af1169
--- /dev/null
+++ b/mcu/protocol/interface/ims/imsvt_imcb_struct.h
@@ -0,0 +1,609 @@
+#ifndef __IMSVT_IMCB_STRUCT_H__
+#define __IMSVT_IMCB_STRUCT_H__
+
+#include "kal_public_defs.h"
+
+#if __IMCF_NO_UA__
+
+#define VOLTE_MAX_SDP_PARAMETER_SET_LENGTH              (256) // H.264, Spros parameter sets, must align with LTE_VT_SRV_UA_PARAMETER_SIZE_MAX.
+#define VOLTE_MAX_SUB_PARAM_LENGTH  (128)
+#define VOLTE_MAX_SDP_FMTP_TOT_VALUE_LENGTH             (32)// The maximum length of total fmtp specific parameter key and value, must align with LTE_VT_SRV_UA_FMTP_SIZE_MAX.
+#define VOLTE_MAX_SDP_EGBYTE_LENGTH                     (8)
+#define VOLTE_IPADDR_LENGTH                             (16) // IP address in binary
+#define IMC_MAX_IF_NAME_LENGTH          (16)
+#define VOLTE_MAX_IF_NAME_LENGTH                        (IMC_MAX_IF_NAME_LENGTH)
+
+#define VOLTE_MAX_IMAGE_NUM                             (4)
+#define VOLTE_MAX_RTCP_FB_SIZE                          (8)
+#define VOLTE_MAX_VIDEO_CAP_NUM                         (4)
+#define VOLTE_MAX_PS_NUM                                (32)
+#define VOLTE_MAX_PROFILELEVEL_SIZE                     (32)
+#define VOLTE_MAX_EXTMAP_URI_SIZE                       (256)
+#define VOLTE_MAX_EXTMAP_NUM                            (4) // RFC 5285
+
+typedef char      imcf_int8 ;
+typedef short int imcf_int16;
+typedef       int imcf_int32;
+
+typedef unsigned char       imcf_uint8 ;
+typedef unsigned short int  imcf_uint16;
+typedef unsigned       int  imcf_uint32;
+
+#else
+#include "volte_vt_event.h"
+#include "volte_def.h"
+#endif
+
+#define VT_MAX_SDP_PARAMETER_SET_LENGTH             VOLTE_MAX_SDP_PARAMETER_SET_LENGTH
+#define VT_MAX_SUB_SDP_PARAMETER_SET_LENGTH         VOLTE_MAX_SUB_PARAM_LENGTH
+#define VT_MAX_SDP_FMTP_TOT_VALUE_LENGTH            VOLTE_MAX_SDP_FMTP_TOT_VALUE_LENGTH
+#define VT_MAX_SDP_EGBYTE_LENGTH                    VOLTE_MAX_SDP_EGBYTE_LENGTH
+#define VT_MAX_IMAGE_NUM                            VOLTE_MAX_IMAGE_NUM
+#define VT_MAX_RTCP_FB_SIZE                         VOLTE_MAX_RTCP_FB_SIZE
+#define VT_MAX_VIDEO_CAP_NUM                        VOLTE_MAX_VIDEO_CAP_NUM
+#define VT_ADDR_LENGTH                              VOLTE_IPADDR_LENGTH
+#define VT_MAX_PS_NUM                               VOLTE_MAX_PS_NUM
+#define VT_MAX_LEVEL_SIZE                           VOLTE_MAX_PROFILELEVEL_SIZE
+#define VT_MAX_EXTMAP_URI_SIZE                      VOLTE_MAX_EXTMAP_URI_SIZE
+#define VT_MAX_EXTMAP_NUM                           VOLTE_MAX_EXTMAP_NUM
+#define VT_MAX_IF_NAME_LENGTH                       VOLTE_MAX_IF_NAME_LENGTH
+
+#define IMSVT_PARA_HDR    \
+    PEER_BUFF_HDR    \
+    unsigned int  request_id;    \
+    unsigned int  data_len;
+
+typedef struct imsvt_para_hdr_struct {
+    IMSVT_PARA_HDR
+} imsvt_para_hdr_struct;
+
+typedef enum vt_srv_imcb_session_modify_type_e {
+    VT_SRV_IMCB_SESSION_MODIFY_TYPE_CAMERA,
+    VT_SRV_IMCB_SESSION_MODIFY_TYPE_CALL_TPYE,
+    VT_SRV_IMCB_SESSION_MODIFY_TYPE_RTP,
+    VT_SRV_IMCB_SESSION_MODIFY_TYPE_END
+} vt_srv_imcb_session_modify_type_t ;
+
+typedef enum vt_srv_imcb_session_modify_result_e {
+    VT_SRV_IMCB_SESSION_MODIFY_OK = 0,
+    VT_SRV_IMCB_SESSION_MODIFY_WrongVideoDir,           /*wrong video direction cause up/downgrade failed*/
+    VT_SRV_IMCB_SESSION_MODIFY_InternalError,           /*acct or session object broken*/
+    VT_SRV_IMCB_SESSION_MODIFY_Result_BW_ModifyFailed,  /*bandwidth modify require failed*/
+    VT_SRV_IMCB_SESSION_MODIFY_NotActiveState,          /*call session not in active state*/
+    VT_SRV_IMCB_SESSION_MODIFY_LocalRel,                /*local release:Ex.SRVCC,Hungup,call refresh timer timeout,no rpt packets*/
+    VT_SRV_IMCB_SESSION_MODIFY_IsHold,                  /*the call at hold state*/
+    VT_SRV_IMCB_SESSION_MODIFY_NoNeed,                  /*acorrding the video action state, not need up/downgrade */
+    VT_SRV_IMCB_SESSION_MODIFY_InvalidPara,             /*input parameter invalid*/
+    VT_SRV_IMCB_SESSION_MODIFY_ReqTimeout,              /*SIPTX error,transaction timeout*/
+    VT_SRV_IMCB_SESSION_MODIFY_RejectByRemote,          /*reject by remote*/
+    VT_SRV_IMCB_SESSION_MODIFY_Canceled,                /*canceled by user*/
+    VT_SRV_IMCB_SESSION_MODIFY_InVideoAction,           /*video action is ongoing*/
+    VT_SRV_IMCB_SESSION_MODIFY_IsReinvite,              /*is_reinvite*/
+}vt_srv_imcb_session_modify_result_t;
+
+enum vt_srv_imcb_session_modify_cancel_cause_e {
+    VT_SRV_IMCB_SESSION_MODIFY_CANCEL_CAUSE_cancel= 0,
+    VT_SRV_IMCB_SESSION_MODIFY_CANCEL_CAUSE_timeout,
+};
+
+enum vt_srv_imcb_session_modify_cancel_result_e {
+    VT_SRV_IMCB_SESSION_MODIFY_CANCEL_success = 0,
+    VT_SRV_IMCB_SESSION_MODIFY_CANCEL_fail_downgrade,
+    VT_SRV_IMCB_SESSION_MODIFY_CANCEL_fail_normal,
+    VT_SRV_IMCB_SESSION_MODIFY_CANCEL_fail_disable,
+    VT_SRV_IMCB_SESSION_MODIFY_CANCEL_fail_remote_reject,         /*remote reject the upgrade while local cancel*/
+    VT_SRV_IMCB_SESSION_MODIFY_CANCEL_fail_internal_error,
+    VT_SRV_IMCB_SESSION_MODIFY_CANCEL_fail_local_rel,
+    VT_SRV_IMCB_SESSION_MODIFY_CANCEL_fail_bw_modify_fail,
+    VT_SRV_IMCB_SESSION_MODIFY_CANCEL_fail_req_timeout,
+};
+
+
+typedef struct rtcp_fb_param_type_s {
+    imcf_uint16 rtcp_fb_id;                  // such as "ack","nack","trr-int","ccm","app"
+    imcf_uint16 rtcp_fb_param;               // such as pli"
+    imcf_int8   rtcp_fb_sub_param[VT_MAX_SUB_SDP_PARAMETER_SET_LENGTH]; //such as smaxpr=120 of tmmbr
+}vt_srv_rtcp_fb_param_type_t;
+
+typedef struct vt_srv_image_s {
+    imcf_uint32     x;    ///< RFC6236 image attributes
+    imcf_uint32     y;
+    imcf_int8       sar[VT_MAX_SDP_EGBYTE_LENGTH];
+    imcf_int8       par[VT_MAX_SDP_EGBYTE_LENGTH];
+    imcf_int8       q[VT_MAX_SDP_EGBYTE_LENGTH];
+} vt_srv_image_t;
+
+typedef struct vt_srv_imcb_msg_get_cap_ind_s {
+    IMSVT_PARA_HDR
+    imcf_uint8  sim_slot_id; /* start from 0 */
+    imcf_uint8  pad;
+    imcf_uint16 operator_code;
+} vt_srv_imcb_msg_get_cap_ind_struct, imsvt_imcb_get_cap_ind_struct;
+
+/*******************
+** VT_CAP_SETTING **
+********************/
+
+typedef struct vt_srv_h264_cap_cfg_s {    /* Codec part */
+    imcf_uint32                                  profile_level_id;       ///< H.264 profile level id. construct by 3 parts
+
+    imcf_uint16                                  max_recv_level;         ///< require 2 bytes, reserved.
+    imcf_uint8                                   redundant_pic_cap;     ///< 0, 1. 0: we do not support yet.
+    imcf_uint8                                   pading;
+
+    imcf_int8                                    sprop_parameter_sets[VT_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_int8                                    sprop_level_parameter_sets[VT_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_uint32                                  max_mbps;               ///< reserved. VT service provides default value
+    imcf_uint32                                  max_smbps;              ///< reserved. VT service provides default value
+    imcf_uint32                                  max_fs;                 ///< reserved. VT service provides default value
+    imcf_uint32                                  max_cpb;                ///< reserved. VT service provides default value
+    imcf_uint32                                  max_dpb;                ///< reserved. VT service provides default value
+    imcf_uint32                                  max_br;                 ///< reserved. VT service provides default value
+    imcf_uint32                                  max_rcmd_nalu_size;     ///< reserved. VT service provides default value
+
+    imcf_uint8                                   sar_understood;         ///< 0~255, reserved. VT service provides default value
+    imcf_uint8                                   sar_supported;          ///< 0~255, reserved. VT service provides default value
+    imcf_uint8                                   in_band_parameter_sets; //0, 1
+    imcf_uint8                                   level_asymmetry_allowed; //0, 1
+    imcf_uint32                                  framerate;
+    imcf_uint32                                  frame_width;
+    imcf_uint32                                  frame_height;
+    vt_srv_image_t                               image_send[VT_MAX_IMAGE_NUM];
+    vt_srv_image_t                               image_recv[VT_MAX_IMAGE_NUM];
+} vt_srv_h264_cap_cfg_t;
+
+typedef struct vt_srv_hevc_cap_cfg_s {
+    imcf_uint8                                    profile_space;
+    imcf_uint8                                    profile_id;
+    imcf_uint8                                    tier_flag;
+    imcf_uint8                                    level_id;
+
+    imcf_uint8                                    interop_constraints[6];
+    imcf_uint8                                    pad[2];
+
+    imcf_uint8                                    profile_comp_ind[4];
+
+    imcf_uint8                                    sprop_sub_layer_id;
+    imcf_uint8                                    recv_sub_layer_id;
+    imcf_uint8                                    max_recv_level_id;
+    imcf_uint8                                    tx_mode;  //"SRST", "MRST" or "MRMT"
+
+    imcf_int8                                     sprop_vps[VOLTE_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_int8                                     sprop_sps[VOLTE_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_int8                                     sprop_pps[VOLTE_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_int8                                     sprop_sei[VOLTE_MAX_SDP_PARAMETER_SET_LENGTH];
+
+    imcf_uint32                                   max_lsr;
+    imcf_uint32                                   max_lps;
+    imcf_uint32                                   max_cpb;
+    imcf_uint32                                   max_dpb;
+    imcf_uint32                                   max_br;
+    imcf_uint32                                   max_tr;
+    imcf_uint32                                   max_tc;
+    imcf_uint32                                   max_fps;
+    imcf_uint32                                   sprop_max_don_diff;
+    imcf_uint32                                   sprop_depack_buf_nalus;
+    imcf_uint32                                   sprop_depack_buf_bytes;
+    imcf_uint32                                   depack_buf_cap;
+    imcf_uint32                                   sprop_seg_id;
+    imcf_uint32                                   sprop_spatial_seg_idc;
+
+    imcf_int8                                     dec_parallel_cap[VOLTE_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_int8                                     include_dph[VOLTE_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_uint32                                   framerate;
+    imcf_uint32                                   frame_width;
+    imcf_uint32                                   frame_height;
+    vt_srv_image_t                                image_send[VT_MAX_IMAGE_NUM];
+    vt_srv_image_t                                image_recv[VT_MAX_IMAGE_NUM];
+} vt_srv_hevc_cap_cfg_t;
+
+typedef union vt_srv_video_codec_cap_cfg_u {
+    vt_srv_h264_cap_cfg_t    h264_codec;
+    vt_srv_hevc_cap_cfg_t    hevc_codec;
+} vt_srv_video_codec_cap_cfg_t;
+
+typedef struct vt_srv_video_media_bitrate_s {
+    imcf_uint32 format;        ///<H264 or H265
+    imcf_uint32 profile;
+    imcf_uint32 level;
+    imcf_uint32 minbitrate;
+    imcf_uint32 bitrate;
+} vt_srv_video_media_bitrate_t;
+
+typedef struct vt_srv_rtp_ext_map_s {
+    imcf_uint8 ext_id;
+    imcf_uint8 direction;
+    imcf_uint8 reserved[2];
+    imcf_int8  ext_uri[VT_MAX_EXTMAP_URI_SIZE]; // size 256
+} vt_srv_rtp_ext_map_t;
+
+typedef struct vt_srv_h264_ps_s {
+    imcf_uint32 profile_level_id;
+    imcf_int8   sprop_parameter_sets[VT_MAX_SDP_PARAMETER_SET_LENGTH];
+} vt_srv_h264_ps_t;
+
+typedef struct vt_srv_hevc_ps_s {
+    imcf_uint8  profile_id;             ///< Range: 0~31, 1 if not present.
+    imcf_uint8  level_id;               ///< Range: 0~255, 93(level 3.1) if not present.
+    imcf_uint8  pad[2];
+    imcf_int8   sprop_vps[VT_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_int8   sprop_sps[VT_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_int8   sprop_pps[VT_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_int8   sprop_sei[VT_MAX_SDP_PARAMETER_SET_LENGTH];
+} vt_srv_hevc_ps_t;
+
+typedef struct vt_srv_video_capability_s {
+    /* old start */
+    imcf_uint32                                  profile_level_id;       ///< H.264 profile level id. construct by 3 parts
+
+    imcf_uint16                                  max_recv_level;         ///< require 2 bytes, reserved.
+    imcf_uint8                                   packetization_mode;     ///< VoLTE_Event_Packetize_Mode_e
+    imcf_uint8                                   redundant_pic_cap;    ///< 0, 1. 0: we do not support yet.
+
+    imcf_int8                                    sprop_parameter_sets[VT_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_int8                                    sprop_level_parameter_sets[VT_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_uint32                                  max_mbps;               ///< reserved. VT service provides default value
+    imcf_uint32                                  max_smbps;              ///< reserved. VT service provides default value
+    imcf_uint32                                  max_fs ;                ///< reserved. VT service provides default value
+    imcf_uint32                                  max_cpb ;               ///< reserved. VT service provides default value
+    imcf_uint32                                  max_dpb ;               ///< reserved. VT service provides default value
+    imcf_uint32                                  max_br ;                ///< reserved. VT service provides default value
+    imcf_uint32                                  max_rcmd_nalu_size;     ///< reserved. VT service provides default value
+
+    imcf_uint8                                   sar_understood;         ///< 0~255, reserved. VT service provides default value
+    imcf_uint8                                   sar_supported;          ///< 0~255, reserved. VT service provides default value
+    imcf_uint8                                   in_band_parameter_sets; //0, 1
+    imcf_uint8                                   level_asymmetry_allowed; //0, 1
+    /* old end */
+
+    vt_srv_video_codec_cap_cfg_t    codec_cap;  // Use mime_Type to judge the codec cap.
+
+    /* rtp_rtcp part */
+    imcf_uint8  media_type; //such as video/audio
+    imcf_uint8  mime_Type; // such as H.264
+    //imcf_uint8  video_payload_type;// num such as: 97,98, 100
+    imcf_uint8  rtp_profile;//supported rtp_profile for special media such as RTP/AVP,RTP/AVPF
+    imcf_uint8  reserved;
+    imcf_uint32 sample_rate;//timescale, which use to calculte rtp timestamp
+
+    /*@ rtp packet transmission param
+    *@ contain b=AS,PT,packetization params related to the codec type
+    *@ ----------------------------------------------------------------------
+    *@consider the negotiated params also can set through rtp_rtcp_capability
+    *@ rtp_rtcp_capability must be can for one explicit item
+    *@ then should not contain alternatives in rtp_packetize_params,such as "packetization-moe=1;packetization-mode=0"
+    *@ ----------------------------------------------------------------------
+    */
+    //imcf_uint32 video_b_as; //b=AS in kb/s
+    imcf_uint32 packetize_mode;
+    imcf_uint32 extmap_num;
+    vt_srv_rtp_ext_map_t extmap[VT_MAX_EXTMAP_NUM]; //now only CVO support
+
+    //imcf_uint32 video_b_rs; //b=RS in bps
+    //imcf_uint32 video_b_rr; //b=RR in bps
+    imcf_uint32 rtcp_rsize; //a=rtcp_rsize
+
+    /*@ rtcp packet transmission param
+     *@ contain b=RS,b=RR,and feedback message type
+     *@ may be serveral feedback message supported like:
+     *@ ---------sdp--------------
+     *@ a=rtcp-fb:98 ccm tstr
+     *@ a=rtcp-fb:98 ccm fir
+     *@ a=rtcp-fb:* ccm tmmbr smaxpr=120
+     *@ ---------------------------
+     *@ so need a array of rtcp_fb_type_t to represent all thest feedback messages
+     *@ rtcp_fb_param_num represent the size of the array
+     */
+    imcf_uint32 rtcp_fb_param_num;
+    vt_srv_rtcp_fb_param_type_t  rtcp_fb_type[VT_MAX_RTCP_FB_SIZE]; // SIZE  5
+} vt_srv_video_capability_t;
+
+typedef struct vt_srv_imcb_msg_vt_cap_setting_s {
+    IMSVT_PARA_HDR
+    imcf_int32                  accout_id;
+    imcf_int32                  video_cap_num;                   ///< number of cap.
+    vt_srv_video_capability_t   video_cap[VT_MAX_VIDEO_CAP_NUM]; ///< video capability from MA
+    vt_srv_h264_ps_t            h264_ps[VT_MAX_PS_NUM];                 // SIZE  32
+    vt_srv_hevc_ps_t            hevc_ps[VT_MAX_PS_NUM];                 // SIZE  32
+    vt_srv_video_media_bitrate_t  bitrate_info[VT_MAX_LEVEL_SIZE]; // SIZE  20
+
+    imcf_uint8   sim_slot_id; /* start from 0 */
+    imcf_uint8   pad2;
+    imcf_uint16  operator_code;
+
+    /* CAUTION: please keep VoLTE_Event_VT_Cap_Setting_t in sync when you want to add elements here,
+       IMCB is forwarding pointer to this structure and it is casted to VoLTE_Event_VT_Cap_Setting_t */
+} vt_srv_imcb_msg_get_cap_rsp_struct, imsvt_imcb_get_cap_rsp_struct,
+vt_srv_vt_cap_setting_t;
+
+typedef struct vt_srv_imcb_msg_config_s {
+    // required by RTP and RTCP session
+    imcf_uint8                           call_id;        // identify this call
+    imcf_uint8                           video_payload_type;    // RTP payload type
+    imcf_uint8                           remote_addr_type;    ///< VoLTE_Event_IP_Version_e
+    imcf_uint8                           rtp_direction;         ///< VoLTE_Event_RTP_DIRECTION_e
+
+    imcf_uint16                          remote_rtp_port;
+    imcf_uint16                          remote_rtcp_port;
+    imcf_uint16                          local_rtcp_port;     ///< rtcp port number. we may configure it not rtp_port+1
+    imcf_uint16                          local_rtp_port;      ///< rtp port number for media attribute in SDP message
+    imcf_int8                            remote_rtp_address[VT_ADDR_LENGTH];
+    imcf_int8                            remote_rtcp_address[VT_ADDR_LENGTH];
+    imcf_int8                            local_address[VT_ADDR_LENGTH];
+    imcf_uint32                          video_b_as;               // RTP bandwidth
+    imcf_uint32                          video_b_rs;               // RTCP sender bandwidth
+    imcf_uint32                          video_b_rr;               // RTCP receiver bandwidth
+
+    imcf_uint8                           media_type; //such as video/audio
+    imcf_uint8                           mime_Type; // such as H.264
+    imcf_uint16                          rtcp_rsize;
+    imcf_uint32                          packetize_mode;
+    imcf_uint32                          sample_rate;//timescale, which use to calculte rtp timestamp
+    imcf_uint32                          rtcp_fb_param_num;
+    vt_srv_rtcp_fb_param_type_t          rtcp_fb_type[VT_MAX_RTCP_FB_SIZE]; // SIZE? 32
+
+    imcf_uint8                           rtp_profile;//supported rtp_profile for special media such as RTP/AVP,RTP/AVPF
+    imcf_uint8                           camera_direction;
+    imcf_uint8                           bHold; //local hold
+    imcf_uint8                           bHeld; //remote hold
+
+    vt_srv_rtp_ext_map_t extmap;
+
+    /* WFC */
+    imcf_uint32                          video_dscp;
+    imcf_uint32                          video_soc_priority;
+
+    /*------ old start --------------*/
+    imcf_uint16                                  pad_rtcp_rsize; /* move to new one*/
+    imcf_uint16                                  rtcpfb_type; //bitmap, VoLTE_Event_RTCP_FB_Type_e
+    imcf_int8                                    id[VT_MAX_SDP_FMTP_TOT_VALUE_LENGTH];
+    imcf_int8                                    trr_int[VT_MAX_SDP_FMTP_TOT_VALUE_LENGTH];
+    imcf_int8                                    id_app_string[VT_MAX_SDP_FMTP_TOT_VALUE_LENGTH];
+    imcf_int8                                    ack_app_string[VT_MAX_SDP_FMTP_TOT_VALUE_LENGTH];
+    imcf_int8                                    nack_app_string[VT_MAX_SDP_FMTP_TOT_VALUE_LENGTH];
+    imcf_int8                                    tmmbr_string[VT_MAX_SDP_FMTP_TOT_VALUE_LENGTH];
+    imcf_int8                                    vbcm_string[VT_MAX_SDP_FMTP_TOT_VALUE_LENGTH];
+    /*------ old end --------------*/
+
+    // require by H.264 or H265
+    vt_srv_video_codec_cap_cfg_t         codec_cfg;
+
+    /*------ old start --------------*/
+    // required by H.264 codec, RFC 6184
+    imcf_uint32                                  profile_level_id;       ///< H.264 profile level id. construct by 3 parts
+
+    imcf_uint16                                  max_recv_level;         ///< require 2 bytes, reserved.
+    imcf_uint8                                   packetization_mode;     ///< VoLTE_Event_Packetize_Mode_e
+    imcf_uint8                                   redundant_pic_cap;    ///< 0, 1. 0: we do not support yet.
+
+    imcf_int8                                    sprop_parameter_sets[VOLTE_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_int8                                    sprop_level_parameter_sets[VOLTE_MAX_SDP_PARAMETER_SET_LENGTH];
+    imcf_uint32                                  max_mbps;               ///< reserved. VT service provides default value
+    imcf_uint32                                  max_smbps;              ///< reserved. VT service provides default value
+    imcf_uint32                                  max_fs ;                ///< reserved. VT service provides default value
+    imcf_uint32                                  max_cpb ;               ///< reserved. VT service provides default value
+    imcf_uint32                                  max_dpb ;               ///< reserved. VT service provides default value
+    imcf_uint32                                  max_br ;                ///< reserved. VT service provides default value
+    imcf_uint32                                  max_rcmd_nalu_size;     ///< reserved. VT service provides default value, 0: SDP will not present the value
+
+    imcf_uint8                                   sar_understood;         ///< 0~255, reserved. VT service provides default value, 0: SDP will not present the value
+    imcf_uint8                                   sar_supported;          ///< 0~255, reserved. VT service provides default value, 0: SDP will not present the value
+    imcf_uint8                                   in_band_parameter_sets; ///< 0, 1. we only support 0: support SPS, PPS in SDP
+    imcf_uint8                                   level_asymmetry_allowed; ///<0, 1. we only support 0: symmetry communication
+    /*------ old end --------------*/
+} vt_srv_imcb_msg_config_t;
+
+typedef struct vt_srv_imcb_msg_setting {
+    // 0 : inactive (VoLTE)
+    // 1 : active (ViLTE)
+    imcf_uint32     mode;
+
+    imcf_uint8      ebi;        /* drop on 97 MD, set to zero (0) */
+    imcf_uint8      video_type;
+    imcf_uint8      pad[2];
+    imcf_uint32     network_id; /*drop on 93 MD */
+
+    // 0 : inactive
+    // 1 : send_only
+    // 2 : recv_only
+    // 3 : send_recv
+
+    imcf_uint32    early_media_direction;
+
+    /*kbps, please ignore when Wifi access RAT */
+    /*0: is for un-specified,  please DO NOT use this element */
+    imcf_uint32  nw_assigned_ul_bw;
+    imcf_uint32  nw_assigned_dl_bw;
+
+    imcf_uint8   sim_slot_id; /* start from 0 */
+    imcf_uint8   pad2[3];
+
+    imcf_uint8   if_name[VT_MAX_IF_NAME_LENGTH];
+
+    /* 180 - 2 = 178 */
+    imcf_uint8   bearer_id;      // LTE: EPS Bearer Identifier (EBI), NR: 5G QoS Flow Identifier (QFI)
+    imcf_uint8   pdu_session_id; // LTE: 0, NR: PDU Session ID (1-15)
+
+    imcf_uint8   extension[178];
+
+} vt_srv_imcb_msg_setting_t;
+
+typedef struct vt_srv_imcb_msg_param_s {
+    IMSVT_PARA_HDR
+    vt_srv_imcb_msg_setting_t   setting;
+    vt_srv_imcb_msg_config_t    config;
+}
+  vt_srv_imcb_msg_config_init_ind_struct,   imsvt_imcb_config_init_ind_struct,
+  vt_srv_imcb_msg_config_update_ind_struct, imsvt_imcb_config_update_ind_struct,
+  vt_srv_imcb_msg_config_deinit_ind_struct, imsvt_imcb_config_deinit_ind_struct,
+  vt_srv_imcb_msg_param_t
+;
+
+typedef struct vt_srv_imcb_msg_session_modify_s {
+    IMSVT_PARA_HDR
+    imcf_uint8      call_id;    /* identify this call */
+
+    // 0 : inactive (VoLTE)
+    // 1 : active (ViLTE)
+    imcf_uint8     mode;
+
+    //  0 : inactive
+    //  1 : send_only
+    //  2 : recv_only
+    //  3 : send_recv
+    imcf_uint8     camera_direction;
+
+    imcf_uint8     result;    /* vt_srv_imcb_session_modify_result_t */
+
+    /* remeber to do offset to UA, UA do not contain this one */
+    imcf_uint8 sim_slot_id; /* start from 0 */
+    imcf_uint8 pad[3];
+}
+
+/*
+    VT -- req --> UA  .... UA -- ind --> VT
+    VT <- cnf --- UA  .... UA <- rsp --  VT
+
+*/
+  vt_srv_imcb_msg_session_modify_req_struct,  imsvt_imcb_modify_session_req_struct,
+  vt_srv_imcb_msg_session_modify_ind_struct,  imsvt_imcb_modify_session_ind_struct,
+  vt_srv_imcb_msg_session_modify_rsp_struct,  imsvt_imcb_modify_session_rsp_struct,
+  vt_srv_imcb_msg_session_modify_cnf_struct,  imsvt_imcb_modify_session_cnf_struct;
+
+typedef struct vt_srv_imcb_msg_session_modify_cancel_req_s {
+    IMSVT_PARA_HDR
+    imcf_uint8      call_id;    /* identify this call */
+    /* remeber to do offset to UA, UA do not contain this one */
+    imcf_uint8 sim_slot_id; /* start from 0 */
+    imcf_uint8 cause;
+    imcf_uint8 pad[5];
+}vt_srv_imcb_msg_session_modify_cancel_req_struct,imsvt_imcb_modify_session_cancel_req_struct;
+
+typedef struct vt_srv_imcb_msg_session_modify_cancel_cnf_s {
+    IMSVT_PARA_HDR
+    imcf_uint8      call_id;    /* identify this call */
+    /* remeber to do offset to UA, UA do not contain this one */
+    imcf_uint8 sim_slot_id; /* start from 0 */
+    imcf_uint8 result;
+    imcf_uint8 pad[5];
+}vt_srv_imcb_msg_session_modify_cancel_cnf_struct,imsvt_imcb_modify_session_cancel_cnf_struct;
+
+typedef struct vt_srv_imcb_msg_session_modify_cancel_s {
+    IMSVT_PARA_HDR
+    imcf_uint8      call_id;    /* identify this call */
+    /* remeber to do offset to UA, UA do not contain this one */
+    imcf_uint8 sim_slot_id; /* start from 0 */
+    imcf_uint8 pad[2];
+}
+vt_srv_imcb_msg_session_modify_cancel_ind_struct,imsvt_imcb_modify_session_cancel_ind_struct,
+vt_srv_imcb_msg_session_modify_local_bw_ready_ind_struct,imsvt_imcb_modify_session_local_bw_ready_ind_struct;
+
+typedef struct vt_srv_imcb_msg_call_progress_ind_s {
+    IMSVT_PARA_HDR
+    imcf_uint8      call_id;    /* identify this call */
+    /* remeber to do offset to UA, UA do not contain this one */
+    imcf_uint8      sim_slot_id; /* start from 0 */
+    imcf_uint8      call_mode;
+    imcf_uint8      pad1;
+
+    imcf_uint32     ecpi;
+    imcf_uint32     reserved;
+}vt_srv_imcb_msg_call_progress_ind_struct, imsvt_imcb_call_progress_ind_struct;
+
+typedef struct vt_srv_imcb_msg_mod_bw_req_s {
+    IMSVT_PARA_HDR
+    imcf_uint8 call_id;    /* identify this call */
+    imcf_uint8 pad[3];
+
+    imcf_uint32 video_bandwidth;
+
+    imcf_uint8 sim_slot_id; /* start from 0 */
+    imcf_uint8 pad2[3];
+} vt_srv_imcb_msg_mod_bw_req_t, imsvt_imcb_mod_bw_req_struct;
+
+typedef struct {
+    IMSVT_PARA_HDR
+    imcf_uint32 error_num;
+} imsvt_imcb_comm_error_struct;
+
+typedef struct {
+    IMSVT_PARA_HDR
+    imcf_uint8 token;
+    imcf_uint8 pad[3];
+} imsvt_imcb_loop_test_ind_struct;
+
+typedef struct {
+    IMSVT_PARA_HDR
+    imcf_uint8 token;
+    imcf_uint8 pad[3];
+} imsvt_imcb_loop_test_rsp_struct;
+
+typedef enum vt_srv_imcb_rat_type_e {
+    VT_SRV_IMCB_RAT_TYPE_NONE = 0,
+    VT_SRV_IMCB_RAT_TYPE_2G = VT_SRV_IMCB_RAT_TYPE_NONE,
+    VT_SRV_IMCB_RAT_TYPE_3G_FDD,
+    VT_SRV_IMCB_RAT_TYPE_3G_TDD,
+    VT_SRV_IMCB_RAT_TYPE_4G_FDD,
+    VT_SRV_IMCB_RAT_TYPE_4G_TDD,
+
+    /* WFC */
+    VT_SRV_IMCB_RAT_TYPE_802_11,
+    VT_SRV_IMCB_RAT_TYPE_802_11a,
+    VT_SRV_IMCB_RAT_TYPE_802_11b,
+    VT_SRV_IMCB_RAT_TYPE_802_11g,
+    VT_SRV_IMCB_RAT_TYPE_802_11n,
+    VT_SRV_IMCB_RAT_TYPE_802_11ac,
+
+    /* C2K */
+    VT_SRV_IMCB_RAT_TYPE_1xRTT,
+    VT_SRV_IMCB_RAT_TYPE_HRPD,
+    VT_SRV_IMCB_RAT_TYPE_eHRPD,
+
+    VT_SRV_IMCB_RAT_TYPE_5G_FDD,
+    VT_SRV_IMCB_RAT_TYPE_5G_TDD,
+
+    VT_SRV_IMCB_RAT_TYPE_MAX = VT_SRV_IMCB_RAT_TYPE_5G_TDD,
+    VT_SRV_IMCB_RAT_TYPE_UNSPEC = 0x80
+} vt_srv_imcb_rat_type;
+
+
+typedef struct {
+    IMSVT_PARA_HDR
+    imcf_uint8           source_rat_type;  /* vt_srv_imcb_rat_type enum */
+    imcf_uint8           target_rat_type;  /* vt_srv_imcb_rat_type enum */
+    imcf_uint8           pad[2];
+
+    imcf_uint8           sim_slot_id; /* start from 0 */
+    imcf_uint8           pad2[3];
+} vt_srv_imcb_handover_start_ind_struct, imsvt_imcb_handover_start_ind_struct;
+
+typedef struct {
+    IMSVT_PARA_HDR
+    imcf_uint8            source_rat_type;  /* vt_srv_imcb_rat_type enum */
+    imcf_uint8            target_rat_type;  /* vt_srv_imcb_rat_type enum */
+    imcf_uint8            is_success;
+    imcf_uint8            pad[1];
+
+    imcf_uint8            sim_slot_id; /* start from 0 */
+    imcf_uint8            pad2[3];
+} vt_srv_imcb_handover_stop_ind_struct, imsvt_imcb_handover_stop_ind_struct;
+
+typedef struct {
+    IMSVT_PARA_HDR
+    imcf_uint8 source_rat_type; /* vt_srv_imcb_rat_type enum */
+    imcf_uint8 target_rat_type; /* vt_srv_imcb_rat_type enum */
+    imcf_uint8 sim_slot_id; /* start from 0 */
+    imcf_uint8 pad;
+    imcf_uint32 network_id; /* drop on 93MD */
+} vt_srv_imcb_pdn_handover_begin_ind_struct, imsvt_imcb_pdn_handover_begin_ind_struct;
+
+typedef struct {
+    IMSVT_PARA_HDR
+    imcf_uint8           source_rat_type;  /* vt_srv_imcb_rat_type enum */
+    imcf_uint8           target_rat_type;  /* vt_srv_imcb_rat_type enum */
+    imcf_uint8           is_success;
+    imcf_uint8           sim_slot_id;
+    imcf_uint32          network_id; /* drop on 93MD */
+} vt_srv_imcb_pdn_handover_end_ind_struct, imsvt_imcb_pdn_handover_end_ind_struct;
+
+#endif