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

📄 dcw_pb_initialize.c

📁 重写的展迅电话本, 重写的展迅电话本, 重写的展迅电话本,
💻 C
字号:

/*****************************************************************************
** File Name:      dcw_pb_initialize.c                                       *
** Author:         *************                                             *
** Date:           2006-04-06                                                *
** Copyright:      2006 ************* All Rights                             *
** Description:    此文件包括 PB 的所用共用函数                              *
/*****************************************************************************
**                         Important Edit History                            *
** --------------------------------------------------------------------------*
** DATE                 NAME             DESCRIPTION                         *
** 2006-04-06           *************    Create                              *
******************************************************************************/

#ifndef _DCW_PB_INITIALIZE_C_
#define _DCW_PB_INITIALIZE_C_

#include "dcw_pb.h"

/****************************************************************************
 *  Function name : DCW_PB_InitGlobeValiable
 *  Description   : 初始化 PB 的所有全局变量     
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_InitGlobeValiable(void)
{
    /* 初始化全局变量 */
    SCI_MEMSET(&g_pb,               0, sizeof(T_PB_INFO));   
    SCI_MEMSET(&g_pb_simRecord,     0, sizeof(T_PB_SIM_RECORD));
    SCI_MEMSET(&g_pb_nvRecord,      0, sizeof(T_PB_NV_RECORD));
    SCI_MEMSET(&g_pb_numberItem,    0, sizeof(T_PB_SEARCH_NUMBER_ITEM));
    SCI_MEMSET(&g_pb_bcdNum,        0, sizeof(T_PB_BCD_NUMBER));
    SCI_MEMSET(&g_pb_recordItemAddr,0, sizeof(T_PB_RECORD_ITEM_ADDR));
    SCI_MEMSET(&g_pb_editRect,      0, sizeof(GUI_RECT_T));
    SCI_MEMSET(&g_pb_text,          0, sizeof(COMMON_MMI_TEXT_ID_E));
}
/****************************************************************************
 *  Function name : DCW_PB_AskReadDataFromNv
 *  Description   : 发送消息,请求从Nv读取数据
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_AskReadDataFromNv(void)
{
    T_PB_SIG_INIT_FLASH_REQ  *reqPtr = PNULL;

	MMI_CREATE_SIGNAL(reqPtr, PB_SIG_INIT_FLASH_REQ_E, sizeof(T_PB_SIG_INIT_FLASH_REQ), P_APP);

    MMI_SEND_SIGNAL(reqPtr, DCW_PB_APPINIT);
}
/****************************************************************************
 *  Function name : DCW_PB_AskReadDataFromSimCard
 *  Description   : 发送消息,请求从SIM 卡读取数据
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_AskReadDataFromSimCard(void)
{
    T_PB_SIG_INIT_SIM_REQ  *reqPtr = PNULL;

	MMI_CREATE_SIGNAL(reqPtr, PB_SIG_INIT_SIM_REQ_E,  sizeof(T_PB_SIG_INIT_SIM_REQ), P_APP);

    MMI_SEND_SIGNAL(reqPtr, DCW_PB_APPINIT);
}
/****************************************************************************
 *  Function name : DCW_PB_ReadSimCardRecordsInfo
 *  Description   : 此函数用于从sim里读取记录     
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_ReadSimCardRecordsInfo(void)
{
    uint32              i;   
    uint32              size;
    BOOLEAN             ret;
    PHONEBOOK_INFO_T    sim;

    /* 读取SIM卡本地号码信息 */
    sim = PHONEBOOK_GetFileInfo(PHONEBOOK_MSISDN_STORAGE);

    g_pb.sim_localName.valid        = (BOOLEAN)(sim.is_phonebook_exist && sim.is_user_need);
    g_pb.sim_localName.initialize   = FALSE;
    g_pb.sim_localName.nameMaxLen   = (uint8)MIN(sim.max_alpha_len, DCW_PB_NAME_MAX_LEN);
    g_pb.sim_localName.numberMaxLen = (uint8)MIN(sim.max_normal_num_len * 2, DCW_PB_NUMBER_MAX_LEN);
    g_pb.sim_localName.maxRecord    = MIN(sim.max_record_num,DCW_PB_LOCAL_NAME_NUM); 
    g_pb.sim_localName.usedRecord   = 0;

    /* 读取SIM卡纪录信息 */
    sim = PHONEBOOK_GetFileInfo(PHONEBOOK_SIM_STORAGE);

    g_pb.sim.valid              = (BOOLEAN)(sim.is_phonebook_exist && sim.is_user_need);
    g_pb.sim.initialize         = FALSE;
    g_pb.sim.nameMaxLen         = (uint8)MIN(sim.max_alpha_len, DCW_PB_NAME_MAX_LEN);
    g_pb.sim.numberMaxLen       = (uint8)MIN(sim.max_normal_num_len * 2, DCW_PB_NUMBER_MAX_LEN);
    g_pb.sim.maxRecord          = sim.max_record_num; 
    g_pb.sim.usedRecord         = 0;

    if(g_pb.sim.valid == FALSE)
    {
        /* SIM卡无效 */
        return;
    }

    /* 申请sim卡的记录列表空间 */
    size = sizeof(T_PB_SIM_RECORD) * g_pb.sim.maxRecord;
    g_pb.sim.recordPtr = (T_PB_SIM_RECORD *)SCI_ALLOC(size);
    SCI_ASSERT(g_pb.sim.recordPtr != PNULL);
    SCI_MEMSET(g_pb.sim.recordPtr, 0, size);

    /* 申请sim卡的id编号信息空间 */
    size = (g_pb.sim.maxRecord + 7)/8;
    g_pb.sim.idManager.idPtr = (uint8 *)SCI_ALLOC(size);
    SCI_ASSERT(g_pb.sim.idManager.idPtr != PNULL);
    SCI_MEMSET(g_pb.sim.idManager.idPtr , 0, size);
    g_pb.sim.idManager.amount = g_pb.sim.maxRecord;

    /* 循环读取sim卡记录 */
    for(i = 0; i < g_pb.sim.maxRecord; i++)
    {   /* 从sim卡的第i个记录地址读入信息 */
        ret = DCW_PB_ReadOneRecordFromSim(&g_pb_simRecord, i,PHONEBOOK_SIM_STORAGE);        

        if(ret == TRUE)
        {
            /* 生成拼音编码,用于排序 */
            DCW_PB_usc2ToSpell(&g_pb_simRecord.outerName, &g_pb_simRecord.innerName);
            /* 生成拼音首字母编码,用于快速排序 */
            DCW_PB_spellToShortSpell(&g_pb_simRecord.innerName, &g_pb_simRecord.shortName); 
             /* 设置编号使用的信息 */
            DCW_PB_insertOneRecordToSimList(&g_pb_simRecord);
            /* 设置id */
            DCW_PB_setIdValue(&g_pb.sim.idManager,g_pb_simRecord.id,1);
        }
    }
}
/****************************************************************************
 *  Function name : DCW_PB_ReadGroupsInfo
 *  Description   : 从 Nv 里读取组信息
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_ReadGroupsInfo(void)
{
    uint8               i;   
    uint8               groupId;
    uint16              pos;
    MN_RETURN_RESULT_E  ret;
    MMI_STRING_T        strPtr;
    T_PB_M_STRING       groupInitInfo;

    SCI_MEMSET(&groupInitInfo,0x00,sizeof(T_PB_S_STRING));

    /* 有 DCW_PB_MIN_GROUP_NUM 个固定分组 */
    g_pb.group.amount = DCW_PB_MIN_GROUP_NUM;    

    for(i = 0; i < DCW_PB_MIN_GROUP_NUM; i++)
    {
        g_pb.group.index[i] = i;
    }

    /* 从Nv里读取用户自定义组的信息*/
    for (i = 0; i < DCW_PB_USER_GROUP_NUM; i++)
    {
        groupId = (uint8)(i + DCW_PB_MIN_GROUP_NUM);

        pos = (uint16)(MMINV_PHONEBOOK_GROUP_0 + i);

        if(MNNV_ReadItem(pos, sizeof(T_PB_M_STRING), &(g_pb.group.groupName[groupId])) == MN_RETURN_SUCCESS)
        {
            if(g_pb.group.groupName[groupId].len != 0)
            {                
                g_pb.group.index[g_pb.group.amount] = groupId;
                g_pb.group.amount++;
            }                     
        }
        else
        {  
            MNNV_WriteItem(pos,sizeof(T_PB_M_STRING),&groupInitInfo);
            g_pb.group.groupName[groupId].len = 0; 
        }
    }
}
/****************************************************************************
 *  Function name : DCW_PB_ReadNvRecordsInfo
 *  Description   : 此函数用于从nv里读取记录     
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_ReadNvRecordsInfo(void)
{
    uint32   i;
    uint32   j;
    uint32   size; 
    BOOLEAN  ret;

    /* nv赋值 */
    g_pb.nv.valid           = TRUE;
    g_pb.nv.initialize      = FALSE;
    g_pb.nv.nameMaxLen      = DCW_PB_NAME_MAX_LEN;
    g_pb.nv.numberMaxLen    = DCW_PB_NUMBER_MAX_LEN;
    g_pb.nv.maxRecord       = DCW_PB_NV_MAX_RECORDS; 
    g_pb.nv.usedRecord      = 0;

    /* 申请nv的记录列表空间 */
    size = sizeof(T_PB_NV_RECORD) * g_pb.nv.maxRecord;
    g_pb.nv.recordPtr = (T_PB_NV_RECORD *)SCI_ALLOC(size);
    SCI_ASSERT(g_pb.nv.recordPtr != PNULL);
    SCI_MEMSET(g_pb.nv.recordPtr, 0, size);

    /* 申请nv的id编号信息空间 */
    size = (g_pb.nv.maxRecord + 7)/8;
    g_pb.nv.idManager.idPtr = (uint8 *)SCI_ALLOC(size);
    SCI_ASSERT(g_pb.nv.idManager.idPtr != PNULL);
    SCI_MEMSET(g_pb.nv.idManager.idPtr, 0, size);
    g_pb.nv.idManager.amount = g_pb.nv.maxRecord;

    /* 循环读取nv记录 */
    for(i = 0; i < g_pb.nv.maxRecord; i++)
    {   /* 从nv的第i个记录地址读入信息 */
        ret = DCW_PB_ReadOneRecordFromNv(&g_pb_nvRecord, i);        

        if(ret == TRUE)
        {  /* 从nv的第i个记录地址读入信息有效 */
           
           /* 生成拼音编码,用于排序 */
           DCW_PB_usc2ToSpell(&g_pb_nvRecord.outerName, &g_pb_nvRecord.innerName);
           /* 生成拼音首字母编码,用于快速排序 */
           DCW_PB_spellToShortSpell(&g_pb_nvRecord.innerName, &g_pb_nvRecord.shortName); 
           /* 设置编号使用的信息 */
           DCW_PB_insertOneRecordToNvList(&g_pb_nvRecord);
           /* 设置id */           
           DCW_PB_setIdValue(&g_pb.nv.idManager,g_pb_nvRecord.id,1);
        }
    }    
}
/****************************************************************************
 *  Function name : DCW_PB_createNumberList
 *  Description   : 创建电话号码排序列表     
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : 在此排序过程中,nv记录链表及sim卡记录链表的位置不变,只是链
                    上记录的总排序号发生变化.
                    相同的关键字,用相同的排序号. 
 *****************************************************************************/
void DCW_PB_createNumberList(void)
{
    uint16  i = 0; 
    uint16  nvPos  = 0;
    uint16  simPos = 0;
    uint32  size;

    g_pb.numSearchList.count = 0;
    g_pb.numSearchList.maxAmount = g_pb.nv.maxRecord * DCW_PB_MAX_NV_PHONE_NUM + g_pb.sim.maxRecord;

    /* 申请电话号码列表的空间 */
    size = sizeof(T_PB_SEARCH_NUMBER_ITEM) * g_pb.numSearchList.maxAmount;
    g_pb.numSearchList.ptr = (T_PB_SEARCH_NUMBER_ITEM *)SCI_ALLOC(size);
    SCI_ASSERT(g_pb.numSearchList.ptr != PNULL);
    SCI_MEMSET(g_pb.numSearchList.ptr, 0, size);

    while(simPos < g_pb.sim.usedRecord && nvPos < g_pb.nv.usedRecord)
    {
        if(g_pb.sim.recordPtr[simPos].posInAll <= g_pb.nv.recordPtr[nvPos].posInAll)
        {                   
            DCW_PB_adjustNumList((void *)&g_pb.sim.recordPtr[simPos],PNULL,PHONEBOOK_SIM_STORAGE,PB_ADD_E);
            simPos++;
        }
        else
        {
            DCW_PB_adjustNumList((void *)&g_pb.nv.recordPtr[nvPos],PNULL,PHONEBOOK_NV_STORAGE,PB_ADD_E);
            nvPos++;
        }
    }

    while(simPos < g_pb.sim.usedRecord)
    {
        DCW_PB_adjustNumList((void *)&g_pb.sim.recordPtr[simPos],PNULL,PHONEBOOK_SIM_STORAGE,PB_ADD_E);
        simPos++;
    }

    while(nvPos < g_pb.nv.usedRecord)
    {
        DCW_PB_adjustNumList((void *)&g_pb.nv.recordPtr[nvPos],PNULL,PHONEBOOK_NV_STORAGE,PB_ADD_E);
        nvPos++;
    }
}
/****************************************************************************
 *  Function name : DCW_PB_initialFinish
 *  Description   : PB的初始化完成
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_initialFinish(void)
{
    g_pb.nv.initialize  = TRUE;
    g_pb.sim.initialize = TRUE;
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -