ModemConfig.h
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:14k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: ModemConfig.h,v 1.30 2008/04/29 21:12:20 faxguy Exp $ */
  2. /*
  3.  * Copyright (c) 1990-1996 Sam Leffler
  4.  * Copyright (c) 1991-1996 Silicon Graphics, Inc.
  5.  * HylaFAX is a trademark of Silicon Graphics
  6.  *
  7.  * Permission to use, copy, modify, distribute, and sell this software and 
  8.  * its documentation for any purpose is hereby granted without fee, provided
  9.  * that (i) the above copyright notices and this permission notice appear in
  10.  * all copies of the software and related documentation, and (ii) the names of
  11.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  12.  * publicity relating to the software without the specific, prior written
  13.  * permission of Sam Leffler and Silicon Graphics.
  14.  * 
  15.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  16.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  17.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  18.  * 
  19.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  20.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  21.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  22.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  23.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  24.  * OF THIS SOFTWARE.
  25.  */
  26. #ifndef _ModemConfig_
  27. #define _ModemConfig_
  28. /*
  29.  * Modem Configuration.
  30.  */
  31. #include "FaxConfig.h"
  32. #include "FaxModem.h"
  33. #include "Array.h"
  34. class id_config
  35. {
  36.     public:
  37. fxStr pattern;
  38. int answerlength;
  39. bool display;
  40. fxStr label;
  41. bool record;
  42. fxStr type;
  43. int compare (const id_config* n) const
  44. {
  45.     return ::compare(pattern, n->pattern);
  46. }
  47. };
  48. fxDECLARE_ObjArray(IDConfArray, id_config);
  49. struct ModemConfig : public FaxConfig {
  50. private:
  51.     BaudRate getRate(const char*);
  52.     u_int getFill(const char*);
  53.     FlowControl getFlow(const char*);
  54.     void setVolumeCmds(const fxStr& value);
  55.     u_int getSpeed(const char* value);
  56.     u_int getDataFormat(const char* value);
  57.     u_int       getRTNHandling(const char* cp);
  58.     u_int       getBadPageHandling(const char* cp);
  59.     u_int       getJBIGSupport(const char* cp);
  60.     ECMType getECMType(const char* cp);
  61.     static bool findRate(const char*, BaudRate&);
  62.     static bool findATResponse(const char*, ATResponse&);
  63.     static bool findFlow(const char*, FlowControl&);
  64.     static bool findDataFormat(const char*, u_int&);
  65.     static bool findRTNHandling(const char*, RTNHandling&);
  66. protected:
  67.     ModemConfig();
  68.     void setupConfig();
  69.     virtual void resetConfig();
  70.     virtual bool setConfigItem(const char* tag, const char* value);
  71.     virtual void configError(const char* fmt, ...) = 0;
  72.     virtual void configTrace(const char* fmt, ...) = 0;
  73.     fxStr parseATCmd(const char*);
  74.     u_int callidIndex; // call id index
  75. public:
  76.     fxStr type; // modem type
  77.     fxStr resetCmds; // extra modem reset commands for start of initialization
  78.     fxStr readyCmds; // extra modem reset commands for end of initialization
  79.     fxStr dialCmd; // cmd for dialing (%s for number)
  80.     fxStr setOriginCmd; // cmd for setting the origination id (%s for name, %d for number)
  81.     fxStr answerAnyCmd; // cmd for answering unknown call type
  82.     fxStr answerDataCmd; // cmd for answering data call
  83.     fxStr answerFaxCmd; // cmd for answering fax call
  84.     fxStr answerVoiceCmd; // cmd for answering voice call
  85.     fxStr answerDialCmd; // cmd for answering a dialed call
  86.     fxStr ringResponse; // cmd to respond after AT_RING
  87.     fxStr hardFlowCmd; // cmd for hardware flow control
  88.     fxStr softFlowCmd; // cmd for software flow control
  89.     fxStr noFlowCmd; // cmd for disabling flow control
  90.     fxStr setupDTRCmd; // cmd for setting up DTR handling
  91.     fxStr setupDCDCmd; // cmd for setting up DCD handling
  92.     fxStr setupAACmd; // cmd for setting up adaptive answer
  93.     fxStr noAutoAnswerCmd; // cmd for disabling auto-answer
  94.     fxStr setVolumeCmd[5]; // cmd for setting modem speaker volume
  95.     fxStr echoOffCmd; // cmd for disabling echo
  96.     fxStr verboseResultsCmd; // cmd for enabling verbose result codes
  97.     fxStr resultCodesCmd; // cmd for enabling result codes
  98.     fxStr onHookCmd; // cmd for placing phone ``on hook''
  99.     fxStr softResetCmd; // cmd for doing soft reset
  100.     u_int softResetCmdDelay; // time in ms to pause after soft reset
  101.     u_int noAutoAnswerCmdDelay; // time in ms to pause after noAutoAnswerCmd
  102.     u_int ringsBeforeResponse; // number of rings to wait before ModemRingResponse
  103.     u_int ringTimeout; // timeout in ms after RING to reset
  104.     fxStr waitTimeCmd; // cmd for setting carrier wait time
  105.     fxStr pauseTimeCmd; // cmd for setting "," pause time
  106.     fxStr mfrQueryCmd; // cmd for getting modem manufacturer
  107.     fxStr modelQueryCmd; // cmd for getting modem model id
  108.     fxStr revQueryCmd; // cmd for getting modem firmware rev
  109.     fxStr answerAnyBeginCmd; // cmd to start unknown inbound session
  110.     fxStr answerDataBeginCmd; // cmd to start inbound data session
  111.     fxStr answerFaxBeginCmd; // cmd to start inbound fax session
  112.     fxStr answerVoiceBeginCmd; // cmd to start inbound voice session
  113.     fxStr sendBeginCmd; // cmd to start outbound session
  114.     fxStr recvSuccessCmd; // cmd for after successful reception
  115.     fxStr class0Cmd; // cmd for setting Class 0
  116.     fxStr classQueryCmd; // cmd for getting modem services
  117. // distinctive ring
  118.     fxStr ringData; // data call ring string
  119.     fxStr ringFax; // fax call ring string
  120.     fxStr ringVoice; // voice call ring string
  121.     fxStr ringExtended; // extended ring
  122.     fxStr dringOn; // pattern for distinctive ring silence interval
  123.     fxStr dringOff; // pattern for distinctive ring ring interval
  124.     bool noAnswerVoice; // leave voice calls unanswered
  125.     bool saverawimage; // debugging feature to save raw image data
  126. // call identification
  127.     IDConfArray idConfig; // pattern for ID info
  128. // protocol timers
  129.     u_int t1Timer; // T.30 T1 timer (ms)
  130.     u_int t2Timer; // T.30 T2 timer (ms)
  131.     u_int t4Timer; // T.30 T4 timer (ms)
  132.     u_int dialResponseTimeout; // dialing command timeout (ms)
  133.     u_int answerResponseTimeout; // answer command timeout (ms)
  134.     u_int pageStartTimeout; // page send/receive timeout (ms)
  135.     u_int pageDoneTimeout; // page send/receive timeout (ms)
  136. // for class 1:
  137.     fxStr class1Cmd; // cmd for setting Class 1
  138.     fxStr class1AdaptRecvCmd; // cmd to enable adaptive reception control
  139.     fxStr class1EnableV34Cmd; // cmd to enable V.34 support in Class 1.0
  140.     fxStr class1NFLOCmd; // cmd to setup no flow control
  141.     fxStr class1SFLOCmd; // cmd to setup software flow control
  142.     fxStr class1HFLOCmd; // cmd to setup hardware flow control
  143.     fxStr class1PPMWaitCmd; // cmd to stop and wait prior to PPM
  144.     fxStr class1ResponseWaitCmd; // cmd to wait prior to TCF response
  145.     fxStr class1RMQueryCmd; // cmd to query modem for receive demodulators
  146.     fxStr class1TCFWaitCmd; // cmd to stop and wait prior to TCF
  147.     fxStr class1TMQueryCmd; // cmd to query modem for transmit modulators
  148.     fxStr class1EOPWaitCmd; // cmd to stop and wait prior to EOP
  149.     fxStr class1SwitchingCmd; // after recv HDLC and before sending
  150.     fxStr class1MsgRecvHackCmd; // cmd to avoid +FCERROR before image
  151.     fxStr class1TCFRecvHackCmd; // cmd to avoid +FCERROR before TCF
  152.     u_int class1TCFRecvTimeout; // timeout receiving TCF
  153.     u_int class1RecvAbortOK; // if non-zero, OK sent after recv abort
  154.     u_int class1RMPersistence; // how many times to persist through +FCERROR
  155.     u_int class1HookSensitivity; // how many times to persist through on-hook detections
  156.     u_int class1Resolutions; // resolutions support
  157.     u_int class1FrameOverhead; // overhead bytes in received frames
  158.     u_int class1RecvIdentTimer; // timeout receiving initial identity
  159.     u_int class1TCFMaxNonZero; // non-zero threshold for TCF check
  160.     u_int class1TCFMinRun; // min length of zero run for TCF check
  161.     u_int class1TCFMinRunECMMod; // modify min length in ECM by this factor
  162.     u_int class1TMConnectDelay; // delay (ms) after +FTM CONNECT
  163.     u_int class1ECMFrameSize; // ECM frame size for transmission
  164.     u_int class1PageLengthSupport;// page length support
  165.     u_int class1PageWidthSupport; // page width support
  166.     bool class1GreyJPEGSupport; // Greyscale JPEG support
  167.     bool class1ColorJPEGSupport; // Full-color JPEG support
  168.     bool class1ECMSupport; // support T.30-A ECM
  169.     bool class1MRSupport; // support 2-D MR
  170.     bool class1MMRSupport; // support 2-D MMR
  171.     bool class1PersistentECM; // continue to correct
  172.     bool class1ValidateV21Frames;// check received FCS values in V.21
  173.     bool class1ModemHasDLEBug; // modem doesn't double-up DLEs in V.21
  174.     bool class1HasRHConnectBug; // modem reports CONNECT after +FRH=3 to non-V.21-HDLC data
  175. // for class 2 and 2.0:
  176.     fxStr class2Cmd; // cmd for setting Class 2/2.0
  177.     fxStr class2DCCQueryCmd; // cmd to query modem capabilities
  178.     fxStr class2CQQueryCmd; // cmd to query copy quality checking
  179.     fxStr class2BORCmd; // cmd to set bit order
  180.     fxStr class2DisableV17Cmd; // cmd to disable V.17 support
  181.     fxStr class2DisableV34Cmd; // cmd to disable V.34 support
  182.     fxStr class2RELCmd; // cmd to enable byte-aligned EOL
  183.     fxStr class2CQCmd; // cmd to setup copy quality checking
  184.     fxStr class2AbortCmd; // cmd to abort a session
  185.     fxStr class2TBCCmd; // cmd to enable stream mode
  186.     fxStr class2CRCmd; // cmd to enable receive capability
  187.     fxStr class2PHCTOCmd; // cmd to set Phase C timeout parameter
  188.     fxStr class2BUGCmd; // cmd to enable HDLC frame tracing
  189.     fxStr class2LIDCmd; // cmd to set local identifier string
  190.     fxStr class2DCCCmd; // cmd to set modem capabilities
  191.     fxStr class2DISCmd; // cmd to set session parameters
  192.     fxStr class2DDISCmd; // cmd to set ses. params. before dial
  193.     fxStr class2CIGCmd; // cmd to set polling identifier
  194.     fxStr class2SPLCmd; // cmd to set polling request
  195.     fxStr class2PTSCmd; // cmd to set page status
  196.     fxStr class2PTSQueryCmd; // cmd to query page status
  197.     fxStr class2NFLOCmd; // cmd to setup no flow control
  198.     fxStr class2SFLOCmd; // cmd to setup software flow control
  199.     fxStr class2HFLOCmd; // cmd to setup hardware flow control
  200.     fxStr class2MINSPCmd; // cmd to setup min transmit speed
  201.     fxStr class2RecvDataTrigger; // send to start recv
  202.     bool class2JPEGSupport; // use JPEG support as reported by the modem
  203.     bool class2XmitWaitForXON; // wait for XON before send
  204.     bool class2RTFCC; // real-time fax compression conversion
  205.     bool class2SendRTC; // append RTC to page data on transmit
  206. // for class 2.0:
  207.     fxStr class2PIECmd; // cmd to set proc interrupt handling
  208.     fxStr class2NRCmd; // cmd to set status reporting
  209. // for class T.class2:
  210.     fxStr class2APQueryCmd; // cmd to query address&polling caps.
  211.     fxStr class2APCmd; // cmd to setup address&polling caps.
  212.     ECMType class2ECMType; // ECM specification type to use
  213.     fxStr class2SACmd; // cmd to set subaddress
  214.     fxStr class2PACmd; // cmd to set selective polling address
  215.     fxStr class2PWCmd; // cmd to set password for transmit/poll
  216.     bool class2UseHex; // parse capabilities strings as hex
  217.     bool class2HexNSF; // parse nsf strings as hex
  218.     bool class2UseLineCount; // use the firmware decoder's line count
  219.     FlowControl flowControl; // DTE-DCE flow control method
  220.     BaudRate maxRate; // max DTE-DCE rate to try
  221.     u_int recvFillOrder; // bit order of recvd data
  222.     u_int sendFillOrder; // bit order of sent data
  223.     u_int frameFillOrder; // bit order of HDLC frames
  224.     u_int resetDelay; // delay (ms) after reseting modem
  225.     u_int dtrDropDelay; // delay (ms) after dropping DTR
  226.     u_int baudRateDelay; // delay (ms) after setting baud rate
  227.     u_int atCmdDelay; // delay (ms) between each AT cmd
  228.     u_int percentGoodLines; // required % of good lines in page
  229.     u_int maxConsecutiveBadLines; // max consecutive bad lines in page
  230.     u_int minAcceptedLineCount; // min accepted number of lines in page
  231.     u_int minSpeed; // minimum speed for fax transmits
  232.     bool softRTFCC; // real-time fax compression conversion (software)
  233.     bool waitForConnect; // modem sends multiple answer responses
  234.     fxStr tagLineFmt; // format string for tag lines
  235.     fxStr tagLineLocale; // locale for tag lines
  236.     fxStr tagLineFontFile; // font file for imaging tag lines
  237.     u_int recvDataFormat; // received facsimile data format
  238.     bool useJobTagLine; // Use Job tagline or use conf taglineformat
  239.     bool raiseATCmd; // whether or not to raise-case the AT commands
  240.     bool doPhaseCDebug; // Query modem during Phase C for debugging info.
  241.     RTNHandling rtnHandling;            // RTN signal handling method
  242.     BadPageHandling badPageHandling; // bad page (received) handling method
  243.     JBIGSupport class1JBIGSupport; // monochrome JBIG support
  244.     JBIGSupport class2JBIGSupport; // monochrome JBIG support
  245.     bool saveUnconfirmedPages; // don't delete unconfirmed pages
  246.     fxStr tiff2faxCmd; // for intelligent RTFCC in comparing compression rates
  247.     
  248.      // Distinctive ring data as sequences of DRON/DROF intervals
  249.     struct {
  250.      int cadence[5];                 // the ring cadence as a five-dimensional vector
  251. double magsqrd;                // magnitude of the vector squared
  252. u_int type;                     // call type of voice, fax, or data
  253.     } distinctiveRings[5];              // up to 5 distinctive ring numbers
  254.     u_int NoDRings;                     // number of distinctive rings numbers found
  255.         virtual ~ModemConfig();
  256.     void parseCallID(const char*, CallID&) const;
  257.     const fxStr& getFlowCmd(FlowControl) const;
  258.     void parseDR(const char*);
  259.     void processDRString(char*, const u_int);
  260. };
  261. #endif /* _ModemConfig_ */