📄 dcw_pb_api.c
字号:
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 + -