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

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

?? tmbsl10046.c

?? TDA10046驅動源代碼.TDA10046是PHILIPS的一款DVB-T TUNER
?? C
?? 第 1 頁 / 共 5 頁
字號:
    case tmhalFERfOffsetNull:
        uAutoOffset = 0;
        uOffset = 0x00;
        break;
    case tmhalFERfOffsetPlus125:
    case tmhalFERfOffsetPlus166:
        uAutoOffset = 0;
        uOffset = 0x20;
        break;
    case tmhalFERfOffsetMinus125:
    case tmhalFERfOffsetMinus166:
        uAutoOffset = 0;
        uOffset = 0x40;
        break;
    case tmhalFERfOffsetPlus333:
        uAutoOffset = 0;
        uOffset = 0x60;
        break;
    case tmhalFERfOffsetMinus333:
        uAutoOffset = 0;
        uOffset = 0x80;
        break;
    case tmhalFERfOffsetPlus500:
        uAutoOffset = 0;
        uOffset = 0xA0;
        break;
    case tmhalFERfOffsetMinus500:
        uAutoOffset = 0;
        uOffset = 0xC0;
        break;
    }
    
    // write registers
	g10046Instance[demodUnit].systemFunc.SY_WriteBit(
		g10046Instance[demodUnit].uDemodHwAdd,
		TDA10046_AUTO_IND, TDA10046_AUTO_AUTOOFFSET_BIT, uAutoOffset);
	g10046Instance[demodUnit].systemFunc.SY_WriteBit(
		g10046Instance[demodUnit].uDemodHwAdd,
		TDA10046_IN_CONF1_IND, TDA10046_INCONF1_OFFSET_MSK, uOffset);
	g10046Instance[demodUnit].systemFunc.SY_WriteBit(
		g10046Instance[demodUnit].uDemodHwAdd,
		TDA10046_IN_CONF2_IND, TDA10046_INCONF2_OFFSET_MSK, uOffset << 1);

    // save auto mode
    if (uAutoOffset)
        g10046Instance[demodUnit].sApiFlags.iAutoOffset = 1;
    else
        g10046Instance[demodUnit].sApiFlags.iAutoOffset = 0;

    // extended offset activated
    if (g10046Instance[demodUnit].sConfig.bExtOffset == True)
    {
        //TODO:Extended offset
    }

    //----------------------
    // Frequency
    //----------------------
    if (Tda10046WriteRF(&g10046Instance[demodUnit], uRF, eRFO) == False)
		return TM_FALSE;

    // store the initial value
    g10046Instance[demodUnit].eStartOffset = eRFO;

	// start algo
	g10046Instance[demodUnit].sApiFlags.iStartAlgo = True;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10046GetRF
//
// DESCRIPTION: this function gets the current RF Frequency.
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//				TM_OK
//
// NOTES:       the value sotcked in the object is returned
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046GetRF (
    tmUnitSelect_t      demodUnit,		// I: Demod unit number
    UInt32			    *puRF,			// O: RF frequency (KHz)
	tmhalFERfOffset_t   *peRFO			// O: RF offset
)
{
    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10046_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10046Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Implementation
    //----------------------
	*puRF = g10046Instance[demodUnit].sCurrentChannel.uRF;
	*peRFO = g10046Instance[demodUnit].sCurrentChannel.eRFO;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10046SetCS
//
// DESCRIPTION: this function set the channel spacing
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TMBSL_ERR_DEMOD_BAD_PARAMETER
//				TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046SetCS (
    tmUnitSelect_t      demodUnit,		//  I: Demod unit number
    UInt32			    uCS				//  I: Channel spacing (hertz)
)
{
    UInt32 a_uTimeWref[5], uGpioSpDs1Byte, uWref, uInvWref;

    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10046_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10046Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

	// test the parameter value
	if (uCS < TDA10046_CS_MIN || uCS > TDA10046_CS_MAX)
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Implementation
    //----------------------
    switch (uCS)
    {
    case 8000000:
        uWref = g10046Instance[demodUnit].uWref8;
        uInvWref = g10046Instance[demodUnit].uInvWref8;
        uGpioSpDs1Byte = 0xFF;
        break;
    case 7000000:
        uWref = g10046Instance[demodUnit].uWref7;
        uInvWref = g10046Instance[demodUnit].uInvWref7;
        uGpioSpDs1Byte = 0x00;
        break;
    case 6000000:
        uWref = g10046Instance[demodUnit].uWref6;
        uInvWref = g10046Instance[demodUnit].uInvWref6;
        uGpioSpDs1Byte = 0x00;
        break;
    default :
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;
    }

    // build register values
    a_uTimeWref[0] = (UInt32)(uInvWref >> 4);
    a_uTimeWref[1] = (UInt32)((uInvWref << 2 | uWref >> 24) & 0x3F);
    a_uTimeWref[2] = (UInt32)((uWref >> 16) & 0xFF);
    a_uTimeWref[3] = (UInt32)((uWref >> 8) & 0xFF);
    a_uTimeWref[4] = (UInt32)(uWref & 0xFF);

    // set the tuner in case of saw filter switching
	g10046Instance[demodUnit].tunerFunc.setCfgFunc(
        g10046Instance[demodUnit].eTunerUnit,
        tmhalFETunerBandwidth , uCS);

    // write the wref registers
	g10046Instance[demodUnit].systemFunc.SY_Write(
		g10046Instance[demodUnit].uDemodHwAdd,
        TDA10046_TIME_WREF_1_IND, 5, a_uTimeWref);

    // set the GPIO1 pin for external devices
	g10046Instance[demodUnit].systemFunc.SY_Write(
        g10046Instance[demodUnit].uDemodHwAdd,
        TDA10046_GPIO_SP_DS1_IND, 1, &uGpioSpDs1Byte);

    // update current config
	g10046Instance[demodUnit].sCurrentChannel.uCS = uCS;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10046GetCS
//
// DESCRIPTION: this function returns the channel spacing
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//				TM_OK
//
// NOTES:       the value stored in the object is returned
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046GetCS (
    tmUnitSelect_t      demodUnit,			//  I: Demod unit number
    UInt32			    *puCS				//  I: Channel Spacing (Hertz)
)
{
    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10046_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10046Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Implementation
    //----------------------
	*puCS = g10046Instance[demodUnit].sCurrentChannel.uCS;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10046SetSI
//
// DESCRIPTION: this function programs the spectral inversion
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//              TMBSL_ERR_DEMOD_BAD_PARAMETER
//				TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046SetSI (
    tmUnitSelect_t      demodUnit,			//  I: Demod unit number
	tmhalFESpectrum_t	eSI 				//  I: Spectral Inversion
)
{
    UInt32 uSi;

    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10046_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10046Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

	// test the parameter value
	if (eSI >= tmhalFESpectralInvMax || eSI == tmhalFESpectrumAuto)
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Implementation
    //----------------------
	if (eSI == tmhalFESpectrumInverted)
        uSi = TDA10046_CONFC1_INVQ_BIT;
    else
		uSi = 0;

	// check if I/Q are swapped outside the chip
    if (g10046Instance[demodUnit].sConfig.bIQ_Swapped)
	{
        // invert
        if (uSi == 0)
            uSi = TDA10046_CONFC1_INVQ_BIT;
        else
            uSi = 0;
    }

    // write the spectral inversion
	g10046Instance[demodUnit].systemFunc.SY_WriteBit(
		g10046Instance[demodUnit].uDemodHwAdd, 
		TDA10046_CONF_C1_IND, TDA10046_CONFC1_INVQ_BIT, uSi);

    // update value
	g10046Instance[demodUnit].sCurrentChannel.eSI = eSI;

	// start algo
	g10046Instance[demodUnit].sApiFlags.iStartAlgo = True;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10046GetSI
//
// DESCRIPTION: this function reads the spectral inversion regarding to the value of the 
//              IQswapped at the input of the tuner.
//				0: no spectral inversion else spectral inversion.
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//				TM_OK
//
// NOTES:       the register is readed each time
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046GetSI (
    tmUnitSelect_t      demodUnit,			//  I: Demod unit number
	tmhalFESpectrum_t	*peSI    			//  O: Spectral Inversion
)
{
    //UInt32 uSi;

    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10046_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10046Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Implementation
    //----------------------
	*peSI = g10046Instance[demodUnit].sCurrentChannel.eSI;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10046SetVRHP
//
// DESCRIPTION: this function programs the viterbi rate for the high priority channel
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//              TMBSL_ERR_DEMOD_BAD_PARAMETER
//				TM_OK
//
// NOTES:       the auto mode is managed by Tda10046UseTPSbit()
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046SetVRHP (
    tmUnitSelect_t          demodUnit,			//  I: Demod unit number
	tmhalFEDepuncRate_t	    eVRHP				//  I: Viterbi Rate for HP
)
{
    UInt32 uVrHp;

	//----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10046_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10046Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

	// test the parameter value
	if (eVRHP >= tmhalFEDepuncRateMax)
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Implementation
    //----------------------
    switch (eVRHP)
    {
    case tmhalFEDepuncRateAuto:
        break;
    case tmhalFEDepuncRate12:
        uVrHp = 0x00;
        break;
    case tmhalFEDepuncRate23:
        uVrHp = 0x01;
        break;
    case tmhalFEDepuncRate34:
        uVrHp = 0x02;
        break;
    case tmhalFEDepuncRate56:
        uVrHp = 0x03;
        break;
    case tmhalFEDepuncRate78:
        uVrHp = 0x04;
        break;
    default:
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;
    }

    // write High Priority inner code rate

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美男男青年gay1069videost| 香蕉影视欧美成人| 国产成人免费av在线| 精品国产1区2区3区| 精品一区二区精品| 2024国产精品| 成人美女视频在线观看| 亚洲欧美一区二区三区孕妇| 日本丰满少妇一区二区三区| 无吗不卡中文字幕| 精品国产一区久久| 粉嫩欧美一区二区三区高清影视| 国产精品国产三级国产普通话蜜臀| 91在线观看下载| 亚洲成人免费电影| 日韩三级电影网址| 成人高清免费在线播放| 亚洲毛片av在线| 在线观看91精品国产麻豆| 久久精品国产99国产精品| 欧美激情一区二区三区四区| 日本道精品一区二区三区 | 色网综合在线观看| 亚洲成人在线免费| 久久久99久久精品欧美| 色8久久人人97超碰香蕉987| 日韩高清电影一区| 亚洲国产精品高清| 欧美日韩一区国产| 国产传媒久久文化传媒| 亚洲一区二区四区蜜桃| 久久无码av三级| 欧美日韩一区高清| 高清免费成人av| 日本不卡不码高清免费观看| 国产精品乱码一区二区三区软件| 在线电影欧美成精品| 成人免费福利片| 久久精品国产99久久6| 亚洲三级在线免费观看| 精品国产百合女同互慰| 色婷婷国产精品| 国产麻豆精品一区二区| 五月激情六月综合| 亚洲欧美日韩久久| 国产午夜精品久久久久久免费视| 欧美久久久久久久久| 99国产精品久| 国产成人综合在线播放| 天堂午夜影视日韩欧美一区二区| 国产精品国产三级国产普通话三级| 91黄色免费观看| 成人免费视频播放| 韩国欧美国产1区| 肉色丝袜一区二区| 亚洲一区日韩精品中文字幕| 久久蜜桃av一区二区天堂| 91精品久久久久久久91蜜桃| 在线中文字幕一区二区| 成人网男人的天堂| 国产精品亚洲第一区在线暖暖韩国| 水野朝阳av一区二区三区| 一区二区三区高清| 中文字幕在线一区| 欧美国产一区二区在线观看| 精品国产a毛片| 91精品福利在线一区二区三区| 色婷婷精品久久二区二区蜜臂av | 免费的成人av| 亚洲h动漫在线| 亚洲制服丝袜在线| 亚洲精品乱码久久久久久黑人 | 不卡的电影网站| 国产精品 欧美精品| 狠狠色综合日日| 激情综合亚洲精品| 精品一区二区三区欧美| 久久99国产精品麻豆| 久久99精品久久久久婷婷| 老司机免费视频一区二区三区| 日本成人在线看| 免费成人美女在线观看| 日本不卡123| 精品在线视频一区| 国产一本一道久久香蕉| 国产精品1024| 成人午夜精品一区二区三区| 国产大陆a不卡| 9久草视频在线视频精品| 97精品视频在线观看自产线路二| av电影一区二区| 一本大道av一区二区在线播放| 色综合久久久网| 欧美日韩一级二级| 日韩欧美国产一二三区| 久久精品亚洲乱码伦伦中文| 国产精品久久久久三级| 亚洲一区二区在线免费观看视频| 午夜亚洲国产au精品一区二区| 青娱乐精品视频在线| 精品一区二区三区久久久| 国产91丝袜在线观看| 91尤物视频在线观看| 欧美日韩国产成人在线91| 欧美成人高清电影在线| 欧美国产1区2区| 亚洲免费视频成人| 秋霞成人午夜伦在线观看| 久久99精品国产麻豆婷婷| 国产福利精品一区| 在线观看日韩精品| 精品久久久久久久人人人人传媒 | 成人综合婷婷国产精品久久蜜臀| 91麻豆精东视频| 欧美一区二区私人影院日本| 久久精子c满五个校花| 亚洲综合激情网| 激情综合色综合久久| 91视频国产观看| 精品欧美久久久| 一区二区三区欧美日韩| 另类调教123区| 色8久久精品久久久久久蜜 | 久久久久久久久久久久久久久99 | 日韩三级在线观看| 国产精品久久午夜| 日韩av电影天堂| 一本大道av一区二区在线播放| 精品国产免费一区二区三区四区| 亚洲丝袜制服诱惑| 国产乱码精品一区二区三区五月婷 | 91丨porny丨首页| 欧美tk丨vk视频| 亚洲一区二区成人在线观看| 国产成人丝袜美腿| 欧美一区二区在线免费播放| 中文字幕在线播放不卡一区| 精品亚洲国产成人av制服丝袜 | 亚洲视频一二区| 精品一区二区久久久| 欧美午夜精品久久久久久超碰 | 欧美日韩三级一区二区| 国产欧美一区二区精品久导航| 日本不卡中文字幕| 在线亚洲精品福利网址导航| 欧美激情资源网| 国产麻豆视频一区二区| 欧美电影在线免费观看| 综合色中文字幕| 成人黄色777网| 国产欧美一区二区精品久导航 | 久久色视频免费观看| 日韩国产欧美视频| 欧美日韩免费电影| 亚洲自拍偷拍av| 91福利精品视频| 亚洲视频精选在线| 不卡的av在线| 国产精品久久久久久久久搜平片| 狠狠久久亚洲欧美| 久久众筹精品私拍模特| 久久精品免费看| 欧美成人一区二区三区在线观看| 天天色综合成人网| 91精品国产欧美日韩| 午夜a成v人精品| 欧美一级黄色大片| 蜜桃传媒麻豆第一区在线观看| 欧美喷潮久久久xxxxx| 亚洲高清不卡在线观看| 欧美视频在线一区二区三区| 亚洲成人自拍网| 欧美日韩国产在线播放网站| 日韩精品久久久久久| 欧美高清视频www夜色资源网| 五月综合激情网| 欧美一区三区四区| 国内精品国产成人| 国产农村妇女精品| 91美女在线视频| 亚洲国产日韩一区二区| 欧美精品日韩精品| 蜜臀av国产精品久久久久| 精品久久久网站| 成人午夜视频网站| 亚洲男人都懂的| 欧美日韩精品系列| 美女高潮久久久| 国产欧美精品国产国产专区| 一本久久a久久免费精品不卡| 一区二区三区av电影| 91精品国产综合久久香蕉麻豆| 精品一区二区三区免费毛片爱| 国产欧美日韩视频在线观看| 色综合天天综合网天天狠天天| 亚洲国产精品久久人人爱| 日韩精品一区二区三区在线播放 | 欧美va亚洲va在线观看蝴蝶网| 国产成人精品aa毛片| 亚洲欧美区自拍先锋|