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

📄 gprsctrldlg.cpp

📁 基于WindowsCE操作系统的GPRS模块的通信例程
💻 CPP
字号:
// GPRSCtrlDlg.cpp : implementation file
//

#include "stdafx.h"
#include "GPRSCtrl.h"
#include "GPRSCtrlDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CGPRSCtrlDlg dialog

CGPRSCtrlDlg::CGPRSCtrlDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CGPRSCtrlDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CGPRSCtrlDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CGPRSCtrlDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGPRSCtrlDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CGPRSCtrlDlg, CDialog)
	//{{AFX_MSG_MAP(CGPRSCtrlDlg)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_SET_MSGCENTR_TELCODE, OnSetMsgcentrTelcode)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGPRSCtrlDlg message handlers

#include "gpio.h"
HANDLE hGPIOFile = INVALID_HANDLE_VALUE;	/* 操作驱动文件句柄 */

BOOL CGPRSCtrlDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);				// Set big icon
	SetIcon(m_hIcon, FALSE);			// Set small icon
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// 初始化 GPIO
	if (InitGPIO() == FALSE)
	{
		MessageBox(_T("GPIO 初始化失败."));
		return FALSE;		
	}
	LEDRight(0); 

	// 初始化 GPRS 
	BOOL ret = m_GPRS.GPRS_Init(_T("COM1:"), 115200, (DWORD)this);
	if (ret == FALSE)
	{
		MessageBox(_T("GPRS 初始化失败,请检查是否安装正确."));
		return FALSE;
	}

	// 设置 GPRS 接收回调函数
	m_GPRS.OnGPRSRecv = OnGPRSRecv;		
	SetDlgItemText(IDC_MSGCENTR_TELCODE, _T("+8613800200500"));
	m_GPRS.GPRS_DeleteShortMsg(1);		/* 删除第 1 条短信*/
	SetTimer(1, 1000, NULL);			/* 每 1 秒查询一次短信 */

	return TRUE;
}


/*******************************************************************************************
函数名称: InitGPIO
描    述: 初始化 GPIO
输入参数: 无
输出参数: 无
返    回: FALSE: 失败   TRUE: 成功
********************************************************************************************/
BOOL CGPRSCtrlDlg::InitGPIO(void) 
{
	BOOL ret;

	// 打开 GPIO 驱动
	hGPIOFile = CreateFile(TEXT("PIO1:"), GENERIC_READ | GENERIC_WRITE, 0, 
					   NULL, OPEN_EXISTING, 0, 0);
	if (hGPIOFile == INVALID_HANDLE_VALUE)
		return FALSE; 

	// 设置 LED1 和 LED2 , 即 GPE11 和 GPE12 为输出口
	DWORD GPEMask = (0x01 << 11) + (0x01 << 12);
	ret = ::DeviceIoControl(hGPIOFile, IOCTL_GPE_SET_MULTI_PIN_OUT, &GPEMask, 1, NULL, NULL, NULL, NULL);
	if (ret != TRUE)
	{
		CloseHandle(hGPIOFile);
		hGPIOFile = INVALID_HANDLE_VALUE;
		return FALSE;
	}

	// 设置 LED3 和 LED4, 即 GPH4 和 GPH6 为输出口
	DWORD GPHMask = (0x01 << 4) + (0x01 << 6);
	ret = ::DeviceIoControl(hGPIOFile, IOCTL_GPH_SET_MULTI_PIN_OUT, &GPHMask, 1, NULL, NULL, NULL, NULL);
	if (ret != TRUE)
	{
		CloseHandle(hGPIOFile);
		hGPIOFile = INVALID_HANDLE_VALUE;
		return FALSE;
	}

	return TRUE;
}


