1// **************************************************************************** 2// 3// CDarla24DspCommObject.cpp 4// 5// Implementation file for Darla24 DSP interface class. 6// 7// ---------------------------------------------------------------------------- 8// 9// This file is part of Echo Digital Audio's generic driver library. 10// Copyright Echo Digital Audio Corporation (c) 1998 - 2005 11// All rights reserved 12// www.echoaudio.com 13// 14// This library is free software; you can redistribute it and/or 15// modify it under the terms of the GNU Lesser General Public 16// License as published by the Free Software Foundation; either 17// version 2.1 of the License, or (at your option) any later version. 18// 19// This library is distributed in the hope that it will be useful, 20// but WITHOUT ANY WARRANTY; without even the implied warranty of 21// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 22// Lesser General Public License for more details. 23// 24// You should have received a copy of the GNU Lesser General Public 25// License along with this library; if not, write to the Free Software 26// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 27// 28// **************************************************************************** 29 30#include "CEchoGals.h" 31#include "CDarla24DspCommObject.h" 32 33#include "Darla24DSP.c" 34 35 36/**************************************************************************** 37 38 Magic constants for the Darla24 hardware 39 40 ****************************************************************************/ 41 42#define GD24_96000 0x0 43#define GD24_48000 0x1 44#define GD24_44100 0x2 45#define GD24_32000 0x3 46#define GD24_22050 0x4 47#define GD24_16000 0x5 48#define GD24_11025 0x6 49#define GD24_8000 0x7 50#define GD24_88200 0x8 51#define GD24_EXT_SYNC 0x9 52 53 54 55 56/**************************************************************************** 57 58 Construction and destruction 59 60 ****************************************************************************/ 61 62//=========================================================================== 63// 64// Constructor 65// 66//=========================================================================== 67 68CDarla24DspCommObject::CDarla24DspCommObject 69( 70 PDWORD pdwRegBase, // Virtual ptr to DSP registers 71 PCOsSupport pOsSupport 72) : CGdDspCommObject( pdwRegBase, pOsSupport ) 73{ 74 strcpy( m_szCardName, "Darla24" ); 75 m_pdwDspRegBase = pdwRegBase; // Virtual addr DSP's register base 76 77 m_wNumPipesOut = 8; 78 m_wNumPipesIn = 2; 79 m_wNumBussesOut = 8; 80 m_wNumBussesIn = 2; 81 m_wFirstDigitalBusOut = 8; 82 m_wFirstDigitalBusIn = 2; 83 84 m_fHasVmixer = FALSE; 85 86 m_wNumMidiOut = 0; // # MIDI out channels 87 m_wNumMidiIn = 0; // # MIDI in channels 88 m_pDspCommPage->dwSampleRate = SWAP( (DWORD) 44100 ); 89 // Need this in case we start with ESYNC 90 91 m_pwDspCodeToLoad = pwDarla24DSP; 92 93 // 94 // Since this card has no ASIC, mark it as loaded so everything works OK 95 // 96 m_bASICLoaded = TRUE; 97 98} // CDarla24DspCommObject::CDarla24DspCommObject( DWORD dwPhysRegBase ) 99 100 101//=========================================================================== 102// 103// Destructor 104// 105//=========================================================================== 106 107CDarla24DspCommObject::~CDarla24DspCommObject() 108{ 109} // CDarla24DspCommObject::~CDarla24DspCommObject() 110 111 112 113 114/**************************************************************************** 115 116 Hardware config 117 118 ****************************************************************************/ 119 120//=========================================================================== 121// 122// SetSampleRate 123// 124// Set the audio sample rate for Darla24; this is fairly simple. You 125// just pick the right magic number. 126// 127//=========================================================================== 128 129DWORD CDarla24DspCommObject::SetSampleRate( DWORD dwNewSampleRate ) 130{ 131 BYTE bClock; 132 133 // 134 // Pick the magic number 135 // 136 switch ( dwNewSampleRate ) 137 { 138 case 96000 : 139 bClock = GD24_96000; 140 break; 141 case 88200 : 142 bClock = GD24_88200; 143 break; 144 case 48000 : 145 bClock = GD24_48000; 146 break; 147 case 44100 : 148 bClock = GD24_44100; 149 break; 150 case 32000 : 151 bClock = GD24_32000; 152 break; 153 case 22050 : 154 bClock = GD24_22050; 155 break; 156 case 16000 : 157 bClock = GD24_16000; 158 break; 159 case 11025 : 160 bClock = GD24_11025; 161 break; 162 case 8000 : 163 bClock = GD24_8000; 164 break; 165 default : 166 ECHO_DEBUGPRINTF( ("CDarla24DspCommObject::SetSampleRate: Error, " 167 "invalid sample rate 0x%lx\n", dwNewSampleRate) ); 168 return 0xffffffff; 169 } 170 171 if ( !WaitForHandshake() ) 172 return 0xffffffff; 173 174 // 175 // Override the sample rate if this card is set to Echo sync. 176 // m_pDspCommPage->wInputClock is just being used as a parameter here; 177 // the DSP ignores it. 178 // 179 if ( ECHO_CLOCK_ESYNC == GetInputClock() ) 180 bClock = GD24_EXT_SYNC; 181 182 m_pDspCommPage->dwSampleRate = SWAP( dwNewSampleRate ); 183 184 // 185 // Write the audio state to the comm page 186 // 187 m_pDspCommPage->byGDClockState = bClock; 188 189 // Send command to DSP 190 ClearHandshake(); 191 SendVector( DSP_VC_SET_GD_AUDIO_STATE ); 192 193 ECHO_DEBUGPRINTF( ("CDarla24DspCommObject::SetSampleRate: 0x%lx " 194 "clock %d\n", dwNewSampleRate, bClock) ); 195 196 return GetSampleRate(); 197 198} // DWORD CDarla24DspCommObject::SetSampleRate( DWORD dwNewSampleRate ) 199 200 201//=========================================================================== 202// 203// Set input clock 204// 205// Darla24 supports internal and Esync clock. 206// 207//=========================================================================== 208 209ECHOSTATUS CDarla24DspCommObject::SetInputClock(WORD wClock) 210{ 211 if ( (ECHO_CLOCK_INTERNAL != wClock) && 212 (ECHO_CLOCK_ESYNC != wClock)) 213 return ECHOSTATUS_CLOCK_NOT_SUPPORTED; 214 215 m_wInputClock = wClock; 216 217 return SetSampleRate( GetSampleRate() ); 218 219} // SetInputClock 220 221 222// **** Darla24DspCommObject.cpp **** 223