//========================================================= // rs232c.h // v.1.00.00 981015 Flush, SetTimeOut, ReadLine // default 9600bps // #ifndef __rs232c_H #define __rs232c_H //---------------------------------- #include /* (C)Mathematical Assist Design Lab. (C)数理設計研究所  使用法 コンストラクタでCOMポートを指定してとにかく初期化する 成功したかどうかは ComStat Check(void) { return ComStatus; } を呼び出してREADY以外ならエラー エラーのときはデストラクタで廃棄すること COMポートを変えたいときは  デストラクタで廃棄した後に、コンストラクタではじめる =========もろもろの再設定========= ボーレート、その他DCBですべて変更できる。 DCB (変数名はdcb)を直接操作して、設定はSetDCB(void)で行うこと。 Esample class RS232C *rs; rs->dcb.fBinary = 1; バイナリ モード、 EOFをチェックしない SetDCB(); この2行だけで再設定が行われる。 */ //---------------------------------- #define ON TRUE #define OFF FALSE #define TX_BUF_SIZE 4096 #define RX_BUF_SIZE 4096 // #define SEC *1000 // ------------------ class RS232C { public: int MyComNum; HANDLE ComHandle; DWORD ModemCondition; COMMTIMEOUTS comtime; enum ComStat { USED, NONE, NG, READY }; ComStat ComStatus; DCB dcb; //すべての設定操作はこれを元にする RS232C(int ComNum, char *param = "baud=9600 parity=N data=8 stop=1"); ~RS232C(); //DCB 関係 //BuildComで初期化するときは、この関数の後にすること virtual void InitDCB(void); //DCBを設定する ComStat SetDCB(void); //DCBを再設定する // 受信タイムアウト時間設定 msec 0で無限待ち、MAXDWORDで待たず。 void SetTimeOut( DWORD t ); // 受信バッファクリア void Flush(void) { PurgeComm(PURGE_RXCLEAR); } //--- ComStat Check(void) { return ComStatus; } bool GetCommMask(LPDWORD mask) { return ::GetCommMask(ComHandle, mask); } bool SetCommMask(DWORD mask) { return ::SetCommMask(ComHandle, mask); } bool WaitCommEvent(LPDWORD mask, LPOVERLAPPED ov) { return ::WaitCommEvent(ComHandle, mask, ov); } //Comnuaction Mode Set //バイナリモードの設定 void SetBinaryMode(void) { dcb.fBinary=1; SetDCB(); } //Signal Set void SetDTR(int n) { EscapeCommFunction(ComHandle, (n)? SETDTR: CLRDTR); } void SetBreak(int n){ EscapeCommFunction(ComHandle, (n)? SETBREAK: CLRBREAK); } void SetRTS(int n) { EscapeCommFunction(ComHandle, (n)? SETRTS: CLRRTS); } //Condition Read bool GetRI(void) { GetCommModemStatus(ComHandle, &ModemCondition); return (ModemCondition & MS_RING_ON)? TRUE : FALSE; } bool GetDCD(void) { GetCommModemStatus(ComHandle, &ModemCondition); return (ModemCondition & MS_RLSD_ON)? TRUE : FALSE; } bool GetDSR(void) { GetCommModemStatus(ComHandle, &ModemCondition); return (ModemCondition & MS_DSR_ON)? TRUE : FALSE; } bool GetCTS(void) { GetCommModemStatus(ComHandle, &ModemCondition); return (ModemCondition & MS_CTS_ON)? TRUE : FALSE; } bool PurgeComm(DWORD flag = PURGE_TXABORT | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_RXCLEAR) { return ::PurgeComm(ComHandle, flag); } //Data Communication int Send( const void *buf, int size); //送信に成功した数を返す // 981005 F int Read(void *buf, int size); //受信したバイト数を返す char *ReadStr(char *buf, int size); //moziretuを返す int ReadLine(char *rcvStr, char nl, int bufsize ); // 1998/10/07 }; //---------------------------------- //---------------------------------- //========================================================= #endif //__rs232c_H