⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wmaudio.h

📁 WM9713 audio codec driver for WinCE 5.0
💻 H
📖 第 1 页 / 共 5 页
字号:
/*-----------------------------------------------------------------------------
 * Copyright (c) Wolfson Microelectronics plc.  All rights reserved.
 *
 * This software as well as any related documentation is furnished under 
 * license and may only be used or copied in accordance with the terms of the 
 * license. The information in this file is furnished for informational use 
 * only, is subject to change without notice, and should not be construed as 
 * a commitment by Wolfson Microelectronics plc. Wolfson Microelectronics plc
 * assumes no responsibility or liability for any errors or inaccuracies that
 * may appear in this document or any software that may be provided in
 * association with this document. 
 *
 * Except as permitted by such license, no part of this document may be 
 * reproduced, stored in a retrieval system, or transmitted in any form or by 
 * any means without the express written consent of Wolfson Microelectronics plc. 
 *
 * $Id: WMAudio.h 2819 2006-03-27 08:03:10Z fb $
 *
 * This file contains platform-independent routines for controlling
 * audio on Wolfson codecs.
 *
 * Warning:
 *  This driver is specifically written for Wolfson Codecs. It is not a 
 *  general CODEC device driver.
 *
 *---------------------------------------------------------------------------*/
#ifndef __WMAUDIO_H__
#define __WMAUDIO_H__

/*
 * Include files
 */
#include "WMWaveGen.h"
#include "WMPower.h"
#include "WMPlatform_OS.h"

/*
 * Definitions
 */

/*
 * Audio devices.
 */
typedef unsigned int WMAUDIO_DEVICE;
#define WMAUDIO_AC97_PRIMARY        1
#define WMAUDIO AC97_SECONDARY      2
#define WMAUDIO_I2S                 3

/*
 * Audio direction.
 */
#define WMAUDIO_OUT                 1
#define WMAUDIO_IN                  2

/*
 * Stream IDs
 */
typedef unsigned short WM_STREAM_ID;

#define WM_STREAM_HIFI_OUT          1
#define WM_STREAM_HIFI_IN           2
#define WM_STREAM_MONO_OUT          3
#define WM_STREAM_VOICE_OUT         4
#define WM_STREAM_VOICE_IN          5
#define WM_MIN_STREAM               WM_STREAM_HIFI_OUT
#define WM_MAX_STREAM               WM_STREAM_VOICE_IN
#define WM_STREAM_DEFAULT_OUTPUT    101
#define WM_STREAM_DEFAULT_INPUT     102
#define WM_STREAM_INVALID_STREAM    ((WM_STREAM_ID) -1)

/*
 * Various tests on the streams.
 */
#define WM_IS_VALID_STREAM( _stream )                       \
	( WM_IS_INPUT_STREAM( _stream )                     ||  \
	  WM_IS_OUTPUT_STREAM( _stream ) )
#define WM_IS_INPUT_STREAM( _stream )                       \
	( WM_STREAM_HIFI_IN == _stream                      ||  \
	  ( WM_VOICE && WM_STREAM_VOICE_IN == _stream )     ||  \
	  WM_STREAM_DEFAULT_INPUT == _stream )
#define WM_IS_OUTPUT_STREAM( _stream )                      \
	( WM_STREAM_HIFI_OUT == _stream                     ||  \
	  ( WM_MONODAC && WM_STREAM_MONO_OUT == _stream )   ||  \
	  ( WM_VOICE && WM_STREAM_VOICE_OUT == _stream )    ||  \
	  WM_STREAM_DEFAULT_OUTPUT == _stream )
#define WM_IS_DEFAULT_STREAM( _stream )                     \
	( WM_STREAM_DEFAULT_INPUT == _stream                ||  \
	  WM_STREAM_DEFAULT_OUTPUT == _stream )
#define WM_IS_HIFI_STREAM( _stream )                        \
	( WM_STREAM_HIFI_IN == _stream                      ||  \
	  WM_STREAM_HIFI_OUT == _stream )
#define WM_IS_VOICE_STREAM( _stream )                       \
	( WM_VOICE &&                                           \
	  ( WM_STREAM_VOICE_IN == _stream                   ||  \
		WM_STREAM_VOICE_OUT == _stream ) )      
#define WM_IS_MONO_STREAM( _stream )                        \
	( WM_MONODAC && WM_STREAM_MONO_OUT == _stream )

/*
 * A stream handle type, returned from WMAudioOpenStream and passed into
 * all subsequent stream function calls.
 */
typedef WM_HANDLE   WM_STREAM_HANDLE;

/*
 * Sample rates
 */
