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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? tuner5byte.c

?? 用于DRX3973或DRX39系列的芯片的控制
?? C
字號(hào):
/**
* \file $Id: tuner5byte.c,v 1.6 2005/10/18 16:38:15 paulja Exp $
*
* \brief DRXBSP tuner implementation for 5byte tuners.
*
* \author Carlo Delhez
*/

/*
* $(c) 2004-2005 Micronas GmbH. All rights reserved.
*
* This software and related documentation (the 'Software') are intellectual
* property owned by Micronas and are copyright of Micronas, unless specifically
* noted otherwise.
*
* Any use of the Software is permitted only pursuant to the terms of the
* license agreement, if any, which accompanies, is included with or applicable
* to the Software ('License Agreement') or upon express written consent of
* Micronas. Any copying, reproduction or redistribution of the Software in
* whole or in part by any means not in accordance with the License Agreement
* or as agreed in writing by Micronas is expressly prohibited.
*
* THE SOFTWARE IS WARRANTED, IF AT ALL, ONLY ACCORDING TO THE TERMS OF THE
* LICENSE AGREEMENT. EXCEPT AS WARRANTED IN THE LICENSE AGREEMENT THE SOFTWARE
* IS DELIVERED 'AS IS' AND MICRONAS HEREBY DISCLAIMS ALL WARRANTIES AND
* CONDITIONS WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
* AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIT
* ENJOYMENT, TITLE AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL
* PROPERTY OR OTHER RIGHTS WHICH MAY RESULT FROM THE USE OR THE INABILITY
* TO USE THE SOFTWARE.
*
* IN NO EVENT SHALL MICRONAS BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
* INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF OR THE
* INABILITY TO USE THE SOFTWARE, EVEN IF MICRONAS HAS BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING FROM
* MICRONAS' NEGLIGENCE.                                                        $
*
*/
/*------------------------------------------------------------------------------
INCLUDE FILES
------------------------------------------------------------------------------*/

#include "tuner5byte.h"

/*------------------------------------------------------------------------------
DEFINES
------------------------------------------------------------------------------*/

/* DEMOD_MAX_FREQ_OFFSET defines the margin on centerFrequency for deciding
   which TCU-entry to use; margin determined by frequency mismatch in
   transmitted or received signal that can be handled by demod
*/

#define DEMOD_MAX_FREQ_OFFSET 500 /* kHz */

/*------------------------------------------------------------------------------
STATIC VARIABLES
------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------
GLOBAL VARIABLES
------------------------------------------------------------------------------*/
TUNERFunc_t TUNER5BYTEFunctions_g = {
   TUNER_5BYTE_Open,
   TUNER_5BYTE_Close,
   TUNER_5BYTE_SetFrequency,
   TUNER_5BYTE_GetFrequency,
   TUNER_5BYTE_LockStatus,
   DRXBSP_TUNER_DefaultI2CWriteRead
};

/*------------------------------------------------------------------------------
STRUCTURES
------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------
FUNCTIONS
------------------------------------------------------------------------------*/

/**
* \fn DRXStatus_t TUNER_5BYTE_Open( pTUNERInstance_t tuner )
* \brief Open a tuner.
* \return DRXStatus_t Return status.
* \retval DRX_STS_OK Opened tuner with success.
* \retval DRX_STS_ERROR Something went wrong.
*/
DRXStatus_t
TUNER_5BYTE_Open( pTUNERInstance_t tuner )
{
   DRXStatus_t err;
   u8_t status;
   pTUNER5BYTEControlTable_t TCT;
   u16_t i, nTCT;

   pTUNER5BYTEData_t extAttr = (pTUNER5BYTEData_t) tuner->myExtAttr;

   nTCT = extAttr->controlTables;
   if ( ( nTCT == 0 ) || ( extAttr->controlTable == NULL ) )
   {
      /* no TCT present */
      return DRX_STS_ERROR;
   }

   for ( i=0; i < nTCT; i++ )
   {
      TCT = &(extAttr->controlTable[i]);

      if ( ( TCT->refFreqNumerator   == ( DRXFrequency_t )0 ) ||
           ( TCT->refFreqDenominator == 0 ) )
      {
         /* zero component in reference frequency, cannot do calculations */
         return DRX_STS_ERROR;
      }
      if ( TCT->ControlUnits == NULL )
      {
         /* no TCU present */
         return DRX_STS_ERROR;
      }
   }

   /* check presence of tuner by reading status */

   err = tuner->myFunct->i2cWriteReadFunc( tuner, NULL, 0, 0, &(tuner->myI2CDevAddr), 1, &status );
   if ( err != DRX_STS_OK )
   {
      return( err );
   }

   return DRX_STS_OK;
}

/*============================================================================*/

/**
* \fn DRXStatus_t DRXBSP_TUNER_Close( pTUNERInstance_t tuner )
* \brief Close a tuner.
* \return DRXStatus_t Return status.
* \retval DRX_STS_OK Closed tuner with success.
* \retval DRX_STS_ERROR Something went wrong.
*/
DRXStatus_t
TUNER_5BYTE_Close( pTUNERInstance_t tuner )
{
   return( DRX_STS_OK );
}

/*============================================================================*/

/**
* \fn DRXStatus_t DRXBSP_TUNER_SetFrequency( pTUNERInstance_t tuner,
                                             TUNERMode_t mode,
                                             DRXFrequency_t centerFrequency )
* \brief Program tuner at given center frequency for given mode.
* \return DRXStatus_t Return status.
* \retval DRX_STS_OK Programmed tuner successfully.
* \retval DRX_STS_ERROR Something went wrong.
*/
DRXStatus_t
TUNER_5BYTE_SetFrequency( pTUNERInstance_t tuner,
                           TUNERMode_t      mode,
                           DRXFrequency_t   centerFrequency )
{
   u16_t i;
   u16_t telegramsSent = 0;
   pTUNER5BYTEData_t extAttr = (pTUNER5BYTEData_t) tuner->myExtAttr;

   if ( ( centerFrequency < ( tuner->myCommonAttr->minFreqRF - DEMOD_MAX_FREQ_OFFSET ) ) ||
        ( centerFrequency > ( tuner->myCommonAttr->maxFreqRF + DEMOD_MAX_FREQ_OFFSET ) ) )
   {
      /* frequency out of range for this tuner */
      return DRX_STS_ERROR;
   }

   /* Clear sub-mode flags */
   mode &= ~TUNER_MODE_SUBALL;

   /* Check if sub-mode flag needs to be added */
   if ( tuner->myCommonAttr->subModes > 1 )
   {
      /* More than one submode; verify validity of sub-mode */
      if ( ( tuner->myCommonAttr->subMode  >= TUNER_MODE_SUB_MAX ) ||
           ( tuner->myCommonAttr->subMode  >= tuner->myCommonAttr->subModes )  )
      {
         /* invalid submode */
         return DRX_STS_ERROR;
      }
      /* set sub-mode flag */
      mode |= ( TUNER_MODE_SUB0 << tuner->myCommonAttr->subMode );
   }

   /* Check all control tables for desired mode: multiple packets may be sent */
   for ( i=0; i < extAttr->controlTables ; i++ )
   {
      pTUNER5BYTEControlTable_t TCT = &extAttr->controlTable[i];

      if ( ( TCT->modes & mode ) == mode )
      {
         /* this controlTable supports -at least- the requested mode bits     */

         DRXFrequency_t oscillatorFrequency;
         u32_t divider;
         u8_t  tunerTelegram[4];
         pTUNER5BYTEControlUnit_t TCU;
         DRXStatus_t err;

         oscillatorFrequency = centerFrequency + TCT->outputFreq;
         divider = ( oscillatorFrequency * TCT->refFreqDenominator +
                     ( TCT->refFreqNumerator >> 1 ) ) / TCT->refFreqNumerator;

         if ( divider >= (1<<15) )
         {
            /* divider out-of-range, only 15-bit value supported */
            return DRX_STS_ERROR;
         }

         tunerTelegram[0] = (u8_t)( ( divider >> 8 ) & 0x7F );
         tunerTelegram[1] = (u8_t)(   divider        & 0xFF );

         TCU = TCT->ControlUnits;
         while ( ( centerFrequency - DEMOD_MAX_FREQ_OFFSET ) > TCU->maxFreq )
         {
            TCU++;
         }
         tunerTelegram[2] = TCU->CB1;
         tunerTelegram[3] = TCU->CB2;

         err = tuner->myFunct->i2cWriteReadFunc( tuner, &tuner->myI2CDevAddr, 4, tunerTelegram,
                                       NULL, 0, NULL );
         if ( err != DRX_STS_OK )
         {
            return( err );
         }

         telegramsSent++;

         /* preserve information for GetFrequency call */
         tuner->myCommonAttr->RFfrequency = -TCT->outputFreq +
          ( divider * TCT->refFreqNumerator + ( TCT->refFreqDenominator >> 1 ) )
                  / TCT->refFreqDenominator;

         tuner->myCommonAttr->IFfrequency = TCT->outputFreq;
      }
   }

   if ( telegramsSent == 0 ) {
      /* no match found in control tables for the mode requested */
      return DRX_STS_ERROR;
   }
   return( DRX_STS_OK );
}

/*============================================================================*/

/**
* \fn DRXStatus_t DRXBSP_TUNER_GetFrequency( pTUNERInstance_t tuner,
                                             pDRXFrequency_t  RFfrequency,
                                             pDRXFrequency_t  IFfrequency )
* \brief Get tuned center frequency.
* \return DRXStatus_t Return status.
* \retval DRX_STS_OK Returned frequency successfully.
* \retval DRX_STS_ERROR Something went wrong.
*/
DRXStatus_t
TUNER_5BYTE_GetFrequency( pTUNERInstance_t tuner,
                           pDRXFrequency_t  RFfrequency,
                           pDRXFrequency_t  IFfrequency )
{
   if ( RFfrequency != NULL )
   {
      *RFfrequency = tuner->myCommonAttr->RFfrequency;
   }
   if ( IFfrequency != NULL )
   {
      *IFfrequency = tuner->myCommonAttr->IFfrequency;
   }
   return( DRX_STS_OK );
}

/*============================================================================*/

/**
* \fn DRXStatus_t DRXBSP_TUNER_LockStatus( pTUNERInstance_t tuner,
      pTUNERLockStatus_t lockStat )
* \brief Get tuner locking status.
* \return DRXStatus_t Return status.
* \retval DRX_STS_OK Acquired locking status successfully.
* \retval DRX_STS_ERROR Something went wrong.
*/
DRXStatus_t
TUNER_5BYTE_LockStatus( pTUNERInstance_t    tuner,
                         pTUNERLockStatus_t  lockStat )
{
   DRXStatus_t err;
   u8_t status;
   pTUNER5BYTEData_t extAttr = (pTUNER5BYTEData_t) tuner->myExtAttr;

   /* read tuner status */
   err = tuner->myFunct->i2cWriteReadFunc( tuner, NULL, 0, 0, &tuner->myI2CDevAddr, 1, &status );
   if ( err != DRX_STS_OK )
   {
      return( err );
   }
   /* report lock */
   if ( lockStat != NULL )
   {
      *lockStat = TUNER_NOT_LOCKED;
      if ( ( status & extAttr->lockMask ) == extAttr->lockValue )
      {
         *lockStat = TUNER_LOCKED;
      }
   }
   return DRX_STS_OK;
}

/* End of file */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色香色香欲天天天影视综合网| 日韩精品三区四区| 亚洲精品中文在线| 日韩中文字幕亚洲一区二区va在线| 麻豆精品在线看| 丁香啪啪综合成人亚洲小说| 色综合天天综合狠狠| 欧美电影一区二区三区| 国产午夜亚洲精品羞羞网站| 一区二区三区免费网站| 久久精品99国产精品| www.日韩av| 日韩一级黄色大片| 国产精品伦一区二区三级视频| 亚洲成人免费看| 国产大片一区二区| 欧美日韩国产片| 国产精品免费av| 免费不卡在线视频| 色婷婷激情一区二区三区| 欧美成人艳星乳罩| 亚洲精选一二三| 国产激情视频一区二区三区欧美 | 国产精品美女一区二区三区| 五月天一区二区| 丁香六月综合激情| 欧美一级欧美三级在线观看| 18涩涩午夜精品.www| 久久激情五月激情| 欧美系列在线观看| 国产丝袜在线精品| 免费久久精品视频| 欧洲在线/亚洲| 国产欧美日韩在线视频| 日本vs亚洲vs韩国一区三区| 91理论电影在线观看| 久久嫩草精品久久久精品一| 天天综合天天做天天综合| 99久久精品情趣| 久久久久国产精品麻豆| 免费成人你懂的| 欧美日韩国产综合视频在线观看| 国产精品久久久久久久岛一牛影视| 久99久精品视频免费观看| 欧美探花视频资源| 亚洲人成亚洲人成在线观看图片| 国产九九视频一区二区三区| 日韩视频中午一区| 亚洲高清视频在线| 色噜噜久久综合| 综合自拍亚洲综合图不卡区| 国产成人综合网| www成人在线观看| 美女尤物国产一区| 在线不卡欧美精品一区二区三区| 一个色在线综合| 色综合久久久网| 亚洲欧洲国产日韩| 99久久综合精品| 国产精品欧美一区二区三区| 国产精品一级二级三级| 久久人人爽爽爽人久久久| 久久国内精品自在自线400部| 91精品国产综合久久久久久久久久 | 激情偷乱视频一区二区三区| 欧美日韩国产成人在线免费| 亚洲自拍偷拍网站| 日本一区二区动态图| 久久精品理论片| 欧美大白屁股肥臀xxxxxx| 奇米精品一区二区三区四区| 91精品欧美福利在线观看| 日韩成人免费在线| 日韩欧美综合一区| 麻豆精品久久精品色综合| 日韩欧美一级片| 精品亚洲成a人在线观看| 精品国产乱码久久久久久蜜臀| 久久精品国产亚洲高清剧情介绍| 日韩欧美国产一二三区| 麻豆成人av在线| www久久久久| 成人18视频日本| 亚洲欧美日韩一区二区| 在线观看欧美黄色| 日韩精品亚洲一区二区三区免费| 欧美日韩高清不卡| 久久99久国产精品黄毛片色诱| 久久久国产精品麻豆| av在线综合网| 夜夜嗨av一区二区三区中文字幕| 欧美日韩一区三区四区| 日本欧洲一区二区| 久久中文娱乐网| 成人国产精品免费网站| 亚洲视频免费观看| 欧美精品一卡二卡| 精品一区二区三区在线观看国产 | 免费的成人av| 国产亚洲欧美激情| 91在线一区二区三区| 同产精品九九九| 精品免费日韩av| youjizz久久| 91小视频免费观看| 午夜伦理一区二区| 久久精品人人做人人爽人人| 99国产精品久久久久久久久久久| 亚洲丰满少妇videoshd| 精品少妇一区二区三区在线视频 | 国产精品久久毛片| 欧美在线不卡视频| 狠狠色狠狠色综合日日91app| 国产精品你懂的在线欣赏| 在线观看91精品国产入口| 精品一区二区三区免费观看| ...中文天堂在线一区| 在线观看91av| 成人国产电影网| 日本中文在线一区| 国产精品传媒入口麻豆| 5858s免费视频成人| 成人午夜av在线| 日韩电影在线观看一区| 中文字幕av一区二区三区免费看| 欧美军同video69gay| 成人免费视频免费观看| 日本不卡123| 亚洲人成影院在线观看| 欧美成人福利视频| 91黄色免费观看| 国产成a人亚洲| 五月婷婷综合激情| 国产精品久久午夜夜伦鲁鲁| 日韩一二三区视频| 色婷婷国产精品| 国产精品123| 日本不卡视频一二三区| 亚洲女厕所小便bbb| 久久久影视传媒| 欧美一三区三区四区免费在线看| av电影在线观看完整版一区二区| 久久机这里只有精品| 亚洲成人第一页| 国产精品福利av| 久久久久久久综合| 91精品国产欧美一区二区| 色狠狠一区二区三区香蕉| 粉嫩一区二区三区在线看| 久久精品国产99国产精品| 亚洲制服欧美中文字幕中文字幕| 国产精品水嫩水嫩| 2014亚洲片线观看视频免费| 欧美另类一区二区三区| 色94色欧美sute亚洲13| 成人免费黄色在线| 国产乱妇无码大片在线观看| 免费成人av在线| 午夜精品一区二区三区电影天堂| 亚洲免费av高清| 成人欧美一区二区三区黑人麻豆 | 免播放器亚洲一区| 亚洲国产精品嫩草影院| 亚洲欧美电影一区二区| 国产精品久久久99| 欧美国产一区视频在线观看| 久久综合狠狠综合久久综合88| 日韩一级免费观看| 制服丝袜中文字幕一区| 欧美日韩国产免费| 欧美日韩激情一区二区三区| 在线看不卡av| 91精品1区2区| 欧美在线观看一区| 欧美日韩国产综合视频在线观看 | 亚洲综合在线观看视频| 亚洲美女视频在线观看| 亚洲三级小视频| 亚洲精品菠萝久久久久久久| 亚洲欧美视频在线观看视频| 亚洲日本一区二区三区| 亚洲欧美日韩国产中文在线| 亚洲日本青草视频在线怡红院 | 99久久免费国产| 久久久精品黄色| 欧美精品一区二区精品网| 精品国产免费一区二区三区香蕉| 欧美一区二区三区日韩视频| 欧美一卡2卡三卡4卡5免费| 日韩午夜在线观看视频| 日韩欧美一级片| 久久久国产精华| 国产精品亲子乱子伦xxxx裸| 亚洲三级电影网站| 亚洲综合图片区| 日本亚洲电影天堂| 国产综合成人久久大片91| 国v精品久久久网| 91网站最新网址| 欧美日韩久久久一区|