⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ybcommdevice.h

📁 网吧电量采集、温湿度采集串口通信实例程序
💻 H
字号:
//---------------------------------------------------------------------------

#ifndef YbCommDeviceH
#define YbCommDeviceH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include "TCommPkg.h"
//---------------------------------------------------------------------------

class PACKAGE TYbCommFrameSettings: public TPersistent
{
__published:
    __property unsigned char FrameHead = { read = fGetFrameHead, write = fSetFrameHead, default = TCommPackage::DefaultFrameHead };
    __property unsigned char FrameTail = { read = fGetFrameTail, write = fSetFrameTail, default = TCommPackage::DefaultFrameTail };
    __property unsigned char FrameCtrl = { read = fGetFrameCtrl, write = fSetFrameCtrl, default = TCommPackage::DefaultFrameCtrl };
    __property bool    DoubleFrameMark = { read = fGetDblFrMark, write = fSetDblFrMark, default = true                           };

public:
    __fastcall TYbCommFrameSettings(TCommPackage *lpPkg) { _CommPkg = lpPkg; }
    void __fastcall SetValues(TYbCommFrameSettings *lpfs) { FrameHead=lpfs->FrameHead; FrameTail=lpfs->FrameTail; FrameCtrl=lpfs->FrameCtrl; }

private:
    TCommPackage *_CommPkg;

    bool __fastcall fGetDblFrMark(void) { return _CommPkg->DoubleFrameMark; }
    void __fastcall fSetDblFrMark(bool b) {  _CommPkg->DoubleFrameMark = b; }

    unsigned char __fastcall fGetFrameHead(void) { return _CommPkg->FrameHead; }
    unsigned char __fastcall fGetFrameTail(void) { return _CommPkg->FrameTail; }
    unsigned char __fastcall fGetFrameCtrl(void) { return _CommPkg->FrameCtrl; }

    void __fastcall fSetFrameHead(unsigned char c) { _CommPkg->FrameHead = c; }
    void __fastcall fSetFrameTail(unsigned char c) { _CommPkg->FrameTail = c; }
    void __fastcall fSetFrameCtrl(unsigned char c) { _CommPkg->FrameCtrl = c; }
};
//---------------------------------------------------------------------------
#pragma pack(push,1) // { //new pack
//---------------------------------------------------------------------------

class PACKAGE TYbCustomCommDevice : public TComponent
{
  public:
    enum TBaudRate
     {
       br110   ,//CBR_110
       br300   ,//CBR_300
       br600   ,//CBR_600
       br1200  ,//CBR_1200
       br2400  ,//CBR_2400
       br4800  ,//CBR_4800
       br9600  ,//CBR_9600
       br14400 ,//CBR_14400
       br19200 ,//CBR_19200
       br38400 ,//CBR_38400
       br56000 ,//CBR_56000
       br57600 ,//CBR_57600
       br115200,//CBR_115200
       br128000,//CBR_128000
       br256000,//CBR_256000
     };

    enum TParity
     {
       ptNoParity   ,//NOPARITY
       ptOddParity  ,//ODDPARITY
       ptEvenParity ,//EVENPARITY
       ptMarkParity ,//MARKPARITY
       ptSpaceParity,//SPACEPARITY
     };

    enum TStopBits
     {
       sbOneStopBit    ,//ONESTOPBIT   //1 stop bit
       sbOne_5_StopBits,//ONE5STOPBITS //1.5 stop bits
       sbTwoStopBit    ,//TWOSTOPBITS  //2 stop bits
     };

    enum TFlowControl
     {
       fcNone         ,//AT&K0
       fcRtsCts       ,//AT&K3
       fcXonXoff      ,//AT&K4
       fcTranXonXoff  ,//AT&K5
       fcRtsCtsXonXoff,//AT&K6
     };

    enum TModemStatusItem
     {
       msCtsOn , //MS_CTS_ON
       msDsrOn , //MS_DSR_ON
       msRingOn, //MS_RING_ON
       msRlsdOn, //MS_RLSD_ON
     };

    enum TNotifyMsgType
     {
       nmtCommMsg = WM_USER + 2,
       nmtPackage = WM_USER + 3,
     };

    typedef Set<TModemStatusItem,msCtsOn,msRlsdOn>TModemStatus;

    __property bool         Active       = { read = fGetActive , write = fSetActive };
    __property int          PortNo       = { read = fGetPort   , write = fSetPort   };
    __property TBaudRate    Baud         = { read = fGetBaud   , write = fSetBaud   };

    __property TParity      Parity       = { read = fGetParity   , write = fSetParity   };
    __property int          ByteSize     = { read = fGetByteSize , write = fSetByteSize };
    __property TStopBits    StopBits     = { read = fGetStopBits , write = fSetStopBits };

    __property TFlowControl FlowControl  = { read = fGetFlCtrl       , write = fSetFlCtrl };
    __property int          AutoAnswer   = { read = fGetAutAns       , write = fSetAutAns };
    __property TModemStatus ModemStatus  = { read = fGetModemStatus                       }; //read only
    __property bool         DisableWrite = { read = fGetDisableWrite , write = fSetDisableWrite};
    __property bool         SyncEvents   = { read = _bSyncEvents     , write = fSetSyncEvents , default = true };

    __property long         InBufSize    = { read = fGetInBufSize  , write = fSetInBufSize };
    __property long         OutBufSize   = { read = fGetOutBufSize , write = fSetOutBufSize};

    __property long         HwInSize     = { read = fGetHwInSize  , write = fSetHwInSize  };
    __property long         HwOutSize    = { read = fGetHwOutSize , write = fSetHwOutSize };

    __property long         QueueSize       = { read = fGetQSize      , write = fSetQSize }; //default: 16
    __property long         PackageSize     = { read = fGetPkgSz      , write = fSetPkgSz }; //default: 4096
    __property TCommPackageType PackageType = { read = fGetPkgType    , write = fSetPkgType, default = cptCompatiblePkg };
    __property long         PackageInterval = { read = fGetPkgInterval, write = fSetPkgInterval, default = 50 };

    __property bool DTR  = { read = fGetDTR , write = fSetDTR  }; //Computer status, read/write
    __property bool RTS  = { read = fGetRTS , write = fSetRTS  }; //Computer status, read/write
    __property bool CTS  = { read = fGetCTS  }; //Modem status, read-only
    __property bool DSR  = { read = fGetDSR  }; //Modem status, read-only
    __property bool RING = { read = fGetRING }; //Modem status, read-only
    __property bool RLSD = { read = fGetRLSD }; //Modem status, read-only, DCD=RLSD
    __property bool DCD  = { read = fGetRLSD }; //Modem status, read-only, DCD=RLSD

    __property void __fastcall (__closure *OnPackage   ) (TObject *Sender, int NotifyType) = { read = _lpfnPackageNotify, write = _lpfnPackageNotify };
    __property void __fastcall (__closure *OnCommNotify) (TObject *Sender, int NotifyType) = { read = _lpfnCommNotify   , write = _lpfnCommNotify    };
    __property void __fastcall (__closure *AfterOpen   ) (TObject *Sender) = { read = _lpfnAfterOpen  , write = _lpfnAfterOpen   };
    __property void __fastcall (__closure *BeforeClose ) (TObject *Sender) = { read = _lpfnBeforeClose, write = _lpfnBeforeClose };

    virtual long __fastcall Read(void far *s, long n);
    virtual long __fastcall Write(const void far *s, long n);
    virtual long __fastcall Command(const char far *s);

    virtual bool __fastcall ReadPackage(void *lpPkg);
    virtual bool __fastcall WritePackage(const void *lpPkg);
    virtual unsigned long __fastcall ReadPackage(void *lpPkg, unsigned long BufSize);
    virtual unsigned long __fastcall WritePackage(const void *lpPkg, unsigned long nBytes);

    virtual void __fastcall PurgeRead(bool bAbort=false);
    virtual void __fastcall PurgeWrite(bool bAbort=false);

    virtual bool __fastcall SettingsDialog(TComponent* AOwner, bool FActive=false); //return true = OK.
    virtual void __fastcall ResetModem(void); //reset modem to power-on status
    virtual void __fastcall InitModem(void); //init modem using TComm32 properties
    virtual BOOL __fastcall EscapeCommFunction(DWORD dwFunc); //dwFunc: one of the following values: CLRDTR,CLRRTS,SETDTR,SETRTS,SETXOFF,SETXON,SETBREAK,CLRBREAK

    __property HANDLE     Handle     = { read = fGetHandle   };
    __property bool       UsePackage = { read = _bUsePackage, write = fSetUsePackage };
    __property TYbCommFrameSettings *FrameSettings = { read = _FrameSettings, write = fSetFrameSettings };

    __property TCommQueue *InQueue   = { read = fGetInQueue  };
    __property TCommQueue *OutQueue  = { read = fGetOutQueue };

    __property TComm32      *CommPort    = { read = _CommPort    };
    __property TCommPackage *CommPackage = { read = _CommPackage };

    __fastcall TYbCustomCommDevice(TComponent* Owner);
    virtual __fastcall ~TYbCustomCommDevice();

  protected:
    virtual void __fastcall EvCommNotify(TObject *Sender, int NotifyType);
    virtual void __fastcall EvPackageNotify(TObject *Sender, int NotifyType);
    virtual void __fastcall EvAfterOpen(TObject *Sender);
    virtual void __fastcall EvBeforeClose(TObject *Sender);

  private:
    TComm32      *_CommPort;
    TCommPackage *_CommPackage;
    TYbCommFrameSettings *_FrameSettings;
    bool _bUsePackage, _bSyncEvents;
    HWND          _hNotifyWindow;

    HANDLE __fastcall fGetHandle(void);
    void   __fastcall fSetUsePackage(bool bup);
    void   __fastcall fSetFrameSettings(TYbCommFrameSettings *fs) { _FrameSettings->SetValues(fs); }

    TCommQueue *__fastcall fGetInQueue(void);
    TCommQueue *__fastcall fGetOutQueue(void);

    bool      __fastcall fGetActive(void);
    void      __fastcall fSetActive(bool b);
    int       __fastcall fGetPort(void);
    void      __fastcall fSetPort(int n);
    TBaudRate __fastcall fGetBaud(void);
    void      __fastcall fSetBaud(TBaudRate br);

    TParity   __fastcall fGetParity(void);
    void      __fastcall fSetParity(TParity);
    int       __fastcall fGetByteSize(void);
    void      __fastcall fSetByteSize(int);
    TStopBits __fastcall fGetStopBits(void);
    void      __fastcall fSetStopBits(TStopBits);

    TFlowControl __fastcall fGetFlCtrl(void);
    void __fastcall fSetFlCtrl(TFlowControl);
    int  __fastcall fGetAutAns(void);
    void __fastcall fSetAutAns(int);
    TModemStatus __fastcall fGetModemStatus(void);
    bool __fastcall fGetDisableWrite(void);
    void __fastcall fSetDisableWrite(bool);
    void __fastcall fSetSyncEvents(bool);

    long __fastcall fGetInBufSize(void);
    void __fastcall fSetInBufSize(long);
    long __fastcall fGetOutBufSize(void);
    void __fastcall fSetOutBufSize(long);

    long __fastcall fGetHwInSize(void);
    void __fastcall fSetHwInSize(long);
    long __fastcall fGetHwOutSize(void);
    void __fastcall fSetHwOutSize(long);

    long __fastcall fGetQSize(void);
    void __fastcall fSetQSize(long);
    long __fastcall fGetPkgSz(void);
    void __fastcall fSetPkgSz(long);

    bool __fastcall fGetDTR(void);  //Computer status, read/write
    void __fastcall fSetDTR(bool);  //Computer status, read/write
    bool __fastcall fGetRTS(void);  //Computer status, read/write
    void __fastcall fSetRTS(bool);  //Computer status, read/write
    bool __fastcall fGetCTS(void);  //Modem status, read-only
    bool __fastcall fGetDSR(void);  //Modem status, read-only
    bool __fastcall fGetRING(void); //Modem status, read-only
    bool __fastcall fGetRLSD(void); //Modem status, read-only

    TCommPackageType __fastcall fGetPkgType(void);
    void __fastcall fSetPkgType(TCommPackageType);

    long __fastcall fGetPkgInterval(void);
    void __fastcall fSetPkgInterval(long);

    void __fastcall _EvNotifyProc(Messages::TMessage &Message);
    void __fastcall _EvComm(TObject *Sender, int NotifyType);
    void __fastcall _EvPackage(TObject *Sender, int NotifyType);
    void __fastcall _EvAfterOpen(TObject *Sender);
    void __fastcall _EvBeforeClose(TObject *Sender);

    void __fastcall (__closure *_lpfnCommNotify)(TObject *Sender, int NotifyType);
    void __fastcall (__closure *_lpfnPackageNotify)(TObject *Sender, int NotifyType);
    void __fastcall (__closure *_lpfnAfterOpen) (TObject *Sender);
    void __fastcall (__closure *_lpfnBeforeClose) (TObject *Sender);
};
//---------------------------------------------------------------------------

class PACKAGE TYbCommDevice : public TYbCustomCommDevice
{
  __published:
    __property PortNo;

    __property Baud;
    __property Parity;
    __property ByteSize;
    __property StopBits;

    __property FlowControl;  //for modem flowcontrol
    __property AutoAnswer;   //0: no answer, >0: answer after # rings
    __property SyncEvents = { default = true }; //synchronize events to main thread

    __property InBufSize;    //software buffer size
    __property OutBufSize;   //software buffer size
    __property HwInSize;     //hardware/driver buffer size
    __property HwOutSize;    //hardware/driver buffer size

    __property QueueSize;    //default: 16
    __property PackageSize;  //default: 4096
    __property PackageType;  //default: cptCompatiblePkg
    __property PackageInterval;//default: 50
    __property UsePackage;   //default: false
    __property FrameSettings;//default: eb,ee,ec

    __property OnPackage;    //EV_RXCHAR|EV_TXEMPTY|EV_CTS|EV_DSR|EV_RLSD|EV_RING|EV_RXFLAG|EV_RX80FULL|EV_ERR
    __property OnCommNotify; //EV_RXCHAR|EV_TXEMPTY|EV_CTS|EV_DSR|EV_RLSD|EV_RING|EV_RXFLAG|EV_RX80FULL|EV_ERR
    __property AfterOpen;
    __property BeforeClose;

  public:
    __fastcall TYbCommDevice(TComponent* Owner);
};
//---------------------------------------------------------------------------

#pragma pack(pop) // } //end of new pack
//---------------------------------------------------------------------------

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -