📄 dcw_pb_api.c
字号:
/*****************************************************************************
** File Name: dcw_pb_api.c *
** Author: ************* *
** Date: 2006-04-05 *
** Copyright: 2006 ************* All Rights *
** Description: 此文件包含一些公用的api *
/*****************************************************************************
** Important Edit History *
** --------------------------------------------------------------------------*
** DATE NAME DESCRIPTION *
** 2006-04-05 ************* Create *
******************************************************************************/
#ifndef _DCW_PB_API_C_
#define _DCW_PB_API_C_
#include "dcw_pb.h"
/* ***************************************************************************
* Function name : DCW_PB_loadOperateInfo
* Description : 装载操作的信息
* Param : type : 操作的大类型
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_loadOperateInfo(E_PB_OPERATE_TYPE type,E_PB_SUB_OPERATE_TYPE subType,void *paraPtr)
{
uint16 index;
E_PB_OPERATE_TYPE lastOperateType;
T_PB_RECORD_ITEM_ADDR *pAddr;
g_pb.operate.operateType = type;
g_pb.operate.subOperateType = subType;
/* 如果是进入一个功能模块,需要清空指针 */
if(subType == PB_SUB_OPERATE_NONE_E)
{
DCW_PB_freeOperateInfo();
}
/* 根据type 与 subType 载入数据*/
switch(type)
{
case PB_OPERATE_GENERAL_BROWSE_E:
switch(subType)
{
case PB_SUB_OPERATE_NONE_E:
DCW_PB_loadAddrListInfo();
g_pb.operate.listInfo.selectMaxNumber = 1;
g_pb.operate.listInfo.listType = PB_LIST_TYPE_SINGLE_E;
break;
case PB_SUB_OPERATE_MODIFY_ONE_RECORD_E:
pAddr = DCW_PB_getRecordAddr(g_pb.operate.listInfo.selectItemPtr[0]);
SCI_ASSERT(pAddr != PNULL);
index = pAddr->pos;
if(pAddr->type == PHONEBOOK_SIM_STORAGE)
{
g_pb_simRecord = g_pb.sim.recordPtr[index];
}
else
{
g_pb_nvRecord = g_pb.nv.recordPtr[index];
}
break;
default:
break;
}
break;
case PB_OPERATE_SPEEDY_SEARCH_E:
switch(subType)
{
case PB_SUB_OPERATE_NONE_E:
SCI_MEMSET(&g_pb.operate.fastSearchInfo,0x00,sizeof(T_PB_FAST_SEARCH_INFO));
DCW_PB_loadFastAddrListInfo();
g_pb.operate.listInfo.selectMaxNumber = 1;
g_pb.operate.listInfo.listType = PB_LIST_TYPE_SINGLE_E;
break;
case PB_SUB_OPERATE_MODIFY_ONE_RECORD_E:
pAddr = DCW_PB_getRecordAddr(g_pb.operate.listInfo.selectItemPtr[0]);
SCI_ASSERT(pAddr != PNULL);
index = pAddr->pos;
if(pAddr->type == PHONEBOOK_SIM_STORAGE)
{
g_pb_simRecord = g_pb.sim.recordPtr[index];
}
else
{
g_pb_nvRecord = g_pb.nv.recordPtr[index];
}
break;
default:
break;
}
break;
case PB_OPERATE_GROUP_MANAGE_E:
switch(subType)
{
case PB_SUB_OPERATE_NONE_E:
DCW_PB_loadGroupInfo();
break;
case PB_SUB_OPERATE_GROUP_MEMBER_BROSWER_E:
DCW_PB_LoadGroupMember(TRUE);
g_pb.operate.listInfo.listType = PB_LIST_TYPE_SINGLE_E;
g_pb.operate.listInfo.selectMaxNumber = 1;
break;
case PB_SUB_OPERATE_GROUP_ADD_MEMBER_E:
DCW_PB_LoadGroupMember(FALSE);
g_pb.operate.listInfo.listType = PB_LIST_TYPE_MULTIPLE_E,
g_pb.operate.listInfo.selectMaxNumber = g_pb.operate.listInfo.addrManager.amount;
break;
case PB_SUB_OPERATE_GROUP_DEL_MEMBER_E:
g_pb.operate.listInfo.listType = PB_LIST_TYPE_MULTIPLE_E,
g_pb.operate.listInfo.selectMaxNumber = g_pb.operate.listInfo.addrManager.amount;
DCW_PB_LoadGroupMember(TRUE);
break;
default:
break;
}
break;
case PB_OPERATE_SMS_SGL_SELECT_BROWSE_E:
case PB_OPERATE_MMS_SGL_SELECT_BROWSE_E:
switch(subType)
{
case PB_SUB_OPERATE_NONE_E:
DCW_PB_loadAddrListInfo();
g_pb.operate.listInfo.listType = PB_LIST_TYPE_SINGLE_E;
g_pb.operate.listInfo.selectMaxNumber = 1;
break;
default:
break;
}
break;
case PB_OPERATE_SMS_MUL_SELECT_BROWSE_E:
case PB_OPERATE_MMS_MUL_SELECT_BROWSE_E:
switch(subType)
{
case PB_SUB_OPERATE_NONE_E:
DCW_PB_loadAddrListInfo();
g_pb.operate.listInfo.listType = PB_LIST_TYPE_MULTIPLE_E,
g_pb.operate.listInfo.selectMaxNumber = *(uint16 *)paraPtr;
break;
default:
break;
}
break;
case PB_OPERATE_ERASE_MANY_E:
switch(subType)
{
case PB_SUB_OPERATE_NONE_E:
DCW_PB_loadAddrListInfo();
g_pb.operate.listInfo.listType = PB_LIST_TYPE_MULTIPLE_E,
g_pb.operate.listInfo.selectMaxNumber = g_pb.sim.usedRecord + g_pb.nv.usedRecord;
break;
default:
break;
}
break;
case PB_OPERATE_COPY_MANY_TO_SIM_E:
switch(subType)
{
case PB_SUB_OPERATE_NONE_E:
DCW_PB_loadNvNumAddrListInfo();
g_pb.operate.listInfo.listType = PB_LIST_TYPE_MULTIPLE_E,
g_pb.operate.listInfo.selectMaxNumber = DCW_PB_getPhoneNumInNv();
break;
default:
break;
}
break;
case PB_OPERATE_COPY_MANY_TO_NV_E:
switch(subType)
{
case PB_SUB_OPERATE_NONE_E:
DCW_PB_loadSimAddrListInfo();
g_pb.operate.listInfo.listType = PB_LIST_TYPE_MULTIPLE_E,
g_pb.operate.listInfo.selectMaxNumber = g_pb.sim.usedRecord;
break;
default:
break;
}
break;
case PB_OPERATE_ADD_NUM_TO_RECORD_E:
switch(subType)
{
case PB_SUB_OPERATE_NONE_E:
DCW_PB_loadNvAddrListInfo();
g_pb.operate.listInfo.listType = PB_LIST_TYPE_SINGLE_E;
g_pb.operate.listInfo.selectMaxNumber = 1;
break;
default:
break;
}
case PB_OPERATE_LOCAL_NAME_E:
switch(subType)
{
case PB_SUB_OPERATE_NONE_E:
g_pb.operate.listInfo.listType = PB_LIST_TYPE_SINGLE_E;
g_pb.operate.listInfo.selectMaxNumber = 1;
break;
default:
break;
}
break;
default:
break;
}
}
/****************************************************************************
* Function name : DCW_PB_isValidNumber
* Description : 判断电话号码是否有效
* Param : type:电话号码类型
* len :电话号码长度
* Return : 电话号码有效否
* Author: : *************
* Note : None
*****************************************************************************/
BOOLEAN DCW_PB_isValidNumber(MN_NUMBER_TYPE_E type, uint8 len)
{
if (len > 0)
{
return TRUE;
}
}
/****************************************************************************
* Function name : DCW_PB_setIdValue
* Description : 设置ID编号的情况
* Param : idInfo:设置哪个id编号组
* id :设置第几个编号
* value :设置的值。0----该编号可以使用,1----该编号占用
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_setIdValue(T_PB_ID_MANAGER *idManagerPtr, uint16 id, uint8 value)
{
uint16 bytePos;
uint8 bitPos;
uint8 bitValue = 0;
SCI_ASSERT(id < idManagerPtr->amount);
SCI_TRACE_LOW("\r\n--J--DCW_PB_setIdValue----id: %d, value:%d", id, value );
/* following code added by jerry */
bitValue = DCW_GetBitValue(idManagerPtr->idPtr, id);
SCI_TRACE_LOW("\r\n--J--DCW_PB_setIdValue----old bitValue:%d", bitValue );
if(value != 0 && bitValue == 0)
{
idManagerPtr->count++;
}
else if(value == 0 && bitValue != 0)
{
idManagerPtr->count--;
}
else
{
}
DCW_SetBitValue(idManagerPtr->idPtr, id, value);
}
/****************************************************************************
* Function name : DCW_PB_getEmptyId
* Description : 得到一个空编号
* Param : idInfo:查找哪个id编号组
* Return : 电话号码有效否
* Author: : *************
* Note : None
*****************************************************************************/
uint16 DCW_PB_getEmptyId(T_PB_ID_MANAGER *idManagerPtr)
{
uint16 i;
uint16 byteEndPos;
uint8 bitEndPos;
uint16 emptyByte;
uint8 emptyBit;
uint8 byte;
/* 没有空编号 */
if(idManagerPtr->count == idManagerPtr->amount)
{
SCI_TRACE_LOW("\r\n--jerry-- DCW_PB_getEmptyId: count == amount");
return DCW_PB_16_INVALID;
}
/* 编号存储空间的边界 */
byteEndPos = (( idManagerPtr->amount + 7) >> 3);
bitEndPos = ((idManagerPtr->amount) & 0x07 );
for(i = 0; i < byteEndPos; i++)
{
if(idManagerPtr->idPtr[i] != 0xFF )
{
emptyByte = i;
byte = idManagerPtr->idPtr[i];
break;
}
}
/* the following code added by jerry */
if(i < byteEndPos)
{
for(i = 0; i < 8; i++)
{
emptyBit = (emptyByte<<3) + i;
if(emptyBit >= idManagerPtr->amount) /* 判断此id是否超过总数, 超过则退出*/
{
return DCW_PB_16_INVALID;
}
if(((byte) & (0x01<< i)) == 0 )
{
SCI_TRACE_LOW("\r\n--DCW_PB_getEmptyId id: %d", emptyBit);
return emptyBit;
}
}
}
/* end of jerry's adding */
return DCW_PB_16_INVALID;
}
/****************************************************************************
* Function name : DCW_PB_usc2ToSpell
* Description : 把一个usc2编码的字符串转化为一个spell编码的字符串
* Param : inStr: 字符串1,IN
* outStr: 字符串2,OUT
* Return : None
* Author: : *************
* Note : None
*****************************************************************************/
void DCW_PB_usc2ToSpell(T_PB_M_STRING *inStrPtr, T_PB_M_STRING *outStrPtr)
{
uint16 i;
uint16 len;
uint16 offset;
uint16 value;
uint16 spellValue;
outStrPtr->len = 0;
if(inStrPtr->ucs2 == TRUE)
{
len = inStrPtr->len/2;
if(len == 0)
{
return;
}
/* 循环,以两个字节为一个单位 2:2 */
for(i = 0; i < len; i++)
{
value = inStrPtr->array[i * 2] << 8;
value += inStrPtr->array[i * 2 + 1];
spellValue= DCW_PB_getLetterSpell(value);
outStrPtr->array[i * 2] = (uint8)(spellValue >> 8);
outStrPtr->array[i * 2 + 1] = (uint8)(spellValue);
outStrPtr->len += 2;
}
}
else
{
len = inStrPtr->len;
if(len == 0)
{
return;
}
/* 循环,以一个字节为一个单位 1:2 */
for(i = 0; i < len; i++)
{
value = inStrPtr->array[i];
spellValue= DCW_PB_getLetterSpell(value);
outStrPtr->array[i * 2] = (uint8)(spellValue >> 8);
outStrPtr->array[i * 2 + 1] = (uint8)(spellValue);
outStrPtr->len += 2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -