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

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

?? hwctxt.cpp

?? 音頻編解碼器Codec: UCB1400 WinCE6.0音頻驅動WAVEDEV2
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
        m_vpAudioRcvA-> dcmd = CmdBuff.DcmdDword ;                                                           // size and cmd values of the RcvA buffer

        //
        // fill RcvB Descriptor
        //

        m_vpAudioRcvB-> ddadr= (UINT32)m_vpAudioRcvA_Physical ;             // address of the next (RcvA) descriptor
        m_vpAudioRcvB-> dtadr= (UINT32)(m_Input_pbDMA_PAGES_Physical[1]);                        // source address of the AC97 RcvB buffer
        m_vpAudioRcvB-> dsadr= DMAC_AC97_AUDIO_RCV_FIFO;                         // destination address of the RcvB buffer
        m_vpAudioRcvB-> dcmd = CmdBuff.DcmdDword ;                                                           // size and cmd values of the RcvB buffer

        return TRUE;
}

//------------------------------------------------------------------------------------------------------------
// Function: StopDmac
// 
// Purpose: To stop DMA transmit
//-------------------------------------------------------------------------------------------------------------
void  HardwareContext::StopDmac(int Channel)
{
    m_pDMARegisters->dcsr[Channel] &=  ~DCSR_RUN;  //clear the run but

    return;
}

//------------------------------------------------------------------------------------------------------------
// Function: ClearDmac
// 
// Purpose: To clear DMA status
//-------------------------------------------------------------------------------------------------------------
VOID  HardwareContext::ClearDmac(int Channel)
{
    DWORD dwDCSR;

    dwDCSR  = m_pDMARegisters->dcsr[Channel];

    if(dwDCSR & DCSR_STOPINTR)
    {
        dwDCSR &= ~DCSR_STOPIRQEN;
    }

    // Clear the status
    m_pDMARegisters->dcsr[Channel] = dwDCSR;

    return;
}

//------------------------------------------------------------------------------------------------------------
// Function: AC97SetSampleRate
// 
// Purpose: Write the sample rate value to the ac97 codec
//-------------------------------------------------------------------------------------------------------------
BOOL HardwareContext::SetSampleRate(unsigned short int SampleRate, WAPI_INOUT apidir )
{
    short int RetVal=TRUE;
    unsigned short int value = 0;

    switch(SampleRate)
    {
        case 8000:
            value = XLLP_AC97_U14_DR_8000;
            break;
        case 11025:
    	    value = XLLP_AC97_U14_DR_11025;
    	    break;
    	case 16000:
    	    value = XLLP_AC97_U14_DR_16000;
    	    break;
    
        case 22050:
            value = XLLP_AC97_U14_DR_22050;
    	    break;
    
    	case 32000:
    	    value = XLLP_AC97_U14_DR_32000;
    	    break;
    
        case 44100:
             value = XLLP_AC97_U14_DR_44100;
    	     break;
    
        case 48000:
             value = XLLP_AC97_U14_DR_48000;
   	     break;
        default:
    	    DEBUGCHK(0);  //we sent a bad rate
    	    RetVal=FALSE;
    	    return (RetVal);
    }
    
    if (apidir == WAPI_IN)
    	    RetVal=SafeWriteAC97((XLLP_UINT16_T)AUDIO_ADC_RATE,value , DEV_AUDIO); //set the input sample rate
    else
    	    RetVal=SafeWriteAC97((XLLP_UINT16_T)AUDIO_DAC_RATE,value , DEV_AUDIO); //set the output sample rate
    
    return (RetVal);
}

void HardwareContext::DumpDmacRegs()
{
        int i;

        DEBUGMSG(ZONE_ERROR, (TEXT( "gsr %x, posr %x, pocr %x, pisr %x, picr %x\r\n" ),
                m_pAc97regs->GSR,
                m_pAc97regs->POSR,
                m_pAc97regs->POCR,
                m_pAc97regs->PISR,
                m_pAc97regs->PICR
                ) );

        
        for (i=0; i< 16; i++)
                DEBUGMSG(ZONE_ERROR, (TEXT( "m_pDMARegisters->dcsr[%d]     %x \r\n" ),i,m_pDMARegisters->dcsr[i] ) );
   
        //skip rsvd section rsvd0[44];
        DEBUGMSG(ZONE_ERROR, (TEXT( "m_pDMARegisters->dint         %x \r\n" ),m_pDMARegisters->dint ) );

    //skip rsvd seciton rsvd1[3];

        for (i=0; i< 39; i++)
                DEBUGMSG(ZONE_ERROR, (TEXT( "m_pDMARegisters->drcmr[%d]    %x \r\n" ),i,m_pDMARegisters->drcmr[i] ) );

        for (i=0; i<16; i++)
        {

                DEBUGMSG(ZONE_ERROR, (TEXT( "m_pDMARegisters->ddg[%d].ddadr  %x \r\n" ),i,m_pDMARegisters->ddg[i].ddadr ) );
                DEBUGMSG(ZONE_ERROR, (TEXT( "m_pDMARegisters->ddg[%d].dsadr  %x \r\n" ),i,m_pDMARegisters->ddg[i].dsadr ) );
                DEBUGMSG(ZONE_ERROR, (TEXT( "m_pDMARegisters->ddg[%d].dtadr  %x \r\n" ),i,m_pDMARegisters->ddg[i].dtadr ) );
                DEBUGMSG(ZONE_ERROR, (TEXT( "m_pDMARegisters->ddg[%d].dcmd   %x \r\n" ),i,m_pDMARegisters->ddg[i].dcmd ) );


        }

}

void HardwareContext::InitCodec(void)
{
    static DWORD VendorId=0;
    unsigned short int VidTemp=0;
    unsigned short int Ac97RegisterData=0;
    unsigned short int FeatureCrs1Data=0;

    DEBUGMSG(ZONE_INIT, (TEXT("HardwareContext::InitCodec++\r\n")));

    //Get vendor ID
    if(VendorId == 0)
    {
        SafeReadAC97(VENDOR_ID1, &VidTemp, DEV_AUDIO);

        VendorId= (VidTemp <<16); //ffffffffssssssss // f=first ascii s = second ascii

        SafeReadAC97(VENDOR_ID2, &VidTemp, DEV_AUDIO);

        VendorId |=VidTemp;       //ttttttttrrrrrrrr //t = third ascii, r=rev #
        VendorId &= 0xfffffff0;//trim of version number
    }

    //
    //compliant codecs such as Crystal require the PCM volume
    //if it's a ucb1400 then don't write the PCM volume (although it shouldn't hurt)
    //
    //vendor specific 
    switch (VendorId)
    {
      case 0x50534300: //philips UCB1400

        SafeWriteAC97(FEATURE_CSR2, PWR_SMART_CODEC, DEV_AUDIO);

        //
        //CAREFULL, writing the FEATURE_CSR1 could mess up the touch screen
        //

        SafeReadAC97(FEATURE_CSR1,&Ac97RegisterData, DEV_AUDIO);

        Ac97RegisterData = Ac97RegisterData & EQ_MASK;          //get just EQ data
        
        //Set bass and treble to a good sounding value
        Ac97RegisterData = Ac97RegisterData | 0x5480;

        SafeReadAC97(FEATURE_CSR1,&FeatureCrs1Data, DEV_AUDIO);

        FeatureCrs1Data = FeatureCrs1Data & ~0x8000;            // lob off reserved bit (must be 0)
        FeatureCrs1Data = FeatureCrs1Data & ~EQ_MASK;           // lob off eq data
        FeatureCrs1Data = FeatureCrs1Data | Ac97RegisterData;   // stored EQ data with actual Feature data 
                        
        //comment out headphone enable to save power, use an app to turn it on instead
        //HACK: If the capabiliters reads 0x2a0 it's rev 2a, if its 0x2a then its rev 1b.
        SafeReadAC97(0, (UINT16 *)&m_ResetCaps, DEV_TOUCH);
        if (m_ResetCaps==REV_2A)
        {
            FeatureCrs1Data = FeatureCrs1Data | (unsigned short) HPEN_MASK; //turn on head phone
            m_CodecType=UCB14002A;
            DEBUGMSG(ZONE_VERBOSE, (TEXT( "-- UCB14002A \r\n")   ) );   
        }
        else
        {
            m_CodecType=UCB14001B;
            DEBUGMSG(ZONE_VERBOSE, (TEXT( "-- UCB14001b \r\n")   ) );   
        }

        // Enable DC filter and High Pass filter
        FeatureCrs1Data = FeatureCrs1Data | 0x0018;

        //Write the data back to CSR1        
        SafeWriteAC97(FEATURE_CSR1, FeatureCrs1Data, DEV_AUDIO);

        //Force VRA (variable rate audio) to be on 
        SafeWriteAC97(EXTENDED_AUDIO_CTRL, VRA_ENABLED_MASK, DEV_AUDIO);

        //Default is AUDIO_MIC_INPUT_MONO
        SafeWriteAC97(RECORD_SELECT, 0, DEV_AUDIO);

        //Set the output volume from the OS 
        SafeWriteAC97(MASTER_VOLUME, 0x0000, DEV_AUDIO);

        //Set the record gain value. The ADC is 20-bit but AC97 PCDR register is only 16-bit.
        //Setting to 0x0F0F might cause clipping.
        SafeWriteAC97(RECORD_GAIN, 0x0808, DEV_AUDIO);

        //Enable microphone Boost, but keep the line from mic to speakers muted.
        SafeWriteAC97(MIC_VOLUME, 0x0040, DEV_AUDIO);

        break;

      default:  //vanilla AC97
        SafeWriteAC97(PCM_OUT_VOL, 0x1f1f, DEV_AUDIO);
        DEBUGMSG(ZONE_VERBOSE, (TEXT( "-- vanilla AC97 \r\n")   ) );    
        break;
    }

    return;
}

void HardwareContext::DeInitCodec(void)
{
    DEBUGMSG(ZONE_INIT, (TEXT("HardwareContext::DeInitCodec\r\n")));

    // Power down Codec
    // SafeWriteAC97(XLLP_AC97_CR_POWERDOWN_CTRL_STAT, 0x1000, DEV_AUDIO);

    return;
}

void  HardwareContext::PowerDown()
{
    m_Sleeping=TRUE;

    DEBUGMSG(ZONE_FUNCTION | ZONE_VERBOSE, (TEXT("WaveDev2: PowerDown\r\n")));

    // Power down AC97 link
    UnConfigureAC97Control();

} // PowerDown()

void  HardwareContext::PowerUp()
{
    //Basic Outline:
    // configue the GPIO registers
    // Set hardcoded values like variable rate audio
    // Set the BCR values (for sandgate)
    //   set volume 
    //   set record select
    //   set EQ values (bass, treble, and mode
    //   Clear Audio Mute (output & input)

    m_vpBLReg->misc_wr2 &= ~(0x1 << 2);   // switch on the amplifier

    // Initialize GPIO and power up AC97 link
    ConfigureAC97Control();

    // Clear DMA status
    ClearDmac(m_RecordingChannel);
    ClearDmac(m_PlaybackChannel);
    InterruptDone(m_SysIntrAudioDMA);

    if (TRUE == m_InPowerHandler)
    {
        m_Sleeping=FALSE;
    }

    DEBUGMSG(ZONE_FUNCTION, (TEXT("Wavedev:HardwareContext::PowerUp: Done\r\n")));

}

// Control the hardware speaker enable
void HardwareContext::SetSpeakerEnable(BOOL bEnable)
{
    // Code to turn speaker on/off here
    return;
}

/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
// RecalcSpeakerEnable decides whether to enable the speaker or not.
// For now, it only looks at the m_bForceSpeaker variable, but it could
// also look at whether the headset is plugged in
// and/or whether we're in a voice call. Some mechanism would
// need to be implemented to inform the wave driver of changes in the state of
// these variables however.
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8

void HardwareContext::RecalcSpeakerEnable()
{
    SetSpeakerEnable(m_NumForcedSpeaker);
}

/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
// SetForceSpeaker is called from the device context to update the state of the
// m_bForceSpeaker variable.
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8

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)
        {
            RecalcSpeakerEnable();
        }
    }
    else
    {
        m_NumForcedSpeaker--;
        if (m_NumForcedSpeaker==0)
        {
            RecalcSpeakerEnable();
        }
    }

    return MMSYSERR_NOERROR;
}


short int HardwareContext::MsgWriteAC97(DWORD dwParam1,DWORD dwParam2)
{
    DEBUGMSG(ZONE_VERBOSE, (TEXT( "write %x %x \r\n" ),dwParam1,dwParam2)); 

    SafeWriteAC97((BYTE)dwParam1,(unsigned short int)dwParam2, DEV_AUDIO );
    return (MMSYSERR_NOERROR);
}

short int HardwareContext::MsgReadAC97(DWORD dwParam1,DWORD dwParam2)
{
    unsigned short int MyData=0; 

    DEBUGMSG(ZONE_VERBOSE, (TEXT( "read %x %x \r\n" ),dwParam1,MyData ));

    SafeReadAC97((BYTE)dwParam1, &MyData, DEV_AUDIO);

    if (dwParam2 != (unsigned short int) NULL)
            * (unsigned short int *) dwParam2 =  MyData;

    return (MMSYSERR_NOERROR);
}


/*
#define RIL_AUDIO_NONE                              (0x00000000)      // @constdefine No audio devices
#define RIL_AUDIO_HANDSET                           (0x00000001)      // @constdefine Handset
#define RIL_AUDIO_SPEAKERPHONE                      (0x00000002)      // @constdefine Speakerphone
#define RIL_AUDIO_HEADSET                           (0x00000003)      // @constdefine Headset
#define RIL_AUDIO_CARKIT                            (0x00000004)      // @constdefine Carkit
*/

BOOL HardwareContext::SetCfgHeadSet()
{
        return TRUE;
}
BOOL HardwareContext::SetCfgHandSet()
{
        return TRUE;
}
BOOL HardwareContext::SetCfgSpeakerPhone()
{
        return TRUE;
}
BOOL HardwareContext::SetCfgCarKit()
{
        return TRUE;
}
BOOL HardwareContext::SetCfgNone()
{
        return TRUE;
}

//------------------------------------------------------------------------------------------------------------
// Function: MapDMADescriptors
//
// Purpose:  Map the physical DMA Descriptors into virtual space
//
// Returns:  TRUE indicates success. FALSE indicates failure
//
//-------------------------------------------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产原创一区二区| 国产乱码字幕精品高清av | 一区二区三区四区精品在线视频| 亚洲午夜一区二区| 国产成人啪免费观看软件| 91国偷自产一区二区三区观看| 日韩一区二区三免费高清| 亚洲人妖av一区二区| 美女国产一区二区三区| 一本色道亚洲精品aⅴ| 国产欧美综合在线| 奇米影视在线99精品| 在线观看一区不卡| 综合激情网...| 懂色av一区二区三区蜜臀| 宅男噜噜噜66一区二区66| 1024成人网色www| 国产91露脸合集magnet | 国产精品亲子乱子伦xxxx裸| 麻豆91小视频| 制服丝袜日韩国产| 午夜精品久久久久久久99樱桃| bt欧美亚洲午夜电影天堂| 久久精品无码一区二区三区| 激情五月播播久久久精品| 欧美一级片免费看| 日本中文字幕不卡| 欧美一区二区精美| 蜜桃在线一区二区三区| 91精品国产色综合久久不卡电影 | 欧美日韩国产综合草草| 一区二区三国产精华液| 欧美亚洲一区二区三区四区| 一区二区三区中文字幕| 欧美中文字幕不卡| 亚洲成人tv网| 欧美一区午夜精品| 另类的小说在线视频另类成人小视频在线| 7777精品伊人久久久大香线蕉的| 五月婷婷另类国产| 日韩一区二区中文字幕| 国产一区二区免费在线| 亚洲国产精品二十页| av资源网一区| 亚洲一区二区高清| 欧美精品精品一区| 极品美女销魂一区二区三区免费 | 精品久久一二三区| 国产一区二区福利视频| 国产精品色婷婷久久58| 99re6这里只有精品视频在线观看| 成人免费在线播放视频| 欧美午夜影院一区| 美女脱光内衣内裤视频久久网站| 久久影院视频免费| 91在线porny国产在线看| 亚洲第一主播视频| 精品88久久久久88久久久| 成人综合婷婷国产精品久久免费| 国产精品毛片a∨一区二区三区 | 国产盗摄女厕一区二区三区| 欧美精品一区二区三区视频| 白白色 亚洲乱淫| 亚洲成av人片在线| 欧美激情一区在线| 欧美三级日韩三级国产三级| 久久国产精品色婷婷| 亚洲欧美日韩人成在线播放| 69av一区二区三区| 成人av网在线| 美女一区二区在线观看| 国产精品伦理在线| 91精品国产综合久久福利| 成人激情免费电影网址| 午夜激情久久久| 中文字幕一区二区5566日韩| 欧美一区二区人人喊爽| 91丨九色丨黑人外教| 狠狠狠色丁香婷婷综合激情| 一区二区在线观看免费| 欧美精品一区二区三区蜜臀| 欧美在线高清视频| 成人av资源在线观看| 久久精品72免费观看| 亚洲欧美另类综合偷拍| 久久―日本道色综合久久| 欧美日产在线观看| 色呦呦日韩精品| www.欧美日韩| 国产成人综合在线| 玖玖九九国产精品| 午夜欧美一区二区三区在线播放| 中文一区二区完整视频在线观看| 5858s免费视频成人| 91福利国产成人精品照片| 国产美女视频91| 久久精品国产一区二区| 婷婷综合久久一区二区三区| 亚洲精品福利视频网站| 国产欧美综合色| 国产日产亚洲精品系列| 精品国内二区三区| 日韩午夜电影av| 在线不卡免费av| 欧美喷潮久久久xxxxx| 色拍拍在线精品视频8848| 成人影视亚洲图片在线| 国产乱人伦偷精品视频不卡 | 成人av先锋影音| 国产精品亚洲人在线观看| 久久机这里只有精品| 日本亚洲天堂网| 日韩av一级片| 免费观看91视频大全| 久久国产三级精品| 精品亚洲aⅴ乱码一区二区三区| 免费观看一级特黄欧美大片| 裸体健美xxxx欧美裸体表演| 老汉av免费一区二区三区| 激情综合五月天| 国产91综合一区在线观看| 国产成人高清在线| 国产馆精品极品| 成人av在线一区二区三区| 99国产麻豆精品| 91官网在线观看| 欧美日韩一本到| 日韩午夜激情av| 国产欧美日韩精品在线| 国产精品无遮挡| 亚洲激情网站免费观看| 亚洲一区二区3| 免费在线观看一区| 国产一区二区免费在线| 97精品电影院| 欧美在线影院一区二区| 欧美一区二区视频观看视频| 久久伊99综合婷婷久久伊| 国产精品三级久久久久三级| 亚洲九九爱视频| 蜜桃视频第一区免费观看| 国产精品一二三在| 在线亚洲人成电影网站色www| 欧美日本在线看| 国产三级精品三级在线专区| 亚洲另类春色国产| 免费观看日韩电影| 91年精品国产| 日韩欧美国产麻豆| 中文字幕欧美一| 欧美aⅴ一区二区三区视频| 成人精品国产一区二区4080| 欧美天堂一区二区三区| 欧美tk丨vk视频| 国产精品久久久久久妇女6080 | 麻豆国产一区二区| 99久久精品国产精品久久| 欧美丰满少妇xxxxx高潮对白| 久久青草欧美一区二区三区| 一区二区三区四区亚洲| 国产精品18久久久久久久网站| 91久久久免费一区二区| 久久久亚洲综合| 亚洲成a人片综合在线| av成人动漫在线观看| 欧美成人精品二区三区99精品| 日韩一区中文字幕| 麻豆成人免费电影| 欧美性做爰猛烈叫床潮| 国产精品全国免费观看高清 | 欧美中文字幕亚洲一区二区va在线 | 国产欧美精品一区aⅴ影院| 午夜伊人狠狠久久| 97久久久精品综合88久久| 精品成人在线观看| 日韩av一区二区三区四区| 色综合久久久久网| 日韩一二三区视频| 午夜日韩在线观看| 欧美影院午夜播放| 中文字幕一区二区不卡| 福利一区二区在线| 久久中文字幕电影| 精品午夜久久福利影院| 在线电影欧美成精品| 亚洲成人自拍一区| 欧美视频一区在线| 亚洲免费av高清| 99精品视频一区二区| 国产亚洲va综合人人澡精品| 老汉av免费一区二区三区| 91麻豆精品国产91久久久使用方法 | 欧美自拍丝袜亚洲| 亚洲欧洲日产国码二区| 成人a区在线观看| 中文字幕一区日韩精品欧美| 成人免费黄色大片| 国产精品久久久爽爽爽麻豆色哟哟 | 91精品国产综合久久香蕉的特点| 亚洲第一久久影院|