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

📄 dcw_pb_sim.c

📁 重写的展迅电话本, 重写的展迅电话本, 重写的展迅电话本,
💻 C
📖 第 1 页 / 共 2 页
字号:

    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 + -