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

📄 dcw_pb_api.c

📁 重写的展迅电话本, 重写的展迅电话本, 重写的展迅电话本,
💻 C
📖 第 1 页 / 共 5 页
字号:

        DCW_PB_getCompareNumber(bcdNumPtr,&numItem.cmpNum);
        DCW_PB_twoSplitSearch(0, g_pb.numSearchList.count, (void *)&numItem, DCW_PB_comparePhoneNumber,&searchInfo);

        if(searchInfo.pos == 0)
        {
            posOne = DCW_PB_16_INVALID;
            posTwo = searchInfo.pos;
        }
        else if(searchInfo.pos == g_pb.numSearchList.count)
        {
            posOne = searchInfo.pos - 1;
            posTwo = DCW_PB_16_INVALID;
        }
        else
        {
            posOne = searchInfo.pos - 1;
            posTwo = searchInfo.pos;
        }
    }
    else
    {
        posOne = DCW_PB_16_INVALID;
        posTwo = DCW_PB_16_INVALID;
    }

    if(posTwo != DCW_PB_16_INVALID)
    {
        if((numItem.cmpNum.high == g_pb.numSearchList.ptr[posTwo].cmpNum.high) &&
           (numItem.cmpNum.low  == g_pb.numSearchList.ptr[posTwo].cmpNum.low)  &&
           (numItem.cmpNum.len  == g_pb.numSearchList.ptr[posTwo].cmpNum.len))
        {
            *idPtr   = g_pb.numSearchList.ptr[posTwo].id;
            *typePtr = g_pb.numSearchList.ptr[posTwo].type;
        }
    }
    if(*idPtr == DCW_PB_16_INVALID && posOne != DCW_PB_16_INVALID)
    {
        if((numItem.cmpNum.high == g_pb.numSearchList.ptr[posOne].cmpNum.high) &&
           (numItem.cmpNum.low  == g_pb.numSearchList.ptr[posOne].cmpNum.low)  &&
           (numItem.cmpNum.len  == g_pb.numSearchList.ptr[posOne].cmpNum.len))
        {
            *idPtr   = g_pb.numSearchList.ptr[posOne].id;
            *typePtr = g_pb.numSearchList.ptr[posOne].type;
        }
    }
    
    if(*idPtr == DCW_PB_16_INVALID)
    { /* 没找到 */
        return FALSE;
    }
    else
    { /* 找到了对应的记录,直接从存储器中读取 */  
        return TRUE; 
    }
}

/****************************************************************************
 *  Function name : DCW_PB_loadGroupInfo
 *  Description   : Load 组信息
 *  Param         : None
 *  Return        : None                    
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_loadGroupInfo(void)
{
    uint16  i;

    for(i = 0; i < DCW_PB_MAX_GROUP_NUM; i++)
    {
        g_pb.group.count[i] = 0;
    }

    for(i = 0; i < g_pb.nv.usedRecord; i++)
    {
        SCI_ASSERT(g_pb.nv.recordPtr[i].groupId < DCW_PB_MAX_GROUP_NUM);

        g_pb.group.count[g_pb.nv.recordPtr[i].groupId]++;
    }
}
/****************************************************************************
 *  Function name : DCW_PB_loadGroupInfo
 *  Description   : Load 组信息
 *  Param         : include   FALSE: 加载未分组成员
                              TRUE : 加载相应的组成员  
 *  Return        : None                    
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_LoadGroupMember(BOOLEAN include)
{
    uint16                  i;
    uint16                  j;
    uint8                   groupId;
    BOOLEAN                 load;
    GUI_LISTBOX_ITEM_T      addItem;     

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

    if(include == FALSE)
    {   //加载未分组记录
        groupId = 0;        
    }
    else
    {   //加载该分组记录
        groupId = g_pb.group.index[g_pb.group.curIndex];
        SCI_ASSERT(groupId < DCW_PB_MAX_GROUP_NUM);
    }   

    if(g_pb.group.count[groupId] == 0)
    {
        return;
    }
    else
    {
        g_pb.operate.listInfo.addrManager.amount = g_pb.group.count[groupId];
    }

    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);

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

    for(i = 0,j = 0; i < g_pb.nv.usedRecord; i++)
    {
        if(g_pb.nv.recordPtr[i].groupId == groupId)
        {
            g_pb.operate.listInfo.addrManager.ptr[j].type = PHONEBOOK_NV_STORAGE;
            g_pb.operate.listInfo.addrManager.ptr[j].pos  = i;
            g_pb.operate.listInfo.addrManager.ptr[j].offset = 0;
            j++;           
        }
        if(j >= g_pb.operate.listInfo.addrManager.amount)
        {
            break;
        }
    }
}
/****************************************************************************
 *  Function name : DCW_PB_addRecordToGroup
 *  Description   : 增加组记录
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : None
 *****************************************************************************/
void DCW_PB_addRecordToGroup(void)
{
    uint16      i;
    uint16      j;
    uint16      pos;

    if(g_pb.operate.listInfo.selectNumber == 0)
    {
        return;
    }

    for(i = 0; i < g_pb.operate.listInfo.selectNumber; i++)
    {
        SCI_ASSERT(g_pb.operate.listInfo.selectItemPtr[i] < g_pb.operate.listInfo.addrManager.amount);
        pos = g_pb.operate.listInfo.addrManager.ptr[g_pb.operate.listInfo.selectItemPtr[i]].pos;

        for(j = 0; j < g_pb.group.amount;j++)
        {
            if(g_pb.group.index[j] == g_pb.nv.recordPtr[pos].groupId)
            {
                break;
            }
        }

        SCI_ASSERT(j < g_pb.group.amount);
        SCI_ASSERT(g_pb.group.count[j] > 0);

        g_pb.group.count[j]--;
        g_pb.group.count[g_pb.group.index[g_pb.group.curIndex]]++;

        //animation start
        g_pb.operate.processing = TRUE;
        g_pb.nv.recordPtr[pos].groupId = g_pb.group.index[g_pb.group.curIndex];
        DCW_PB_WriteOneRecordToNv(& g_pb.nv.recordPtr[pos],FALSE);
        g_pb.operate.processing = FALSE;
        //animation end
    }
}
/****************************************************************************
 *  Function name : DCW_PB_delRecordFromGroup
 *  Description   : 删除组记录
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : None
 *****************************************************************************/
void DCW_PB_delRecordFromGroup(void)
{
    uint16      i;
    uint16      pos;

    if(g_pb.operate.listInfo.selectNumber == 0)
    {
        return;
    }

    for(i = 0; i < g_pb.operate.listInfo.selectNumber; i++)
    {
        SCI_ASSERT(g_pb.operate.listInfo.selectItemPtr[i] < g_pb.operate.listInfo.addrManager.amount);
        pos = g_pb.operate.listInfo.addrManager.ptr[g_pb.operate.listInfo.selectItemPtr[i]].pos;

        SCI_ASSERT(g_pb.group.count[g_pb.group.index[g_pb.group.curIndex]] > 0);

        g_pb.group.count[g_pb.group.index[g_pb.group.curIndex]]--;
        g_pb.group.count[0]++;

        g_pb.operate.processing = TRUE;
        g_pb.nv.recordPtr[pos].groupId = 0;
        DCW_PB_WriteOneRecordToNv(& g_pb.nv.recordPtr[pos],FALSE);
        g_pb.operate.processing = FALSE;
    }
}

/****************************************************************************
 *  Function name : DCW_PB_delOneGroup
 *  Description   : 删除组
 *  Param         : None
 *  Return        : None
 *  Author:       : *************
 *  Note          : None
 *****************************************************************************/
void DCW_PB_delOneGroup(void)
{
    uint16  i;
    uint16  offset;
    uint16  groupId;

    groupId = g_pb.group.index[g_pb.group.curIndex];

    for(i = g_pb.group.curIndex; i < g_pb.group.amount - 1; i++)
    {
        g_pb.group.index[i] = g_pb.group.index[i + 1];
    }

    g_pb.group.count[groupId] = 0;
    g_pb.group.groupName[groupId].len = 0;
    g_pb.group.curIndex = 0;

    g_pb.operate.processing = TRUE;
    for(i = 0; i < g_pb.nv.usedRecord; i++)
    {
        if(g_pb.nv.recordPtr[i].groupId == groupId)
        {
            g_pb.nv.recordPtr[i].groupId = 0;
            DCW_PB_WriteOneRecordToNv(& g_pb.nv.recordPtr[i],FALSE);
        }
    }

    offset = (uint16)(MMINV_PHONEBOOK_GROUP_0 + groupId - DCW_PB_MIN_GROUP_NUM);

    if(MNNV_WriteItem(offset, sizeof(T_PB_M_STRING), (void *)(&(g_pb.group.groupName[g_pb.group.curIndex]))) == MN_RETURN_FAILURE)
    {
    }
    else
    {
        //TRACE
    }

    g_pb.group.amount--;

    g_pb.operate.processing = FALSE;
}
/* ***************************************************************************
 *  Function name : DCW_PB_replaceGroupName
 *  Description   : 替换组名字
 *  Param         : *strInfo : 字符串
                    pos      : 替换哪一个组
 *  Return        : None
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_replaceGroupName(TEXTEDIT_STRING_INFO_T *strInfoPtr,uint8 pos)
{
    uint16   i;
    uint16   j;
    uint8    addr = 0xff;
    uint16   offset;

    if(pos == g_pb.group.amount)
    {   /* 新增组名 */
        for(i = DCW_PB_MIN_GROUP_NUM; i < DCW_PB_MAX_GROUP_NUM; i++)
        {
            if(g_pb.group.groupName[i].len == 0)
            {
                addr = i;
                break;
            }
        }
        g_pb.group.amount++;
    }
    else
    {
        addr = g_pb.group.index[pos];
    }

    SCI_ASSERT(addr >= DCW_PB_MIN_GROUP_NUM && addr < DCW_PB_MAX_GROUP_NUM);

    g_pb.group.groupName[addr].ucs2 = strInfoPtr->is_ucs2;
    g_pb.group.groupName[addr].len  = MIN(LISTBOX_STRING_MAX_NUM,strInfoPtr->str_len);
    SCI_MEMCPY(g_pb.group.groupName[addr].array,strInfoPtr->str_ptr,g_pb.group.groupName[addr].len);

    g_pb.group.index[pos] = addr;

    offset = (uint16)(MMINV_PHONEBOOK_GROUP_0 + addr - DCW_PB_MIN_GROUP_NUM);

    if(MNNV_WriteItem(offset, sizeof(T_PB_M_STRING), (void *)(&(g_pb.group.groupName[addr]))) == MN_RETURN_FAILURE)
    {
        SCI_ASSERT(FALSE);
    }
    else
    {        
    }
}
/****************************************************************************
 *  Function name : DCW_PB_getPhoneNumInNv
 *  Description   : 得到nv记录里的电话数
 *  Param         : None
 *  Return        : uint16  nv记录里的电话数
 *  Author:       : *************
 *  Note          : None
 *****************************************************************************/
uint16  DCW_PB_getPhoneNumInNv(void)
{
    uint16      i = 0;
    uint16      j = 0;
    uint16      count = 0;

    for(i = 0; i < g_pb.nv.usedRecord; i++)
    {
        for(j = 0; j < DCW_PB_MAX_NV_PHONE_NUM; j++)
        {
            if(g_pb.nv.recordPtr[i].num[j].len > 0)
            {
                count++;
            }
        }
    }

    return count;
}

/****************************************************************************
 *  Function name : DCW_PB_setBaseWinId
 *  Description   : Pb的窗口,基于g_pb.baseWinId之上
 *  Param         : winId   一个窗口Id
 *  Return        : None
 *  Author:       : *************
 *  Note          : None
 *****************************************************************************/
void DCW_PB_setBaseWinId(MMI_COMMON_WINDOW_ID_E winId)
{
    g_pb.baseWinId = winId;
}
/****************************************************************************
 *  Function name : DCW_PB_getBaseWinId
 *  Description   : Pb的窗口,基于g_pb.baseWinId之上
 *  Param         : None  
 *  Return        : MMI_COMMON_WINDOW_ID_E      一个窗口Id
 *  Author:       : *************
 *  Note          : None
 *****************************************************************************/
MMI_COMMON_WINDOW_ID_E DCW_PB_getBaseWinId(void)
{
    return g_pb.baseWinId;
}
/****************************************************************************
 *  Function name : DCW_PB_closeWinUntilOneWinId
 *  Description   : 关闭winId以上的所有窗口
 *  Param         : winId   一个窗口Id
 *  Return        : None
 *  Author:       : *************

⌨️ 快捷键说明

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