1 // **************************************************************************** 2 // 3 // EchoGalsXface.H 4 // 5 // Include file for interfacing with the CEchoGals generic driver class. 6 // 7 // Set editor tabs to 3 for your viewing pleasure. 8 // 9 // ---------------------------------------------------------------------------- 10 // 11 // This file is part of Echo Digital Audio's generic driver library. 12 // Copyright Echo Digital Audio Corporation (c) 1998 - 2005 13 // All rights reserved 14 // www.echoaudio.com 15 // 16 // This library is free software; you can redistribute it and/or 17 // modify it under the terms of the GNU Lesser General Public 18 // License as published by the Free Software Foundation; either 19 // version 2.1 of the License, or (at your option) any later version. 20 // 21 // This library is distributed in the hope that it will be useful, 22 // but WITHOUT ANY WARRANTY; without even the implied warranty of 23 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 24 // Lesser General Public License for more details. 25 // 26 // You should have received a copy of the GNU Lesser General Public 27 // License along with this library; if not, write to the Free Software 28 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 29 // 30 // **************************************************************************** 31 32 /* 33 34 35 36 Here's a block diagram of how most of the cards work: 37 38 +-----------+ 39 record | |<-------------------- Inputs 40 <-------| | | 41 PCI | Transport | | 42 bus | engine | \|/ 43 ------->| | +-------+ 44 play | |--->|monitor|-------> Outputs 45 +-----------+ | mixer | 46 +-------+ 47 48 The lines going to and from the PCI bus represent "pipes". A pipe performs 49 audio transport - moving audio data to and from buffers on the host via 50 bus mastering. 51 52 The inputs and outputs on the right represent input and output "busses." 53 A bus is a physical, real connection to the outside world. An example 54 of a bus would be the 1/4" analog connectors on the back of Layla or 55 an RCA S/PDIF connector. 56 57 For most cards, there is a one-to-one correspondence between outputs 58 and busses; that is, each individual pipe is hard-wired to a single bus. 59 60 Cards that work this way are Darla20, Gina20, Layla20, Darla24, Gina24, 61 Layla24, Mona, Indigo, Indigo io, and Indigo dj. 62 63 64 Mia has a feature called "virtual outputs." 65 66 67 +-----------+ 68 record | |<----------------------------- Inputs 69 <-------| | | 70 PCI | Transport | | 71 bus | engine | \|/ 72 ------->| | +------+ +-------+ 73 play | |-->|vmixer|-->|monitor|-------> Outputs 74 +-----------+ +------+ | mixer | 75 +-------+ 76 77 78 Obviously, the difference here is the box labeled "vmixer." Vmixer is 79 short for "virtual output mixer." For Mia, pipes are *not* hard-wired 80 to a single bus; the vmixer lets you mix any pipe to any bus in any 81 combination. 82 83 Note, however, that the left-hand side of the diagram is unchanged. 84 Transport works exactly the same way - the difference is in the mixer stage. 85 86 87 Pipes and busses are numbered starting at zero. 88 89 90 91 Pipe index 92 ========== 93 94 A number of calls in CEchoGals refer to a "pipe index". A pipe index is 95 a unique number for a pipe that unambiguously refers to a playback or record 96 pipe. Pipe indices are numbered starting with analog outputs, followed by 97 digital outputs, then analog inputs, then digital inputs. 98 99 Take Gina24 as an example: 100 101 Pipe index 102 103 0-7 Analog outputs 104 8-15 Digital outputs 105 16-17 Analog inputs 106 18-25 Digital inputs 107 108 109 You get the pipe index by calling CEchoGals::OpenAudio; the other transport 110 functions take the pipe index as a parameter. If you need a pipe index for 111 some other reason, use the handy MakePipeIndex method. 112 113 114 Some calls take a CChannelMask parameter; CChannelMask is a handy way to group 115 pipe indices. 116 117 118 119 Digital mode switch 120 =================== 121 122 Some cards (right now, Gina24, Layla24, and Mona) have a Digital Mode Switch 123 or DMS. Cards with a DMS can be set to one of three mutually exclusive 124 digital modes: S/PDIF RCA, S/PDIF optical, or ADAT optical. 125 126 This may create some confusion since ADAT optical is 8 channels wide and 127 S/PDIF is only two channels wide. Gina24, Layla24, and Mona handle this 128 by acting as if they always have 8 digital outs and ins. If you are in 129 either S/PDIF mode, the last 6 channels don't do anything - data sent 130 out these channels is thrown away and you will always record zeros. 131 132 Note that with Gina24, Layla24, and Mona, sample rates above 50 kHz are 133 only available if you have the card configured for S/PDIF optical or S/PDIF RCA. 134 135 136 137 Double speed mode 138 ================= 139 140 Some of the cards support 88.2 kHz and 96 kHz sampling (Darla24, Gina24, Layla24, 141 Mona, Mia, and Indigo). For these cards, the driver sometimes has to worry about 142 "double speed mode"; double speed mode applies whenever the sampling rate is above 143 50 kHz. 144 145 For instance, Mona and Layla24 support word clock sync. However, they actually 146 support two different word clock modes - single speed (below 50 kHz) and double 147 speed (above 50 kHz). The hardware detects if a single or double speed word clock 148 signal is present; the generic code uses that information to determine which mode 149 to use. 150 151 The generic code takes care of all this for you. 152 153 For hardware that supports 176.4 and 192 kHz, there is a corresponding quad speed 154 mode. 155 156 */ 157 158 159 // Prevent problems with multiple includes 160 #ifndef _ECHOGALSXFACE_ 161 #define _ECHOGALSXFACE_ 162 163 164 //*********************************************************************** 165 // 166 // PCI configuration space 167 // 168 //*********************************************************************** 169 170 // 171 // PCI vendor ID and device IDs for the hardware 172 // 173 #define VENDOR_ID 0x1057 174 #define DEVICE_ID_56301 0x1801 175 #define DEVICE_ID_56361 0x3410 176 #define SUBVENDOR_ID ((ULONG)0xECC0) 177 178 179 // 180 // Valid Echo PCI subsystem card IDs 181 // 182 #define DARLA 0x0010 183 #define GINA 0x0020 184 #define LAYLA 0x0030 185 #define DARLA24 0x0040 186 #define GINA24 0x0050 187 #define LAYLA24 0x0060 188 #define MONA 0x0070 189 #define MIA 0x0080 190 #define INDIGO 0x0090 191 #define INDIGO_IO 0x00a0 192 #define INDIGO_DJ 0x00b0 193 #define ECHO3G 0x0100 194 #define BASEPCI 0xfff0 195 196 197 //*********************************************************************** 198 // 199 // Array sizes and so forth 200 // 201 //*********************************************************************** 202 203 // 204 // Sizes 205 // 206 #define ECHO_MAXNAMELEN 128 // Max card name length 207 // (includes 0 terminator) 208 #define ECHO_MAXAUDIOINPUTS 32 // Max audio input channels 209 #define ECHO_MAXAUDIOOUTPUTS 32 // Max audio output channels 210 #define ECHO_MAXAUDIOPIPES 32 // Max number of input and output pipes 211 #define ECHO_MAXMIDIJACKS 1 // Max MIDI ports 212 #define ECHO_MTC_QUEUE_SZ 32 // Max MIDI time code input queue entries 213 214 // 215 // MIDI activity indicator timeout 216 // 217 #define MIDI_ACTIVITY_TIMEOUT_USEC 200000 218 219 220 //***************************************************************************** 221 // 222 // Clocks 223 // 224 //***************************************************************************** 225 226 // 227 // Clock numbers 228 // 229 #define ECHO_CLOCK_INTERNAL 0 230 #define ECHO_CLOCK_WORD 1 231 #define ECHO_CLOCK_SUPER 2 232 #define ECHO_CLOCK_SPDIF 3 233 #define ECHO_CLOCK_ADAT 4 234 #define ECHO_CLOCK_ESYNC 5 235 #define ECHO_CLOCK_ESYNC96 6 236 #define ECHO_CLOCK_MTC 7 237 #define ECHO_CLOCK_NONE 0xffff 238 239 // 240 // Clock bit numbers - used to report capabilities and whatever clocks 241 // are being detected dynamically. 242 // 243 #define ECHO_CLOCK_BIT_INTERNAL (1<<ECHO_CLOCK_INTERNAL) 244 #define ECHO_CLOCK_BIT_WORD (1<<ECHO_CLOCK_WORD) 245 #define ECHO_CLOCK_BIT_SUPER (1<<ECHO_CLOCK_SUPER) 246 #define ECHO_CLOCK_BIT_SPDIF (1<<ECHO_CLOCK_SPDIF) 247 #define ECHO_CLOCK_BIT_ADAT (1<<ECHO_CLOCK_ADAT) 248 #define ECHO_CLOCK_BIT_ESYNC (1<<ECHO_CLOCK_ESYNC) 249 #define ECHO_CLOCK_BIT_ESYNC96 (1<<ECHO_CLOCK_ESYNC96) 250 #define ECHO_CLOCK_BIT_MTC (1<<ECHO_CLOCK_MTC) 251 252 253 //***************************************************************************** 254 // 255 // Digital modes 256 // 257 //***************************************************************************** 258 259 // 260 // Digital modes for Mona, Layla24, and Gina24 261 // 262 #define DIGITAL_MODE_NONE 0xFF 263 #define DIGITAL_MODE_SPDIF_RCA 0 264 #define DIGITAL_MODE_SPDIF_OPTICAL 1 265 #define DIGITAL_MODE_ADAT 2 266 267 // 268 // Digital mode capability masks 269 // 270 #define ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_RCA (1<<DIGITAL_MODE_SPDIF_RCA) 271 #define ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_OPTICAL (1<<DIGITAL_MODE_SPDIF_OPTICAL) 272 #define ECHOCAPS_HAS_DIGITAL_MODE_ADAT (1<<DIGITAL_MODE_ADAT) 273 274 275 //***************************************************************************** 276 // 277 // Driver flags 278 // 279 //***************************************************************************** 280 281 // 282 // Note that some flags are read-only (look for ROFLAG as part of the name). 283 // The read-only flags are used to tell you what the card can do; you can't 284 // set or clear them. 285 // 286 // Some cards can only handle mono & stereo interleaved data in host audio buffers; that 287 // is, you may only specify 1 or 2 in the wPipeWidth field when you open a pipe for 288 // playing or recording. 289 // 290 // If the card has the super interleave flag set, that means that you can interleave 291 // by more than 2. For super interleave-capable cards, you can interleave by 1, 2, 292 // 4, 6, 8, 10, 12, 14, or 16. Note that you cannot interleave beyond the actual 293 // number of pipes on the card - if the card has 16 pipes and you open pipe 6, 294 // the maximum interleave would be 10. 295 // 296 // 297 // Gina24, Layla24, and Mona support digital input auto-mute. If the digital input 298 // auto-mute is enabled, the DSP will only enable the digital inputs if the card 299 // is syncing to a valid clock on the ADAT or S/PDIF inputs. 300 // 301 // If the auto-mute is disabled, the digital inputs are enabled regardless of 302 // what the input clock is set or what is connected. 303 // 304 // 305 306 #define ECHOGALS_FLAG_BADBOARD 0x0001 // Board could not be init or 307 // stopped responding 308 // (i.e. DSP crashed) 309 310 #define ECHOGALS_FLAG_SYNCH_WAVE 0x0004 // Used to enable wave device 311 // synchronization. When set, 312 // all open wave devices for 313 // a single task start when the 314 // start for the last channel 315 // is received. 316 317 #define ECHOGALS_FLAG_SAMPLE_RATE_LOCKED 0x0010 // Set true if the rate has been locked 318 319 #define ECHOGALS_ROFLAG_DIGITAL_IN_AUTOMUTE 0x4000 // Set if the console needs to handle 320 // the digital input auto-mute 321 322 #define ECHOGALS_ROFLAG_SUPER_INTERLEAVE_OK 0x8000 // Set if this card can handle super 323 // interleave 324 325 #define ECHOGALS_FLAG_WRITABLE_MASK 0x3fff 326 327 328 329 //***************************************************************************** 330 // 331 // ECHOSTATUS return type - most of the generic driver functions 332 // return an ECHOSTATUS value 333 // 334 //***************************************************************************** 335 336 typedef unsigned long ECHOSTATUS; 337 338 // 339 // Return status values 340 // 341 // Changes here require a change in pStatusStrs in CEchoGals.cpp 342 // 343 #define ECHOSTATUS_OK 0x00 344 #define ECHOSTATUS_FIRST 0x00 345 #define ECHOSTATUS_BAD_FORMAT 0x01 346 #define ECHOSTATUS_BAD_BUFFER_SIZE 0x02 347 #define ECHOSTATUS_CANT_OPEN 0x03 348 #define ECHOSTATUS_CANT_CLOSE 0x04 349 #define ECHOSTATUS_CHANNEL_NOT_OPEN 0x05 350 #define ECHOSTATUS_BUSY 0x06 351 #define ECHOSTATUS_BAD_LEVEL 0x07 352 #define ECHOSTATUS_NO_MIDI 0x08 353 #define ECHOSTATUS_CLOCK_NOT_SUPPORTED 0x09 354 #define ECHOSTATUS_CLOCK_NOT_AVAILABLE 0x0A 355 #define ECHOSTATUS_BAD_CARDID 0x0B 356 #define ECHOSTATUS_NOT_SUPPORTED 0x0C 357 #define ECHOSTATUS_BAD_NOTIFY_SIZE 0x0D 358 #define ECHOSTATUS_INVALID_PARAM 0x0E 359 #define ECHOSTATUS_NO_MEM 0x0F 360 #define ECHOSTATUS_NOT_SHAREABLE 0x10 361 #define ECHOSTATUS_FIRMWARE_LOADED 0x11 362 #define ECHOSTATUS_DSP_DEAD 0x12 363 #define ECHOSTATUS_DSP_TIMEOUT 0x13 364 #define ECHOSTATUS_INVALID_CHANNEL 0x14 365 #define ECHOSTATUS_CHANNEL_ALREADY_OPEN 0x15 366 #define ECHOSTATUS_DUCK_FULL 0x16 367 #define ECHOSTATUS_INVALID_INDEX 0x17 368 #define ECHOSTATUS_BAD_CARD_NAME 0x18 369 #define ECHOSTATUS_IRQ_NOT_OURS 0x19 370 #define ECHOSTATUS_NO_DATA 0x1E 371 #define ECHOSTATUS_BUFFER_OVERFLOW 0x1F 372 #define ECHOSTATUS_OPERATION_CANCELED 0x20 373 #define ECHOSTATUS_EVENT_NOT_OPEN 0x21 374 #define ECHOSTATUS_ASIC_NOT_LOADED 0x22 375 #define ECHOSTATUS_DIGITAL_MODE_NOT_SUPPORTED 0x23 376 #define ECHOSTATUS_RESERVED 0x24 377 #define ECHOSTATUS_BAD_COOKIE 0x25 378 #define ECHOSTATUS_MIXER_DISABLED 0x26 379 #define ECHOSTATUS_NO_SUPER_INTERLEAVE 0x27 380 #define ECHOSTATUS_DUCK_NOT_WRAPPED 0x28 381 #define ECHOSTATUS_NO_3G_BOX 0x29 382 #define ECHOSTATUS_LAST 0x2a 383 384 385 //***************************************************************************** 386 // 387 // ECHOGALS_AUDIOFORMAT describes the audio buffer format for a pipe 388 // 389 // 390 // byMonoToStereo is used to resolve an ambiguity when wDataInterleave is set 391 // to one. Say you're writing a Windows driver and someone tells you to play mono data; 392 // what they really mean is that they want the same signal sent out of both left 393 // and right channels. 394 // 395 // Now, say you're writing an ASIO driver and the ASIO host wants mono data 396 // sent out of a single output only. byMonoToStereo is a flag used to resolve 397 // this; if byMonoToStereo is non-zero, then the same signal is sent out both channels. 398 // If byMonoToStereo is zero, then only one output channel is used. 399 // 400 //***************************************************************************** 401 402 typedef struct tECHOGALS_AUDIOFORMAT 403 { 404 WORD wDataInterleave; // How the data is arranged in memory 405 // Mono = 1, stereo = 2 406 WORD wBitsPerSample; // 8, 16, 32 407 BYTE byMonoToStereo; // Only used if wDataInterleave is 1 and 408 // if this is an output pipe. 409 BYTE byDataAreBigEndian; // 1 = Apple, 0 = Intel 410 } ECHOGALS_AUDIOFORMAT, * PECHOGALS_AUDIOFORMAT; 411 412 413 // 414 // All kinds of peak and VU meters. Only cards with virtual outputs will 415 // have output pipe meters. 416 // 417 // All data are scaled integers in units of dB X 256 418 // 419 typedef struct tECHOGALS_METERS 420 { 421 INT32 iNumPipesOut; // These numbers only apply in the context of this structure; 422 INT32 iNumPipesIn; // they indicate the number of entries in each of the arrays. 423 INT32 iNumBussesOut; 424 INT32 iNumBussesIn; 425 426 INT32 iPipeOutVU[ECHO_MAXAUDIOOUTPUTS]; 427 INT32 iPipeOutPeak[ECHO_MAXAUDIOOUTPUTS]; 428 429 INT32 iPipeInVU[ECHO_MAXAUDIOINPUTS]; 430 INT32 iPipeInPeak[ECHO_MAXAUDIOINPUTS]; 431 432 INT32 iBusOutVU[ECHO_MAXAUDIOOUTPUTS]; 433 INT32 iBusOutPeak[ECHO_MAXAUDIOOUTPUTS]; 434 435 INT32 iBusInVU[ECHO_MAXAUDIOINPUTS]; 436 INT32 iBusInPeak[ECHO_MAXAUDIOINPUTS]; 437 } ECHOGALS_METERS, * PECHOGALS_METERS; 438 439 // 440 // ECHOGALS_AUDIO_PIPE describes a single pipe. 441 // 442 // Note that nPipe is *not* a pipe index; it's just the number for the pipe. 443 // This is meant to make life easier for you, the driver developer; the code 444 // is meant to be set up that you don't have to go around calculating the 445 // pipe index. 446 // 447 // In other words, if you want to specify the first input pipe, do this: 448 // 449 // nPipe = 0 450 // bIsInput = TRUE 451 // 452 // Don't set nPipe equal to the number of output pipes, since it's not a pipe 453 // index. 454 // 455 456 typedef struct tECHOGALS_AUDIO_PIPE 457 { 458 WORD nPipe; // Pipe number (not a pipe index!) 459 BOOL bIsInput; // Set TRUE for input pipe, FALSE for output 460 WORD wInterleave; // Interleave factor for this pipe 461 // Mono = 1, stereo = 2, 5.1 surround = 6 462 } ECHOGALS_AUDIO_PIPE, * PECHOGALS_AUDIO_PIPE; 463 464 465 // 466 // This structure is used to open a pipe and reserve it for your exclusive use. 467 // 468 // Note that if you set wInterleave in the ECHOGALS_AUDIO_PIPE sub-struct 469 // to greater than one, you are actually reserving more than one pipe; in fact 470 // you are reserving the pipe specified by the nPipe field as well as 471 // the next wInterleave-1 pipes. 472 // 473 // ProcessId is used in specific situations in the Windows driver where 474 // several pipes are opened as different devices, but you want them all 475 // to start synchronously. The driver attempts to start the pipes in groups 476 // based on the ProcessId field. 477 // 478 // If you don't want to hassle with this, just set ProcessId to NULL; the 479 // generic code will then ignore the ProcessId. 480 // 481 // ProcessId is also ignored if you clear the ECHOGALS_FLAG_SYNCH_WAVE flag. 482 // 483 484 typedef struct tECHOGALS_OPENAUDIOPARAMETERS 485 { 486 ECHOGALS_AUDIO_PIPE Pipe; // Pipe descriptor 487 BOOL bIsCyclic; // Set TRUE if using circular buffers 488 // Set FALSE for linked list of use 489 // once and discard buffers 490 PVOID ProcessId; // Caller process ID for implementing 491 // synchronous wave start 492 } ECHOGALS_OPENAUDIOPARAMETERS, * PECHOGALS_OPENAUDIOPARAMETERS; 493 494 495 // 496 // Yes, it's the world's simplest structure. 497 // 498 typedef struct tECHOGALS_CLOSEAUDIOPARAMETERS 499 { 500 WORD wPipeIndex; 501 } ECHOGALS_CLOSEAUDIOPARAMETERS, * PECHOGALS_CLOSEAUDIOPARAMETERS; 502 503 // 504 // Context info for MIDI input clients 505 // 506 typedef struct tECHOGALS_MIDI_IN_CONTEXT 507 { 508 BOOL fOpen; 509 DWORD dwDrain; 510 } ECHOGALS_MIDI_IN_CONTEXT; 511 512 // 513 // One nifty feature is that the DSP is constantly writing the DMA position 514 // for each pipe to the comm page without the driver having to do anything. 515 // You can therefore obtain a pointer to this location and directly read 516 // the position from anywhere. 517 // 518 // The pointer returned should be treated as a read-only pointer and is 519 // kind of dangerous, since it points directly into the driver. 520 // 521 // Note that the value pointed to by pdwPosition will be in little-endian 522 // format. 523 // 524 // The value pointed to by pdwPosition is the number of bytes transported 525 // by the DSP; it will constantly increase until it hits the 32-bit boundary 526 // and then wraps around. It does *not* represent the offset into a circular 527 // DMA buffer; this value is treated identically for cyclic and non-cyclic 528 // buffer schemes. 529 // 530 typedef struct tECHOGALS_POSITION 531 { 532 PDWORD pdwPosition; 533 } ECHOGALS_POSITION, * PECHOGALS_POSITION; 534 535 536 /* 537 538 ECHOGALS_CAPS 539 540 This structure is used to differentiate one card from another. 541 542 szName Zero-terinated char string; unique name for 543 this card. 544 545 wCardType One of the DARLA, GINA, etc. card IDs at the 546 top of this header file 547 548 dwOutClockTypes This is a bit mask describing all the different 549 output clock types that can be set. If the bit mask 550 is zero, then the output clock cannot be set on this 551 card. The bits will be one of the ECHO_CLOCK_BIT_??? 552 defines above. 553 554 dwInClockTypes Again, a bit mask describing what this card can 555 sync to. This mask is fixed, regardless of what is 556 or is not currently connected to the hardware. Again, 557 this uses the ECHO_CLOCK_BIT_??? defines. 558 559 dwDigitalModes Some cards (right now, Gina24, Layla24 and Mona) have 560 what we call a Digital Mode Switch or DMS. 561 Use the ECHOCAPS_HAS_DIGITAL_MODE_??? defines to determine 562 which digital modes this card supports. 563 564 fHasVmixer Boolean flag- if this field is non-zero, then this card 565 supports virtual outputs. 566 567 wNumPipesOut Should be self-explanatory, given the definitions of 568 wNumPipesIn pipes and busses above. Note that these are all in terms 569 wNumBussesOut of mono pipes and busses. 570 wNumBussesIn 571 572 wFirstDigitalBusOut Gives you the number of, well, the first bus that 573 goes out an S/PDIF or ADAT output. If this card has 574 no digital outputs, wFirstDigitalBusOut will be equal 575 to wNumBussesOut. This may seem strange, but remember 576 that the busses are numbered starting at zero and that 577 valid bus numbers therefore range from zero to 578 (wNumBussesOut - 1). Doing it this way actually 579 turned out to simplify writing consoles and so forth. 580 581 wFirstDigitalBusIn Just like the last one, but for inputs 582 583 wFirstDigitalPipeOut Gives you the number of the first pipe that is connected 584 to a digital output bus. If this card has no digital output 585 busses, this will be equal to wNumPipesOut. Cards with 586 virtual outputs will always have this member set equal 587 to wNumPipesOut. 588 589 wFirstDigitalPipeIn Again, just like wFirstDigitalPipeOut, but for inputs. 590 591 dwPipeOutCaps[] Array of bit fields with information about each output 592 pipe. This tells you what controls are available for 593 each output pipe, as well as whether or not this pipe 594 is connected to a digital output. Use the ECHOCAPS_??? 595 bits above to parse this bit field. 596 597 dwPipeInCaps[] More arrays for the other busses and pipes; works 598 dwBusOutCaps[] just like dwPipeOutCaps. 599 dwBusInCaps[] 600 601 wNumMidiOut Number of MIDI inputs and outputs on this card. 602 wNumMidiIn 603 604 */ 605 606 enum 607 { 608 ECHOCAPS_GAIN = 0x00000001, 609 ECHOCAPS_MUTE = 0x00000004, 610 ECHOCAPS_PAN = 0x00000010, 611 ECHOCAPS_PEAK_METER = 0x00000020, 612 ECHOCAPS_VU_METER = 0x00000040, 613 ECHOCAPS_NOMINAL_LEVEL = 0x00000080, // aka +4/-10 614 ECHOCAPS_PHANTOM_POWER = 0x20000000, 615 ECHOCAPS_DUMMY = 0x40000000, // Used for Indigo; indicates 616 // a dummy input or output 617 ECHOCAPS_DIGITAL = 0x80000000 // S/PDIF or ADAT connection 618 }; 619 620 621 typedef struct tECHOGALS_CAPS 622 { 623 CHAR szName[ ECHO_MAXNAMELEN ]; // Name of this card 624 WORD wCardType; // Type of card 625 DWORD dwOutClockTypes; // Types of output clocks 626 DWORD dwInClockTypes; // Types of input clocks 627 DWORD dwDigitalModes; // Digital modes supported 628 BOOL fHasVmixer; 629 630 WORD wNumPipesOut; 631 WORD wNumPipesIn; 632 WORD wNumBussesOut; 633 WORD wNumBussesIn; 634 635 WORD wFirstDigitalBusOut; // Equal to wNumBussesOut if this card has 636 // no digital output busses 637 638 WORD wFirstDigitalBusIn; // Equal to wNumBussesIn if this card has 639 // no digital input busses 640 641 WORD wFirstDigitalPipeOut; // Works just like wFirstDigitalBus... above 642 WORD wFirstDigitalPipeIn; 643 644 DWORD dwPipeOutCaps[ ECHO_MAXAUDIOOUTPUTS ]; 645 DWORD dwPipeInCaps[ ECHO_MAXAUDIOINPUTS ]; 646 DWORD dwBusOutCaps[ ECHO_MAXAUDIOOUTPUTS ]; 647 DWORD dwBusInCaps[ ECHO_MAXAUDIOINPUTS ]; 648 649 WORD wNumMidiOut; // Number of MIDI out jacks 650 WORD wNumMidiIn; // Number of MIDI in jacks 651 } ECHOGALS_CAPS, *PECHOGALS_CAPS; 652 653 654 /* 655 656 Echo3G box types 657 658 */ 659 660 // 661 // 3G external box types 662 // 663 #define GINA3G 0x00 664 #define LAYLA3G 0x10 665 #define NO3GBOX 0xffff 666 667 668 #endif // _ECHOGALSXFACE_ 669 670 671 // end file EchoGalsXface.h 672