⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thememanager.c

📁 MTK手机平台的MMI部分的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
            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 + -