📄 d0370vsb_drv.c
字号:
/* -------------------------------------------------------------------------
File Name: 370_drv.c
Description: 370 driver LLA
Copyright (C) 1999-2001 STMicroelectronics
History:
date: 20-January-2005
version: 1.0.0
author: AM
comment: 399ized version
---------------------------------------------------------------------------- */
/* includes ---------------------------------------------------------------- */
#include <stdlib.h>
#ifdef HOST_PC
/* generic includes */
#include "gen_macros.h"
#include <utility.h>
#include "math.h"
#include "stdlib.h"
#ifndef NO_GUI
#include "stdio.h"
#include "370_main.h"
#include "370_VSB_Report_Msg.h"
#include "pnl_report.h"
#include "UserPar.h"
#define REPORTMSG(a,b,c) Report370_VSB(a,b,c);
#else
#define REPORTMSG(a,b,c)
#endif
#else
#define REPORTMSG(a,b,c)
#endif
/* STAPI */
#include "sttuner.h"
#include "sti2c.h"
#include "stcommon.h"
#include "sttbx.h"
#include "stevt.h"
/* local to sttuner */
#include "util.h" /* generic utility functions for sttuner */
#include "dbtypes.h" /* data types for databases */
#include "sysdbase.h" /* functions to accesss system data */
#include "ioarch.h" /* I/O for this driver */
#include"ioreg.h"
#include "tuntdrv.h"
/* common includes */
#include "d0370VSB.h"
#include "370_VSB_drv.h"
#include "370_VSB_util.h"
#include "370_VSB_map.h"
/* Current LLA revision */
static ST_Revision_t Revision370VSB = "STV0370VSB-LLA_REL_1.0(GUI) ";
#ifdef ST_OS21
#define WAIT_N_MS(X) task_delay( (signed int)(X * (ST_GetClocksPerSecond() / 1000)) ) /*task_delay(X)*/
#else
#define WAIT_N_MS(X) task_delay( (unsigned int)(X * (ST_GetClocksPerSecond() / 1000)) ) /*task_delay(X)*/
#endif
#define INRANGE(X,Y,Z) (((X<=Y) && (Y<=Z))||((Z<=Y) && (Y<=X)) ? 1 : 0)
#define MAKEWORD(X,Y) ((X<<8)+(Y))
const FE_370_LOOKUP_t FE_370_CN_LookUp ={
44,
{
19, 16383,
20, 16144,
30, 12823,
40, 10186,
50, 8091,
60, 64267,
70, 5105,
80, 4055,
90, 3221,
100, 2559,
110, 2032,
120, 1614,
130, 1282,
140, 1019,
150, 809,
160, 643,
170, 511,
180, 406,
190, 322,
200, 256,
210, 203,
220, 161,
230, 128,
240, 102,
250, 81,
260, 64,
270, 51,
280, 41,
290, 32,
300, 26,
310, 20,
320, 16,
330, 13,
340, 10,
350, 8,
360, 6,
370, 5,
380, 4,
390, 3,
400, 3,
410, 2,
420, 2,
430, 1,
440, 1,
}
};
const FE_370_LOOKUP_t FE_370_BER_LookUp = {
115,
{
0, 0,
126, 75,
260, 150,
387, 220,
533, 300,
681, 380,
831, 460,
981, 540,
1113, 610,
1265, 690,
1417, 770,
1570, 850,
1704, 920,
1858, 1000,
2051, 1100,
2244, 1200,
2438, 1300,
2633, 1400,
2828, 1500,
3023, 1600,
3219, 1700,
3416, 1800,
3613, 1900,
3810, 2000,
4007, 2100,
4205, 2200,
4404, 2300,
4602, 2400,
4801, 2500,
5000, 2600,
5199, 2700,
5399, 2800,
5599, 2900,
5799, 3000,
6000, 3100,
6200, 3200,
6401, 3300,
6602, 3400,
6803, 3500,
7005, 3600,
7207, 3700,
7409, 3800,
7611, 3900,
7813, 4000,
8015, 4100,
8218, 4200,
8421, 4300,
8624, 4400,
8827, 4500,
9030, 4600,
9234, 4700,
9437, 4800,
9641, 4900,
9845, 5000,
10049, 5100,
10253, 5200,
10458, 5300,
10662, 5400,
10867, 5500,
11072, 5600,
11276, 5700,
11481, 5800,
11687, 5900,
11892, 6000,
12097, 6100,
12303, 6200,
12508, 6300,
12714, 6400,
12920, 6500,
13126, 6600,
13332, 6700,
13538, 6800,
13745, 6900,
13951, 7000,
14158, 7100,
14364, 7200,
14571, 7300,
14778, 7400,
14985, 7500,
15192, 7600,
15399, 7700,
15606, 7800,
15814, 7900,
16021, 8000,
16229, 8100,
16436, 8200,
16644, 8300,
16852, 8400,
17060, 8500,
17268, 8600,
17476, 8700,
17684, 8800,
17892, 8900,
18100, 9000,
18309, 9100,
18517, 9200,
18726, 9300,
18935, 9400,
19143, 9500,
19352, 9600,
19561, 9700,
19770, 9800,
19979, 9900,
20188, 10000,
41397, 20000,
63009, 30000,
84886, 40000,
106964, 50000,
129202, 60000,
151574, 70000,
174063, 80000,
196653, 90000,
219333, 100000,
449751, 200000,
684546, 300000,
}
};
/***********************************************************
**FUNCTION :: Drv0361_GetLLARevision
**ACTION :: Returns the 361 LLA driver revision
**RETURN :: Revision361
***********************************************************/
ST_Revision_t Drv0370VSB_GetLLARevision(void)
{
return (Revision370VSB);
}
/*****************************************************
--FUNCTION :: FE_370VSB_WaitTuner
--ACTION :: Wait for tuner locked
--PARAMS IN :: TimeOut -> Maximum waiting time (in ms)
--PARAMS OUT:: NONE
--RETURN :: NONE
--***************************************************/
void FE_370VSB_WaitTuner(STTUNER_tuner_instance_t *TunerInstance,int TimeOut)
{
int Time=0;
BOOL TunerLocked = FALSE;
ST_ErrorCode_t Error;
while(!TunerLocked && (Time<TimeOut))
{
WAIT_N_MS(1);
Error = (TunerInstance->Driver->tuner_IsTunerLocked)(TunerInstance->DrvHandle, &TunerLocked);
Time++;
}
Time--;
}
/*****************************************************
--FUNCTION :: CheckTiming
--ACTION :: Check for timing locked
--PARAMS IN :: pParams->Ttiming => Time to wait for timing loop locked
--PARAMS OUT:: pParams->State => result of the check
--RETURN :: NOTIMING if timing not locked, TIMINGOK otherwise
--***************************************************/
FE_370_VSB_SIGNALTYPE_t CheckTiming(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_370_VSB_InternalParams_t *pParams)
{
U32 TimingLock,Time=0;
/*WAIT_N_MS(pParams->Ttiming);*/
do
{
WAIT_N_MS(1);
TimingLock=STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_FREQ_LOCK);
Time++;
}while((TimingLock==0)&&(Time < pParams->Ttiming));
if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_FREQ_LOCK))
pParams->State = TIMINGOK_370VSB;
else
pParams->State = NOTIMING_370VSB;
return pParams->State;
}
/*****************************************************
--FUNCTION :: CheckCarrier
--ACTION :: Check for carrier founded
--PARAMS IN :: pParams => Pointer to SEARCHPARAMS structure
--PARAMS OUT:: pParams->State => Result of the check
--RETURN :: NOCARRIER carrier not founded, CARRIEROK otherwise
--***************************************************/
FE_370_VSB_SIGNALTYPE_t CheckCarrier(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_370_VSB_InternalParams_t *pParams)
{
U32 CarrierLock,Time=0;
/*WAIT_N_MS(pParams->Tcarrier);*/
do
{
WAIT_N_MS(1);
CarrierLock=STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_CY_LOCK);
Time++;
}while((CarrierLock==0)&&(Time < pParams->Tcarrier));
if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_CY_LOCK))
pParams->State = CARRIEROK_370VSB;
else
pParams->State = NOCARRIER_370VSB;
return pParams->State;
}
/*****************************************************
--FUNCTION :: CheckData
--ACTION :: Check for data founded
--PARAMS IN :: pParams => Pointer to SEARCHPARAMS structure
--PARAMS OUT:: pParams->State => Result of the check
--RETURN :: NODATA data not founded, DATAOK otherwise
--***************************************************/
FE_370_VSB_SIGNALTYPE_t CheckData(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_370_VSB_InternalParams_t *pParams)
{
U32 DataLock,Time=0;
pParams->State = NODATA_370VSB;
/*WAIT_N_MS(pParams->Tdata);*/ /* Wait for data */
do
{
WAIT_N_MS(1);
DataLock=STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_FRMLOCK);
Time++;
}while((DataLock==0)&&(Time < pParams->Tdata));
if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_FRMLOCK)) /* Read DATA LOCK indicator */
{
pParams->State = DATAOK_370VSB;
}
else
{
pParams->State = NODATA_370VSB;
}
return pParams->State;
}
FE_370_VSB_SIGNALTYPE_t CheckFSM1(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_370_VSB_InternalParams_t *pParams)
{
U32 FSM1Lock,Time=0;
/*WAIT_N_MS(pParams->TFSM1);*/ /* Wait for FSM1 Locked */
pParams->State = NOFSM1_370VSB;
do
{
WAIT_N_MS(1);
FSM1Lock=(STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_MAINSTATE)==0x0A);
Time++;
}while((FSM1Lock==0)&&(Time < pParams->TFSM1));
if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_MAINSTATE)==0x0A) /* Read FSM1 LOCK indicator */
{
pParams->State = FSM1OK_370VSB;
}
else
{
pParams->State = NOFSM1_370VSB;
}
return pParams->State;
}
FE_370_VSB_SIGNALTYPE_t CheckFSM2(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_370_VSB_InternalParams_t *pParams)
{
U32 FSM2Lock,Time=0;
/*WAIT_N_MS(pParams->TFSM2);*/ /* Wait for FSM2 Locked */
pParams->State = NOFSM2_370VSB;
do
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -