📄 thememanager.c
字号:
WriteRecord(
NVRAM_EF_THEME_MANAGER_LID,
1,
(void*)(g_tm_theme_list + g_tm_cntx.sys_thm_cnt),
NVRAM_EF_THEME_MANAGER_RECORD_SIZE,
&err);
--g_tm_cntx.total_thm_cnt;
return THEME_ERROR_SUCCESS;
}
else
{
return THEME_ERROR_DELETE_FAILURE;
}
}
else if ((*error_type = FS_Delete((U16*) file_name)) == FS_NO_ERROR)
{
return THEME_ERROR_SUCCESS;
}
else
{
return THEME_ERROR_FAILURE;
}
}
/*****************************************************************************
* FUNCTION
* mmi_tm_get_current_theme_ringtone
* DESCRIPTION
* This function gets the current theme ringtone
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
pBOOL mmi_tm_get_current_theme_ringtone(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return g_tm_cntx.theme_has_ringtone;
}
/*****************************************************************************
* FUNCTION
* mmi_tm_get_theme_version_table
* DESCRIPTION
* This function gets the theme version table
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
const FLOAT *mmi_tm_get_theme_version_table(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return g_tm_supported_thm_version_table;
}
U32 g_tc_checksumkey = 0xFFFFFFFF;
extern U8 gFileBuffer[MAX_BUFF_SIZE];
extern S32 gnFileBytesRead;
/* update the CRC on the data block one byte at a time */
/*****************************************************************************
* FUNCTION
* mmi_tm_crc32
* DESCRIPTION
* This function calls update crc function
* PARAMETERS
* Data_p [?]
* Length [IN]
* RETURNS
* void
*****************************************************************************/
U32 mmi_tm_crc32(U8 *Data_p, U16 Length)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return applib_crc_update(g_tc_checksumkey, Data_p, Length);
}
/*****************************************************************************
* FUNCTION
* mmi_tm_verify_theme_checksum
* DESCRIPTION
* This function checks the theme file checksum
* PARAMETERS
* file_name_p [?]
* RETURNS
* theme error code
*****************************************************************************/
tm_theme_error_enum mmi_tm_verify_theme_checksum(U8 *file_name_p)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
S32 no_of_char;
U32 checksum[2];
FILE_HANDLE file;
U32 theme_file_size;
U32 bytes_read = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
#ifndef MMI_ON_WIN32
file = OpenCache((U8*) file_name_p, PFS_READ_BINARY);
#else
file = OpenCache((U8*) file_name_p, (U8*) "r");
#endif
if (!file)
{
return THEME_ERROR_FILE_FORMAT_BAD;
}
else
{
/* Read checksum & File Size here, after Opening file get it's size */
if (FS_GetFileSize(file, &theme_file_size) != FS_NO_ERROR)
{
pfclose(file);
return THEME_ERROR_FILE_FORMAT_BAD;
}
if (gnFileBytesRead > (THEME_CHECKSUM_HEADER_SIZE + THEME_FILE_SIZE_HEADER))
{
pCacheFileRead(file, THEME_CHECKSUM_HEADER_SIZE + THEME_FILE_SIZE_HEADER, &no_of_char, (U8*) & checksum);
FS_Seek(file, (THEME_CHECKSUM_HEADER_SIZE + THEME_FILE_SIZE_HEADER), FS_FILE_BEGIN);
/* 4 bytes of File Size are used to calculate CRC therefore we need to include in CRC checking */
}
else
{
pfclose(file);
return THEME_ERROR_FILE_FORMAT_BAD;
}
if (theme_file_size != checksum[1])
{
pfclose(file);
return THEME_ERROR_FILE_FORMAT_BAD;
}
/* Tricky THEME_NO_OF_BYTE_TO_CHECK_FOR_CRC is assumed to be multiple of MAX_BUFF_SIZE */
while (bytes_read < (THEME_NO_OF_BYTE_TO_CHECK_FOR_CRC)) /* 0x80000 Bytes => 512 * 1024 = 524288 Bytes */
{
StartFileRead(file, 0);
if (gnFileBytesRead == MAX_BUFF_SIZE)
{
bytes_read += gnFileBytesRead;
g_tc_checksumkey = mmi_tm_crc32(gFileBuffer, (U16) gnFileBytesRead);
}
else if (gnFileBytesRead != 0 && gnFileBytesRead < MAX_BUFF_SIZE)
{
bytes_read += gnFileBytesRead;
g_tc_checksumkey = mmi_tm_crc32(gFileBuffer, (U16) gnFileBytesRead);
break;
}
/* PMT DLT_FIXES - TK 20060321 START */
else
{
break; /* boundary value analysis is not consider here so this loop is */
}
/* PMT DLT_FIXES - TK 20060321 END */
}
}
pfclose(file);
if (g_tc_checksumkey == checksum[0])
{
g_tc_checksumkey = 0xFFFFFFFF;
return THEME_ERROR_SUCCESS;
}
else
{
g_tc_checksumkey = 0xFFFFFFFF;
return THEME_ERROR_FILE_FORMAT_BAD;
}
}
#ifdef __DLT_ENABLE_PROCESS_QUEUE__
/*****************************************************************************
* FUNCTION
* mmi_tm_theme_process_queue
* DESCRIPTION
* This function polls for message queue
* PARAMETERS
* void
* a(?) [IN/OUT] None/Error status
* b(?) [IN] None
* RETURNS
* theme error code
*****************************************************************************/
tm_theme_error_enum mmi_tm_theme_process_queue(void)
{
#ifndef MMI_ON_WIN32
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
MYQUEUE queueNode;
/* MMIEQNVRAMREADRSP *readMessage; */
unsigned int my_index;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* MMI_TRACE((MMI_TRACE_G1_FRM, MMI_FRM_INFO_NVM_READ_REC_INT_HDLR, nFileId, nRecordId)); */
/* SendNVRAMReadReq(nFileId,nRecordId); */
OslReceiveMsgExtQ(mmi_ext_qid, &queueNode);
OslGetMyTaskIndex(&my_index);
OslStackSetActiveModuleID(my_index, MOD_MMI);
switch (queueNode.msg_id)
{
/* case PRT_INCOMINGCALL_EVENT:
ProtocolEventHandler((U16)queueNode.oslMsgId,(void*)queueNode.oslDataPtr,(int)queueNode.oslSrcId, (void*) queueNode.oslPeerBuffPtr );
return THEME_ERROR_INCOMING_CALL;
break; */
case MSG_ID_MMI_EQ_PLAY_AUDIO_RSP:
case MSG_ID_MMI_EQ_STOP_AUDIO_RSP:
case MSG_ID_MMI_EQ_EXE_GPIO_LEVEL_RSP:
case MSG_ID_MMI_EQ_SET_VOLUME_RSP:
OslFreeInterTaskMsg(&queueNode);
break;
case MSG_ID_MMI_EQ_KEYPAD_DETECT_IND:
{
if (mmi_bootup_is_searching_or_idle_reached() == MMI_FALSE)
{
KeyHandleBeforePWRON((void*)queueNode.oslDataPtr);
}
else
{
mmi_eq_keypad_detect_ind_struct *p;
p = (mmi_eq_keypad_detect_ind_struct*) queueNode.local_para_ptr;
g_keypad_flag = MMI_TRUE;
keypad_ptr = p->func;
}
OslFreeInterTaskMsg(&queueNode);
break;
}
case MSG_ID_MMI_EQ_GET_RTC_TIME_RSP:
{
if (mmi_bootup_is_searching_or_idle_reached() == MMI_FALSE)
{
ProtocolEventHandler(
(U16) queueNode.oslMsgId,
(void*)queueNode.oslDataPtr,
(int)queueNode.oslSrcId,
(void*)queueNode.oslPeerBuffPtr);
OslFreeInterTaskMsg(&queueNode);
break;
}
}
case MSG_ID_TIMER_EXPIRY:
{
/* if(!g_pwr_context.idleScreenFirst) */
{
kal_uint16 msg_len;
EvshedMMITimerHandler(get_local_para_ptr(queueNode.oslDataPtr, &msg_len));
break;
}
/* else
{
stack_timer_struct* stack_timer_ptr;
stack_timer_ptr = (stack_timer_struct*)queueNode.oslDataPtr;
if (!stack_is_time_out_valid(stack_timer_ptr))
{
PRINT_INFORMATION(("==========Time out is not valid=========="));
OslFreeInterTaskMsg(&queueNode);
break;
}
} */
}
default:
{
ilm_struct ilm_ptr;
U8 flag = 0;
ilm_ptr.src_mod_id = queueNode.src_mod_id;
ilm_ptr.dest_mod_id = queueNode.dest_mod_id;
ilm_ptr.msg_id = queueNode.msg_id;
ilm_ptr.sap_id = queueNode.sap_id;
ilm_ptr.local_para_ptr = queueNode.local_para_ptr;
ilm_ptr.peer_buff_ptr = queueNode.peer_buff_ptr;
flag = OslWriteCircularQ(&ilm_ptr);
/* TIMER use special data in the local_para_ptr field. Can NOT treat as general ILM */
if ((queueNode.src_mod_id != MOD_TIMER) && (flag == 1))
{
hold_local_para(ilm_ptr.local_para_ptr);
hold_peer_buff(ilm_ptr.peer_buff_ptr);
}
OslFreeInterTaskMsg(&queueNode);
break;
}
}
OslFreeInterTaskMsg(&queueNode);
return THEME_ERROR_PROCESS_QUEUE_SUCESS;
#endif /* MMI_ON_WIN32 */
return THEME_ERROR_PROCESS_QUEUE_SUCESS;
}
#endif /* __DLT_ENABLE_PROCESS_QUEUE__ */
/*****************************************************************************
* FUNCTION
* mmi_tm_handle_theme_activation_error_status
* DESCRIPTION
* This function handles error status at the time of theme activation
* PARAMETERS
* status [IN]
* RETURNS
* void
*****************************************************************************/
void mmi_tm_handle_theme_activation_error_status(U16 status)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
switch (status)
{
case THEME_ERROR_SUCCESS:
DisplayPopup(
(PU8) GetString(STR_THEME_ACTIVATE_SUCCESS),
IMG_GLOBAL_ACTIVATED,
0,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -