MTK6225通话设置

 

typedef struct

{

    U8 CallerID;                 //手机中保存的Caller ID状态。执行过程是:用户设置之后,MMI向L4发送消息,然后等待RSP消息。 等到RSP后,判断设置是否成功。如果返回结果为1,就把用户输入的CallerIDInput拷贝到CallerID中,然后写入NVRAM。

    U8 CallerIDInput;          //Caller ID的状态。可能值:

                                                   typedef enum

{

   CLIR_INVOKE,//隐藏

   CLIR_SUPPRESS,//显示

   CLIR_AUTO //网络预设

} rmmi_clir_enum;

    U8 CTRStatus;              //手机中已经存储的CTR状态。0-没有提醒,1-一次,2-周期

    U8 CTRStatusInput;      //在【通话时间提示】这个SCREEN中,当前高亮的ITEM

    U8 CTRNumber[MAX_CTR_NUM_DIGITS *ENCODING_LENGTH];

                                          //手机中已经存储的提醒时间

    U8 CTRNumberInput[MAX_CTR_NUM_DIGITS *ENCODING_LENGTH];

                                          //接收用户输入的提醒时间

    U8 CTDStatus;      //通话时间显示是否开启

    U8 CTDInput;               //用于显示提示信息的索引。也就是:“通话时间显示”这个ITEM在//“通话设置”这个SCREEN中的索引

    U8 AutoRedialStatus;     //自动重拨是否开启

    U8 AutoRedialInput;       //与CTDInput是相同的作用

    U8 LineID;

    U8 LineIDInput;

#ifdef __MMI_LINE_SWITCH_SHOW_NUMBER__

    U8 LineInfo[(MAX_PB_NUMBER_LENGTH + 25) *ENCODING_LENGTH];

#else

    U8 LineInfo[25 *ENCODING_LENGTH];

#endif

    U8 SSDisplayBuffer[MAX_DISP_UCS2];    //设置辅助服务时,保存操作结果字串

    U8 SSBarPassStep;        //控制输入密码的步骤

    U8 SSBarType;             //【呼叫限制】的类型

    U8 SSBarAction;           //开启或者关闭

    U8 SSBarPassOld[BARR_SIM_PASS_LEN *ENCODING_LENGTH + 4];

    U8 SSBarPassNew[BARR_SIM_PASS_LEN *ENCODING_LENGTH + 4];

    U8 SSBarPassCfrm[BARR_SIM_PASS_LEN *ENCODING_LENGTH + 4];

    U8 SSCFType;       //【呼叫转移】的类型SS-附加服务,CF—Call Forward!

    U8 SSCFCondQueryStage;    //cond类型

    U8 SSCFNum[(MAX_CC_ADDR_LEN *ENCODING_LENGTH) + 2];

                                   //保存【呼叫转移】的号码

    U8 SSCFNumFromPHB;       //号码是否来源于电话簿

    U8 SSCFNoAnsTimeIndex;   //在设置【无人接听时间】时,用户选择的时间索引

} CallSetupContext;

1.【本机号码】

NVRAM保存:

ReadValue(NVRAM_CALLERID, &g_callset_context.CallerIDInput, DS_BYTE, &error);

WriteValue(NVRAM_CALLERID, &g_callset_context.CallerIDInput, DS_BYTE, &error);

 

       函数InitNvramCallerId()在系统启动的时候被调用,获取NVRAM中保存的CALLER ID的设置,保存在g_callset_context.CallerIDInput中,然后调用SetCallerIdReq()发送消息到L4来设置,L4返回消息操作成功,则进入CBACK函数CALLSETCallerIDRsp(),设置g_callset_context.CallerID = g_callset_context.CallerIDInput。并且再写入到NVEAM中。

 

用户设置过程:

void InitCallerId(void)

{

    SetHiliteHandler(MENU_CALLER_ID, HighlightCALLSETCallerId);

    SetHiliteHandler(MENU_CID_SET_NWK, HiliteSetByNwk);

    SetHiliteHandler(MENU_CID_SHOW_ID, HiliteShowCid);

    SetHiliteHandler(MENU_CID_HIDE_ID, HiliteHideCid);

    return;

}

选择后,ShowCategory15Screen(),SHOW出3个菜单:网络预设,隐藏号码,发送号码。然后根据当前高亮的菜单设置g_callset_context.CallerIDInput为:CLIR_INVOKE,   CLIR_SUPPRESS,CLIR_AUTO其中之一。

然后,按下【确定】,即调用SetCallerIdReq()发送消息PRT_MMI_SS_SET_CLIR_FLAG_REQ到L4,L4返回消息PRT_MMI_SS_SET_CLIR_FLAG_RSP,进入CBACK函数:CALLSETCallerIDRsp()。如果设置成功,设置:

g_callset_context.CallerID = g_callset_context.CallerIDInput。

即:CallerIDInput保存的是用户选择的高亮的索引,CallerID保存的是已经成功设置的索引。

 

 

2.呼叫等待

void InitCallWaiting()

{

    SetHiliteHandler(MENU8237_SCR8093_MNGCALL_MENU_WAIT,                                                                HighlightCALLSETCallWaiting);

    SetHiliteHandler(MENU8237_MNGCALL_CALWAIT_MENU_ON,                                                           HighlightCALLSETCallWaitingOn);

    SetHiliteHandler(MENU8237_MNGCALL_CALWAIT_MENU_OFF,                                                          HighlightCALLSETCallWaitingOff);

    SetHiliteHandler(MENU8237_MNGCALL_CALWAIT_MENU_QUERY,                                                      HighlightCALLSETCallWaitingQuery);

    return;

}

3个菜单:     开启EntryScrCallWaitingOnreq()-- MakeCall(“*43#”)

                     关闭EntryScrCallWaitingOffreq()-- MakeCall(“#43#”)

                     查询EntryScrCallWaitingQueryreq()-- MakeCall(“*#43#”)

 

CABCK函数:CALLSETWaitingRsp().

 

 

3.呼叫转移

InitCallForwarding()

SetHiliteHandler(MENU8237_SCR8093_MNGCALL_MENU_FWD,                                                                 HighlightCALLSETCallFwd);

 

呼叫转移的类型:

typedef enum

{

    FORWARD_UNREACHABLE = 0,

    FORWARD_NOANSWER,

    FORWARD_ALLCOND,

    FORWARD_BUSY,

    FORWARD_ALLVOICE,

    FORWARD_DATA,

    FORWARD_CANCEL_ALL

} SSForwardType;

 

任何一个菜单高亮后,都会设置变量g_callset_context.SSCFType。

g_callset_context.SSCFNum[]:保存了用户输入的呼叫转移的号码。

在设置的时候,会检测g_callset_context.SSCFNum,如果为空,就调用函数mmi_phb_call_enter_from_divert()从电话簿中查找号码。

设置号码之后,MakeCall(),设置。L4返回消息PRT_MMI_SS_CALL_FORWARD_RSP进入CBACK函数CALLSETForwardRsp()。

 

 

4.呼叫限制

Hilite设置InitCallBarring()。

呼叫限制类型:

typedef enum

{

    BARRING_OUTGOING_ALLCALLS,                禁拨所有电话

    BARRING_OUTGOING_INTERCALL,                     禁拨国际长途

    BARRING_OUTGOING_INTEREXCEPTHOME,      只许回拨国内

    BARRING_INCOMING_ALLCALLS,                       禁接所有来电

    BARRING_INCOMING_ROAMING                         禁接漫游来电

} SSBarType;

 

用户选择的操作:开启?关闭?查询?

typedef enum

{

    BARRING_ON,

    BARRING_OFF,

    BARRING_QUERY,

    BARRING_CHANGE_PSW,

    BARRING_CANCEL_ALL

} SSBarAction;

 

MMI:MakeCall()

L4返回:PRT_MMI_SS_CALL_BARRING_RSP,进入:CALLSETBarringRsp()。

 

 

5.通话时间提示

NVRAM存储:

ReadValue(NVRAM_SETTING_CTR, &data, DS_BYTE, &error);

ReadValue(NVRAM_SETTING_CTR_TIME, &ctrTime, DS_SHORT, &error);

 

在InitManageCalls()中,

SetHiliteHandler(MENU_SETTING_CALL_REMINDER,                                                                         HighlightCALLSETCallTimeReminder);

SetHintHandler(MENU_SETTING_CALL_REMINDER, HintCALLSETCallTimeReminder);

 

菜单入口函数:EntryCALLSETCallTimeReminder(),显示一个单选菜单项:

关闭;一声;周期。

用户无论选择哪个高亮,函数CtrHandler()就被调用设置g_callset_context.CTRStatusInput。

 

然后按下左键,进入SendCtr()

void SendCtr(void)

{

    data = g_callset_context.CTRStatusInput;

    if (data == 0)

    {

        WriteValue(NVRAM_SETTING_CTR, &data, DS_BYTE, &error);

        DisplayPopup((PU8)GetString(STR_GLOBAL_DONE),                                                                          IMG_GLOBAL_ACTIVATED,

                                   1, ST_NOTIFYDURATION, SUCCESS_TONE);

        DeleteScreenIfPresent(SCR_ID_CALLSET_CTR);

    }

    else

    {

        EntryCALLSETCtrTime();

    }

}

 

EntryCALLSETCtrTime()是设置提醒时间的。这里首先判断输入的时间是否符合要求,如果不符合,则

              if (GetHistoryScrID(SCR_ID_CALLSET_CTR_TIME, &History) == ST_SUCCESS)

        {

            if (History->inputBuffer != NULL)

            {

                memset(History->inputBuffer, 0, ENCODING_LENGTH);

            }

            if (History->guiBuffer != NULL)

            {

                memset(History->guiBuffer, 0, 2);

            }

        }

 

如果输入的时间符合要求,则调用SendCtrTime(),

       WriteValue(NVRAM_SETTING_CTR, &data, DS_BYTE, &error);

    WriteValue(NVRAM_SETTING_CTR_TIME, &time, DS_SHORT, &error);

然后返回到【通化设置】SCREEN,这时,会调用HintCALLSETCallTimeReminder()把用户设置的提醒类型和时间拷贝到g_callset_context.CTRNumber和g_callset_context.CTRNumber中。

 

 

6.通话时间显示

SetHiliteHandler(MENU_SETTING_CALL_TIME_DISPLAY,                                                                          HighlightCALLSETCallTimeDisplay);

SetHintHandler(MENU_SETTING_CALL_TIME_DISPLAY,

                                   HintCALLSETCallTimeDisplay);

 

在HintCALLSETCallTimeDisplay()中,调用GetCallTimeDisplay()从NVRAM中读取设置,ReadValue(NVRAM_SETTING_CALL_TIME_DISPLAY, &data, DS_BYTE, &error);并设置g_callset_context.CTDStatus。

 

按下左软件,更改设置后,写入NVRAM,调用Category52ChangeItemDescription()改变hint提示信息,改变左软件的label,然后设置g_callset_context.CTDStatus。

 

 

7.自动重拨

SetHiliteHandler(MENU9140_AUTO_REDIAL, HighlightCALLSETAutoRedial);

SetHintHandler(MENU9140_AUTO_REDIAL, HintCALLSETAutoRedial);

 

在HintCALLSETAutoRedial()中调用AutoRedialOnOffStatus()从NVRAM中读取设置,ReadValue(NVRAM_SETTING_AUTOREDIAL, &data, DS_BYTE, &error);,并设置变量g_callset_context.AutoRedialStatus。

 

按下左软件,更改设置后,写入NVRAM,

WriteValue(NVRAM_SETTING_AUTOREDIAL, &data, DS_BYTE, &error);

然后Category52ChangeItemDescription(),改变左软件label,并设置变量:

g_callset_context.AutoRedialStatus

 

 

8.IP拨号

WriteRecord(NVRAM_EF_IP_NUMBER_LID, 1, IPNumber, sizeof(IPNumber), &error);

WriteValue(NVRAM_IP_NUMBER_SETTING, &IPSetting, DS_BYTE, &error);    

 

SetHiliteHandler(MENU_SETTING_IP_NUMBER, HighlightIPNumber);

SetHiliteHandler(MENU_IP_NUM_ACTIVATE, HighlightIPNumActivate);

SetHiliteHandler(MENU_IP_NUM_EDIT, HighlightIPNumEdit);

 

全局变量的说明:

IPSetting------当前开启的IP号码。可能为4个值:0,1,2,Oxff(没有启动任何一个号码)。

IPNumber[][]—保存了用户设置的IP号码。

newIPNum[]-------接收用户输入的IP号码

curIPnumIndex----在”IP拨号”这个SCREEN中,列了3个IP号码菜单,curIPnumIndex指示                      当前高亮的菜单的索引。

 

ShowCategory53Screen()中,每个MENU的前面都可以有ICON的。在这里,因为只能开启一个IP号码,因此,只能在其中一个MENU前面显示ICON(打钩),是通过

       if (IPSetting != 0xff)

    {

        highlite = IPSetting;

        PPIcons[IPSetting] = IMG_VICON;

    }

来控制的。IPSetting代表了当前开启的IP号码,这样就只为这个开启的MENU项打钩了。

 

 

9.来电警卫

系统启动初始化过程:

InitNvramData()、

 

LoadBlackListNum()

{

       ReadValue(NVRAM_BLACK_LIST_MODE,&gBlackListMode, DS_BYTE, &error);

    ReadValue(NVRAM_BLACK_LIST_SETTING, &gBlackListFlag, DS_BYTE, &error);

    ReadRecord(NVRAM_EF_BLACK_LIST_LID, 1, BlackListNum, sizeof(BlackListNum),                                                                                           &error);

}

 

SetHiliteHandler(MENU_SETTING_BLACK_LIST, HighlightBlackList);

SetHintHandler(MENU_SETTING_BLACK_LIST, HintBlackList);

 

SetHiliteHandler(MENU_SETTING_BLACK_LIST_FLAG, HighlightBlackListFlag);

SetHintHandler(MENU_SETTING_BLACK_LIST_FLAG, HintBlackListFlag);  

 

SetHiliteHandler(MENU_SETTING_BLACK_LIST_MODE, HighlightBlackListMode);

SetHiliteHandler(MENU_SETTING_BLACK_LIST_NUM, HighlightBlackListNum);

SetHintHandler(MENU_SETTING_BLACK_LIST_MODE, HintBlackListMode);

SetHiliteHandler(MENU_SETTING_BLACK_LIST_OP_EDIT,                                                                                                                               HighlightBlackListNumOptionEdit); 

SetHiliteHandler(MENU_SETTING_BLACK_LIST_OP_DEL,                                                                                                                          HighlightBlackListNumOptionDel);

 

全局变量说明

gBlackListFlag----开关标志:1-开启,0-关闭

gBlackListMode---模式标志:1—只接,0—拒接

curBlackListNumIndex---当前高亮的黑名单索引(一共10个黑名单)

BLInputNumber---接收用户输入的号码

BlackListNum[][]—保存设置的黑名单号码

dispBlackListNum[][]—显示的黑名单号码

 

开关的设置

void SetBlackListFlag(pBOOL flag)

{

       S16 error;

       gBlackListFlag = flag;

       WriteValue(NVRAM_BLACK_LIST_SETTING, &gBlackListFlag, DS_BYTE, &error);

}

 

模式的设置

void SetBlackListMode(pBOOL mode)

{

    S16 error;

    gBlackListMode = mode;

    WriteValue(NVRAM_BLACK_LIST_MODE, &gBlackListMode, DS_BYTE, &error);

}

 

    本文章为自己学习比较,如有错误,请不吝赐教!谢谢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IOT物联网小镇

赏点银子去植发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值