/*****************************************************************************
* 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
*
*****************************************************************************/


// Adapter.h: interface for the CAdapter class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_ADAPTER_H__B5AF31A3_59FE_11D2_BB3B_00805F9E3135__INCLUDED_)
#define AFX_ADAPTER_H__B5AF31A3_59FE_11D2_BB3B_00805F9E3135__INCLUDED_

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

#include "DxbMgt.h"
#include "DxbShim.h"

#include "eqm.h"
#include "audiotap.h"

class CAdapter : public CObject  
{
public:
	CAdapter();
	virtual ~CAdapter();

   BOOL Attach(CString const & strBoard);

   CString GetName() const { return m_strBoard; }
   DWORD GetNumber() const { return m_nBoard; }

   DWORD GetPortCount() const { return m_Info.TotalPorts; }
   DWORD GetTotalChannelCount() const { return m_Info.TotalChannels; }

   BOOL OpenStream(CString const & strStream);
   BOOL CloseStream();

   BOOL StartSampling(int const nChannel);
   BOOL PauseSampling();
   BOOL ResumeSampling();
   BOOL StopSampling();

   // this call can do async reads
   BOOL GetSamples(void * const pDataBuffer,
                   ULONG const DataMaxLength,
                   ULONG * const pDataLength,
                   DWORD const TimeoutMs,
                   HANDLE const hEvent,
                   SHIM_STATUS * const pStatus);
   void SetStereo(BOOL f) {m_fStereo = f;}

private:
   BOOL m_fStereo;
   CString m_strBoard;
   DWORD m_nBoard;

   mgmt_board_info_t m_Info;

   HANDLE m_hBoard;

   CString m_strStream;
   HANDLE m_hStream;

   void CleanUp();

   enum
   {
      SS_INACTIVE,
      SS_SAMPLING,
      SS_PAUSED,
   };

   int m_eSamplingState;
};

#endif // !defined(AFX_ADAPTER_H__B5AF31A3_59FE_11D2_BB3B_00805F9E3135__INCLUDED_)
