📄 dcw_pb_nv.c
字号:
/*****************************************************************************
** 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 + -