
#ifndef _FR_H
#define _FR_H

#pragma pack(1)    /** ensure packed structures **/

/********
    @doc    EXTERNAL OEMNSF DATATYPES AWNSFAPI SRVRDLL

    @type   BYTE | IFR | .
				
	@flag Frame identifier values used in the FR struct and various APIs |

			ifrDIS 	= DIS frame

			ifrCSI 	= CSI frame

			ifrNSF	= NSF frame

			ifrDTC	= DTC frame

			ifrCIG	= CIG frame

			ifrNSC	= NSC frame

    		ifrDCS	= DCS frame

    		ifrTSI 	= TSI frame

    		ifrNSS	= NSS frame

    @xref   <t FR>
********/

#define 	ifrNULL		0
#define 	ifrDIS		1
#define 	ifrCSI		2
#define 	ifrNSF		3
#define		ifrDTC		4
#define		ifrCIG		5
#define		ifrNSC		6
#define		ifrDCS		7
#define		ifrTSI		8
#define		ifrNSS		9

typedef BYTE 		IFR;
typedef IFR FAR*	LPIFR;


/********
    @doc    EXTERNAL OEMNSF DATATYPES AWNSFAPI SRVRDLL

	@types  FR | Structure containing received or sent frames

	@field  IFR		| ifr	| Frame identifier
	@field  BYTE	| cb	| Length of the FIF part of the frame
	@field  BYTE[]	| fif	| Variable length FIF part

	@tagname _FR
	@xref   <t IFR>
********/


typedef struct 
{
	IFR		ifr;
	BYTE	cb;

} FRBASE;

#if defined(PORTABLE) || defined(__cplusplus)	/* strictly ANSI C */

typedef struct 
{
	IFR		ifr;
	BYTE	cb;
	BYTE	fif[1];		/* start of var length array */
}
FR, FAR* LPFR, NEAR* NPFR;

#else 				/* Microsoft C */

typedef struct 
{
	FRBASE;			/* anonymous */
	BYTE	fif[1];	/* variable length fif field */
	    
} FR, FAR* LPFR, NEAR* NPFR;

#endif

typedef LPFR FAR* LPLPFR;
typedef LPLPFR FAR* LPLPLPFR;


/********
    @doc    EXTERNAL OEMNSF DATATYPES

	@types  LLPARAMS | Structure containing low-level T.30 capabilities or
						parameters.

	@field  BYTE 	| Baud    | Baud Rate Capability or Mode.
	
		@flag Baud Rate Mode Codes |

			V27_2400	= 0

			V27_4800	= 2

			V29_7200	= 3

			V29_9600	= 1

			V33_12000	= 6

			V33_14400	= 4

			V17_7200	= 11

			V17_9600	= 9

			V17_12000	= 10

			V17_14400	= 8

		@flag V27_SLOW | Baud Rate Capability: V.27 at 2400bps only.
		@flag V27_ONLY | Baud Rate Capability: V.27 only, at 2400bps and 4800bps.
		@flag V29_ONLY | Baud Rate Capability: V.29 only, at 7200bps and 9600bps.
		@flag V27_V29  | Baud Rate Capability: V.27 and V.29 at the above speeds.
		@flag V27_V29_V33 | Baud Rate Capability: V.27 and V.29 at the above speeds plus
							V.33 at 12000bps and 14400bps.
		@flag V27_V29_V33_V17 | Baud Rate Capability: V.27, V.29, V.33 at the above
							speeds plus V.17 at 12000bps and 14400bps.

	@field  BYTE	| MinScan | Minimum Scan-line time Requirement or Mode.

		@flag Minscan Mode Codes |

			MINSCAN_40	= 4

			MINSCAN_20	= 0

			MINSCAN_10	= 2

			MINSCAN_5	= 1

			MINSCAN_0	= 7

		@flag MINSCAN_0_0_0    | MinScan Reqmnt: 0ms at all vertical resolutions
		@flag MINSCAN_5_5_5    | MinScan Reqmnt: 5ms at all vertical resolutions
		@flag MINSCAN_10_10_10 | MinScan Reqmnt: 10ms at all vertical resolutions
		@flag MINSCAN_20_20_20 | MinScan Reqmnt: 20ms at all vertical resolutions
		@flag MINSCAN_40_40_40 | MinScan Reqmnt: 40ms at all vertical resolutions
		@flag MINSCAN_40_20_20 | MinScan Reqmnt: 40ms at 100dpi, 20ms at all other resolutions
		@flag MINSCAN_20_10_10 | MinScan Reqmnt: 20ms at 100dpi, 10ms at all other resolutions
		@flag MINSCAN_10_5_5   | MinScan Reqmnt: 10ms at 100dpi, 5ms at all other resolutions
		@flag MINSCAN_40_40_20 | MinScan Reqmnt: 40ms at 100dpi and 200dpi, 20ms at 400dpi
		@flag MINSCAN_20_20_10 | MinScan Reqmnt: 20ms at 100dpi and 200dpi, 10ms at 400dpi
		@flag MINSCAN_10_10_5  | MinScan Reqmnt: 10ms at 100dpi and 200dpi, 5ms at 400dpi
		@flag MINSCAN_40_20_10 | MinScan Reqmnt: 40ms at 100dpi, 20ms at 200dpi, 10ms at 400dpi
		@flag MINSCAN_20_10_5  | MinScan Reqmnt: 20ms at 100dpi, 10ms at 200dpi, 5ms at 400dpi

	@field  BYTE	| fECM	  | ECM Capability or Mode (boolean).
	@field  BYTE	| fECM64  | Small-Frame (64 byte frame) ECM Capability or Mode (boolean).

	@tagname _LLPARAMS
	@xref   <f OEM_NSxToBC>, <f OEM_CreateFrame>
********/


typedef struct
{

    BYTE    Baud;
    BYTE    MinScan;

    BYTE    fECM;
    BYTE    fECM64;
/**
    BYTE    fNonEfaxBFT     :1;
    BYTE    fNonEfaxSUB     :1;
    BYTE    fNonEfaxSEP     :1;
    BYTE    fNonEfaxPWD     :1;
    BYTE    fNonEfaxCharMode:1;
    BYTE    fNonEfaxDTM     :1;
    BYTE    fNonEfaxBTM     :1;
    BYTE    fNonEfaxEDI     :1;
**/
}
LLPARAMS, FAR* LPLLPARAMS, NEAR* NPLLPARAMS;

/** Baud rate capability codes **/
#define V27_SLOW			0
#define V27_ONLY			2
#define V29_ONLY			1
#define V33_ONLY			4
#define V17_ONLY			8
#define V27_V29				3
#define V27_V29_V33			7
#define V27_V29_V33_V17		11
#define V_ALL				15


/** Baud rate mode codes **/
#define V27_2400     0  
#define V29_9600     1 
#define V27_4800     2 
#define V29_7200     3 
#define V33_14400    4 
#define V33_12000    6 
#define V17_14400    8
#define V17_9600     9
#define V17_12000    10
#define V17_7200     11


/** Minscan capability codes **/
#define MINSCAN_0_0_0		7
#define MINSCAN_5_5_5		1
#define MINSCAN_10_10_10	2
#define MINSCAN_20_20_20	0
#define MINSCAN_40_40_40	4
#define MINSCAN_40_20_20	5
#define MINSCAN_20_10_10	3
#define MINSCAN_10_5_5		6
#define MINSCAN_10_10_5	   	10
#define MINSCAN_20_20_10   	8
#define MINSCAN_40_40_20   	12
#define MINSCAN_40_20_10   	13
#define MINSCAN_20_10_5	   	11


typedef enum
{
	WHICHDCS_FIRST = 0,
	WHICHDCS_NOREPLY = 1,
	WHICHDCS_FTT = 2,
	WHICHDCS_DIS = 3
}
WHICHDCS;



#pragma pack()    

#endif /* _FR_H */
