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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? waveinpdd.c

?? WinCE5.0BSP for Renesas SH7770
?? C
字號:
//
//      Copyright(C) Renesas Technology Corp. 1999-2005. All rights reserved.
//
//      WaveDev Driver for ITS-DS7
//
// FILE      : WAVEINPDD.C
// CREATED   : 1999.04.26 (for HD64465 on PFM-DS6)
// MODIFIED  : 2005.03.04
// AUTHOR    : Renesas Technology Corp.
// HARDWARE  : RENESAS ITS-DS7
// HISTORY   : 
//             2003.06.20
//              - Created release code.
//                (based on WaveDev driver for ITS-DS6 Ver.2.2.0 for WCE4.1)
//             2004.04.21
//              - Revised simultaneous use check. If WAVE_FORMAT_QUERY flag  specified,
//                open flag leaks.
//             2004.09.01
//              - Created release code for WCE5.0.
//             2005.02.25
//              - Removed software volume control.
//             2005.03.04
//              - Moved private_WaveInContinue is moved to each hac.c and hssi.c.

//----------------------------------------------------------------------------


//
//      Copyright (c) 1995-2000 Microsoft Corporation.  All rights reserved.
//

#include <windows.h>
#include <types.h>
#include <memory.h>
#include <excpt.h>
#include <waveddsi.h>
#include <wavedbg.h>
#include <mmsystem.h>

#include "platform.h"
#include "shx.h"
#include "sh7770.h"
#include "drv_glob.h"
#include "oalintr.h"
#include "wavepdd.h"
#include "waveInpdd.h"
#include "dma.h"
//#include "drvlib.h"

extern BOOL dma_Init(int, PDMA_INFO *);
extern BOOL dma_Deinit(PDMA_INFO);
extern BOOL dma_SetPort(PDMA_INFO, DWORD);
extern BOOL dma_SetPage(PDMA_INFO, DWORD, DWORD, DWORD, DWORD);
extern BOOL dma_SetControl(PDMA_INFO, DWORD);
extern BOOL dma_SetCommand(PDMA_INFO, DWORD);
extern BOOL dma_InterruptEnable(PDMA_INFO);
extern BOOL dma_InterruptDisable(PDMA_INFO);
extern BOOL dma_Stop(PDMA_INFO);
extern BOOL dma_IsFinished(PDMA_INFO/*, DWORD*/);

PDMA_INFO	pDMA_in;	// DMA Register (for Wave input)
extern DWORD	AUDIO_NO;	// Audio Driver No.

extern ULONG	get_CODEC_SAMPLING_RATE(int);
extern VOID	get_DMA_Buffer_Address(int, DWORD, ULONG *);
extern DWORD	get_DPTR(int);
extern DWORD	get_DSAR(int, DWORD, int);
extern DWORD	get_DDAR(int, DWORD, int);
extern DWORD	get_DTCR(int, DWORD, int);
extern VOID	module_init( VOID );
extern VOID	module_deinit( VOID );
extern BOOL	codec_init( VOID );
extern VOID	module_txstart( VOID );
extern VOID	module_txdmastart( VOID );
extern VOID	module_rxstart( VOID );
extern VOID	module_rxdmastart( VOID );
extern VOID	module_txstop( VOID );
extern VOID	module_rxstop( VOID );
extern VOID	get_DMA_Buffer(	PCM_TYPE, INT32, INT32, USHORT	*, USHORT *);
extern BOOL	check_SamplesPerSec(int, DWORD);
extern BOOL check_RecInPlay(int, int);
extern VOID private_WaveInContinue(PWAVEHDR pwh);

extern PWAVEFORMATEX g_pwfx[2];
extern PCM_TYPE g_pcmtype[2];

// audio in globals

// Double Buffer for Audio Recoeding
ULONG dma_pageRecPhysicalAddress[2];

ULONG v_recPage;

PBYTE   pRecAudioBufferBase;		// Audio buffer

extern PDRIVER_GLOBALS	pDriverGlobals;		// Drivers Globals

// OpenFlag
extern int		RecOpenFlag;
extern int		PlayOpenFlag;

// statistics

DWORD g_dwOverruns;		// # of overrun errors
DWORD g_dwFrames;		// # of 48 word frames filled

LPWAVEFORMATEX lpFormat2 = 0;

static volatile BOOL v_fMoreData[2];

extern struct _global_volume
{
    ULONG   dwMasterVolume;
    ULONG   dwLineInVolume;
    ULONG   dwMicVolume;
    BOOL    fMasterMute;
    BOOL    fLineInMute;
    BOOL    fMicMute;
    ULONG   dwInputSelect;
} g_VolumeSettings;

#define DUMPEXCEPTION() \
	DEBUGMSG(ZONE_ERROR,(TEXT("Exception %d @ %s:%d\r\n"), GetExceptionCode(), __FILE__, __LINE__ ))


/*****************************************************************************
*   FUNCTION :  	private_AudioInGetInterruptType
*   DESCRIPTION :   decodes type of audio interrupt
*   INPUTS :		None
*   OUTPUTS :     	interrupt type
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
AUDIO_STATE 
private_AudioInGetInterruptType(
   VOID
   )
{

	if ( pDriverGlobals->aud[AUDIO_NO].inInt == (USHORT)NULL )
	{
		return AUDIO_STATE_IGNORE;
	}
	else
	{
		return AUDIO_STATE_IN_RECORDING;
	}
}

/*****************************************************************************
*   FUNCTION :  	private_AudioInInitialize
*   DESCRIPTION :   sets up register access for audio-in
*					sets delay time for audio-in start-up
*   INPUTS :		TRUE iff successful
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
BOOL
private_AudioInInitialize(
   VOID
   )
{
	ULONG SizeOfBuffer;
	char here[] = "PDD_AudioInInitialize";
	BOOL  	RET_VALUE;

	FUNC_WPDD("+PDD_AudioInInitialize");
	DEBUGMSG(ZONE_TEST, (TEXT("WaveInpdd.c : private_AudioInInitialize\r\n")));

	// Get DMA Transfer Buffer Address (for Recording)
	get_DMA_Buffer_Address(pDriverGlobals->aud[AUDIO_NO].REC_CH, AUDIO_NO, dma_pageRecPhysicalAddress);

	// DMA Initialize
	dma_Init(pDriverGlobals->aud[AUDIO_NO].REC_CH, &pDMA_in);

	//
	// DMA Setting
	//
	dma_SetPort(pDMA_in, get_DPTR(pDriverGlobals->aud[AUDIO_NO].REC_CH));
	dma_SetPage(pDMA_in,
                    0,					// Page0
                    get_DSAR(pDriverGlobals->aud[AUDIO_NO].REC_CH,AUDIO_NO,0),	// Sorce Address
                    get_DDAR(pDriverGlobals->aud[AUDIO_NO].REC_CH,AUDIO_NO,0),	// Destination Address
                    get_DTCR(pDriverGlobals->aud[AUDIO_NO].REC_CH,AUDIO_NO,0));	// Transfer Count
	dma_SetPage(pDMA_in,
                    1,					// Page1
                    get_DSAR(pDriverGlobals->aud[AUDIO_NO].REC_CH,AUDIO_NO,1),	// Sorce Address
                    get_DDAR(pDriverGlobals->aud[AUDIO_NO].REC_CH,AUDIO_NO,1),	// Destination Address
                    get_DTCR(pDriverGlobals->aud[AUDIO_NO].REC_CH,AUDIO_NO,1));	// Transfer Count


	// Set pointers to virtual addresses of audio buffers
	SizeOfBuffer = (AUDIO_DMA_PAGE_SIZE * 2);
	pRecAudioBufferBase = VirtualAlloc(	NULL,
						SizeOfBuffer,
						MEM_RESERVE,
						PAGE_NOACCESS );
	if (pRecAudioBufferBase == NULL) {
		DEBUGMSG(ZONE_ERROR,(TEXT("Buffer virtual alloc NG!!\r\n")));
		dma_Deinit(pDMA_in);
		return FALSE;
	}
	RET_VALUE = VirtualCopy(	(PVOID)pRecAudioBufferBase,
								(PVOID)dma_pageRecPhysicalAddress[0],
								(DWORD)SizeOfBuffer,
								PAGE_READWRITE | PAGE_NOCACHE);
	if (!RET_VALUE){
		DEBUGMSG(ZONE_ERROR,(TEXT("Buffer virtual copy NG!!\r\n")));
		VirtualFree((PVOID)pRecAudioBufferBase, 0, MEM_RELEASE);
		dma_Deinit(pDMA_in);
		return FALSE;
	}

	// Initialize AudioInInterrupt Flag
	pDriverGlobals->aud[AUDIO_NO].rec_address = (ULONG)NULL;
	pDriverGlobals->aud[AUDIO_NO].inInt = (USHORT)NULL;

	DEBUGMSG(ZONE_TEST, (TEXT("WaveInpdd.c private_AudioInInitialize: END\r\n")));
	FUNC("-PDD_AudioInInitialize");
	return TRUE;
}

/*****************************************************************************
*   FUNCTION :  	private_AudioInPowerHandler
*   DESCRIPTION :   performs power on/off, this also happens at open/close!
*   INPUTS :		bPowerDown 1=power off, 0=power on
*					bInKernel 1=in kernel (don't call OS), 0=in IST
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		Don't call OS when in kernel mode
*****************************************************************************/
VOID
private_AudioInPowerHandler(
	BOOL bPowerDown,
	BOOL bInKernel
	)
{
}

VOID
AudioOutPowerHandler(
	BOOL bPowerDown
	)
{
	return; // Power Handling Not Yet Implemented
}

/*****************************************************************************
*   FUNCTION :  	private_AudioInDeinitialize
*   DESCRIPTION :   Free memory required by driver
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
VOID 
private_AudioInDeinitialize(
	VOID
	)
{
	FUNC("+PDD_AudioInDeinitialize");

	// DMA Deinitialize
	dma_Deinit(pDMA_in);

	// AudioRecordingBuffer Release
	if( pRecAudioBufferBase ){
		VirtualFree((PVOID)pRecAudioBufferBase, 0, MEM_RELEASE);
		pRecAudioBufferBase = NULL;
	}

	FUNC("-PDD_AudioInDisable");
}

/*****************************************************************************
*   FUNCTION :  	private_AudioInStart
*   DESCRIPTION :   start recording a sound
*   INPUTS :		pwh: wave header to insert sound into
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
VOID
private_WaveInStart(
	PWAVEHDR pwh
	)
{
	ULONG	RegValue;
	DWORD	i;
	
	FUNC_WPDD("+PDD_WaveInStart");
	v_recPage  = 0;

	// Stop DMA
	dma_Stop(pDMA_in);

	if (lpFormat2)
	{
		// Rx Start
		module_rxstart();

		i = 0;
		while ( private_ChangeRecSampleRate(lpFormat2->nSamplesPerSec) == FALSE ){	// Set Sampling Rate
			i++;
			if(i>5) break;
		}

	}

	//
	// DMA Setting
	//

	// DMA Control Register Setting
	RegValue = DCR_DPDS_32BIT	|
		   DCR_DDRMD_MODULE	|
		   DCR_DPDAM_INCREMENT	|
		   DCR_DMDL_MEMORY	|
		   DCR_SPDS_32BIT	|
		   DCR_SDRMD_MODULE	|
		   DCR_SPDAM_FIX	|
		   DCR_SMDL_PERIPHERAL  |
		   DCR_DIP_2PAGE	|
		   DCR_ACMD_ENABLE	|
		   DCR_CT_ENABLE	|
		   DCR_PKMD_DISABLE	|
		   DCR_BTMD_DISABLE	|
		   DCR_DTAU_BYTE	|
		   DCR_DTAC_DISABLE	|
		   DCR_DTAMD_PIN	;
	dma_SetControl(pDMA_in, RegValue);

	// DMA TransferCompleteInterrupts Enable
	dma_InterruptEnable(pDMA_in);

	// DMA Enable & AutoTransferMode
	RegValue = DCMDR_DMEN;
	dma_SetCommand(pDMA_in, RegValue);

	// Rx DMA Enable
	module_rxdmastart();

	v_recPage = 1 - v_recPage;
	pDriverGlobals->aud[AUDIO_NO].rec_address = dma_pageRecPhysicalAddress[v_recPage];
	pDriverGlobals->aud[AUDIO_NO].inInt = (USHORT)NULL;

	FUNC_WPDD("-PDD_WaveInStart");
}

/*****************************************************************************
*   FUNCTION :  	private_AudioInStop
*   DESCRIPTION :   stop recording a sound
*   INPUTS :		
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
VOID 
private_WaveInStop()
{
	FUNC_WPDD("+PDD_WaveInStop");

	// Rx Stop
	module_rxstop();

	// DMA Transfer Stop
	dma_Stop(pDMA_in);

	FUNC_WPDD("-PDD_WaveInStop");
}

/*****************************************************************************
*   FUNCTION :  	private_AudioInStandby
*   DESCRIPTION :   stop recording a sound
*   INPUTS :		
*   OUTPUTS :     	None
*   DESIGN NOTES :  what is the difference between this and Stop?
*   CAUTIONS :		
*****************************************************************************/
VOID 
private_WaveInStandby()
{
	FUNC_WPDD("+PDD_WaveInStandby");
	FUNC_WPDD("-PDD_WaveInStandby");
}

