1// ****************************************************************************
2//
3//  	CIndigoIODspCommObject.cpp
4//
5//		Implementation file for EchoGals generic driver Indigo io DSP
6//		interface class.
7//
8// ----------------------------------------------------------------------------
9//
10// This file is part of Echo Digital Audio's generic driver library.
11// Copyright Echo Digital Audio Corporation (c) 1998 - 2005
12// All rights reserved
13// www.echoaudio.com
14//
15// This library is free software; you can redistribute it and/or
16// modify it under the terms of the GNU Lesser General Public
17// License as published by the Free Software Foundation; either
18// version 2.1 of the License, or (at your option) any later version.
19//
20// This library is distributed in the hope that it will be useful,
21// but WITHOUT ANY WARRANTY; without even the implied warranty of
22// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23// Lesser General Public License for more details.
24//
25// You should have received a copy of the GNU Lesser General Public
26// License along with this library; if not, write to the Free Software
27// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
28//
29// ****************************************************************************
30
31#include "CEchoGals.h"
32#include "CIndigoIODspCommObject.h"
33
34#ifdef ECHO_WDM
35#pragma optimize("",off)
36#endif
37#include "IndigoIODSP.c"
38
39
40//
41//	Construction/destruction
42//
43CIndigoIODspCommObject::CIndigoIODspCommObject
44(
45	PDWORD		pdwRegBase,				// Virtual ptr to DSP registers
46	PCOsSupport	pOsSupport
47) : CDspCommObjectVmixer( pdwRegBase, pOsSupport )
48{
49	strcpy( m_szCardName, "Indigo io" );
50	m_pdwDspRegBase = pdwRegBase;		// Virtual addr DSP's register base
51
52	m_wNumPipesOut = 8;
53	m_wNumPipesIn = 2;
54	m_wNumBussesOut = 2;
55	m_wNumBussesIn = 2;
56	m_wFirstDigitalBusOut = m_wNumBussesOut;
57	m_wFirstDigitalBusIn = m_wNumBussesIn;
58
59	m_fHasVmixer = TRUE;
60
61	m_wNumMidiOut = 0;					// # MIDI out channels
62	m_wNumMidiIn = 0;						// # MIDI in  channels
63
64	m_pDspCommPage->dwSampleRate = SWAP( (DWORD) 44100 );
65
66	m_bHasASIC = FALSE;
67
68	m_pwDspCodeToLoad = pwIndigoioDSP;
69
70	m_byDigitalMode = DIGITAL_MODE_NONE;
71
72	//
73	// Since this card has no ASIC, mark it as loaded so everything works OK
74	//
75	m_bASICLoaded = TRUE;
76
77}	// CIndigoIODspCommObject::CIndigoIODspCommObject( DWORD dwPhysRegBase )
78
79
80CIndigoIODspCommObject::~CIndigoIODspCommObject()
81{
82}	// CIndigoIODspCommObject::~CIndigoIODspCommObject()
83
84
85//
86//	Save new clock settings and send to DSP.
87//
88ECHOSTATUS CIndigoIODspCommObject::SetInputClock(WORD wClock)
89{
90
91	ECHO_DEBUGPRINTF( ("CIndigoIODspCommObject::SetInputClock:\n") );
92	return ECHOSTATUS_CLOCK_NOT_SUPPORTED;
93
94}	// ECHOSTATUS CIndigoIODspCommObject::SetInputClock
95
96
97//===========================================================================
98//
99// SetSampleRate
100//
101// Set the audio sample rate for IndigoIO
102//
103//===========================================================================
104
105DWORD CIndigoIODspCommObject::SetSampleRate( DWORD dwNewSampleRate )
106{
107	if ( !WaitForHandshake() )
108		return 0xffffffff;
109
110	//
111	// Set the value in the comm page
112	//
113	m_pDspCommPage->dwSampleRate = SWAP( dwNewSampleRate );
114
115	//
116	//	Poke the DSP
117	//
118	ClearHandshake();
119	SendVector( DSP_VC_UPDATE_CLOCKS );
120
121	return GetSampleRate();
122
123} // DWORD CIndigoIODspCommObject::SetSampleRate( DWORD dwNewSampleRate )
124
125// **** CIndigoIODspCommObject.cpp ****
126