亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hwctxt.h

?? 基于WINCE 的音頻驅動源碼
?? 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.
//
#pragma once
//
//
//
// 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.
//
/*++
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.

   
Module Name:	HWCTXT.H

Abstract:		Platform dependent code for the mixing audio driver.
  
Environment:	Samsung SC2440 CPU and Windows 3.0 (or later)
    
-*/

#include <s3c2440a.h>


#define OUTCHANNELS (2)
#define BITSPERSAMPLE (16)
#define SAMPLERATE  (44100)

// Inverse sample rate, in .32 fixed format, with 1 added at bottom to ensure round up.
#define INVSAMPLERATE ((UINT32)(((1i64<<32)/SAMPLERATE)+1))

typedef INT16 HWSAMPLE;
typedef HWSAMPLE *PHWSAMPLE;

// Set USE_MIX_SATURATE to 1 if you want the mixing code to guard against saturation
// This costs a couple of instructions in the inner loop
#define USE_MIX_SATURATE (1)
// The code will use the follwing values as saturation points
#define AUDIO_SAMPLE_MAX    (32767)
#define AUDIO_SAMPLE_MIN    (-32768)

#define AUDIO_DMA_PAGE_SIZE		2048					// Size in bytes			

//----- Used to track DMA controllers status -----
#define DMA_CLEAR			0x00000000
#define DMA_DONEA			0x00000008
#define DMA_STRTA			0x00000010
#define DMA_DONEB			0x00000020
#define DMA_STRTB			0x00000040
#define DMA_BIU				0x00000080					// Determines which buffer is in use: (A=0, B=1)

//----- Used for scheduling DMA transfers -----
#define  OUT_BUFFER_A		0							
#define  OUT_BUFFER_B		1
#define	 IN_BUFFER_A		0
#define  IN_BUFFER_B		1


class HardwareContext
{
public:
    static BOOL CreateHWContext(DWORD Index);
    HardwareContext();
    ~HardwareContext();

    void Lock()   {EnterCriticalSection(&m_Lock);}
    void Unlock() {LeaveCriticalSection(&m_Lock);}

    DWORD GetNumInputDevices()  {return 1;}
    DWORD GetNumOutputDevices() {return 1;}
    DWORD GetNumMixerDevices()  {return 1;}

    DeviceContext *GetInputDeviceContext(UINT DeviceId)
    {
        return &m_InputDeviceContext;
    }

    DeviceContext *GetOutputDeviceContext(UINT DeviceId)
    {
        return &m_OutputDeviceContext;
    }

    BOOL Init(DWORD Index);										
    BOOL Deinit();

    void PowerUp();
    void PowerDown();

    BOOL StartInputDMA();
    BOOL StartOutputDMA();

    void StopInputDMA();
    void StopOutputDMA();

    void InterruptThread();

    DWORD       GetOutputGain (void);
    MMRESULT    SetOutputGain (DWORD dwVolume);
    DWORD       GetInputGain (void);
    MMRESULT    SetInputGain (DWORD dwVolume);

    BOOL        GetOutputMute (void);
    MMRESULT    SetOutputMute (BOOL fMute);
    BOOL        GetInputMute (void);
    MMRESULT    SetInputMute (BOOL fMute);


protected:
    DWORD m_dwOutputGain;
    DWORD m_dwInputGain;
    BOOL  m_fInputMute;
    BOOL  m_fOutputMute;


    DWORD m_MicrophoneRouting;
    DWORD m_SpeakerRouting;
    DWORD m_InternalRouting;
    DWORD m_MasterOutputGain;

    BOOL InitInterruptThread();

    BOOL InitInputDMA();
    BOOL InitOutputDMA();
    BOOL Codec_channel();
    BOOL InitCodec();
    
    BOOL MapRegisters();
    BOOL UnmapRegisters();
    BOOL MapDMABuffers();
	BOOL UnmapDMABuffers();

    ULONG TransferInputBuffer(ULONG NumBuf);
    ULONG TransferOutputBuffer(ULONG NumBuf);
    ULONG TransferInputBuffers(DWORD dwDCSR);
    ULONG TransferOutputBuffers(DWORD dwDCSR);


    DWORD GetInterruptThreadPriority();

    DWORD m_DriverIndex;
    CRITICAL_SECTION m_Lock;

    BOOL m_Initialized;
    BOOL m_InPowerHandler;
    DWORD m_dwSysintrOutput;
    DWORD m_dwSysintrInput;

    InputDeviceContext m_InputDeviceContext;
    OutputDeviceContext m_OutputDeviceContext;

    PBYTE		m_Input_pbDMA_PAGES[2];
    PBYTE		m_Output_pbDMA_PAGES[2];

    BOOL m_InputDMARunning;
    BOOL m_OutputDMARunning;
    ULONG m_OutBytes[2];
    ULONG m_InBytes[2];

    WORD  m_nOutputVolume;					// Current HW Playback Volume 
    WORD  m_nInputVolume;					// Current HW Input (Microphone) Volume 

	HANDLE m_hAudioInterrupt;				// Handle to Audio Interrupt event.
    HANDLE m_hAudioInterruptThread;			// Handle to thread which waits on an audio interrupt event.

	//----------------------- Platform specific members ----------------------------------

	DWORD  m_OutputDMAStatus;					// Output DMA channel's status
	DWORD  m_InputDMAStatus;					// Input DMA channel's status

	BOOL AudioMute(DWORD channel, BOOL bMute);	
	//------------------------------------------------------------------------------------

};

void CallInterruptThread(HardwareContext *pHWContext);


//----------------------------------- Helper Functions and Macros ----------------------------------------

//======== Record =========
#define ioRecordPointerLow						(g_pDMAregs->DIDST1)
#define ioRecordPointerHigh						(g_pDMAregs->DIDST1)

#define RECORD_DMA_BUFFER_PHYS					(g_PhysDMABufferAddr.LowPart + 2 * AUDIO_DMA_PAGE_SIZE)

#define AUDIO_RESET_RECORD_POINTER()			{ioRecordPointerLow  = (RECORD_DMA_BUFFER_PHYS);	\
												 ioRecordPointerHigh = (RECORD_DMA_BUFFER_PHYS+ AUDIO_DMA_PAGE_SIZE); }

#define AUDIO_IN_CLEAR_INTERRUPTS()				(g_pDMAregs->DCON1 = g_pDMAregs->DCON1)

#define AUDIO_IN_DMA_ENABLE()					{ 	g_pDMAregs->DMASKTRIG1 = ENABLE_DMA_CHANNEL; \
													g_pDMAregs->DMASKTRIG1 &= ~STOP_DMA_TRANSFER; \
													g_pIISregs->IISFCON |= ( RECEIVE_FIFO_ACCESS_DMA  | RECEIVE_FIFO_ENABLE);	\
													g_pIISregs->IISCON  |= RECEIVE_DMA_REQUEST_ENABLE;	 }
													
#define AUDIO_IN_DMA_DISABLE()					{ 	StopI2SClock(); \
													g_pIISregs->IISCON &= ~RECEIVE_DMA_REQUEST_ENABLE;	\
													g_pIISregs->IISFCON &= ~( RECEIVE_FIFO_ACCESS_DMA  | RECEIVE_FIFO_ENABLE);	\
													g_pDMAregs->DMASKTRIG1 &= ~ENABLE_DMA_CHANNEL; \
													g_pDMAregs->DMASKTRIG1 |= STOP_DMA_TRANSFER;    }

#define SELECT_AUDIO_DMA_INPUT_BUFFER_A()		(g_pDMAregs->DIDST1 = (int)(g_PhysDMABufferAddr.LowPart+2*AUDIO_DMA_PAGE_SIZE) )
#define SELECT_AUDIO_DMA_INPUT_BUFFER_B()		(g_pDMAregs->DIDST1 = (int)(g_PhysDMABufferAddr.LowPart+3*AUDIO_DMA_PAGE_SIZE) )


//======== Playback =========
#define ioPlaybackPointerLow					(g_pDMAregs->DISRC2)
#define ioPlaybackPointerHigh					(g_pDMAregs->DISRC2)

#define AUDIO_RESET_PLAYBACK_POINTER()			{ioPlaybackPointerLow  = (g_PhysDMABufferAddr.LowPart);	\
												 ioPlaybackPointerHigh = (g_PhysDMABufferAddr.LowPart + AUDIO_DMA_PAGE_SIZE); }   

#define AUDIO_OUT_CLEAR_INTERRUPTS()			(g_pDMAregs->DCON2 = g_pDMAregs->DCON2)

#define AUDIO_OUT_DMA_ENABLE()					{ 	StartI2SClock(); \
													g_pDMAregs->DMASKTRIG2 &= ~STOP_DMA_TRANSFER;	\
													g_pDMAregs->DMASKTRIG2 |= ENABLE_DMA_CHANNEL;  }
													
//#define AUDIO_OUT_DMA_DISABLE()					{ StopI2SClock();  g_pDMAregs->DMASKTRIG2 &= ~ENABLE_DMA_CHANNEL; }
#define AUDIO_OUT_DMA_DISABLE()					{	/*StopI2SClock();*/  \
													g_pDMAregs->DMASKTRIG2 |= STOP_DMA_TRANSFER;	\
													g_pDMAregs->DMASKTRIG2 &= ~ENABLE_DMA_CHANNEL; }

#define SELECT_AUDIO_DMA_OUTPUT_BUFFER_A()		(g_pDMAregs->DISRC2 = (int)(g_PhysDMABufferAddr.LowPart) )
#define SELECT_AUDIO_DMA_OUTPUT_BUFFER_B()		(g_pDMAregs->DISRC2 = (int)(g_PhysDMABufferAddr.LowPart+AUDIO_DMA_PAGE_SIZE) )

//------------------------------------------ Externs ----------------------------------------------
extern HardwareContext *g_pHWContext;


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃视频第一区免费观看| 久久99精品国产.久久久久| 亚洲国产精品一区二区www在线| 热久久一区二区| 91视频国产观看| xf在线a精品一区二区视频网站| 亚洲免费观看在线观看| 国产剧情一区二区| 这里只有精品视频在线观看| 国产精品美女久久久久久久| 精品一区二区免费视频| 国产一区二区导航在线播放| 亚洲精品日韩综合观看成人91| 五月天久久比比资源色| 国产91精品入口| 7777精品伊人久久久大香线蕉超级流畅 | 国产精品每日更新在线播放网址 | 在线视频欧美精品| 中文字幕免费不卡在线| 激情综合亚洲精品| 欧美日韩免费一区二区三区视频| 椎名由奈av一区二区三区| 国产成人免费高清| 精品日韩在线观看| 日韩和的一区二区| 欧美日韩午夜在线视频| 一区二区在线观看免费| 色国产精品一区在线观看| 国产精品久久久久永久免费观看 | 亚洲成人激情社区| 在线精品视频免费播放| 亚洲制服丝袜av| 在线观看亚洲a| 一区二区三区四区乱视频| 91亚洲精品久久久蜜桃网站| 国产精品视频yy9299一区| 成人性生交大片免费| 国产欧美日韩精品a在线观看| 国产在线观看免费一区| 久久久激情视频| 国产经典欧美精品| 亚洲综合视频在线| 欧美军同video69gay| 午夜精品一区在线观看| 欧美乱妇15p| 免费观看91视频大全| 久久综合五月天婷婷伊人| 国产精品一级片在线观看| 国产精品污网站| 在线一区二区三区做爰视频网站| 亚洲尤物在线视频观看| 欧美一区二区三区啪啪| 国产米奇在线777精品观看| 中文字幕成人网| 欧美性做爰猛烈叫床潮| 久久精品国产精品亚洲精品| 久久婷婷色综合| 色婷婷精品久久二区二区蜜臂av| 亚洲国产一区在线观看| 日韩一区二区视频| 国产91富婆露脸刺激对白| 亚洲精品中文在线观看| 欧美喷潮久久久xxxxx| 精品一区二区在线观看| 亚洲色图制服诱惑 | 国产精品免费aⅴ片在线观看| 视频在线在亚洲| 欧美精品一区二区在线播放 | 精品美女在线播放| 成人网页在线观看| 亚洲v中文字幕| 日本一区二区三区久久久久久久久不| 99视频一区二区| 蜜臀91精品一区二区三区| 国产日韩欧美不卡| 91精品国产综合久久福利| 国产91在线|亚洲| 天天av天天翘天天综合网| 久久天天做天天爱综合色| 欧美亚洲自拍偷拍| 岛国一区二区三区| 免费不卡在线观看| 亚洲一区二区三区在线看| 国产日本一区二区| 欧美一区二区久久久| 日本电影欧美片| 国产精品一二三区| 免费成人av在线| 亚洲电影你懂得| 中文字幕一区二区日韩精品绯色| 日韩片之四级片| 欧美色涩在线第一页| 欧美一区二区三区在线视频| 精品久久久久久久久久久久久久久久久 | 欧美一二区视频| 亚洲国产美国国产综合一区二区| 在线视频亚洲一区| 不卡的av网站| 日本怡春院一区二区| 日日夜夜精品免费视频| 免费在线视频一区| 国产精品资源在线看| 成人免费看的视频| 91一区一区三区| 欧美日韩在线观看一区二区 | 亚洲国产精品人人做人人爽| 午夜亚洲国产au精品一区二区| 国产精品1024| 一本一道综合狠狠老| 欧美一区二区免费视频| 欧美国产精品久久| 一区二区三区精品| 三级一区在线视频先锋| 精品一区二区免费| 91美女蜜桃在线| 日韩一区二区电影在线| 国产精品女人毛片| 午夜不卡av在线| 国产99久久久久| 精品视频资源站| 国产偷国产偷亚洲高清人白洁| 亚洲美女电影在线| 久久av中文字幕片| 色先锋资源久久综合| 精品国产区一区| 一区二区三区在线视频观看| 久久国产生活片100| 色婷婷亚洲婷婷| 久久久欧美精品sm网站| 亚洲午夜激情网站| 福利一区二区在线| 555夜色666亚洲国产免| 91一区在线观看| 婷婷中文字幕一区三区| 美女一区二区视频| 成人性视频免费网站| 欧美人体做爰大胆视频| 国产精品初高中害羞小美女文| 青娱乐精品视频| 99re热这里只有精品视频| 精品国产伦一区二区三区观看方式| 综合色天天鬼久久鬼色| 国产成人综合在线观看| 4hu四虎永久在线影院成人| 亚洲女同一区二区| 国产·精品毛片| 精品久久久网站| 青青草国产精品97视觉盛宴| 91久久精品一区二区三区| 国产亲近乱来精品视频| 奇米一区二区三区av| 欧美三级韩国三级日本三斤| 国产精品国产精品国产专区不蜜| 激情成人综合网| 91精品国产色综合久久不卡电影 | 图片区小说区国产精品视频| 成人av影视在线观看| 国产亚洲欧美一级| 极品少妇xxxx偷拍精品少妇| 日韩视频一区二区三区 | 欧美久久一区二区| 一区二区三区国产精华| 91免费看片在线观看| 国产精品福利一区二区三区| 成人性生交大片免费看中文| 国产欧美精品一区二区色综合| 国产美女精品人人做人人爽| 日韩久久久精品| 精品一区二区日韩| 久久久精品综合| 国产精品系列在线观看| 国产无一区二区| 成人午夜免费av| 日韩一区在线看| 色哟哟欧美精品| 亚洲自拍偷拍图区| 欧美日韩你懂的| 久久国产日韩欧美精品| 精品国产免费视频| 国产最新精品免费| 久久综合色之久久综合| 国产成人免费视频网站| 国产精品色眯眯| 欧美曰成人黄网| 男女男精品视频| 国产日本欧美一区二区| 91在线精品一区二区| 亚洲国产成人va在线观看天堂| 精品视频免费在线| 久久99精品久久只有精品| 国产女同性恋一区二区| 91网上在线视频| 日韩电影免费在线看| 久久精品视频网| 一本到一区二区三区| 三级久久三级久久| 国产视频一区二区三区在线观看| 99re热视频精品| 日本不卡免费在线视频| 国产欧美一区二区精品性色超碰|