//****************************************************************************
//
//                     Microsoft NT Remote Access Service
//
//      Copyright (C) 1992-93 Microsft Corporation. All rights reserved.
//
//  Filename: serialpr.h
//
//  Revision History
//
//  Sep  3, 1992   J. Perry Hannah   Created
//
//
//  Description: This file contains structure and constant definitions
//               SERIAL.DLL.  This file is used used only by SERIAL.DLL
//               source files, and is not public in any way.
//
//****************************************************************************


#ifndef _SERIAL_DLL_PRIVATE_
#define _SERIAL_DLL_PRIVATE_




//*  Defines  ****************************************************************
//

#define  RAS_PATH               "\\ras\\"                               //*
#define  SERIAL_INI_FILENAME    "serial.ini"
#define  ASYNCMAC_FILENAME      L"\\\\.\\ASYNCMAC"
#define  ASYNCMAC_BINDING_NAME  "\\DEVICE\\ASYNCMAC01"

#define  FILE_EXCLUSIVE_MODE    0
#define  HANDLE_EXCEPTION       1L
#define  CONTINUE_SEARCH        0
#define  EXCEPT_RAS_MEDIA       0x00A00002                              //*

#define  INPUT_QUEUE_SIZE       1514    // ???
#define  OUTPUT_QUEUE_SIZE      1514    // ???
#define  FROM_TOP_OF_FILE       TRUE

#define  USE_DEVICE_INI_DEFAULT '\x01'
#define  INVALID_RASENDPOINT    0xffff




//*  Enumeration Types  ******************************************************
//

// typedef enum DEVICETYPE DEVICETYPE;                                     //*

enum DEVICETYPE
{
  MODEM     = 0,
  PAD       = 1,
  SWITCH    = 2
};




//*  Macros  *****************************************************************
//

#ifdef DEBUG

#define DebugPrintf(_args_) DbgPrntf _args_                              //*

#else

#define DebugPrintf(_args_)

#endif




//*  Data Structures  ********************************************************
//

typedef struct SERIALPCB SERIALPCB;

struct SERIALPCB
{
  SERIALPCB   *pNextSPCB;
  HANDLE      hIOPort;
  TCHAR       szPortName[MAX_PORT_NAME];

  HANDLE      hAsyMac;

  BOOL        bErrorControlOn;
  HANDLE      uRasEndpoint;

  DWORD       dwActiveDSRMask ; // Stores whether DSR was active when the port
                                // was opened. (this is fixed)
  DWORD       dwMonitorDSRMask; // Used to store whether DSR should be
                                // monitored.(this may change during connection)
  DWORD       dwEventMask;      //Used by WaitCommEvent
  DWORD       dwPreviousModemStatus;  // used to detect changes in state
  RAS_OVERLAPPED  MonitorDevice;    //Used by WaitCommEvent
  RAS_OVERLAPPED  SendReceive;      //Used by WriteFile and ReadFile

  DWORD       Stats[NUM_RAS_SERIAL_STATS];

  TCHAR       szDeviceType[MAX_DEVICETYPE_NAME + 1];
  TCHAR       szDeviceName[MAX_DEVICE_NAME + 1];
  TCHAR       szCarrierBPS[MAX_BPS_STR_LEN];
  TCHAR       szDefaultOff[RAS_MAXLINEBUFLEN];
};



//*  Error Return Codes for Internal Errors  *********************************
//
//   Internal errors are not expected after shipping.  These errors are not
//  normally reported to the user except as an internal error number.
//

#ifndef _INTERROR_
#include "interror.h"
#endif


#define  ISER_BASE  RAS_INTERNAL_ERROR_BASE + RIEB_ASYNCMEDIADLL

#define  ERROR_SPCB_NOT_ON_LIST                 ISER_BASE + 1







//*  Local Prototypes  *******************************************************
//

//*  From serutil.c  ---------------------------------------------------------
//

void  AddPortToList(HANDLE hIOPort, char *pszPortName);

SERIALPCB* FindPortInList(HANDLE hIOPort, SERIALPCB **ppPrevSPCB);

SERIALPCB* FindPortNameInList(TCHAR *pszPortName);

void  GetDefaultOffStr(HANDLE hIOPort, TCHAR *pszPortName);

void  GetIniFileName(char *pszFileName, DWORD dwNameLen);

void  GetMem(DWORD dSize, BYTE **ppMem);                                 //*

void  GetValueFromFile(TCHAR *pzPortName, TCHAR szKey[], TCHAR *pszValue);

DWORD InitCarrierBps(char *pszPortName, char *pszMaxCarrierBps);

void  SetCommDefaults(HANDLE hIOPort, char *pszPortName);

void  SetDcbDefaults(DCB *pDCB);

BOOL  StrToUsage(char *pszStr, RASMAN_USAGE *peUsage);

DWORD UpdateStatistics(SERIALPCB *pSPCB);

DWORD ValueToNum(RAS_PARAMS *p);

BOOL  ValueToBool(RAS_PARAMS *p);



#ifdef DEBUG

void DbgPrntf(const char * format, ...);                                 //*

#endif



#endif // _SERIAL_DLL_PRIVATE_