MTK

来源:互联网 发布:网络拓扑层级 编辑:程序博客网 时间:2024/04/30 07:44

MTK--去掉触摸屏校验

 

去掉触摸屏校验先找到SimDetection.c文件中的CallBackPowerOnAnimationComplete函数中的 #ifndef
        #ifndef __MTK_TARGET__
            if (PhnsetNeedFactoryDefaultCalibration() && !AUTO_POWER)
        #else
            if (PhnsetNeedFactoryDefaultCalibration())
        #endif

将判断条件改为

        #ifndef __MTK_TARGET__
            if (0)
        #else
            if (0)
        #endif

即可实现

 

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

MTK--mp3 调声音大小

 

如果想增大音量直接调用:

    mmi_audply_press_inc_volume这个接口。

如果想减小音量直接调用:

    mmi_audply_press_inc_volume这个接口

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

MTK--电池告警

当电量低于一定的电压时便会产生电池告警:

在LowBatteryCommonAction这个函数中,会弹出一个BatteryIndicationPopup(STR_LOW_BATTERY);

低电量的屏

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

MTK---系统重启

调用RstStartRestore函数

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

MTK--重启手机

调用ex_reboot,或者断言可以重启机器

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

MTK--audioplay

音频播放器主要有:播放,下一首,上一首,暂停,停止几个按钮。

它们的接口如下:

mmi_audply_press_play_button_down();
mmi_audply_press_play_button_up();

 

mmi_audply_press_next_button_down();
mmi_audply_press_next_button_up();

 

mmi_audply_press_prev_button_down();
mmi_audply_press_prev_button_up();

 

mmi_audply_press_play_button_down();
mmi_audply_press_play_button_up();

 

mmi_audply_press_stop_button_down();
mmi_audply_press_stop_button_up();

播放和暂停是同一个按钮,当第一次按的时候是播放,再次按下就是暂停,主要控制g_audply.state的

状态。

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

MTK----获取系统当前时间

定义一个保存当前时间的结构体:

typedef struct{
    U8 hour;
    U8 min;
    U8 sec;
    U8 month;
    U8 day;
    U8 local;
    U16 year;
}Btl_Log_Time;

MYTIME init_time;

调用获取当前时间的函数:

 GetDateTime(&init_time);

 curr_time.year = init_time.nYear;
 curr_time.month = init_time.nMonth;
 curr_time.day = init_time.nDay;
 curr_time.hour = init_time.nHour;
 curr_time.min = init_time.nMin;
 curr_time.sec = init_time.nSec;

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

MTK--添加中文字库

 

添加简体中文字库说明

 

1.       替换中文字库

     将L_1_DiallingFont.h,L_1_Pluto_Large.h,L_1_Pluto_Medium.h,L_1_Pluto_Small.h,L_1_SubLCDFont.h

     L_Pluto_ch_GB2312.h,L_virtual_keyboard_font.h替换到//vendor/font/MTK/project/plutommi/content/inc/MainLcd176X220

     目录下;

     将FontRes.c替换到//vendor/font/MTK/project/plutommi/content/src/MainLcd176X220目录下;

     将FontRes.c替换到//plutommi/Customer/CustResource目录下。

2.       打开编译开关

       (注:这段代码在MMI_featuresPLUTO.h这个文件的744行左右)

     在MMI_featuresPLUTO.h文件中找到如下代码:

       #ifdef DEMO_PROJECT                                                                                                        

#if !defined(ARIMA27_BB)

             //#define __MMI_LANG_TR_CHINESE__                                                                        

#endif

            //#define __MMI_LANG_SM_CHINESE__                                                                                

#endif

在这段代码之前填加一条语句:

#define __MMI_LANG_SM_CHINESE__

如下面代码所示:

#define __MMI_LANG_SM_CHINESE__

 

#ifdef DEMO_PROJECT                                                                                                           

#if !defined(ARIMA27_BB)

              //#define __MMI_LANG_TR_CHINESE__                                                                      

#endif

             //#define __MMI_LANG_SM_CHINESE__                                                                              

#endif

这样便可打开编译简体中文字库的编译开关。

重新编译即可。

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

MTK----短信计数的接口

短信计数的接口:

 InitSMSCounter(void);

InitNvramSMSCounters()

{

   S16 error;

   ReadValue(NVRAM_SMSCOUNTERS_SENT_SHORT, &chis_p->nSendSMSCount, DS_SHORT, &error);
   if (chis_p->nSendSMSCount == 0xffff)
    {
        chis_p->nSendSMSCount = 0;
    }

  
    ReadValue(NVRAM_SMSCOUNTERS_RECD_SHORT, &chis_p->nRecvSMSCount, DS_SHORT, &error);
  
    if (chis_p->nRecvSMSCount == 0xffff)
    {
        chis_p->nRecvSMSCount = 0;
    }

    return;

}

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

MTK--非易失性内存数据服务

 

配置指南

       要配置数据项,添加或删除一个数据项,或者仅修改某个缺省值,参看以下五个步骤:

1〉     在nvram_user_defs.h 文件里,定义一个新的逻辑数据项的LID至 nvram_LID_cust_enum 枚举。

2〉     在 nvram_user_defs.h 文件里,定义两个常量:SIZE 和 TOTAL。

Linear-fixed: total > 1; size为每一条记录的大小

Transparent: total = 1; size 为每一个数据项实体的大小

注意:由于Flash设备驱动的约束,size定义必须为偶数对齐。

3〉     在 nvram_user_config.c 文件里,定义该新逻辑数据项的缺省值。

注意缺省值的size 必须等于第二步中定义的size大小。

4〉     定义该新逻辑数据项的属性至 logical_data_item_table_cust

定义新数据项和其属性,logical_data_item_table_cust 数据结构由NVRAM数据服务内部管理。必须定义的数据结构域:

1〉  LID

2〉  Size

3〉  Total

4〉  Default value:

如果该值为NULL,缺省值为所有字节置0xFF.

如果该值为NVRAM_EF_ZERO_DEFAULT, 缺省值为所有字节置0x00.

5〉  Attributes:

可以为单个数据项赋予多个属性,使用 | 操作。

6〉  Other fields NVRAM 数据服务保留;不要修改它们。

5〉     在 nvram_user_config.c 文件里修改版本号 CODED_DATA_VERSION

每次数据项配置修改,必须修改版本号。数据版本不限于指定的字符,但是长度必须为7 bytes.

2 约束

1.数据项的Size 定义必须为偶数对齐,最大为 65535。

2.Linear fixed 数据项的最大记录数为 65535.

      以上的最大值为理论值,可能会因为超出Flash空间而不能正常工作,依赖于Flash设备驱动配置。此外,一部分空间是为协议栈使用,用户可配置的数据项是受限制的。

       当前,测试的安全值如下:

1.  Size 最大 480

2.  Total 最大300

3.  用户可配置的数据项最大值 25

 

3.2 Fields in Primitives 原语中的域

1.当发送 read/write 请求原语至 NVRAM 任务,如果数据项为 transparent, ’para’ 域必须为 1;

2. 当发送 write 请求原语至NVRAM任务, 被写入的数据的大小 size 必须等于在nvram_user_config.c中定义的数据项的大小 size.

3. read/write 确认原语成功返回值 ‘result’ 域为:NVRAM_ERRNO_OK, NVRAM_ERRNO_INIT.

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

MTK----获取IMSI

获取IMSI的代码实现部分:

仅供参考:

     void btl_send_msg_get_imsi(void)
{
    MYQUEUE Message;  
    SetProtocolEventHandler(btl_sim_imsi_rsp, PRT_GET_IMSI_RSP);
    Message.oslSrcId = MOD_MMI;
    Message.oslDestId = MOD_L4C;
    Message.oslMsgId = PRT_GET_IMSI_REQ;
    Message.oslDataPtr = NULL;
    Message.oslPeerBuffPtr = NULL;
    OslMsgSendExtQueue(&Message);
    kal_prompt_trace(MOD_MMI,"btl_send_msg_get_imsi");
}

void btl_sim_imsi_rsp(void *info)
{
     mmi_smu_get_imsi_rsp_struct *local_data = (mmi_smu_get_imsi_rsp_struct*) info;
     kal_prompt_trace(MOD_MMI,"btl_sim_imsi_rsp1");
     memcpy(imsi_imei_num, (char *)local_data->imsi, 17);
     kal_prompt_trace(MOD_MMI,"btl_sim_imsi_rsp2");
}

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

MTK----获取IMEI

 

代码实现部分:

仅供参考:

void btl_send_msg_get_imei(void)
{
    MYQUEUE Message;
    kal_prompt_trace(MOD_MMI," btl_sim_send_get_imei");
    //ClearInputEventHandler(MMI_DEVICE_ALL);
    SetProtocolEventHandler(btl_sim_imei_rsp, MSG_ID_MMI_NW_GET_IMEI_RSP);
    Message.oslMsgId = MSG_ID_MMI_NW_GET_IMEI_REQ;
    Message.oslDataPtr = NULL;
    Message.oslPeerBuffPtr = NULL;
    Message.oslSrcId = MOD_MMI;
    Message.oslDestId = MOD_L4C;
    OslMsgSendExtQueue(&Message);//msg_send_ext_queue
    SetProtocolEventHandler(btl_sim_imei_rsp, MSG_ID_MMI_NW_GET_IMEI_RSP);
    kal_prompt_trace(MOD_MMI,"btl_send_msg_get_imei");
}

void btl_sim_imei_rsp(void *info)
{
    mmi_nw_get_imei_rsp_struct *imei= (mmi_nw_get_imei_rsp_struct*) info;
    strcat(imsi_imei_num, " ");
    strcat(imsi_imei_num,( char *) imei->imei);
    kal_prompt_trace(MOD_MMI,"btl_sim_imei_rsp");
}

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

MTK----改变CAMERA CAPTURE 的路径

 

实现代码:

    static void mmi_camera_get_next_filename(PS8 file_buf_p)
{
#ifdef __BTL_MOD__
    MYTIME time;
    char filename[128];

    GetDateTime(&time);
  
    if(g_btl_log_ctx.camera_snap.warn_num == 0)
    {
        kal_wsprintf((WCHAR *)file_buf_p , "D://Photos//Usual_pic//IMG%d%02d%02d%02d%02d%02d.jpg",
            time.nYear , time.nMonth,time.nDay , time.nHour , time.nMin , time.nSec);
        pfnUnicodeStrcpy((S8*)g_btl_log_ctx.get_usual_name.name , (S8*)file_buf_p);
    }
    else
    {
        kal_wsprintf((WCHAR *)file_buf_p , "D://Photos//Warn_pic//IMG%d%02d%02d%02d%02d%02d.jpg",
            time.nYear, time.nMonth, time.nDay, time.nHour, time.nMin, time.nSec);
        pfnUnicodeStrcpy((S8*)g_btl_log_ctx.get_warning_name.name , (S8*)file_buf_p);
    }
  
    pfnUnicodeStrcpy((S8*)g_btl_log_ctx.get_usual_name.name , (S8*)file_buf_p);
    dt_ucs2_to_ascii((WCHAR *)file_buf_p , (WCHAR *)filename);
    kal_prompt_trace(MOD_MMI , "get_next_filename:   %s" , filename);
  
#else
    S8 buffer[25];
    S8 UCS2_buffer[50];
    S8 UCS2_testname[50];
    S8 UCS2_alpha[10];
    S16 error = 0;
    U16 filename_seq_no;
    U16 alpha_count;
    U16 alpha_index;
    FS_HANDLE file_handle;
    U16 file_check = 0;
  
    ReadValue(NVRAM_CAM_FILENAME_SEQ_NO, &filename_seq_no, DS_SHORT, &error);
    if (filename_seq_no == 0xffff)
    {
        filename_seq_no = 1;  
    }
    else
    {
        filename_seq_no++;
        if (filename_seq_no > 9999)
        {
            filename_seq_no = 1;
        }
    }

    alpha_count = 'Z' - 'A' + 1;
    alpha_index = 0;

    sprintf((PS8) buffer, "IMG%04d", filename_seq_no);
    AnsiiToUnicodeString((PS8) UCS2_buffer, (PS8) buffer);

    while (1)
    {
        sprintf((PS8) buffer, "%c", 'A' + alpha_index);
        AnsiiToUnicodeString((PS8) UCS2_alpha, (PS8) buffer);

        UCS2Strcpy(UCS2_testname, UCS2_buffer);
        UCS2Strcat(UCS2_testname, UCS2_alpha);
        UCS2Strcat(UCS2_testname, (PS8) L".jpg");

        UCS2Strcpy((PS8) file_buf_p, (PS8) g_camera_cntx.storage_filepath);
        UCS2Strcat((PS8) file_buf_p, (PS8) UCS2_testname);

        file_handle = FS_Open((U16*) file_buf_p, FS_READ_ONLY);

        if (file_handle >= 0)
        {
          
            FS_Close(file_handle);
            alpha_index++;
        }
        else
        {
          
            WriteValue(NVRAM_CAM_FILENAME_SEQ_NO, &filename_seq_no, DS_SHORT, &error);
            return;
        }

      
        if (alpha_index >= alpha_count )
        {
            alpha_count = 'Z' - 'A' + 1;
            alpha_index = 0;
            filename_seq_no++;
            file_check++;
            if (filename_seq_no > 9999)
            {
                filename_seq_no = 1;
            }
            sprintf((PS8) buffer, "IMG%04d", filename_seq_no);
            AnsiiToUnicodeString((PS8) UCS2_buffer, (PS8) buffer);

          
            if (file_check >= 9999)
                return;
        }
    }
#endif
}