serial.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // SerialClass.h: interface for the SSerial class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(_SERIALCLASS_SUNEW_20170608_INCLUDED_)
  5. #define _SERIALCLASS_SUNEW_20170608_INCLUDED_
  6. #include "define.h"
  7. #include "stdlib.h"
  8. #include <sys/types.h>
  9. #include <sys/stat.h>
  10. #include <stdio.h>
  11. #include <time.h>
  12. #include <fcntl.h>
  13. typedef enum
  14. {
  15. Parity_NO, //无校验位
  16. Parity_ODD, //奇校验
  17. Parity_EVEN //偶校验
  18. }Parity; //奇偶校验
  19. typedef enum
  20. {
  21. Flow_NO, //无流控
  22. Flow_XONOFF, //XONOFF校验
  23. Flow_CTS, //硬件校验
  24. Flow_DSR //硬件校验
  25. }FlowCtl; //流控
  26. //串口类
  27. MYEXPORTCLASS SSerial
  28. {
  29. public:
  30. //串口操作类,初始化
  31. SSerial ( void );
  32. ~SSerial ( void );
  33. //端口(如COM3,ttymxc3),波特率(如9600)
  34. virtual bool Open ( const char* sPort, const int iBaut );
  35. virtual bool IsOpen ();
  36. //数据位 停止位 校验位 流控
  37. void SetCtrl (int iDataBit = 8, int iStopBit = 1, Parity ParityBit = Parity_NO, FlowCtl iFlow = Flow_NO);
  38. virtual void Close ();
  39. virtual void Flush();//清除缓存
  40. //发送数据,返回已发长度,-1失败
  41. int Send (const char *data, int datalen , int timeout = 0 );
  42. //接收数据,返回已收长度,-1失败
  43. int Receive (char *data, int datalen, int timeout = 0 );
  44. protected:
  45. //发送数据,返回已发长度,-1失败
  46. virtual int SendOnce (const char *data, int datalen, int iTimeout);
  47. //接收数据,返回已收长度,-1失败
  48. virtual int ReceiveOnce (char *data, int datalen, int iTimeout);
  49. private:
  50. #ifdef WIN32
  51. HANDLE m_hCom;
  52. #else
  53. int m_hCom; //handle
  54. #endif
  55. //设置超时,单位毫秒
  56. void SetTimeout(unsigned int millisec);
  57. int m_nBaut; //baudrate
  58. char m_cDataBit; //data bits, 5, 6, 7, 8
  59. char m_cStopBit; //stop bits, 1, 2
  60. Parity m_cParityBit; //parity 0: none, 1: odd, 2: even
  61. FlowCtl m_cFlow; //flow control, 0: none, 1: hardware, 2: software
  62. };
  63. #endif // !defined(_SERIALCLASS_SUNEW_20170608_INCLUDED_)