📄 wmaudio.h
字号:
/*-----------------------------------------------------------------------------
* 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 4254 2006-10-26 11:04:01Z 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, /* Standard ADC gain range of 0dB to +22.5dB in 1.5dB steps */
WM_AUDIO_STEREO_ADC = WM_AUDIO_HIFI_ADC, /* Synonym kept for backwards compatibility */
WM_AUDIO_HIFI_ADC_EXTENDED = (WM_AUDIO_DIGITAL_INPUT_BASE+1), /* Extended ADC gain range of -17.25dB to +30dB in 0.75dB steps */
WM_AUDIO_STEREO_ADC_EXTENDED = WM_AUDIO_HIFI_ADC, /* Synonym kept for backwards compatibility */
WM_AUDIO_VOICE_ADC = (WM_AUDIO_DIGITAL_INPUT_BASE+2),
/* 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) \
)
/* 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -