• <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 | 水煮魚丸
            久久精品18| 国产午夜精品久久久久免费视| 无码精品久久一区二区三区| 欧美亚洲国产精品久久高清| 亚洲中文字幕久久精品无码APP | 手机看片久久高清国产日韩| 亚洲国产另类久久久精品黑人 | 久久久国产乱子伦精品作者| 91精品国产91热久久久久福利| 国内精品久久久久影院老司| 精品久久久久成人码免费动漫| 色99久久久久高潮综合影院| 中文字幕无码久久精品青草| 久久精品国产免费一区| 久久无码AV一区二区三区| 久久精品草草草| 欧洲成人午夜精品无码区久久| 欧美精品福利视频一区二区三区久久久精品| 亚洲精品乱码久久久久久中文字幕| 久久久久亚洲AV成人网| 国产精品久久久久天天影视| 久久精品一区二区三区AV| 思思久久99热免费精品6| 精品久久国产一区二区三区香蕉| 久久天天躁狠狠躁夜夜网站| 国内精品久久久久影院薰衣草 | 亚洲成色999久久网站| 久久综合给合久久狠狠狠97色69| 一本大道久久东京热无码AV| 欧美性大战久久久久久| 国内精品久久久久久久涩爱| 伊人色综合久久天天| 国产精品天天影视久久综合网| 久久久久久久久无码精品亚洲日韩| 2020国产成人久久精品 | 一本伊大人香蕉久久网手机| 久久精品国产91久久综合麻豆自制| AV无码久久久久不卡网站下载| 久久99国产精品尤物| 99精品久久精品| 国产精品久久久福利|