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
}