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

📄 dcw_pb_nv.c

📁 重写的展迅电话本, 重写的展迅电话本, 重写的展迅电话本,
💻 C
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
** File Name:      dcw_pb_nv.c                                               *
** Author:         *************                                             *
** Date:           2006-04-05                                                *
** Copyright:      2006 ************* All Rights                             *
** Description:    此文件包含与nv有关的操作                                  *
/*****************************************************************************
**                         Important Edit History                            *
** --------------------------------------------------------------------------*
** DATE                 NAME             DESCRIPTION                         *
** 2006-04-05           *************     Create                             *
******************************************************************************/

#ifndef _DCW_PB_NV_C_
#define _DCW_PB_NV_C_

#include "dcw_pb.h"

/*****************************************************  ***********************
 *  Function name : DCW_PB_ReadOneRecordFromNv
 *  Description   : 从nv的第 "id" 个记录地址读出一条记录,放入 "record"
 *  Param         : record:读出的记录存放的地址
 *                  id  :从nv的哪个记录地址读出数据
 *  Return        : 读出的数据是否有效
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
BOOLEAN DCW_PB_ReadOneRecordFromNv(T_PB_NV_RECORD *recordPtr , uint16 id)
{
    uint16                  i;
    uint16                  pos;
    BOOLEAN                 ret = FALSE;
    T_PB_NV_SAVE_RECORD     saveRecord;
    T_PB_L_STRING           stringInfo;
    PHONEBOOK_ALPHABET_TYPE_E type;
    BOOLEAN                 flag;
   
    SCI_MEMSET(recordPtr,0x00,sizeof(T_PB_NV_RECORD));   

    /* 读取的位置 */
    pos = (uint16)(MMINV_PHONEBOOK_MAIN_FIRST_ENTRY + id);

    /* 读取 */
    if(MNNV_ReadItem(pos, sizeof(T_PB_NV_SAVE_RECORD), &saveRecord) == MN_RETURN_SUCCESS)
    {
        ret = TRUE;
    }
    else
    {   
        SCI_MEMSET(&saveRecord,0x00,sizeof(T_PB_NV_SAVE_RECORD));
        MNNV_WriteItem(pos,sizeof(T_PB_NV_SAVE_RECORD),&saveRecord);
        ret = FALSE;
    }
     
    /* 读出的记录是否有效 */
    if(saveRecord.valid == FALSE)
    {
        ret = FALSE;
    }
    else if(saveRecord.mail.len == 0)
    { /* 3个号码和一个邮件地址至少有一个不为空 */
        flag = FALSE;
        for(i = 0; i < DCW_PB_MAX_NV_PHONE_NUM; i++)
        {
            if(saveRecord.num[i].len !=0)
            {
                flag = TRUE;
            }
        }

        if(flag == FALSE)
        {
            ret = FALSE;
        }
    }
    else
    {
    }  

    if(ret == TRUE)
    {
        for(i = 0; i < g_pb.group.amount;i++)
        {
            if(g_pb.group.index[i] == saveRecord.groupId)
            {
                break;
            }
        }
        
        if(i == g_pb.group.amount)
        {
            recordPtr->groupId = 0;
        }
        else
        {
            recordPtr->groupId = saveRecord.groupId;
        }


        recordPtr->id    = id;
        for(i = 0; i < DCW_PB_MAX_NV_PHONE_NUM; i++)
        {
            recordPtr->num[i] = saveRecord.num[i];
        } 
      
        recordPtr->outerName = saveRecord.name;
        recordPtr->mail = saveRecord.mail;
    }

    return ret;
}

/****************************************************************************
 *  Function name : DCW_PB_WriteOneRecordToNv
 *  Description   : 向NV中写入一条记录
 *  Param         : record:写入记录存放的地址
 *                  isAdd :是否增加
 *  Return        : None
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_WriteOneRecordToNv(T_PB_NV_RECORD *recordPtr,BOOLEAN isAdd)
{
    uint16                    i = 0;
    uint16                    emptyId;
    uint16                    pos;
    PHONEBOOK_ALPHABET_TYPE_E type;
    T_PB_NV_SAVE_RECORD       saveRecord;
    T_PB_L_STRING             stringInfo;  

    SCI_ASSERT(recordPtr != PNULL);
    SCI_MEMSET(&saveRecord, 0x00, sizeof(T_PB_NV_SAVE_RECORD));    

    saveRecord.name = recordPtr->outerName;

    
    for(i = 0; i < DCW_PB_MAX_NV_PHONE_NUM; i++)
    {
        saveRecord.num[i].len = MIN(DCW_PB_BCD_NUMBER_MAX_LEN,recordPtr->num[i].len);
        saveRecord.num[i].npi_ton = recordPtr->num[i].npi_ton;
        SCI_MEMCPY(saveRecord.num[i].number,recordPtr->num[i].number,saveRecord.num[i].len);
    }

    saveRecord.mail = recordPtr->mail;

    if(isAdd == TRUE)
    {
        emptyId = DCW_PB_getEmptyId(&g_pb.nv.idManager);
        SCI_ASSERT(emptyId != DCW_PB_16_INVALID);
        pos = MMINV_PHONEBOOK_MAIN_FIRST_ENTRY + emptyId;
        recordPtr->id = emptyId;
        DCW_PB_setIdValue(&g_pb.nv.idManager,emptyId,1);
    }
    else
    {
        pos = MMINV_PHONEBOOK_MAIN_FIRST_ENTRY + recordPtr->id;
    }

    saveRecord.groupId = recordPtr->groupId;
    saveRecord.valid   = TRUE;

    if(MNNV_WriteItem(pos,sizeof(T_PB_NV_SAVE_RECORD),&saveRecord) == MN_RETURN_SUCCESS)
    {
        /*******************Trace************/
    }
    else
    {
        /*******************Trace************/
    }
}

/****************************************************************************
 *  Function name : DCW_PB_deleteOneRecordFromNv
 *  Description   : 从NV中删除一条记录
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_deleteOneRecordFromNv(uint16 pos)
{
    uint16              i;
    uint16              index;
    uint16              nvId;
    T_PB_NV_SAVE_RECORD saveRecord;
    uint16              curPosInAll;

    saveRecord.valid = FALSE;    
    nvId = MMINV_PHONEBOOK_MAIN_FIRST_ENTRY + g_pb.nv.recordPtr[pos].id;
    curPosInAll = g_pb.nv.recordPtr[pos].posInAll;

    DCW_PB_adjustNumList(PNULL,(void *)&g_pb.nv.recordPtr[pos],PHONEBOOK_NV_STORAGE,PB_DELETE_E);
    
    if((pos + 1)< g_pb.nv.usedRecord)
    {
        if(g_pb.nv.recordPtr[pos].keyEqualFront == FALSE &&
           g_pb.nv.recordPtr[pos + 1].keyEqualFront == TRUE)
        {
            g_pb.nv.recordPtr[pos + 1].keyEqualFront = FALSE;
        }
    }

    for(i = pos; i < g_pb.nv.usedRecord; i++)
    {
        g_pb.nv.recordPtr[i] = g_pb.nv.recordPtr[i + 1];
        g_pb.nv.recordPtr[i].posInAll--;
    }
    g_pb.nv.usedRecord--;    

    for(i = 0; i < g_pb.sim.usedRecord; i++)
    {
        if(g_pb.sim.recordPtr[i].posInAll > curPosInAll)
        {
            g_pb.sim.recordPtr[i].posInAll--;
        }
    }

    DCW_PB_setIdValue(&g_pb.nv.idManager,g_pb.nv.recordPtr[pos].id,0);

    if(MNNV_WriteItem(nvId,sizeof(T_PB_NV_SAVE_RECORD),&saveRecord) == MN_RETURN_SUCCESS)
    {
        /*******************Trace************/
    }
    else
    {
        /*******************Trace************/
    }    

}

