/*****************************************************************************
* Copyright (c) 1990-2000 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
*
*****************************************************************************/


// ComOnlyAdapter.h: interface for the CComOnlyAdapter class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(COMONLYADAPTER_H_INCLUDED_)
#define COMONLYADAPTER_H_INCLUDED_

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

#define PATHSIZE  128

#include "Adapter.h"

#if defined NT5
extern "C" {
#include <msports.h>
}
#endif // #if defined NT5

class FW_EXPORTED_CLASS CComOnlyAdapter : public CAdapter  
{
	DECLARE_DYNAMIC(CComOnlyAdapter)

public:
	CComOnlyAdapter(HKEY const hKeyRoot, CString const & strRegPath, CConfigObject const * const pParent);
	virtual ~CComOnlyAdapter();

   BOOL     IsNumberConfiguredForPortAbove(DWORD PortNumber,DWORD ComNumber);

#if defined NT5
   // Methods
public:
   virtual BOOL SetParameters(void); // override to deal with ComDb

   void     DeletePortUsageBuffers();
	DWORD    InitPortUsageBuffers();
	DWORD    ResizePortUsageBuffers(DWORD);
	void     TraceAssignedPorts();
   BOOL     IsNumberAvailable(DWORD const ComNumber);
   BOOL     AddPortComNumber(DWORD ComNumber, BOOL fOverride);
   BOOL     AddPortComNumberDeferred(DWORD ComNumber);
   BOOL     FreePortComNumber(DWORD ComNumber);
   BOOL     FreePortComNumberDeferred(DWORD ComNumber);
	void     UpdateDeferredPortNameUsage();
   BOOL     AddAlreadyClaimedPortNumber(DWORD ComNumber);
   BOOL     IsNumberAlreadyClaimed(DWORD ComNumber);
   BOOL     IsNumberDeferredClaim(DWORD ComNumber);
   BOOL     IsNumberInMaxRange(DWORD ComNumber);
   DWORD    GetCurrentMaxRange(void) {return m_MaxPorts;}
   BOOL     ReNumberPortComNames(DWORD StartPort,DWORD StartCom);
private:
	HCOMDB	m_hComDB;
	BYTE *	m_PortUsageBuffer;
	BYTE *	m_PortsToClaim;
	BYTE *	m_PortsToRelease;
   BYTE *   m_PortsAlreadyClaimed;
	DWORD    m_MaxPorts;
#endif // #if defined NT5
};

#endif // !defined(COMONLYADAPTER_H_INCLUDED_)
