⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 288_drv.c

📁 STV0299 Minituner driver, for ST chipset
💻 C
📖 第 1 页 / 共 5 页
字号:
/* -------------------------------------------------------------------------
File Name: 288_drv.c

Description: 288 driver LLA

Copyright (C) 1999-2005 STMicroelectronics

author: SA
---------------------------------------------------------------------------- */


/* includes ---------------------------------------------------------------- */

/*	generic includes	*/
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#include "string.h"

//#include "globaldefs.h"
#include "gen_macros.h"

#ifndef NO_GUI
	#include "Appl.h"
	#include "UserPar.h"
	#include "Pnl_report.h"
	#include "288_Report_Msg.h"
	#define REPORTMSG(a,b,c) Report288(a,b,c);
#else
	#define REPORTMSG(a,b,c)
#endif

/* common includes */ 
#include "288_drv.h"

//#define DBG_SEARCHALGO
//#define DBG_SCANPROFILE

/* Current LLA revision	*/
const ST_Revision_t Revision288  = "STX0288-LLA_REL_1.9.3";

/* type definitions */
/* Counter enum */
#define FE_288_MAXLOOKUPSIZE 50

typedef enum
{
	COUNTER1 = 0,
	COUNTER2 = 1
} FE_288_ERRORCOUNTER_t;

/* One point of the lookup table */
typedef struct
{
	S32 realval;	/*	real value */
	S32 regval;		/*	binary value */
} FE_288_LOOKPOINT_t;

/*	Lookup table definition	*/
typedef struct
{
	S32 size;		/*	Size of the lookup table	*/
	FE_288_LOOKPOINT_t table[FE_288_MAXLOOKUPSIZE]; 	/*	Lookup table	*/
} FE_288_LOOKUP_t;

/* 288NIM look-up table */
/*

static FE_288_LOOKUP_t FE_288_RF_LookUp =	{   
												11,
												{
													-200,	62,
													-250,	55,
													-300,	48,
													-350,	39,
													-400,	25,
													-450,	4,
													-500,	-43,
													-550,	-65,
													-600,	-77,
													-650,	-87,
													-700,	-128
												}
											};
*/										

/* SatNIM2 look-up table */
FE_288_LOOKUP_t FE_288_RF_LookUp =	{   
										22,
										{
											-101,	127,
											-104,	118,
											-110,	111,
											-130,	100,
											-160,	91,
											-180,	87,
											-200,	84,
											-250,	76,
											-300,	68,
											-350,	63,
											-400,	56,
											-450,	48,
											-500,	40,
											-550,	29,
											-600,	11,
											-650,	-22,
											-700,	-56,
											-750,	-71,
											-800,	-82,
											-850,	-91,
											-883,	-96,
											-888,	-128,
										}
									};



FE_288_LOOKUP_t FE_288_CN_LookUp =	{
										30,
										{
											25,	8680,
											30,	8420,
											35,	8217,
											40,	7897,
											50,	7333,
											60,	6747,
											70,	6162,
											80,	5580,
											90,	5029,
											100,4529,
											110,4080,
											120,3685,
											130,3316,
											140,2982,
											150,2688,
											160,2418,
											170,2188,
											180,1982,
											190,1802,
											200,1663,
											210,1520,
											220,1400,
											230,1295,
											240,1201,
											250,1123,
											260,1058,
											270,1004,
											280,957,
											290,920,
											300,890
										}
									};
											
U8 Def288Val[STX288_NBREGS]=	/* Default values for STX0288 registers	*/  
{
	0x10,0xa5,0x20,0x8e,0x8e,0x12,0x00,0x20,0x00,0x00,
	0x04,0x00,0x00,0x00,0xd4,0x30,0xf2,0x7a,0x03,0x48,
	0x84,0xc5,0xb7,0x9c,0x00,0xa6,0x88,0x8f,0xf0,0x80,
	0x26,0x0b,0x54,0xff,0x01,0x9a,0x7f,0x00,0x00,0x46,
	0x66,0x90,0xfe,0x78,0x0e,0x5d,0x00,0x00,0x1e,0x14,
	0x0f,0x09,0x0c,0x05,0x2f,0x16,0xbd,0x00,0x13,0x11,
#ifdef STX5188_30MHZ
	0x30,0x00,0x00,0x13,0x08,0x60,0x00,0x00,0x00,0x00,	/* for STX5188 with 30MHz clock */   
#else
	0x30,0x00,0x00,0x63,0x04,0x60,0x00,0x00,0x00,0x00,	/* for STX0288 with 4MHz crystal */
#endif
	0x00,0x00,0x1b,0x28,0x10,0x36,0x09,0x94,0xb2,0x29,
	0x64,0x2b,0x54,0x86,0x00,0x9b,0x08,0x7f,0xff,0x8d,
	0x82,0x82,0x82,0x02,0x02,0x02,0x82,0x82,0x82,0x82,
	0x38,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x1c,0x00,0x48,0x00,0xb8,0x3a,0x10,
	0x82,0x80,0x82,0x82,0x82,0x20,0x00,0x00,0x00,0xc0
};

/* structures -------------------------------------------------------------- */ 
/*	Internal result structure	*/    
typedef struct
{
	FE_288_SIGNALTYPE_t      SignalType;		/*	Type of founded signal	*/
	FE_288_Polarization_t    Polarization;		/*	Polarization	*/
	FE_288_Rate_t            PunctureRate;		/*	Puncture rate found	*/
	U32                      Frequency_Khz;		/*	Transponder frequency (KHz)	*/
	U32                      SymbolRate_Bds; 	/*	Symbol rate (Bds)	*/
} FE_288_InternalResults_t;

/*	Internal param structure	*/ 
typedef struct
{
	STCHIP_Handle_t hDemod;		/*	Handle to the demod	*/
	STCHIP_Handle_t	hTuner;		/*	Handle to the tuner */
	
	FE_288_SIGNALTYPE_t State;
	
	S32		Quartz_Hz,			/*	Quartz frequency (Hz) */
			BaseFreq_Khz,		/*	search frequency (KHz) */
			Frequency_Khz,		/*	Current tuner frequency (KHz) */
			SymbolRate_Bds,		/*	Symbol rate (Bds) */
			MasterClock_Hz,		/*	Master clock frequency (Hz) */
			Mclk,				/*	Divider factor for masterclock (binary value) */
			SearchRange_Hz,		/*	Search range (Hz) */
			RollOffx100;		/*	Current RollOff of the filter (x100) */
		
	S16		Direction,			/*	Zig Zag direction (+1 or -1) */
			DerotFreq,			/*	Derotator frequency (binary) */
			Tagc1,				/*	Agc1 time constant (ms) */
			Tagc2,				/*	Agc2 time constant (ms) */
			Ttiming,			/*	Timing loop time constant (ms) */
			Tderot,				/*	Derotator time constant (ms) */
			Tdata;				/*	Data recovery time constant (ms) */
			
}FE_288_InternalParams_t;


/*****************************************************
**				UTILITIES
*****************************************************/

/*****************************************************
**FUNCTION	::	InRange
**ACTION	::	return true if y belongs to [x,z] 
**PARAMS IN	::	x
**				y
**				z
**PARAMS OUT::	NONE
**RETURN	::	0 or 1
*****************************************************/
S32 InRange(S32 x,S32 y,S32 z) 
{
	return ((x<=y && y<=z) || (z<=y && y<=x))?1:0;
}


/*****************************************************
**FUNCTION	::	PowOf2
**ACTION	::	Compute  2^n (where n is an integer) 
**PARAMS IN	::	number -> n
**PARAMS OUT::	NONE
**RETURN	::	2^n
*****************************************************/
long PowOf2(int number)
{
	int i;
	long result=1;
	
	for(i=0;i<number;i++)
		result*=2;
		
	return result;
}


/*****************************************************
**				STX0288 routines
*****************************************************/
STCHIP_Error_t FE_288_Repeater(STCHIP_Handle_t hChip,BOOL State)
{
	STCHIP_Error_t error = CHIPERR_NO_ERROR;
	
	if(hChip != NULL)
		error = ChipSetField(hChip,F288_I2CT_ON,(State==TRUE)?1:0);
	
	return error;
}


STCHIP_Handle_t FE_288_InitHAL(char *ChipName,U8 I2cAddr)
{
    STCHIP_Handle_t hChip;
    STCHIP_Info_t	ChipInitParams;
    U32				index=0;
	
    /*
    **   REGISTER CONFIGURATION
    **     ----------------------
    */
    
    /* fill elements chip data structure */
    ChipInitParams.NbRegs   = STX288_NBREGS;
    ChipInitParams.NbFields = STX288_NBFIELDS;
    ChipInitParams.ChipMode = STCHIP_MODE_SUBADR_8;
    ChipInitParams.RepeaterHost = NULL;
	ChipInitParams.RepeaterFn = FE_288_Repeater;
	ChipInitParams.Repeater = FALSE;
	ChipInitParams.I2cAddr = I2cAddr;
	ChipInitParams.pData = NULL;
	
	strcpy(ChipInitParams.Name,ChipName); 

    hChip = ChipOpen(&ChipInitParams);

    if(hChip != NULL)
	{
		/*	REGISTER INITIALISATION	*/
		/*	ID	*/
		ChipAddReg(hChip,R288_ID,"ID",0x0000,Def288Val[index++],STCHIP_ACCESS_WR);
		ChipAddField(hChip,R288_ID,F288_CHIP_IDENT,"CHIP_IDENT",4,4,CHIP_UNSIGNED);
		ChipAddField(hChip,R288_ID,F288_RELEASE,"RELEASE",0,4,CHIP_UNSIGNED);

		/*	I2CRPT	*/
		ChipAddReg(hChip,R288_I2CRPT,"I2CRPT",0x0001,Def288Val[index++],STCHIP_ACCESS_WR);
		ChipAddField(hChip,R288_I2CRPT,F288_I2CT_ON,"I2CT_ON",7,1,CHIP_UNSIGNED);
		ChipAddField(hChip,R288_I2CRPT,F288_ENARPT_LEVEL,"ENARPT_LEVEL",4,3,CHIP_UNSIGNED);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -