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

📄 pcsyn_application.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 4 页
字号:
{
	static PC_SMS_Info_dl*  SMS_info_dl;  
	int i=0;
	
	switch(cmd->cid2)
	{
	case PC_AppCID2_Read:
		info->flag = PC_IF_FLAGS_DATADL;
		//info->size_dlbuff = sizeof(PC_SMS_Content);
		return getShortMessage( info,cmd->type, cmd->index);
		break;
	case PC_AppCID2_Write:
		if(info->flag == PC_IF_FLAGS_CMD)
			info->flag = PC_IF_FLAGS_DATAUL;
		else
		{
//			PCSYN_TRACE_EVENT(("<<<<write_size_ulbuff:%d>>>>",info->size_ulbuff));
			T_PCSYN_MMI_SENDMMS_IND parameter;
			parameter.info = info;
			parameter.stype = cmd->type;
			parameter.rptype = cmd->index;
			P_PCSYN_MMI_SENDMMS_IND(&parameter);
			//return SendShortMessage(info,cmd->type,cmd->index);
			return PC_Error_WaitData;
		}	
		break;
	case PC_AppCID2_Delete:
		info->flag = PC_IF_FLAGS_DATADL;
		info->size_dlbuff = 0;
		return delshortmessage(info,cmd->type,cmd->index);
		break;
	case PC_AppCID2_Copy:
		if(info->flag == PC_IF_FLAGS_CMD)
			info->flag = PC_IF_FLAGS_DATAUL;
		else
		{
			return CopyShortMessage(info,cmd->type,cmd->index);
		}	
		break;
	case PC_AppCID2_Info://get shortmessage info
		info->flag = PC_IF_FLAGS_DATADL;
		info->size_dlbuff = sizeof(PC_SMS_Info_dl);
		SMS_info_dl = (PC_SMS_Info_dl *)info->pdata_dlbuff;

		
		SMS_info_dl->FlashMOtotal=sms_flash_count(MFW_SMS_FLASH_MO);
		SMS_info_dl->FlashMTtotal=sms_flash_count(MFW_SMS_FLASH_MT);
		//sms_message_list(MFW_SMS_ALL, list_data->sms_messages, MAX_MESSAGES)
//		SMS_info_dl->FlashSMStotal = FlashSMStotal;
		SMS_info_dl->SIMMOTotal= sms_message_count(MFW_SMS_MO);
		SMS_info_dl->SIMMTTotal=sms_message_count(MFW_SMS_MT);
//		SmsSend_get_config_data(&sms_parameter);
//		memcpy(SMS_info_dl->p0,sms_parameter.sc_addr,MAX_LEN+3);
              SMS_info_dl->MaxFlashNum=FLSAH_SMS_NUM;
              SMS_info_dl->MaxSIMNum=memory.total;//sim内做多可以存短消息的个数
		break;
	default:
		return App_Error_UnknownCID2;
	}
	return App_Error_NoError;
}

SHORT sms_flash_count (T_MFW_SMS_STAT stat)
{
	SHORT count;
	int i;

	count = 0;

	if( stat == MFW_SMS_FLASH_MO )
	{
	    for( i=0; i<FLSAH_SMS_NUM; i++ )
	    {
	        if( Flash_sms_messages[i].flag !=FALSE)
	        {
	            if(  Flash_sms_messages[i].state== MFW_SMS_STOR_UNSENT||
			 Flash_sms_messages[i].state== MFW_SMS_STOR_SENT)
			count++;
	        }
	    }
	    return count;
	}
	if( stat == MFW_SMS_FLASH_MT )
	{
	    for( i=0; i<FLSAH_SMS_NUM; i++ )
	    {
	        if( Flash_sms_messages[i].flag !=FALSE)
	        {
	            if(  Flash_sms_messages[i].state== MFW_SMS_MT)
			count++;
	        }
	    }
	    return count;
	}
	return 0;
}		

T_MFW sms_exists(SHORT index)
{
	SHORT i;
	static T_MFW_SMS_MSG msg_list[MAX_MESSAGES];

	memset(msg_list,0,sizeof(msg_list));
	sms_message_list(MFW_SMS_ALL,msg_list, MAX_MESSAGES);
	
	for( i=0; i<MAX_MESSAGES; i++ )
	{
		if( msg_list[i].index EQ index )
			return	MFW_SMS_OK;
	}
	return	MFW_SMS_FAIL;
}	

/******************************short message end*********************************/


/********************Call Record******************/
/**************关键变量FlashDCTbData**************/

unsigned int delCallRecord(DelRec *delCR_content,int count )
{
	int  k;
	DelRec  *buffer = delCR_content;
	short  index;
	short  ctype;
	BYTE  idx , n;
	
	for(k=0;k<count;k++,buffer++)
	{
		ctype=buffer->ctype;
		index=buffer->index;//删除索引从0开始 
		switch(ctype)
		{
		case CR_TYPE_LMN:
 			if(index>FlashDCTbData.LMNID-1) 
				return App_Error_DeleteError;
			n=FlashDCTbData.LMNID;
			memset((char*)FlashDCTbData.LMNTable[index],'\0',24);
			memset((char*)FlashDCTbData.LMNTime[index],'\0',21);
			memset((char*)FlashDCTbData.Mname[index],'\0',24);
			FlashDCTbData.MForNameFlag[index]=0;  
			for( idx=index;idx<n-1;idx++ )
			{
			    memcpy((char*)FlashDCTbData.LMNTable[idx],(char*)FlashDCTbData.LMNTable[idx+1],24);
			    memcpy((char*)FlashDCTbData.Mname[idx],(char*)FlashDCTbData.Mname[idx+1],24);  
			    FlashDCTbData.MForNameFlag[idx]=FlashDCTbData.MForNameFlag[idx+1];       
			    memcpy((char*)FlashDCTbData.LMNTime[idx],(char*)FlashDCTbData.LMNTime[idx+1],21);
			}
			memset((char*)FlashDCTbData.LMNTable[n-1],'\0',24);  
			memset((char*)FlashDCTbData.LMNTime[n-1],'\0',21);
			memset((char*)FlashDCTbData.Mname[n-1],'\0',24); 
			FlashDCTbData.MForNameFlag[n-1]=0; 
			FlashDCTbData.LMNID--;
			FlashDCTbData.LMNflag[n-1]=0;
			if (FlashDCTbData.MissedCallNum>0) 
				FlashDCTbData.MissedCallNum=FlashDCTbData.LMNID;
			flash_DCTbwrite();
			break;
		case CR_TYPE_LRN:
			if(index>FlashDCTbData.LRNID-1) 
				return App_Error_DeleteError;
			n=FlashDCTbData.LRNID;
			memset((char*)FlashDCTbData.LRNTable[index],'\0',24);
			memset((char*)FlashDCTbData.LRNTime[index],'\0',21);
			memset((char*)FlashDCTbData.Rname[index],'\0',24);
			FlashDCTbData.RForNameFlag[index]=0;  
			for( idx=index;idx<n-1;idx++ )
			{
			    memcpy((char*)FlashDCTbData.LRNTable[idx],(char*)FlashDCTbData.LRNTable[idx+1],24);
			    memcpy((char*)FlashDCTbData.Rname[idx],(char*)FlashDCTbData.Rname[idx+1],24);  
			    FlashDCTbData.RForNameFlag[idx]=FlashDCTbData.RForNameFlag[idx+1];       
			    memcpy((char*)FlashDCTbData.LRNTime[idx],(char*)FlashDCTbData.LRNTime[idx+1],21);
			}
			memset((char*)FlashDCTbData.LRNTable[n-1],'\0',24);  
			memset((char*)FlashDCTbData.LRNTime[n-1],'\0',21);
			memset((char*)FlashDCTbData.Rname[n-1],'\0',24); 
			FlashDCTbData.RForNameFlag[n-1]=0; 
			FlashDCTbData.LRNID--;
			flash_DCTbwrite();
			break;
		case CR_TYPE_LDN:
			if(index>FlashDCTbData.LDNID-1) 
				return App_Error_DeleteError;
			n=FlashDCTbData.LDNID;
			memset((char*)FlashDCTbData.LDNTable[index],'\0',24);
			memset((char*)FlashDCTbData.LDNTime[index],'\0',21);
			memset((char*)FlashDCTbData.Dname[index],'\0',24);
			FlashDCTbData.DForNameFlag[index]=0;  
			for( idx=index;idx<n-1;idx++ )
			{
			    memcpy((char*)FlashDCTbData.LDNTable[idx],(char*)FlashDCTbData.LDNTable[idx+1],24);
			    memcpy((char*)FlashDCTbData.Dname[idx],(char*)FlashDCTbData.Dname[idx+1],24);  
			    FlashDCTbData.DForNameFlag[idx]=FlashDCTbData.DForNameFlag[idx+1];       
			    memcpy((char*)FlashDCTbData.LDNTime[idx],(char*)FlashDCTbData.LDNTime[idx+1],21);
			}
			memset((char*)FlashDCTbData.LDNTable[n-1],'\0',24);  
			memset((char*)FlashDCTbData.LDNTime[n-1],'\0',21);
			memset((char*)FlashDCTbData.Dname[n-1],'\0',24); 
			FlashDCTbData.DForNameFlag[n-1]=0; 
			FlashDCTbData.LDNID--;
			flash_DCTbwrite();
			break;
		default:
			return App_Error_DeleteError;
		}
	}	
	return App_Error_NoError;
}


// 找到一条通话记录的信息,将其号码、姓名、时间置空,index从0到9
/*unsigned int delCallRecord(BYTE type, BYTE index)
{
	BYTE idx , n;
	
	switch(type)
	{
	case CR_TYPE_LMN:
		if(index>FlashDCTbData.LMNID-1) 
			return App_Error_NoFound;
		n=FlashDCTbData.LMNID;
		memset((char*)FlashDCTbData.LMNTable[index],'\0',24);
		memset((char*)FlashDCTbData.LMNTime[index],'\0',21);
		memset((char*)FlashDCTbData.Mname[index],'\0',24);
		FlashDCTbData.MForNameFlag[index]=0;  
		for( idx=index;idx<n-1;idx++ )
		{
		    memcpy((char*)FlashDCTbData.LMNTable[idx],(char*)FlashDCTbData.LMNTable[idx+1],24);
		    memcpy((char*)FlashDCTbData.Mname[idx],(char*)FlashDCTbData.Mname[idx+1],24);  
		    FlashDCTbData.MForNameFlag[idx]=FlashDCTbData.MForNameFlag[idx+1];       
		    memcpy((char*)FlashDCTbData.LMNTime[idx],(char*)FlashDCTbData.LMNTime[idx+1],21);
		}
		memset((char*)FlashDCTbData.LMNTable[n-1],'\0',24);  
		memset((char*)FlashDCTbData.LMNTime[n-1],'\0',21);
		memset((char*)FlashDCTbData.Mname[n-1],'\0',24); 
		FlashDCTbData.MForNameFlag[n-1]=0; 

		FlashDCTbData.LMNID--;
		flash_DCTbwrite();
		break;
	case CR_TYPE_LRN:
		if(index>=FlashDCTbData.LRNID-1) 
			return App_Error_NoFound;
		n=FlashDCTbData.LRNID;
		memset((char*)FlashDCTbData.LRNTable[index],'\0',24);
		memset((char*)FlashDCTbData.LRNTime[index],'\0',21);
		memset((char*)FlashDCTbData.Rname[index],'\0',24);
		FlashDCTbData.RForNameFlag[index]=0;  
		for( idx=index;idx<n-1;idx++ )
		{
		    memcpy((char*)FlashDCTbData.LRNTable[idx],(char*)FlashDCTbData.LRNTable[idx+1],24);
		    memcpy((char*)FlashDCTbData.Rname[idx],(char*)FlashDCTbData.Rname[idx+1],24);  
		    FlashDCTbData.RForNameFlag[idx]=FlashDCTbData.RForNameFlag[idx+1];       
		    memcpy((char*)FlashDCTbData.LRNTime[idx],(char*)FlashDCTbData.LRNTime[idx+1],21);
		}
		memset((char*)FlashDCTbData.LRNTable[n-1],'\0',24);  
		memset((char*)FlashDCTbData.LRNTime[n-1],'\0',21);
		memset((char*)FlashDCTbData.Rname[n-1],'\0',24); 
		FlashDCTbData.RForNameFlag[n-1]=0; 

		FlashDCTbData.LRNID--;
		flash_DCTbwrite();
		break;
	case CR_TYPE_LDN:
		if(index>=FlashDCTbData.LDNID-1) 
			return App_Error_NoFound;
		n=FlashDCTbData.LDNID;
		memset((char*)FlashDCTbData.LDNTable[index],'\0',24);
		memset((char*)FlashDCTbData.LDNTime[index],'\0',21);
		memset((char*)FlashDCTbData.Dname[index],'\0',24);
		FlashDCTbData.DForNameFlag[index]=0;  
		for( idx=index;idx<n-1;idx++ )
		{
		    memcpy((char*)FlashDCTbData.LDNTable[idx],(char*)FlashDCTbData.LDNTable[idx+1],24);
		    memcpy((char*)FlashDCTbData.Dname[idx],(char*)FlashDCTbData.Dname[idx+1],24);  
		    FlashDCTbData.DForNameFlag[idx]=FlashDCTbData.DForNameFlag[idx+1];       
		    memcpy((char*)FlashDCTbData.LDNTime[idx],(char*)FlashDCTbData.LDNTime[idx+1],21);
		}
		memset((char*)FlashDCTbData.LDNTable[n-1],'\0',24);  
		memset((char*)FlashDCTbData.LDNTime[n-1],'\0',21);
		memset((char*)FlashDCTbData.Dname[n-1],'\0',24); 
		FlashDCTbData.DForNameFlag[n-1]=0; 

		FlashDCTbData.LDNID--;
		flash_DCTbwrite();
		break;
	default:
		return App_Error_IllegalCmdData;
	}
	return App_Error_NoError;
}
*/

/***********************************************/
// 得到一条通话记录的信息,将其放入cr_content.content
unsigned int getCallRecord(PC_CR_Content * cr_content, BYTE type, BYTE index)
{
	BYTE *buffer = cr_content->content;
	BYTE *table, *name, *time;
//	BYTE i = 0;

	   
	switch(type)
	{
	case CR_TYPE_LMN:
		if(index>FlashDCTbData.LMNID-1) 
			return App_Error_InfoError;
		table = (BYTE *)FlashDCTbData.LMNTable[index];
		name = (BYTE *)FlashDCTbData.Mname[index];
		time  = (BYTE *)FlashDCTbData.LMNTime[index];
		break;
	case CR_TYPE_LRN:
		if(index>FlashDCTbData.LRNID-1) 
			return App_Error_InfoError;
		table = (BYTE *)FlashDCTbData.LRNTable[index];
		name = (BYTE *)FlashDCTbData.Rname[index];
		time  = (BYTE *)FlashDCTbData.LRNTime[index];
		break;
	case CR_TYPE_LDN:
		if(index>FlashDCTbData.LDNID-1) 
			return App_Error_InfoError;
		table = (BYTE *)FlashDCTbData.LDNTable[index];
		name = (BYTE *)FlashDCTbData.Dname[index];
		time  = (BYTE *)FlashDCTbData.LDNTime[index];
		break;
	default:
		return App_Error_IllegalCmdData;
	}
	

	memcpy(buffer, table, 24);
	buffer += 24;
	
	memcpy(buffer,name, 24);
	buffer += 24;
	
	memcpy(buffer,time, 21);

	return App_Error_NoError;
	
}//

unsigned int pc_interface_CR(PC_Interface_Info * info, PC_App_Cmd_CR *cmd)
{
	static PC_CR_Info_dl*  cr_info_dl;  
	BYTE *table, * name, *time;
   
	switch(cmd->cid2)
	{
		case PC_AppCID2_Read:
			info->flag = PC_IF_FLAGS_DATADL;
			info->size_dlbuff = sizeof(PC_CR_Content);
			return getCallRecord((PC_CR_Content *) info->pdata_dlbuff,cmd->type, cmd->index);
			break;
		case PC_AppCID2_Write:
			return App_Error_WriteError;		
			break;
		case PC_AppCID2_Delete:
			if(info->flag == PC_IF_FLAGS_CMD)
				info->flag = PC_IF_FLAGS_DATAUL;
			else
				{
					if (info->size_ulbuff>0)
						return delCallRecord((DelRec *)info->pdata_ulbuff,((int)info->size_ulbuff)/4);
				}
			break;
		case PC_AppCID2_Info://get call record info
			info->flag = PC_IF_FLAGS_DATADL;
			info->size_dlbuff = sizeof(PC_CR_Info_dl);
			cr_info_dl = (PC_CR_Info_dl *)info->pdata_dlbuff;
			cr_info_dl->LMNID = FlashDCTbData.LMNID;
			cr_info_dl->LRNID = FlashDCTbData.LRNID;
			cr_info_dl->LDNID = FlashDCTbData.LDNID;
			break;
		default:
			return App_Error_UnknownCID2;
	}
	return App_Error_NoError;
}


/**************Call Record end********************/

/******************Target端接口*******************/

unsigned int pc_interface(PC_Interface_Info * info)
{
	memset(&pc_waitdata, 0 ,sizeof(pc_waitdata) );
	
	PCSYN_TRACE_EVENT(("pc_interface: %d, %d, %d", info->size_cmd, info->size_dlbuff, info->size_ulbuff));
	//info->size_dlbuff = 0;
	switch(info->flag)
	{ 
	case PC_IF_FLAGS_CMD:
		memset(appcmd.data, 0 ,sizeof(appcmd.data) );
		appcmd.size = info->size_cmd;
			memcpy(appcmd.data, info->pdata_cmd, info->size_cmd);
	case PC_IF_FLAGS_DATAUL:
		switch(appcmd.data[0])
		{
			case PC_AppCID1_File://file cmd
				info->status = pc_interface_file(info, (PC_App_Cmd_File*) appcmd.data);
				break;
			case PC_AppCID1_PHB://phone book
				info->status = pc_interface_PHB(info, (PC_App_Cmd_PHB*) appcmd.data);
				break;
			case PC_AppCID1_SMS://Short message
				info->status = pc_interface_SMS(info, (PC_App_Cmd_SMS*) appcmd.data);
				break;
			case PC_AppCID1_CR://call record
				info->status = pc_interface_CR(info, (PC_App_Cmd_CR*) appcmd.data);
				break;
			default:
				info->status = App_Error_UnknownCID1;
				break;
		}
		
		break;
	default:
		//error flag 
		break;
				
	}
	return info->status;
}




















⌨️ 快捷键说明

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