📄 serialport.h
字号:
#ifndef SERIALPORT_H
#define SERIALPORT_H
#include <Classes.hpp>
#include "includes.h"
#include <syncobjs.hpp>
#include "stdio.h"
#define WM_COMM_BREAK_DETECTED WM_USER+1 // A break was detected on input.
#define WM_COMM_CTS_DETECTED WM_USER+2 // The CTS (clear-to-send) signal changed state.
#define WM_COMM_DSR_DETECTED WM_USER+3 // The DSR (data-set-ready) signal changed state.
#define WM_COMM_ERR_DETECTED WM_USER+4 // A line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY.
#define WM_COMM_RING_DETECTED WM_USER+5 // A ring indicator was detected.
#define WM_COMM_RLSD_DETECTED WM_USER+6 // The RLSD (receive-line-signal-detect) signal changed state.
#define WM_COMM_RXCHAR WM_USER+7 // A character was received and placed in the input buffer.
#define WM_COMM_RXFLAG_DETECTED WM_USER+8 // The event character was received and placed in the input buffer.
#define WM_COMM_TXEMPTY_DETECTED WM_USER+9 // The last character in the output buffer was sent.
//class TMonitorThread;
void Uart1RX(INT8U rcv_data);
class CSerialPort
{
public:
int m_nWriteSize;
void ClosePort();
// contruction and destruction
CSerialPort();
virtual ~CSerialPort();
// port initialisation
BOOL InitPort(UINT portnr = 1, UINT baud = 19200, char parity = 'N', UINT databits = 8, UINT stopbits = 1, DWORD dwCommEvents = EV_RXCHAR, UINT writebuffersize = 1024);
HANDLE m_hComm;
// start/stop comm watching
BOOL StartMonitoring();
BOOL RestartMonitoring();
BOOL StopMonitoring();
DWORD GetWriteBufferSize();
DWORD GetCommEvents();
DCB GetDCB();
void WriteToPort(char* string);
void WriteToPort(char* string,int n);
void WriteToPort(LPCTSTR string);
void WriteToPort(LPCTSTR string,int n);
void SerialExecute();
void __fastcall StartThread();
public:
// protected memberfunctions
void ProcessErrorMessage(char* ErrorText);
UINT CommThread(LPVOID pParam);
void ReceiveChar(COMSTAT comstat);
void WriteChar();
// synchronisation objects
CRITICAL_SECTION m_csCommunicationSync;
BOOL m_bThreadAlive;
//TMonitorThread *m_Thread;
// handles
HANDLE m_hWriteEvent;
HANDLE m_hShutdownEvent;
HANDLE m_hEvent;
HANDLE mhSubThread;
// Event array.
// One element is used for each event. There are two event handles for each port.
// A Write event and a receive character event which is located in the overlapped structure (m_ov.hEvent).
// There is a general shutdown when the port is closed.
HANDLE m_hEventArray[3];
// structures
OVERLAPPED m_ov;
COMMTIMEOUTS m_CommTimeouts;
DCB m_dcb;
// misc
UINT m_nPortNr;
char* m_szWriteBuffer;
DWORD m_dwCommEvents;
DWORD m_nWriteBufferSize;
};
DWORD WINAPI StartSerialThread(LPVOID pParam);
typedef void (CSerialPort::*_PtrClassFunc)();
/*class TMonitorThread : public TThread //定义线程类
{
public:
void __fastcall Execute();
CSerialPort *m_Port;
void SetPort(CSerialPort *pPort){m_Port = pPort;}
__fastcall TMonitorThread(bool CreateSuspended, CSerialPort *port);
};*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -