serchan.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:12k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * serchan.h
  3.  *
  4.  * Asynchronous Serial I/O channel class.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: serchan.h,v $
  30.  * Revision 1.12  1999/03/09 02:59:50  robertj
  31.  * Changed comments to doc++ compatible documentation.
  32.  *
  33.  * Revision 1.11  1999/02/16 08:11:10  robertj
  34.  * MSVC 6.0 compatibility changes.
  35.  *
  36.  * Revision 1.10  1998/09/23 06:21:21  robertj
  37.  * Added open source copyright license.
  38.  *
  39.  * Revision 1.9  1995/07/31 12:15:46  robertj
  40.  * Removed PContainer from PChannel ancestor.
  41.  *
  42.  * Revision 1.8  1995/06/17 11:13:18  robertj
  43.  * Documentation update.
  44.  *
  45.  * Revision 1.7  1995/03/14 12:42:33  robertj
  46.  * Updated documentation to use HTML codes.
  47.  *
  48.  * Revision 1.6  1995/01/14  06:19:37  robertj
  49.  * Documentation
  50.  *
  51.  * Revision 1.5  1994/08/23  11:32:52  robertj
  52.  * Oops
  53.  *
  54.  * Revision 1.4  1994/08/22  00:46:48  robertj
  55.  * Added pragma fro GNU C++ compiler.
  56.  *
  57.  * Revision 1.3  1994/07/17  10:46:06  robertj
  58.  * Moved data to PChannel class.
  59.  *
  60.  * Revision 1.2  1994/06/25  11:55:15  robertj
  61.  * Unix version synchronisation.
  62.  *
  63.  * Revision 1.1  1994/04/20  12:17:44  robertj
  64.  * Initial revision
  65.  *
  66.  */
  67. #define _PSERIALCHANNEL
  68. #ifdef __GNUC__
  69. #pragma interface
  70. #endif
  71. class PConfig;
  72. ///////////////////////////////////////////////////////////////////////////////
  73. // Serial Channel
  74. /**This class defines an I/O channel that communicates via a serial port. This
  75.    is usually an RS-232 port.
  76.  */
  77. class PSerialChannel : public PChannel
  78. {
  79.   PCLASSINFO(PSerialChannel, PChannel);
  80.   public:
  81.   /**@name Construction */
  82.   //@{
  83.     /// Create a new serial channel object, but do not open it.
  84.     PSerialChannel();
  85.     /// Configuration of serial port parity options.
  86.     enum Parity {
  87.       /// Use the default parity, ie do not change it.
  88.       DefaultParity,    
  89.       /// Set the port for no parity bit.
  90.       NoParity,         
  91.       /// Set the port to generate parity and make it even.
  92.       EvenParity,       
  93.       /// Set the port to generate parity and make it odd.
  94.       OddParity,        
  95.       /// Set the port parity bit to mark only.
  96.       MarkParity,       
  97.       /// Set the port parity bit to space only.
  98.       SpaceParity       
  99.     };
  100.     /// Configuration of serial port flow control options.
  101.     enum FlowControl {
  102.       /// Use the default flow control, ie do not change it.
  103.       DefaultFlowControl,
  104.       /// Set the port for no flow control.
  105.       NoFlowControl,    
  106.       /// Set the port for software or XON/XOFF flow control.
  107.       XonXoff,         
  108.       /// Set the port for hardware or RTS/CTS flow control.
  109.       RtsCts           
  110.     };
  111.     /**Create a serial channal.
  112.        The channel is opened it on the specified port and with the specified
  113.        attributes.
  114.      */
  115.     PSerialChannel(
  116.       const PString & port,
  117.       /**The name of the serial port to connect to. This is a platform
  118.          dependent string and woiuld rarely be a literal. The static function
  119.          #GetPortNames()# can be used to find the platforms serial ports.
  120.        */
  121.       DWORD speed = 0,
  122.       /**Serial port speed or baud rate. The actual values possible here are
  123.          platform dependent, but the standard value of 300, 1200, 2400, 4800,
  124.          9600, 19200, 38400 always be legal.
  125.        */
  126.       BYTE data = 0,
  127.       /**Number of data bits for serial port. The actual values possible here
  128.          are platform dependent, but 7 and 8 should always be legal.
  129.        */
  130.       Parity parity = DefaultParity,
  131.       /**Parity for serial port. The actual values possible here are platform
  132.          dependent, but #NoParity#, #OddParity# and
  133.          #EvenParity# should always be legal.
  134.        */
  135.       BYTE stop = 0,
  136.       /**Number of stop bits for serial port. The actual values possible here
  137.          are platform dependent, but 1 and 2 should always be legal.
  138.        */
  139.       FlowControl inputFlow = DefaultFlowControl,
  140.       /// Flow control for data from the remote system into this conputer.
  141.       FlowControl outputFlow = DefaultFlowControl
  142.       /// Flow control for data from this conputer out to remote system.
  143.     );
  144.     /**Create a serial channal.
  145.        The channel is opened using attributes obtained from standard variables
  146.        in the configuration file. Note that it assumed that the correct
  147.        configuration file section is already set.
  148.      */
  149.     PSerialChannel(
  150.       PConfig & cfg  /// Configuration file to read serial port attributes from.
  151.     );
  152.     /// Close the serial channel on destruction.
  153.     ~PSerialChannel();
  154.   //@}
  155.   /**@name Open functions */
  156.   //@{
  157.     /**Open a serial channal.
  158.        The channel is opened it on the specified port and with the specified
  159.        attributes.
  160.      */
  161.     virtual BOOL Open(
  162.       const PString & port,
  163.       /**The name of the serial port to connect to. This is a platform
  164.          dependent string and woiuld rarely be a literal. The static function
  165.          #GetPortNames()# can be used to find the platforms serial ports.
  166.        */
  167.       DWORD speed = 0,
  168.       /**Serial port speed or baud rate. The actual values possible here are
  169.          platform dependent, but the standard value of 300, 1200, 2400, 4800,
  170.          9600, 19200, 38400 always be legal.
  171.        */
  172.       BYTE data = 0,
  173.       /**Number of data bits for serial port. The actual values possible here
  174.          are platform dependent, but 7 and 8 should always be legal.
  175.        */
  176.       Parity parity = DefaultParity,
  177.       /**Parity for serial port. The actual values possible here are platform
  178.          dependent, but #NoParity#, #OddParity# and
  179.          #EvenParity# should always be legal.
  180.        */
  181.       BYTE stop = 0,
  182.       /**Number of stop bits for serial port. The actual values possible here
  183.          are platform dependent, but 1 and 2 should always be legal.
  184.        */
  185.       FlowControl inputFlow = DefaultFlowControl,
  186.       /// Flow control for data from the remote system into this conputer.
  187.       FlowControl outputFlow = DefaultFlowControl
  188.       /// Flow control for data from this conputer out to remote system.
  189.     );
  190.     /**Open a serial channal.
  191.        The channel is opened using attributes obtained from standard variables
  192.        in the configuration file. Note that it assumed that the correct
  193.        configuration file section is already set.
  194.      */
  195.     virtual BOOL Open(
  196.       PConfig & cfg  /// Configuration file to read serial port attributes from.
  197.     );
  198.     /**Get a list of the available serial ports. This returns a set of
  199.        platform dependent strings which describe the serial ports of the
  200.        computer. For example under unix it may be "ttyS0", under MS-DOS or
  201.        NT it would be "COM1" and for the Macintosh it could be "Modem".
  202.        @return
  203.        list of strings for possible serial ports.
  204.      */
  205.     static PStringList GetPortNames();
  206.   //@}
  207.   /**@name Configuration functions */
  208.   //@{
  209.     /**Set the speed (baud rate) of the serial channel.
  210.        @return
  211.        TRUE if the change was successfully made.
  212.      */
  213.     BOOL SetSpeed(
  214.       DWORD speed   /// New speed for serial channel.
  215.     );
  216.     /**Get the speed (baud rate) of the serial channel.
  217.        @return
  218.        current setting.
  219.      */
  220.     DWORD GetSpeed() const;
  221.     /**Set the data bits (5, 6, 7 or 8) of the serial port.
  222.        @return
  223.        TRUE if the change was successfully made.
  224.      */
  225.     BOOL SetDataBits(
  226.       BYTE data   /// New number of data bits for serial channel.
  227.     );
  228.     /**Get the data bits (5, 6, 7 or 8) of the serial port.
  229.        @return
  230.        current setting.
  231.      */
  232.     BYTE GetDataBits() const;
  233.     /**Set the parity of the serial port.
  234.        @return
  235.        TRUE if the change was successfully made.
  236.      */
  237.     BOOL SetParity(
  238.       Parity parity   /// New parity option for serial channel.
  239.     );
  240.     /**Get the parity of the serial port.
  241.        @return
  242.        current setting.
  243.      */
  244.     Parity GetParity() const;
  245.     /**Set the stop bits (1 or 2) of the serial port.
  246.        @return
  247.        TRUE if the change was successfully made.
  248.      */
  249.     BOOL SetStopBits(
  250.       BYTE stop   /// New number of stop bits for serial channel.
  251.     );
  252.     /**Get the stop bits (1 or 2) of the serial port.
  253.        @return
  254.        current setting.
  255.      */
  256.     BYTE GetStopBits() const;
  257.     /**Set the flow control (handshaking) protocol of the input to the serial
  258.        port.
  259.        @return
  260.        TRUE if the change was successfully made.
  261.      */
  262.     BOOL SetInputFlowControl(
  263.       FlowControl flowControl   /// New flow control for serial channel input.
  264.     );
  265.     /**Get the flow control (handshaking) protocol of the input to the serial
  266.        port.
  267.        @return
  268.        current setting.
  269.      */
  270.     FlowControl GetInputFlowControl() const;
  271.     /**Set the flow control (handshaking) protocol of the output to the serial
  272.        port.
  273.        @return
  274.        TRUE if the change was successfully made.
  275.      */
  276.     BOOL SetOutputFlowControl(
  277.       FlowControl flowControl   /// New flow control for serial channel output.
  278.     );
  279.     /**Get the flow control (handshaking) protocol of the output from the
  280.        serial port.
  281.        @return
  282.        current setting.
  283.      */
  284.     FlowControl GetOutputFlowControl() const;
  285.     /**Save the current port settings into the configuration file. Note that
  286.        it assumed that the correct configuration file section is already set.
  287.      */
  288.     virtual void SaveSettings(
  289.       PConfig & cfg   /// Configuration file to save setting into.
  290.     );
  291.   //@}
  292.   /**@name Status functions */
  293.   //@{
  294.     /** Set the Data Terminal Ready signal of the serial port. */
  295.     void SetDTR(
  296.       BOOL state = TRUE   /// New state of the DTR signal.
  297.     );
  298.     /**Clear the Data Terminal Ready signal of the serial port. This is
  299.        equivalent to #SetDTR(FALSE)#.
  300.      */
  301.     void ClearDTR();
  302.     /**Set the Request To Send signal of the serial port. */
  303.     void SetRTS(
  304.       BOOL state = TRUE   /// New state of the RTS signal.
  305.     );
  306.     /**Clear the Request To Send signal of the serial port. This is equivalent
  307.        to #SetRTS(FALSE)#.
  308.      */
  309.     void ClearRTS();
  310.     /** Set the break condition of the serial port. */
  311.     void SetBreak(
  312.       BOOL state = TRUE   /// New state of the serial port break condition.
  313.     );
  314.     /**Clear the break condition of the serial port. This is equivalent to
  315.        #SetBreak(FALSE)#.
  316.      */
  317.     void ClearBreak();
  318.     /**Get the Clear To Send signal of the serial port.
  319.     
  320.        @return
  321.        TRUE if the CTS signal is asserted.
  322.      */
  323.     BOOL GetCTS();
  324.     /**Get the Data Set Ready signal of the serial port.
  325.     
  326.        @return
  327.        TRUE if the DSR signal is asserted.
  328.      */
  329.     BOOL GetDSR();
  330.     /**Get the Data Carrier Detect signal of the serial port.
  331.     
  332.        @return
  333.        TRUE if the DCD signal is asserted.
  334.      */
  335.     BOOL GetDCD();
  336.     /**Get the Ring Indicator signal of the serial port.
  337.     
  338.        @return
  339.        TRUE if the RI signal is asserted.
  340.      */
  341.     BOOL GetRing();
  342.   //@}
  343.   private:
  344.     void Construct();
  345.     // Platform dependent construct of the serial channel.
  346. #ifdef DOC_PLUS_PLUS
  347. };
  348. #endif
  349. // Class declaration continued in platform specific header file ///////////////