📄 pdd_audio.h
字号:
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
// Release Status:OS005-SW-70002-r0p0-00REL0
// $Copyright:
// ----------------------------------------------------------------
// This confidential and proprietary software may be used only as
// authorised by a licensing agreement from ARM Limited
// (C) COPYRIGHT 2004 ARM Limited
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorised
// copies and copies may only be made to the extent permitted
// by a licensing agreement from ARM Limited.
// ----------------------------------------------------------------
// File: pdd_audio.h,v
// Revision: 1.1
// ----------------------------------------------------------------
// $
//
// -----------------------------------------------------------------------------
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// -----------------------------------------------------------------------------
#ifndef __PDD_AUDIO_H__
#define __PDD_AUDIO_H__
// Version info
#define WAVEDEV_VERSION_MAJOR 2
#define WAVEDEV_VERSION_MINOR 8
// Uncomment this line to include the low-level test API in the driver
//#define TEST_API
// -----------------------------------------------------------------------------
// SAMPLE_8_MONO | Single sample from 8-bit mono PCM data stream.
//
// UINT8 | sample | Unsigned 8-bit sample
// -----------------------------------------------------------------------------
typedef struct {
UINT8 sample;
} SAMPLE_8_MONO;
// -----------------------------------------------------------------------------
// SAMPLE_16_MONO | Single sample from 16-bit mono PCM data stream.
//
// UINT16 | sample | Unsigned 16-bit sample
// -----------------------------------------------------------------------------
typedef struct {
UINT16 sample;
} SAMPLE_16_MONO;
// -----------------------------------------------------------------------------
// SAMPLE_8_STEREO | Single sample from 8-bit stereo PCM data stream.
//
// UINT8 | sample_left | Unsigned 8-bit sample from left channel.
// UINT8 | sample_right | Unsigned 8-bit sample from right channel.
// -----------------------------------------------------------------------------
typedef struct {
UINT8 sample_left;
UINT8 sample_right;
} SAMPLE_8_STEREO;
// -----------------------------------------------------------------------------
// SAMPLE_16_STEREO | Single sample from 16-bit stereo PCM data stream.
//
// UINT16 | sample_left | Unsigned 16-bit sample from left channel.
// UINT16 | sample_right | Unsigned 16-bit sample from right channel.
// -----------------------------------------------------------------------------
typedef struct {
UINT16 sample_left;
UINT16 sample_right;
} SAMPLE_16_STEREO;
// -----------------------------------------------------------------------------
// PCM_SAMPLE | Union that allows access to any of the Sample Types
//
// SAMPLE_8_MONO | m8 | <t SAMPLE_8_MONO>
// SAMPLE_16_MONO | m16 | <t SAMPLE_16_MONO>
// SAMPLE_8_STEREO | s8 | <t SAMPLE_8_STEREO>
// SAMPLE_16_STEREO | s16 | <t SAMPLE_16_STEREO>
// ULONG | d32 | Unsigned 32-bit sample (combined 16-bit left and right channels)
// -----------------------------------------------------------------------------
typedef union {
SAMPLE_8_MONO m8;
SAMPLE_16_MONO m16;
SAMPLE_8_STEREO s8;
SAMPLE_16_STEREO s16;
UINT32 d32;
} PCM_SAMPLE, *PPCM_SAMPLE;
// Bit conversions
#define BITS_8_TO_16(x) ( ( (long) ((unsigned char) x - 128) ) << 8 )
#define BITS_16_TO_8(x) ( ( (unsigned char) ((long) x >> 8 ) ) + 128 )
// Size of the AACI hardware register space
#define AACI_HWREGS_SIZE 0x1000
// AACI hardware register offsets
#define AACIReg_Slot1Rx 0x50 // AACISL1RX
#define AACIReg_Slot1Tx 0x54 // AACISL1TX
#define AACIReg_Slot2Rx 0x58 // AACISL2RX
#define AACIReg_Slot2Tx 0x5C // AACISL2TX
#define AACIReg_SlotFlag 0x68 // AACISLFR
#define AACIReg_SlotIntStatus 0x6C // AACISLISTAT
#define AACIReg_SlotIntEnable 0x70 // AACISLIEN
#define AACIReg_IntClear 0x74 // AACIINTCLR
#define AACIReg_MainControl 0x78 // AACIMAINCR
#define AACIReg_Reset 0x7C // AACIRESET
#define AACIReg_Channel1FIFO 0x90 // AACIDR1
#define AACIReg_Channel1RxControl 0x00 // AACIRXCR1
#define AACIReg_Channel1TxControl 0x04 // AACITXCR1
#define AACIReg_Channel1Status 0x08 // AACISR1
#define AACIReg_Channel1IntStatus 0x0C // AACIISR1
#define AACIReg_Channel1IntEnable 0x10 // AACIIE1
#define AACIBit_Slot1Tx_Read 0x80000
/*For AACI_SlotFlag register*/
#define AACIBit_Slot1RXBusy 0x01
#define AACIBit_Slot1TXBusy 0x02
#define AACIBit_Slot2RXBusy 0x04
#define AACIBit_Slot2TXBusy 0x08
#define AACIBit_Slot12RXBusy 0x10
#define AACIBit_Slot12TXBusy 0x20
#define AACIBit_Slot1RXValid 0x40
#define AACIBit_Slot1TXEmpty 0x80
#define AACIBit_Slot2RXValid 0x100
#define AACIBit_Slot2TXEmpty 0x200
/*For AACIMainCR register*/
#define AACIBit_Enable 0x001
#define AACIBit_Slot1RXEnable 0x008
#define AACIBit_Slot1TXEnable 0x010
#define AACIBit_Slot2RXEnable 0x020
#define AACIBit_Slot2TXEnable 0x040
#define AACIBit_Slot12RXEnable 0x080
#define AACIBit_Slot12TXEnable 0x100
#define AACIBit_LoopbackEnable 0x002
#define AACIBit_DMAEnable 0x200
/*For AACIIntEnable register*/
#define AACIBit_TxCIE 0x001
#define AACIBit_RxTIE 0x002
#define AACIBit_TxIE 0x004
#define AACIBit_RxIE 0x008
#define AACIBit_RxOIE 0x010
#define AACIBit_TxUIE 0x020
#define AACIBit_RxTOIE 0x040
/*For AACISR1-4 registers*/
#define AACIBit_RXFIFOEmpty 0x001
#define AACIBit_TXFIFOEmpty 0x002
#define AACIBit_RXFIFOHalfFull 0x004
#define AACIBit_TXFIFOHalfEmpty 0x008
#define AACIBit_RXFIFOFull 0x010
#define AACIBit_TXFIFOFull 0x020
#define AACIBit_RXFIFOBusy 0x040
#define AACIBit_TXFIFOBusy 0x080
#define AACIBit_RXOverrun 0x100
#define AACIBit_TXUnderrun 0x200
/*For AACITXCR1-4 and AACIRXCR1-4 registers*/
#define AACIBit_EnableCompactMode 0x8000
#define AACIBit_EnableFIFO 0x01
#define AACIBit_EnableFIFOMode 0x10000
#define AACIBit_Slot3DataInFIFO 0x08
#define AACIBit_Slot4DataInFIFO 0x10
#define AACIBit_Slot1DataInFIFO 0x02
#define AACIBit_Slot2DataInFIFO 0x04
#define AACIBit_DataSizeMask 0x6000
#define AACIBit_DataSize20bits 0x4000
#define AACIBit_DataSize18bits 0x2000
#define AACIBit_DataSize16bits 0x0000
#define AACIBit_DataSize12bits 0x6000
/*For AACIINTCLR */
#define AACIBit_RxTOFEC1 0x0200
#define AACIBit_TxUEC1 0x0020
#define AACIBit_RxOEC1 0x0002
#define AACIBit_ClearAllInts 0x1FFF
// Codec register offsets
#define LM4549A_RESET 0x00
#define LM4549A_MASTER_VOLUME 0x02
#define LM4549A_LINE_LEV_OUT_VOL 0x04
#define LM4549A_MASTER_VOLUME_MONO 0x06
#define LM4549A_PC_BEEP_VOLUME 0x0A
#define LM4549A_PHONE_VOLUME 0x0C
#define LM4549A_MIC_VOLUME 0x0E
#define LM4549A_LINE_IN_VOLUME 0x10
#define LM4549A_CD_VOLUME 0x12
#define LM4549A_VIDEO_VOLUME 0x14
#define LM4549A_AUX_VOLUME 0x16
#define LM4549A_PCM_OUT_VOL 0x18
#define LM4549A_RECORD_SELECT 0x1A
#define LM4549A_RECORD_GAIN 0x1C
#define LM4549A_GENERAL_PURPOSE 0x20
#define LM4549A_3D_CONTROL 0x22
#define LM4549A_POWERDOWN_CTRL_STAT 0x26
#define LM4549A_EXT_AUDIO_ID 0x28
#define LM4549A_EXT_AUDIO_CTRL_STAT 0x2A
#define LM4549A_PCM_FRONT_DAC_RATE 0x2C
#define LM4549A_PCM_ADC_RATE 0x32
#define LM4549A_VENDOR_ID1 0x7C
#define LM4549A_VENDOR_ID2 0x7E
#define LM4549A_BIT_VOLUME_MUTE 0x8000
#define LM4549A_BIT_VOLUME_GAIN 0x0040
#define LM4549A_MASK_VOLUME 0x3F
#define LM4549A_FUNC_VOLUME_R(v) ((v) & LM4549A_MASK_VOLUME)
#define LM4549A_FUNC_VOLUME_L(v) (((v) >> 8) & LM4549A_MASK_VOLUME)
#define LM4549A_MUTEVOL_RL 0x2020
//--------------------------------------------------------------------------------
// Function prototypes
//--------------------------------------------------------------------------------
BOOL AACI_Initialize(UINT, UINT, UINT);
VOID AACI_Deinitialize(VOID);
VOID AACI_Standby(WAPI_INOUT);
ULONG AACI_GetVolume(VOID);
VOID AACI_SetVolume(ULONG);
MMRESULT AACI_WaveOpen(WAPI_INOUT,LPWAVEFORMATEX, BOOL);
VOID AACI_WaveStart(WAPI_INOUT, PWAVEHDR);
VOID AACI_WaveEndOfData(WAPI_INOUT);
VOID AACI_WaveStop(WAPI_INOUT);
VOID AACI_WaveClose(WAPI_INOUT);
VOID AACI_WaveContinue(WAPI_INOUT, PWAVEHDR);
AUDIO_STATE AACI_GetInterruptType(VOID);
#ifdef TEST_API
// Test functions
DWORD TestTransmit(DWORD);
DWORD TestReceive(DWORD);
#endif
// Debug output (expanding on those in public\common\oak\inc\wavedbg.h)
#define INITMSG(x) PRINTMSG(ZONE_INIT, (TEXT("[INIT] %a\r\n"), x))
#define VERBOSEMSG(x) PRINTMSG(ZONE_VERBOSE, (TEXT("[VERBOSE] %a\r\n"), x))
#define TESTMSG2(str, x1, x2) PRINTMSG(ZONE_TEST, (TEXT("[TEST] ")TEXT( #str )TEXT("\r\n"), x1, x2))
#define WRNMSG2(str, x1, x2) PRINTMSG(ZONE_WARN, (TEXT("[WARNING] ")TEXT( #str )TEXT("\r\n"), x1, x2))
#define IOCTLMSG1(str, x1) PRINTMSG(ZONE_IOCTL, (TEXT("[IOCTL] ")TEXT( #str )TEXT("\r\n"), x1))
#endif // __PDD_AUDIO_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -