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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * modem.h
  3.  *
  4.  * AT command set modem on asynchonous port 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: modem.h,v $
  30.  * Revision 1.12  1999/03/09 08:01:46  robertj
  31.  * Changed comments for doc++ support (more to come).
  32.  *
  33.  * Revision 1.11  1999/02/16 08:07:10  robertj
  34.  * MSVC 6.0 compatibility changes.
  35.  *
  36.  * Revision 1.10  1998/12/02 03:51:39  robertj
  37.  * Unix compatibility changes
  38.  *
  39.  * Revision 1.9  1998/09/23 06:20:53  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.8  1995/06/17 11:12:46  robertj
  43.  * Documentation update.
  44.  *
  45.  * Revision 1.7  1995/03/14 12:41:51  robertj
  46.  * Updated documentation to use HTML codes.
  47.  *
  48.  * Revision 1.6  1995/01/06  10:31:02  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/08/21  23:43:02  robertj
  58.  * Moved meta-string transmitter from PModem to PChannel.
  59.  *
  60.  * Revision 1.2  1994/07/25  03:32:29  robertj
  61.  * Fixed bug in GCC with enums.
  62.  *
  63.  * Revision 1.1  1994/06/25  11:55:15  robertj
  64.  * Initial revision
  65.  *
  66.  */
  67. #define _PMODEM
  68. #ifdef __GNUC__
  69. #pragma interface
  70. #endif
  71. #ifndef _PSERIALCHANNEL
  72. #include <ptlib/serchan.h>
  73. #endif
  74. /** A class representing a modem attached to a serial port. This adds the usual
  75.    modem operations to the basic serial port.
  76.    
  77.    A modem object is always in a particular state. This state determines what
  78.    operations are allowed which then move the object to other states. The
  79.    operations are the exchange of strings in "chat" script.
  80.    
  81.    The following defaults are used for command strings:
  82.        initialise         <CODE>ATZrw2sOKw100m</CODE>
  83.        deinitialise       <CODE>d2s+++d2sATH0r</CODE>
  84.        pre-dial           <CODE>ATDT</CODE>
  85.        post-dial          <CODE>r</CODE>
  86.        busy reply         <CODE>BUSY</CODE>
  87.        no carrier reply   <CODE>NO CARRIER</CODE>
  88.        connect reply      <CODE>CONNECT</CODE>
  89.        hang up            <CODE>d2s+++d2sATH0r</CODE>
  90.  */
  91. class PModem : public PSerialChannel
  92. {
  93.   PCLASSINFO(PModem, PSerialChannel)
  94.   public:
  95.     /** Create a modem object on the serial port specified. If no port was
  96.        specified do not open it. It does not initially have a valid port name.
  97.        
  98.        See the <A>PSerialChannel</A> class for more information on the
  99.        parameters.
  100.      */
  101.     PModem();
  102.     PModem(
  103.       const PString & port,   // Serial port name to open.
  104.       DWORD speed = 0,        // Speed of serial port.
  105.       BYTE data = 0,          // Number of data bits for serial port.
  106.       Parity parity = DefaultParity,  // Parity for serial port.
  107.       BYTE stop = 0,          // Number of stop bits for serial port.
  108.       FlowControl inputFlow = DefaultFlowControl,   // Input flow control.
  109.       FlowControl outputFlow = DefaultFlowControl   // Output flow control.
  110.     );
  111.     /** Open the modem serial channel obtaining the parameters from standard
  112.        variables in the configuration file. Note that it assumed that the
  113.        correct configuration file section is already set.
  114.      */
  115.     PModem(
  116.       PConfig & cfg   // Configuration file to read parameters from.
  117.     );
  118.   // Overrides from class PChannel
  119.     virtual BOOL Close();
  120.     // Close the modem serial port channel.
  121.   // Overrides from class PSerialChannel
  122.     /** Open the modem serial channel on the specified port.
  123.        
  124.        See the <A>PSerialChannel</A> class for more information on the
  125.        parameters.
  126.        
  127.        @return
  128.        TRUE if the modem serial port was successfully opened.
  129.      */
  130.     virtual BOOL Open(
  131.       const PString & port,   // Serial port name to open.
  132.       DWORD speed = 0,        // Speed of serial port.
  133.       BYTE data = 0,          // Number of data bits for serial port.
  134.       Parity parity = DefaultParity,  // Parity for serial port.
  135.       BYTE stop = 0,          // Number of stop bits for serial port.
  136.       FlowControl inputFlow = DefaultFlowControl,   // Input flow control.
  137.       FlowControl outputFlow = DefaultFlowControl   // Output flow control.
  138.     );
  139.     /** Open the modem serial port obtaining the parameters from standard
  140.        variables in the configuration file. Note that it assumed that the
  141.        correct configuration file section is already set.
  142.        @return
  143.        TRUE if the modem serial port was successfully opened.
  144.      */
  145.     virtual BOOL Open(
  146.       PConfig & cfg   // Configuration file to read parameters from.
  147.     );
  148.     virtual void SaveSettings(
  149.       PConfig & cfg   // Configuration file to write parameters to.
  150.     );
  151.     // Save the current modem serial port settings into the configuration file.
  152.   // New member functions
  153.     /** Set the modem initialisation meta-command string.
  154.        See the <A>PChannel::SendCommandString()</A> function for more
  155.        information on the format of the command string.
  156.        Note there is an implied <CODE>s</CODE> before the string.
  157.      */
  158.     void SetInitString(
  159.       const PString & str   // New initialisation command string.
  160.     );
  161.     /** Get the modem initialisation meta-command string.
  162.     
  163.        See the <A>PChannel::SendCommandString()</A> function for more
  164.        information on the format of the command string.
  165.        @return
  166.        string for initialisation command.
  167.      */
  168.     PString GetInitString() const;
  169.     /** The modem is in a state that allows the initialise to start.
  170.     
  171.        @return
  172.        TRUE if the <A>Initialise()</A> function may proceeed.
  173.      */
  174.     BOOL CanInitialise() const;
  175.     /** Send the initialisation meta-command string to the modem. The return
  176.        value indicates that the conditions for the operation to start were met,
  177.        ie the serial port was open etc and the command was successfully
  178.        sent with all replies met.
  179.        @return
  180.        TRUE if command string sent successfully and the objects state has
  181.        changed.
  182.      */
  183.     BOOL Initialise();
  184.     /** Set the modem de-initialisation meta-command string.
  185.        See the <A>PChannel::SendCommandString()</A> function for more
  186.        information on the format of the command string.
  187.        Note there is an implied <CODE>s</CODE> before the string.
  188.      */
  189.     void SetDeinitString(
  190.       const PString & str   // New de-initialisation command string.
  191.     );
  192.     /** Get the modem de-initialisation meta-command string.
  193.     
  194.        See the <A>PChannel::SendCommandString()</A> function for more
  195.        information on the format of the command string.
  196.        @return
  197.        string for de-initialisation command.
  198.      */
  199.     PString GetDeinitString() const;
  200.     /** The modem is in a state that allows the de-initialise to start.
  201.     
  202.        @return
  203.        TRUE if the <A>Deinitialise()</A> function may proceeed.
  204.      */
  205.     BOOL CanDeinitialise() const;
  206.     /** Send the de-initialisation meta-command string to the modem. The return
  207.        value indicates that the conditions for the operation to start were met,
  208.        ie the serial port was open etc and the command was successfully
  209.        sent with all replies met.
  210.        @return
  211.        TRUE if command string sent successfully and the objects state has
  212.        changed.
  213.      */
  214.     BOOL Deinitialise();
  215.     /** Set the modem pre-dial meta-command string.
  216.        See the <A>PChannel::SendCommandString()</A> function for more
  217.        information on the format of the command string.
  218.        Note there is an implied <CODE>s</CODE> before the string.
  219.      */
  220.     void SetPreDialString(
  221.       const PString & str   // New pre-dial command string.
  222.     );
  223.     /** Get the modem pre-dial meta-command string.
  224.     
  225.        See the <A>PChannel::SendCommandString()</A> function for more
  226.        information on the format of the command string.
  227.        @return
  228.        string for pre-dial command.
  229.      */
  230.     PString GetPreDialString() const;
  231.     /** Set the modem post-dial meta-command string.
  232.        See the <A>PChannel::SendCommandString()</A> function for more
  233.        information on the format of the command string.
  234.        Note there is <EM>not</EM> an implied <CODE>s</CODE> before the
  235.        string, unlike the pre-dial string.
  236.      */
  237.     void SetPostDialString(
  238.       const PString & str   // New post-dial command string.
  239.     );
  240.     /** Get the modem post-dial meta-command string.
  241.     
  242.        See the <A>PChannel::SendCommandString()</A> function for more
  243.        information on the format of the command string.
  244.        @return
  245.        string for post-dial command.
  246.      */
  247.     PString GetPostDialString() const;
  248.     /** Set the modem busy response meta-command string.
  249.        See the <A>PChannel::SendCommandString()</A> function for more
  250.        information on the format of the command string.
  251.        Note there is an implied <CODE>w120s</CODE> before the string. Also
  252.        the <CODE>s</CODE> and <CODE>d</CODE> commands do not operate and
  253.        will simply terminate the string match.
  254.      */
  255.     void SetBusyString(
  256.       const PString & str   // New busy response command string.
  257.     );
  258.     /** Get the modem busy response meta-command string.
  259.     
  260.        See the <A>PChannel::SendCommandString()</A> function for more
  261.        information on the format of the command string.
  262.        @return
  263.        string for busy response command.
  264.      */
  265.     PString GetBusyString() const;
  266.     /** Set the modem no carrier response meta-command string.
  267.        See the <A>PChannel::SendCommandString()</A> function for more
  268.        information on the format of the command string.
  269.        Note there is an implied <CODE>w120s</CODE> before the string. Also
  270.        the <CODE>s</CODE> and <CODE>d</CODE> commands do not operate and
  271.        will simply terminate the string match.
  272.      */
  273.     void SetNoCarrierString(
  274.       const PString & str   // New no carrier response command string.
  275.     );
  276.     /** Get the modem no carrier response meta-command string.
  277.     
  278.        See the <A>PChannel::SendCommandString()</A> function for more
  279.        information on the format of the command string.
  280.        @return
  281.        string for no carrier response command.
  282.      */
  283.     PString GetNoCarrierString() const;
  284.     /** Set the modem connect response meta-command string.
  285.        See the <A>PChannel::SendCommandString()</A> function for more
  286.        information on the format of the command string.
  287.        Note there is an implied <CODE>w120s</CODE> before the string. Also
  288.        the <CODE>s</CODE> and <CODE>d</CODE> commands do not operate and
  289.        will simply terminate the string match.
  290.      */
  291.     void SetConnectString(
  292.       const PString & str   // New connect response command string.
  293.     );
  294.     /** Get the modem connect response meta-command string.
  295.     
  296.        See the <A>PChannel::SendCommandString()</A> function for more
  297.        information on the format of the command string.
  298.        @return
  299.        string for connect response command.
  300.      */
  301.     PString GetConnectString() const;
  302.     /** The modem is in a state that allows the dial to start.
  303.     
  304.        @return
  305.        TRUE if the <A>Dial()</A> function may proceeed.
  306.      */
  307.     BOOL CanDial() const;
  308.     /** Send the dial meta-command strings to the modem. The return
  309.        value indicates that the conditions for the operation to start were met,
  310.        ie the serial port was open etc and the command was successfully
  311.        sent with all replies met.
  312.        The string sent to the modem is the concatenation of the pre-dial
  313.        string, a <CODE>s</CODE>, the <CODE>number</CODE> parameter and the
  314.        post-dial string.
  315.        @return
  316.        TRUE if command string sent successfully and the objects state has
  317.        changed.
  318.      */
  319.     BOOL Dial(const PString & number);
  320.     /** Set the modem hang up meta-command string.
  321.        See the <A>PChannel::SendCommandString()</A> function for more
  322.        information on the format of the command string.
  323.        Note there is an implied <CODE>s</CODE> before the string.
  324.      */
  325.     void SetHangUpString(
  326.       const PString & str   // New hang up command string.
  327.     );
  328.     /** Get the modem hang up meta-command string.
  329.     
  330.        See the <A>PChannel::SendCommandString()</A> function for more
  331.        information on the format of the command string.
  332.        @return
  333.        string for hang up command.
  334.      */
  335.     PString GetHangUpString() const;
  336.     /** The modem is in a state that allows the hang up to start.
  337.     
  338.        @return
  339.        TRUE if the <A>HangUp()</A> function may proceeed.
  340.      */
  341.     BOOL CanHangUp() const;
  342.     /** Send the hang up meta-command string to the modem. The return
  343.        value indicates that the conditions for the operation to start were met,
  344.        ie the serial port was open etc and the command was successfully
  345.        sent with all replies met.
  346.        @return
  347.        TRUE if command string sent successfully and the objects state has
  348.        changed.
  349.      */
  350.     BOOL HangUp();
  351.     /** The modem is in a state that allows the user command to start.
  352.     
  353.        @return
  354.        TRUE if the <A>SendUser()</A> function may proceeed.
  355.      */
  356.     BOOL CanSendUser() const;
  357.     /** Send an arbitrary user meta-command string to the modem. The return
  358.        value indicates that the conditions for the operation to start were met,
  359.        ie the serial port was open etc and the command was successfully
  360.        sent with all replies met.
  361.        @return
  362.        TRUE if command string sent successfully.
  363.      */
  364.     BOOL SendUser(
  365.       const PString & str   // User command string to send.
  366.     );
  367.     void Abort();
  368.     // Abort the current meta-string command operation eg dial, hang up etc.
  369.     /** The modem is in a state that allows the user application to read from
  370.        the channel. Reading while this is TRUE can interfere with the operation
  371.        of the meta-string processing. This function is only usefull when
  372.        multi-threading is used.
  373.        @return
  374.        TRUE if <A>Read()</A> operations are "safe".
  375.      */
  376.     BOOL CanRead() const;
  377.     enum Status {
  378.       Unopened,           // Has not been opened yet
  379.       Uninitialised,      // Is open but has not yet been initialised
  380.       Initialising,       // Is currently initialising the modem
  381.       Initialised,        // Has been initialised but is not connected
  382.       InitialiseFailed,   // Initialisation sequence failed
  383.       Dialling,           // Is currently dialling
  384.       DialFailed,         // Dial failed
  385.       AwaitingResponse,   // Dialling in progress, awaiting connection
  386.       LineBusy,           // Dial failed due to line busy
  387.       NoCarrier,          // Dial failed due to no carrier
  388.       Connected,          // Dial was successful and modem has connected
  389.       HangingUp,          // Is currently hanging up the modem
  390.       HangUpFailed,       // The hang up failed
  391.       Deinitialising,     // is currently de-initialising the modem
  392.       DeinitialiseFailed, // The de-initialisation failed
  393.       SendingUserCommand, // Is currently sending a user command
  394.       NumStatuses
  395.     };
  396.     // Modem object states.
  397.     /** Get the modem objects current state.
  398.        @return
  399.        modem status.
  400.      */
  401.     Status GetStatus() const;
  402.   protected:
  403.     // Member variables
  404.     PString initCmd, deinitCmd, preDialCmd, postDialCmd,
  405.             busyReply, noCarrierReply, connectReply, hangUpCmd;
  406.       // Modem command meta-strings.
  407.     Status status;
  408.       // Current modem status
  409. };
  410. // End Of File ///////////////////////////////////////////////////////////////