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

📄 dcw_pb_nv.c

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


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