无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频

 用 VC 在win95下編寫用于串行通訊的程序


源自http://www.sixthnet.com/netech/articles/195.htm

頭文件(.H)

#include "StdAfx.h"

#define GWL_PGPSINFO 0
#define GPSEXTRABYTES sizeof( LONG )

#define MAXPORTS 4

#define CN_SEND WM_USER+100

#define RXQUEUE 4096
#define TXQUEUE 4096

// cursor states

#define CS_HIDE 0x00
#define CS_SHOW 0x01

// Flow control flags

#define FC_DTRDSR 0x01
#define FC_RTSCTS 0x02
#define FC_XONXOFF 0x04

// ascii definitions

#define ASCII_BEL 0x07
#define ASCII_BS 0x08
#define ASCII_LF 0x0A
#define ASCII_CR 0x0D
#define ASCII_XON 0x11
#define ASCII_XOFF 0x13

// data structures

typedef struct tagGPSINFO
{
HANDLE idComDev;
BYTE bPort;
BOOL fConnected;
BYTE bByteSize,bParity,bStopBits;
DWORD dwBaudRate;

HANDLE hPostEvent,hWatchThread,hWatchEvent;
HWND hTermWnd;
DWORD dwThreadID;
OVERLAPPED osWrite,osRead;
} GPSINFO, *PGPSINFO ;

#define COMDEV( x ) (x -> idComDev)
#define PORT( x ) (x -> bPort)
#define CONNECTED( x ) (x -> fConnected)
#define BYTESIZE( x ) (x -> bByteSize)
#define PARITY( x ) (x -> bParity)
#define STOPBITS( x ) (x -> bStopBits)
#define BAUDRATE( x ) (x -> dwBaudRate)

#define POSTEVENT( x ) (x -> hPostEvent)
#define HTHREAD( x ) (x -> hWatchThread)
#define THREADID( x ) (x -> dwThreadID)
#define WRITE_OS( x ) (x -> osWrite)
#define READ_OS( x ) (x -> osRead)

// function prototypes (private)

LRESULT NEAR CreateGPSInfo(HWND,BYTE nPort=1);
BOOL NEAR DestroyGPSInfo();

int NEAR ReadCommBlock(LPSTR,int);
BOOL NEAR WriteCommBlock(LPSTR,DWORD);
BOOL NEAR OpenConnection();
BOOL NEAR SetupConnection();
BOOL NEAR CloseConnection();

// function prototypes (public)

DWORD FAR PASCAL CommWatchProc(LPSTR);
CPP實現部分:

#include "StdAfx.h"
#include "Com.h"

HWND hGPSWnd=NULL;
PGPSINFO npGPSInfo=NULL;

LRESULT NEAR CreateGPSInfo(HWND hWnd,BYTE nPort)
{
if (NULL==(npGPSInfo=(PGPSINFO)LocalAlloc(LPTR,sizeof(GPSINFO))))
return ((LRESULT)-1) ;

hGPSWnd=hWnd;

COMDEV(npGPSInfo)=0;
CONNECTED(npGPSInfo)=FALSE;
PORT(npGPSInfo)=nPort;
BAUDRATE(npGPSInfo)=CBR_9600;
BYTESIZE(npGPSInfo)=8;
PARITY(npGPSInfo)=NOPARITY;
STOPBITS(npGPSInfo)=ONESTOPBIT;

WRITE_OS(npGPSInfo).Offset=0;
WRITE_OS(npGPSInfo).OffsetHigh=0;
READ_OS(npGPSInfo).Offset=0;
READ_OS(npGPSInfo).OffsetHigh=0;

// create I/O event used for overlapped reads / writes

READ_OS(npGPSInfo).hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
if (READ_OS(npGPSInfo).hEvent==NULL)
{ LocalFree( npGPSInfo ) ;
return ( -1 ) ;
}
WRITE_OS(npGPSInfo).hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
if (NULL==WRITE_OS(npGPSInfo).hEvent)
{ CloseHandle(READ_OS(npGPSInfo).hEvent);
LocalFree(npGPSInfo) ;
return (-1) ;
}

return ( (LRESULT) TRUE ) ;
}

BOOL NEAR DestroyGPSInfo()
{
if (!npGPSInfo) return (FALSE);

if (CONNECTED(npGPSInfo)) CloseConnection();

CloseHandle(READ_OS(npGPSInfo).hEvent);
CloseHandle(WRITE_OS(npGPSInfo).hEvent);
CloseHandle(POSTEVENT(npGPSInfo));

LocalFree(npGPSInfo);
return (TRUE);
}

BOOL NEAR OpenConnection()
{
char szPort[15];
BOOL fRetVal;
HCURSOR hOldCursor,hWaitCursor;

HANDLE hCommWatchThread;
DWORD dwThreadID;
COMMTIMEOUTS CommTimeOuts;

if (!npGPSInfo) return (FALSE);

hWaitCursor=LoadCursor(NULL,IDC_WAIT) ;
hOldCursor=SetCursor(hWaitCursor) ;

wsprintf(szPort,"COM%d",PORT(npGPSInfo));

if ((COMDEV(npGPSInfo)=CreateFile(szPort,GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL))==(HANDLE)-1)
return ( FALSE ) ;
else
{ SetCommMask(COMDEV(npGPSInfo),EV_RXCHAR);
SetupComm(COMDEV(npGPSInfo),4096,4096);
PurgeComm(COMDEV(npGPSInfo),PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
CommTimeOuts.ReadIntervalTimeout=0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutMultiplier=0;
CommTimeOuts.ReadTotalTimeoutConstant=1000;
CommTimeOuts.WriteTotalTimeoutMultiplier=0;
CommTimeOuts.WriteTotalTimeoutConstant=1000;
SetCommTimeouts(COMDEV(npGPSInfo),&CommTimeOuts);
}

fRetVal=SetupConnection();

if (fRetVal)
{ CONNECTED(npGPSInfo)=TRUE;
if (NULL==(hCommWatchThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,
0,(LPTHREAD_START_ROUTINE)CommWatchProc,
(LPVOID)NULL,0,&dwThreadID)))
{ CONNECTED(npGPSInfo)=FALSE;
CloseHandle(COMDEV(npGPSInfo));
fRetVal=FALSE;
}
else
{ THREADID(npGPSInfo)=dwThreadID;
HTHREAD(npGPSInfo)=hCommWatchThread;
EscapeCommFunction(COMDEV(npGPSInfo),SETDTR);
}
}
else
{ CONNECTED(npGPSInfo)=FALSE;
CloseHandle(COMDEV(npGPSInfo));
}

SetCursor(hOldCursor);
return (fRetVal);
}

BOOL NEAR SetupConnection()
{ BOOL fRetVal;
DCB dcb;

if (!npGPSInfo) return(FALSE);

dcb.DCBlength=sizeof(DCB);

GetCommState(COMDEV(npGPSInfo),&dcb);

dcb.BaudRate=BAUDRATE(npGPSInfo);
dcb.ByteSize=BYTESIZE(npGPSInfo);
dcb.Parity=PARITY(npGPSInfo);
dcb.StopBits=STOPBITS(npGPSInfo);

dcb.fOutxDsrFlow=FALSE;
dcb.fDtrControl=DTR_CONTROL_ENABLE;

dcb.fOutxCtsFlow=FALSE;
dcb.fRtsControl=RTS_CONTROL_ENABLE;
dcb.fInX=dcb.fOutX=FALSE;
dcb.fBinary=TRUE;
dcb.fParity=TRUE;

fRetVal=SetCommState(COMDEV(npGPSInfo),&dcb);
return (fRetVal);
}

BOOL NEAR CloseConnection()
{
if (!npGPSInfo) return(FALSE);

CONNECTED(npGPSInfo)=FALSE;

SetCommMask(COMDEV(npGPSInfo),0);
while(THREADID(npGPSInfo)!=0);

EscapeCommFunction(COMDEV(npGPSInfo),CLRDTR);
PurgeComm(COMDEV(npGPSInfo),PURGE_TXABORT|PURGE_RXABORT|
PURGE_TXCLEAR|PURGE_RXCLEAR);
CloseHandle(COMDEV(npGPSInfo));

return (TRUE);
}

int NEAR ReadCommBlock(LPSTR lpszBlock,int nMaxLength)
{
BOOL fReadStat ;
COMSTAT ComStat ;
DWORD dwErrorFlags;
DWORD dwLength;
DWORD dwError;

if (!npGPSInfo) return(FALSE);

ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat);
dwLength=min((DWORD)nMaxLength,ComStat.cbInQue);

if (dwLength>0)
{ fReadStat=ReadFile(COMDEV(npGPSInfo),lpszBlock,
dwLength,&dwLength,&READ_OS(npGPSInfo));
if (!fReadStat)
{ if (GetLastError()==ERROR_IO_PENDING)
{ OutputDebugString("\n\rIO Pending");
while(!GetOverlappedResult(COMDEV(npGPSInfo),&READ_OS(npGPSInfo),&dwLength,TRUE))
{ dwError=GetLastError();
if(dwError == ERROR_IO_INCOMPLETE) continue;
}

}
else
{ dwLength=0;
ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat);
}
}
}
return ( dwLength ) ;
}

