📄 d0372_drv.c
字号:
/* -------------------------------------------------------------------------
File Name: d0372_drv.c
Description: 372 driver LLA
Copyright (C) 2005-206 STMicroelectronics
History:
date: 16-December-2005
version: 1.0.0
author:
comment:
---------------------------------------------------------------------------- */
/* includes ---------------------------------------------------------------- */
/* C libs */
#ifdef ST_OSLINUX
#include "stos.h"
#else
#include <stdlib.h>
#include "sttbx.h"
#endif
/* STAPI */
#include "sttuner.h"
#include "sti2c.h"
#include "stcommon.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 "d0372.h"
#include "d0372_drv.h"
#include "d0372_util.h"
#include "d0372_map.h"
/* Current LLA revision */
static ST_Revision_t Revision372 = "STV0372-LLA_REL_1.0(GUI) ";
#if defined (ST_OS21) || defined(ST_OSLINUX)
#define WAIT_N_MS_372(X) task_delay( (signed int)(X * (ST_GetClocksPerSecond() / 1000)) ) /*task_delay(X)*/
#else
#define WAIT_N_MS_372(X) task_delay( (unsigned int)(X * (ST_GetClocksPerSecond() / 1000)) ) /*task_delay(X)*/
#endif
const FE_372_LOOKUP_t FE_372_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_372_LOOKUP_t FE_372_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 Drv0372_GetLLARevision(void)
{
return (Revision372);
}
/*****************************************************
--FUNCTION :: FE_372_WaitTuner
--ACTION :: Wait for tuner locked
--PARAMS IN :: TimeOut -> Maximum waiting time (in ms)
--PARAMS OUT:: NONE
--RETURN :: NONE
--***************************************************/
void FE_372_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_372(1);
Error = (TunerInstance->Driver->tuner_IsTunerLocked)(TunerInstance->DrvHandle, &TunerLocked);
Time++;
}
Time--;
}
/*****************************************************
--FUNCTION :: CheckTiming_372
--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_372_SIGNALTYPE_t CheckTiming_372(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_372_InternalParams_t *pParams)
{
U32 TimingLock,Time=0;
do
{
WAIT_N_MS_372(1);
TimingLock=STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_FREQ_LOCK);
Time++;
}while((TimingLock==0)&&(Time < pParams->Ttiming));
if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_FREQ_LOCK))
pParams->State = TIMINGOK_372;
else
pParams->State = NOTIMING_372;
return pParams->State;
}
/*****************************************************
--FUNCTION :: CheckCarrier_372
--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_372_SIGNALTYPE_t CheckCarrier_372(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_372_InternalParams_t *pParams)
{
U32 CarrierLock,Time=0;
/*WAIT_N_MS_372(pParams->Tcarrier);*/
do
{
WAIT_N_MS_372(1);
CarrierLock=STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_CY_LOCK);
Time++;
}while((CarrierLock==0)&&(Time < pParams->Tcarrier));
if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_CY_LOCK))
pParams->State = CARRIEROK_372;
else
pParams->State = NOCARRIER_372;
return pParams->State;
}
/*****************************************************
--FUNCTION :: CheckData_372
--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_372_SIGNALTYPE_t CheckData_372(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_372_InternalParams_t *pParams)
{
U32 DataLock,Time=0;
pParams->State = NODATA_372;
/*WAIT_N_MS_372(pParams->Tdata);*/ /* Wait for data */
do
{
WAIT_N_MS_372(1);
DataLock=STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_FRMLOCK);
Time++;
}while((DataLock==0)&&(Time < pParams->Tdata));
if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_FRMLOCK)) /* Read DATA LOCK indicator */
{
pParams->State = DATAOK_372;
}
else
{
pParams->State = NODATA_372;
}
return pParams->State;
}
FE_372_SIGNALTYPE_t CheckFSM1_372(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_372_InternalParams_t *pParams)
{
U32 FSM1Lock,Time=0;
/* Wait for FSM1 Locked */
pParams->State = NOFSM1_372;
do
{
WAIT_N_MS_372(1);
FSM1Lock=(STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_MAINSTATE)==0x0A);
Time++;
}while((FSM1Lock==0)&&(Time < pParams->TFSM1));
if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_MAINSTATE)==0x0A) /* Read FSM1 LOCK indicator */
{
pParams->State = FSM1OK_372;
}
else
{
pParams->State = NOFSM1_372;
}
return pParams->State;
}
FE_372_SIGNALTYPE_t CheckFSM2_372(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_372_InternalParams_t *pParams)
{
U32 FSM2Lock,Time=0;
/* Wait for FSM2 Locked */
pParams->State = NOFSM2_372;
do
{
WAIT_N_MS_372(1);
FSM2Lock=(STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0372_EQSTATE)==0x05);
Time++;
}while((FSM2Lock==0)&&(Time<pParams->TFSM2));
if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_EQSTATE)==0x05) /* Read FSM2 LOCK indicator */
{
pParams->State = FSM2OK_372;
}
else
{
pParams->State = NOFSM2_372;
}
return pParams->State;
}
/*****************************************************
**FUNCTION :: FE_372_SetInternalError
**ACTION :: Set the internal error value and location
**PARAMS IN :: Type ==> Type of the error
** Location ==> Location of the error
**PARAMS OUT:: pError
**RETURN :: NONE
*****************************************************/
void FE_372_SetInternalError(FE_372_ErrorType_t Type,FE_372_Location_t Location,FE_372_InternalError_t *pError)
{
if(pError != NULL)
{
pError->Type = Type;
pError->Location = Location;
}
}
FE_372_Error_t STV0372_SetCarrier(STTUNER_IOREG_DeviceMap_t *DeviceMap,IOARCH_Handle_t IOHandle,U32 IF,int clk,U32 IQMode)
{
FE_372_Error_t error = FE_372_NO_ERROR;
S32 IFfrequency;
if(IQMode == STTUNER_INVERSION)
{
IFfrequency=(S32)(IF*1000 - clk);
}
else
{
IFfrequency=(S32)(2*clk-IF*1000);
}
UTIL_372_Set_NCOcnst_Regs(DeviceMap,IOHandle,(int)UTIL_372_Calc_NCOcnst(IFfrequency,clk));
return error;
}
FE_372_Error_t STV0372_SetTiming(STTUNER_IOREG_DeviceMap_t *DeviceMap,IOARCH_Handle_t IOHandle,int clk)
{
FE_372_Error_t error = FE_372_NO_ERROR;
UTIL_372_Set_vcxoOffset_Regs(DeviceMap,IOHandle,(int)UTIL_372_Calc_vcxoOffset(SYMBOLRATE_372,clk));
return error;
}
/*****************************************************
--FUNCTION :: FE_372_Algo
--ACTION :: Search for Signal, Timing, Carrier and then data at a given Frequency,
-- in a given range
--PARAMS IN :: NONE
--PARAMS OUT:: NONE
--RETURN :: Type of the founded signal (if any)
--***************************************************/
FE_372_SIGNALTYPE_t FE_372_Algo(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_372_InternalParams_t *pParams,STTUNER_Handle_t TopLevelHandle)
{
S32 EQResetNb;
S32 EQState,MAINState;
STTUNER_InstanceDbase_t *Inst;
STTUNER_tuner_instance_t *TunerInstance;
ST_ErrorCode_t Error = ST_NO_ERROR;
U8 EnableEQreset=1;
U32 FirstWatchdog,FirstTimeOutEQ,Watchdog,TimeOutEQ;
S32 powerestimation;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -