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

📄 dcw_pb_api.c

📁 重写的展迅电话本, 重写的展迅电话本, 重写的展迅电话本,
💻 C
📖 第 1 页 / 共 5 页
字号:
/*****************************************************************************
** 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 + -