4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
UCM学习_陶野的窝-CSDN博客
来自 : CSDN技术社区 发布时间:2021-03-25

 UCM Unified Call Management

它是一个在手持机上处理所有种类的calls的一个MMI application.

-SIM1 voice call,SIM2 voice call,VOIP, and etc

 

UCM实现了不同呼叫类型的共存。

如:一个SIM1卡active voice call并且一个SIM2卡held voice call可以共存。

 

先熟悉下面这些结构体

/* Call type enum */
typedef enum
{
    MMI_UCM_VOICE_CALL_TYPE 0x01, /* SIM1 voice call type */
    MMI_UCM_VOICE_CALL_TYPE_SIM2 0x02, /* SIM2 voice call type */
    MMI_UCM_DATA_CALL_TYPE  0x04, /* SIM1 data call type */
    MMI_UCM_DATA_CALL_TYPE_SIM2 0x08, /* SIM2 data call type */
    MMI_UCM_CSD_CALL_TYPE   0x10, /* SIM1 csd call type */
    MMI_UCM_CSD_CALL_TYPE_SIM2 0x20, /* SIM2 csd call type */
    MMI_UCM_VOIP_CALL_TYPE  0x40, /* VoIP call type */
    MMI_UCM_VIDEO_CALL_TYPE 0x80, /* Video call type*/
    MMI_UCM_CALL_TYPE_END_OF_ENUM /* End of the enum */
} mmi_ucm_call_type_enum;

 

下面的这些宏定义就是利用上面结构体的成员的组合来定义新的宏。

/* All SIM1 call types: voice call, data call, csd call */
#define MMI_UCM_SIM1_CALL_TYPE_ALL     (MMI_UCM_VOICE_CALL_TYPE | MMI_UCM_DATA_CALL_TYPE | MMI_UCM_CSD_CALL_TYPE)
/* All SIM2 call types: voice call, data call, csd call */
#define MMI_UCM_SIM2_CALL_TYPE_ALL     (MMI_UCM_VOICE_CALL_TYPE_SIM2 | MMI_UCM_DATA_CALL_TYPE_SIM2 | MMI_UCM_CSD_CALL_TYPE_SIM2)
/* All voice call types: SIM1 voice call/ SIM2 voice call */
#define MMI_UCM_VOICE_CALL_TYPE_ALL    (MMI_UCM_VOICE_CALL_TYPE | MMI_UCM_VOICE_CALL_TYPE_SIM2)
/* All data call types: SIM1 data call/ SIM2 data call */
#define MMI_UCM_DATA_CALL_TYPE_ALL     (MMI_UCM_DATA_CALL_TYPE | MMI_UCM_DATA_CALL_TYPE_SIM2)
/* All csd call types: SIM1 csd call/ SIM2 csd call */
#define MMI_UCM_CSD_CALL_TYPE_ALL      (MMI_UCM_CSD_CALL_TYPE | MMI_UCM_CSD_CALL_TYPE_SIM2)
/* All call types: all voice calls, csd calls, data calls, voip calls, video calls */
#define MMI_UCM_CALL_TYPE_ALL          (MMI_UCM_VOICE_CALL_TYPE_ALL | MMI_UCM_DATA_CALL_TYPE_ALL | MMI_UCM_CSD_CALL_TYPE_ALL | MMI_UCM_VOIP_CALL_TYPE | MMI_UCM_VIDEO_CALL_TYPE)
/* All call types except for csd calls */
#define MMI_UCM_CALL_TYPE_NO_CSD       (MMI_UCM_VOICE_CALL_TYPE_ALL | MMI_UCM_DATA_CALL_TYPE_ALL | MMI_UCM_VOIP_CALL_TYPE | MMI_UCM_VIDEO_CALL_TYPE)
/* All call types except for csd calls and data calls*/
#define MMI_UCM_CALL_TYPE_NO_DATA_CSD  (MMI_UCM_VOICE_CALL_TYPE_ALL | MMI_UCM_VOIP_CALL_TYPE | MMI_UCM_VIDEO_CALL_TYPE)
/* All call types except for SIM2 call types*/
#define MMI_UCM_CALL_TYPE_NO_SIM2      (MMI_UCM_SIM1_CALL_TYPE_ALL | MMI_UCM_VOIP_CALL_TYPE | MMI_UCM_VIDEO_CALL_TYPE)
/* All csd calls and data calls*/
#define MMI_UCM_CALL_TYPE_DATA_CSD_ALL (MMI_UCM_DATA_CALL_TYPE_ALL | MMI_UCM_CSD_CALL_TYPE_ALL)

------------------------------------------------------------------------------------------------------------------------------

再看结构体

typedef struct
{
    mmi_ucm_group_entry_struct  group_info[MMI_UCM_MAX_NUM_TAB];
    U8 num_group;
} mmi_ucm_call_list_struct;

 

typedef struct
{
    S16 group_id;
    mmi_ucm_call_type_enum  call_type;//上面有说过
    mmi_ucm_call_state_enum  call_state;//下面将要说
    mmi_ucm_call_entry_struct  call_info[MMI_UCM_MAX_NUM_INDEX];
    U8 num_call;
} mmi_ucm_group_entry_struct;

 

typedef enum
{
    MMI_UCM_IDLE_STATE 0,
    MMI_UCM_OUTGOING_STATE,
    MMI_UCM_INCOMING_STATE,
    MMI_UCM_ACTIVE_STATE,
    MMI_UCM_HOLD_STATE,
    MMI_UCM_CALL_STATE_TOTAL
} mmi_ucm_call_state_enum;

 

there are at most 4 group of calls simultaneously in current design.//在当前的设计中最多同时有四组的calls

 

there are at most one active call group at the same time//在同一时刻最多只有一组的call是active。

 

there are at most 5 calls in one call group.//在一组call里最多只有5个calls。

 

typedef struct
{
    S16 call_id;
    mmi_ucm_remote_info_struct  remote_info;
    mmi_ucm_call_origin_enum  call_origin;
    mmi_ucm_module_origin_enum  module_id; /* the module that initializes the call */
    l4c_source_id_enum  l4c_source; /* information that needs UCM to bypass to L4C */
    mmi_ucm_process_state_enum  proc_state;
    mmi_ucm_act_opcode_enum  act_type;
#ifdef __MMI_UCM_SINGLE_CALL_SCREEN_ENHANCE__
    mmi_phb_caller_image_input_struct  display_info;/* Information for in-call screen */
#endif /* __MMI_UCM_SINGLE_CALL_SCREEN_ENHANCE__ */
    MYTIME  start_time;
    MYTIME  end_time;
} mmi_ucm_call_entry_struct;

 

 

 A call is identified by its unique identification(UID),including

Call Type

Group ID

Call ID

 

总之是把上面这些结构体都弄个眼熟。

 

接下来介绍APIs for Call Applications

UCM定义了三种APIs为call Applications Action indication confirm

 

Action

一般一个action包括一个request和一个 response

UCM调用action request API去通知 call application完成请求。

在请求完成后 call applications调用response API把结果通知UCM。

 

typedef enum
{
    MMI_UCM_IDLE 0,
    MMI_UCM_DIAL,
    MMI_UCM_HOLD_AND_DIAL,
    MMI_UCM_ACCEPT,
    MMI_UCM_HOLD_AND_ACCEPT,
    MMI_UCM_HOLD,
    MMI_UCM_RETRIEVE,
    MMI_UCM_SWAP,
    MMI_UCM_CONFERENCE,
    MMI_UCM_SPLIT,
    MMI_UCM_DEFLECT,
    MMI_UCM_TRANSFER,
    MMI_UCM_END_SINGLE,
    MMI_UCM_END_CONFERENCE,
    MMI_UCM_END_ALL,
    MMI_UCM_FORCE_RELEASE,
    MMI_UCM_AUTO_REJECT,
    MMI_UCM_EXPLICT_CALL_TRANSFER,
    MMI_UCM_END_ACTIVE_AND_RETRIEVE,
    MMI_UCM_END_ACTIVE_AND_ACCEPT,
    MMI_UCM_PROCESSING,
    MMI_UCM_START_DTMF,
    MMI_UCM_STOP_DTMF,
    MMI_UCM_ACT_OPCODE_TOTAL
} mmi_ucm_act_opcode_enum;//定义的一些 action操作的类型这些类型将被分发出去。搜索此枚举变量成员可发现它的用法。

 

 

以MMI_UCM_DIAL为例

 mmi_ucm_dial_action(void)//在里面更新了状态。

 

mmi_ucm_pre_send_req

mmi_ucm_send_req//就是把action操作分发给不同的call applications。

 

mmi_gsm_ucm_act_req//SIM1 call applications的action dispatcher.

 

mmi_ucm_dispatch_rsp//UCM response dispatcher API

 

mmi_ucm_dial_act_rsp//UCM action response handler

相关流程代码跟跟就明白了。

 

 

 

 

 

 

\"\" \"\" \"\" 点赞 \"\" \"\" 评论

本文链接: http://ucmgroup.immuno-online.com/view-756514.html

发布于 : 2021-03-25 阅读(0)