BOOL NEAR WriteCommBlock(LPSTR lpByte,DWORD dwBytesToWrite)
{ BOOL fWriteStat;
DWORD dwBytesWritten;
DWORD dwErrorFlags;
DWORD dwError;
COMSTAT ComStat;

if (!npGPSInfo) return(FALSE);

fWriteStat=WriteFile(COMDEV(npGPSInfo),lpByte,dwBytesToWrite,
&dwBytesWritten,&WRITE_OS(npGPSInfo));

if (!fWriteStat)
{ if(GetLastError()==ERROR_IO_PENDING)
{ while(!GetOverlappedResult(COMDEV(npGPSInfo),
&WRITE_OS(npGPSInfo),&dwBytesWritten,TRUE))
{ dwError=GetLastError();
if(dwError == ERROR_IO_INCOMPLETE) continue;
else
{ ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat);
break;
}
}
}
else
{ ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat);
return ( FALSE );
}
}
return ( TRUE ) ;

}

DWORD FAR PASCAL CommWatchProc(LPSTR)
{ DWORD dwEvtMask;
OVERLAPPED os;
int nLength;
BYTE abIn[1024];

memset(&os,0,sizeof(OVERLAPPED));

// create I/O event used for overlapped read

os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
if (os.hEvent==NULL)
{ MessageBox(NULL,"Failed to create event for thread!","GPS Error!",MB_ICONEXCLAMATION|MB_OK);
return ( FALSE ) ;
}

if (!SetCommMask(COMDEV(npGPSInfo),EV_RXCHAR)) return (FALSE);

while (CONNECTED( npGPSInfo))
{ dwEvtMask=0 ;
WaitCommEvent(COMDEV(npGPSInfo),&dwEvtMask,NULL);

if ((dwEvtMask&EV_RXCHAR)==EV_RXCHAR)
{ do
{ if (nLength=ReadCommBlock((LPSTR)abIn,1024))
{ //WriteCommBlock((LPSTR)abIn,nLength );
*(abIn+nLength)=0;
::SendMessage(hGPSWnd,CN_SEND,nLength,(LONG)(LPSTR)abIn);
}
}
while ((nLength>0)&&(CONNECTED( npGPSInfo)));
}
}

CloseHandle(os.hEvent);
THREADID(npGPSInfo)=0;
HTHREAD(npGPSInfo)=NULL;
return(TRUE);
}
一般使用的順序是:
CreateGPSInfo(被通知的窗口句柄,串口端口號1或2);
OpenConnection();//建立聯結它會調用SetupConnection
DestroyGPSInfo();//解除聯結它會調用CloseConnection

可以用ReadCommBlock/WriteCommBlock來讀/寫串口
CommWatchProc是監視串口的線程,由OpenConnection建立

當串口有數據來的時侯,它會通知'被通知的窗口句柄'的窗口數據傳到的消息(自定義的)
∶:SendMessage(hGPSWnd,CN_SEND,nLength,(LONG)(LPSTR)abIn);
(2001-8-3 23:57:38)

无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频
性欧美长视频| 久久精品国产999大香线蕉| 国产精品成人**免费视频| 国产精品99久久久久久董美香| 日韩高清电影免费| 久久最新视频| 在线日韩成人| 国产精品sm| 欧美一区二区三区免费看| 国产极品久久久久久久久波多结野 | 国产精品日本| 日韩av二区在线播放| 视频一区在线视频| 国产精品普通话对白| 久久亚洲道色| 在线视频亚洲| 国产精品欧美一区二区三区不卡| 婷婷激情一区| 国产精品成人自拍| 欧美日韩一区二区三区不卡视频 | 欧美香蕉视频| 国产一区丝袜| 精品视频亚洲| 91亚洲国产高清| 另类欧美日韩国产在线| 精品久久免费| 亚洲精品成人图区| 亚洲91网站| 日韩毛片视频| 日韩视频一区| 久久美女性网| 色天使综合视频| 亚洲在线免费| 日韩高清在线一区| 首页亚洲欧美制服丝腿| 久久久成人网| 国产在线观看91一区二区三区| 国产精品亚洲成在人线| 日本综合字幕| 久久性天堂网| 久久亚州av| 91欧美精品| 日韩大片在线观看| 免费一级欧美片在线观看网站 | 欧美日一区二区在线观看| 97人人精品| 亚洲综合电影| 国产精品入口久久| 久久久久伊人| 日av在线不卡| 999国产精品永久免费视频app| a日韩av网址| 久久精品97| 国产一区丝袜| 伊人久久高清| 亚洲激情中文| 美女视频黄免费的久久| 国内精品99| 成人一二三区| 一区二区小说| 欧美日韩精品一本二本三本| 9色精品在线| 国产va免费精品观看精品视频| 精品一区视频| 日韩一区精品| 国产精品网址| 免费在线小视频| 亚洲欧洲免费| 久久久久亚洲| 国精品产品一区| 国产午夜久久av| 久久精品国语| 国产亚洲欧美日韩精品一区二区三区| 免费不卡中文字幕在线| 石原莉奈在线亚洲三区| 日韩深夜视频| 亚洲在线电影| 亚洲国产一区二区在线观看| 国产999精品在线观看 | 香蕉久久夜色精品国产| 久久精品国产亚洲夜色av网站| 久久精品伊人| 中文字幕一区二区三区在线视频| 91综合网人人| 久久国内精品自在自线400部| 欧美~级网站不卡| 欧美精选视频一区二区| 久久青青视频| 在线亚洲自拍| 日韩综合精品| 国产精品久久久久久久久久齐齐| 欧美 日韩 国产一区二区在线视频| 日本一区二区三区中文字幕| 日韩av首页| 久久久男人天堂| 免费视频一区二区三区在线观看| 日韩高清欧美激情| 日韩av一级片| 欧美日韩一区二区国产| 日韩一区二区免费看| 老司机免费视频一区二区| 奶水喷射视频一区| 国产色噜噜噜91在线精品| 91亚洲国产成人久久精品| 欧美亚洲国产激情| 日韩久久一区二区三区| 免费观看在线综合色| 久久亚洲专区| 亚洲国内欧美| 午夜日韩福利| 欧美va天堂在线| 欧美日韩在线二区| 在线精品小视频| 蜜臀91精品一区二区三区| 婷婷亚洲五月| 国产高清一区| 黄色免费成人| 久久美女性网| 亚洲图片久久| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 精品在线91| 欧美极品中文字幕| 欧美天堂视频| 视频一区二区不卡| 激情国产在线| 欧美a一区二区| 欧美aa国产视频| 三级在线观看一区二区| 美女视频免费精品| 久久久成人网| 国产精品一区二区精品视频观看| 91欧美在线| 久久国产精品亚洲77777| 视频精品一区| 久久精品免费一区二区三区| 亚洲精品在线观看91| 老司机精品视频网| 亚洲www免费| 神马午夜在线视频| 日韩av在线免费观看不卡| 日韩精品电影一区亚洲| 国产一区日韩一区| 波多视频一区| 国产亚洲欧美日韩精品一区二区三区 | 亚洲欧美久久| 99在线精品免费视频九九视| 免费观看久久av| 日韩三区免费| 精品中文字幕一区二区三区av| 激情综合网站| 国产高清一区二区| 亚洲精品97| 久久精品国产99国产精品| 亚洲精品一级二级三级| 不卡一二三区| 日韩一区二区三区精品| 欧美日一区二区在线观看| 自拍日韩欧美| 日本麻豆一区二区三区视频| 国产一区二区精品久| 九九久久婷婷| 欧美aa一级| 国产精品美女在线观看直播| 国产成人久久| 精品亚洲成人| 蜜臀久久久99精品久久久久久| 欧美日韩一区二区三区在线电影| 国产欧美一区二区三区米奇| 婷婷五月色综合香五月| 亚洲网站视频| 精品国产成人| 开心激情综合| 麻豆理论在线观看| 中文字幕成在线观看| 国产精品a级| 久久精品国产99国产| 国产日韩三级| 亚洲综合日韩| 国产欧美久久一区二区三区| 午夜影院欧美| 亚洲美女久久| 欧美日一区二区三区在线观看国产免| 国产亚洲精品自拍| 水野朝阳av一区二区三区| 亚洲欧美一级| 中文av在线全新| 欧美精品影院| 日韩高清不卡一区| 视频一区欧美精品| 麻豆国产精品一区二区三区| 日韩不卡一区二区三区| 蜜桃视频第一区免费观看| 中文字幕亚洲在线观看| 精品国产亚洲日本| 亚洲三级欧美| 日韩欧美综合| 美女亚洲一区| 亚洲最新无码中文字幕久久| 日韩久久电影| 在线观看亚洲精品福利片|