/*****************************************************************************
* Copyright (c) 1990-98 Digi International Inc., All Rights Reserved
* 
* This software contains proprietary and confidential information of Digi
* International Inc.  By accepting transfer of this copy, Recipient agrees
* to retain this software in confidence, to prevent disclosure to others,
* and to make no use of this software other than that for which it was
* delivered.  This is an unpublished copyrighted work of Digi International
* Inc.  Except as permitted by federal law, 17 USC 117, copying is strictly
* prohibited.
* 
* Restricted Rights Legend
*
* Use, duplication, or disclosure by the Government is subject to
* restrictions set forth in sub-paragraph (c)(1)(ii) of The Rights in
* Technical Data and Computer Software clause at DFARS 252.227-7031 or
* subparagraphs (c)(1) and (2) of the Commercial Computer Software -
* Restricted Rights at 48 CFR 52.227-19, as applicable.
*
* Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
*
*****************************************************************************/


// Line.h: interface for the CLine class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_LINE_H__5A90D8B0_C28E_11D1_BAA4_00805F9E3135__INCLUDED_)
#define AFX_LINE_H__5A90D8B0_C28E_11D1_BAA4_00805F9E3135__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include "ConfigObject.h"


class FW_EXPORTED_CLASS CLine : public CConfigObject
{
   DECLARE_DYNAMIC(CLine)

public:
   virtual ~CLine();

   int GetLineNumber(void) const { return m_nLine; }
   void SetLineNumber(int const nLine) { m_nLine = nLine; }

   virtual DWORD GetMaxFrameSize(void) const { return m_dwMaxFrameSize; }
   virtual void SetMaxFrameSize(DWORD const dwMaxFrameSize) { m_dwMaxFrameSize = dwMaxFrameSize; }

   virtual DWORD GetLineSpeed(void) const { return m_dwLineSpeed; }
   virtual void SetLineSpeed(DWORD const dwLineSpeed) { m_dwLineSpeed = dwLineSpeed; }

   virtual DWORD GetLineClocking(void) const { return m_dwClocking; }
   virtual void SetLineClocking(DWORD const dwClocking) { m_dwClocking = dwClocking; }

   virtual BOOL SetParameters(void);
   virtual BOOL CopyParameters(CConfigObject const * const pFrom);

   virtual BOOL BuildConfigDataRegPath(CString & strRegPath);

   BOOL IsValidProtocol(CString const & strProtocol);
   BOOL SwitchProtocol(CString const & strNewProtocol);

   DWORD GetSnid(void) const{return m_dwSnid;}

   DWORD GetConfiguredEndPoints(void) const{return m_dwConfiguredEndPoints;}
   void SetConfiguredEndPoints(DWORD const dw) {m_dwConfiguredEndPoints = dw;}
   DWORD GetFracT1Mask(void) const{return m_dwFracT1Mask;}
   void SetFracT1Mask(DWORD const dw) {m_dwFracT1Mask = dw;}
   DWORD GetFracT1SpeedMask(void) const{return m_dwFracT1SpeedMask;}
   void SetFracT1SpeedMask(DWORD const dw) {m_dwFracT1SpeedMask = dw;}

protected:
   //
   // Allow instantiations of derived classes only
   CLine(HKEY const hKeyRoot, CString const & strRegPath, CConfigObject const * const pParent);

   BOOL m_bSnidPrefixRequired;
   int m_nLine;

   //
   // Parameters gettable/settable by the config (data resides in adapter instance registry key)
   CString m_strProtocol;
   DWORD m_dwSnid;
   DWORD m_dwMaxFrameSize;
   DWORD m_dwLineSpeed;
   DWORD m_dwClocking;

   // Parameters needed by some client drivers
   DWORD m_dwConfiguredEndPoints;
   DWORD m_dwFracT1Mask;
   DWORD m_dwFracT1SpeedMask;

   enum 
   {
      INTERNAL_CLOCKING=0,
      EXTERNAL_CLOCKING,
   };
   //
   // Method for getting parameters
   BOOL GetParameters(void);

   //
   // Static config data for this specific adapter type (data resides in SOFTWARE\Digi registry key)
   CStringArray m_astrProtocolsAllowed;

   //
   // Method for getting static config data
   BOOL GetConfigData(void);
};

#endif // !defined(AFX_LINE_H__5A90D8B0_C28E_11D1_BAA4_00805F9E3135__INCLUDED_)
