📄 smstest.cpp
字号:
#include "stdafx.h"
//#include "SMSTest.h"
#include "MMSYSTEM.H"
#pragma comment(lib,"winmm.lib")
HWND g_notifyhWnd;
UINT g_DevID;
UINT g_TestCount;
UINT g_TestInterval;
BOOL* g_IsTerminal ;
#ifdef _DEBUG
CFile DebugFile;
#endif
CSMSTest::~CSMSTest()
{
if ( DllInst ) FreeLibrary (DllInst);
if ( DllInst2 ) FreeLibrary (DllInst2);
}
CSMSTest::CSMSTest()
{
com_handle=NULL;
m_SMSIndex = 1;
}
/*BOOL CSMSTest::InitialComPort()
{
//DllInst = LoadLibrary (".\\PlugIn\\MFCComPortDll.dll");
CString Pathee=SysTemPath+"PlugIn\\MFCComPortDll.dll";
DllInst = LoadLibrary (Pathee);
if(DllInst==NULL)
{
DWORD errcode = GetLastError();
AfxMessageBox("MFCComPortDll.dll Initial error");
LPVOID lpMsgBuf;
if (!FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
errcode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL ))
{
AfxMessageBox("ErrorCode:"+errcode);
}
AfxMessageBox((LPCTSTR)lpMsgBuf);
// Free the buffer.
LocalFree( lpMsgBuf );
return FALSE;
}
Send = (BOOL (__stdcall *) (UINT bComId,char *sendstr,int len))
GetProcAddress ( DllInst, "_Send@12" );
Receive = (BOOL (__stdcall *) (UINT bComId,char *recvstr,int &len))
GetProcAddress ( DllInst, "_Receive@12" );
OpenPort = (BOOL (__stdcall *) (UINT bComId,DWORD dwBaudRate))
GetProcAddress ( DllInst, "_OpenPort@8" );
ClosePort = (BOOL (__stdcall *) (UINT bComId))
GetProcAddress ( DllInst, "_ClosePort@4" );
//DllInst2 = LoadLibrary ( "..\\Bin\\PlugIn\\GSMPDUCode.dll" );
Pathee=SysTemPath+"PlugIn\\GSMPDUCode.dll";
DllInst2 = LoadLibrary (Pathee);
if(DllInst2==NULL)
{
AfxMessageBox("GSMPDUCode.dll Initial error");
return FALSE;
}
gsmString2Bytes = (int (__stdcall *) (const char* pSrc, unsigned char* pDst, int nSrcLength))
GetProcAddress ( DllInst2, "_gsmString2Bytes@12" );
gsmEncodePdu = (int (__stdcall *) (const SM_PARAM* pSrc, char* pDst))
GetProcAddress ( DllInst2, "_gsmEncodePdu@8" );
gsmDecodePdu = (int (__stdcall *) (const char* pSrc, SM_PARAM* pDst))
GetProcAddress ( DllInst2, "_gsmDecodePdu@8" );
return TRUE;
}*/
/*void CSMSTest::FreeComPort()
{
FreeLibrary(DllInst);
FreeLibrary(DllInst2);
return;
}*/
int CSMSTest::recvsms(int portB,SMS_PARAM *param)
{
char* ptr;
SM_PARAM pMsg;
time_t current=time(NULL);
CString temp=ctime(¤t);
temp = temp.Mid(4,15);
temp.SetAt(3 , '_');
temp.SetAt(6 , '_');
temp.SetAt(9 , '_');
temp.SetAt(12 , '_');
temp.Format("PDU@"+temp + ".txt" );
m_recvFolder=param->recvfolder;
temp = m_recvFolder + temp;
CFile datafile;
if(!datafile.Open(temp,CFile::modeWrite|CFile::modeCreate))
{
// SendWMMessage(WM_FILE_STATUS , File_OpenFail , 0);
QDDataService()->ParseSMS_ReceiveTestData(SMSR_FileFall , 0, _T(""));
//break;
AfxMessageBox("接收文件创建失败");
}
int recvlen=0;
//char *recvstr=new char[4096];
CString cmd,ans;
int pos=0;
DWORD starttime=0;
// memset(recvstr,0,4096);
starttime=timeGetTime();
//QDDataService()->ParseSMS_SendTestData(SMS_AtInit , 0, _T(""));
cmd = "AT+CMGF=0\r";
Senddata( portB,(char*)(LPCTSTR)cmd ,cmd.GetLength());
ans=ReceiveData( );
//ans=recvstr;
//memset(recvstr,0,4096);
QDDataService()->ParseSMS_SendTestData(SMSR_SetAt , 0, _T(""));
int a=2;
int b=1;
// cmd="AT+CPMS=";
cmd.Format( "AT+CNMI=%d,%d\r" ,a,b);
Senddata(portB,(char*)(LPCTSTR)cmd,cmd.GetLength());
cmd = "AT+CMGF=0\r";
Senddata( portB,(char*)(LPCTSTR)cmd ,cmd.GetLength());
ans=ReceiveData( );
//ans=recvstr;
//memset(recvstr,0,4096);
//QDDataService()->ParseSMS_SendTestData(SMSR_SetAt , 0, _T(""));
a=2;
b=1;
// cmd="AT+CPMS=";
cmd.Format( "AT+CNMI=%d,%d\r" ,a,b);
Senddata(portB,(char*)(LPCTSTR)cmd,cmd.GetLength());
Sleep(50);
ans=ReceiveData(); // 读应答数据
//ans=recvstr;
if((pos=ans.Find("OK")) == -1)
{
QDDataService()->ParseSMS_SendTestData(SMSR_SetAtFail , 0, _T(""));
return -1;
}
if(*g_IsTerminal) return -1;
// memset(recvstr,0,4096);
DWORD ETime=timeGetTime();
while(1)
{
if(*g_IsTerminal) return -1;
ans=ReceiveData(); // 读应答数据
//if(recvlen!=0)ans=recvstr;
ptr=(char*)(LPCTSTR)ans;
//recvlen=0;
if((pos=ans.Find("ERROR")) != -1)
{
// SendWMMessage(WM_SMS_STATUS , SMSRecv_Success ,timeGetTime());
QDDataService()->ParseSMS_SendTestData(SMSR_Fail , 0, _T(""));
return -1;
}
//if((pos=ans.Find("+CMT:")) != -1)
if((ptr = strstr(ptr, "+CMTI:")) != NULL)
{
//SendWMMessage(WM_SMS_STATUS , SMSRecv_Success ,timeGetTime());
QDDataService()->ParseSMS_SendTestData(SMSR_Success , 0, _T(""));
//break;
//AfxMessageBox("zzf");
//--------------------------确定信息位置-------------------------
pos=ans.Find(",");
ans.Delete(0,pos+1);
//recvlen=ans.StringLength();
int me=atoi(ans/*.Left(2)*/);
// if(me>99)me=atoi(ans.Left(1));
//-----------------------------此处添加短信读取程序--------------------
cmd.Format( "AT+CMGR=%d\r" , me); // 生成命令-------- ? m_SMSIndex=0
Senddata(param->recvcomport,(char*)(LPCTSTR)cmd,cmd.GetLength()); // 输出命令串---端口号+命令--------
do
{
ans=ReceiveData(); // 读取短信内容
//ans=recvstr;
}while(ans.Find("+CMGR:")==-1);
//------------------------------保存数据-------------------------------------
strcpy(param->Pushdata,ans); //后来添加的用于保存push数据的单元
datafile.Write(ans,ans.GetLength());
datafile.Close();
//break;
////------------------------------------------------------------------
ptr=(char*)(LPCTSTR)ans;
if((ptr = strstr(ptr, "+CMGR:")) != NULL)
{
ptr += 6; // 跳过"+CMGL:"
//sscanf(ptr, "%d", &pMsg.index); // 读取序号
// TRACE(" index=%d\n",pMsg->index);
ptr = strstr(ptr, "\r\n"); // 找下一行
ptr += 2; // 跳过"\r\n"
CString Trans=ptr;
//TRACE("%s" , ptr);
char* Myptr=(char*)(LPCTSTR)Trans;
GsmDecodePdu(Myptr, &pMsg); // PDU串解码
//AfxMessageBox(ptr);
//AfxMessageBox(ans);
strcpy(param->phonenum,pMsg.TPA);
strcpy(param->content,pMsg.TP_UD);
QDDataService()->ParseSMS_SendTestData(SMSR_Phone , 0,pMsg.TPA);
QDDataService()->ParseSMS_SendTestData(SMSR_Content , 0, pMsg.TP_UD);
//delete ptr;
return 1;
}
}
// memset(recvstr,0,4096);
if((int)(timeGetTime()-ETime)>300000)
{
QDDataService()->ParseSMS_SendTestData(SMSR_TimeOut , 0, _T(""));
return -1;
}
if(*g_IsTerminal) return -1;
}
//delete ptr;
return -1;
}
void SethWnd(HWND hWnd)
{
return;
}
BOOL CSMSTest::sendsms(int portA ,char *phonenum,char *SMScontent ,CString centernum)
{
int nPduLength; // PDU串长度
unsigned char nSmscLength; // SMSC串长度
// int nLength; // 串口收到的数据长度
CString cmd; // 命令串
char pdu[512]; // PDU串
CString ans; // 应答串
SM_PARAM SmParam; //短消息参数结构
BOOL status=FALSE;
char *recvstr=new char[4096];
char *sendstr=new char[512];
int recvlen=0;
// int iCount;
DWORD starttime=0;
memset(sendstr,0,512);
memset(recvstr,0,4096);
CString CenterNum;
WCHAR wchar[1024];
int nCount = ::MultiByteToWideChar(CP_ACP, 0, SMScontent, -1, wchar, 1024);
if(nCount <= 1)
{
AfxMessageBox("消息内容为空!");
delete recvstr;
delete sendstr;
return FALSE;
}
else if(nCount > 70) // UCS2编码,最大70个字符(半角/全角)
{
AfxMessageBox("消息内容太长,无法发送!");
delete recvstr;
delete sendstr;
return FALSE;
}
//-------------------------------------------------------------------
//QDDataService()->ParseSMS_SendTestData(SMSS_AtInit , 0, _T(""));
cmd = "AT+CMGF=1\r";
Senddata( portA,(char*)(LPCTSTR)cmd ,cmd.GetLength());
ReceiveData( );
// CString kk=recvstr;
//memset(recvstr,0,4096);
//QDDataService()->ParseSMS_SendTestData(SMSS_AtInit , 0, _T(""));
cmd = "AT+CSCA=\"+";
cmd =cmd+centernum;
cmd=cmd+"\"\r";
Senddata( portA,(char*)(LPCTSTR)cmd ,cmd.GetLength());
ReceiveData( );
//memset(recvstr,0,4096);
//QDDataService()->ParseSMS_SendTestData(SMSS_AtInit , 0, _T(""));
cmd = "AT+CMGF=0\r";
Senddata( portA,(char*)(LPCTSTR)cmd ,cmd.GetLength());
ReceiveData( );
//memset(recvstr,0,4096);
//--------------------------------------------------------------------
Sleep(500);
cmd = "AT+CSCA?\r";
Senddata( portA,(char*)(LPCTSTR)cmd ,cmd.GetLength());
Sleep(500);
CenterNum=ReceiveData( );
//CenterNum=recvstr;
//memset(recvstr,0,4096);
//QDDataService()->ParseSMS_SendTestData(SMSS_SMSC , 0, _T(""));
int pos=0;
if((pos=CenterNum.Find("86"))!=-1)
{
CenterNum=CenterNum.Mid(pos,13);
QDDataService()->ParseSMS_SendTestData(SMSS_SMSC , 0, _T(""));
//PostMessage Get CenterNum
/*DWORD Hi = 0x10000 * g_DevID;
WPARAM wParam = Hi + SMSCenterNum;
SendMessage(g_notifyhWnd , WM_SMS_STATUS , wParam , (LPARAM)(void*)(LPCTSTR)CenterNum);*/
}
else
{
//PostMessage Get CenterNum Fail
// SendWMMessage(WM_SMS_STATUS , SMSCenterNum_Fail ,0);
QDDataService()->ParseSMS_SendTestData( SMSS_SMSCFall , 0, _T(""));
return FALSE;
}
memset(&SmParam, 0, sizeof(SM_PARAM));
strcpy(SmParam.TPA, phonenum);
//strcpy(SmParam.SCA, "8613800756500");
strcpy(SmParam.SCA, centernum);
//SmParam.SCA=centernum;
strcpy(SmParam.TP_UD, SMScontent);
SmParam.TP_PID = 0;
SmParam.TP_DCS = GSM_UCS2;
//SmParam.TP_DCS = GSM_7BIT;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -