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

📄 pdd_audio.h

📁 ARM9基于WINDOWSCE的BSP源代码
💻 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 + -