📄 rs232comm.h
字号:
//---------------------------------------------------------------------------
#ifndef RS232CommH
#define RS232CommH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
typedef void __fastcall (__closure *TCommEvent)(DWORD EvMask);
typedef void __fastcall (__closure *TCommRxEvent)(DWORD Count);
typedef void __fastcall (__closure *TCommErrEvent)(DWORD Error);
enum TFlowControl {fcNone, fcXFlow, fcRTSCTS, fcDTRDSR};
enum TModemStatus {msCTS, msDSR, msRing, msDCD};
typedef Set<TModemStatus, 0, msCTS + msDSR + msRing + msDCD> MODEMSTAT;
//---------------------------------------------------------------------------
class TCommThread : public TThread
{
private:
OVERLAPPED os;
protected:
void __fastcall Execute();
void __fastcall OnCommEvent (void);
public:
__fastcall TCommThread(bool CreateSuspended);
void __fastcall StopEventWait (void);
HANDLE CommHandle;
DWORD EventMask;
TCommEvent OnEvent;
};
//---------------------------------------------------------------------------
class PACKAGE TRS232Comm : public TComponent
{
private:
HANDLE CommHandle;
bool isOpen;
int FBaudRate, FDataBits, FStopBits;
char FParity;
int FInQSize, FOutQSize;
void __fastcall HandleEvent (DWORD EvMask);
OVERLAPPED read_os, write_os;
TCommThread *CommThread;
TFlowControl FFlowControl;
AnsiString FPortName;
bool FNullStriping;
void __fastcall SetFlowControl (TFlowControl flow);
void __fastcall SetNullStriping (bool strip);
void __fastcall SetBaudRate (int value);
void __fastcall SetDataBits (int value);
void __fastcall SetStopBits (int value);
void __fastcall SetParity (char pari);
void __fastcall SetPortName (AnsiString name);
void __fastcall SetInQSize (int value);
void __fastcall SetOutQSize (int value);
DCB dcb;
void __fastcall ErrorMessage (AnsiString message);
TCommRxEvent FOnRxChar;
TNotifyEvent FOnBreak;
TNotifyEvent FOnRing;
TNotifyEvent FOnCTSChange;
TNotifyEvent FOnDSRChange;
TNotifyEvent FOnDCDChange;
TNotifyEvent FOnTxEmpty;
TCommErrEvent FOnError;
public:
__fastcall TRS232Comm(TComponent* Owner);
__fastcall ~TRS232Comm(void);
bool __fastcall Open (void);
void __fastcall Close (void);
bool __fastcall SetParameters (int baud, int Databits, char parity,
float stopbits);
bool __fastcall SetQueueSize (int inq, int outq);
int __fastcall Read (char *buf, DWORD max);
int __fastcall Write (char *data, int len);
MODEMSTAT __fastcall GetModemStatus (void);
HANDLE __fastcall GetHandle (void);
void __fastcall MakePortList (TStrings *list);
void __fastcall SetRTSState (bool state);
void __fastcall SetDTRState (bool state);
void __fastcall SetBreakState (bool state);
__published:
__property TFlowControl FlowControl = {read=FFlowControl, write=SetFlowControl,
default=fcNone};
__property bool NullStriping = {read=FNullStriping, write=SetNullStriping};
__property int BaudRate = {read=FBaudRate, write=SetBaudRate, default=19200};
__property int DataBits = {read=FDataBits, write=SetDataBits, default=8};
__property int StopBits = {read=FStopBits, write=SetStopBits, default=1};
__property char Parity = {read=FParity, write=SetParity, default='N'};
__property AnsiString PortName = {read=FPortName, write=SetPortName};
__property int InQSize = {read=FInQSize, write=SetInQSize, default=1024};
__property int OutQSize = {read=FOutQSize, write=SetOutQSize, default=1024};
__property TCommRxEvent OnRxChar = {read=FOnRxChar, write=FOnRxChar};
__property TNotifyEvent OnBreak = {read=FOnBreak, write=FOnBreak};
__property TNotifyEvent OnRing = {read=FOnRing, write=FOnRing};
__property TNotifyEvent OnCTSChange = {read=FOnCTSChange, write=FOnCTSChange};
__property TNotifyEvent OnDSRChange = {read=FOnDSRChange, write=FOnDSRChange};
__property TNotifyEvent OnDCDChange = {read=FOnDCDChange, write=FOnDCDChange};
__property TNotifyEvent OnTxEmpty = {read=FOnTxEmpty, write=FOnTxEmpty};
__property TCommErrEvent OnError = {read=FOnError, write=FOnError};
__property bool PortIsOpen = {read=isOpen};
};
//---------------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -