• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            edog

            冰凍熱狗
            數(shù)據(jù)加載中……

            一個串口通訊的類

            /* CommUtils.h */
            #ifndef _CommUtils_H__
            #define _CommUtils_H__

            class CommUtils  
            {
            public:
                
            bool ReadCom(unsigned char * ReceiveData, DWORD& ReceiveLength);
                
            void CloseCom();
                
            bool WriteCom(unsigned char * sendchar,int sendsize);
                
            bool OpenCom(int Port);

                CommUtils();
                
            virtual ~CommUtils();
                
            int m_Port;
                
            char szCurPath[256];

            private:
                OVERLAPPED ReadovReady, WriteovReady;
                HANDLE hComm;
                
            bool bOpenCom;
            }
            ;

            #endif

            /* 
                CommUtils.cpp    串口通訊類
                Author: edog    2007-11-21
                EMail: comwell@126.com
             
            */

            #include 
            "stdafx.h"
            #include 
            "CommUtils.h"
            #include 
            "stdio.h"
            const int READ_TIMEOUT = 500;

            CommUtils::CommUtils()
            {
                bOpenCom 
            = false;
            }


            CommUtils::
            ~CommUtils()
            {
                
            this->CloseCom();
            }


            bool CommUtils::OpenCom(int Port)
            {
                
            if (bOpenCom)
                
            {
                    
            this->CloseCom();
                    bOpenCom 
            = false;
                }

                
            char szport[10];
                sprintf(szport,
            "COM%d",Port);
                hComm 
            = CreateFile(    szport,
                                    GENERIC_READ
            |GENERIC_WRITE,
                                    
            0,
                                    NULL,
                                    OPEN_EXISTING,
                                    FILE_FLAG_OVERLAPPED, 
            //FILE_ATTRIBUTE_NORMAL|
                                    NULL);
                
                
                
            if (hComm == INVALID_HANDLE_VALUE)        return false;
                
            if (!SetupComm(hComm, 1024512))        return false;
                
                COMMTIMEOUTS commtimeouts;
                commtimeouts.ReadIntervalTimeout 
            = MAXDWORD;
                commtimeouts.ReadTotalTimeoutConstant 
            =0;
                commtimeouts.ReadTotalTimeoutMultiplier 
            =0;
                commtimeouts.WriteTotalTimeoutConstant 
            =0;
                commtimeouts.WriteTotalTimeoutMultiplier
            =0;
                
                
            if (!SetCommTimeouts(hComm, &commtimeouts))        return false;

                memset(
            &ReadovReady,0,sizeof(OVERLAPPED));
                memset(
            &WriteovReady,0,sizeof(OVERLAPPED));
                ReadovReady.hEvent 
            = CreateEvent(NULL,TRUE,FALSE,NULL);
                WriteovReady.hEvent 
            =CreateEvent(NULL,TRUE,FALSE,NULL);
                
                SECURITY_ATTRIBUTES sa;
                sa.nLength
            =sizeof(SECURITY_ATTRIBUTES);
                sa.lpSecurityDescriptor
            =NULL;
                sa.bInheritHandle
            =TRUE;
                
                DCB dcb;
                GetCommState(hComm, 
            &dcb);
                dcb.fBinary 
            = TRUE;
                dcb.fParity 
            = TRUE;
                dcb.BaudRate 
            = CBR_9600;        // 波特率 9600
                dcb.ByteSize = 8;                // 8 位數(shù)據(jù)位
                dcb.Parity = NOPARITY;            // 無奇偶校驗
                dcb.StopBits = ONESTOPBIT;        // 1 個停止位
                
                
            if (!SetCommState(hComm, &dcb ))        return false;

                bOpenCom 
            = true;
                
            return bOpenCom;
            }


            bool CommUtils::WriteCom(unsigned char *sendchar, int sendsize)
            {
                
            if (!bOpenCom)    return false;
                
                DWORD    BytesSent;
                DWORD    resD;        
                
                PurgeComm(hComm, PURGE_RXCLEAR 
            | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
                
                BytesSent
            =0;
                BOOL hr 
            = WriteFile(hComm,                            // Handle to COMM Port
                                    sendchar,                        // Pointer to message buffer in calling finction
                                    sendsize,                        // Length of message to send
                                    &BytesSent,                        // Where to store the number of bytes sent
                                    &WriteovReady);                    // Overlapped structure
                if(!hr)
                
            {
                    
            if(GetLastError() != ERROR_IO_PENDING)
                    
            {
                        
            return false;
                    }

                    
            else
                    
            {
                        resD
            =WaitForSingleObject(WriteovReady.hEvent,INFINITE);
                    }

                    
            switch(resD)
                    
            {
                        
            case WAIT_OBJECT_0:
                        
            {
                            
            if(!GetOverlappedResult(hComm,&WriteovReady,&BytesSent,false))
                                
            return false;
                            
            else
                                
            return true;
                            
                        }

                        
            default:
                            
            return false;
                            
            break;
                    }

                }

                
            return true;
            }


            void CommUtils::CloseCom()
            {
                
            if (!bOpenCom)    return;

                CloseHandle(hComm);
                hComm
            =NULL;
                
                CloseHandle(ReadovReady.hEvent);
                CloseHandle(WriteovReady.hEvent );
                ReadovReady.hEvent 
            =NULL;
                WriteovReady.hEvent 
            =NULL;
            }


            bool CommUtils::ReadCom(unsigned char * ReceiveData, DWORD& ReceiveLength)
            {
                
            if (!bOpenCom)    return false;
                
            if (ReadovReady.hEvent == NULL)    return false;
                
                ReceiveLength 
            = 0;
                
            if (ReadFile(hComm, ReceiveData, 128&ReceiveLength, &ReadovReady) == FALSE) 
                
            {
                    
            if (GetLastError() != ERROR_IO_PENDING)    return false;
                }


                
            if(ReceiveLength == 0)    return false;
                ReceiveData[ReceiveLength] 
            = 0;

                DWORD dwRead;
                DWORD dwRes 
            = WaitForSingleObject(ReadovReady.hEvent, READ_TIMEOUT);
                
            switch(dwRes)
                
            {
                    
            case WAIT_OBJECT_0:
                        
            if (!GetOverlappedResult(hComm, &ReadovReady, &dwRead, FALSE))    return false;
                        
            break;

                    
            case WAIT_TIMEOUT:
                        
            break;                
                        
                    
            default:
                        
            break;
                }

                
            return true;
            }




            以下為使用方法:
            // 1. 包含頭文件,定義變量
            #include "CommUtils.h"
            CommUtils theComm;
            unsigned 
            char data[1024];
            unsigned 
            long len = 0;

            // 2. 打開串口,設(shè)置接收定時器
            theComm.OpenCom(1);        // 打開COM1口
            SetTimer(1500);

            // 3. 發(fā)送數(shù)據(jù)
            theComm.WriteCom(data, len);

            // 4. 接收數(shù)據(jù)處理
            void CUARTDlg::OnTimer(UINT nIDEvent) 
            {
                
            if (nIDEvent == 1)
                
            {
                    
            if (theComm.ReadCom(data, len))
                    
            {
                        
            if (len > 0)    
                        
            {
                            
            // 接收數(shù)據(jù)處理。。。
                        }

                    }

                }

                CDialog::OnTimer(nIDEvent);
            }

            posted on 2007-11-21 10:28 冰凍熱狗 閱讀(3681) 評論(4)  編輯 收藏 引用 所屬分類: 應(yīng)用程序

            評論

            # re: 一個串口通訊的類  回復(fù)  更多評論   

            謝謝。 正要找這么一個東西,搜索到這里,順利用上了~~~
            沒有條件測試,應(yīng)該沒有問題。
            2008-10-19 21:40 | summer

            # re: 一個串口通訊的類  回復(fù)  更多評論   

            thinks a lot!
            2008-12-20 00:17 | 王建壯

            # re: 一個串口通訊的類  回復(fù)  更多評論   

            @Sharman
            廣告都作到這了,安哥拉的沙曼。。。
            2013-04-13 11:59 | ileson

            # re: 一個串口通訊的類  回復(fù)  更多評論   

            多謝樓主!正好需要!
            2014-03-16 21:55 | 水煮魚丸
            久久精品国产色蜜蜜麻豆| 亚洲欧美久久久久9999| 久久人人爽人人爽人人AV东京热| 久久精品国产AV一区二区三区| 蜜桃麻豆WWW久久囤产精品| 色婷婷久久综合中文久久蜜桃av| 麻豆一区二区99久久久久| 伊人久久综在合线亚洲2019 | 久久综合视频网站| 久久久久亚洲国产| 久久久九九有精品国产| 亚洲伊人久久综合中文成人网| 2020最新久久久视精品爱| 中文字幕久久欲求不满| 久久综合亚洲色HEZYO国产| 成人免费网站久久久| 久久国产精品一区二区| 精品久久久噜噜噜久久久| 人人狠狠综合久久亚洲婷婷| avtt天堂网久久精品| A级毛片无码久久精品免费| 国产亚洲精久久久久久无码77777| 国产精品综合久久第一页| 久久久久久夜精品精品免费啦| 欧洲国产伦久久久久久久| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 国产精品99久久久久久www| 1000部精品久久久久久久久| 亚洲午夜久久久影院| 无码精品久久一区二区三区| 久久99精品免费一区二区| 精品国产91久久久久久久| 91精品国产91久久综合| 1000部精品久久久久久久久| 亚洲精品无码久久毛片| 99国产精品久久| 久久人人添人人爽添人人片牛牛| 青青草国产成人久久91网| 久久福利资源国产精品999| 国产午夜久久影院| 久久91精品国产91久久麻豆|