Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

184 lines
6.9 KiB

/* com.hh -- Internal definitions for communications routines
*
* Copyright 1994 by Hilgraeve Inc. -- Monroe, MI
* All rights reserved
*
* $Revision: 3 $
* $Date: 5/01/01 3:33p $
*/
// -=-=-=-=-=-=-=-=-=-=-=-=-=- DEBUG CONTROL -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// These constants are used to turn on various types of debug display
// #define DBG_NORMAL
// #define DBG_RCV
// #define DBG_SEND
#if defined(DBG_NORMAL)
#define DEBUGSTR
#define DBGOUT_NORMAL(s,a1,a2,a3,a4,a5) DbgOutStr(s,a1,a2,a3,a4,a5)
#else
#define DBGOUT_NORMAL(s,a1,a2,a3,a4,a5)
#endif
#if defined(DBG_RCV)
#define DEBUGSTR
#define DBGOUT_RCV(s,a1,a2,a3,a4,a5) DbgOutStr(s,a1,a2,a3,a4,a5)
#else
#define DBGOUT_RCV(s,a1,a2,a3,a4,a5)
#endif
#if defined(DBG_SEND)
#define DEBUGSTR
#define DBGOUT_SEND(s,a1,a2,a3,a4,a5) DbgOutStr(s,a1,a2,a3,a4,a5)
#else
#define DBGOUT_SEND(s,a1,a2,a3,a4,a5)
#endif
// -=-=-=-=-=-=-=-=-=-=-=-=-=- DEFINITIONS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#define STANDARD_RBUFR_SIZE 100
#define STANDARD_SBUFR_SIZE 100
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-= TYPES =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
typedef struct
{
TCHAR szDeviceFile[MAX_PATH]; // Name of driver file
TCHAR szPortName[COM_MAX_PORT_NAME]; // Name of individual port
} ST_COM_SETTINGS;
// This is the main com structure used to hang on to all the working details
typedef struct s_com
{
// The s_com_control structure must always be the first item in this
// structure so that a pointer to this structure can be cast into
// a pointer to it.
ST_COM_CONTROL stComCntrl; // The exported part of the structure
// User-settable com values
ST_COM_SETTINGS stFileSettings;
ST_COM_SETTINGS stWorkSettings;
// Control fields for com routines
HSESSION hSession; // Session we belong to
int fPortActive; // TRUE when port has been activated
int fErrorReported; // TRUE if driver has encountered error
HINSTANCE hDriverModule; // Handle of .DLL module
TCHAR szDeviceName[COM_MAX_DEVICE_NAME]; // Name of device type
TCHAR chDummy; // Dummy address for buffer pointers
unsigned afOverride; // Allows tmp. override of com details
HANDLE hRcvEvent; // Signalled whenever rcv data is avail
HANDLE hSndReady; // Signalled whenever send is not busy
// Control fields for sending:
TCHAR * puchSendBufr1; // allocated buffers for holding
TCHAR * puchSendBufr2; // chars. waiting to be sent
TCHAR * puchSendBufr; // pointer to bufr being filled
TCHAR * puchSendPut; // Insertion point in current buffer
TCHAR auchDummyBufr[5]; // Place to rest idle pointers
int nSBufrSize; // Size of send buffers
int nSendCount; // Chars. in current bufr.
int fUserCalled; // TRUE if status function called
STATUSFUNCT pfUserFunction; // User supplied status function
void (*pfIdleFunction)(void); // Registered idle function
// These funtion pointers get set to point into whatever com device
// driver is loaded. (If no driver is loaded or if the driver is invalid,
// they are set to point to default, mostly do-nothing routines
// There are two groups of function pointers, the first group is set to
// point into the device driver as soon as the driver is loaded and stay
// there until the driver us unloaded. The second group are not set to
// point into the driver until an actual port is activated. These are
// set to point back to default routines whenever the port is deactivated.
// -------------------------------------------------------------------
// These are the function pointers that point into the driver whenever
// it is loaded.
int (WINAPI *pfDeviceClose)(void *pvDevData);
int (WINAPI *pfDeviceDialog)(void *pvDevData, HWND hwndParent);
int (WINAPI *pfDeviceGetCommon)(void *pvDevData, ST_COMMON *pstCommon);
int (WINAPI *pfDeviceSetCommon)(void *pvDevData, ST_COMMON *pstCommon);
int (WINAPI *pfDeviceSpecial)(void *, const TCHAR *, TCHAR *, int);
int (WINAPI *pfDeviceLoadHdl)(void *pvDevData, SF_HANDLE sfHdl);
int (WINAPI *pfDeviceSaveHdl)(void *pvDevData, SF_HANDLE sfHdl);
int (WINAPI *pfPortConfigure)(void *pvDevData);
int (WINAPI *pfPortActivate)(void *pvDevData,
TCHAR *pszPortName,
DWORD_PTR dwMediaHdl);
int (WINAPI *pfPortPreconnect)(void *pvDevData,
TCHAR *pszPortName, HWND hwndParent);
// These function pointers point into the driver only when a port has
// been activated.
int (WINAPI *pfPortDeactivate)(void *pvDevData);
int (WINAPI *pfPortConnected)(void *pvDevData);
int (WINAPI *pfRcvRefill)(void *pvDevData);
int (WINAPI *pfRcvClear)(void *pvDevData);
int (WINAPI *pfSndBufrSend)(void *pvDevData,
void *pvBufr, int nCount);
int (WINAPI *pfSndBufrIsBusy)(void *pvDevData);
int (WINAPI *pfSndBufrClear)(void *pvDevData);
int (WINAPI *pfSndBufrQuery)(void *pvDevData, unsigned *pafStatus,
long *plHandshakeDelay);
int (WINAPI *pfSendXon)(void *pvDevData);
//----------------------------------------------------------------------
void * pvDriverData; // Space for drivers data
unsigned nGuard; // to check for memory overwrites
} ST_COM;
// -=-=-=-=-=-=-=-=-=-=-=- INTERNAL PROTOTYPES -=-=-=-=-=-=-=-=-=-=-=-=-=-=-
extern void ComReportError(const HCOM pstCom,
int iErrStr,
const TCHAR * const pszOptInfo,
const int fFirstOnly);
extern void ComFreeDevice(const HCOM pstCom);
extern int ComSendDefaultStatusFunction(int iReason,
unsigned fusHsStatus, long lDelay);
// These are the set of default functions that the function pointers in
// the com handle point to when there is no com driver loaded or when
// it is inactive
int WINAPI ComDefDoNothing(void *pvDriverData);
int WINAPI ComDefPortPreconnect(void *pvDriverData,
TCHAR *pszPortName,
HWND hwndParent);
int WINAPI ComDefDeviceDialog(void *pvDriverData, HWND hwndParent);
int WINAPI ComDefPortActivate(void *pvDriverData,
TCHAR *pszPortName,
DWORD_PTR dwMediaHdl);
int WINAPI ComDefBufrRefill(void *pvDriverData);
int WINAPI ComDefSndBufrSend(void *pvDriverData, void *pvBufr, int nCount);
int WINAPI ComDefSndBufrBusy(void *pvDriverData);
int WINAPI ComDefSndBufrClear(void *pvDriverData);
int WINAPI ComDefSndBufrQuery(void *pvDriverData,
unsigned *pafStatus,
long *plHandshakeDelay);
void WINAPI ComDefIdle(void);
int WINAPI ComDefDeviceGetCommon(void *pvPrivate, ST_COMMON *pstCommon);
int WINAPI ComDefDeviceSetCommon(void *pvPrivate, struct s_common *pstCommon);
int WINAPI ComDefDeviceSpecial(void *pvPrivate,
const TCHAR *pszInstructions,
TCHAR *pszResult,
int nBufrSize);
int WINAPI ComDefDeviceLoadSaveHdl(void *pvPrivate, SF_HANDLE sfHdl);
// Functions made available to driver .DLLs through func. pointers
extern void * ComMalloc(size_t size);
extern void ComFree(void *pvItem);