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

📄 dcw_pb_api.c

📁 重写的展迅电话本, 重写的展迅电话本, 重写的展迅电话本,
💻 C
📖 第 1 页 / 共 5 页
字号:
            return -2;
        }
        else
        {
            i++;
        }
    }

    if(srcLen > dstLen)
    {
        return 1;
    }
    else if(srcLen < dstLen)
    {
        return -1;
    }
    else
    {
        return 0;
    }
}

/****************************************************************************
 *  Function name : DCW_PB_GetBcdNumberType
 *  Description   : 取得BCD的Type
 *  Param         : npiTon : 一个标志字符
 *  Return        : MN_NUMBER_TYPE_E                    
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
MN_NUMBER_TYPE_E DCW_PB_GetBcdNumberType(uint8 npiTon)
{
    return ((MN_NUMBER_TYPE_E)(npiTon >> 4));
}
/****************************************************************************
 *  Function name : DCW_PB_GetBcdNumberNpiTon
 *  Description   : 取得BCD的NpiTon
 *  Param         : type : BCD码的类型
 *  Return        : uint8                    
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
uint8 DCW_PB_GetBcdNumberNpiTon(MN_NUMBER_TYPE_E type)
{
    return ((uint8)(type << 4));
}
/****************************************************************************
 *  Function name : DCW_PB_freeOperateInfo
 *  Description   : 释放操作信息的空间
 *  Param         : None
 *  Return        : None                    
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_freeOperateInfo(void)
{
    if(g_pb.operate.operateType != PB_OPERATE_SPEEDY_SEARCH_E)
    {
        if(g_pb.operate.listInfo.addrManager.ptr != PNULL)
        {
            SCI_FREE(g_pb.operate.listInfo.addrManager.ptr);
            g_pb.operate.listInfo.addrManager.ptr = PNULL;
            g_pb.operate.listInfo.addrManager.amount = 0;
        }
    }

    if(g_pb.operate.fastSearchInfo.addrManager.ptr != NULL)
    {
        SCI_FREE(g_pb.operate.fastSearchInfo.addrManager.ptr);
        g_pb.operate.fastSearchInfo.addrManager.ptr = PNULL;
        g_pb.operate.fastSearchInfo.addrManager.amount = 0;
    }

    if(g_pb.operate.listInfo.selectItemPtr != PNULL)
    {
        SCI_FREE(g_pb.operate.listInfo.selectItemPtr);
        g_pb.operate.listInfo.selectItemPtr = PNULL;
        g_pb.operate.listInfo.selectNumber  = 0;
    }
}
/****************************************************************************
 *  Function name : DCW_PB_loadAddrListInfo
 *  Description   : Load 浏览的地址信息表
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : None
 *****************************************************************************/
void DCW_PB_loadAddrListInfo(void)
{   
    uint16                  nvPos  = 0;
    uint16                  simPos = 0;
    uint32                  size; 
    T_PB_ADDR_MANAGER       *addrPtr = &g_pb.operate.listInfo.addrManager;

    addrPtr->amount = 0;

    SCI_ASSERT(addrPtr->ptr == PNULL);

    size = (g_pb.nv.usedRecord + g_pb.sim.usedRecord) * sizeof(T_PB_RECORD_ITEM_ADDR);
    addrPtr->ptr = (T_PB_RECORD_ITEM_ADDR *)SCI_ALLOC(size);
    SCI_ASSERT(addrPtr->ptr  != PNULL);
    SCI_MEMSET(addrPtr->ptr, 0, size);

    while(simPos < g_pb.sim.usedRecord && nvPos < g_pb.nv.usedRecord)
    {
        if(g_pb.sim.recordPtr[simPos].posInAll <= g_pb.nv.recordPtr[nvPos].posInAll)
        {
            addrPtr->ptr[addrPtr->amount].type    = PHONEBOOK_SIM_STORAGE;
            addrPtr->ptr[addrPtr->amount].pos     = simPos;
            addrPtr->ptr[addrPtr->amount].offset  = 0;
            simPos++;
            addrPtr->amount++;
        }
        else
        {
            addrPtr->ptr[addrPtr->amount].type    = PHONEBOOK_NV_STORAGE;
            addrPtr->ptr[addrPtr->amount].pos     = nvPos;
            addrPtr->ptr[addrPtr->amount].offset  = 0;
            nvPos++;
            addrPtr->amount++;
        }
    }

    while(simPos < g_pb.sim.usedRecord)
    {
        addrPtr->ptr[addrPtr->amount].type    = PHONEBOOK_SIM_STORAGE;
        addrPtr->ptr[addrPtr->amount].pos     = simPos;
        addrPtr->ptr[addrPtr->amount].offset  = 0;
        simPos++;
        addrPtr->amount++;   
    }
    while(nvPos < g_pb.nv.usedRecord)
    {
        addrPtr->ptr[addrPtr->amount].type    = PHONEBOOK_NV_STORAGE;
        addrPtr->ptr[addrPtr->amount].pos     = nvPos;
        addrPtr->ptr[addrPtr->amount].offset  = 0;
        nvPos++;
        addrPtr->amount++;
    }
}

