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
}