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

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

?? tuner.c

?? 這是DVB tuner驅動部分和其它相關的源碼和一些技術資料文檔.
?? C
?? 第 1 頁 / 共 4 頁
字號:
    if (Tuner_p->BandList.BandList != NULL)        memory_deallocate((partition_t *)Tuner_p->InitParams.DriverPartition,                          Tuner_p->BandList.BandList                         );    if (Tuner_p->ThresholdList.ThresholdList != NULL)        memory_deallocate((partition_t *)Tuner_p->InitParams.DriverPartition,                          Tuner_p->ThresholdList.ThresholdList                         );    if (Tuner_p->ThresholdHits != NULL)        memory_deallocate((partition_t *)Tuner_p->InitParams.DriverPartition,                          Tuner_p->ThresholdHits                         );    /* Terminate TNR device */    Error = TNR_Term(Tuner_p->TunerHandle);    if (Error == TUNER_NO_ERROR)    {        /* Terminate DEMOD device */        Error = DEMOD_Term(Tuner_p->DemodHandle);        /* Terminate SAT device */        if (Error == TUNER_NO_ERROR)            Error = SAT_Term(Tuner_p->SatHandle);    }    return Error;} /* TUNER_Term() *//*****************************************************************************Name: TUNER_AbortScan()Description:    This routine will abort the current scan step.    NOTE:   This call will block until it is able to safely abort the            current scan operation -- a callback may be invoked if the            caller has set one up.Parameters:    Tuner_p, pointer to the tuner control block.Return Value:    TUNER_NO_ERROR, the operation completed without error.See Also:    Nothing.*****************************************************************************/TUNER_ErrorCode_t TUNER_AbortScan(TUNER_ControlBlock_t *Tuner_p){    TUNER_ErrorCode_t Error = TUNER_NO_ERROR;    /* Lock out the scan task whilst we modify the status code.     */    semaphore_wait(&Tuner_p->ScanTask.GuardSemaphore);    /* Forcibly unlock the tuner  */    Tuner_p->TunerInfo.Status = STTUNER_STATUS_UNLOCKED;    LNBPowerDown(Tuner_p);              /* Try to power down LNB */    /* Release semaphore -- allows scan task to resume */    semaphore_signal(&Tuner_p->ScanTask.GuardSemaphore);    return Error;} /* TUNER_AbortScan() *//*****************************************************************************Name: TUNER_StartScan()Description:    This routine will commence a new scan based on the current scan list.    The scan list is first examined to ensure it is valid, if not an error    is generated.  If the scan list is ok, the scan task is awoken and the    first scan step will be started.    NOTE:   If a scan is already in progress, the current scan will be            aborted and re-started at the next available opportunity.Parameters:    Tuner_p, pointer to the tuner control block.Return Value:    TUNER_ERROR_BAD_PARAMETER,      the scan list is invalid.    TUNER_NO_ERROR,                 the operation completed without error.See Also:    Nothing.*****************************************************************************/TUNER_ErrorCode_t TUNER_StartScan(TUNER_ControlBlock_t *Tuner_p){    TUNER_ErrorCode_t Error = TUNER_NO_ERROR;    U32 SymbolMin, i;    STTUNER_Scan_t *Scan_p;    /* Wakeup the scan task and lock out the scan task whilst     * we modify the status code.     */    semaphore_wait(&Tuner_p->ScanTask.GuardSemaphore);    semaphore_signal(&Tuner_p->ScanTask.TimeoutSemaphore);    /* Set the scan status and reset the scan element pointer */    Tuner_p->TunerInfo.Status = STTUNER_STATUS_SCANNING;    /* First calculate the minimum symbol rate for the scan */    SymbolMin = ((U32)~0);    Scan_p = Tuner_p->ScanList.ScanList;    for (i = 0; i < Tuner_p->ScanList.NumElements;         i++, Scan_p++)    {        if (Scan_p->SymbolRate < SymbolMin)            SymbolMin = Scan_p->SymbolRate;    }    /* Store the minimum symbol width for future reference */    Tuner_p->SymbolWidthMin = ((SymbolMin / 1000) * SCALED_DIG_ROLL_OFF) /                              (DIG_ROLL_OFF_SCALING);    /* Set frequency step to default */    Tuner_p->ScanInfo.FrequencyStep = (Tuner_p->SymbolWidthMin / 2);    /* Setup scan parameters is we're using the scan list */    if (!Tuner_p->ScanExact)    {        Tuner_p->ScanInfo.Scan_p = Tuner_p->ScanList.ScanList;        Tuner_p->ScanInfo.ScanIndex = 0;        Tuner_p->ScanInfo.NextFrequency = Tuner_p->ScanInfo.FrequencyStart;        Tuner_p->ScanInfo.PlrMask = STTUNER_PLR_HORIZONTAL; /* H first */        /* Find out what polarizations are in use */        Tuner_p->PolarizationMask = 0;        for (i = 0, Scan_p = Tuner_p->ScanList.ScanList;             i < Tuner_p->ScanList.NumElements;             i++, Scan_p++)        {            Tuner_p->PolarizationMask |= Scan_p->Polarization;        }    }    else    {        /* We only have one scan parameter for an exact scan */        Tuner_p->ScanInfo.Scan_p = &Tuner_p->SingleScan;        Tuner_p->ScanInfo.PlrMask = Tuner_p->ScanInfo.Scan_p->Polarization;        Tuner_p->ScanInfo.NextFrequency = Tuner_p->ScanInfo.FrequencyStart;        Tuner_p->PolarizationMask = Tuner_p->ScanInfo.Scan_p->Polarization;        Tuner_p->FECRates = Tuner_p->ScanInfo.Scan_p->FECRates;    }    /* Ensure polarization mask is within device capabilities */    Tuner_p->PolarizationMask &= Tuner_p->Capability.Polarization;    /* Release semaphore -- allows scan task to resume */    semaphore_signal(&Tuner_p->ScanTask.GuardSemaphore);    return Error;} /* TUNER_StartScan() *//*****************************************************************************Name: TUNER_ContinueScan()Description:    This routine will proceed to the next scan step in the scan list.    The scan task must be in the "not found" or "locked" state in order for    this call to succeed, otherwise an error will be returned.    NOTE:   If the end of the scan list has been encountered, then a call            to TUNER_StartScan() must be done.Parameters:    Tuner_p,    pointer to the tuner control block.Return Value:    TUNER_ERROR_BAD_PARAMETER,  invalid scan status, or end of scan list.    TUNER_NO_ERROR,             the operation completed without error.See Also:    TUNER_StartScan()*****************************************************************************/TUNER_ErrorCode_t TUNER_ContinueScan(TUNER_ControlBlock_t *Tuner_p){    TUNER_ErrorCode_t Error = TUNER_NO_ERROR;    /* Wakeup the scan task and lock out the scan task whilst     * we modify the status code.     */    semaphore_wait(&Tuner_p->ScanTask.GuardSemaphore);    semaphore_signal(&Tuner_p->ScanTask.TimeoutSemaphore);    /* A scan may only be continued if the current scan status is     * "locked" or "unlocked". i.e., "not found" implies the end     * of the frequency range has been encountered or a scan has not     * yet started.  "scanning" implies the current scan step has     * not yet completed, therefore it doesn't make sense to     * continue yet.     */    if ((Tuner_p->TunerInfo.Status == STTUNER_STATUS_LOCKED ||         Tuner_p->TunerInfo.Status == STTUNER_STATUS_UNLOCKED))    {        /* The last scan was successful -- so a bigger step         * can be calculated.         */        if (Tuner_p->TunerInfo.Status == STTUNER_STATUS_LOCKED)        {            U32 FrequencyStep, SymbolLocked;            /* Get the current locked symbol rate (Khz) */            SymbolLocked = Tuner_p->ScanInfo.Scan_p->SymbolRate / 1000;            /* Calculate new step size */            FrequencyStep = SymbolLocked * SCALED_DIG_ROLL_OFF /                            (2 * DIG_ROLL_OFF_SCALING) +                        (Tuner_p->SymbolWidthMin / 2);            /* Set the new frequency step to be post incremented */            Tuner_p->ScanInfo.FrequencyStep = FrequencyStep;        }        /* Continue at the next frequency step */        Tuner_p->ScanInfo.ScanIndex = Tuner_p->ScanList.NumElements;        Tuner_p->TunerInfo.Status = STTUNER_STATUS_SCANNING;    }    else    {        /* Unable to continue the scan -- the scan task is in the wrong         * state or the we've reached the end of the scan list.         */        Error = TUNER_ERROR_BAD_PARAMETER;    }    /* Release semaphore -- allows scan task to resume */    semaphore_signal(&Tuner_p->ScanTask.GuardSemaphore);    return Error;} /* TUNER_ContinueScan() *//* Private functions ------------------------------------------------------- *//*****************************************************************************Name: GetCapability()Description:    This routine interrogates the low-level API to establish the    capabilites of the tuner system.    The information is copied into the capability member of the tuner    control block structure.    NOTE: Must be called after all interfaces have been initialized.Parameters:    Tuner_p, pointer to a tuner control block.Return Value:    Nothing.See Also:    Nothing.*****************************************************************************/static void GetCapability(TUNER_ControlBlock_t *Tuner_p){    DEMOD_Capability_t *DemodCaps_p;    SAT_Capability_t *SatCaps_p;    STTUNER_Capability_t *Caps_p;    /* Set up pointers to capability structures */    DemodCaps_p = &Tuner_p->DEMODCapability;    SatCaps_p = &Tuner_p->SatCapability;    Caps_p = &Tuner_p->Capability;    /* Ascertain device type */    Caps_p->Device = Tuner_p->InitParams.Device;    /* Ascertain demod type */    Caps_p->DemodType = Tuner_p->InitParams.DemodType;    /* Ascertain tuner type */    Caps_p->TunerType = Tuner_p->InitParams.TunerType;    /* Ascertain modulation capabilities (DEMOD) */    Caps_p->Modulation = DemodCaps_p->ModulationAvail;    /* Ascertain puncture rates (DEMOD) */    Caps_p->FECRates = DemodCaps_p->FECAvail;    /* Ascertain AGC control caps (DEMOD) */    Caps_p->AGCControl = DemodCaps_p->AGCControl;    /* Ascertain symbol rate (DEMOD) */    Caps_p->SymbolMin = DemodCaps_p->SymbolMin;    Caps_p->SymbolMax = DemodCaps_p->SymbolMax;    /* Ascertain polarization modes (SAT) */    Caps_p->Polarization = SatCaps_p->PolarizationSelect;    /* Measurement settings */    Caps_p->BerMax = MAX_BER;    Caps_p->SignalQualityMax = MAX_SIGNAL_QUALITY;    Caps_p->AgcMax = MAX_AGC;} /* GetCapability() *//*****************************************************************************Name: ScanTask()Description:    This routine should be run in its own thread of execution e.g., OS task.    It is responsible for managing the process of a tuner scan based on    the current working scan list.    The scan task is a state machine that may be in any one of the following    states:    a) "scanning" -- tuner is currently scanning for a signal    b) "locked" -- tuner is locked to a valid signal    c) "unlocked" -- tuner is not locked    d) "not found" -- the last scan failedParameters:    Tuner_p,    a pointer to a tuner control block structure.Return Value:    Nothing.See Also:    TUNER_AbortScan()    TUNER_StartScan()    TUNER_ContinueScan()*****************************************************************************/static void ScanTask(TUNER_ControlBlock_t *Tuner_p){    clock_t clk;    STTUNER_EventType_t Event;    TUNER_ErrorCode_t Error = TUNER_NO_ERROR;    for (;;)    {        /* Calculate wake-up time for next scan process */        clk = time_plus(time_now(),                        ((ST_GetClocksPerSecond() *                          Tuner_p->ScanTask.TimeoutDelayMs)/                         1000));        /* Delay until either we're awoken or the wake-up time comes */        semaphore_wait_timeout(&Tuner_p->ScanTask.TimeoutSemaphore,                               &clk);        /* We are about to enter a critical section of code -- we must not         * allow external interruptions whilst checking the scan status, etc.         */        semaphore_wait(&Tuner_p->ScanTask.GuardSemaphore);        /* If the driver is being terminated then this flag will be set         * to TRUE -- we should cleanly exit the task.         */        if (Tuner_p->ScanTask.DeleteTask)        {            semaphore_signal(&Tuner_p->ScanTask.GuardSemaphore);            break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区视频在线| 日本久久电影网| 99久久精品国产一区二区三区 | 精品国产123| 欧美激情中文字幕| 久久精品国产一区二区| 日本韩国欧美三级| 中文字幕成人在线观看| 精品综合久久久久久8888| 在线观看av不卡| 亚洲成av人影院| 成人激情黄色小说| 国产欧美一区二区三区在线看蜜臀| 一区二区三区免费| 波多野结衣在线aⅴ中文字幕不卡| 日韩一区二区三区电影在线观看 | 99综合影院在线| 精品久久人人做人人爽| 亚洲国产va精品久久久不卡综合| 成人av综合在线| 国产精品九色蝌蚪自拍| 国产精品一区不卡| 国产亚洲一区字幕| 国产精品一区二区久激情瑜伽| 欧美白人最猛性xxxxx69交| 日本aⅴ精品一区二区三区| 欧美日本国产视频| 日韩和欧美的一区| 91精品国产综合久久国产大片| 亚洲国产精品麻豆| 欧美精品丝袜中出| 午夜精品免费在线| 9191久久久久久久久久久| 亚洲3atv精品一区二区三区| 欧美视频你懂的| 一区二区三区精品久久久| 成人免费黄色大片| 自拍偷在线精品自拍偷无码专区| 成人免费观看视频| 亚洲免费观看在线观看| 欧美性生活影院| 亚洲综合免费观看高清完整版 | 欧美老人xxxx18| 午夜电影网一区| 日韩午夜在线观看视频| 精品一区二区三区免费观看| 欧美精品一区二区三| 国产高清视频一区| 亚洲婷婷综合色高清在线| 在线观看区一区二| 免费成人在线观看| 国产人久久人人人人爽| 在线欧美一区二区| 激情综合网av| 最新欧美精品一区二区三区| 日韩精品一区二区三区swag| 狠狠色丁香婷婷综合| 综合网在线视频| 91精品国产福利在线观看| 国产又黄又大久久| 一区二区三区精密机械公司| 日韩一本二本av| 99久久精品免费看| 久久精品国产亚洲高清剧情介绍| 日本一区二区三区dvd视频在线| 色综合久久久久| 久久精品国产99| 亚洲人123区| 精品久久久三级丝袜| 色老汉av一区二区三区| 青青草国产成人av片免费| 久久精品人人做人人综合 | 欧美成人video| 99热国产精品| 久久精品噜噜噜成人88aⅴ| 亚洲男人天堂av| 久久久亚洲综合| 7777精品伊人久久久大香线蕉完整版 | 国产精品影视在线观看| 一区二区三区小说| 亚洲午夜免费电影| 国产人成亚洲第一网站在线播放| 欧美日韩一级视频| 成人做爰69片免费看网站| 麻豆91在线播放免费| 亚洲一线二线三线久久久| 欧美激情一区三区| 欧美一区二区三区视频免费| 91麻豆免费视频| 成人福利视频在线| 狠狠网亚洲精品| 麻豆精品在线看| 青椒成人免费视频| 亚洲午夜免费视频| 亚洲精品视频免费观看| 国产精品免费久久| 久久久久久久久免费| 91精品国产免费久久综合| 欧美午夜精品久久久久久超碰| 国产成人h网站| 国产一区二区不卡在线| 裸体健美xxxx欧美裸体表演| 午夜欧美一区二区三区在线播放| 亚洲欧美日本在线| 日本一区二区电影| 中文字幕不卡的av| 久久久青草青青国产亚洲免观| 欧美一区欧美二区| 4438x成人网最大色成网站| 欧美日韩免费在线视频| 欧美优质美女网站| 91国内精品野花午夜精品| 99精品欧美一区二区三区小说| 国产不卡视频在线播放| 懂色av一区二区三区免费观看 | 午夜亚洲福利老司机| 亚洲午夜三级在线| 亚洲 欧美综合在线网络| 午夜精品福利一区二区三区蜜桃| 亚洲一区二区在线免费看| 亚洲一区二区视频在线| 午夜久久久久久| 久草中文综合在线| 成人免费看片app下载| 成人黄页在线观看| 99久久精品国产导航| 91精品91久久久中77777| 色综合视频在线观看| 欧美另类高清zo欧美| 26uuu精品一区二区三区四区在线| 精品福利av导航| 国产精品久久久久久久久免费樱桃| 日韩伦理免费电影| 丝袜亚洲另类欧美综合| 黑人巨大精品欧美黑白配亚洲| 东方欧美亚洲色图在线| 一本大道久久a久久精二百| 欧美日本高清视频在线观看| 亚洲精品一线二线三线| 国产日韩欧美电影| 亚洲国产裸拍裸体视频在线观看乱了| 三级亚洲高清视频| 成人激情图片网| 9191精品国产综合久久久久久| 久久先锋影音av鲁色资源| 亚洲免费在线观看| 奇米色一区二区三区四区| 高清在线不卡av| 欧美性高清videossexo| 精品国偷自产国产一区| 国产精品天美传媒| 日韩和的一区二区| 成人小视频在线观看| 欧美日韩中文国产| 国产欧美精品一区二区色综合| 亚洲综合无码一区二区| 国产成人在线视频网站| 欧美亚洲国产一区二区三区va | 国内久久精品视频| 欧洲日韩一区二区三区| 久久蜜桃一区二区| 亚洲成人午夜影院| 99久久er热在这里只有精品15 | 亚洲婷婷国产精品电影人久久| 婷婷激情综合网| av一本久道久久综合久久鬼色| 91精品啪在线观看国产60岁| 国产精品理论在线观看| 久久国产精品色婷婷| 一本大道久久a久久精二百| 国产香蕉久久精品综合网| 五月天一区二区| 色狠狠综合天天综合综合| 久久―日本道色综合久久| 婷婷六月综合网| 色88888久久久久久影院按摩| 国产色综合一区| 麻豆成人综合网| 777奇米四色成人影色区| 亚洲乱码日产精品bd| 国产成人h网站| 久久久不卡网国产精品一区| 日韩av高清在线观看| 欧美性感一区二区三区| 一区二区三区中文字幕| 成人av电影在线观看| 国产日韩欧美a| 国产成人自拍在线| 久久久精品黄色| 国产乱码一区二区三区| 欧美一区二区高清| 五月天婷婷综合| 欧美日韩免费在线视频| 亚洲第一狼人社区| 欧美日韩高清一区二区三区| 一个色妞综合视频在线观看| 色综合久久中文字幕| 亚洲伦在线观看| 91成人在线免费观看| 亚洲女人小视频在线观看|