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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? wavepdd.c

?? WinCE5.0BSP for Renesas SH7770
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
//
//      Copyright(C) Renesas Technology Corp. 1999-2005. All rights reserved.
//
//      WaveDev Driver for ITS-DS7
//
//----------------------------------------------------------------------------
//
// FILE      : WAVEPDD.C
// CREATED   : 1999.04.26 (for HD64465 on PFM-DS6)
// MODIFIED  : 2005.02.25
// AUTHOR    : Renesas Technology Corp.
// HARDWARE  : RENESAS ITS-DS7
// FUNCTION  : MDD-PDD interface layer of waveform audio driver
// HISTORY   : 
//             2003.06.20
//              - Created release code.
//                (based on WaveDev driver for ITS-DS6 Ver.2.2.0 for WCE4.1)
//             2004.03.03
//              - Revised initialize RegQueryValueEx parameter.
//             2004.09.01
//              - Created release code for WCE5.0.
//             2005.02.25
//              - Modified SetMute argument.
//              - Moved UpdateInputSelect and private_SetMixerValue are moved to each hac.c and hssi.c.
//              - Removed software volume control.

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


//  Functions:
//      PDD_AudioGetInterruptType
//      PDD_AudioMessage
//      PDD_AudioInitialize
//      PDD_AudioDeinitialize
//      PDD_AudioPowerHandler
//      PDD_WaveProc
#include <windows.h>
#include <types.h>
#include <memory.h>
#include <excpt.h>
#include <waveddsi.h>
#include <wavedbg.h>
#include <mmsystem.h>

#include "wavepdd.h"
#include "waveOutpdd.h"
#include "waveInpdd.h"
#include "drv_glob.h"

#include "platform.h"
#include "shx.h"
#include "oalintr.h"

#define ZONE_VOLUME 0

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

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

DWORD	gIntrAudio;

DWORD	AUDIO_NO;	// Audio Driver No.

PDRIVER_GLOBALS	pDriverGlobals;		// Drivers Globals
extern VOID	set_aud_index(PDRIVER_GLOBALS, int);
extern VOID	codec_updateRecordSelect( USHORT );
extern VOID	codec_updateRecordGain( ULONG );
extern VOID private_waveOutSetVolume( ULONG );
extern void SetMute ( BOOL );
extern void private_waveOutGetVolume(PULONG);
extern void private_SetDefaultVolume();

MMRESULT private_SetMixerValue(DWORD, DWORD);
void DumpRegKey( DWORD, PTSTR, HKEY);		//TEST

/*****************************************************************************
*   FUNCTION :  	PDD_AudioGetInterruptType
*   DESCRIPTION :   decodes type of audio interrupt
*   INPUTS :		None
*   OUTPUTS :     	interrupt type
*   DESIGN NOTES :  
*   CAUTIONS :		returned value contains both audio-in and -out states
*****************************************************************************/
AUDIO_STATE 
PDD_AudioGetInterruptType(
   VOID
   )
{
	// An audio interrupt has occured. We need to tell the MDD who owns it
	// and what state that puts us in.
	//
	// Note: return value represents both an audio-in and an audio-out state
	//		 (AUDIO_STATE stores audio-in and audio-out in separate nybbles)

 	return	(private_AudioInGetInterruptType()  & AUDIO_STATE_IN_MASK)  |
 			(private_AudioOutGetInterruptType() & AUDIO_STATE_OUT_MASK) ;
}

/*****************************************************************************
*   FUNCTION :  	PDD_AudioInitialize
*   DESCRIPTION :   intializes system for audio-in and audio-out
*   INPUTS :		None
*   OUTPUTS :     	TRUE
*   DESIGN NOTES :  tries to initialize the other, even if one fails
*   CAUTIONS :		
*****************************************************************************/
BOOL 
PDD_AudioInitialize(
   DWORD dwIndex
   )
{
	BOOL	inSuccess, outSuccess;
	HKEY	hKey;
	HKEY	hActive;
	DWORD	dwData;
	DWORD	dwSize;
	DWORD	dwType;
	DWORD	dwRet;
	BYTE	key[256];
	int	PLAY_CH;	// DMA Ch (for Playback)
	int	REC_CH;		// DMA Ch (for Recording)

	FUNC_WPDD("+PDD_AudioInitialize");

	// Open key
	dwRet = (DWORD)RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCWSTR)dwIndex, 0, 0, &hActive);
	if (dwRet != ERROR_SUCCESS) {
		RETAILMSG(1,(TEXT("!PDD_AudioInitialize: GetRegistryConfig RegOpenKeyEx(%s) failed %d\r\n"),
			dwIndex, dwRet));
		return FALSE;
	}

#ifdef	DEBUG
	DumpRegKey( 1, (PTSTR)dwIndex, hActive );
#endif

	dwSize = sizeof(key);

	// Get Key
	dwRet = RegQueryValueEx(hActive, TEXT("Key"), 0, &dwType,
				(PUCHAR)key, &dwSize);
	if (dwRet == ERROR_SUCCESS) {
		DEBUGMSG(ZONE_INIT,(TEXT("!PDD_AudioInitialize: Key = %s\r\n"), key));
	}
	else {
		RETAILMSG(1,(TEXT("!PDD_AudioInitialize: Key not found in registry.\r\n")));
		return FALSE;
	}

	// Open key
	dwRet = (DWORD)RegOpenKeyEx(HKEY_LOCAL_MACHINE, (USHORT*)key, 0, 0, (PHKEY)&hKey);
	if (dwRet != ERROR_SUCCESS) {
		RETAILMSG(1,(TEXT("!PDD_AudioInitialize: GetRegistryConfig RegOpenKeyEx(%s) failed %d\r\n"),
			dwIndex, dwRet));
		return FALSE;
	}

#ifdef	DEBUG
	DumpRegKey( 1, (PTSTR)&key, hKey );
#endif

	dwSize = sizeof(dwData);

	// Get SYSINTR
	dwRet = RegQueryValueEx(hKey, TEXT("SysIntr"), 0, &dwType,
				(PUCHAR)&dwData, &dwSize);
	if (dwRet == ERROR_SUCCESS) {
		gIntrAudio = dwData;
		DEBUGMSG(ZONE_INIT,(TEXT("!PDD_AudioInitialize: SysIntr = %08x.\r\n"), gIntrAudio));
	}
	else {
		RETAILMSG(1,(TEXT("!PDD_AudioInitialize: SysIntr not found in registry.\r\n")));
		return FALSE;
	}

	// Get Audio No.
	dwRet = RegQueryValueEx(hKey, TEXT("Audio_No"), 0, &dwType,
				(PUCHAR)&dwData, &dwSize);
	if (dwRet == ERROR_SUCCESS) {
		AUDIO_NO = dwData;
		DEBUGMSG(ZONE_INIT,(TEXT("!PDD_AudioInitialize: AUDIO_NO = %08x.\r\n"), AUDIO_NO));
	}
	else {
		RETAILMSG(1,(TEXT("!PDD_AudioInitialize: AUDIO_NO not found in registry.\r\n")));
		return FALSE;
	}

	// Get PLAY_CH
	dwRet = RegQueryValueEx(hKey, TEXT("PLAY_CH"), 0, &dwType,
				(PUCHAR)&dwData, &dwSize);
	if (dwRet == ERROR_SUCCESS) {
		PLAY_CH = dwData;
		DEBUGMSG(ZONE_INIT,(TEXT("!PDD_AudioInitialize: PLAY_CH = %08x.\r\n"), PLAY_CH));
	}
	else {
		RETAILMSG(1,(TEXT("!PDD_AudioInitialize: PLAY_CH not found in registry.\r\n")));
		return FALSE;
	}

	// Get REC_CH
	dwRet = RegQueryValueEx(hKey, TEXT("REC_CH"), 0, &dwType,
				(PUCHAR)&dwData, &dwSize);
	if (dwRet == ERROR_SUCCESS) {
		REC_CH = dwData;
		DEBUGMSG(ZONE_INIT,(TEXT("!PDD_AudioInitialize: REC_CH = %08x.\r\n"), REC_CH));
	}
	else {
		RETAILMSG(1,(TEXT("!PDD_AudioInitialize: REC_CH not found in registry.\r\n")));
		return FALSE;
	}

	// Close Key
	dwRet = RegCloseKey(hKey);

	// Close Key
	dwRet = RegCloseKey(hActive);

	// Setup a Access to AudioPlaying Address and AudioOutInterrupt
	pDriverGlobals = VirtualAlloc(	NULL,
					DRIVER_GLOBALS_PHYSICAL_MEMORY_SIZE,
					MEM_RESERVE,
					PAGE_NOACCESS);
	if (pDriverGlobals == NULL) {
		DEBUGMSG(ZONE_ERROR,(TEXT("Drv Global virtual alloc NG!!\r\n")));
		return FALSE;
	}
	if (!VirtualCopy(	(PVOID)pDriverGlobals,
				(PVOID)DRIVER_GLOBALS_PHYSICAL_MEMORY_START,
				(DWORD)DRIVER_GLOBALS_PHYSICAL_MEMORY_SIZE,
				PAGE_READWRITE | PAGE_NOCACHE))	{
		DEBUGMSG(ZONE_ERROR,(TEXT("Drv Global virtual copy NG!!\r\n")));
		VirtualFree((PVOID)pDriverGlobals, 0, MEM_RELEASE);
		return FALSE;
	}

	pDriverGlobals->aud[AUDIO_NO].PLAY_CH   = PLAY_CH;
	pDriverGlobals->aud[AUDIO_NO].REC_CH    = REC_CH;
	set_aud_index(pDriverGlobals, AUDIO_NO);

	outSuccess = private_AudioOutInitialize();
	if ( outSuccess == FALSE ) return outSuccess;

	inSuccess  = private_AudioInInitialize();

	set_aud_index(pDriverGlobals, AUDIO_NO);

    // Set the global master volume and input volume
	private_SetDefaultVolume();
    
	FUNC_WPDD("-PDD_AudioInitialize");

	return inSuccess && outSuccess;
}

/*****************************************************************************
*   FUNCTION :  	private_GetMixerValue
*   DESCRIPTION :   Get Mixer Value
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
MMRESULT  
private_GetMixerValue(DWORD dwControl, PDWORD pdwSetting)
{

    switch (dwControl) {
        case WPDMX_MASTER_VOL:
            private_waveOutGetVolume(pdwSetting);
            break;
        case WPDMX_MASTER_MUTE:
            *pdwSetting = g_VolumeSettings.fMasterMute;
            break;
        case WPDMX_LINEIN_VOL:
            *pdwSetting = g_VolumeSettings.dwLineInVolume;
            break;
        case WPDMX_LINEIN_MUTE:
            *pdwSetting = g_VolumeSettings.fLineInMute;
            break;
        case WPDMX_MIC_VOL:
            *pdwSetting = g_VolumeSettings.dwMicVolume;
            break;
        case WPDMX_MIC_MUTE:
            *pdwSetting = g_VolumeSettings.fMicMute;
            break;
        case WPDMX_INPUT_MUX:
            *pdwSetting = g_VolumeSettings.dwInputSelect;
            break;
        default:
            DEBUGMSG(1, (TEXT("private_GetMixerValue: unrecognized control %d"), dwControl));
            return MMSYSERR_NOTSUPPORTED;
    }
    DEBUGMSG(ZONE_VOLUME, (TEXT("private_GetMixerValue(%04x, %08x)\r\n"), dwControl, *pdwSetting));

    return MMSYSERR_NOERROR;
}


/*****************************************************************************

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜影院在线观看欧美| 欧美影院一区二区| 国产精品一区免费在线观看| 五月激情综合婷婷| 亚洲图片有声小说| 亚洲自拍偷拍av| 亚洲第一搞黄网站| 图片区小说区区亚洲影院| 天天综合色天天综合色h| 亚洲成人一二三| 亚洲成人动漫精品| 喷水一区二区三区| 久久精品国产第一区二区三区| 久久国产成人午夜av影院| 毛片av一区二区三区| 狠狠久久亚洲欧美| 国产毛片精品一区| 成人午夜视频免费看| 成人午夜又粗又硬又大| 成a人片国产精品| 色播五月激情综合网| 欧美日韩专区在线| 欧美日韩一区三区| 91麻豆精品久久久久蜜臀| 日韩欧美黄色影院| 久久综合久久综合九色| 国产精品毛片无遮挡高清| 亚洲乱码中文字幕| 天天影视涩香欲综合网| 秋霞午夜鲁丝一区二区老狼| 国产在线麻豆精品观看| 99久久精品免费看| 欧美日韩一本到| 久久久综合视频| 亚洲美女电影在线| 日韩av电影天堂| 国产精品996| 欧美在线视频你懂得| 日韩精品一区二区三区在线观看| 欧美国产一区二区在线观看 | 亚洲午夜激情av| 蜜桃视频在线一区| 成人精品鲁一区一区二区| 欧美性色综合网| 欧美大片免费久久精品三p| 中日韩av电影| 首页国产丝袜综合| 风间由美一区二区三区在线观看 | eeuss鲁片一区二区三区在线看| 日本伦理一区二区| 精品乱人伦一区二区三区| 国产精品久久久久久久久免费桃花| 亚洲成av人片一区二区三区| 国产精品一卡二卡在线观看| 在线看不卡av| 国产蜜臀av在线一区二区三区| 伊人夜夜躁av伊人久久| 精品一区二区三区视频| 色婷婷一区二区| 国产午夜精品福利| 黄色精品一二区| 色婷婷国产精品| 久久欧美中文字幕| 亚洲成av人片一区二区梦乃| 成人国产免费视频| 日韩欧美电影一区| 亚洲男同性恋视频| 国产成+人+日韩+欧美+亚洲| 欧美日韩久久久一区| 国产精品久久久久婷婷二区次 | 91精品午夜视频| 一区二区中文字幕在线| 精品一区在线看| 欧美吻胸吃奶大尺度电影| 国产欧美精品在线观看| 奇米在线7777在线精品| 日本二三区不卡| 欧美激情在线观看视频免费| 裸体歌舞表演一区二区| 欧美丝袜丝nylons| 国产精品欧美一级免费| 激情五月播播久久久精品| 欧美日韩一区二区三区视频| 国产精品素人视频| 国产一区二区三区久久久| 制服丝袜亚洲播放| 亚洲一区二区三区在线| av不卡在线播放| 欧美韩国日本不卡| 国产传媒欧美日韩成人| 日韩免费观看2025年上映的电影| 亚洲成人精品影院| 色哦色哦哦色天天综合| 国产精品国产三级国产aⅴ入口 | 精品久久久网站| 日本人妖一区二区| 欧美精品在线一区二区三区| 亚洲激情校园春色| 色先锋aa成人| 亚洲欧美另类久久久精品| av午夜精品一区二区三区| 国产精品全国免费观看高清| 国产高清成人在线| 久久久综合精品| 国产91丝袜在线播放0| 26uuu亚洲综合色| 激情图片小说一区| 久久综合久久综合久久| 国产精品 日产精品 欧美精品| 久久亚洲综合色| 国产精品影音先锋| 国产日韩欧美综合一区| 国产99久久精品| 国产精品免费久久| 99精品黄色片免费大全| 亚洲精品网站在线观看| 欧美熟乱第一页| 日韩av电影天堂| 精品电影一区二区| 国产91精品一区二区麻豆亚洲| 国产精品―色哟哟| 欧美一级搡bbbb搡bbbb| 黄色资源网久久资源365| 国产肉丝袜一区二区| 99久久精品免费看国产 | 国产成人在线电影| 国产精品欧美一区喷水| 91激情在线视频| 五月婷婷激情综合网| 日韩一级完整毛片| 国产一区视频网站| 国产精品久久久久久久久快鸭| 99久久国产免费看| 亚洲v精品v日韩v欧美v专区| 日韩一本二本av| 成人激情电影免费在线观看| 一区二区三区毛片| 欧美日本视频在线| 国产一区二区三区四区五区美女| 国产精品人妖ts系列视频 | 亚洲男人天堂av网| 666欧美在线视频| 国产麻豆91精品| 亚洲激情图片一区| 精品国内片67194| 99久久综合精品| 日韩和欧美的一区| 中文字幕在线观看一区| 国产综合色产在线精品 | 国产成人亚洲综合a∨婷婷| 国产精品久久久一本精品| 欧美日韩一区二区三区四区 | 狠狠色丁香婷婷综合久久片| 国产精品久久久久9999吃药| 7777女厕盗摄久久久| 国产成人午夜高潮毛片| 亚洲国产日产av| 国产视频一区二区在线观看| 一本大道av一区二区在线播放| 美女视频黄久久| 亚洲欧美日韩在线| 欧美va在线播放| 91高清视频免费看| 国产精品白丝av| 日韩专区欧美专区| 日韩一区日韩二区| 久久伊人蜜桃av一区二区| 在线亚洲一区二区| 国产丶欧美丶日本不卡视频| 日韩精品福利网| 亚洲欧美电影一区二区| 久久人人爽人人爽| 欧美裸体bbwbbwbbw| 97超碰欧美中文字幕| 久久精品国产久精国产| 亚洲成年人影院| 亚洲色图一区二区| 久久日韩精品一区二区五区| 欧美乱妇15p| 一本大道久久a久久综合婷婷| 国产精品影视网| 热久久免费视频| 香蕉成人啪国产精品视频综合网| 国产精品日日摸夜夜摸av| 精品女同一区二区| 777色狠狠一区二区三区| 在线这里只有精品| 91网站在线播放| 成人晚上爱看视频| 国产曰批免费观看久久久| 美女精品一区二区| 亚洲www啪成人一区二区麻豆 | 粉嫩av一区二区三区在线播放| 全部av―极品视觉盛宴亚洲| 亚洲成a人片综合在线| 亚洲美女视频在线观看| 亚洲欧洲国产日韩| 国产精品成人一区二区艾草 | 自拍偷自拍亚洲精品播放| 国产三级欧美三级|