📄 dcw_pb_api.c
字号:
}
if(bcdCode > 9)
{
break;
}
if(i >= 8)
{/* cmpNumPtr->low 保存8位电话号码 */
cmpNumPtr->high <<= 4;
cmpNumPtr->high |= ((cmpNumPtr->low & 0xF0000000) >> 28);
}
cmpNumPtr->low <<= 4;
cmpNumPtr->low |= bcdCode;
}
cmpNumPtr->len = MIN(DCW_PB_MAX_NUMBER_LEN,i);
}
/****************************************************************************
* Function name : DCW_PB_twoRecordEqual
* Description : 比较两条记录,并把比较结果返回
* Param : recordSrc : 记录1
recordDst : 记录2
type : 记录存储信息
* Return : uint8 比较结果
* Author: : *************
* Note : None
*****************************************************************************/
uint8 DCW_PB_twoRecordEqual(void *recordSrcPtr,void *recordDstPtr,PHONEBOOK_STORAGE_E type)
{
uint8 ret = 0;
T_PB_NV_RECORD *nvRecordScrPtr;
T_PB_NV_RECORD *nvRecordDstPtr;
T_PB_SIM_RECORD *simRecordScrPtr;
T_PB_SIM_RECORD *simRecordDstPtr;
if(type == PHONEBOOK_SIM_STORAGE)
{
simRecordScrPtr = (T_PB_SIM_RECORD *)recordSrcPtr;
simRecordDstPtr = (T_PB_SIM_RECORD *)recordDstPtr;
if(DCW_PB_compareByChar(simRecordScrPtr->outerName.array, simRecordDstPtr->outerName.array,
simRecordScrPtr->outerName.len, simRecordDstPtr->outerName.len) != 0)
{
ret |= PB_NAME_MODIFY_E;
}
if(DCW_PB_compareByChar(simRecordScrPtr->num.number, simRecordDstPtr->num.number,
simRecordScrPtr->num.len, simRecordDstPtr->num.len) != 0)
{
ret |= PB_PHONE_NUMBER_0_MODIFY_E;
}
}
else
{
nvRecordScrPtr = (T_PB_NV_RECORD *)recordSrcPtr;
nvRecordDstPtr = (T_PB_NV_RECORD *)recordDstPtr;
if(DCW_PB_compareByChar(nvRecordScrPtr->outerName.array, nvRecordDstPtr->outerName.array,
nvRecordScrPtr->outerName.len, nvRecordDstPtr->outerName.len) != 0)
{
ret |= PB_NAME_MODIFY_E;
}
if(DCW_PB_compareByChar(nvRecordScrPtr->num[0].number, nvRecordDstPtr->num[0].number,
nvRecordScrPtr->num[0].len, nvRecordDstPtr->num[0].len) != 0)
{
ret |= PB_PHONE_NUMBER_0_MODIFY_E;
}
if(DCW_PB_compareByChar(nvRecordScrPtr->num[1].number, nvRecordDstPtr->num[1].number,
nvRecordScrPtr->num[1].len, nvRecordDstPtr->num[1].len) != 0)
{
ret |= PB_PHONE_NUMBER_1_MODIFY_E;
}
if(DCW_PB_compareByChar(nvRecordScrPtr->num[2].number, nvRecordDstPtr->num[2].number,
nvRecordScrPtr->num[2].len, nvRecordDstPtr->num[2].len) != 0)
{
ret |= PB_PHONE_NUMBER_2_MODIFY_E;
}
if(DCW_PB_compareByChar(nvRecordScrPtr->mail.array, nvRecordDstPtr->mail.array,
nvRecordScrPtr->mail.len, nvRecordDstPtr->mail.len) != 0)
{
ret |= PB_MAIL_MODIFY_E;
}
if(nvRecordScrPtr->groupId != nvRecordDstPtr->groupId)
{
ret |= PB_GROUP_MODIFY_E;
}
}
return ret;
}
/****************************************************************************
* Function name : DCW_PB_adjustNumList
* Description : 当增加记录,删除记录,修改记录时,Number List也要改变
* Param : recordSrc : 改前记录
recordDst : 改后记录
type : 记录存储信息
flag : 记录改变前后的差异信息
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_adjustNumList(void * recordSrcPtr,void *recordDstPtr,PHONEBOOK_STORAGE_E type,E_PB_MODIFY_FLAG flag)
{
uint16 i;
T_PB_NV_RECORD *nvRecordSrcPtr;
T_PB_NV_RECORD *nvRecordDstPtr;
T_PB_SIM_RECORD *simRecordSrcPtr;
T_PB_SIM_RECORD *simRecordDstPtr;
T_PB_SEARCH_NUMBER_ITEM numItemSrc;
T_PB_SEARCH_NUMBER_ITEM numItemDst;
if(type == PHONEBOOK_SIM_STORAGE)
{
simRecordSrcPtr = (T_PB_SIM_RECORD *)recordSrcPtr;
simRecordDstPtr = (T_PB_SIM_RECORD *)recordDstPtr;
}
else
{
nvRecordSrcPtr = (T_PB_NV_RECORD *)recordSrcPtr;
nvRecordDstPtr = (T_PB_NV_RECORD *)recordDstPtr;
}
if(type == PHONEBOOK_SIM_STORAGE)
{
if((flag & PB_PHONE_NUMBER_0_MODIFY_E) == PB_PHONE_NUMBER_0_MODIFY_E)
{
DCW_PB_getCompareNumber(&simRecordSrcPtr->num,&numItemSrc.cmpNum);
numItemSrc.type = PHONEBOOK_SIM_STORAGE;
numItemSrc.id = simRecordSrcPtr->id;
numItemSrc.offset = 0;
DCW_PB_getCompareNumber(&simRecordDstPtr->num,&numItemDst.cmpNum);
numItemDst.type = PHONEBOOK_SIM_STORAGE;
numItemDst.id = simRecordDstPtr->id;
numItemDst.offset = 0;
DCW_PB_modifyOneItemInNumList(&numItemSrc,&numItemDst);
}
else if((flag & PB_ADD_E) == PB_ADD_E)
{
DCW_PB_getCompareNumber(&simRecordSrcPtr->num,&numItemSrc.cmpNum);
numItemSrc.type = PHONEBOOK_SIM_STORAGE;
numItemSrc.id = simRecordSrcPtr->id;
numItemSrc.offset = 0;
DCW_PB_InsertOneItemToNumList(&numItemSrc);
}
else if((flag & PB_DELETE_E) == PB_DELETE_E)
{
DCW_PB_getCompareNumber(&simRecordDstPtr->num,&numItemDst.cmpNum);
numItemDst.type = PHONEBOOK_SIM_STORAGE;
numItemDst.id = simRecordDstPtr->id;
numItemDst.offset = 0;
DCW_PB_deleteOneItemFromNumList(&numItemDst);
}
else
{
}
}
else
{
BOOLEAN flagBuf[3] = {FALSE, FALSE, FALSE};
if((flag & PB_PHONE_NUMBER_0_MODIFY_E) == PB_PHONE_NUMBER_0_MODIFY_E)
{
flagBuf[0] = TRUE;
}
if((flag & PB_PHONE_NUMBER_1_MODIFY_E) == PB_PHONE_NUMBER_1_MODIFY_E)
{
flagBuf[1] = TRUE;
}
if((flag & PB_PHONE_NUMBER_2_MODIFY_E) == PB_PHONE_NUMBER_2_MODIFY_E)
{
flagBuf[2] = TRUE;
}
if(flagBuf[0] == TRUE || flagBuf[1] == TRUE || flagBuf[2] == TRUE)
{
for(i = 0; i < 3; i++)
{
if(flagBuf[i] == 1)
{
if(nvRecordSrcPtr->num[i].len == 0)
{
DCW_PB_getCompareNumber(&nvRecordDstPtr->num[i],&numItemDst.cmpNum);
numItemDst.type = PHONEBOOK_NV_STORAGE;
numItemDst.id = nvRecordDstPtr->id;
numItemDst.offset = 0;
DCW_PB_deleteOneItemFromNumList(&numItemDst);
}
else if(nvRecordDstPtr->num[i].len == 0)
{
DCW_PB_getCompareNumber(&nvRecordSrcPtr->num[i],&numItemSrc.cmpNum);
numItemSrc.type = PHONEBOOK_NV_STORAGE;
numItemSrc.id = nvRecordSrcPtr->id;
numItemSrc.offset = i;
DCW_PB_InsertOneItemToNumList(&numItemSrc);
}
else
{
DCW_PB_getCompareNumber(&nvRecordSrcPtr->num[i],&numItemSrc.cmpNum);
numItemSrc.type = PHONEBOOK_NV_STORAGE;
numItemSrc.id = nvRecordSrcPtr->id;
numItemSrc.offset = i;
DCW_PB_getCompareNumber(&nvRecordDstPtr->num[i],&numItemDst.cmpNum);
numItemDst.type = PHONEBOOK_NV_STORAGE;
numItemDst.id = nvRecordDstPtr->id;
numItemDst.offset = 0;
DCW_PB_modifyOneItemInNumList(&numItemSrc,&numItemDst);
}
}
}
}
else if((flag & PB_ADD_E) == PB_ADD_E)
{
for(i = 0; i < DCW_PB_MAX_NV_PHONE_NUM;i++)
{
if(nvRecordSrcPtr->num[i].len != 0)
{
DCW_PB_getCompareNumber(&nvRecordSrcPtr->num[i],&numItemSrc.cmpNum);
numItemSrc.type = PHONEBOOK_NV_STORAGE;
numItemSrc.id = nvRecordSrcPtr->id;
numItemSrc.offset = i;
DCW_PB_InsertOneItemToNumList(&numItemSrc);
}
}
}
else if((flag & PB_DELETE_E) == PB_DELETE_E)
{
for(i = 0; i < DCW_PB_MAX_NV_PHONE_NUM;i++)
{
if(nvRecordDstPtr->num[i].len != 0)
{
DCW_PB_getCompareNumber(&nvRecordDstPtr->num[i],&numItemDst.cmpNum);
numItemDst.type = PHONEBOOK_NV_STORAGE;
numItemDst.id = nvRecordDstPtr->id;
numItemDst.offset = i;
DCW_PB_deleteOneItemFromNumList(&numItemDst);
}
}
}
else
{
}
}
}
/****************************************************************************
* Function name : DCW_PB_InsertOneItemToNumList
* Description : 向电话号码查询列表里添加一个条目
* Param : item :添加的项目
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_InsertOneItemToNumList(T_PB_SEARCH_NUMBER_ITEM *itemPtr)
{
uint16 i;
uint16 startPos;
uint16 endPos;
uint16 midPos;
uint16 insertPos;
int8 cmpRet;
T_PB_SEARCH_RETURN_INFO searchInfo;
DCW_PB_twoSplitSearch(0, g_pb.numSearchList.count, (void *)itemPtr, DCW_PB_comparePhoneNumber,&searchInfo);
if(searchInfo.equal == TRUE)
{
}
else if(g_pb.numSearchList.count < g_pb.numSearchList.maxAmount)
{
/* 插入 */
for(i = g_pb.numSearchList.count; i > searchInfo.pos; i--)
{
g_pb.numSearchList.ptr[i] = g_pb.numSearchList.ptr[i - 1];
}
g_pb.numSearchList.ptr[searchInfo.pos] = *itemPtr;
g_pb.numSearchList.count++;
}
else
{
}
}
/****************************************************************************
* Function name : DCW_PB_modifyOneItemInNumList
* Description : 修改电话号码查询列表里的一个条目
* Param : itemSrc : 修改前的条目
itemDst : 修改后的条目
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_modifyOneItemInNumList(T_PB_SEARCH_NUMBER_ITEM *itemSrcPtr,T_PB_SEARCH_NUMBER_ITEM *itemDstPtr)
{
uint16 i;
T_PB_SEARCH_RETURN_INFO searchInfoSrc;
T_PB_SEARCH_RETURN_INFO searchInfoDst;
DCW_PB_twoSplitSearch(0, g_pb.numSearchList.count, (void *)itemSrcPtr, DCW_PB_comparePhoneNumber,&searchInfoSrc);
DCW_PB_twoSplitSearch(0, g_pb.numSearchList.count, (void *)itemDstPtr, DCW_PB_comparePhoneNumber,&searchInfoDst);
if(searchInfoDst.equal == FALSE)
{ /* 没找到 */
DCW_PB_InsertOneItemToNumList(itemSrcPtr);
return;
}
if(searchInfoSrc.pos < searchInfoDst.pos)
{
for(i = searchInfoDst.pos; i > searchInfoSrc.pos; i--)
{
g_pb.numSearchList.ptr[i] = g_pb.numSearchList.ptr[i - 1];
}
g_pb.numSearchList.ptr[searchInfoSrc.pos] = *itemSrcPtr;
}
else if(searchInfoSrc.pos > searchInfoDst.pos)
{
searchInfoSrc.pos--;
for(i = searchInfoDst.pos; i < searchInfoSrc.pos; i++)
{
g_pb.numSearchList.ptr[i] = g_pb.numSearchList.ptr[i + 1];
}
g_pb.numSearchList.ptr[searchInfoSrc.pos] = *itemSrcPtr;
}
else
{
g_pb.numSearchList.ptr[searchInfoSrc.pos] = *itemSrcPtr;
}
}
/****************************************************************************
* Function name : DCW_PB_deleteOneItemFromNumList
* Description : 删除电话号码查询列表里的一个条目
* Param : item :删除的条目
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_deleteOneItemFromNumList(T_PB_SEARCH_NUMBER_ITEM *itemPtr)
{
uint16 i;
T_PB_SEARCH_RETURN_INFO searchInfo;
DCW_PB_twoSplitSearch(0, g_pb.numSearchList.count, (void *)itemPtr, DCW_PB_comparePhoneNumber,&searchInfo);
if(searchInfo.equal == TRUE)
{
for(i = searchInfo.pos; i < g_pb.numSearchList.count - 1; i++)
{
g_pb.numSearchList.ptr[i] = g_pb.numSearchList.ptr[i + 1];
}
g_pb.numSearchList.count--;
}
}
/****************************************************************************
* Function name : DCW_PB_searchNumInNumList
* Description : 查找一个电话号码,得到这个电话号码对应的存储位置
* Param : bcdNum : 要查找的电话号码
type : 存储在哪个存储器
id : 载存储器上的位置
* Return : 查找是否成功
* Author: : *************
* Note : None
*****************************************************************************/
BOOLEAN DCW_PB_searchNumInNumList(T_PB_BCD_NUMBER *bcdNumPtr,uint16 *idPtr,PHONEBOOK_STORAGE_E *typePtr)
{
T_PB_SEARCH_NUMBER_ITEM numItem;
T_PB_SEARCH_RETURN_INFO searchInfo;
uint16 posOne;
uint16 posTwo;
*idPtr = DCW_PB_16_INVALID;
if(g_pb.numSearchList.count != 0)
{
SCI_MEMSET(&numItem,0x00,sizeof(T_PB_SEARCH_NUMBER_ITEM));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -