www.pudn.com > HanMsg.rar > Func.cpp


// Func.cpp: implementation of the Func class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "Msg.h" 
#include "Func.h" 
#include "MsgDlg.h" 
#include "Warning.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
Func::Func() 
{ 
 
} 
Func::~Func() 
{ 
 
} 
//CMsgDlg::CommInit()没有问题 
void CMsgDlg::CommInit() 
{ 
 
	SetCommMask (hPort, EV_RXCHAR); 
	//设置 
	COMMTIMEOUTS timeout; 
	timeout.ReadIntervalTimeout=0; 
	timeout.ReadTotalTimeoutConstant=0; 
	timeout.ReadTotalTimeoutMultiplier=0; 
	timeout.WriteTotalTimeoutConstant=0; 
	timeout.WriteTotalTimeoutMultiplier=0; 
	//设 
	SetCommTimeouts(hPort,&timeout); 
	DCB PortDCB; 
	PortDCB.DCBlength =sizeof( DCB ); 
	// 
	GetCommState (hPort, &PortDCB); 
	 
    PortDCB.BaudRate = 9600;               
	//PortDCB.BaudRate =115200;          
	PortDCB.fBinary = FALSE;    
	//PortDCB.fBinary = TRUE;  //05/11/22 
	PortDCB.ByteSize = 8;                
	PortDCB.Parity = NOPARITY;            
	PortDCB.StopBits = ONESTOPBIT;        
	// 
	SetCommState(hPort,&PortDCB); 
	SetupComm(hPort,1024,1024); 
	PurgeComm(hPort,PURGE_TXCLEAR|PURGE_RXCLEAR); 
	 
} 
void CMsgDlg::SendAtCommand(TCHAR cmd[],int length) 
 
{ 
	 
	DWORD dwBytesWrite;//typedef unsigned long DWORD ; typedef unsigned short WORD; 
	char buf[13];//问题,无法将LENGTH传递给BUF; 
 
	int aa=WideCharToMultiByte(CP_ACP,NULL,cmd,-1,buf,length,NULL,NULL); 
 
 
	WriteFile(hPort,buf,length,&dwBytesWrite,NULL); 
	//AfxMessageBox(TEXT("SendAtCommand SUCCESS!\r\nYES")); 
} 
void CMsgDlg::ModuleInit() 
{ 
 
	 
	TCHAR At[5]=TEXT("at\r\n"); 
 
	SendAtCommand(At,5); 
	Sleep(200);//200->1000 
	ReadData();	 
 
	if(m_strRXData!="") 
	{ 
  
		CString a=m_strRXData.Right(4); 
 
	 
		if(a.Left(2)!="OK") 
		{ 
			//AfxMessageBox(TEXT("初始化短信模块失败!\n请检查设备是否连接正常!\nError at")); 
			CWarning warning; 
			warning.DoModal(); 
		//	SendMessage(WM_CLOSE); 
			PostQuitMessage(1); 
		 
		} 
		else 
		{ 
	 
		} 
	} 
	else 
	{ 
		 
		CWarning warningg; 
		warningg.DoModal(); 
		//SendMessage(WM_CLOSE); 
		PostQuitMessage(1); 
	} 
	m_strRXData.Empty();//清空m_strRXData 
 
//Sleep(200); 
	TCHAR SSMSS[13]=TEXT("at^ssmss=1\r\n");//ort wchar_t; 
 
	SendAtCommand(SSMSS,13); 
	Sleep(200); 
	ReadData();	  
//MessageBox(m_strRXData,TEXT("SSMSS m_strRXData"),MB_OK);//OK 
	m_strRXData.Empty(); 
//Sleep(500); 
	TCHAR CPMS[13]=TEXT("at+cpms=sm\r\n"); 
	//MessageBox(At,MB_OK);//显示at 
	SendAtCommand(CPMS,13); 
	Sleep(4000);//4000->1000 
	ReadData(); 
//MessageBox(m_strRXData,TEXT("at+cpms=sm"),MB_OK); 
	m_strRXData.Empty(); 
	//2006/3/31 
	TCHAR Atcmgl0[12]=TEXT("at+cmgl=0\r\n");//a读短信  
	SendAtCommand(Atcmgl0,12); 
	//AfxMessageBox(TEXT("成功向串口发送at+cmgl=0\r\n")); 
	Sleep(10000);//6000->1000,2006/3/21 
	ReadData(); 
//MessageBox(m_strRXDt+cmgl=0后读到的"),MB_OK);//atus 0x30900 
	MsgCutProcessIni("at+cmgl=0","未读"); 
	//OnSaveIni(); 
	m_strRXData.Empty(); 
 
	SetTimer(1,6000,NULL); 
 
} 
////////////////////////////////////////////////////////////// 
void CMsgDlg::MsgProcess() 
{ 
 
	MsgCutProcess("at+cmgl=0","未读"); 
	MsgCutProcess("at+cmgl=1","已读"); 
} 
 
void CMsgDlg::MsgCutProcess(CString str,CString status) 
{ 
 
	iGet_Cmgl0_Position=m_strRXData.Find(str); 
 
	CString C; 
	//CString d=TEXT("0"); 
	C=m_strRXData.Mid(iGet_Cmgl0_Position+12,5); 
 
 
	int Position=m_strRXData.Find(L"+CMGL",iGet_Cmgl0_Position); 
	//int Pos_IndexForDel;										 
	while(C=="+CMGL") 
	{ 
 
		MsgPosition=m_strRXData.Find(L"\r\n",Position)+2;//始位置 
CString kk; 
kk.Format (_T("%s%d"),kk,MsgPosition,MB_OK); 
 
		MsgChange(MsgPosition,status); 
 
		//2006/3/30 
		 
		TCHAR CMGD[12]=TEXT("at+cmgd=1\r\n");// 
		SendAtCommand(CMGD,12); 
		Sleep(200); 
		 
 
 
		///* 
		Position=m_strRXData.Find(L"\r\n",MsgPosition)+2; 
		C=m_strRXData.Mid(Position,5); 
	} 
} 
 
void CMsgDlg::MsgChange(int Position,CString str) 
{ 
	m_read.Empty(); 
//MessageBox(m_read,TEXT("MsgChange=m_read"),MB_OK); 
	Sms_set=m_strRXData.Mid(MsgPosition,4); 
//MessageBox(Sms_set,TEXT("Sms_set"),MB_OK);//0891  0891 
 
	Sms_center=m_strRXData.Mid(MsgPosition+4,14); 
	//683108705505F0 683108705505F0 
//MessageBox(Sms_center,TEXT("Sms_center"),MB_OK); 
 
	Sms_sender=m_strRXData.Mid(MsgPosition+24,14); 
 
 
	Sms_sendtime=m_strRXData.Mid(MsgPosition+42,6);//发送3 
//MessageBox(Sms_sendtime,TEXT("Sms_sendtime"),MB_OK); 
	Sms_sendtimee=m_strRXData.Mid(MsgPosition+48,4); 
//MessageBox(Sms_sendtimee,TEXT("Sms_sendtimee"),MB_OK); 
	Sms_contentlong=m_strRXData.Mid(MsgPosition+56,2);//08 
 
	long h=Change(Sms_contentlong);//CString Sms_contentlong; 
 
	int o=h*2;//一 
	Sms_content=m_strRXData.Mid(MsgPosition+58,o);//CString Sms_content 
//MessageBox(Sms_content,TEXT("Sms_content"),MB_OK); 
	m_read+=ParityChange(Sms_sender,10)+TEXT("  "); 
 
	m_read+=str+TEXT(" "); 
 
	m_read+=ParityChange(Sms_center,10)+TEXT("  "); 
 
	m_read+=TimeChange(Sms_sendtime)+TEXT(" "); 
//M3800755500 15/12/30,10:21  
	m_read+=TimeChange(Sms_sendtimee)+TEXT(" "); 
	 
 
	CString myindex=_T("01"); 
	m_read+=myindex; 
 
	m_read+=TEXT(" "); 
 
	UniCode2GB(Sms_content);// 
 
	OnSave(); 
 
//	m_read+=TEXT("\r\n"); 
} 
                                           //out=8613570890317 
CString CMsgDlg::ParityChange(CString str, int num) 
{ 
	CString Out; 
	int even; 
	for(even=2;even<=num;even=even+2)//2006/n=2 
	{ 
		Out+=str[even+1]; 
		Out+=str[even]; 
	} 
	return Out+=str[num+3];// 
} 
 
 
 
CString CMsgDlg::TimeChange(CString str)//2006/1/6 
{ 
	CString Out; 
	if(int i=str.GetLength()>5) 
	{ 
		//CString Out; 
		Out+=str[1]; 
		Out+=str[0]; 
		Out+="."; 
		Out+=str[3]; 
		Out+=str[2]; 
		Out+="."; 
		Out+=str[5]; 
		Out+=str[4]; 
	} 
	else 
	{ 
		 
		Out+=str[1]; 
		Out+=str[0]; 
		Out+=":"; 
		Out+=str[3]; 
		Out+=str[2]; 
	} 
	 
	return Out; 
} 
void CMsgDlg::UniCode2GB(CString str) 
{ 
	unsigned short *buf; 
	CString cut; 
	unsigned short c,x,q; 
	int g,z; 
	//long g,z; 
	c=0x0000; 
	x=0x0000; 
	q=0x0000; 
	long f=Change(Sms_contentlong); 
 
	 
	long ff=68-f/2; 
CString kkk; 
kkk.Format (TEXT("%s%ld"),kkk,ff); 
 
	long m=f*2-4; 
 
	for(z=0;z<=m;z=z+4) 
	{ 
		cut=str.Mid(z,4); 
 
		buf=cut.GetBuffer(cut.GetLength ());//6DF1 
 
		int l=16; 
	 
		for(g=0;g<=3;g++) 
		{ 
			if((buf[g]>=_T('0'))&&(buf[g]<=_T('9'))) 
			{ 
		 
				c=c+c|0x0000; 
			// 
				c=buf[g]-0x30; 
		 
				l=l-4; 
				c=c<='0'))  ll+=str[i]-'0'; 
      else if((str[i]<='F') && (str[i]>='A'))  ll+=str[i]-'A'+10; 
      else if((str[i]<='f') && (str[i]>='a'))  ll+=str[i]-'a'+10; 
      else return -1;   
   } 
   return ll; 
} 
 
void CMsgDlg::WriteFilecmgl0() 
{ 
	m_num1=2*m_read.GetLength(); 
	CFile file1; 
	file1.Open(TEXT("SaveMsg.txt"),CFile::modeWrite); 
	file1.SeekToEnd(); 
	file1.Write(m_read,m_num1); 
	file1.Close(); 
} 
 
 
void CMsgDlg::OnSave()  
{ 
 
	//m_num=2*m_read.GetLength(); 
	CString existdocd,y; 
	DWORD FileLen,FileLen1; 
	TCHAR data[4096]; 
	int leN=0; 
	TCHAR BUF; 
	HANDLE file; 
	file=CreateFile (TEXT("\\Storage Card\\SaveMsg.txt"), GENERIC_READ, FILE_SHARE_WRITE , NULL, OPEN_EXISTING, 0, NULL); 
	BY_HANDLE_FILE_INFORMATION bhfi;//bhORMATION的变量 
	GetFileInformationByHandle(file,&bhfi); 
	FileLen=bhfi.nFileSizeLow; 
//MessageBox((CString)FileLen,TEXT("FileLen"),MB_OK);//点击方框 
	for(DWORD len=FileLen;len>0;len-=2) 
	{ 
		ReadFile(file,&BUF,2,&FileLen1,NULL);//f创建的文件 
		data[leN] = BUF;//上面定义TCHAR BUF 
 
		data[leN+1] = '\0'; 
		leN++; 
	} 
 
	TCHAR *abc=data; 
	existdocd=abc; 
 
	long posst=existdocd.Find(_T("\r\n")); 
	posst+=2; 
	CString left12=existdocd.Left(posst); 
 
	while(2*left12.GetLength()>40) 
	{ 
	 
		CString shiyanm=left12.Mid(44,2); 
		int m1=_ttoi(shiyanm); 
		m1+=1; 
		CString newindexy; 
		newindexy.Format(_T("%s%d"),newindexy,m1);//"05" 
		if(m1<10) 
		{ 
			newindexy=TEXT("0")+newindexy; 
		} 
		else 
		{ 
			newindexy=newindexy; 
		} 
		CString poiu1=left12.Left(44);// 
		CString poiu2=left12.Mid(44,2);// 
		CString poiu3=left12.Mid(46,118);// 
		left12=poiu1+newindexy+poiu3; 
 
		m_read+=left12; 
	//MessageBox(m_read,TEXT("OnSave() m_read"),MB_OK); 
		left12=existdocd.Mid(posst,119); 
 
		posst+=119; 
		 
	} 
 
	UpdateData(0); 
	CloseHandle(file); 
	CFile::Remove(TEXT("\\Storage Card\\SaveMsg.txt")); 
	int m_num2=2*m_read.GetLength(); 
 
	CFile file1; 
	file1.Open(TEXT("\\Storage Card\\SaveMsg.txt"),CFile::modeCreate|CFile::modeWrite); 
	file1.Write(m_read,m_num2); 
	file1.Close(); 
 
	CString ss=openfile(); 
 
	BOOL a=m_ListCtrl.DeleteAllItems(); 
	UpdateData(FALSE); 
	signjjj=0; 
	pagesign=0; 
	DisplayListItems(); 
} 
 
void CMsgDlg::MsgCutProcessIni(CString str, CString status) 
{ 
//MessageBox(str,TEXT("enter MsgCutProcessIni str"),MB_OK); 
	iGet_Cmgl0_Position=m_strRXData.Find(str); 
	CString C; 
	//CString d=TEXT("0"); 
	C=m_strRXData.Mid(iGet_Cmgl0_Position+12,5); 
//MessageBox(C,TEXT("C"),MB_OK); 
	int Position=m_strRXData.Find(L"+CMGL",iGet_Cmgl0_Position); 
	//int Pos_IndexForDel; 
	while(C=="+CMGL") 
	{ 
 
		MsgPosition=m_strRXData.Find(L"\r\n",Position)+2;//Position是260 
		MsgChangeIni(MsgPosition,status);	 
	 
		Position=m_strRXData.Find(L"\r\n",MsgPosition)+2; 
		C=m_strRXData.Mid(Position,5); 
	} 
	TCHAR CPMSA[13]=TEXT("at+cpms=sm\r\n"); 
	SendAtCommand(CPMSA,13); 
	Sleep(500);//4000->200 
	TCHAR CMGDA[12]=TEXT("at+cmgd=1\r\n"); 
	SendAtCommand(CMGDA,12); 
	Sleep(500); 
 
	TCHAR CPMSB[13]=TEXT("at+cpms=sm\r\n"); 
	SendAtCommand(CPMSB,13); 
	Sleep(500); 
	TCHAR CMGDB[12]=TEXT("at+cmgd=2\r\n"); 
	SendAtCommand(CMGDB,12); 
	Sleep(500); 
 
	TCHAR CPMSC[13]=TEXT("at+cpms=sm\r\n"); 
	SendAtCommand(CPMSC,13); 
	Sleep(500); 
	TCHAR CMGDC[12]=TEXT("at+cmgd=3\r\n"); 
	SendAtCommand(CMGDC,12); 
	Sleep(500); 
 
	TCHAR CPMSD[13]=TEXT("at+cpms=sm\r\n"); 
	SendAtCommand(CPMSD,13); 
	Sleep(500); 
	TCHAR CMGDD[12]=TEXT("at+cmgd=4\r\n");//200ms第二条没有删掉 
	SendAtCommand(CMGDD,12); 
	Sleep(500); 
} 
 
void CMsgDlg::MsgChangeIni(int Position, CString str) 
{ 
	m_read.Empty(); 
//MessageBox(m_read,TEXT("MsgChange=m_read"),MB_OK); 
	Sms_set=m_strRXData.Mid(MsgPosition,4); 
//MessageBox(Sms_set,TEXT("Sms_set"),MB_OK);//0891  0891 
 
	Sms_center=m_strRXData.Mid(MsgPosition+4,14); 
 
 
	Sms_sender=m_strRXData.Mid(MsgPosition+24,14); 
 
 
	Sms_sendtime=m_strRXData.Mid(MsgPosition+42,6);//发送 
//MessageBox(Sms_sendtime,TEXT("Sms_sendtime"),MB_OK); 
	Sms_sendtimee=m_strRXData.Mid(MsgPosition+48,4); 
 
	Sms_contentlong=m_strRXData.Mid(MsgPosition+56,2);//08 
 
	long h=Change(Sms_contentlong);//CString Sms_contentlong; 
 
	int o=h*2; 
	Sms_content=m_strRXData.Mid(MsgPosition+58,o);//CString Sms_content 
//MessageBox(Sms_content,TEXT("Sms_content"),MB_OK); 
	m_read+=ParityChange(Sms_sender,10)+TEXT("  "); 
 
	m_read+=str+TEXT(" ");//str 
 
	m_read+=ParityChange(Sms_center,10)+TEXT("  "); 
 
	m_read+=TimeChange(Sms_sendtime)+TEXT(" "); 
//0755500 15/12/30,10:21  
	m_read+=TimeChange(Sms_sendtimee)+TEXT(" "); 
	 
	CString myindex=_T("01"); 
	m_read+=myindex; 
 
	m_read+=TEXT(" "); 
 
	UniCode2GB(Sms_content); 
 
	OnSave(); 
} 
 
void CMsgDlg::OnSaveIni() 
{ 
	m_num=2*m_read.GetLength(); 
	CFileException ex; 
	if(!file.Open(TEXT("\\Storage Card\\SaveMsg.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite, &ex)) 
	{ 
		unsigned char tmp; 
		tmp = ex.m_cause; 
		tmp += 0x30; 
		MessageBox((CString)tmp, MB_OK); 
	} 
	file.SeekToEnd(); 
	file.Write(m_read,m_num); 
	file.Close(); 
 
	BOOL a=m_ListCtrl.DeleteAllItems(); 
	UpdateData(FALSE); 
	DisplayListItems(); 
	CString ss=openfile(); 
 
}