1 在CustResDefPLUTO.h 中设置工程模式等 2 MTK申请和释放media内存的函数 eg: 分配20字节内存, temp_filename指向其首地址 char* temp_filename; if (media_get_ext_buffer(MOD_MMI, (void **)&temp_filename, 20) != 0) { return ; } media_free_ext_buffer(MOD_MMI, (void**)wstr_filename); 3 MTK申请ctrlbuff内存的函数 eg: kal_Uint16* p = (kal_Uint16*)get_ctrl_buff(buff_size); free_ctrl_buff(p); 4 从MMI往L4发消息请求数据 eg: MYQUEUE Message; Message.oslSrcId = MOD_MMI; Message.oslDestId = MOD_L4C_2; Message.oslMsgId = (msg_type) PRT_MSG_ID_MMI_SMS_GET_PROFILE_PARAMS_REQ; Message.oslDataPtr = (oslParaType*)msgReq; //传递的参数 Message.oslPeerBuffPtr = NULL; OslMsgSendExtQueue(&Message); SetSlaveProtocolEventHandler(Ys_GDevice_MasterCenterNumRsp, PRT_MSG_ID_MMI_SMS_GET_PROFILE_PARAMS_RSP);//设置消息响应的回调 5 获取系统盘和获取挂载设备 eg1: fun int() get_removeable_drv return FS_GetDrive(FS_DRIVE_V_NORMAL, 2, FS_DRIVE_V_NORMAL | FS_DRIVE_I_SYSTEM); eg2: fun int() get_sys_drv if (FS_GetDevStatus((unsigned int)FS_GetDrive(FS_DRIVE_V_REMOVABLE, 1, FS_NO_ALT_DRIVE), FS_MOUNT_STATE_ENUM) == FS_NO_ERROR) return FS_GetDrive(FS_DRIVE_V_REMOVABLE, 1, FS_NO_ALT_DRIVE); return -1; 6 读写文件 char temp_filename[50]; short wstr_filename[50]; sprintf(temp_filename, "%c://sample.cgg", get_sys_drv()); ascii_to_unicode(temp_filename, wstr_filename); if((file_handle = FS_Open((const WCHAR*)wstr_filename,FS_CREATE_ALWAYS | FS_READ_WRITE)) < 0) { FS_Close(file_handle); return ERROR; } else { FS_Write(file_handle, &statistics_flag, sizeof(statistics_flag), (UINT *)&size); FS_Read(file_handle, &statistics_flag, sizeof(statistics_flag), (UINT *)&size); FS_Close(file_handle); } 7 MTK中获取sim卡状态和当前模式的API mmi_idle_get_dual_sim_status(U8 *sim_status, U8* mode_status) sim_status包括: MMI_SIM_ID_SIM1, MMI_SIM_ID_SIM2, MMI_SIM_ID_DUAL_SIM, MMI_SIM_ID_NO_SIM, mode_state包括: MMI_SIM_ID_SIM1, MMI_SIM_ID_SIM2, MMI_SIM_ID_DUAL_SIM, MMI_SIM_ID_FLIGHT_MODE, 8 获取运营商 eg: char* operid = NULL; #ifdef __SALES_STATISTICS_DUAL_SIM__ if(mode_status == MMI_SIM_ID_SIM1){ operid = gHomePLMNNum;return;} else if(mode_status == MMI_SIM_ID_SIM2 ){ operid = gHomePLMNNum_2;return;} else { if(sim_status == MMI_SIM_ID_DUAL_SIM) { switch(mode_status) { case MMI_SIM_ID_SIM1:{operid = gHomePLMNNum;return;} case MMI_SIM_ID_SIM2:{operid = gHomePLMNNum_2;return;} } } else if (sim_status == MMI_SIM_ID_SIM2){operid = gHomePLMNNum_2;return;} else{operid = gHomePLMNNum; return;} } #else if (sim_status != MMI_SIM_ID_SIM1) return; else{operid = gHomePLMNNum; return;} #endif 9 读写nvram 第一步:添加LID 文件 Nvram_common_defs.h 位置 NVRAM_EF_LAST_LID_COMMAPP eg: NVRAM_EF_YOSC_TEST_LID 第二步:添加nvram项的单项字节数和总项数的宏定义 文件 Nvram_common_defs.h 或 Nvram_common_config.c eg: #define NVRAM_EF_YOSC_TEST_LID_TOTAL 2 #define NVRAM_EF_YOSC_TEST_LID_SIZE (sizeof(NVRAM_YOSC_TEST_STRUCT) * NVRAM_EF_YOSC_TEST_LID_TOTAL) 第三步:设置nvram 数据项的默认值 文件 Nvram_common_config.c 结构体定义在 Nvram_editor_data_item.h eg: typedef struct { int data; char c1[20]; char c2[20]; }NVRAM_YOSC_TEST_STRUCT; static NVRAM_YOSC_TEST_STRUCT const NVRAM_YOSC_TEST_DEFAULT[] = { {1, "j1", ""}, {2, "j2", ""} }; 第四步:添加nvram项的版本, 文件 Nvram_editor_data_item.h #define NVRAM_EF_YOSC_TEST_LID_VERNO "000" 第五步:添加nvram项 文件 Nvram_common_config.c 位置 NVRAM_EF_RESERVED_LID eg: ,{ NVRAM_EF_YOSC_TEST_LID, NVRAM_EF_YOSC_TEST_LID_SIZE, NVRAM_EF_YOSC_TEST_LID_TOTAL, NVRAM_NORMAL(NVRAM_YOSC_TEST_DEFAULT), NVRAM_ATTR_AVERAGE, //指定属性比如备份 NVRAM_CATEGORY_USER, //指定文件的目录 "yosc_test", //文件名的前部分 文件名的组成是:"yosc_test" + "-" + "版本号" VER(NVRAM_EF_YOSC_TEST_LID), //版本 "yosc test data", //描述 NVRAM_APP_RESERVED //默认是这个 } 第六步:读写nvram项 eg1: S16 pError; NVRAM_YOSC_TEST_STRUCT data_item[2]; ReadRecord( NVRAM_EF_YOSC_TEST_LID, 1,//从哪条记录开始读 起始0 (void*)data_item, 2 * sizeof(vrsd_tag_struct), //读取的字节数 &pError); eg2: NVRAM_YOSC_TEST_STRUCT data_item[2] = {{1, "k1", ""},{2, "k2", ""}}; WriteRecord(NVRAM_EF_YOSC_TEST_LID,1, (void*)data_item, 2 * sizeof(vrsd_tag_struct), &pError); pError = 1 时 success 第七步:codegen