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