新手GPS串口接收有关问题请问
新手GPS串口接收问题请教
#include <windows.h>
#include <windowsx.h>
#include <CommCtrl.h>
#include "SampleGPS.h"
#include <winuser.h>
#define TEXTSIZE 70
struct DecodeUnit DlgMessage[] ={
WM_INITDIALOG ,DoInit,
WM_COMMAND,DoCommand,
};
struct DecodeUnit CommandMessage[] = {
IDOK,OnClose,
IDCANCEL,OnClose,
};
HINSTANCE g_hInst;
HANDLE g_hSendEvent = INVALID_HANDLE_VALUE;
HANDLE hReadThread = INVALID_HANDLE_VALUE;
HANDLE hThread;
BOOL fContinue = TRUE;
HANDLE hComPort = INVALID_HANDLE_VALUE;
int nSpeed = CBR_9600;
int nLastDev = -1;
HWND hwnd ;
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgPorc);
CommandBar_Show(NULL, TRUE);
return (0);
}
INT_PTR CALLBACK DlgPorc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
int i;
for (i = 0;i < dim(DlgMessage);i++)
{
if(DlgMessage[i].message == message)
(*DlgMessage[i].fun)(hDlg,message,wParam,lParam);
}
return FALSE;
}
LONG DoCommand(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
int i ;
for(i =0 ;i< dim(CommandMessage);++i)
{
if(CommandMessage[i].message == LOWORD(wParam))
(*CommandMessage[i].fun)(hDlg,message,wParam,lParam);
}
return TRUE;
}
LONG DoInit(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
TCHAR szDev[32] = TEXT("COM2:");
InitCommunication (szDev);
hwnd = hDlg;
return TRUE;
}
LONG OnClose(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
EndDialog(hDlg,0);
return TRUE;
}
HANDLE InitCommunication ( LPTSTR pszDevName) {
DCB dcb;
TCHAR szDbg[128];
COMMTIMEOUTS cto;
HANDLE hLocal;
DWORD dwTStat;
hLocal = hComPort;
hComPort = INVALID_HANDLE_VALUE;
if (hLocal != INVALID_HANDLE_VALUE)
CloseHandle (hLocal);
hLocal = CreateFile (pszDevName, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
if (hLocal != INVALID_HANDLE_VALUE) {
// 配置串口
dcb.DCBlength = sizeof (dcb);
GetCommState (hLocal, &dcb);
dcb.BaudRate = nSpeed;
dcb.fParity = FALSE;
dcb.fNull = FALSE;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
SetCommState (hLocal, &dcb);
// 设定超时
cto.ReadIntervalTimeout = 0;
cto.ReadTotalTimeoutMultiplier = 0;
cto.ReadTotalTimeoutConstant = 0;
cto.WriteTotalTimeoutMultiplier = 0;
cto.WriteTotalTimeoutConstant = 0;
SetCommTimeouts (hLocal, &cto);
// 启动读取线程
hComPort = hLocal;
if (!GetExitCodeThread (hReadThread, &dwTStat) ||
(dwTStat != STILL_ACTIVE)) {
hReadThread = CreateThread (NULL, 0, ReadThread, NULL,
0, &dwTStat);
if (hReadThread)
CloseHandle (hReadThread);
}
} else {
wsprintf (szDbg, TEXT ("Couldn\'t open port %s. rc=%d\r\n"),
pszDevName, GetLastError());
MessageBox(NULL,szDbg,TEXT("message"),MB_OK | MB_ICONERROR);
}
return hComPort;
}
DWORD WINAPI ReadThread (PVOID pArg) {
HWND hWnd;
DWORD cBytes, i;
WCHAR szText[TEXTSIZE];
char szAnsi[TEXTSIZE];
size_t siz;
HWND hlist = GetDlgItem(hwnd,IDC_LIST1);
while (fContinue) {
for (i = 0; i < sizeof (szAnsi)-1; i++) {
while (!ReadFile (hComPort, &szAnsi[i], 1, &cBytes, 0))
if (hComPort == INVALID_HANDLE_VALUE)
#include <windows.h>
#include <windowsx.h>
#include <CommCtrl.h>
#include "SampleGPS.h"
#include <winuser.h>
#define TEXTSIZE 70
struct DecodeUnit DlgMessage[] ={
WM_INITDIALOG ,DoInit,
WM_COMMAND,DoCommand,
};
struct DecodeUnit CommandMessage[] = {
IDOK,OnClose,
IDCANCEL,OnClose,
};
HINSTANCE g_hInst;
HANDLE g_hSendEvent = INVALID_HANDLE_VALUE;
HANDLE hReadThread = INVALID_HANDLE_VALUE;
HANDLE hThread;
BOOL fContinue = TRUE;
HANDLE hComPort = INVALID_HANDLE_VALUE;
int nSpeed = CBR_9600;
int nLastDev = -1;
HWND hwnd ;
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgPorc);
CommandBar_Show(NULL, TRUE);
return (0);
}
INT_PTR CALLBACK DlgPorc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
int i;
for (i = 0;i < dim(DlgMessage);i++)
{
if(DlgMessage[i].message == message)
(*DlgMessage[i].fun)(hDlg,message,wParam,lParam);
}
return FALSE;
}
LONG DoCommand(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
int i ;
for(i =0 ;i< dim(CommandMessage);++i)
{
if(CommandMessage[i].message == LOWORD(wParam))
(*CommandMessage[i].fun)(hDlg,message,wParam,lParam);
}
return TRUE;
}
LONG DoInit(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
TCHAR szDev[32] = TEXT("COM2:");
InitCommunication (szDev);
hwnd = hDlg;
return TRUE;
}
LONG OnClose(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
EndDialog(hDlg,0);
return TRUE;
}
HANDLE InitCommunication ( LPTSTR pszDevName) {
DCB dcb;
TCHAR szDbg[128];
COMMTIMEOUTS cto;
HANDLE hLocal;
DWORD dwTStat;
hLocal = hComPort;
hComPort = INVALID_HANDLE_VALUE;
if (hLocal != INVALID_HANDLE_VALUE)
CloseHandle (hLocal);
hLocal = CreateFile (pszDevName, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
if (hLocal != INVALID_HANDLE_VALUE) {
// 配置串口
dcb.DCBlength = sizeof (dcb);
GetCommState (hLocal, &dcb);
dcb.BaudRate = nSpeed;
dcb.fParity = FALSE;
dcb.fNull = FALSE;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
SetCommState (hLocal, &dcb);
// 设定超时
cto.ReadIntervalTimeout = 0;
cto.ReadTotalTimeoutMultiplier = 0;
cto.ReadTotalTimeoutConstant = 0;
cto.WriteTotalTimeoutMultiplier = 0;
cto.WriteTotalTimeoutConstant = 0;
SetCommTimeouts (hLocal, &cto);
// 启动读取线程
hComPort = hLocal;
if (!GetExitCodeThread (hReadThread, &dwTStat) ||
(dwTStat != STILL_ACTIVE)) {
hReadThread = CreateThread (NULL, 0, ReadThread, NULL,
0, &dwTStat);
if (hReadThread)
CloseHandle (hReadThread);
}
} else {
wsprintf (szDbg, TEXT ("Couldn\'t open port %s. rc=%d\r\n"),
pszDevName, GetLastError());
MessageBox(NULL,szDbg,TEXT("message"),MB_OK | MB_ICONERROR);
}
return hComPort;
}
DWORD WINAPI ReadThread (PVOID pArg) {
HWND hWnd;
DWORD cBytes, i;
WCHAR szText[TEXTSIZE];
char szAnsi[TEXTSIZE];
size_t siz;
HWND hlist = GetDlgItem(hwnd,IDC_LIST1);
while (fContinue) {
for (i = 0; i < sizeof (szAnsi)-1; i++) {
while (!ReadFile (hComPort, &szAnsi[i], 1, &cBytes, 0))
if (hComPort == INVALID_HANDLE_VALUE)