/*******************************************************************************************
函数名称: CGPRSCtrlDlg::LEDRight
描    述: 点亮实验箱上4个LED
输入参数: DWORD num: LED 编号, 取值 1 ~ 4, 对应4个LED, 取值为 0 时, 熄灭所有LED
输出参数: 无
返    回: FALSE: 失败   TRUE: 成功
********************************************************************************************/
BOOL CGPRSCtrlDlg::LEDRight(DWORD num) 
{
	BOOL ret = FALSE; 
	BYTE pinnum;
	
	// 熄灭所有 LED
	pinnum = 11;
	ret = DeviceIoControl(hGPIOFile, IOCTL_GPE_CLR_PIN, &pinnum, 1, NULL, NULL, NULL, NULL);
	if (ret = FALSE)	return ret;
	
	pinnum = 12;
	ret = DeviceIoControl(hGPIOFile, IOCTL_GPE_CLR_PIN, &pinnum, 1, NULL, NULL, NULL, NULL);
	if (ret = FALSE)	return ret;
	
	pinnum = 4;
	ret = DeviceIoControl(hGPIOFile, IOCTL_GPH_CLR_PIN, &pinnum, 1, NULL, NULL, NULL, NULL);
	if (ret = FALSE)	return ret;
	
	pinnum = 6;
	ret = DeviceIoControl(hGPIOFile, IOCTL_GPH_CLR_PIN, &pinnum, 1, NULL, NULL, NULL, NULL);
	if (ret = FALSE)	return ret;

	switch(num)
	{
		case 0: 
		ret = TRUE;
		break;

		case 1:					/* 点亮 LED1, 即置 GPE11 为高电平 */
		pinnum = 11;
		ret = ::DeviceIoControl(hGPIOFile, IOCTL_GPE_SET_PIN, &pinnum, 1, NULL, NULL, NULL, NULL);
		break;

		case 2:					/* 点亮 LED2, 即置 GPE12 为高电平 */
		pinnum = 12;
		ret = ::DeviceIoControl(hGPIOFile, IOCTL_GPE_SET_PIN, &pinnum, 1, NULL, NULL, NULL, NULL);
		break;

		case 3:					/* 点亮 LED3, 即置 GPH4 为高电平 */
		pinnum = 4;
		ret = ::DeviceIoControl(hGPIOFile, IOCTL_GPH_SET_PIN, &pinnum, 1, NULL, NULL, NULL, NULL);
		break;

		case 4:					/* 点亮 LED4, 即置 GPH6 为高电平 */
		pinnum = 6;
		ret = ::DeviceIoControl(hGPIOFile, IOCTL_GPH_SET_PIN, &pinnum, 1, NULL, NULL, NULL, NULL);
		break;

		default:
		break;
	}

	return ret;
}


/*******************************************************************************************
函数名称: CALLBACK CGPRSMsgDlg::OnGPRSRecv
描    述: GPRS 接收回调函数, 当有电话打入或对方挂机时, 将执行该函数
输入参数: DWORD UserParam: 用户在调用 GPRS_Init() 函数时传入的参数.
		  DWORD Status	 : GPRS 状态
		  CString strData: 状态对应的字符串, 如果有电话打入, 则该字符为来电号码	
输出参数: 无
返    回: 无
********************************************************************************************/
void CALLBACK CGPRSCtrlDlg::OnGPRSRecv(DWORD UserParam, DWORD Status, CString strData)
{

}


/*******************************************************************************************
函数名称: OnTimer
描    述: 定时服务处理函数
********************************************************************************************/
void CGPRSCtrlDlg::OnTimer(UINT nIDEvent) 
{
	BOOL ret;
	CString strTelCode, strMsg;
	char buf[6],i;

	ret = m_GPRS.GPRS_ReadShortMessage(1, &strTelCode, &strMsg);
	if (ret == TRUE)
	{
		SetDlgItemText(IDC_RECVMSG_TELCODE, strTelCode);		/* 显示电话号码 */	
		SetDlgItemText(IDC_DISP_RECVMSG, strMsg);				/* 显示短信内容 */
		
		for (i = 0; i < 6; i++)
			buf[i] = (char)strMsg.GetAt(i);						/* 取出短信的前6个字符 */

      	if( (buf[0] == 'Z') || (buf[0] == 'z') )
        if( (buf[1] == 'Y') || (buf[1] == 'y') )
        if( (buf[2] == 'L') || (buf[2] == 'l') )
        if( (buf[3] == 'E') || (buf[3] == 'e') )
        if( (buf[4] == 'D') || (buf[4] == 'd') )
        if(	(buf[5] >= '1') && (buf[5] <= '4') )
        {
        	LEDRight(buf[5] - '0');								/* 点亮相应的LED */	
        }	
		
		m_GPRS.GPRS_DeleteShortMsg(1);							/* 删除收到的短信 */
	}
	
	CDialog::OnTimer(nIDEvent);
}

void CGPRSCtrlDlg::OnSetMsgcentrTelcode() 
{
	CString strCode;

	GetDlgItemText(IDC_MSGCENTR_TELCODE, strCode);

	BOOL ret = m_GPRS.GPRS_SetShortMSGCenterTel(strCode);		/* 设置短信中号码 */
	if (ret == TRUE)
		MessageBox(_T("设置短信中心号码成功."));
	else
		MessageBox(_T("设置短信中心号码失败."));
}

⌨️ 快捷键说明

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