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

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

?? hwctxt.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
                case D0:
                    if (m_Dx != D0)
                    {
                        m_Dx = D0;

                        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

            // AC97 PCM output enable
            AC97_set_pcmout_transfer_mode(AC97_CH_DMA);

            // 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, AC97_get_pcmout_physical_buffer_address(), 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);
        }
        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);

        // AC97 PCM output disable
        AC97_set_pcmout_transfer_mode(AC97_CH_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

        // AC97 PCM input enable
        AC97_set_pcmin_transfer_mode(AC97_CH_DMA);

        DMA_set_channel_source(&g_InputDMA, AC97_get_pcmin_physical_buffer_address(), 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);
    }
    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);
        AC97_set_pcmin_transfer_mode(AC97_CH_OFF);

        m_InputDMAStatus = DMA_CLEAR;
    }

    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)
{
    USHORT CodecReg;

    m_bOutputMute = bMute;

    CodecReg = ReadCodecRegister(WM9713_HEADPHONE_VOL);

    if (bMute)
    {
        CodecReg |= 0x8080;
    }
    else
    {
        CodecReg &= ~0x8080;
    }

    WriteCodecRegister(WM9713_HEADPHONE_VOL, CodecReg);

    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")));
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲女女做受ⅹxx高潮| 99久久精品国产一区二区三区 | 91成人免费电影| 精品国产乱码久久| 亚洲天堂2016| 成人性视频免费网站| 欧美高清视频一二三区 | 久久久五月婷婷| 亚洲aⅴ怡春院| 色视频成人在线观看免| 国产亚洲欧美一区在线观看| 日日骚欧美日韩| 欧美这里有精品| 日韩一区在线免费观看| 国产福利一区二区三区视频在线 | 国产精品理论在线观看| 老司机精品视频线观看86| 日本乱人伦一区| 日韩一区在线看| 成人av动漫网站| 欧美国产一区二区在线观看| 国内一区二区视频| 日韩一区二区免费高清| 日韩精品三区四区| 欧美久久一二区| 亚洲成人免费影院| 欧美视频一区在线| 亚洲成人综合视频| 欧美无人高清视频在线观看| 一区二区激情小说| 色婷婷激情综合| 亚洲黄色片在线观看| 色婷婷激情久久| 婷婷丁香久久五月婷婷| 欧美猛男超大videosgay| 亚洲国产另类av| 91精品国产手机| 狠狠色狠狠色综合系列| 国产午夜精品一区二区三区视频 | 老司机一区二区| 精品对白一区国产伦| 国内精品视频一区二区三区八戒| 欧美精品一区二区三区一线天视频 | 蜜桃免费网站一区二区三区| 91精品中文字幕一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 日韩欧美中文字幕一区| 国内欧美视频一区二区| 欧美国产激情二区三区| 日本精品一级二级| 天天亚洲美女在线视频| 精品国产网站在线观看| 岛国av在线一区| 亚洲午夜私人影院| 日韩欧美一区电影| 国产成人av电影在线播放| 亚洲同性gay激情无套| 在线成人午夜影院| 国产精品白丝av| 亚洲高清免费观看| 日韩女优制服丝袜电影| 国产a区久久久| 亚洲午夜电影在线观看| 精品国产一二三| 色婷婷激情一区二区三区| 奇米一区二区三区av| 国产精品美女久久久久久久久久久 | 丝袜亚洲另类丝袜在线| 国产亚洲一区二区在线观看| 在线视频你懂得一区| 久草精品在线观看| 亚洲人123区| 26uuuu精品一区二区| 在线观看欧美日本| 国产精品一区二区在线播放 | 欧美美女直播网站| 国产91精品一区二区麻豆网站 | 日韩专区一卡二卡| 国产精品无人区| 欧美成人乱码一区二区三区| 91小视频在线免费看| 精品无码三级在线观看视频| 夜夜亚洲天天久久| 国产亚洲一区字幕| 91精品国产全国免费观看| 91天堂素人约啪| 国产一区 二区| 美脚の诱脚舐め脚责91| 樱桃国产成人精品视频| 国产精品美女久久久久久久久久久 | 亚洲欧美日韩国产综合| 精品国产免费人成在线观看| 在线播放91灌醉迷j高跟美女| 91蜜桃视频在线| 国产精品一卡二卡| 精品一区二区三区免费| 天堂va蜜桃一区二区三区| 亚洲精品精品亚洲| 中文字幕精品综合| 久久婷婷综合激情| 欧美一二三区在线| 欧美性受极品xxxx喷水| 91视视频在线观看入口直接观看www| 久草在线在线精品观看| 六月丁香综合在线视频| 欧美aaaaaa午夜精品| 日韩中文字幕区一区有砖一区 | 婷婷成人激情在线网| 有码一区二区三区| 亚洲精品中文字幕乱码三区 | 精品一区中文字幕| 奇米一区二区三区av| 免费成人美女在线观看| 蜜臀av在线播放一区二区三区| 亚洲大型综合色站| 日本在线不卡视频| 蜜芽一区二区三区| 另类小说视频一区二区| 久久精品国产成人一区二区三区| 日韩成人一级片| 免费看精品久久片| 激情综合亚洲精品| 国产精品综合二区| 国产成人精品免费一区二区| av午夜一区麻豆| 91九色最新地址| 欧美日韩dvd在线观看| 在线电影欧美成精品| 欧美tk—视频vk| 国产肉丝袜一区二区| 亚洲少妇最新在线视频| 一区二区三区91| 裸体健美xxxx欧美裸体表演| 国产精品一级黄| 色乱码一区二区三区88| 欧美日韩极品在线观看一区| 日韩免费一区二区| 久久精品一区蜜桃臀影院| 亚洲欧美一区二区在线观看| 亚洲一区二区在线免费看| 日韩国产一二三区| 国产老妇另类xxxxx| 日本电影欧美片| 日韩女优视频免费观看| 国产精品国产a级| 日韩精品乱码免费| 国产精品456| 欧美亚洲综合一区| 精品美女在线观看| 一区在线播放视频| 同产精品九九九| 成+人+亚洲+综合天堂| 欧美久久久久久蜜桃| 久久久久久亚洲综合影院红桃| 亚洲永久免费av| 高清不卡一区二区| 91精品综合久久久久久| 日本一区二区电影| 免费人成在线不卡| 色综合婷婷久久| 久久免费电影网| 丝袜美腿一区二区三区| 99精品欧美一区二区蜜桃免费| 91超碰这里只有精品国产| 国产精品国产a级| 国产在线精品一区二区夜色| 欧美日韩一区久久| 国产精品久久久久久久裸模| 久久精品国产秦先生| 欧美视频一区二| 综合色天天鬼久久鬼色| 狠狠久久亚洲欧美| 欧美日韩国产免费一区二区| 国产精品毛片高清在线完整版| 免费在线观看日韩欧美| 欧美性做爰猛烈叫床潮| 欧美国产精品久久| 国产自产v一区二区三区c| 欧美日韩视频一区二区| 亚洲欧洲av色图| 国产不卡视频一区二区三区| 日韩精品中文字幕一区二区三区| 亚洲国产精品精华液网站| 成人在线综合网| 国产精品入口麻豆九色| 国内精品国产成人| 欧美精品粉嫩高潮一区二区| 一区二区三区免费网站| jiyouzz国产精品久久| 日本一区二区三区四区在线视频| 激情综合五月天| 久久影院电视剧免费观看| 蜜乳av一区二区| 精品国产成人系列| 免费在线视频一区| 日韩精品综合一本久道在线视频| 青青国产91久久久久久| 5月丁香婷婷综合| 麻豆成人久久精品二区三区小说| 日韩美女一区二区三区四区|