/****************************************************************************
 *  Function name : DCW_PB_loadAddrListInfo
 *  Description   : Load nv地址信息表
 *  Param         : None
 *  Return        : None                    
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_loadNvAddrListInfo(void)
{
    uint16                  nvPos  = 0;
    uint32                  size; 
    T_PB_ADDR_MANAGER      *addrPtr = &g_pb.operate.listInfo.addrManager;

    addrPtr->amount = 0;

    SCI_ASSERT(addrPtr->ptr == PNULL);

    size = g_pb.nv.usedRecord * sizeof(T_PB_RECORD_ITEM_ADDR);
    addrPtr->ptr = (T_PB_RECORD_ITEM_ADDR *)SCI_ALLOC(size);
    SCI_ASSERT(addrPtr->ptr  != PNULL);
    SCI_MEMSET(addrPtr->ptr, 0x00, size);

    while(nvPos < g_pb.nv.usedRecord)
    {
        addrPtr->ptr[addrPtr->amount].type    = PHONEBOOK_NV_STORAGE;
        addrPtr->ptr[addrPtr->amount].pos     = nvPos;
        addrPtr->ptr[addrPtr->amount].offset  = 0;
        nvPos++;
        addrPtr->amount++;
    }
}

/****************************************************************************
 *  Function name : DCW_PB_searchRecordByName
 *  Description   : 通过名字查找记录
 *  Param         : str : 姓名字符串  
 *  Return        : None                    
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_searchRecordByName(T_PB_M_STRING *strPtr)
{
    uint16  i = 0;
    uint16  simStart = 0;
    uint16  simEnd = 0;
    uint16  nvStart = 0;
    uint16  nvEnd = 0;
    int8    ret;
    T_PB_M_STRING            nameStr; 
    T_PB_SEARCH_RETURN_INFO  searchInfo;    

    g_pb.operate.listInfo.addrManager.amount = 0;

    DCW_PB_usc2ToSpell(strPtr,&nameStr);

    if(g_pb.sim.usedRecord > 0)
    {
        DCW_PB_twoSplitSearch(0,g_pb.sim.usedRecord,&nameStr,DCW_PB_compareSimRecord,&searchInfo);
        
        if(searchInfo.pos < g_pb.sim.usedRecord)
        {
            simStart  = searchInfo.pos;
            ret = DCW_PB_compareByChar(nameStr.array,g_pb.sim.recordPtr[simStart].innerName.array,
                                       nameStr.len,g_pb.sim.recordPtr[simStart].innerName.len);
 
            if(ret == 0 || ret == -1)
            {
                while(simStart > 0)
                {
                    ret = DCW_PB_compareByChar(nameStr.array,g_pb.sim.recordPtr[simStart - 1].innerName.array,
                                               nameStr.len,g_pb.sim.recordPtr[simStart - 1].innerName.len);
                    if(ret == 0 || ret == -1)
                    {
                        simStart--;
                    }
                    else
                    {
                        break;
                    }
                }

                ret = 0;
                simEnd = searchInfo.pos + 1;

                while(simEnd < g_pb.sim.usedRecord)
                {
                    ret = DCW_PB_compareByChar(nameStr.array,g_pb.sim.recordPtr[simEnd].innerName.array,
                                               nameStr.len,g_pb.sim.recordPtr[simEnd].innerName.len);
                    if(ret == 0 || ret == -1)
                    {
                        simEnd++;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            else if(ret == -2)
            {
                simEnd = simStart;
            }
            else
            {
                SCI_ASSERT(FALSE);
            }
        }
    }

    if(g_pb.nv.usedRecord > 0)
    {
        DCW_PB_twoSplitSearch(0,g_pb.nv.usedRecord,&nameStr,DCW_PB_compareNvRecord,&searchInfo);
        
        if(searchInfo.pos < g_pb.nv.usedRecord)
        {
            nvStart  = searchInfo.pos;
            ret = DCW_PB_compareByChar(nameStr.array,g_pb.nv.recordPtr[nvStart].innerName.array,
                                       nameStr.len,g_pb.nv.recordPtr[nvStart].innerName.len);
 
            if(ret == 0 || ret == -1)
            {
                while(nvStart > 0)
                {
                    ret = DCW_PB_compareByChar(nameStr.array,g_pb.nv.recordPtr[nvStart - 1].innerName.array,
                                               nameStr.len,g_pb.nv.recordPtr[nvStart - 1].innerName.len);
                    
                    if(ret == 0 || ret == -1)
                    {
                        nvStart--;
                    }
                    else
                    {
                        break;
                    }
                }

                nvEnd = searchInfo.pos + 1;

                while(nvEnd < g_pb.nv.usedRecord)
                {
                    ret = DCW_PB_compareByChar(nameStr.array,g_pb.nv.recordPtr[nvEnd].innerName.array,
                                               nameStr.len,g_pb.nv.recordPtr[nvEnd].innerName.len);
                    if(ret == 0 || ret == -1)
                    {
                        nvEnd++;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            else if(ret == -2)
            {
                nvEnd = nvStart;
            }
            else
            {
                SCI_ASSERT(FALSE);
            }
        }
    }

    g_pb.operate.listInfo.addrManager.amount = (simEnd - simStart) + (nvEnd - nvStart);

    if(g_pb.operate.listInfo.addrManager.ptr != PNULL)
    {
        SCI_FREE(g_pb.operate.listInfo.addrManager.ptr);
        g_pb.operate.listInfo.addrManager.ptr = PNULL;
    }

    SCI_ASSERT(g_pb.operate.listInfo.addrManager.ptr == PNULL);

    g_pb.operate.listInfo.addrManager.ptr = 
             SCI_ALLOC(sizeof(T_PB_RECORD_ITEM_ADDR) * g_pb.operate.listInfo.addrManager.amount);

    i = 0;
    while(simStart < simEnd && nvStart < nvEnd)
    {
        if(g_pb.sim.recordPtr[simStart].posInAll <= g_pb.nv.recordPtr[nvStart].posInAll)
        {
            g_pb.operate.listInfo.addrManager.ptr[i].type = PHONEBOOK_SIM_STORAGE;
            g_pb.operate.listInfo.addrManager.ptr[i].pos  = simStart;
            g_pb.operate.listInfo.addrManager.ptr[i].offset = 0;
            simStart++;
            i++;
        }
        else
        {
            g_pb.operate.listInfo.addrManager.ptr[i].type = PHONEBOOK_NV_STORAGE;
            g_pb.operate.listInfo.addrManager.ptr[i].pos  = nvStart;
            g_pb.operate.listInfo.addrManager.ptr[i].offset = 0;
            nvStart++;
            i++;
        }
    }

    while(simStart < simEnd)
    {
        g_pb.operate.listInfo.addrManager.ptr[i].type = PHONEBOOK_SIM_STORAGE;
        g_pb.operate.listInfo.addrManager.ptr[i].pos  = simStart;
        g_pb.operate.listInfo.addrManager.ptr[i].offset = 0;
        simStart++;
        i++;
    }

    while(nvStart < nvEnd)
    {
        g_pb.operate.listInfo.addrManager.ptr[i].type = PHONEBOOK_NV_STORAGE;
        g_pb.operate.listInfo.addrManager.ptr[i].pos  = nvStart;
        g_pb.operate.listInfo.addrManager.ptr[i].offset = 0;
        nvStart++;
        i++;
    }
}
/****************************************************************************
 *  Function name : DCW_PB_getCompareNumber
 *  Description   : 从一个原始BCD电话码,得到用来排序查找的电话结构体
 *  Param         : bcdNum : 原始BCD电话码
                    cmpNum : 用来排序查找的电话结构体   
 *  Return        : None                    
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_getCompareNumber(T_PB_BCD_NUMBER *bcdNumPtr,T_PB_COMPARE_NUMBER *cmpNumPtr)
{
    uint8       i;
    uint8       j;
    uint8       numLen;
    uint8       bcdCode;

    SCI_MEMSET(cmpNumPtr,0x00,sizeof(T_PB_COMPARE_NUMBER));
    numLen = bcdNumPtr->len * 2;

    for(i = 0; i < numLen;i++)
    {
        if(i % 2 == 0)
        {
            bcdCode = (bcdNumPtr->number[i/2]) & 0x0F;
        }
        else
        {
            bcdCode = (bcdNumPtr->number[i/2]) >> 4;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -