📄 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<<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 + -