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

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

?? hwctxt.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 4 頁
字號(hào):

                        PowerUp();

                        Lock();

                        if (m_bSavedOutputDMARunning)
                        {
                            m_bSavedOutputDMARunning = FALSE;
                            SetInterruptEvent(m_dwSysintrOutput);
                            //StartOutputDMA();
                        }

                        Unlock();
                    }
                    break;
                default:
                    if (m_Dx != (_CEDEVICE_POWER_STATE)D4)
                    {
                        // Save last DMA state before Power Down
                        m_bSavedInputDMARunning = m_bInputDMARunning;
                        m_bSavedOutputDMARunning = m_bOutputDMARunning;

                        m_Dx = (_CEDEVICE_POWER_STATE)D4;

                        Lock();

                        StopOutputDMA();
                        StopInputDMA();

                        Unlock();

                        PowerDown();
                    }
                    break;
                }

                // return our state
                *(PCEDEVICE_POWER_STATE)pBufOut = m_Dx;

                *pdwActualOut = sizeof(CEDEVICE_POWER_STATE);

                WAV_INF((_T("[WAV:INF] IOCTL_POWER_SET -> [D%d]\n\r"), m_Dx));
            }
            else
            {
                bRc = FALSE;
                dwErr = ERROR_INVALID_PARAMETER;
                WAV_ERR((_T("[WAV:ERR] CEDEVICE_POWER_STATE : Invalid Parameter Dx\n\r")));
            }
        }
        break;

    case IOCTL_POWER_GET:
        if ( !pdwActualOut || !pBufOut || (dwLenOut < sizeof(CEDEVICE_POWER_STATE)) )
        {
            bRc = FALSE;
            dwErr = ERROR_INVALID_PARAMETER;
            break;
        }

        *(PCEDEVICE_POWER_STATE)pBufOut = m_Dx;

        WAV_INF((_T("WAVEDEV: IOCTL_POWER_GET: D%u \r\n"), m_Dx));

        *pdwActualOut = sizeof(CEDEVICE_POWER_STATE);
        break;

    default:
        bRc = FALSE;
        dwErr = ERROR_INVALID_FUNCTION;
        WAV_INF((_T(" Unsupported ioctl 0x%X\r\n"), dwCode));
        break;
    }

    if (!bRc)
    {
        SetLastError(dwErr);
    }

    return(bRc);
}


BOOL
HardwareContext::StartOutputDMA()
{
    ULONG OutputTransferred;

    WAV_MSG((_T("[WAV] StartOutputDMA()\r\n")));

    if((m_bOutputDMARunning == FALSE) && (m_Dx == D0))
    {
        m_bOutputDMARunning = TRUE;
        m_nOutByte[OUTPUT_DMA_BUFFER0] = 0;
        m_nOutByte[OUTPUT_DMA_BUFFER1] = 0;

        m_nOutputBufferInUse = OUTPUT_DMA_BUFFER0;    // Start DMA with Buffer 0
        m_OutputDMAStatus = (DMA_DONEA | DMA_DONEB) & ~DMA_BIU;
        OutputTransferred = TransferOutputBuffer(m_OutputDMAStatus);

        if(OutputTransferred)
        {
            CodecPowerControl();                    // Turn Output Channel
            CodecMuteControl(DMA_CH_OUT, FALSE);    // Unmute Output Channel

            // IIS PCM output enable
            IIS_set_tx_mode_control(IIS_TRANSFER_NOPAUSE);

            // Output DMA Start
            DMA_set_channel_source(&g_OutputDMA, m_OutputDMABufferPhyPage[OUTPUT_DMA_BUFFER0], WORD_UNIT, BURST_1, INCREASE);
            DMA_set_channel_destination(&g_OutputDMA, IIS_get_output_physical_buffer_address(IIS_CH_2), WORD_UNIT, BURST_1, FIXED);
            DMA_set_channel_transfer_size(&g_OutputDMA, AUDIO_DMA_PAGE_SIZE);
            DMA_set_initial_LLI(&g_OutputDMA, 1);
            DMA_channel_start(&g_OutputDMA);

            IIS_set_active_on();
        }
        else
        {
            WAV_ERR((_T("[WAV:ERR] StartOutputDMA() : There is no data to transfer\r\n")));
            m_bOutputDMARunning = FALSE;
        }
    }
    else
    {
        WAV_ERR((_T("[WAV:ERR] StartOutputDMA() : Output DMA is already running or m_Dx[%d] is not D0\r\n"), m_Dx));
        return FALSE;
    }

    return TRUE;
}


void
HardwareContext::StopOutputDMA()
{
    WAV_MSG((_T("[WAV] StopOutputDMA()\r\n")));

    if (m_bOutputDMARunning)
    {
        m_OutputDMAStatus = DMA_CLEAR;

        // Stop output DMA
        DMA_channel_stop(&g_OutputDMA);

        // IIS PCM output disable
        IIS_set_tx_mode_control(IIS_TRANSFER_PAUSE);

        if (m_bInputDMARunning == FALSE) IIS_set_active_off();
    }

    m_bOutputDMARunning = FALSE;

    CodecMuteControl(DMA_CH_OUT, TRUE);
    CodecPowerControl();
}


BOOL
HardwareContext::StartInputDMA()
{
    WAV_MSG((_T("[WAV] StartInputDMA()\r\n")));

    if(m_bInputDMARunning == FALSE)
    {
        m_bInputDMARunning = TRUE;

        m_nInByte[INPUT_DMA_BUFFER0] = 0;
        m_nInByte[INPUT_DMA_BUFFER1] = 0;

        m_nInputBufferInUse = INPUT_DMA_BUFFER0;    // Start DMA with Buffer 0
        m_InputDMAStatus = (DMA_DONEA | DMA_DONEB) & ~DMA_BIU;

        CodecPowerControl();                    // Turn On Channel
        CodecMuteControl(DMA_CH_IN, FALSE);    // Unmute Input Channel

        // IIS PCM input enable
        IIS_set_rx_mode_control(IIS_TRANSFER_NOPAUSE);

        DMA_set_channel_source(&g_InputDMA, IIS_get_input_physical_buffer_address(IIS_CH_2), WORD_UNIT, BURST_1, FIXED);
        DMA_set_channel_destination(&g_InputDMA, m_InputDMABufferPhyPage[INPUT_DMA_BUFFER0], WORD_UNIT, BURST_1, INCREASE);
        DMA_set_channel_transfer_size(&g_InputDMA, AUDIO_DMA_PAGE_SIZE);
        DMA_set_initial_LLI(&g_InputDMA, 1);
        DMA_channel_start(&g_InputDMA);

        IIS_set_active_on();
    }
    else
    {
        WAV_ERR((_T("[WAV:ERR] StartInputDMA() : Input DMA is already running\r\n")));
        return FALSE;
    }

    return TRUE;
}


void
HardwareContext::StopInputDMA()
{
    WAV_MSG((_T("[WAV] StopInputDMA()\r\n")));

    if (m_bInputDMARunning)
    {
        DMA_channel_stop(&g_InputDMA);
        // IIS PCM input disable
        IIS_set_rx_mode_control(IIS_TRANSFER_PAUSE);

        m_InputDMAStatus = DMA_CLEAR;

        if (m_bOutputDMARunning == FALSE) IIS_set_active_off();
    }

    m_bInputDMARunning = FALSE;

    CodecMuteControl(DMA_CH_IN, TRUE);
    CodecPowerControl();
}


DWORD
HardwareContext::GetOutputGain (void)
{
    return m_dwOutputGain;
}


MMRESULT
HardwareContext::SetOutputGain (DWORD dwGain)
{
    WAV_MSG((_T("[WAV] SetOutputGain(0x%08x)\r\n"), dwGain));

    m_dwOutputGain = dwGain & 0xffff;    // save off so we can return this from GetGain - but only MONO

    // convert 16-bit gain to 5-bit attenuation
    UCHAR ucGain;
    if (m_dwOutputGain == 0)
    {
        ucGain = 0x3F; // mute: set maximum attenuation
    }
    else
    {
        ucGain = (UCHAR) ((0xffff - m_dwOutputGain) >> 11);    // codec supports 64dB attenuation, we'll only use 32
    }

    //ASSERT((ucGain & 0xC0) == 0); // bits 6,7 clear indicate DATA0 in Volume mode.

    return MMSYSERR_NOERROR;
}


DWORD
HardwareContext::GetInputGain (void)
{
    return m_dwInputGain;
}


MMRESULT
HardwareContext::SetInputGain (DWORD dwGain)
{
    WAV_MSG((_T("[WAV] SetInputGain(0x%08x)\r\n"), dwGain));

    m_dwInputGain = dwGain;

    if (!m_bInputMute)
    {
        m_InputDeviceContext.SetGain(dwGain);
    }

    return MMSYSERR_NOERROR;
}


BOOL
HardwareContext::GetOutputMute (void)
{
    return m_bOutputMute;
}


MMRESULT
HardwareContext::SetOutputMute (BOOL bMute)
{
    WAV_INF((_T("[WAV:INF] ++SetOutputMute(%d)\n\r"), bMute));

    m_bOutputMute = bMute;

    if (bMute)
    {
        WriteCodecRegister(WM8580_DAC_CONTROL5, 0x010);    
    }
    else
    {
        WriteCodecRegister(WM8580_DAC_CONTROL5, 0x000);
    }

    WAV_INF((_T("[WAV:INF] --SetOutputMute()\n\r")));

    return MMSYSERR_NOERROR;
}


BOOL
HardwareContext::GetInputMute (void)
{
    return m_bInputMute;
}


MMRESULT
HardwareContext::SetInputMute (BOOL bMute)
{
    m_bInputMute = bMute;
    return m_InputDeviceContext.SetGain(bMute ? 0: m_dwInputGain);
}


DWORD
HardwareContext::ForceSpeaker(BOOL bForceSpeaker)
{
    // If m_NumForcedSpeaker is non-zero, audio should be routed to an
    // external speaker (if hw permits).
    if (bForceSpeaker)
    {
        m_NumForcedSpeaker++;
        if (m_NumForcedSpeaker == 1)
        {
            SetSpeakerEnable(TRUE);
        }
    }
    else
    {
        m_NumForcedSpeaker--;
        if (m_NumForcedSpeaker ==0)
        {
            SetSpeakerEnable(FALSE);
        }
    }

    return MMSYSERR_NOERROR;
}


void
HardwareContext::InterruptThreadOutputDMA()
{
    ULONG OutputTransferred;

#if (_WIN32_WCE < 600)
    // Fast way to access embedded pointers in wave headers in other processes.
    SetProcPermissions((DWORD)-1);
#endif

    WAV_INF((_T("[WAV:INF] ++InterruptThreadOutputDMA()\n\r")));

    while(TRUE)
    {
        WaitForSingleObject(m_hOutputDMAInterrupt, INFINITE);

        Lock();

        __try
        {
            DMA_set_interrupt_mask(&g_OutputDMA);
            DMA_clear_interrupt_pending(&g_OutputDMA);

            InterruptDone(m_dwSysintrOutput);

            DMA_clear_interrupt_mask(&g_OutputDMA);

            if ( m_Dx == D0 )
            {
                // DMA Output Buffer is Changed by LLI
                if (m_nOutputBufferInUse == OUTPUT_DMA_BUFFER0)
                {
                    // Buffer0 DMA finished
                    // DMA start with Buffer 1
                    m_nOutputBufferInUse = OUTPUT_DMA_BUFFER1;
                }
                else
                {
                    // Buffer 1 DMA finished
                    // DMA start with Buffer 0
                    m_nOutputBufferInUse = OUTPUT_DMA_BUFFER0;
                }

                if(m_OutputDMAStatus & DMA_BIU)
                {
                    m_OutputDMAStatus &= ~DMA_STRTB;    // Buffer B just completed...
                    m_OutputDMAStatus |= DMA_DONEB;
                    m_OutputDMAStatus &= ~DMA_BIU;        // Buffer A is in use
                }
                else
                {
                    m_OutputDMAStatus &= ~DMA_STRTA;    // Buffer A just completed...
                    m_OutputDMAStatus |= DMA_DONEA;
                    m_OutputDMAStatus |= DMA_BIU;        // Buffer B is in use
                }

                OutputTransferred = TransferOutputBuffer(m_OutputDMAStatus);
            }
        }
        __except(GetExceptionCode()==STATUS_ACCESS_VIOLATION ?
                EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
        {
            WAV_ERR((_T("WAVDEV2.DLL:InterruptThreadOutputDMA() - EXCEPTION: %d"), GetExceptionCode()));
        }

        Unlock();
    }

    WAV_INF((_T("[WAV:INF] --InterruptThreadOutputDMA()\n\r")));
}


void
HardwareContext::InterruptThreadInputDMA()
{
    ULONG InputTransferred;        // How can I use it ???

#if (_WIN32_WCE < 600)
    // Fast way to access embedded pointers in wave headers in other processes.
    SetProcPermissions((DWORD)-1);
#endif

    WAV_INF((_T("[WAV:INF] ++InterruptThreadInputDMA()\n\r")));

    while(TRUE)
    {
        WaitForSingleObject(m_hInputDMAInterrupt, INFINITE);

        Lock();

        __try
        {
            DMA_set_interrupt_mask(&g_InputDMA);
            DMA_clear_interrupt_pending(&g_InputDMA);

            InterruptDone(m_dwSysintrInput);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
1000部国产精品成人观看| 51午夜精品国产| 欧美国产乱子伦| 国产精品资源在线看| 精品国免费一区二区三区| 经典三级视频一区| 国产亚洲成av人在线观看导航| 成人手机在线视频| 中文字幕视频一区二区三区久| 91色在线porny| 亚洲超碰精品一区二区| 精品国产一区二区三区四区四| 国产精品一区二区久激情瑜伽 | 欧美色图一区二区三区| 亚洲电影一级黄| 欧美成人免费网站| av不卡免费电影| 亚洲图片自拍偷拍| 久久久久国产精品厨房| 色噜噜偷拍精品综合在线| 日精品一区二区三区| 久久精品视频一区| 91国偷自产一区二区开放时间 | 欧美精品一区二区蜜臀亚洲| 国产精品夜夜嗨| 亚洲精选一二三| 日韩欧美国产综合| 91小视频免费观看| 久久疯狂做爰流白浆xx| 中文字幕亚洲一区二区av在线| 欧美日本在线看| 丁香网亚洲国际| 日韩专区一卡二卡| 中文字幕免费在线观看视频一区| 欧美视频在线观看一区| 国产馆精品极品| 午夜亚洲福利老司机| 欧美激情在线一区二区| 欧美剧情片在线观看| 成人激情综合网站| 蜜桃一区二区三区四区| 亚洲精品大片www| 欧美激情中文字幕| 欧美不卡一二三| 欧美精品三级日韩久久| 91社区在线播放| 国产 欧美在线| 麻豆国产91在线播放| 亚洲精品成人少妇| 国产精品亲子乱子伦xxxx裸| 欧美一级一区二区| 欧美日韩亚洲另类| 一本大道久久精品懂色aⅴ| 国产一区二区三区四区五区美女| 亚洲成人第一页| 亚洲欧美aⅴ...| 国产蜜臀97一区二区三区| 精品免费视频一区二区| 欧美精品久久99| 欧美亚洲丝袜传媒另类| 不卡大黄网站免费看| 国产成人欧美日韩在线电影| 久久成人综合网| 琪琪久久久久日韩精品| 日本特黄久久久高潮| 亚洲第一在线综合网站| 亚洲午夜久久久久中文字幕久| 1024国产精品| 国产精品欧美一级免费| 国产午夜亚洲精品理论片色戒 | 91浏览器在线视频| 成人av免费网站| 丁香网亚洲国际| av一区二区久久| 成人18精品视频| 成人教育av在线| 97久久人人超碰| 91官网在线免费观看| 色婷婷精品久久二区二区蜜臀av| 色呦呦国产精品| 色久综合一二码| 在线观看日韩国产| 在线观看av不卡| 精品视频999| 日韩欧美在线123| 欧美成人官网二区| 久久久久国产精品人| 国产精品久久毛片av大全日韩| 亚洲天堂久久久久久久| 一区二区三区日韩| 亚洲自拍偷拍麻豆| 亚洲mv在线观看| 日本一不卡视频| 狠狠色狠狠色综合日日91app| 国产乱子伦一区二区三区国色天香| 国产老妇另类xxxxx| 不卡的av中国片| 欧美三级一区二区| 欧美大黄免费观看| 欧美—级在线免费片| 亚洲综合一区在线| 毛片av一区二区| 国产成人精品亚洲午夜麻豆| 91在线观看视频| 在线视频你懂得一区二区三区| 欧美久久久久久久久| 亚洲精品一区二区三区蜜桃下载| 中文字幕精品一区二区三区精品| 亚洲人成伊人成综合网小说| 日韩精品午夜视频| 成人一级片网址| 欧美日韩精品一区二区三区蜜桃 | 国产视频一区不卡| 亚洲天堂av一区| 日韩电影在线免费看| 成人免费视频视频| 欧美丰满一区二区免费视频| 国产三级欧美三级日产三级99| 亚洲女与黑人做爰| 精品亚洲成a人在线观看| av一区二区三区黑人| 日韩三级免费观看| 亚洲色欲色欲www| 久久精品国产77777蜜臀| 91在线视频免费观看| 精品国产电影一区二区| 亚洲免费观看高清完整版在线观看熊| 欧美aⅴ一区二区三区视频| 91美女福利视频| 日韩精品一区在线观看| 亚洲一区二区三区四区在线观看 | 欧美熟乱第一页| 国产亚洲va综合人人澡精品| 舔着乳尖日韩一区| 大胆亚洲人体视频| 欧美xxxx老人做受| 亚洲国产日日夜夜| 成人国产精品免费网站| 日韩欧美一区在线观看| 亚洲一区二区在线视频| av在线这里只有精品| 精品国偷自产国产一区| 日韩电影免费一区| 在线观看日韩国产| 亚洲三级在线免费观看| 成人黄色片在线观看| 精品国产一区二区三区久久久蜜月| 亚洲福利一二三区| 欧美羞羞免费网站| 亚洲欧美一区二区视频| 国产精品一区一区| 久久亚洲综合色一区二区三区| 日韩在线一区二区| 欧美午夜一区二区三区免费大片| 亚洲欧美乱综合| 99精品国产热久久91蜜凸| 中文一区一区三区高中清不卡| 国产精品一区久久久久| 欧美sm极限捆绑bd| 麻豆精品一区二区综合av| 这里只有精品视频在线观看| 亚洲成人www| 欧美人伦禁忌dvd放荡欲情| 亚洲一区二区在线免费看| 欧美中文字幕一区二区三区| 亚洲手机成人高清视频| 91亚洲国产成人精品一区二三| 国产精品天美传媒| 成人av免费观看| 亚洲欧美激情一区二区| 色综合亚洲欧洲| 亚洲一区二区三区四区五区黄| 欧美性一区二区| 一区二区成人在线观看| 欧美手机在线视频| 日本不卡一二三| 久久网这里都是精品| 国产精品66部| 综合久久一区二区三区| 欧美在线播放高清精品| 亚洲aaa精品| 欧美电影免费观看高清完整版在线观看 | 色香蕉久久蜜桃| 亚洲国产日韩在线一区模特 | 精品久久久三级丝袜| 国内外精品视频| 国产精品伦理一区二区| 一本到三区不卡视频| 日韩国产高清影视| 亚洲精品一区在线观看| youjizz国产精品| 一区二区三区四区在线播放| 欧美精品少妇一区二区三区| 国产在线国偷精品免费看| 国产清纯白嫩初高生在线观看91 | 日韩国产欧美视频| 久久久久久久久久久黄色| www.视频一区| 视频一区二区三区中文字幕| 久久久美女艺术照精彩视频福利播放|