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

📄 messview.cpp

📁 用vc开发的cdma手机模块收发短信的功能
💻 CPP
字号:
// messView.cpp : implementation of the CMessView class
//

#include "stdafx.h"
#include "mess.h"

#include "./tao/sms.h"
#include "./tao/Comm.h"
#include "./tao/convert.h"
#include "./tao/res.h"

#include "messDoc.h"
#include "messView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// 串口设备句柄
extern HANDLE hComm;
/////////////////////////////////////////////////////////////////////////////
// CMessView

IMPLEMENT_DYNCREATE(CMessView, CFormView)

BEGIN_MESSAGE_MAP(CMessView, CFormView)
	//{{AFX_MSG_MAP(CMessView)
	ON_BN_CLICKED(IDC_BUTTON1, OnSendMessage)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
	ON_BN_CLICKED(IDC_BUTTON8, OnButton8)
	ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMessView construction/destruction

CMessView::CMessView()
	: CFormView(CMessView::IDD)
{
	//{{AFX_DATA_INIT(CMessView)
	m_content = _T("");
	m_phonenum = _T("");
	m_messcontent = _T("");
	m_sendnum = _T("");
	m_date = _T("");
	m_list = 0;
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CMessView::~CMessView()
{
}

void CMessView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMessView)
	DDX_Text(pDX, IDC_EDIT1, m_content);
	DDX_Text(pDX, IDC_EDIT3, m_phonenum);
	DDX_Text(pDX, IDC_EDIT5, m_messcontent);
	DDX_Text(pDX, IDC_EDIT6, m_sendnum);
	DDX_Text(pDX, IDC_EDIT4, m_date);
	DDX_Text(pDX, IDC_EDIT7, m_list);
	//}}AFX_DATA_MAP
}

BOOL CMessView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CMessView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

}

/////////////////////////////////////////////////////////////////////////////
// CMessView diagnostics

#ifdef _DEBUG
void CMessView::AssertValid() const
{
	CFormView::AssertValid();
}

void CMessView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CMessDoc* CMessView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMessDoc)));
	return (CMessDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMessView message handlers

//*************************往 13811134280 上发消息*********************//
//**** at+cmgf=1
//**** at+cmgs=+8613811134280,4
//**** ctl+z
void CMessView::OnSendMessage() 
{
	OpenComm("COM1",9600);
	WriteComm("ATD13811134280;\r\n", 20);
}

void CMessView::OnButton2() 
{

}

BEGIN_EVENTSINK_MAP(CMessView, CFormView)
    //{{AFX_EVENTSINK_MAP(CMessView)
	ON_EVENT(CMessView, IDC_MSCOMM1, 1 /* OnComm */, OnOnComm, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CMessView::OnOnComm() 
{

}

void CMessView::OnButton3() 
{

	
}

void CMessView::OnButton4() 
{
	
}

void longdelay(void)
{
	unsigned int i;
	for(i=0xffff;i>0;i--);
	for(i=0xffff;i>0;i--);
	for(i=0xffff;i>0;i--);
	for(i=0xffff;i>0;i--);
}

int CMessView::OnButton5() 
{
	UpdateData(true);
	int i=0,length,nLength,index;		
	char sms[200];
	char cmd[50];
	char ans[100];
	char pSour[256];
	if(hComm!=NULL)
	   CloseHandle(hComm);
	//OpenComm("COM1",115200,0,8,1);
	while (!OpenComm("COM1",115200))
	{
		MessageBox("无法打开端口%s! 现在设置吗?");
		return 0;
	}
	//OpenComm(const char* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
	
	// 发送command

	//cmd="at\n"
	WriteComm(cmdAT, strlen(cmdAT));	// 先输出命令串
	for(i=0;i<100;i++)
		ans[i]=0;
	nLength = ReadComm(ans, 128);	// 读应答数据
	if(strcmp(ans,ansok))
		return 0;

	//cmd="at+fset=0\n";
	WriteComm(cmdfset, strlen(cmdfset));	// 先输出命令串
	for(i=0;i<100;i++)
		ans[i]=0;
	nLength = ReadComm(ans, 128);	// 读应答数据
	if(strcmp(ans,ansfset))
		return 0;

	
	
	//cmd="at+cad?\n";
	WriteComm(cmdcad, strlen(cmdcad));	// 先输出命令串
	for(i=0;i<100;i++)
		ans[i]=0;
	nLength = ReadComm(ans, 128);	// 读应答数据
	if(strcmp(ans,anscad1))
		return 0;

	//cmd="at+smsg=1\n";
	WriteComm(cmdsmsg, strlen(cmdsmsg));	// 先输出命令串
	for(i=0;i<100;i++)
		ans[i]=0;
	nLength = ReadComm(ans, 128);	// 读应答数据
	if(strcmp(ans,ansok))
		return 0;

	//	cmd="at+smss?\n";
	WriteComm(cmdsmss, strlen(cmdsmss));	// 先输出命令串
	for(i=0;i<100;i++)
		ans[i]=0;
	nLength = ReadComm(ans, 128);	// 读应答数据
	if(strcmp(ans,anssmss3))  //检查是否
		return 0;

	
	//发送短信内容

	int numlength;
	numlength=strlen(m_sendnum);

	strcpy(pSour,m_content);
	length=GB_UNICOD(pSour);
	length=length*2;

	index=0;
	sms[index++]=0x07; //index=0
	sms[index++]=1+numlength+11;  //index=1
	sms[index]=0;
  

	strcat(sms,m_sendnum);
	
	index=index+numlength;
	
	for(i=index;i<index+11;i++)
	{
		sms[i]=0x20;
	}

	index+=11;
	for(i=0;i<length;i++)
		sms[index++]=pSour[i];
	
	sms[index]=0;
	sms[1]=length+sms[1];
	
	// 发送短消息
	WriteComm(sms, sms[1]+1);
	longdelay();

	//	cmd="at+smss?\n";
	WriteComm(cmdsmss, strlen(cmdsmss));	// 先输出命令串
	for(i=0;i<100;i++)
		ans[i]=0;
	nLength = ReadComm(ans, 128);	// 读应答数据
	
	while( (strcmp(ans,anssmss1)!=0) && (strcmp(ans,anssmss2)!=0) )
	{
		WriteComm(cmdsmss, strlen(cmdsmss));	// 先输出命令串
		for(i=0;i<100;i++)
			ans[i]=0;
		nLength = ReadComm(ans, 128);	// 读应答数据
		if(strcmp(ans,anssmss1))  //检查是否
			return 1;
		else
			return 0;
	}

}

void CMessView::OnButton6() 
{
		UpdateData(true);

		if(hComm!=NULL)
		   CloseHandle(hComm);
		OpenComm("COM1",9600);
		
		SM_PARAM SmParam;
		memset(&SmParam, 0, sizeof(SM_PARAM));

		int nLength;
		int nMsg;			// 短消息计数值
		char* ptr;			// 内部用的数据指针
		char cmd[30];
		char ans[1024];
			
		nMsg = 0;
		ptr = ans;
		
		sprintf(cmd,"AT+CMGr=%d\r",m_list);

		

		WriteComm(cmd,strlen(cmd));
		nLength = ReadComm(ans,1024);

		//ptr = strstr(ptr, "+CMGL:");
		ptr += 6;		// 跳过"+CMGL:", 定位到序号
		sscanf(ptr, "%d", &SmParam.index);	// 读取序号
		ptr = strstr(ptr, "\r\n");	// 找下一行
		if (ptr != NULL)
		{
			ptr += 2;		// 跳过"\r\n", 定位到PDU		
			gsmDecodePdu(ptr, &SmParam);	// PDU串解码
		}
		
		m_messcontent = SmParam.TP_UD;
		m_phonenum = SmParam.TPA;

		char date[17] = "00000";
		for (int i=0;i<8;i++ )
		date[0] = SmParam.TP_SCTS[0];
		date[1] = SmParam.TP_SCTS[1];
		date[2] = '-';
		date[3] = SmParam.TP_SCTS[2];
		date[4] = SmParam.TP_SCTS[3];
		date[5] = '-';
		date[6] = SmParam.TP_SCTS[4];
		date[7] = SmParam.TP_SCTS[5];
		date[8] = ' ';
		date[9] = SmParam.TP_SCTS[6];
		date[10] = SmParam.TP_SCTS[7];
		date[11] = ':';
		date[12] = SmParam.TP_SCTS[8];
		date[13] = SmParam.TP_SCTS[9];
		date[14] = ':';
		date[15] = SmParam.TP_SCTS[10];
		date[16] = SmParam.TP_SCTS[11];
		date[16] = 0;

		m_date = date;

		UpdateData(false);
}

void CMessView::OnButton7() 
{
	
}

void CMessView::OnButton8() 
{
	
}

⌨️ 快捷键说明

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