/****************************************************************************
 *  Function name : DCW_PB_deleteAllRecordFromNv
 *  Description   : 删除NV中的所有记录
 *  Param         : void
 *  Return        : None
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_deleteAllRecordFromNv(void)
{
    uint16              i;
    uint32              size;
    T_PB_NV_SAVE_RECORD saveRecord;
    int16               nvId;    

    SCI_MEMSET(&saveRecord,0x00,sizeof(T_PB_NV_SAVE_RECORD));
    saveRecord.valid = FALSE;

    for(i = 0; i < g_pb.nv.usedRecord;i++)
    {   
        DCW_PB_adjustNumList(PNULL,(void *)&g_pb.nv.recordPtr[i],PHONEBOOK_NV_STORAGE,PB_DELETE_E);
        nvId = MMINV_PHONEBOOK_MAIN_FIRST_ENTRY + g_pb.nv.recordPtr[i].id;
        MNNV_WriteItem(nvId, sizeof(T_PB_NV_SAVE_RECORD), &saveRecord);       
    }

    g_pb.nv.usedRecord = 0;
    size = (g_pb.nv.maxRecord + 7)/8;
    SCI_MEMSET(g_pb.nv.idManager.idPtr,0x00,size);
    g_pb.nv.idManager.count = 0;

    /* 改变sim卡总派序号 */

    for(i = 0; i < g_pb.sim.usedRecord;i++)
    {
        g_pb.sim.recordPtr[i].posInAll = i;
    }
}

/****************************************************************************
 *  Function name : DCW_PB_copyOneRecordFromSimToNv
 *  Description   : 把一条SIM卡记录拷贝到NV
 *  Param         : offset    电话类型
 *  Return        : None
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_copyOneRecordFromSimToNv(uint8 offset)
{
    uint16                pos;
    T_PB_RECORD_ITEM_ADDR *pAddr;
    T_PB_SIM_RECORD       *simRecordPtr;

    SCI_MEMSET(&g_pb_nvRecord,0x00,sizeof(T_PB_NV_RECORD));

    pAddr = DCW_PB_getRecordAddr(g_pb.operate.listInfo.selectItemPtr[0]);
    SCI_ASSERT(pAddr != PNULL);
    pos = pAddr->pos;

    simRecordPtr = &g_pb.sim.recordPtr[pos];

    g_pb_nvRecord.outerName = simRecordPtr->outerName;
    g_pb_nvRecord.innerName = simRecordPtr->innerName;
    g_pb_nvRecord.shortName = simRecordPtr->shortName;
    g_pb_nvRecord.num[offset] = simRecordPtr->num;

    DCW_PB_WriteOneRecordToNv(&g_pb_nvRecord,TRUE);
    DCW_PB_insertOneRecordToNvList(&g_pb_nvRecord);
    DCW_PB_adjustNumList((void *)&g_pb_nvRecord,PNULL,PHONEBOOK_NV_STORAGE,PB_ADD_E); 
}

void DCW_PB_copyManyRecordsFromSimToNv(uint8 offset)
{
    uint16              i; 
    uint16              pos;
    T_PB_RECORD_ITEM_ADDR *pAddr;

    SCI_ASSERT(offset < DCW_PB_MAX_NV_PHONE_NUM);

    SCI_TRACE_LOW("\r\n--DCW_PB_copyAllRecordsFromSimToNv----Sim num = %d", g_pb.sim.usedRecord);

    for(i = 0; i < g_pb.operate.listInfo.selectNumber;i++)
    {
        SCI_MEMSET(&g_pb_nvRecord,0x00,sizeof(T_PB_NV_RECORD));

        pAddr = DCW_PB_getRecordAddr(g_pb.operate.listInfo.selectItemPtr[i]);

        g_pb_nvRecord.outerName = g_pb.sim.recordPtr[pAddr->pos].outerName;
        g_pb_nvRecord.innerName = g_pb.sim.recordPtr[pAddr->pos].innerName;
        g_pb_nvRecord.shortName = g_pb.sim.recordPtr[pAddr->pos].shortName;
        g_pb_nvRecord.num[offset] = g_pb.sim.recordPtr[pAddr->pos].num;
        DCW_PB_WriteOneRecordToNv(&g_pb_nvRecord,TRUE);
        DCW_PB_insertOneRecordToNvList(&g_pb_nvRecord);
        DCW_PB_adjustNumList((void *)&g_pb_nvRecord,PNULL,PHONEBOOK_NV_STORAGE,PB_ADD_E); 

⌨️ 快捷键说明

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