|
|
// headers\et30type.h is assumed to be included
// ET30ACTION, ET30EVENT
// headers\timeouts.h ... TO
// headers\fr.h ... IFR
#define MODEM_CLASS1 1
#define MODEM_CLASS2 2
#define MODEM_CLASS2_0 3
typedef ET30ACTION ( __cdecl FAR* LPWHATNEXTPROC)(LPVOID, ET30EVENT, ...);
#define MAXRECVFRAMES 20
typedef struct { LPFR rglpfr[MAXRECVFRAMES]; BYTE b[]; } FRAMESPACE, far* LPFRAMESPACE;
typedef struct { LPFRAMESPACE lpfs; // ptr to storage for recvd frames
UWORD Nframes; // Number of recvd frames
IFR ifrCommand, ifrResp, ifrSend; USHORT uTrainCount;
USHORT uRecvTCFMod; // for fastexit stuff
// set this from the DCS and jump straight into RecvTCF
// Used to decide whether to insert a 1 bit or not (T30 sec 5.3.6.1)
BOOL fReceivedDIS; BOOL fReceivedDTC; BOOL fReceivedEOM;
// Used to determine whether to call PutRecvBuf(END_PAGE/END_DOC)
// Set when we finish receiving page, reset after calling PutRecvBuf(...)
BOOL fAtEndOfRecvPage; // Used when sending MCF/RTN to determine whether we succeeded to receive last page
// Set when we finish receiving page, reset when we start to (try to) receive next page
BOOL fReceivedPage; LONG sRecvBufSize; TO toT1; // This is used in MainBody.
// Some modems can't train at higher speeds (timeout or return
// ERRROR on AT+FRM=xxx) with other specific devices, but are OK at lower
// speeds. So we keep track of the number of times we try to get the TCF,
// and after the 2nd failed attempt, send an FTT instead of going to
// node F.
# define CLEAR_MISSED_TCFS() (pTG->T30.uMissedTCFs=0)
# define MAX_MISSED_TCFS_BEFORE_FTT 2
USHORT uMissedTCFs;
} ET30T30;
typedef enum { modeNONE=0, modeNONECM, modeECM, modeECMRETX } PHASECMODE;
typedef struct { IFR ifrLastSent; PHASECMODE modePrevRecv; BOOL fGotWrongMode; } ET30ECHOPROTECT;
//
// headers\awnsfint.h is assumed to be included
// force include to class1\*.c
#pragma pack(1) // ensure packed structure
typedef struct { BYTE G1stuff :3; BYTE G2stuff :5;
BYTE G3Tx :1; // In DIS indicates poll doc avail. Must be 0 in DCS.
BYTE G3Rx :1; // Must set to 1 in BOTH DCS/DTC
BYTE Baud :4; BYTE ResFine_200 :1; BYTE MR_2D :1;
BYTE PageWidth :2; BYTE PageLength :2; BYTE MinScanCode :3; BYTE Extend24 :1;
BYTE Hand2400 :1; BYTE Uncompressed :1; BYTE ECM :1; BYTE SmallFrame :1; BYTE ELM :1; BYTE Reserved1 :1; BYTE MMR :1; BYTE Extend32 :1;
BYTE WidthInvalid :1; BYTE Width2 :4; // 1 == WidthA5_1216
// 2 == WidthA6_864
// 4 == WidthA5_1728
// 8 == WidthA6_1728
BYTE Reserved2 :2; BYTE Extend40 :1;
BYTE Res8x15 :1; BYTE Res_300 :1; BYTE Res16x15_400 :1; BYTE ResInchBased :1; BYTE ResMetricBased :1; BYTE MinScanSuperHalf:1; BYTE SEPcap :1; BYTE Extend48 :1;
BYTE SUBcap :1; BYTE PWDcap :1; BYTE CanEmitDataFile :1; BYTE Reserved3 :1; BYTE BFTcap :1; BYTE DTMcap :1; BYTE EDIcap :1; BYTE Extend56 :1;
BYTE BTMcap :1; BYTE Reserved4 :1; BYTE CanEmitCharFile :1; BYTE CharMode :1; BYTE Reserved5 :3; BYTE Extend64 :1;
} DIS, far* LPDIS, near* NPDIS;
#pragma pack()
#define MAXFRAMES 10
#define MAXSPACE 512
typedef struct { USHORT uNumFrames; USHORT uFreeSpaceOff; LPFR rglpfr[MAXFRAMES]; BYTE b[MAXSPACE]; } RFS, near* NPRFS;
#define IDFIFSIZE 20 // from protocol\protocol.h
typedef struct {
////////////////////////// Client BC parameters
BC RecvCaps; // ==> NSF/DIS recved
BC RecvParams; // ==> NSS/DCS recvd
BC SendCaps; // ==> NSF/DIS sent
BC SendParams; // ==> NSS/DCS sent
BOOL fRecvCapsGot; BOOL fSendCapsInited; BOOL fSendParamsInited; BOOL fRecvParamsGot;
////////////////////////// Hardware parameters
LLPARAMS llRecvCaps; // DIS recvd
LLPARAMS llSendCaps; // DIS sent---use uRecvSpeeds
LLPARAMS llSendParams; // used to negotiate DCS--use uSendSpeeds
LLPARAMS llNegot; // DCS sent
LLPARAMS llRecvParams; // recvd DCS
BOOL fllRecvCapsGot; BOOL fllSendCapsInited; BOOL fllSendParamsInited; BOOL fllNegotiated; BOOL fllRecvParamsGot;
USHORT HighestSendSpeed; USHORT LowestSendSpeed;
////////////////////////// Flags to make decisions with
BOOL fAbort;
///////////////////////// CSI/TSI/CIG Received Frames
BYTE bRemoteID[IDFIFSIZE+1];
///////////////////////// DIS Received Frames
DIS RemoteDIS; USHORT uRemoteDISlen; BOOL fRecvdDIS;
///////////////////////// DIS Send Frames (We need so we can check the DIS we send as receiver against DCS)
DIS LocalDIS; USHORT uLocalDISlen; BOOL fLocalDIS;
///////////////////////// DCS Received Frames
DIS RemoteDCS; USHORT uRemoteDCSlen; BOOL fRecvdDCS;
} PROT, near* NPPROT;
#define COMMANDBUFSIZE 40
typedef struct { TO toRecv;
BYTE bCmdBuf[COMMANDBUFSIZE]; USHORT uCmdLen; BOOL fHDLC; USHORT CurMod; enum {SEND, RECV, IDLE } DriverMode; enum {COMMAND, FRH, FTH, FTM, FRM} ModemMode; } CLASS1_MODEM;
#define OVBUFSIZE 4096
typedef struct { enum {eDEINIT, eFREE, eALLOC, eIO_PENDING} eState; OVERLAPPED ov; char rgby[OVBUFSIZE]; // Buffer associated with this overlapped struct.
DWORD dwcb; // Current count of data in this buffer.
} OVREC;
typedef struct { UWORD cbInSize; UWORD cbOutSize; DCB dcb; DCB dcbOrig; BOOL fStateChanged; COMSTAT comstat; BOOL fCommOpen;
# define NUM_OVS 2 // Need atleast 2 to get true overlaped I/O
// We maintain a queue of overlapped structures, having upto
// NUM_OVS overlapped writes pending. If NUM_OVS writes are pending,
// we do a GetOverlappedResult(fWait=TRUE) on the earliest write, and
// then reuse that structure...
OVERLAPPED ovAux; // For ReadFile and WriteFile(MyWriteComm only).
OVREC rgovr[NUM_OVS]; // For WriteFile
UINT uovFirst; UINT uovLast; UINT covAlloced; BOOL fDoOverlapped; BOOL fovInited;
OVREC *lpovrCur;
BYTE fEnableHandoff:1; // True if we are to enable adaptive answer
BYTE fDataCall:1; // True if a data call is active.
} FCOM_COMM;
//
// NCUPARAMS is defined in headers\ncuparm.h, included by .\modemddi.h
// we will force define modemddi.h
//
#define REPLYBUFSIZE 400
#define MAXKEYSIZE 128
typedef struct { BYTE fModemInit :1; // Reset & synced up with modem
BYTE fOffHook :1; // Online (either dialled or answered)
BOOL fInDial, fInAnswer, fInDialog; } FCOM_STATUS;
typedef struct { BYTE bLastReply[REPLYBUFSIZE+1];
BYTE bEntireReply[REPLYBUFSIZE+1]; // Used only for storing
TO toDialog, toZero; CMDTAB CurrCmdTab; MODEMCAPS CurrMdmCaps;
// Following point to the location of the profile information.
# define MAXKEYSIZE 128
DWORD dwProfileID; char rgchKey[MAXKEYSIZE];
} FCOM_MODEM;
// Inst from fxrn\efaxrun.h
typedef enum { IDLE1, BEFORE_ANSWER, BEFORE_RECVCAPS, SENDDATA_PHASE, SENDDATA_BETWEENPAGES, /** BEFORE_HANGUP, BEFORE_ACCEPT, **/ BEFORE_RECVPARAMS, RECVDATA_PHASE, RECVDATA_BETWEENPAGES, SEND_PENDING } STATE; typedef struct { USHORT Encoding; DWORD AwRes; USHORT PageWidth; USHORT PageLength; USHORT fLastPage; } AWFILEINFO, FAR* LPAWFI;
typedef struct { STATE state;
AWFILEINFO awfi;
HANDLE hfile;
BC SendCaps; BC RemoteRecvCaps; BC SendParams; BC RecvParams;
PROTPARAMS ProtParams; } INSTDATA, *PINSTDATA;
//memory management
#define STATICBUFSIZE (MY_BIGBUF_ACTUALSIZE * 2)
#define STATICBUFCOUNT 2
typedef struct { HANDLE hComm; CHAR szDeviceName[1]; } DEVICEID, FAR * LPDEVICEID;
// Note: DEVCFG and DEVCFGHDR are received from Unimodem through lineGetDevConfig
// Therefore, they must match Unimodem internal declarations
typedef struct tagDEVCFGHDR { DWORD dwSize; DWORD dwVersion; DWORD fdwSettings; } DEVCFGHDR;
typedef struct tagDEVCFG { DEVCFGHDR dfgHdr; COMMCONFIG commconfig; } DEVCFG, *PDEVCFG, FAR* LPDEVCFG;
#define IDVARSTRINGSIZE (sizeof(VARSTRING)+128)
#define ASYNC_TIMEOUT 120000L
#define ASYNC_SHORT_TIMEOUT 20000L
#define BAD_HANDLE(h) (!(h) || (h)==INVALID_HANDLE_VALUE)
// ASCII stuff
typedef struct _FAX_RECEIVE_A { DWORD SizeOfStruct; LPSTR FileName; LPSTR ReceiverName; LPSTR ReceiverNumber; DWORD Reserved[4]; } FAX_RECEIVE_A, *PFAX_RECEIVE_A;
typedef struct _FAX_SEND_A { DWORD SizeOfStruct; LPSTR FileName; LPSTR CallerName; LPSTR CallerNumber; LPSTR ReceiverName; LPSTR ReceiverNumber; DWORD Reserved[4]; } FAX_SEND_A, *PFAX_SEND_A;
typedef struct _COMM_CACHE { DWORD dwMaxSize; DWORD dwCurrentSize; DWORD dwOffset; DWORD fReuse; char lpBuffer[4096]; } COMM_CACHE;
typedef struct { UWORD cbLineMin;
// Output filtering (DLE stuffing and ZERO stuffing only)
// All inited in FComOutFilterInit()
LPB lpbFilterBuf; UWORD cbLineCount; // Has to be 16 bits
BYTE bLastOutByte; // Stuff: last byte of previous input buffer
// Input filtering (DLE stripping) only.
// All inited in FComInFilterInit()
BYTE fGotDLEETX :1; BYTE bPrevIn; // Strip::last byte of prev buffer was DLE
UWORD cbPost; #define POSTBUFSIZE 20
BYTE rgbPost[POSTBUFSIZE+1];
} FCOM_FILTER;
#define MAXDUMPFRAMES 100
#define MAXDUMPSPACE 400
typedef struct { USHORT uNumFrames; USHORT uFreeSpaceOff; USHORT uFrameOff[MAXDUMPFRAMES]; // arrays of offsets to frames
BYTE b[MAXDUMPSPACE]; } PROTDUMP, FAR* LPPROTDUMP;
typedef struct { DWORD fAvail; DWORD ThreadId; HANDLE FaxHandle; LPVOID pTG; HLINE LineHandle; HCALL CallHandle; DWORD DeviceId; HANDLE CompletionPortHandle; ULONG_PTR CompletionKey; DWORD TiffThreadId; DWORD TimeStart; DWORD TimeUpdated; DWORD CkSum; } T30_RECOVERY_GLOB;
typedef struct { DWORD dwContents; // Set to 1 (indicates containing key)
DWORD dwKeyOffset; // Offset to key from start of this struct.
// (not from start of LINEDEVCAPS ).
// 8 in our case.
BYTE rgby[1]; // place containing null-terminated
// registry key.
} MDM_DEVSPEC, FAR * LPMDM_DEVSPEC;
|