text: /*
  	File:EnzianDevice.h
  
  	Version: 1.0.1, ma++ ingalls
      
  	Copyright (c) 2004 Cycling '74
  
  	Permission is hereby granted, free of charge, to any person obtaining a copy
  	of this software and associated documentation files (the "Software"), to deal
  	in the Software without restriction, including without limitation the rights
  	to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  	copies of the Software, and to permit persons to whom the Software is
  	furnished to do so, subject to the following conditions:
  
  	The above copyright notice and this permission notice shall be included in
  	all copies or substantial portions of the Software.
  
  	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  	OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  	THE SOFTWARE.
  */
  
  #ifndef _SAMPLEAUDIODEVICE_H
  #define _SAMPLEAUDIODEVICE_H
  
  #include <IOKit/audio/IOAudioDevice.h>
  
  #define AUDIO_ENGINES_KEY				"AudioEngines"
  #define DESCRIPTION_KEY					"Description"
  #define BLOCK_SIZE_KEY					"BlockSize"
  #define NUM_BLOCKS_KEY					"NumBlocks"
  #define NUM_STREAMS_KEY					"NumStreams"
  #define FORMATS_KEY						"Formats"
  #define SAMPLE_RATES_KEY				"SampleRates"
  #define SEPARATE_STREAM_BUFFERS_KEY		"SeparateStreamBuffers"
  #define SEPARATE_INPUT_BUFFERS_KEY		"SeparateInputBuffers"
  #define EnzianDevice				rocks_mntn_driver_EnzianDevice
  
  #define NUM_CHANS 128
  
  class EnzianEngine;
  
  class EnzianDevice : public IOAudioDevice
  {
      OSDeclareDefaultStructors(EnzianDevice)
      friend class EnzianEngine;
      
  	// class members
  	
      static const SInt32 kVolumeMax;
      static const SInt32 kGainMax;
  
  	
  	// instance members
  
      SInt32 mVolume[NUM_CHANS+1];
      SInt32 mMuteOut[NUM_CHANS+1];
      SInt32 mMuteIn[NUM_CHANS+1];
      SInt32 mGain[NUM_CHANS+1];
  
  	
  	// methods
  	
      virtual bool initHardware(IOService *provider);
      virtual bool createAudioEngines();
      virtual bool initControls(EnzianEngine *audioEngine);
      
      static  IOReturn volumeChangeHandler(IOService *target, IOAudioControl *volumeControl, SInt32 oldValue, SInt32 newValue);
      virtual IOReturn volumeChanged(IOAudioControl *volumeControl, SInt32 oldValue, SInt32 newValue);
      
      static  IOReturn outputMuteChangeHandler(IOService *target, IOAudioControl *muteControl, SInt32 oldValue, SInt32 newValue);
      virtual IOReturn outputMuteChanged(IOAudioControl *muteControl, SInt32 oldValue, SInt32 newValue);
  
      static  IOReturn gainChangeHandler(IOService *target, IOAudioControl *gainControl, SInt32 oldValue, SInt32 newValue);
      virtual IOReturn gainChanged(IOAudioControl *gainControl, SInt32 oldValue, SInt32 newValue);
      
      static  IOReturn inputMuteChangeHandler(IOService *target, IOAudioControl *muteControl, SInt32 oldValue, SInt32 newValue);
      virtual IOReturn inputMuteChanged(IOAudioControl *muteControl, SInt32 oldValue, SInt32 newValue);
      
  };
  
  #endif // _SAMPLEAUDIODEVICE_H
  