/*****************************************************************************
*   FUNCTION :  	private_AudioInClose
*   DESCRIPTION :   close recording device, powers off
*   INPUTS :		
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
VOID
private_WaveInClose()
{
	FUNC_WPDD("PDD_WaveInClose");

 	lpFormat2=0;
	pDriverGlobals->aud[AUDIO_NO].rec_address = (ULONG)NULL;
	pDriverGlobals->aud[AUDIO_NO].inInt = (USHORT)NULL;
	RecOpenFlag = 0;
}

/*****************************************************************************
*   FUNCTION :  	private_AudioInOpen
*   DESCRIPTION :   opens recording sound device, powers on
*   INPUTS :		lpFormat = what recording parameters to use
*   OUTPUTS :     	MMRESULT - ok if params ok, else a error code
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
MMRESULT
private_WaveInOpen(
	LPWAVEFORMATEX lpFormat,
	BOOL fQueryFormatOnly
	)
{
	MMRESULT mmRet = MMSYSERR_NOERROR;

	FUNC_WPDD("+PDD_WaveInOpen");

	// check simultaneously
	mmRet = check_RecInPlay(PlayOpenFlag, RecOpenFlag);
	if(mmRet != MMSYSERR_NOERROR){
		goto EXIT;
	}

	// Rx Stop
	module_rxstop();

	lpFormat2=lpFormat;		// for WaveInContinue

	// Allow PCM, mono or stereo, 8 or 16 bit at 11, 22, or 44 KHz

	if ((lpFormat->wFormatTag != WAVE_FORMAT_PCM) || 
		(lpFormat->nChannels != Monaural && lpFormat->nChannels != Stereo) ||
		(check_SamplesPerSec(pDriverGlobals->aud[AUDIO_NO].REC_CH,lpFormat->nSamplesPerSec) != TRUE) ||
		(lpFormat->wBitsPerSample != SixteenBits && lpFormat->wBitsPerSample != EightBits))
	{
		mmRet = WAVERR_BADFORMAT;
	}

	if (fQueryFormatOnly || mmRet != MMSYSERR_NOERROR)
	{
		goto EXIT;
	}

	RecOpenFlag = 1;

	// Open with the given format. Choose a playback rate from this.
	
	g_pwfx[WAPI_IN] = lpFormat;

	if (g_pwfx[WAPI_IN]->wBitsPerSample == EightBits)
	{
		if (g_pwfx[WAPI_IN]->nChannels == Monaural) 
			g_pcmtype[WAPI_IN] = PCM_TYPE_M8;
		else
			g_pcmtype[WAPI_IN] = PCM_TYPE_S8;
	}
	else
	{
		if (g_pwfx[WAPI_IN]->nChannels == Monaural)
			g_pcmtype[WAPI_IN] = PCM_TYPE_M16;
		else
			g_pcmtype[WAPI_IN] = PCM_TYPE_S16;
	}

	// Power on and initialize the AFE
	
	private_AudioInPowerHandler( FALSE, FALSE );

	// clear stats
	
	g_dwOverruns = 0;
	g_dwFrames = 0;

EXIT:
	FUNC_WPDD("-PDD_WaveInOpen");
	return(mmRet);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲动漫制服丝袜| 国产精品成人一区二区艾草| 久久无码av三级| 中文字幕+乱码+中文字幕一区| 国产亚洲短视频| 亚洲欧美日韩久久精品| 日产国产高清一区二区三区| 国产激情91久久精品导航| 91福利在线观看| 久久亚洲二区三区| 亚洲一区二区视频| 国产精品夜夜嗨| 欧美理论电影在线| 亚洲国产经典视频| 欧美日韩久久久一区| 国产亚洲精品bt天堂精选| 亚洲成av人片www| 97精品超碰一区二区三区| 欧美精品一区二区蜜臀亚洲| 午夜不卡在线视频| 成人动漫精品一区二区| 精品福利在线导航| 香蕉乱码成人久久天堂爱免费| 成人av网站在线观看| 精品剧情在线观看| 蜜臀久久99精品久久久久久9| 色欲综合视频天天天| 欧美性色欧美a在线播放| 日韩美女啊v在线免费观看| 欧美三级视频在线播放| 久久日韩精品一区二区五区| 亚洲精品视频在线| 波多野结衣在线aⅴ中文字幕不卡| 在线播放一区二区三区| 艳妇臀荡乳欲伦亚洲一区| 日韩免费观看高清完整版| 欧美午夜一区二区三区免费大片| 日韩精品在线一区| 亚洲福利视频一区二区| 99在线视频精品| 久久九九全国免费| 麻豆久久一区二区| 欧美日韩另类一区| 一区二区三区中文字幕精品精品| 国产一区亚洲一区| 精品国产乱码久久久久久蜜臀| 一区二区三区高清不卡| 成人av在线影院| 亚洲欧美偷拍卡通变态| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品免费aⅴ片在线观看| 国产精品一线二线三线精华| 亚洲精品一区二区三区福利 | 成人精品免费网站| 中文文精品字幕一区二区| 国产91精品入口| 2024国产精品| 国产成人综合在线观看| 椎名由奈av一区二区三区| 99久久精品国产毛片| 亚洲主播在线播放| 91麻豆精品国产91久久久久久| 免费欧美在线视频| 精品国产sm最大网站免费看| 精品一区二区三区不卡| 国产精品区一区二区三区| 色呦呦国产精品| 蜜臀av性久久久久蜜臀aⅴ| 国产日韩亚洲欧美综合| 国产成人精品1024| 日韩激情在线观看| 国产精品网友自拍| 欧美日韩高清一区二区不卡| 国产在线视视频有精品| 一区二区三区在线视频免费| 日韩免费高清视频| 色国产精品一区在线观看| 蜜臀av性久久久久蜜臀aⅴ| 国产精品久久久久久久岛一牛影视 | 美美哒免费高清在线观看视频一区二区| 日韩免费视频一区| 成人99免费视频| 免费精品视频在线| 1024国产精品| 日韩欧美综合在线| 成人动漫在线一区| 久久成人免费电影| 一区二区三区在线观看网站| 日韩午夜电影av| 99re亚洲国产精品| 久久99精品久久只有精品| 亚洲精品精品亚洲| 久久久综合视频| 91精品福利在线一区二区三区| 成人av电影在线网| 国内外成人在线视频| 日本人妖一区二区| 亚洲最色的网站| 亚洲丝袜美腿综合| 中文欧美字幕免费| 久久亚洲综合av| 欧美日韩成人综合在线一区二区 | 波多野结衣亚洲| 大陆成人av片| 色欧美乱欧美15图片| 91在线国产观看| 97超碰欧美中文字幕| 成人激情综合网站| 91福利在线看| 欧美日韩另类国产亚洲欧美一级| 欧美日韩高清影院| 精品91自产拍在线观看一区| 日韩限制级电影在线观看| 精品三级av在线| 国产欧美综合色| 中文字幕一区二区三区四区不卡| 亚洲同性gay激情无套| 亚洲国产精品一区二区www在线| 亚洲成人手机在线| 美女在线观看视频一区二区| 国产一区在线视频| 91免费看`日韩一区二区| 制服丝袜在线91| 国产精品乱码人人做人人爱| 日韩欧美在线综合网| 国产亚洲欧美日韩日本| 亚洲主播在线观看| 国产在线精品一区在线观看麻豆| 波多野结衣在线一区| 欧美午夜电影在线播放| 久久久五月婷婷| 亚洲资源中文字幕| 国产91精品一区二区麻豆亚洲| 欧美这里有精品| 中文字幕精品综合| 天天操天天色综合| 99re这里只有精品首页| 日韩网站在线看片你懂的| 综合电影一区二区三区 | 欧美成人一区二区| 亚洲国产日韩a在线播放| bt欧美亚洲午夜电影天堂| 91精品国产色综合久久ai换脸 | 亚洲精品成人少妇| 成人精品国产免费网站| 久久亚洲春色中文字幕久久久| 亚洲h在线观看| 欧美在线观看一区| 国产精品夫妻自拍| 国产精品超碰97尤物18| 日本成人中文字幕| 91行情网站电视在线观看高清版| 久久精品一区二区三区不卡牛牛 | 国产精品女同一区二区三区| 午夜成人在线视频| 欧美亚洲国产一区二区三区va | 久久综合久久鬼色| 韩国一区二区三区| 久久视频一区二区| 成人永久看片免费视频天堂| 久久亚洲捆绑美女| 丁香婷婷综合激情五月色| 国产性天天综合网| 不卡一区二区三区四区| 亚洲一区二区三区美女| 欧美精品第1页| 国产大陆a不卡| 亚洲欧美激情插| 日韩视频永久免费| 成人国产精品视频| 亚洲国产视频一区二区| 在线不卡欧美精品一区二区三区| 国产精品成人免费精品自在线观看| 国产成人精品亚洲午夜麻豆| 亚洲欧洲另类国产综合| 欧美亚洲国产一区二区三区va| 青青国产91久久久久久| 精品欧美一区二区久久| 国产成人精品1024| 亚洲制服丝袜av| 久久免费电影网| 色综合久久久久综合体桃花网| 亚洲日本韩国一区| 777午夜精品视频在线播放| 极品少妇一区二区| 亚洲裸体在线观看| 欧美一区二区视频在线观看2022| 国产一区三区三区| 亚洲成av人片在线| 国产亚洲欧洲997久久综合| 91偷拍与自偷拍精品| 老司机午夜精品| 亚洲人成伊人成综合网小说| 日韩一区二区三区免费观看| 波多野结衣精品在线| 久久精品国产**网站演员| 亚洲欧美一区二区视频| 久久日一线二线三线suv| 精品视频在线看| 99久久99久久久精品齐齐|