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

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

?? hwctxt.h

?? windows CE 的BSP開發包.包含眾多的驅動程序和OAL層的開發代碼
?? H
字號:
#pragma once
//
// 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.
//
/*++
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 SC2410 CPU and Windows 3.0 (or later)
    
-*/

#include <oalintr.h>
#include <pm.h>
#include <s2440.h>

#include "pmplatform.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;}

    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 ForceSpeaker (BOOL bSpeaker);
	
    // IOCTL pass-through
    BOOL IOControl( DWORD  dwOpenData,
                    DWORD  dwCode,
                    PBYTE  pBufIn,
                    DWORD  dwLenIn,
                    PBYTE  pBufOut,
                    DWORD  dwLenOut,
                    PDWORD pdwActualOut);

    DWORD Open();
    DWORD Close();
    
    CEDEVICE_POWER_STATE GetDx() { return m_Dx;}
    
protected:

    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_IntrAudio;

    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);	
	//------------------------------------------------------------------------------------

	LONG m_NumForcedSpeaker;
    void SetSpeakerEnable(BOOL bEnable);
    void RecalcSpeakerEnable();
	
	CEDEVICE_POWER_STATE    m_Dx;
};

void CallInterruptThread(HardwareContext *pHWContext);


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

//======== Record =========
#define ioRecordPointerLow						(v_pDMAregs->rDIDST1)
#define ioRecordPointerHigh						(v_pDMAregs->rDIDST1)

#define RECORD_DMA_BUFFER_PHYS					(AUDIO_DMA_BUFFER_PHYS + 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()				(v_pDMAregs->rDCON1 = v_pDMAregs->rDCON1)

//#define AUDIO_IN_DMA_ENABLE()					{ 	v_pDMAregs->rDMASKTRIG1 |= ENABLE_DMA_CHANNEL; \
//													v_pDMAregs->rDMASKTRIG1 &= ~STOP_DMA_TRANSFER; \
//													v_pIISregs->rIISFCON |= ( RECEIVE_FIFO_ACCESS_DMA  | RECEIVE_FIFO_ENABLE);	\
//													v_pIISregs->rIISCON  |= RECEIVE_DMA_REQUEST_ENABLE;	 }
													
//#define AUDIO_IN_DMA_DISABLE()					{ 	StopI2SClock(); \
//													v_pIISregs->rIISCON &= ~RECEIVE_DMA_REQUEST_ENABLE;	\
//													v_pIISregs->rIISFCON &= ~( RECEIVE_FIFO_ACCESS_DMA  | RECEIVE_FIFO_ENABLE);	\
//													v_pDMAregs->rDMASKTRIG1 |= STOP_DMA_TRANSFER;    }

//#define SELECT_AUDIO_DMA_INPUT_BUFFER_A()		(v_pDMAregs->rDIDST1 = (int)(AUDIO_DMA_BUFFER_PHYS+2*AUDIO_DMA_PAGE_SIZE) )
//#define SELECT_AUDIO_DMA_INPUT_BUFFER_B()		(v_pDMAregs->rDIDST1 = (int)(AUDIO_DMA_BUFFER_PHYS+3*AUDIO_DMA_PAGE_SIZE) )


//======== Playback =========
#define ioPlaybackPointerLow					(v_pDMAregs->rDISRC2)
#define ioPlaybackPointerHigh					(v_pDMAregs->rDISRC2)

//#define AUDIO_RESET_PLAYBACK_POINTER()			{ioPlaybackPointerLow  = (AUDIO_DMA_BUFFER_PHYS);	\
//												 ioPlaybackPointerHigh = (AUDIO_DMA_BUFFER_PHYS + AUDIO_DMA_PAGE_SIZE); }   

//#define AUDIO_OUT_CLEAR_INTERRUPTS()			(v_pDMAregs->rDCON2 = v_pDMAregs->rDCON2)

//#define AUDIO_OUT_DMA_ENABLE()					{ v_pDMAregs->rDMASKTRIG2 &= ~STOP_DMA_TRANSFER; \
//													  v_pDMAregs->rDMASKTRIG2 |= ENABLE_DMA_CHANNEL; }
													
//#define AUDIO_OUT_DMA_DISABLE()					{ v_pDMAregs->rDMASKTRIG2 |= STOP_DMA_TRANSFER; }

//#define SELECT_AUDIO_DMA_OUTPUT_BUFFER_A()		(v_pDMAregs->rDISRC2 = (int)(AUDIO_DMA_BUFFER_PHYS) )
//#define SELECT_AUDIO_DMA_OUTPUT_BUFFER_B()		(v_pDMAregs->rDISRC2 = (int)(AUDIO_DMA_BUFFER_PHYS+AUDIO_DMA_PAGE_SIZE) )

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


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品美女一区二区三区| 一区二区三区日韩精品| 日韩免费观看高清完整版在线观看| 99视频有精品| 91色视频在线| 在线观看91精品国产入口| 99久久er热在这里只有精品66| 成人av电影在线播放| 国产成人午夜电影网| 丁香啪啪综合成人亚洲小说 | 午夜激情久久久| 亚洲高清免费观看| 亚洲va韩国va欧美va| 午夜视频在线观看一区二区三区| 日韩制服丝袜av| 看电影不卡的网站| 国产真实乱偷精品视频免| 国产精品一卡二| av电影一区二区| 91久久精品国产91性色tv| 欧美体内she精视频| 国产精品电影一区二区三区| 最新国产精品久久精品| 亚洲精品视频一区二区| 午夜精品久久久久久久99樱桃| 免费观看在线色综合| 国产精品一区二区三区乱码| 91在线视频观看| 欧美乱妇15p| 久久久久久久电影| 亚洲视频一二三| 午夜不卡av在线| 国精产品一区一区三区mba视频 | 色婷婷久久99综合精品jk白丝 | 亚洲老司机在线| 日韩不卡一区二区| 成人性生交大片免费看在线播放 | 国产亚洲污的网站| 日韩毛片精品高清免费| 三级一区在线视频先锋| 国产乱理伦片在线观看夜一区| 99re这里只有精品首页| 91精品国产黑色紧身裤美女| 中文字幕免费不卡| 日韩国产欧美三级| 成人18视频在线播放| 欧美日韩国产一二三| 国产精品污www在线观看| 无码av中文一区二区三区桃花岛| 国产精品一级在线| 欧美美女视频在线观看| 国产欧美日韩亚州综合| 亚洲成人动漫一区| 成人黄色在线视频| 日韩一级免费一区| 一区二区三区四区亚洲| 精品一二三四区| 欧美影院一区二区| 久久久久久久久久久黄色| 亚洲综合色在线| 成人黄色小视频在线观看| 91精品国产aⅴ一区二区| 亚洲欧洲av色图| 国产乱人伦精品一区二区在线观看| 欧美午夜精品久久久久久孕妇 | 亚洲成人av一区二区| 国产成人8x视频一区二区| 91精品国模一区二区三区| 国产精品欧美久久久久一区二区| 久久丁香综合五月国产三级网站| 色综合欧美在线视频区| 欧美韩国日本一区| 另类综合日韩欧美亚洲| 欧美综合欧美视频| 中文字幕一区二区日韩精品绯色| 国产一区二区三区免费播放| 3d动漫精品啪啪一区二区竹菊| 一区二区三区资源| 99re在线精品| 亚洲国产成人午夜在线一区| 国产最新精品免费| 欧美一区二区三区小说| 午夜精品在线看| 欧美三级电影一区| 亚洲综合一区在线| 日本高清不卡在线观看| 亚洲人妖av一区二区| 不卡的av电影在线观看| 国产日韩视频一区二区三区| 激情偷乱视频一区二区三区| 欧美一级黄色片| 免费一级片91| 欧美本精品男人aⅴ天堂| 免费高清视频精品| 欧美一区二区网站| 青娱乐精品视频| 欧美一级片在线观看| 日韩在线卡一卡二| 91精品国产综合久久久久久漫画 | 青青草91视频| 91精品国产色综合久久不卡蜜臀| 午夜精品久久一牛影视| 欧美精品丝袜久久久中文字幕| 午夜精品在线视频一区| 欧美日本不卡视频| 午夜精品久久久久影视| 在线不卡免费av| 美国十次综合导航| 精品国产青草久久久久福利| 精彩视频一区二区三区| 精品久久久久久久久久久久久久久久久| 麻豆成人久久精品二区三区小说| 日韩欧美亚洲国产另类| 极品销魂美女一区二区三区| 久久亚洲免费视频| 国产精品12区| 1区2区3区精品视频| 一本色道久久综合亚洲精品按摩| 亚洲夂夂婷婷色拍ww47 | 国产精品二三区| 欧美在线色视频| 午夜电影网一区| 欧美一区二区三区婷婷月色| 韩国中文字幕2020精品| 中文字幕第一页久久| 色噜噜狠狠成人网p站| 无吗不卡中文字幕| ww久久中文字幕| 91视频一区二区三区| 五月天久久比比资源色| 久久奇米777| 99re8在线精品视频免费播放| 尤物av一区二区| 亚洲视频在线观看三级| 欧美影院午夜播放| 久久精品国产99国产| 国产精品嫩草影院av蜜臀| 在线观看网站黄不卡| 日本成人在线视频网站| 国产免费观看久久| 欧美日韩一区在线| 韩国三级电影一区二区| 亚洲视频每日更新| 日韩女优av电影在线观看| www..com久久爱| 青青青伊人色综合久久| 国产精品国产精品国产专区不蜜| 欧美精品日韩综合在线| 国产91丝袜在线观看| 午夜欧美2019年伦理| 国产亚洲女人久久久久毛片| 欧美吞精做爰啪啪高潮| 国内不卡的二区三区中文字幕| 最新中文字幕一区二区三区| 日韩一区和二区| 92精品国产成人观看免费| 美女免费视频一区二区| 亚洲毛片av在线| 国产日韩欧美综合一区| 欧美日韩一区中文字幕| 成人av电影在线观看| 麻豆精品在线播放| 亚洲午夜激情av| 国产精品三级视频| 精品国产伦一区二区三区免费 | 日韩欧美高清在线| 色综合久久综合| 国产一本一道久久香蕉| 亚洲成人免费视频| 中文字幕一区二区5566日韩| 久久综合九色综合欧美亚洲| 欧美最猛性xxxxx直播| 成人动漫精品一区二区| 国产一区在线看| 午夜精品福利一区二区三区蜜桃| 国产精品三级av| 久久美女高清视频| 日韩精品一区二区三区蜜臀| 日本精品视频一区二区| 成人激情文学综合网| 狠狠狠色丁香婷婷综合久久五月| 亚洲一区二区四区蜜桃| 国产精品对白交换视频 | 国产自产高清不卡| 午夜精品成人在线视频| 樱桃国产成人精品视频| 中文字幕一区二区视频| 国产欧美日韩另类视频免费观看| 日韩欧美美女一区二区三区| 在线播放国产精品二区一二区四区| 2021中文字幕一区亚洲| 欧美日韩免费观看一区三区| 91丨porny丨国产入口| 国产**成人网毛片九色| 国产在线看一区| 美腿丝袜亚洲色图| 男人的j进女人的j一区| 日本伊人精品一区二区三区观看方式| 一区二区三区国产豹纹内裤在线| 亚洲视频 欧洲视频|