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

📄 phonebook.cpp

📁 mtk simulator v2 new source code
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*
 *	Copyright Notice
 *	?2002 - 2003, Pixtel Communications, Inc., 1489 43rd Ave. W.,
 *	Vancouver, B.C. V6M 4K8 Canada. All Rights Reserved.
 *  (It is illegal to remove this copyright notice from this software or any
 *  portion of it)
 *
*/
/**************************************************************
	FILENAME	: PhoneBook.cpp
  	PURPOSE		: PhoneBook Plugins for Network Simulator
	REMARKS		: nil
	AUTHOR		: Pranav, Gurinder
	DATE		: Jun 16,03
**************************************************************/

/* Header files require for PhoneBook.cpp */
#include "stdafx.h"
#include "string.h"
#include "stdlib.h"
#include "PhoneBookAPI.h"
#include "MemAllocator.h"

/*	Global Variable Declearation	*/
U16 gTotalPbookEntry = 0;
U16 gTotalPbookEntryMSISDN = 0;
U16 gTotalPbookEntrySim=0;
U16 gTotalFDNEntries=0;
U16 gTotalPbookEntryPhone=0;
U16 gTotalPbookEntrySDN = 0;

/* Global Structure Decleartion		*/
PHB_STORAGE_LOCATION_ENUM PreferredStorageLocation = MMI_SIM;
PHB_ENTRY_STRUCT phbEntries[MAX_PB_ENTRIES];
PHB_ENTRY_STRUCT FDNEntries[MAX_PB_ENTRIES];
PHB_ENTRY_STRUCT phbEntriesSim[MAX_PB_ENTRIES_SIM];
PHB_ENTRY_STRUCT phbEntriesPhone[MAX_PB_ENTRIES_PHONE];

/* Global Message Stucture Declearation	*/
MSG_PHB_GET_ENTRY_BY_INDEX_RSP_STRUCT *greadByIndexRsp = NULL;
MSG_PHB_GET_ENTRY_BY_NAME_RSP_STRUCT *searchEntryRsp = NULL;

/* Global File Pointer to store PhoneBook Data */
FILE *pb;
void * gBuffer = NULL;

/*****************************************************************************
* FUNCTION
*	HandleWriteEntryRequest
* DESCRIPTION
*	This Plugin API write the incoming phone book entry request to phonebook
*	database file. Incase number length is increased proper error is returned.
* PARAMETERS
*	void
* RETURNS
*	void * - MSG_PHB_SET_ENRTY_RSP_STRUCT is cast into void * to return to MMI
*****************************************************************************/

