home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / gnu / fax-3.2.1 / lib / libfax / c2proto.h next >
Encoding:
C/C++ Source or Header  |  1992-07-31  |  5.2 KB  |  182 lines

  1. /*
  2.   c2proto.h
  3.  
  4.   (c) Copyright 1991 by David M. Siegel.
  5.       All rights reserved.
  6.  
  7.   %W% %G% %U%
  8. */
  9.  
  10. #ifndef in_libfax_c2proto_h
  11. #define in_libfax_c2proto_h 1
  12.  
  13. #define TRUE  1
  14. #define FALSE 0
  15.  
  16. #define ETX  '\003'
  17. #define DLE  '\020'
  18. #define XON  '\021'    /* DC1 */
  19. #define XOFF '\023'    /* DC3 */
  20. #define CAN  '\030'
  21.  
  22. /*
  23.  * Various timeouts are defined here, in seconds:
  24.  */
  25. #define TIMEOUT_CONNECT        60    /* wait for a connection        */
  26. #define TIMEOUT_HANGUP        5    /* wait for hangup to complete        */
  27. #define TIMEOUT_ANSWER        15    /* wait for phone to be answered    */
  28. #define TIMEOUT_END_PAGE    120    /* wait for end of page to be acked    */
  29. #define TIMEOUT_END_XMIT    120    /* wait for end of xmit to be acked    */
  30. #define TIMEOUT_BIT_REVERSE 5    /* wait for bit reverse to be acked    */
  31. #define TIMEOUT_BYTE_ALIGN  5   /* wait for byte align to be acked    */
  32. #define TIMEOUT_SET_CAPABILITIES  5 /* wait for set capabilities ack    */
  33. #define TIMEOUT_SEND_PAGE   60    /* final send of page timeout        */
  34. #define TIMEOUT_RECV_PAGE   60    /* final recv page ack            */
  35.  
  36. /* 
  37.  * Standard Hayes-style modem result codes:
  38.  */
  39. #define RESULT_OK              0
  40. #define RESULT_CONNECT         1
  41. #define RESULT_RING            2
  42. #define RESULT_NO_CARRIER     3
  43. #define RESULT_ERROR         4
  44. #define RESULT_NO_DIALTONE     6
  45. #define RESULT_BUSY        7    
  46. #define RESULT_NO_ANSWER     8
  47.  
  48. /*
  49.  * Post page response codes:
  50.  */
  51. #define PPR_MCF        1    /* page good                */
  52. #define PPR_RTN        2    /* page bad; retrans requested        */
  53. #define PPR_RTP        3    /* page good; retrans requested        */
  54. #define PPR_PIN        4    /* page bad; interrupt requested           */
  55. #define PPR_PIP        5    /* page good; interrupt requested    */
  56.  
  57. /* vertical resolution */
  58. #define VR_NORMAL    0
  59. #define VR_FINE        1
  60.  
  61. /* baud rate */
  62. #define BR_2400        0
  63. #define BR_4800        1
  64. #define BR_7200        2
  65. #define BR_9600        3
  66.  
  67. /* width */
  68. #define WD_1728        0
  69. #define WD_2048        1
  70. #define WD_2432        2
  71.  
  72. /* page length */
  73. #define LN_A4        0
  74. #define LN_B4        1
  75. #define LN_UNLIMITED    2
  76.  
  77. /* data format */
  78. #define DF_1DHUFFMAN     0
  79. #define DF_2DMREAD    1
  80. #define DF_2DUNCOMP    2
  81.  
  82. /* error correction */
  83. #define EC_DA_ECM    0
  84. #define EC_EN_ECM_64    1
  85. #define EC_EN_ECM_256    2
  86.  
  87. /* binary file */
  88. #define BF_DISABLED    0
  89. #define BF_ENABLED    1
  90.  
  91. /* scan time */
  92. #define ST_0        0
  93. #define ST_1        1
  94. #define ST_2        2
  95. #define ST_3        3
  96. #define ST_4        4
  97. #define ST_5        5
  98. #define ST_6        6
  99. #define ST_7        7
  100.  
  101. typedef struct _T30params {
  102.     int vr;            /* vertical resolution        */
  103.     int br;            /* bit rate            */
  104.     int wd;            /* page width            */
  105.     int ln;            /* page length            */
  106.     int df;            /* data compression format    */
  107.     int ec;            /* error correction        */
  108.     int bf;            /* binary file transfer        */
  109.     int st;            /* scan time            */
  110. } T30params;
  111.  
  112. /*
  113.   Fax flags:
  114. */
  115. #define FAX_F_SYNC    0000001    /* modem is in sync        */
  116. #define FAX_F_FCON    0000002 /* modem is connected        */
  117. #define FAX_F_FDCS    0000004 /* recved neg session params    */
  118. #define FAX_F_FDIS    0000010    /* recved remote capabilities    */
  119. #define FAX_F_FHNG    0000020    /* recved hangup code        */
  120. #define FAX_F_FNSF     0000040    /* recved nsf frame FAX        */
  121. #define FAX_F_FPTS    0000100    /* recved post page resp (ppr)    */
  122. #define FAX_F_FET    0000200    /* recved post page msg (ppm)    */
  123. #define FAX_F_FTSI     0000400    /* recved remote TSI string    */
  124. #define FAX_F_FCSI     0001000 /* recved remote CSI string    */
  125. #define FAX_F_FCIG     0002000 /* recved remote CIG string    */
  126. #define FAX_F_CANCELED    0004000 /* the remote end canceled    */
  127. #define FAX_F_RETRIES    0010000    /* too many retries sending page*/
  128. #define FAX_F_FCFR    0020000    /* recved fcfr response        */
  129. #define FAX_F_CONNECT    0040000 /* recved connect response    */
  130.  
  131. /*
  132.   Modem error conditions.  When get_modem_response returns -1,
  133.   one of these error conditions will result.  This are hard 
  134.   errors, that may not be possible to recover from.  The idea
  135.   is for protocol errors to be reported in the above flags.
  136. */
  137. typedef enum {
  138.     MODEM_STATUS_OK,        /* all ok            */
  139.     MODEM_STATUS_FAILED,    /* a system called failed    */
  140.     MODEM_STATUS_TIMEOUT,    /* the modem timed out        */
  141. } modem_status;
  142.  
  143. /*
  144.   Page reception codes.  Returned by faxmodem_recv_page().
  145. */  
  146. typedef enum {
  147.     RECV_OK,
  148.     RECV_DONE,
  149.     RECV_FAILED,
  150. } recv_code;
  151.  
  152. #define MAX_ID_LEN    64
  153.  
  154. /*
  155.   This structure holds the current state of the faxmodem.  Various
  156.   fields are filled at different times in a fax session.  Not all
  157.   fields are valid at all times.  Check flags to see what field
  158.   currently hold valid information.
  159. */
  160. typedef struct _fax_modem {
  161.     int fd;            /* fd of the fax modem         */
  162.     modem_status status;    /* status for last modem op    */
  163.     int flags;            /* fax modem flags (see above)    */
  164.     int result;            /* last numeric result code    */
  165.     int dialer_code;        /* result from last ATDT op     */
  166.     int hangup_code;        /* +FHNG code; See table 8.3    */
  167.     int ppr_code;        /* +FPTS code; See table 8.2    */
  168.     int ppm_code;        /* +FET  code; See table 8.1    */
  169.     char ftsi_id[MAX_ID_LEN];    /* +FTSI id string        */
  170.     char fcsi_id[MAX_ID_LEN];    /* +FCSI id string        */
  171.     char fcig_id[MAX_ID_LEN];    /* +FCIG id string        */
  172.     T30params fdcs_params;     /* current session params    */
  173.     T30params fdis_params;    /* remote identification params    */
  174.     T30params fdtc_params;    /* request for polling params    */
  175. } FaxModem;
  176.  
  177. #define FAX_ISSET(x,y)     (((x)->flags)&y)
  178. #define FAX_CONNECTED(x) (FAX_ISSET((x),FAX_F_FCON) && \
  179.               !FAX_ISSET((x),FAX_F_FHNG))
  180.  
  181. #endif
  182.