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

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: t.30.h,v 1.2 2006/03/21 23:57:33 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 _t30_
  27. #define _t30_
  28. /*
  29.  * The Group 3/T.30 protocol defines pre-, in-, and post-
  30.  * message phases.  During the pre-message phase, the modems
  31.  * exchange capability information and do "training" to
  32.  * synchronize transmission.  Once this is done, one or more
  33.  * pages of information may be transmitted, and following this
  34.  * the post-message phase allows for retransmission, line
  35.  * turn-around, and so on.
  36.  *
  37.  * Consult CCITT recommendation T.30, "Procedures for Document
  38.  * Facsimile Transmission in the General Switched Telephone
  39.  * Network" (especially pp. 69-109) for further information.
  40.  */
  41. /*
  42.  * Note: All the FCF codes after the initial identification
  43.  * commands should include FCF_SNDR or FCF_RCVR ``or-ed in''.
  44.  * For example, 
  45.  *    Calling Station     Called Station
  46.  *    -----------------------------------
  47.  * <-  FCF_DIS
  48.  *    FCF_DCS|FCF_SNDR  ->
  49.  *     <-  FCF_CFR|FCF_RCVR
  50.  *       <<send message data>>
  51.  *    FCF_EOP|FCF_SNDR  ->
  52.  * <-  FCF_MCF|FCF_RCVR
  53.  *    FCF_DCN|FCF_SNDR ->
  54.  */
  55. // protocol timeouts in milliseconds
  56. #define TIMER_T1 ((35+5)*1000) // 35 +/- 5 seconds
  57. #define TIMER_T2 ((6+1)*1000) // 6 +/- 1 seconds
  58. #define TIMER_T3 ((10+5)*1000) // 10 +/- 5 seconds
  59. #define TIMER_T4 3100 // 3.1secs
  60. #define TCF_DURATION 1500 // 1.5 seconds
  61. // this is our defined NSF manufacturer code
  62. #define HYLAFAX_NSF "xB5x00xAA"
  63. /*
  64.  * Facsimile control field (FCF) values
  65.  */
  66. #define FCF_SNDR 0x80 // station receiving valid DIS
  67. #define FCF_RCVR 0x00 // station receiving valid DIS response
  68. // initial identification commands from the called to calling station
  69. #define FCF_DIS 0x01 // digital identification signal
  70. #define FCF_CSI 0x02 // called subscriber identification
  71. #define FCF_NSF 0x04 // non-standard facilities (optional)
  72. // responses from calling station wishing to recv 
  73. #define FCF_DTC (FCF_DIS|FCF_SNDR) // digital transmit command
  74. #define FCF_CIG (FCF_CSI|FCF_SNDR) // calling subrscriber id (opt)
  75. #define FCF_NSC (FCF_NSF|FCF_SNDR) // non-standard facilities cmd (opt)
  76. #define FCF_PPW (0x03|FCF_SNDR)    // password for polling (opt)
  77. #define FCF_SEP (0x05|FCF_SNDR)    // selective polling subaddress (opt)
  78. // responses from transmitter to receiver
  79. #define FCF_DCS (0x40|FCF_DIS) // digital command signal
  80. #define FCF_TSI (0x40|FCF_CSI) // transmitting subscriber id (opt)
  81. #define FCF_NSS (0x40|FCF_NSF) // non-standard facilities setup (opt)
  82. #define FCF_PWD (0x40|0x05) // password for transmission (opt)
  83. #define FCF_SUB (0x40|0x03) // routing information for xmit (opt)
  84. /*
  85.  * Digital Identification Signal (DIS) definitions.
  86.  *
  87.  * The DIS is sent from the called station to the calling station
  88.  * to identify its capabilities.  This information may also appear
  89.  * in a DTC frame if the line is to be turned around.
  90.  *
  91.  * The values given below assume a 24-bit representation for the DIS;
  92.  * i.e. the first 3 bytes of the frame are treated as a single 24-bit
  93.  * value.  Additional bytes of the DIS are optional and indicated by
  94.  * a 1 in the least significant bit of the last byte.  There are currently
  95.  * as many as 6 additional bytes that may follow the required 3-byte
  96.  * minimum DIS frame;  we only process the first 4.
  97.  */
  98. #define DIS_V8 0x040000 // supports V.8 training
  99. #define DIS_FRAMESIZE 0x020000 // preferred ECM frame size indicator
  100. #define DIS_T4XMTR 0x008000 // T.4 sender & has docs to poll
  101. #define DIS_T4RCVR 0x004000 // T.4 receiver
  102. #define DIS_SIGRATE 0x003C00 // data signalling rate
  103. #define     DISSIGRATE_V27FB 0x0 // V.27ter fallback mode: 2400 BPS
  104. #define     DISSIGRATE_V27 0x4 // V.27ter: 4800 + 2400 BPS
  105. #define     DISSIGRATE_V29 0x8 // V.29: 9600 + 7200 BPS
  106. #define     DISSIGRATE_V2729 0xC // V.27ter+V.29
  107. #define     DISSIGRATE_V33 0xE // V.27ter+V.29+V.33
  108. #define     DISSIGRATE_V17 0xD // V.27ter+V.29+V.33+V.17
  109. #define DIS_7MMVRES 0x000200 // vertical resolution = 7.7 line/mm
  110. #define DIS_2DENCODE 0x000100 // 2-d compression supported
  111. #define DIS_PAGEWIDTH 0x0000C0 // recording width capabilities
  112. #define     DISWIDTH_A4 0 // only 215mm (A4)
  113. #define     DISWIDTH_A3 1 // 215, 255, and 303 (A4, B4, A3)
  114. #define     DISWIDTH_B4 2 // 215, and 255 (A4, B4)
  115. #define     DISWIDTH_INVALID 3 // invalid, but treat as A3
  116. #define DIS_PAGELENGTH 0x000030 // max recording length capabilities
  117. #define     DISLENGTH_A4 0 // A4 (297 mm)
  118. #define     DISLENGTH_UNLIMITED 1 // no max length
  119. #define     DISLENGTH_A4B4 2 // A4 and B4 (364 mm)
  120. #define     DISLENGTH_INVALID 3
  121. #define DIS_MINSCAN 0x00000E // receiver min scan line time
  122. #define     DISMINSCAN_20MS 0x0
  123. #define     DISMINSCAN_40MS 0x1
  124. #define     DISMINSCAN_10MS 0x2
  125. #define     DISMINSCAN_10MS2 0x3
  126. #define     DISMINSCAN_5MS 0x4
  127. #define     DISMINSCAN_40MS2 0x5
  128. #define     DISMINSCAN_20MS2 0x6
  129. #define     DISMINSCAN_0MS 0x7
  130. #define DIS_XTNDFIELD 0x000001 // extended field indicator
  131. // 1st extension byte (alternative mode capabilities)
  132. #define DIS_2400HS (0x80<<24) // 2400 bit/s handshaking
  133. #define DIS_2DUNCOMP (0x40<<24) // uncompressed 2-d data supported
  134. #define DIS_ECMODE (0x20<<24) // error correction mode supported
  135. // NB: bit 0x10 must be zero
  136. #define DIS_ELMODE (0x08<<24) // error limiting mode suported
  137. #define DIS_G4COMP (0x02<<24) // T.6 compression supported
  138. // bit 0x01 indicates an extension byte follows
  139. // The meaning of the 2nd extension byte changed after the 1993 recommendation.
  140. // If DIS_IGNOLD is set, then the 1993 definitions can be understood, otherwise
  141. // the current definitions should be understood.
  142. // 2nd extension byte - 1993 meaning - (alternative paper width capabilities)
  143. #define DIS_IGNOLD (0x80<<16) // ignore old paper widths in byte 3
  144. #define DIS_1216 (0x40<<16) // 1216 pixels in 151 mm scanline
  145. #define DIS_864 (0x20<<16) // 864 pixels in 107 mm scanline
  146. #define DIS_1728L (0x10<<16) // 1728 pixels in 151 mm scanline
  147. #define DIS_1728H (0x08<<16) // 1728 pixels in 107 mm scanline
  148. // bits 0x04 and 0x02 are reserved
  149. // bit 0x01 indicates an extension byte follows
  150. // 2nd extension byte - current meaning
  151. // bit 0x80 is not valid and must be unset
  152. #define DIS_MULTSEP (0x40<<16) // multiple selective polling capability
  153. #define DIS_POLLSUB (0x20<<16) // polled subaddress
  154. #define DIS_T43 (0x10<<16) // T.43 coding
  155. #define DIS_INTERLV (0x08<<16) // plane interleave
  156. #define DIS_VOICE (0x04<<16) // voice coding - G.726
  157. #define DIS_VOICEXT (0x02<<16) // extended voice coding
  158. // bit 0x01 indicates an extension byte follows
  159. // 3rd extension byte (alternative resolution capabilities)
  160. #define DIS_200X400 (0x80<<8) // 200 x 400 pixels/inch resolution
  161. #define DIS_300X300 (0x40<<8) // 300 x 300 pixels/inch resolution
  162. #define DIS_400X400 (0x20<<8) // 400 x 400 pixels/inch resolution
  163. #define DIS_INCHRES (0x10<<8) // inch-based resolution preferred
  164. #define DIS_METRES (0x08<<8) // metric-based resolution preferred
  165. #define DIS_400MST2 (0x04<<8) // mst for 400 l/inch = 1/ 200 l/inch
  166. #define DIS_SEP (0x02<<8) // selective polling supported
  167. // bit 0x01 indicates an extension byte follows
  168. // 4th extension byte (enhanced features capabilities)
  169. #define DIS_SUB (0x80<<0) // sub-address supported (SUB frames)
  170. #define DIS_PWD (0x40<<0) // password supported (PWD frames)
  171. #define DIS_DATAFILE (0x20<<0) // can emit data file
  172. // bit 0x10 is reserved for facsimile service information
  173. #define DIS_BFT (0x08<<0) // supports Binary File Transfer (BFT)
  174. #define DIS_DTM (0x04<<0) // supports Document Transfer Mode (DTM)
  175. #define DIS_EDI (0x02<<0) // supports Edifact Transfer (EDI)
  176. // bit 0x01 indicates an extension byte follows
  177. /*
  178.  * Digital Command Signal (DCS) definitions.
  179.  *
  180.  * The DCS is sent from the calling station to the called station
  181.  * prior to the training procedure; it identifies the capabilities 
  182.  * to use for session operation.
  183.  *
  184.  * The values given below assume a 24-bit representation for the DCS;
  185.  * i.e. the first 3 bytes of the frame are treated as a single 24-bit
  186.  * value.  Additional bytes of the DCS are optional and indicated by
  187.  * a 1 in the least significant bit of the last byte.  There are currently
  188.  * as many as 6 additional bytes that may follow the required 3-byte
  189.  * minimum DCS frame; we only process the first 4.
  190.  */
  191. #define DCS_T4RCVR 0x004000 // receiver honors T.4
  192. #define DCS_SIGRATE 0x003C00 // data signalling rate
  193. #define     DCSSIGRATE_2400V27 (0x0<<10)
  194. #define     DCSSIGRATE_4800V27 (0x4<<10)
  195. #define     DCSSIGRATE_9600V29 (0x8<<10)
  196. #define     DCSSIGRATE_7200V29 (0xC<<10)
  197. #define     DCSSIGRATE_14400V33 (0x2<<10)
  198. #define     DCSSIGRATE_12000V33 (0x6<<10)
  199. #define     DCSSIGRATE_14400V17 (0x1<<10)
  200. #define     DCSSIGRATE_12000V17 (0x5<<10)
  201. #define     DCSSIGRATE_9600V17 (0x9<<10)
  202. #define     DCSSIGRATE_7200V17 (0xD<<10)
  203. #define DCS_7MMVRES 0x000200 // vertical resolution = 7.7 line/mm
  204. #define DCS_2DENCODE 0x000100 // use 2-d encoding
  205. #define DCS_PAGEWIDTH 0x0000C0 // recording width
  206. #define     DCSWIDTH_A4 (0<<6)
  207. #define     DCSWIDTH_A3 (1<<6)
  208. #define     DCSWIDTH_B4 (2<<6)
  209. #define DCS_PAGELENGTH 0x000030 // max recording length
  210. #define     DCSLENGTH_A4 (0<<4)
  211. #define     DCSLENGTH_UNLIMITED (1<<4)
  212. #define     DCSLENGTH_B4 (2<<4)
  213. #define DCS_MINSCAN 0x00000E // receiver min scan line time
  214. #define     DCSMINSCAN_20MS (0x0<<1)
  215. #define     DCSMINSCAN_40MS (0x1<<1)
  216. #define     DCSMINSCAN_10MS (0x2<<1)
  217. #define     DCSMINSCAN_5MS (0x4<<1)
  218. #define     DCSMINSCAN_0MS (0x7<<1)
  219. #define DCS_XTNDFIELD 0x000001 // extended field indicator
  220. // 1st extension byte (alternative mode capabilities)
  221. #define DCS_2400HS (0x80<<24) // 2400 bit/s handshaking
  222. #define DCS_2DUNCOMP (0x40<<24) // use uncompressed 2-d data
  223. #define DCS_ECMODE (0x20<<24) // use error correction mode
  224. #define DCS_FRAMESIZE (0x10<<24) // EC frame size
  225. #define     DCSFRAME_256 (0<<28) // 256 octets
  226. #define     DCSFRAME_64 (1<<28) // 64 octets
  227. #define DCS_ELMODE (0x08<<24) // use error limiting mode
  228. // bit 0x04 is reserved for Group 4
  229. #define DCS_G4COMP (0x02<<24) // use T.6 compression
  230. // bit 0x01 indicates another information byte follows
  231. // 2nd extension byte (alternative paper width capabilities)
  232. #define DCS_IGNOLD (0x80<<16) // ignore old paper widths in byte 3
  233. #define DCS_1216 (0x40<<16) // use 1216 pixels in 151 mm scanline
  234. #define DCS_864 (0x20<<16) // use 864 pixels in 107 mm scanline
  235. // bits 0x10 and 0x08 are invalid
  236. // bits 0x04 and 0x02 are not used
  237. // bit 0x01 indicates another information byte follows
  238. // 3rd extension byte (alternative resolution capabilities)
  239. #define DCS_200X400 (0x80<<8) // use 200 x 400 pixels/inch resolution
  240. #define DCS_300X300 (0x40<<8) // use 300 x 300 pixels/inch resolution
  241. #define DCS_400X400 (0x20<<8) // use 400 x 400 pixels/inch resolution
  242. #define DCS_INCHRES (0x10<<8) // use inch-based resolution
  243. // bits 0x08 and 0x04 are ``don't care''
  244. // bit 0x02 should be zero
  245. // bit 0x01 indicates another information byte follows
  246. // 4th extension byte (enhanced features capabilities)
  247. // bits 0x80 and 0x40 should be zero
  248. // bit 0x20 is not used
  249. // bit 0x10 is reserved for facsimile service information
  250. #define DCS_BFT (0x08<<0) // use Binary File Transfer (BFT)
  251. #define DCS_DTM (0x04<<0) // use Document Transfer Mode (DTM)
  252. #define DCS_EDI (0x02<<0) // use Edifact Transfer (EDI)
  253. // bit 0x01 indicates another information byte follows
  254. // pre-message responses
  255. #define FCF_CFR 0x21 // confirmation to receive
  256. #define FCF_FTT 0x22 // failure to train
  257. #define FCF_CTR 0x23 // response to CTC (Annex A)
  258. // post-message commands (from transmitter to receiver)
  259. #define FCF_EOM 0x71 // end-of-page, restart phase B on ack
  260. #define FCF_MPS 0x72 // end-of-page, restart phase C on ack
  261. #define FCF_EOP 0x74 // end-of-procedures, hangup after ack
  262. #define FCF_PRI_EOM 0x79 // EOM, but allow operator intervention
  263. #define FCF_PRI_MPS 0x7A // MPS, but allow operator intervention
  264. #define FCF_PRI_EOP 0x7C // MPS, but allow operator intervention
  265. #define FCF_PPS 0x7D // partial page signal (Annex A)
  266. #define FCF_EOR 0x73 // end of retransmission (Annex A)
  267. #define FCF_RR 0x76 // receive ready (Annex A), was erroniously 0x37 3/93
  268. // post-message responses (from receiver to transmitter)
  269. #define FCF_MCF 0x31 // message confirmation (ack MPS/EOM)
  270. #define FCF_RTP 0x33 // ack, continue after retraining
  271. #define FCF_RTN 0x32 // nak, retry after retraining
  272. #define FCF_PIP 0x35 // ack, continue after operating interv.
  273. #define FCF_PIN 0x34 // nak, retry after operation interv.
  274. #define FCF_PPR 0x3D // partial page request (Annex A)
  275. #define FCF_RNR 0x37 // receive not ready (Annex A)
  276. #define FCF_ERR 0x38 // response for EOR (Annex A)
  277. // other line control signals
  278. #define FCF_DCN 0x5F // disconnect - initiate call release
  279. #define FCF_CRP 0x58 // command repeat - resend last command
  280. // command to receive
  281. #define FCF_CTC 0x48 // continue to correct (Annex A)
  282. #endif /* _t30_ */