void *HandleWriteEntryRequest() {
	MSG_PHB_SET_ENRTY_REQ_STRUCT *setEntryReq = (MSG_PHB_SET_ENRTY_REQ_STRUCT*)gBuffer;
	MSG_PHB_SET_ENRTY_RSP_STRUCT *setEntryRsp;
	U16 i;

	setEntryRsp = (MSG_PHB_SET_ENRTY_RSP_STRUCT *)CMemAllocator::MyMallocDataPtr(sizeof(MSG_PHB_SET_ENRTY_RSP_STRUCT));
	memset( setEntryRsp, '\0', sizeof(MSG_PHB_SET_ENRTY_RSP_STRUCT) );
	setEntryRsp->result.flag = 0;	//OK
	
	/*Check the Phone Number Length for Maximum Value*/
	if((strlen((const char*)setEntryReq->list.tel.number) > 21) && (setEntryReq->list.storage == MMI_SIM)) {
		setEntryRsp->result.flag = 1;
		setEntryRsp->result.cause = 2561;
		return (void *)setEntryRsp;
	}

	/*If Phone Number Save Request is for FDN*/
	if(setEntryReq->type == MMI_PHB_FDN) 
	{
		if (setEntryReq->list.record_index==65535) 
		{
			if (setEntryReq->list.storage==1) 
			{	
				if (gTotalFDNEntries==0) 
				{
					memcpy((void *)&FDNEntries[gTotalFDNEntries], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
					FDNEntries[gTotalFDNEntries].index = 1;
 					FDNEntries[gTotalFDNEntries].record_index = 1;
 					memcpy((void *)setEntryRsp->list, (void *)&FDNEntries[gTotalFDNEntries], sizeof(setEntryRsp->list[0]));
				}
				else if (setEntryReq->list.index == 65535 && gTotalFDNEntries> 0)  
				{
					memcpy((void *)&FDNEntries[gTotalFDNEntries], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
					FDNEntries[gTotalFDNEntries].index = FDNEntries[gTotalFDNEntries - 1].index + 1;
 					FDNEntries[gTotalFDNEntries].record_index  = FDNEntries[gTotalFDNEntries - 1].record_index + 1;
 					memcpy((void *)setEntryRsp->list, (void *)&FDNEntries[gTotalFDNEntries], sizeof(setEntryRsp->list[0]));
				}
				gTotalFDNEntries++;
				WriteToFile(MMI_PHB_FDN);
			}
		}
		else 
		{
			if (setEntryReq->list.storage==1) 
			{
				i=setEntryReq->list.index;
				i--;
				memcpy((void *)&FDNEntries[i], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
				memcpy((void *)setEntryRsp->list, (void *)&FDNEntries[i], sizeof(setEntryRsp->list[0]));
				WriteToFile(MMI_PHB_FDN);
			}
		}
	}

	/*If Phone Number Save Request Is For MSISDN*/
	else if(setEntryReq->type == MMI_PHB_MSISDN) {	
		for (U16 i = 0; i < gTotalPbookEntry; i++) {
			if (setEntryReq->list.index ==  phbEntries[i].index)
			break; 
		}
			
		strcpy((S8 *)phbEntries[i].alpha_id.name, (S8 *)setEntryReq->list.alpha_id.name);
		phbEntries[i].alpha_id.name_length = setEntryReq->list.alpha_id.name_length;
		strcpy((S8 *)phbEntries[i].tel.number, (S8 *)setEntryReq->list.tel.number);
		phbEntries[i].tel.length = setEntryReq->list.tel.length;
		WriteToFile(4);
	}

	/*If Entry Save Request is for Phone Book*/
	else if(setEntryReq->type == MMI_PHB_PHONEBOOK) {
		if (setEntryReq->list.record_index == 65535) {
			/*If Request Storage Type Is SIM*/
			if (setEntryReq->list.storage == MMI_SIM) {
				/*If Sim Entries Reaches To Its Maximum Value*/
				if(gTotalPbookEntrySim  == MAX_PB_ENTRIES_SIM) {
					setEntryRsp->result.flag = 1;
					setEntryRsp->result.cause = MMI_PHB_CAUSE_CAPACITY_EXCEEDED;
					return (void *)setEntryRsp;
				}
				/*If First Entry Intilize the Index And Record Index*/
				if (gTotalPbookEntrySim==0) {
					memcpy((void *)&phbEntriesSim[gTotalPbookEntrySim], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
					phbEntriesSim[gTotalPbookEntrySim].index = 1;
 					phbEntriesSim[gTotalPbookEntrySim].record_index = 1;
 					memcpy((void *)setEntryRsp->list, (void *)&phbEntriesSim[gTotalPbookEntrySim], sizeof(setEntryRsp->list[0]));
				}
				/*Increment The Index And Record Index*/
				else if (setEntryReq->list.index == 65535 && gTotalPbookEntrySim> 0) {
					memcpy((void *)&phbEntriesSim[gTotalPbookEntrySim], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
					phbEntriesSim[gTotalPbookEntrySim].index = phbEntriesSim[gTotalPbookEntrySim - 1].index + 1;
 					phbEntriesSim[gTotalPbookEntrySim].record_index  = phbEntriesSim[gTotalPbookEntrySim - 1].record_index + 1;
 					memcpy((void *)setEntryRsp->list, (void *)&phbEntriesSim[gTotalPbookEntrySim], sizeof(setEntryRsp->list[0]));
				}
				gTotalPbookEntrySim++;
				/*Write The Phone Book Data Base to File for SIM*/
				WriteToFile(MMI_SIM);
			}
			/*If Request Storage Type Is Phone*/
			if (setEntryReq->list.storage == MMI_NVRAM) {	
				/*If Phone Entries Reaches To Its Maximum Value*/
				if(gTotalPbookEntryPhone  == MAX_PB_ENTRIES_PHONE) {
					setEntryRsp->result.flag = 1;
					setEntryRsp->result.cause = MMI_PHB_CAUSE_CAPACITY_EXCEEDED;
					return (void *)setEntryRsp;
				}
				/*If First Entry Intilize the Index And Record Index*/
				if (gTotalPbookEntryPhone==0) {
					memcpy((void *)&phbEntriesPhone[gTotalPbookEntryPhone], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
					phbEntriesPhone[gTotalPbookEntryPhone].index = 1;
 					phbEntriesPhone[gTotalPbookEntryPhone].record_index = 1;
 					memcpy((void *)setEntryRsp->list, (void *)&phbEntriesPhone[gTotalPbookEntryPhone], sizeof(setEntryRsp->list[0]));
				}	
				/*Increment The Index And Record Index*/
				else if (setEntryReq->list.index == 65535 && gTotalPbookEntryPhone> 0) {
					memcpy((void *)&phbEntriesPhone[gTotalPbookEntryPhone], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
					phbEntriesPhone[gTotalPbookEntryPhone].index = phbEntriesPhone[gTotalPbookEntryPhone - 1].index + 1;
 					phbEntriesPhone[gTotalPbookEntryPhone].record_index  = phbEntriesPhone[gTotalPbookEntryPhone - 1].record_index + 1;
 					memcpy((void *)setEntryRsp->list, (void *)&phbEntriesPhone[gTotalPbookEntryPhone], sizeof(setEntryRsp->list[0]));
				}
				gTotalPbookEntryPhone++;
				/*Write The Phone Book Data Base to File for Phone*/
				WriteToFile(MMI_NVRAM);
			}
		}
		else {
			/*If new entry is for SIM*/
			if (setEntryReq->list.storage == MMI_SIM) {
				i=setEntryReq->list.record_index;
				i--;
				memcpy((void *)&phbEntriesSim[i], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
				memcpy((void *)setEntryRsp->list, (void *)&phbEntriesSim[i], sizeof(setEntryRsp->list[0]));
				WriteToFile(MMI_SIM);
			}
			/*If new entry is for phone*/
			if (setEntryReq->list.storage == MMI_NVRAM) {	
				i=setEntryReq->list.record_index;
				i--;
				memcpy((void *)&phbEntriesPhone[i], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
				memcpy((void *)setEntryRsp->list, (void *)&phbEntriesPhone[i], sizeof(setEntryRsp->list[0]));
				WriteToFile(MMI_NVRAM);
			}
		}
	}
	return (void *)setEntryRsp;
}

/*****************************************************************************
* FUNCTION
*	HandleSearchEntryRequest
* DESCRIPTION
*	This API search the phone book data base for a specific search expression.
* PARAMETERS
*	void
* RETURNS
*	void * -	MSG_PHB_GET_ENTRY_BY_NAME_RSP_STRUCT structure holds the entry 
*				corresponding 
*****************************************************************************/

void *HandleSearchEntryRequest() {
	/*Cast The Incoming Message to Name Req Structure*/
	MSG_PHB_GET_ENTRY_BY_NAME_REQ_STRUCT *searchEntryReq = (MSG_PHB_GET_ENTRY_BY_NAME_REQ_STRUCT*)gBuffer;
	S8 searchName[30];
	U16 i, searchCount;

	strcpy(searchName, (S8 *)searchEntryReq->name.name);
	searchEntryRsp = (MSG_PHB_GET_ENTRY_BY_NAME_RSP_STRUCT *)CMemAllocator::MyMallocDataPtr(sizeof(MSG_PHB_GET_ENTRY_BY_NAME_RSP_STRUCT));
	memset( searchEntryRsp, '\0', sizeof(MSG_PHB_GET_ENTRY_BY_NAME_RSP_STRUCT) );
	
	/*Search The Sub Name In Phone Book Database For Sim*/
	for (i = 0, searchCount = 0; i < gTotalPbookEntrySim; i++) {
		if (strstr((S8 *)phbEntriesSim[i].alpha_id.name, searchName)) {
			searchEntryRsp->list[searchCount] = phbEntriesSim[i];
			/*Increment The Count On Search Sucess*/
			searchCount++;
		}
	}
	/*Search The Sub Name In Phone Book Database For Phone*/
	for (i = 0; i < gTotalPbookEntryPhone; i++) {
		if (strstr((S8 *)phbEntriesPhone[i].alpha_id.name, searchName)) {
			searchEntryRsp->list[searchCount] = phbEntriesPhone[i];
			/*Increment The Count On Search Sucess*/
			searchCount++;
		}
	}

	/*If search is sucessfull fill the return structure*/
	if (searchCount) {
		searchEntryRsp->no_list = searchCount;
		searchEntryRsp->result.flag = 0;
		searchEntryRsp->result.cause = 0;
		S8 str[20];
		sprintf(str, "%d entries found", searchCount);
	}
	/*Else fill the return structure with Error Value*/
	else {
		searchEntryRsp->result.flag = 1;
		searchEntryRsp->result.cause =1;
	}
	return (void *)searchEntryRsp;
}

/*****************************************************************************
* FUNCTION
*	HandleDeleteEntryRequest
* DESCRIPTION
*	This API Delete The PhoneBook Entry Depending Upon The Index/Record Index
*	Value.
* PARAMETERS
*	void
* RETURNS
*	void * -	MSG_PHB_DELETE_ENTRY_RSP_STRUCT structure pointer hold delete 
*				request response for MMI.
*****************************************************************************/

void *HandleDeleteEntryRequest() {
	U16 i,j;
	MSG_PHB_DELETE_ENTRY_REQ_STRUCT* deleteEntryReq = (MSG_PHB_DELETE_ENTRY_REQ_STRUCT*)gBuffer;
	MSG_PHB_DELETE_ENTRY_RSP_STRUCT* deleteEntryRsp = NULL;

	/* If the request is for the FDN number */
	if(deleteEntryReq->type == MMI_PHB_FDN) {
		for (i = 0; i < gTotalFDNEntries; i++) {
			if (FDNEntries[i].index ==  deleteEntryReq->index)
				break;
		}
		for (j = i; j < gTotalFDNEntries - 1; j++)  FDNEntries[j] = FDNEntries[j+1];
		/*Reduce The Number Of Entries*/
		gTotalFDNEntries--;
		/*Write The Update Data To File*/
		WriteToFile(MMI_PHB_FDN);
	}
	/*If Delete Request Is For The Phone Book*/
	else {
		/*If Request is not for delete all*/
		if (deleteEntryReq->del_all == 0) {
			/*If Storage is for Sim*/
			if (deleteEntryReq->storage==1) {	

⌨️ 快捷键说明

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