📄 dcw_pb_sim.c
字号:
i = pos;
j = offset;
while(j < DCW_PB_MAX_NV_PHONE_NUM)
{
if(g_pb.nv.recordPtr[i].num[j].len > 0)
{
SCI_MEMSET(&g_pb_simRecord,0x00,sizeof(T_PB_SIM_RECORD));
g_pb_simRecord.outerName = g_pb.nv.recordPtr[i].outerName;
g_pb_simRecord.innerName = g_pb.nv.recordPtr[i].innerName;
g_pb_simRecord.shortName = g_pb.nv.recordPtr[i].shortName;
g_pb_simRecord.num = g_pb.nv.recordPtr[i].num[j];
g_pb_operate_pos = i;
g_pb_operate_offset = j;
ret = DCW_PB_WriteOneRecordToSim(&g_pb_simRecord,TRUE);
if(ret == TRUE)
{
DCW_PB_adjustNumList((void *)&g_pb_simRecord,PNULL,PHONEBOOK_SIM_STORAGE,PB_ADD_E);
DCW_PB_insertOneRecordToSimList(&g_pb_simRecord);
}
return ret;
}
j++;
}
for(i = pos + 1; i < g_pb.nv.usedRecord; i++)
{
for(j = 0; j < DCW_PB_MAX_NV_PHONE_NUM;j++)
{
if(g_pb.nv.recordPtr[i].num[j].len > 0)
{
SCI_MEMSET(&g_pb_simRecord,0x00,sizeof(T_PB_SIM_RECORD));
g_pb_simRecord.outerName = g_pb.nv.recordPtr[i].outerName;
g_pb_simRecord.innerName = g_pb.nv.recordPtr[i].innerName;
g_pb_simRecord.shortName = g_pb.nv.recordPtr[i].shortName;
g_pb_simRecord.num = g_pb.nv.recordPtr[i].num[j];
g_pb_operate_pos = i;
g_pb_operate_offset = j;
ret = DCW_PB_WriteOneRecordToSim(&g_pb_simRecord,TRUE);
if(ret == TRUE)
{
DCW_PB_adjustNumList((void *)&g_pb_simRecord,PNULL,PHONEBOOK_SIM_STORAGE,PB_ADD_E);
DCW_PB_insertOneRecordToSimList(&g_pb_simRecord);
}
return ret;
}
}
}
return FALSE;
}
/* ***************************************************************************
* Function name : DCW_PB_insertOneRecordToSimList
* Description : 在Sim卡记录列表上插入一个记录
* Param : record :添加的记录的地址
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_insertOneRecordToSimList(T_PB_SIM_RECORD *recordPtr)
{
uint16 i;
uint16 insertPos;
int8 cmpRet;
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)
{ /* 找nv中,找相等记录的头 */
while(searchNvInfo.pos > 0)
{
if(g_pb.nv.recordPtr[searchNvInfo.pos].keyEqualFront == TRUE)
{
searchNvInfo.pos--;
}
else
{
break;
}
}
}
if(searchSimInfo.equal == TRUE)
{ /* 找sim中,找相等记录的头 */
while(searchSimInfo.pos > 0)
{
if(g_pb.sim.recordPtr[searchSimInfo.pos].keyEqualFront == TRUE)
{
searchSimInfo.pos--;
}
else
{
break;
}
}
g_pb.sim.recordPtr[searchSimInfo.pos].keyEqualFront = TRUE;
}
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.sim.usedRecord; i > searchSimInfo.pos; i--)
{
SCI_MEMCPY(&g_pb.sim.recordPtr[i],&g_pb.sim.recordPtr[i-1],sizeof(T_PB_SIM_RECORD));
}
SCI_MEMCPY(&g_pb.sim.recordPtr[searchSimInfo.pos],recordPtr,sizeof(T_PB_SIM_RECORD));
g_pb.sim.usedRecord++;
}
/* ***************************************************************************
* Function name : DCW_PB_ModifyOneRecordInSimList
* Description : 修改Sim卡记录列表上的一个记录
* Param : orgPos :修改前记录在列表上的位置
record :修改的记录
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_ModifyOneRecordInSimList(uint16 orgPos,T_PB_SIM_RECORD *recordPtr)
{
uint16 i;
uint16 orgNvPos;
uint16 orgSimPos;
T_PB_SEARCH_RETURN_INFO searchNvInfo;
T_PB_SEARCH_RETURN_INFO searchSimInfo;
orgSimPos = orgPos;
for(i = 0; i < g_pb.nv.usedRecord;i++)
{
if(g_pb.nv.recordPtr[i].posInAll >= g_pb.sim.recordPtr[orgSimPos].posInAll)
{
break;
}
}
orgNvPos = 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);
/* 修改后的Sim卡记录放在所有相同关键字的记录最前面*/
recordPtr->keyEqualFront = FALSE;
if(searchNvInfo.equal == TRUE)
{
while(searchNvInfo.pos > 0)
{
if(g_pb.nv.recordPtr[searchNvInfo.pos].keyEqualFront == TRUE)
{
searchNvInfo.pos--;
}
else
{
break;
}
}
}
if(searchSimInfo.equal == TRUE)
{
while(searchSimInfo.pos > 0)
{
if(g_pb.nv.recordPtr[searchNvInfo.pos].keyEqualFront == TRUE)
{
searchSimInfo.pos--;
}
else
{
break;
}
}
g_pb.nv.recordPtr[searchNvInfo.pos].keyEqualFront = TRUE;
}
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(orgSimPos < searchSimInfo.pos)
{
searchSimInfo.pos--;
for(i = orgSimPos; i < searchSimInfo.pos; i++)
{
g_pb.sim.recordPtr[i] = g_pb.sim.recordPtr[i + 1];
g_pb.sim.recordPtr[i].posInAll--;
}
g_pb.sim.recordPtr[searchSimInfo.pos] = *recordPtr;
}
else if(orgSimPos > searchSimInfo.pos)
{
for(i = orgSimPos; i > searchSimInfo.pos;i--)
{
g_pb.sim.recordPtr[i] = g_pb.sim.recordPtr[i - 1];
g_pb.sim.recordPtr[i].posInAll++;
}
g_pb.sim.recordPtr[searchSimInfo.pos] = *recordPtr;
}
else
{ /* 更改前后位值不变 */
g_pb.sim.recordPtr[searchSimInfo.pos] = *recordPtr;
}
if(orgNvPos < searchNvInfo.pos)
{
for(i = orgNvPos; i < searchNvInfo.pos; i++)
{
g_pb.sim.recordPtr[i].posInAll--;
}
}
else if(orgNvPos > searchNvInfo.pos)
{
for(i = searchNvInfo.pos; i < orgNvPos; i++)
{
g_pb.nv.recordPtr[i].posInAll++;
}
}
else
{
/* 更改前后位值不变 */
}
}
/* ***************************************************************************
* Function name : DCW_PB_simRecordIsValid
* Description : 一条Sim卡记录是否有效
* Param : record :记录
* Return : 是否有效
* Author: : *************
* Note : None
*****************************************************************************/
BOOLEAN DCW_PB_simRecordIsValid(T_PB_SIM_RECORD *recordPtr,uint16 *inValidFlagPtr)
{
if(recordPtr->outerName.len == 0)
{
*inValidFlagPtr = PB_RECORD_NO_NAME;
return FALSE;
}
else if(recordPtr->num.len == 0)
{
*inValidFlagPtr = PB_RECORD_NO_PHONE;
return FALSE;
}
else
{
return TRUE;
}
}
void DCW_PB_handleSimCallBack(DPARAM param)
{
BOOLEAN ret;
T_PB_RECORD_ITEM_ADDR *pAddr;
MnAdnUpdateCnfS *adn_update_cnf_ptr = (MnAdnUpdateCnfS *)param;
switch (adn_update_cnf_ptr->operate_type)
{
case MN_ADN_UPDATE:
SCI_TRACE_LOW("\r\n--DCW_PB_handleSimCallBack---MN_ADN_UPDATE--g_pb_simId = %d",g_pb_simId);
DCW_PB_setIdValue(&g_pb.sim.idManager,g_pb_simId,1);
ret = FALSE;
if(g_pb.operate.operateType == PB_OPERATE_COPY_ALL_TO_SIM_E)
{
g_pb_operate_offset++;
ret = DCW_PB_updateSimRecordCallBack(g_pb_operate_pos,g_pb_operate_offset,TRUE);
}
else if(g_pb.operate.operateType == PB_OPERATE_COPY_MANY_TO_SIM_E && g_pb.operate.listInfo.selectNumber > 0)
{
pAddr = DCW_PB_getRecordAddr(g_pb.operate.listInfo.selectItemPtr[g_pb.operate.listInfo.selectNumber-1]);
ret = DCW_PB_updateSimRecordCallBack(pAddr->pos,pAddr->offset,TRUE);
g_pb.operate.listInfo.selectNumber--;
}
if(ret == FALSE)
{ /*结束*/
SCI_TRACE_LOW("\r\n--DCW_PB_handleSimCallBack-----update end");
g_pb.operate.processing = FALSE;
PUBWIN_CloseWaitingMessageWin(DCW_PB_WAITING_WIN_ID);
DCW_PB_openWindows(PNULL,&g_pb_completeWinTab);
}
break;
case MN_ADN_ERASE:
SCI_TRACE_LOW("\r\n--DCW_PB_handleSimCallBack---MN_ADN_ERASE--g_pb_simId = %d",g_pb_simId);
DCW_PB_setIdValue(&g_pb.sim.idManager,g_pb_simId,0);
ret = FALSE;
if(g_pb.operate.operateType == PB_OPERATE_ERASE_SIM_ALL_E && g_pb.sim.usedRecord > 0)
{
ret = DCW_PB_deleteSimRecordCallBack(g_pb.sim.usedRecord - 1);
}
else if(g_pb.operate.operateType == PB_OPERATE_ERASE_MANY_E &&
g_pb.sim.usedRecord > 0 &&g_pb.operate.listInfo.selectNumber > 0)
{
pAddr = &g_pb.operate.listInfo.addrManager.ptr[g_pb.operate.listInfo.selectItemPtr[g_pb.operate.listInfo.selectNumber - 1]];
SCI_ASSERT(pAddr->type == PHONEBOOK_SIM_STORAGE);
ret = DCW_PB_deleteSimRecordCallBack(pAddr->pos);
g_pb.operate.listInfo.selectNumber--;
}
if(ret == FALSE)
{ /*结束*/
SCI_TRACE_LOW("\r\n--DCW_PB_handleSimCallBack-----erase end");
g_pb.operate.processing = FALSE;
PUBWIN_CloseWaitingMessageWin(DCW_PB_WAITING_WIN_ID);
DCW_PB_openWindows(PNULL,&g_pb_completeWinTab);
}
break;
default:
SCI_TRACE_LOW("\r\n--DCW_PB_handleSimCallBack-----operate_type = %d",adn_update_cnf_ptr->operate_type);
break;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -