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

📄 func.cpp

📁 基于WINCE
💻 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<<l;
		
				q=q+c&0xffff;
			
			}
			else 
			{
				x=x+x|0x0000;
				x=buf[g]-_T('A')+10;
				l=l-4;
				x=x<<l;
				q=q+x&0xffff;
			}
		}

		WORD he[]={q,0x0000};

		m_read+=he;

		cut=_T("");
		q=0x0000;
		c=0x0000;
		x=0x0000;
	}

	for(long fff=1;fff<=ff;fff++)
	{
		m_read+=TEXT(" ");
	}
	

	m_read+=TEXT("  ");

 	WORD HA[]={0x000d,0x000a,0x0000};
	m_read+=HA;

}


long CMsgDlg::Change(CString str)
{
   long ll=0;
   for(int i=0;i<str.GetLength();i++)
   {
      ll=ll*16;
      if((str[i]<='9') && (str[i]>='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();

}

⌨️ 快捷键说明

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