typedef unsigned int WM_SAMPLE_RATE;
#define WM_SAMPLE_RATE_UNKNOWN      0
#define WM_SAMPLE_RATE_8K           8000    /* 0x1F40 */
#define WM_SAMPLE_RATE_11K025       11025   /* 0x2B11 */
#define WM_SAMPLE_RATE_12K          12000   /* 0x2EE0 */
#define WM_SAMPLE_RATE_16K          16000   /* 0x3E80 */
#define WM_SAMPLE_RATE_22K05        22050   /* 0x5622 */
#define WM_SAMPLE_RATE_24K          24000   /* 0x5DC0 */
#define WM_SAMPLE_RATE_32K          32000   /* 0x7D00 */
#define WM_SAMPLE_RATE_44K1         44100   /* 0xAC44 */
#define WM_SAMPLE_RATE_48K          48000   /* 0xBB80 */
#define WM_SAMPLE_RATE_88K2         88200   /* 0x15888 */
#define WM_SAMPLE_RATE_96K          96000   /* 0x17700 */

/*
 * The various signals which can be controlled into, inside and out from
 * the codec.
 */
#define WM_AUDIO_INPUT_BASE				0x0000	/* This value CANNOT change */
#define WM_AUDIO_ANALOGUE_INPUT_BASE	WM_AUDIO_INPUT_BASE
#define WM_AUDIO_DIGITAL_OUTPUT_BASE	0x20	/* This value CANNOT change */
#define WM_AUDIO_ANALOGUE_OUTPUT_BASE	0x30	/* This value CANNOT change */
#define WM_AUDIO_DIGITAL_INPUT_BASE	    0x50	/* This value CANNOT change */
#define WM_AUDIO_MIXER_MUX_BASE			0x60	/* This value CANNOT change */
typedef enum tagWM_AUDIO_SIGNAL
{
	/* Analogue inputs - i.e. signal sources */
	WM_AUDIO_LINEIN					= WM_AUDIO_ANALOGUE_INPUT_BASE,
	WM_AUDIO_MONOIN					= (WM_AUDIO_ANALOGUE_INPUT_BASE+1),
	WM_AUDIO_PHONEIN				= WM_AUDIO_MONOIN,
	WM_AUDIO_MIC					= (WM_AUDIO_ANALOGUE_INPUT_BASE+2),
	WM_AUDIO_MIC1					= WM_AUDIO_MIC,
	WM_AUDIO_MIC2					= (WM_AUDIO_ANALOGUE_INPUT_BASE+3),
	WM_AUDIO_MIC2A					= (WM_AUDIO_ANALOGUE_INPUT_BASE+4),
	WM_AUDIO_MIC2B					= (WM_AUDIO_ANALOGUE_INPUT_BASE+5),
	WM_AUDIO_MIC2BTOA				= (WM_AUDIO_ANALOGUE_INPUT_BASE+6),		/* Mic2B => Pre-Amp A */
	WM_AUDIO_CD						= (WM_AUDIO_ANALOGUE_INPUT_BASE+8),
	WM_AUDIO_VIDEO					= (WM_AUDIO_ANALOGUE_INPUT_BASE+9),
	WM_AUDIO_AUXIN					= (WM_AUDIO_ANALOGUE_INPUT_BASE+10),
	WM_AUDIO_PCBEEP					= (WM_AUDIO_ANALOGUE_INPUT_BASE+11),
	/* The xx_END values are the only ones allowed to change */
	WM_AUDIO_ANALOGUE_INPUT_END		= WM_AUDIO_PCBEEP,


	/* Digital outputs - i.e. signal sources */
	WM_AUDIO_HIFI_DAC				= WM_AUDIO_DIGITAL_OUTPUT_BASE,
    WM_AUDIO_STEREO_DAC             = WM_AUDIO_HIFI_DAC,                    /* Synonym kept for backwards compatibility */
	WM_AUDIO_MONO_DAC				= (WM_AUDIO_DIGITAL_OUTPUT_BASE+1),
	WM_AUDIO_VOICE_DAC				= (WM_AUDIO_DIGITAL_OUTPUT_BASE+2),
	/* The xx_END values are the only ones allowed to change */
	WM_AUDIO_DIGITAL_OUTPUT_END		= WM_AUDIO_VOICE_DAC,

	/* Analogue outputs - i.e. signal destinations */
	WM_AUDIO_SPEAKER				= WM_AUDIO_ANALOGUE_OUTPUT_BASE,    
	WM_AUDIO_LINEOUT				= WM_AUDIO_SPEAKER,                     /* LINEOUT used to drive a speaker, Synonym kept for backwards compatibility */
	WM_AUDIO_HEADPHONE				= (WM_AUDIO_ANALOGUE_OUTPUT_BASE+1),
	WM_AUDIO_MONOOUT				= (WM_AUDIO_ANALOGUE_OUTPUT_BASE+2),
	WM_AUDIO_PHONEOUT				= WM_AUDIO_MONOOUT,
    WM_AUDIO_OUT1                   = WM_AUDIO_HEADPHONE,
    WM_AUDIO_OUT2                   = WM_AUDIO_SPEAKER,
	WM_AUDIO_OUT3					= (WM_AUDIO_ANALOGUE_OUTPUT_BASE+3),
	WM_AUDIO_OUT4					= (WM_AUDIO_ANALOGUE_OUTPUT_BASE+4),
	/* The xx_END values are the only ones allowed to change */
	WM_AUDIO_ANALOGUE_OUTPUT_END	= WM_AUDIO_OUT4,

   /* Digital input - i.e. signal destination */
	WM_AUDIO_HIFI_ADC				= WM_AUDIO_DIGITAL_INPUT_BASE,
    WM_AUDIO_STEREO_ADC             = WM_AUDIO_HIFI_ADC,                    /* Synonym kept for backwards compatibility */
	WM_AUDIO_VOICE_ADC				= (WM_AUDIO_DIGITAL_INPUT_BASE+1),
	/* The xx_END values are the only ones allowed to change */
	WM_AUDIO_DIGITAL_INPUT_END		= WM_AUDIO_VOICE_ADC,

	/* Mixers and Muxes */
	WM_AUDIO_HEADPHONE_MIXER		= WM_AUDIO_MIXER_MUX_BASE,
	WM_AUDIO_HEADPHONE_MIXER_MONO	= (WM_AUDIO_MIXER_MUX_BASE+1),
	WM_AUDIO_PHONE_MIXER			= (WM_AUDIO_MIXER_MUX_BASE+2),
	WM_AUDIO_SPEAKER_MIXER			= (WM_AUDIO_MIXER_MUX_BASE+3),
	WM_AUDIO_MONO_MIXER				= (WM_AUDIO_MIXER_MUX_BASE+4),
	WM_AUDIO_FRONT_MIXER			= (WM_AUDIO_MIXER_MUX_BASE+5),
	/* The xx_END values are the only ones allowed to change */
	WM_AUDIO_MIXER_MUX_END			= WM_AUDIO_FRONT_MIXER,

	/* A value for Don't care / Don't change signals */
	WM_AUDIO_IGNORE					= 0xFFFE,

	/* A value for unknown signals */
	WM_AUDIO_SIGNAL_UNKNOWN			= 0xFFFF
} WM_AUDIO_SIGNAL;

/* Ensure that signal IDs do not overlap */
#if (WM_AUDIO_ANALOGUE_INPUT_BASE  >= WM_AUDIO_DIGITAL_OUTPUT_BASE  ||	\
	 WM_AUDIO_DIGITAL_OUTPUT_BASE  >= WM_AUDIO_ANALOGUE_OUTPUT_BASE ||	\
	 WM_AUDIO_ANALOGUE_OUTPUT_BASE >= WM_AUDIO_DIGITAL_INPUT_BASE   ||	\
	 WM_AUDIO_DIGITAL_INPUT_BASE   >= WM_AUDIO_MIXER_MUX_BASE )

#error The Signal IDs overlap please correct

#endif /* Signal overlap check */


/* Check to see if the given signal is an ignorable signal */
#define WM_SIGNAL_IS_IGNORE( _signal ) (WM_AUDIO_IGNORE == (_signal) )

/* Check to see if the given signal is a Microphone signal */
#define WM_SIGNAL_IS_MIC( _signal )								\
							(WM_AUDIO_MIC      == (_signal) ||	\
							 WM_AUDIO_MIC1     == (_signal) ||	\
							 WM_AUDIO_MIC2     == (_signal) ||	\
							 WM_AUDIO_MIC2A    == (_signal) ||	\
							 WM_AUDIO_MIC2B    == (_signal) ||	\
							 WM_AUDIO_MIC2BTOA == (_signal) 	\
							)

/* Check to see if the given Mic signal used MicA pre-amp and/or PGA */
#define WM_MIC_SIGNAL_USES_A( _signal )							\
							(WM_AUDIO_MIC1     == (_signal) ||	\
							 WM_AUDIO_MIC2A    == (_signal) ||	\
							 WM_AUDIO_MIC2BTOA == (_signal) 	\
							)

/* Check to see if the given signal is only a Microphone signal */
#define WM_SIGNAL_IS_LINEIN( _signal )							\
							(WM_AUDIO_LINEIN      == (_signal) 	\
							)

/* Check to see if the signal is a recordable signal */
#define WM_SIGNAL_IS_RECORDABLE( _signal )										\
							( (WM_AUDIO_ANALOGUE_INPUT_BASE <= (_signal) &&		\
							   WM_AUDIO_ANALOGUE_INPUT_END >= (_signal) ) ||	\
							  (WM_AUDIO_MIXER_MUX_BASE <= (_signal) &&			\
							   WM_AUDIO_MIXER_MUX_END >= (_signal) )			\
							)

/* Check to see if the signal is a playable  output signal */
#define WM_SIGNAL_IS_OUTPUT( _signal )											\
							( (WM_AUDIO_ANALOGUE_OUTPUT_BASE <= (_signal) &&	\
							   WM_AUDIO_ANALOGUE_OUTPUT_END >= (_signal) ) ||	\
							  (WM_AUDIO_MIXER_MUX_BASE <= (_signal) &&			\
							   WM_AUDIO_MIXER_MUX_END >= (_signal) )			\
							)

/* Check to see if the signal is a recordablelis signal */
#define WM_SIGNAL_IS_VALID( _signal )											\
						  ( (WM_AUDIO_ANALOGUE_INPUT_BASE <= (_signal) &&		\
							 WM_AUDIO_ANALOGUE_INPUT_END >= (_signal) ) ||		\
							(WM_AUDIO_DIGITAL_INPUT_BASE <= (_signal) &&        \
                             WM_AUDIO_DIGITAL_INPUT_END >= (_signal) ) ||       \
                            (WM_AUDIO_MIXER_MUX_BASE <= (_signal) &&			\
							 WM_AUDIO_MIXER_MUX_END >= (_signal) ) || 			\
							(WM_AUDIO_ANALOGUE_OUTPUT_BASE <= (_signal) &&      \
                             WM_AUDIO_ANALOGUE_OUTPUT_END >= (_signal) ) ||     \
                            (WM_AUDIO_DIGITAL_OUTPUT_BASE <= (_signal) &&       \
                             WM_AUDIO_DIGITAL_OUTPUT_END >= (_signal) ) ||      \
                            (WM_AUDIO_IGNORE == (_signal) )						\
						  )

/* Change the stereo signal info to the [depricated] channel info */
#define WM_SIGNAL_TO_CHANNEL( _signalL, _signalR )                          \
							( ( (WM_AUDIO_IGNORE == (_signalL)) ? WM_CHANNEL_NONE : WM_CHANNEL_LEFT ) |   \
							  ( (WM_AUDIO_IGNORE == (_signalR)) ? WM_CHANNEL_NONE : WM_CHANNEL_RIGHT ) )

/* 
 * ADC channel defines 
 */
typedef unsigned int WM_AUDIO_CHANNELS;
/* The  ADC channel that are available / understood */
#define WM_CHANNEL_NONE                 0x00
#define WM_CHANNEL_MONO                 0x01
#define WM_CHANNEL_LEFT                 0x02
#define WM_CHANNEL_RIGHT                0x04
#define WM_CHANNEL_STEREO               ( WM_CHANNEL_LEFT | WM_CHANNEL_RIGHT )
#define WM_CHANNEL_ALL                  0xFF

/*
 * Signal level definitions for the advanced functions which give precise
 * level control.
 */
#define WM_SIGNAL_LEVEL_1DB             16
#define WM_SIGNAL_LEVEL( _dB )          ((int)((_dB)*WM_SIGNAL_LEVEL_1DB))
#define WM_SIGNAL_LEVEL_AC97( _level )  ((int)((_level)*(int)(WM_SIGNAL_LEVEL_1DB)*1.5))
#define WM_SIGNAL_LEVEL_TO_DB( _level ) ((_level)/WM_SIGNAL_LEVEL_1DB)

/*
 * Interface definitions.
 */
typedef enum tagWM_AUDIO_INTERFACE
{
    WM_AUDIOIF_NONE = 0,
	WM_AUDIOIF_HIFI = 1,
	WM_AUDIOIF_VOICE,
    WM_AUDIOIF_MONO
} WM_AUDIO_INTERFACE;

typedef enum tagWM_AUDIOIF_FORMAT
{
	WM_AUDIOIF_I2S = 1,
	WM_AUDIOIF_LEFT_JUSTIFY,
	WM_AUDIOIF_RIGHT_JUSTIFY,
	WM_AUDIOIF_DSP_MODE_A,
	WM_AUDIOIF_DSP_MODE_B
} WM_AUDIOIF_FORMAT;

typedef enum tagWM_AUDIOIF_WIDTH

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -