QuakeGod
2022-01-16 326d3e312c74726814c39c9d112faab03c4a167c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#pragma once
class HvSerialPort
{
public:
    double GetTimemS()
    {
        LARGE_INTEGER perfreq;
        LARGE_INTEGER percounter1;
        QueryPerformanceFrequency(&perfreq);
        QueryPerformanceCounter(&percounter1);
 
        double time1 = (double)percounter1.QuadPart / perfreq.QuadPart;
        return (time1 * 1000);
    };
public:
    enum Results {
        R_ERR = -1,
        R_OK = 0 ,
        R_ERR2 =1,
    };
    HANDLE hCom1;
    bool m_bOpened;
    int m_nPort;
    int m_nBaudRate;
    CString m_Settings;
    CCriticalSection m_CS1;
    CCriticalSection m_CS2;
 
    volatile bool MyThreadProc1ToRun;
    volatile bool MyThreadProc1Running;
 
    volatile int RecvBufDataLen = 0;
    unsigned char * RecvBuf[2048];
 
    DWORD m_dwError;
    CString m_strResult;
    int m_nCountToTry = 5;
    int m_nCountToWait = 0;
 
    volatile    DWORD TotalSendBytes, TotalRecvBytes;
    volatile    DWORD SendBytes, RecvBytes;
    volatile    DWORD LastSendBytes, LastRecvBytes;
    volatile     DWORD SendSpeed, RecvSpeed;
    volatile    double LastTime;
 
    typedef int(*pRecvDone)(void *, int); //RecvDone CallBack func
    int m_bRecvDoneCBSet = 0;
    typedef int(*pEventCB)(int ,void *); //Event CallBack func
    int m_bEventCBSet = 0;
 
    pRecvDone RecvDoneCB =NULL;
    pEventCB EventCB=NULL;
 
    HvSerialPort(void)
    {
        this->hCom1 = INVALID_HANDLE_VALUE;
        this->m_bOpened = 0;
 
        this->m_nPort = 0;
        this->m_nBaudRate = 0;
        this->m_Settings.Empty();
 
        this->m_dwError = 0;
    };
    ~HvSerialPort()
    {
        MyThreadProc1ToRun = 0;
        if (this->m_bOpened) { this->Close(); }
        this->hCom1 = INVALID_HANDLE_VALUE;
 
    };
public:
    int Init();
 
public:
    int SetParams(int nPortNum, int BaudRate, CString Settings);
    int PurgeComBuf()
    {
        return    PurgeComm(hCom1, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_TXCLEAR);
    }
 
    int Open();
    int ClearStatData();
    int CalSpeed();
 
    int Close();
    int SetRecvDoneCallBack(pRecvDone);
 
    int Send(void * pBuf, int len1);
    int Recv(void * pBuf, int len1);
 
    static UINT MyJumper1(LPVOID pParam);
    DWORD WINAPI MyThreadProc1(LPVOID pParam);
 
};