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

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

?? hwctxt.cpp

?? 音頻編解碼器Codec: UCB1400 WinCE6.0音頻驅(qū)動WAVEDEV2
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
BOOL HardwareContext::MapDMADescriptors(void)
{
    DMA_ADAPTER_OBJECT Adapter;
    PHYSICAL_ADDRESS   PA;

    Adapter.ObjectSize    = sizeof(DMA_ADAPTER_OBJECT);
    Adapter.InterfaceType = Internal;
    Adapter.BusNumber     = 0;

    m_vpAudioRcvA = (DMADescriptorChannelType *) HalAllocateCommonBuffer(&Adapter, 0x20, &PA, FALSE);
    if (m_vpAudioRcvA)
    {
        m_vpAudioRcvA_Physical = (DMADescriptorChannelType *) PA.LowPart;
    }

    m_vpAudioRcvB = (DMADescriptorChannelType *) HalAllocateCommonBuffer(&Adapter, 0x20, &PA, FALSE);
    if (m_vpAudioRcvB)
    {
        m_vpAudioRcvB_Physical = (DMADescriptorChannelType *) PA.LowPart;
    }

    m_vpAudioXmitA = (DMADescriptorChannelType *) HalAllocateCommonBuffer(&Adapter, 0x20, &PA, FALSE);
    if (m_vpAudioXmitA)
    {
        m_vpAudioXmitA_Physical = (DMADescriptorChannelType *) PA.LowPart;
    }

    m_vpAudioXmitB = (DMADescriptorChannelType *) HalAllocateCommonBuffer(&Adapter, 0x20, &PA, FALSE);
    if (m_vpAudioXmitB)
    {
        m_vpAudioXmitB_Physical = (DMADescriptorChannelType *) PA.LowPart;
    }

    if (!m_vpAudioRcvA  || !m_vpAudioRcvB  ||
        !m_vpAudioXmitA || !m_vpAudioXmitB)
    {
        DEBUGMSG(ZONE_ERROR, (TEXT("ERROR: MapDMADescriptors: failed to allocate DMA descriptor buffer(s).\r\n")));
        return(FALSE);
    }

    return (TRUE);

}

//------------------------------------------------------------------------------------------------------------
// Function: MapDeviceRegisters
//
// Purpose:  Map the On-chip Device registers required for the audio driver.
//
// Returns:  TRUE indicates success. FALSE indicates failure
//
//-------------------------------------------------------------------------------------------------------------
BOOL HardwareContext::MapDeviceRegisters(void)
{
    PHYSICAL_ADDRESS PA;

    PA.QuadPart  = BULVERDE_BASE_REG_PA_DMAC;
    m_pDMARegisters   = (volatile BULVERDE_DMA_REG *) MmMapIoSpace(PA, sizeof(BULVERDE_DMA_REG), FALSE);

    PA.QuadPart  = BULVERDE_BASE_REG_PA_AC97;
    m_pAc97regs  = (volatile XLLP_AC97_T *) MmMapIoSpace(PA, sizeof(XLLP_AC97_T), FALSE);
    
    PA.QuadPart  = BULVERDE_BASE_REG_PA_GPIO;
    m_pGPIORegisters  = (volatile XLLP_GPIO_T *) MmMapIoSpace(PA, sizeof(XLLP_GPIO_T), FALSE);
    
    PA.QuadPart  = BULVERDE_BASE_REG_PA_OST;
    m_pOSTimer  = (volatile XLLP_OST_T *) MmMapIoSpace(PA, sizeof(XLLP_OST_T), FALSE);

    PA.QuadPart  = BULVERDE_BASE_REG_PA_CLKMGR;
    m_pClockRegs  = (volatile XLLP_CLKMGR_T *) MmMapIoSpace(PA, sizeof(XLLP_CLKMGR_T), FALSE);

    PA.QuadPart  = MAINSTONEII_BASE_REG_PA_FPGA;
    m_vpBLReg  = (volatile MAINSTONEII_BLR_REGS *) MmMapIoSpace(PA, sizeof(MAINSTONEII_BLR_REGS), FALSE);


    if (!m_pDMARegisters || !m_pAc97regs || !m_pGPIORegisters || !m_pOSTimer || !m_pClockRegs || !m_vpBLReg)
    {
        DEBUGMSG(ZONE_ERROR, (TEXT("ERROR: MapDeviceRegisters: failed to map device register(s).\r\n")));
        return(FALSE);
    }

    return (TRUE);
}

BOOL HardwareContext::InitAudioDMA()
{
     DWORD dwDMAIrq = IRQ_DMAC;

    // Covert the hardwre DMA controller interrupt IRQ into a logical SYSINTR value
    if(m_SysIntrAudioDMA == SYSINTR_UNDEFINED)
    {
        if(!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &dwDMAIrq, sizeof(DWORD), &m_SysIntrAudioDMA, sizeof(DWORD), NULL))
        {
            DEBUGMSG(ZONE_ERROR, (TEXT("Error obtaining DMA interrupt SYSINTR value!\n")));
            return (FALSE);
        }
    }

    // Install the DMA ISR handler
    if(m_hDMAIsrHandler == NULL)
    {
        GIISR_INFO Info;
        HANDLE hBusAccessHandle;
        PVOID PhysAddr;
        DWORD inIoSpace = 0;    // io space
        PHYSICAL_ADDRESS DmaRegisterAddress = {DMA_INTERRUPT_REGISTER, 0}; 
            
        m_hDMAIsrHandler = LoadIntChainHandler(g_wszDmaIsrDll, 
                                               g_wszDmaIsrHandler,
                                               (BYTE)dwDMAIrq);
        if(m_hDMAIsrHandler == NULL)
        {
            DEBUGMSG(ZONE_ERROR, (TEXT("LoadIntChainHandler (%s, %s, %d) failed!\r\n"),
                                            g_wszDmaIsrDll, 
                                            g_wszDmaIsrHandler,
                                            dwDMAIrq));
            return FALSE;
        }

        hBusAccessHandle = CreateBusAccessHandle((LPCTSTR)m_DriverIndex);
        if(!BusTransBusAddrToStatic(hBusAccessHandle, Internal, 0, DmaRegisterAddress, sizeof(DWORD), &inIoSpace, &PhysAddr))
        {
            DEBUGMSG(ZONE_ERROR, (L"Failed TransBusAddrToStatic\r\n"));
            return FALSE;
        }
            
        DEBUGMSG(ZONE_INIT, (L"Installed ISR handler, Dll = '%s', Handler = '%s', Irq = %d, PhysAddr = 0x%x\r\n", 
                g_wszDmaIsrDll, g_wszDmaIsrHandler, dwDMAIrq, PhysAddr));

        // Set up ISR handler
        Info.SysIntr    = m_SysIntrAudioDMA;
        Info.CheckPort  = TRUE;
        Info.PortIsIO   = FALSE;
        Info.UseMaskReg = FALSE;
        Info.PortAddr   = (DWORD)PhysAddr;
        Info.PortSize   = sizeof(DWORD);
        Info.Mask       = DMA_AUDIO_INTR;
            
        if (!KernelLibIoControl(m_hDMAIsrHandler, IOCTL_GIISR_INFO, &Info, sizeof(Info), NULL, 0, NULL))
        {
            DEBUGMSG(ZONE_ERROR, (L"KernelLibIoControl call failed.\r\n"));
        }

        CloseBusAccessHandle(hBusAccessHandle);
    }

    //Create event for m_SysIntrAudioDMA
    m_hAudioInterrupt = CreateEvent(NULL, FALSE, FALSE, NULL);
    if (!m_hAudioInterrupt)
    {
        return FALSE; 
    }
    if (!InterruptInitialize (m_SysIntrAudioDMA, m_hAudioInterrupt, NULL, 0))
    {
        return FALSE;
    }
    //create and start m_hAudioInterruptThread
    m_hAudioInterruptThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL,
                                            0,
                                            (LPTHREAD_START_ROUTINE)CallInterruptThread,
                                            this,
                                            0,
                                            NULL);
    if (!m_hAudioInterruptThread)
    {
        return FALSE;
    }
    CeSetThreadPriority(m_hAudioInterruptThread, GetInterruptThreadPriority());

    return TRUE;
}


//------------------------------------------------------------------------------------------------------------
// Function: UnMapDeviceRegisters
//
// Purpose:  Unmap the On-chip Device registers required for the audio driver.
//
//-------------------------------------------------------------------------------------------------------------
void HardwareContext::UnMapDeviceRegisters(void)
{
    if (m_pDMARegisters)
    {
        MmUnmapIoSpace((void *)m_pDMARegisters, sizeof(BULVERDE_DMA_REG));
        m_pDMARegisters = NULL;
    }
    if (m_pAc97regs)
    {
        MmUnmapIoSpace((void *)m_pAc97regs, sizeof(XLLP_AC97_T));
        m_pAc97regs = NULL;
    }
    if (m_pGPIORegisters)
    {
        MmUnmapIoSpace((void *)m_pGPIORegisters, sizeof(XLLP_GPIO_T));
        m_pGPIORegisters = NULL;
    }
    if (m_pOSTimer)
    {
        MmUnmapIoSpace((void *)m_pOSTimer, sizeof(XLLP_OST_T));
        m_pOSTimer = NULL;
    }
    if (m_pClockRegs)
    {
        MmUnmapIoSpace((void *)m_pClockRegs, sizeof(XLLP_CLKMGR_T));
        m_pClockRegs = NULL;
    }
    if (m_vpBLReg)
    {
        MmUnmapIoSpace((void *)m_vpBLReg, sizeof(MAINSTONEII_BLR_REGS));
        m_vpBLReg = NULL;
    }
    return;
}

void HardwareContext::DeinitAudioDMA()
{
    //shutdown DMA interrupt thread
    if (m_hAudioInterrupt)
    {
        SetEvent(m_hAudioInterrupt);
    }
    if (m_hAudioInterruptThread)
    {
        WaitForSingleObject(m_hAudioInterruptThread, INFINITE);
        CloseHandle(m_hAudioInterruptThread);   
        m_hAudioInterruptThread = NULL; 
    }
    if (m_hAudioInterrupt)
    {
        CloseHandle(m_hAudioInterrupt);
        m_hAudioInterrupt = NULL;
    }
}

void HardwareContext::UnmapDMA(void)
{
    DMA_ADAPTER_OBJECT Adapter;
    PHYSICAL_ADDRESS   PA;
    

    Adapter.ObjectSize    = sizeof(DMA_ADAPTER_OBJECT);
    Adapter.InterfaceType = Internal;
    Adapter.BusNumber     = 0;


    if (m_vpAudioRcvA)
    {
        PA.LowPart = (DWORD)m_vpAudioRcvA_Physical;
        HalFreeCommonBuffer(&Adapter, 0x20, PA, (PVOID)m_vpAudioRcvA, FALSE);
        m_vpAudioRcvA = NULL;
    }

    if (m_vpAudioRcvB)
    {
        PA.LowPart = (DWORD)m_vpAudioRcvB_Physical;
        HalFreeCommonBuffer(&Adapter, 0x20, PA, (PVOID)m_vpAudioRcvB, FALSE);
        m_vpAudioRcvB = NULL;
    }

    if (m_vpAudioXmitA)
    {
        PA.LowPart = (DWORD)m_vpAudioXmitA_Physical;
        HalFreeCommonBuffer(&Adapter, 0x20, PA, (PVOID)m_vpAudioXmitA, FALSE);
        m_vpAudioXmitA = NULL;
    }

    if (m_vpAudioXmitB)
    {
        PA.LowPart = (DWORD)m_vpAudioXmitB_Physical;
        HalFreeCommonBuffer(&Adapter, 0x20, PA, (PVOID)m_vpAudioXmitB, FALSE);
        m_vpAudioXmitB = NULL;
    }
    
    if (m_Output_pbDMA_PAGES[0])
    {
        PA.LowPart = (DWORD)(m_Output_pbDMA_PAGES_Physical[0]);
        HalFreeCommonBuffer(&Adapter, (AUDIO_BUFFER_SIZE * NUM_DMA_AUDIO_BUFFERS), PA, m_Output_pbDMA_PAGES[0], FALSE);
        m_Output_pbDMA_PAGES[0] = NULL;
    }

    return;
}

BOOL HardwareContext::SafeWriteAC97(BYTE Offset, unsigned short int Data, BYTE DevId)
{
    if (FALSE == m_InPowerHandler)
    {
        return WriteAC97(Offset, Data, DevId);
    }
    else
    {
        return WriteAC97Raw(Offset, Data, DevId);
    }
}

BOOL HardwareContext::SafeReadAC97(BYTE Offset, unsigned short int * Data, BYTE DevId)
{
    if (FALSE == m_InPowerHandler)
    {
        return ReadAC97(Offset, Data, DevId);
    }
    else
    {
        return ReadAC97Raw(Offset, Data, DevId);
    }
}

void HardwareContext::GetPowerCapabilities(void * pBuf)
{
    DEBUGMSG(ZONE_FUNCTION, (TEXT("HardwareContext::GetPwerCapabilities()\r\n")));
    memcpy(pBuf, &g_PowerCaps, sizeof(POWER_CAPABILITIES));
}


CEDEVICE_POWER_STATE HardwareContext::GetPowerState(void)
{
    return m_dwPowerState;
}

BOOL HardwareContext::QueryPowerState(CEDEVICE_POWER_STATE dwState)
{
    return VALID_DX(dwState);
}


DWORD HardwareContext::SetPowerState(CEDEVICE_POWER_STATE dwState)
{
    DEBUGMSG(ZONE_FUNCTION, (TEXT("HardwareContext::SetPowerState(): dwState=D%d\r\n"), dwState));

    switch (dwState)
    {
    case D0:
        m_dwPowerState = D0;
        break;

    case D1:
        m_dwPowerState = D1;
        break;

    case D2:
        m_dwPowerState = D2;

        // Initialize Codec
        InitCodec();

        Lock();
        // Restart DMA if it was running before suspend.
        if(m_saveOutputDMARunning)
        {
            m_saveOutputDMARunning = FALSE;
            StartOutputDMA();
        }

        if(m_saveInputDMARunning)
        {
            m_saveInputDMARunning = FALSE;
            StartInputDMA();
        }
        Unlock();
        break;

    case D3:
        m_dwPowerState = D3;

        Lock();
    	if (m_OutputDMARunning)
    	{
            m_saveOutputDMARunning = TRUE;
    	    StopOutputDMA();
    	}

    	if (m_InputDMARunning)
    	{
            m_saveInputDMARunning = TRUE;
    	    StopInputDMA();
    	}
        Unlock();        

        // Power down Codec
        DeInitCodec();
        break;

    case D4:
        m_dwPowerState = D4;

        //Do nothing. AC link is turned off in PowerDown().
        break;

    default:
        return MMSYSERR_INVALPARAM;
    }

    return MMSYSERR_NOERROR;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲免费视频| 久久久久99精品一区| 久88久久88久久久| 亚洲精品乱码久久久久久久久| 日韩精品一区二区三区视频播放 | 亚洲你懂的在线视频| 欧美一区二区三区视频| 99re这里都是精品| 国产盗摄一区二区三区| 青青草国产成人99久久| 亚洲精品菠萝久久久久久久| 日本一区二区视频在线| 91麻豆精品91久久久久久清纯| av电影天堂一区二区在线| 精品一二三四在线| 日韩av成人高清| 亚洲国产成人精品视频| 亚洲毛片av在线| 国产精品久久看| 国产调教视频一区| 欧美一区二区女人| 欧美精品在线视频| 欧亚洲嫩模精品一区三区| 99精品在线免费| 成人高清视频免费观看| 国产精品一线二线三线精华| 久久精品国产**网站演员| 日韩vs国产vs欧美| 首页国产欧美日韩丝袜| 夜夜嗨av一区二区三区网页| 亚洲婷婷国产精品电影人久久| 国产亚洲精品7777| 日本一区二区综合亚洲| 国产欧美日韩在线观看| 亚洲国产成人在线| 欧美经典一区二区| 中文字幕成人av| 国产精品久久久久久久久免费丝袜 | 亚洲午夜在线电影| 亚洲三级在线看| 亚洲日本在线a| 亚洲精品免费视频| 亚洲一区二区美女| 亚洲国产一区二区三区青草影视 | 午夜精品久久久久久久久| 亚洲高清免费观看高清完整版在线观看 | 国内成人免费视频| 国产成人亚洲综合a∨猫咪| 国产精品一卡二卡在线观看| 国产高清久久久久| 99精品一区二区| 在线观看日韩av先锋影音电影院| 欧美午夜一区二区| 6080午夜不卡| 精品国产成人系列| 欧美国产日韩一二三区| 亚洲丝袜精品丝袜在线| 亚洲高清在线精品| 久久99久久99精品免视看婷婷 | 久久久午夜精品| 中文字幕乱码亚洲精品一区 | 五月婷婷另类国产| 青草国产精品久久久久久| 久久精品国产免费看久久精品| 国产一区二三区好的| 成人免费的视频| 在线精品亚洲一区二区不卡| 在线不卡中文字幕| 国产亚洲综合av| 亚洲日本在线视频观看| 日本成人在线一区| 国产精品影视在线观看| 91久久人澡人人添人人爽欧美| 欧美日韩二区三区| 久久久久久久久久久久久久久99| 国产精品萝li| 日韩成人av影视| 成人国产一区二区三区精品| 欧美亚一区二区| www国产成人免费观看视频 深夜成人网| 久久久亚洲高清| 亚洲第一电影网| 国产精品一线二线三线| 日本高清视频一区二区| 精品久久久久久最新网址| 国产精品进线69影院| 日韩精品三区四区| 99久久国产综合色|国产精品| 91麻豆精品91久久久久久清纯| 中文字幕精品—区二区四季| 日日夜夜精品视频天天综合网| 国产精品66部| 欧美精品123区| 国产精品久久久久天堂| 免费看欧美女人艹b| 一本大道久久精品懂色aⅴ| 精品嫩草影院久久| 亚洲成人免费视频| 成人aaaa免费全部观看| 欧美xxxx老人做受| 亚洲福利视频一区| 成人综合在线网站| 4438x成人网最大色成网站| 中日韩免费视频中文字幕| 久久精品99国产精品| 91福利社在线观看| 国产清纯在线一区二区www| 日本不卡视频在线| 欧美日韩精品免费观看视频| 国产精品久久久久影院亚瑟 | 日韩精品电影在线| 欧日韩精品视频| 成人免费一区二区三区在线观看| 麻豆免费看一区二区三区| 在线观看亚洲成人| 亚洲婷婷综合色高清在线| 国产不卡视频一区| 日韩西西人体444www| 五月婷婷久久综合| 欧美日韩小视频| 香蕉成人伊视频在线观看| 91久久精品国产91性色tv| 一区在线观看视频| 成人app下载| 中文字幕一区二区三区精华液| 国产主播一区二区三区| 91精品国产黑色紧身裤美女| 亚洲超碰97人人做人人爱| 欧洲一区二区av| 亚洲精品乱码久久久久久| 成人黄色免费短视频| 国产精品久久久久一区| av一区二区三区黑人| 自拍偷拍欧美激情| 91视频观看免费| 亚洲欧美另类在线| 色综合久久久久网| 亚洲综合色婷婷| 欧美日韩精品是欧美日韩精品| 亚洲mv在线观看| 欧美丰满高潮xxxx喷水动漫| 三级欧美韩日大片在线看| 欧美一级一级性生活免费录像| 日本免费新一区视频| 久久综合九色综合97_久久久| 国产在线国偷精品免费看| 中文成人av在线| 一本大道久久a久久精品综合| 亚洲一区二区精品视频| 欧美一区二区三区在线视频| 精品一二线国产| 国产精品免费久久久久| 在线观看亚洲一区| 人人超碰91尤物精品国产| 精品国产免费视频| 成人激情校园春色| 亚洲一区二区三区四区的| 欧美一区二视频| 国产一区二区三区四区五区美女 | 国产成人av电影在线| 中文字幕一区二区三区蜜月| 欧美伊人久久久久久午夜久久久久| 亚洲一区二区综合| 欧美电影免费观看高清完整版在| 国产美女一区二区| 亚洲精品视频观看| 欧美刺激脚交jootjob| 成人在线一区二区三区| 亚洲男人电影天堂| 日韩一区二区在线观看| 粗大黑人巨茎大战欧美成人| 亚洲精品乱码久久久久| 日韩欧美国产综合| www.欧美.com| 日韩国产在线观看一区| 国产欧美日韩在线看| 欧美在线观看视频一区二区三区| 麻豆精品一二三| 国产精品无圣光一区二区| 欧美日韩精品免费| 国产成+人+日韩+欧美+亚洲| 性做久久久久久免费观看欧美| 亚洲精品一区二区三区香蕉 | 欧美色中文字幕| 国产一区二区三区免费观看| 亚洲自拍偷拍欧美| 久久久久国产免费免费| 欧美日韩在线播| 成人网在线免费视频| 欧美aaaaa成人免费观看视频| 国产精品的网站| 精品久久久久av影院| 色婷婷精品久久二区二区蜜臂av | 香蕉影视欧美成人| 国产精品久久免费看| 精品国产乱码久久| 欧美理论片在线| 色综合一个色综合亚洲| 国产v日产∨综合v精品视频| 日韩av电影免费观看高清完整版在线观看 |