565 lines
6.4 KiB
C++
565 lines
6.4 KiB
C++
/*++
|
||
|
||
Copyright (c) 1991 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
COMM_DEVICE
|
||
|
||
Abstract:
|
||
|
||
This module contains the definition for the COMM_DEVICE class.
|
||
|
||
Author:
|
||
|
||
Ramon J. San Andres (ramonsa) 08-Jul-91
|
||
|
||
Environment:
|
||
|
||
ULIB, User Mode
|
||
|
||
Notes:
|
||
|
||
|
||
|
||
--*/
|
||
|
||
#if !defined (_COMM_DEVICE_)
|
||
|
||
#define _COMM_DEVICE_
|
||
|
||
|
||
DECLARE_CLASS( FSN_FILE );
|
||
DECLARE_CLASS( FILE_STREAM );
|
||
DECLARE_CLASS( COMM_DEVICE );
|
||
|
||
|
||
//
|
||
// PARITY
|
||
//
|
||
enum PARITY {
|
||
COMM_PARITY_NONE = NOPARITY,
|
||
COMM_PARITY_EVEN = EVENPARITY,
|
||
COMM_PARITY_ODD = ODDPARITY,
|
||
COMM_PARITY_MARK = MARKPARITY,
|
||
COMM_PARITY_SPACE = SPACEPARITY
|
||
};
|
||
|
||
//
|
||
// STOP BITS
|
||
//
|
||
enum STOPBITS {
|
||
|
||
COMM_STOPBITS_1 = ONESTOPBIT,
|
||
COMM_STOPBITS_15 = ONE5STOPBITS,
|
||
COMM_STOPBITS_2 = TWOSTOPBITS
|
||
};
|
||
|
||
//
|
||
// DTR control
|
||
//
|
||
enum DTR_CONTROL {
|
||
DTR_ENABLE = DTR_CONTROL_ENABLE,
|
||
DTR_DISABLE = DTR_CONTROL_DISABLE,
|
||
DTR_HANDSHAKE = DTR_CONTROL_HANDSHAKE
|
||
};
|
||
|
||
//
|
||
// RTS control
|
||
//
|
||
enum RTS_CONTROL {
|
||
RTS_ENABLE = RTS_CONTROL_ENABLE,
|
||
RTS_DISABLE = RTS_CONTROL_DISABLE,
|
||
RTS_HANDSHAKE = RTS_CONTROL_HANDSHAKE,
|
||
RTS_TOGGLE = RTS_CONTROL_TOGGLE
|
||
};
|
||
|
||
|
||
|
||
|
||
class COMM_DEVICE : public OBJECT {
|
||
|
||
public:
|
||
|
||
DECLARE_CAST_MEMBER_FUNCTION( COMM_DEVICE );
|
||
|
||
ULIB_EXPORT
|
||
DECLARE_CONSTRUCTOR( COMM_DEVICE );
|
||
|
||
VIRTUAL
|
||
ULIB_EXPORT
|
||
~COMM_DEVICE(
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
Initialize (
|
||
IN PCPATH PortName,
|
||
OUT PBOOLEAN OpenError DEFAULT NULL
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
CommitState (
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULONG
|
||
QueryBaudRate (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
ULONG
|
||
QueryDataBits (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
DTR_CONTROL
|
||
QueryDtrControl (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
QueryIdsr (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
QueryOcts (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
QueryOdsr (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
PARITY
|
||
QueryParity (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
RTS_CONTROL
|
||
QueryRtsControl (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
STOPBITS
|
||
QueryStopBits (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
QueryTimeOut (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
QueryXon (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
ReadState (
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
SetBaudRate (
|
||
IN ULONG BaudRate
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
SetDataBits (
|
||
IN ULONG DataBits
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
SetDtrControl (
|
||
IN DTR_CONTROL DtrControl
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
SetIdsr (
|
||
IN BOOLEAN Idsr
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
SetOcts (
|
||
IN BOOLEAN Octs
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
SetOdsr (
|
||
IN BOOLEAN Odsr
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
SetParity (
|
||
IN PARITY Parity
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
SetRtsControl (
|
||
IN RTS_CONTROL RtsControl
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
SetStopBits (
|
||
IN STOPBITS StopBits
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
SetTimeOut (
|
||
IN BOOLEAN TimeOut
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
SetXon (
|
||
IN BOOLEAN Xon
|
||
);
|
||
|
||
protected:
|
||
|
||
|
||
private:
|
||
|
||
VOID
|
||
Construct (
|
||
);
|
||
|
||
NONVIRTUAL
|
||
VOID
|
||
Destroy (
|
||
);
|
||
|
||
|
||
HANDLE _Handle; // Handle to the port
|
||
DCB _Dcb; // DCB Structure.
|
||
|
||
#if DBG==1
|
||
|
||
BOOLEAN _Initialized; // Object has been initialized
|
||
|
||
#endif // DBG
|
||
|
||
|
||
};
|
||
|
||
INLINE
|
||
ULONG
|
||
COMM_DEVICE::QueryBaudRate (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Queries the baud rate
|
||
|
||
Arguments:
|
||
|
||
none
|
||
|
||
Return Value:
|
||
|
||
ULONG - The baud rate.
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
DebugAssert( _Initialized );
|
||
|
||
return (ULONG)_Dcb.BaudRate;
|
||
|
||
}
|
||
|
||
INLINE
|
||
ULONG
|
||
COMM_DEVICE::QueryDataBits (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Queries the number of data bits
|
||
|
||
Arguments:
|
||
|
||
none
|
||
|
||
Return Value:
|
||
|
||
ULONG - The number of data bits
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
DebugAssert( _Initialized );
|
||
|
||
return (ULONG)_Dcb.ByteSize;
|
||
|
||
}
|
||
|
||
INLINE
|
||
DTR_CONTROL
|
||
COMM_DEVICE::QueryDtrControl (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Queries the DTR control
|
||
|
||
Arguments:
|
||
|
||
none
|
||
|
||
Return Value:
|
||
|
||
DTR_CONTROL - The DTR control
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
DebugAssert( _Initialized );
|
||
|
||
return (DTR_CONTROL)_Dcb.fDtrControl;
|
||
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
COMM_DEVICE::QueryIdsr (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Queries whether DSR sensitivity is enabled or disabled
|
||
|
||
Arguments:
|
||
|
||
none
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - TRUE if DSR sensitivity enabled. FALSE otherwise.
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
DebugAssert( _Initialized );
|
||
|
||
return ( _Dcb.fDsrSensitivity != 0 );
|
||
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
COMM_DEVICE::QueryOcts (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Queries whether hanshaking using the CTS circuit is enabled or not.
|
||
|
||
Arguments:
|
||
|
||
none
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - TRUE if handshaking enabled. FALSE otherwise.
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
DebugAssert( _Initialized );
|
||
|
||
return ( _Dcb.fOutxCtsFlow != 0 );
|
||
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
COMM_DEVICE::QueryOdsr (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Queries whether handshaking using the DSR circuit is enabled or not
|
||
|
||
Arguments:
|
||
|
||
none
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - TRUE if handshaking enabled. FALSE otherwise.
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
DebugAssert( _Initialized );
|
||
|
||
return ( _Dcb.fOutxDsrFlow != 0 );
|
||
|
||
}
|
||
|
||
INLINE
|
||
PARITY
|
||
COMM_DEVICE::QueryParity (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Queries the parity
|
||
|
||
Arguments:
|
||
|
||
none
|
||
|
||
Return Value:
|
||
|
||
BYTE - The parity value.
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
DebugAssert( _Initialized );
|
||
|
||
return (PARITY)_Dcb.Parity;
|
||
|
||
}
|
||
|
||
INLINE
|
||
RTS_CONTROL
|
||
COMM_DEVICE::QueryRtsControl (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Queries the RTS control
|
||
|
||
Arguments:
|
||
|
||
none
|
||
|
||
Return Value:
|
||
|
||
RTS_CONTROL - The RTS control
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
DebugAssert( _Initialized );
|
||
|
||
return (RTS_CONTROL)_Dcb.fRtsControl;
|
||
|
||
}
|
||
|
||
INLINE
|
||
STOPBITS
|
||
COMM_DEVICE::QueryStopBits (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Queries the number of stop bits
|
||
|
||
Arguments:
|
||
|
||
none
|
||
|
||
Return Value:
|
||
|
||
BYTE - The number of stop bits
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
DebugAssert( _Initialized );
|
||
|
||
return (STOPBITS)_Dcb.StopBits;
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
COMM_DEVICE::QueryXon (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Queries whether XON/XOFF protocol is enabled or not.
|
||
|
||
Arguments:
|
||
|
||
none
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - TRUE if protocol enabled, FALSE otherwise
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
DebugAssert( _Initialized );
|
||
|
||
return ( _Dcb.fInX && _Dcb.fOutX );
|
||
}
|
||
|
||
|
||
|
||
|
||
#endif // _COMM_DEVICE_
|