📄 dcw_pb_nv.c
字号:
}
}
/****************************************************************************
* Function name : DCW_PB_copyAllRecordsFromSimToNv
* Description : 把所有SIM卡记录拷贝到NV
* Param : offset 电话类型
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_copyAllRecordsFromSimToNv(uint8 offset)
{
uint16 i;
uint16 pos;
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.sim.usedRecord; i++)
{
SCI_MEMSET(&g_pb_nvRecord,0x00,sizeof(T_PB_NV_RECORD));
g_pb_nvRecord.outerName = g_pb.sim.recordPtr[i].outerName;
g_pb_nvRecord.innerName = g_pb.sim.recordPtr[i].innerName;
g_pb_nvRecord.shortName = g_pb.sim.recordPtr[i].shortName;
g_pb_nvRecord.num[offset] = g_pb.sim.recordPtr[i].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);
}
}
/* ***************************************************************************
* Function name : DCW_PB_insertOneRecordToNvList
* Description : 在NV记录列表上插入一个记录
* Param : record :添加的记录的地址
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_insertOneRecordToNvList(T_PB_NV_RECORD *recordPtr)
{
uint16 i;
T_PB_SEARCH_RETURN_INFO searchNvInfo;
T_PB_SEARCH_RETURN_INFO searchSimInfo;
DCW_PB_twoSplitSearch(0,g_pb.nv.usedRecord,&recordPtr->innerName,DCW_PB_compareNvRecord,&searchNvInfo);
DCW_PB_twoSplitSearch(0,g_pb.sim.usedRecord,&recordPtr->innerName,DCW_PB_compareSimRecord,&searchSimInfo);
recordPtr->keyEqualFront = FALSE;
if(searchNvInfo.equal == TRUE)
{
recordPtr->keyEqualFront = TRUE;
searchNvInfo.pos++;
while(searchNvInfo.pos < g_pb.nv.usedRecord)
{
if(g_pb.nv.recordPtr[searchNvInfo.pos].keyEqualFront == TRUE)
{
searchNvInfo.pos++;
}
else
{
break;
}
}
}
if(searchSimInfo.equal == TRUE)
{
searchSimInfo.pos++;
while(searchSimInfo.pos < g_pb.sim.usedRecord)
{
if(g_pb.sim.recordPtr[searchSimInfo.pos].keyEqualFront == TRUE)
{
searchSimInfo.pos++;
}
else
{
break;
}
}
}
if(searchSimInfo.pos != g_pb.sim.usedRecord && searchNvInfo.pos != g_pb.nv.usedRecord)
{
recordPtr->posInAll = MIN(g_pb.sim.recordPtr[searchSimInfo.pos].posInAll,
g_pb.nv.recordPtr[searchNvInfo.pos].posInAll);
}
else if(searchSimInfo.pos != g_pb.sim.usedRecord)
{
recordPtr->posInAll = g_pb.sim.recordPtr[searchSimInfo.pos].posInAll;
}
else if(searchNvInfo.pos != g_pb.nv.usedRecord)
{
recordPtr->posInAll = g_pb.nv.recordPtr[searchNvInfo.pos].posInAll;
}
else
{
if(searchSimInfo.pos == 0 && searchNvInfo.pos == 0)
{
recordPtr->posInAll = 0;
}
else if(searchSimInfo.pos == 0)
{
recordPtr->posInAll = g_pb.nv.recordPtr[searchNvInfo.pos - 1].posInAll + 1;
}
else if(searchNvInfo.pos == 0)
{
recordPtr->posInAll = g_pb.sim.recordPtr[searchSimInfo.pos - 1].posInAll + 1;
}
else
{
recordPtr->posInAll = MAX(g_pb.sim.recordPtr[searchSimInfo.pos - 1].posInAll,
g_pb.nv.recordPtr[searchNvInfo.pos - 1].posInAll) + 1;
}
}
/* 修改已存在列表记录的总排序号 */
for(i = searchNvInfo.pos; i < g_pb.nv.usedRecord; i++)
{
g_pb.nv.recordPtr[i].posInAll++;
}
for(i = searchSimInfo.pos; i < g_pb.sim.usedRecord;i++)
{
g_pb.sim.recordPtr[i].posInAll++;
}
/* 插入 */
for(i = g_pb.nv.usedRecord; i > searchNvInfo.pos; i--)
{
SCI_MEMCPY(&g_pb.nv.recordPtr[i],&g_pb.nv.recordPtr[i - 1],sizeof(T_PB_NV_RECORD));
}
SCI_MEMCPY(&g_pb.nv.recordPtr[searchNvInfo.pos],recordPtr,sizeof(T_PB_NV_RECORD));
g_pb.nv.usedRecord++;
}
/* ***************************************************************************
* Function name : DCW_PB_ModifyOneRecordInNvList
* Description : 修改NV记录列表上的一个记录
* Param : orgPos :修改前记录在列表上的位置
record :修改的记录
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_ModifyOneRecordInNvList(uint16 orgPos,T_PB_NV_RECORD *recordPtr)
{
uint16 i;
uint16 orgNvPos;
uint16 orgSimPos;
T_PB_SEARCH_RETURN_INFO searchNvInfo;
T_PB_SEARCH_RETURN_INFO searchSimInfo;
orgNvPos = orgPos;
for(i = 0; i < g_pb.sim.usedRecord;i++)
{
if(g_pb.sim.recordPtr[i].posInAll >= g_pb.nv.recordPtr[orgNvPos].posInAll)
{
break;
}
}
orgSimPos = i;
DCW_PB_twoSplitSearch(0,g_pb.nv.usedRecord,&recordPtr->innerName,DCW_PB_compareNvRecord,&searchNvInfo);
DCW_PB_twoSplitSearch(0,g_pb.sim.usedRecord,&recordPtr->innerName,DCW_PB_compareSimRecord,&searchSimInfo);
recordPtr->keyEqualFront = FALSE;
if(searchNvInfo.equal == TRUE)
{
recordPtr->keyEqualFront = TRUE;
searchNvInfo.pos++;
while(searchNvInfo.pos < g_pb.nv.usedRecord)
{
if(g_pb.nv.recordPtr[searchNvInfo.pos].keyEqualFront == TRUE)
{
searchNvInfo.pos++;
}
else
{
break;
}
}
}
if(searchSimInfo.equal == TRUE)
{
searchSimInfo.pos++;
while(searchSimInfo.pos < g_pb.sim.usedRecord)
{
if(g_pb.sim.recordPtr[searchSimInfo.pos].keyEqualFront == TRUE)
{
searchSimInfo.pos++;
}
else
{
break;
}
}
}
if(searchSimInfo.pos > 0 && searchNvInfo.pos > 0)
{
recordPtr->posInAll = MAX(g_pb.sim.recordPtr[searchSimInfo.pos - 1].posInAll,g_pb.nv.recordPtr[searchNvInfo.pos - 1].posInAll) + 1;
}
else if(searchSimInfo.pos == 0 && searchNvInfo.pos == 0)
{
recordPtr->posInAll = 0;
}
else
{
if(searchSimInfo.pos == 0)
{
if(g_pb.sim.usedRecord == 0)
{
recordPtr->posInAll = g_pb.nv.recordPtr[searchNvInfo.pos].posInAll - 1;
}
else
{
recordPtr->posInAll = MIN(g_pb.sim.recordPtr[searchSimInfo.pos].posInAll,g_pb.nv.recordPtr[searchNvInfo.pos].posInAll) - 1;
}
}
else
{
if(g_pb.nv.usedRecord == 0)
{
recordPtr->posInAll = g_pb.sim.recordPtr[searchSimInfo.pos].posInAll - 1;
}
else
{
recordPtr->posInAll = MIN(g_pb.sim.recordPtr[searchSimInfo.pos].posInAll,g_pb.nv.recordPtr[searchNvInfo.pos].posInAll) - 1;
}
}
}
if(orgNvPos < searchNvInfo.pos)
{
searchNvInfo.pos--;
for(i = orgNvPos; i < searchNvInfo.pos; i++)
{
g_pb.nv.recordPtr[i] = g_pb.nv.recordPtr[i + 1];
g_pb.nv.recordPtr[i].posInAll--;
}
g_pb.nv.recordPtr[searchNvInfo.pos] = *recordPtr;
}
else if(orgNvPos > searchNvInfo.pos)
{
for(i = orgNvPos; i > searchNvInfo.pos;i--)
{
g_pb.nv.recordPtr[i] = g_pb.nv.recordPtr[i - 1];
g_pb.nv.recordPtr[i].posInAll++;
}
g_pb.nv.recordPtr[searchNvInfo.pos] = *recordPtr;
}
else
{ /* 更改前后位值不变 */
g_pb.nv.recordPtr[searchNvInfo.pos] = *recordPtr;
}
if(orgSimPos < searchSimInfo.pos)
{
for(i = orgSimPos; i < searchSimInfo.pos; i++)
{
g_pb.sim.recordPtr[i].posInAll--;
}
}
else if(orgSimPos > searchSimInfo.pos)
{
for(i = searchSimInfo.pos; i < orgSimPos; i++)
{
g_pb.sim.recordPtr[i].posInAll++;
}
}
else
{
/* 更改前后位值不变 */
}
}
/* ***************************************************************************
* Function name : DCW_PB_nvRecordIsValid
* Description : 一条NV记录是否有效
* Param : record :记录
* Return : 是否有效
* Author: : *************
* Note : None
*****************************************************************************/
BOOLEAN DCW_PB_nvRecordIsValid(T_PB_NV_RECORD * recordPtr,uint16 *inValidFlagPtr)
{
int i = 0;
if(recordPtr->outerName.len == 0)
{
*inValidFlagPtr = PB_RECORD_NO_NAME;
return FALSE;
}
for(i = 0; i < DCW_PB_MAX_NV_PHONE_NUM; i++)
{
if(recordPtr->num[i].len != 0)
{
return TRUE;
}
}
if(recordPtr->mail.len == 0)
{
*inValidFlagPtr = PB_RECORD_NO_PHONE_OR_MAIL;
return FALSE;
}
return TRUE;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -