📄 288_drv.c
字号:
/* -------------------------------------------------------------------------
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 + -