📄 qam029old7.c
字号:
/*/////////////////////////////////////////////////////////////////////////////////////*/
BOOLEAN Search_Result_get(void)
{
return TRUE;
}
BYTE GetTunerPowerOutput(void)
{
return (50);
}
BYTE GetTunerSignalQuality(void)
{
unsigned short agc;
agc = linkGetAGC2();
/* do_report( severity_info, "AGC is %d\n",agc); */
return ( agc/0x3ff );
}
unsigned char CheckTunerLock(void)
{
return LockIndicator;
}
unsigned char CheckTunerNoSignal(void)
{
return s_AgcNoSignal;
}
boolean StillLocked=false;
boolean FE_StillLocked( void )
{
return StillLocked;
}
/*
i2c_read ( i2c_ssc0, ucSlaveAddr, aucI2CBuffer, 1, &iActLen )
*/
char i2c_read( STI2C_Handle_t i2c_sscX,unsigned char ucSlaveAddr, BYTE *aucI2CBuffer, char i, int *iLength )
{
ST_ErrorCode_t error;
/*
STI2C_Read (HandleTuner, pData, 1, ReadTimeout, &actLen);
*/
if( ucSlaveAddr==0x38 )
{
error=STI2C_Read (I2CDemodHandle, aucI2CBuffer, i ,100, (U32 *) iLength);
}
else if( ucSlaveAddr==0xc2 )
{
error=STI2C_Read (I2CTunerHandle, aucI2CBuffer, i ,100, (U32 *) iLength);
do_report ( severity_info, "read Tuner...\n");
}
else
{
do_report ( severity_info, "error!: invalid address in module QAM0297\n");
error=1;
}
return error;
}
/*
i2c_write ( i2c_ssc0, ucSlaveAddr, aucI2CBuffer, 1, &iActLen )
*/
char i2c_write ( STI2C_Handle_t i2c_sscX,unsigned char ucSlaveAddr, BYTE *aucI2CBuffer, char i, int *iLength )
{
ST_ErrorCode_t error;
/*
STI2C_Write(I2CHandle, Buf, 2, 100, &NumberWritten);
*/
if( ucSlaveAddr==0x38 )
{
error=STI2C_Write(I2CDemodHandle, aucI2CBuffer, i, 100, ( U32 *) iLength);
// do_report ( severity_info, "write 0297 error=%d... \n",error);
}
else if (ucSlaveAddr==0xc2 )
{
error=STI2C_Write(I2CTunerHandle, aucI2CBuffer, i, 100, ( U32 *) iLength);
do_report ( severity_info, "write Tuner...error=%d...\n",error);
}
else
{
do_report ( severity_info, "error!: invalid address in module QAM0297\n");
error=1;
}
return error;
}
static int Driv0297CN[5][40] ;
static int Driv0297CNEstimatorOffset ;
static int Driv0297CNEstimation ;
void Driv0297CNEstimatorInit(void)
{
int idB ;
int iQAM ;
Driv0297CNEstimation = 3000 ;
Driv0297CNEstimatorOffset = 0 ;
for (idB = 0 ; idB < 40; idB++)
for (iQAM = 0 ; iQAM < 5 ; iQAM++)
Driv0297CN[iQAM][idB] = 100000;
/* QAM = 16 */
iQAM = 0 ;
for (idB = 0 ; idB < 15 ; idB++)
Driv0297CN[iQAM][idB] = 10500 + (15-idB)*1000;
Driv0297CN[iQAM][15] = 10500 ;
Driv0297CN[iQAM][16] = 9000 ;
Driv0297CN[iQAM][17] = 8120 ;
Driv0297CN[iQAM][18] = 7300 ;
Driv0297CN[iQAM][19] = 6530 ;
Driv0297CN[iQAM][20] = 5870 ;
Driv0297CN[iQAM][21] = 5310 ;
Driv0297CN[iQAM][22] = 4790 ;
Driv0297CN[iQAM][23] = 4320 ;
Driv0297CN[iQAM][24] = 3920 ;
Driv0297CN[iQAM][25] = 3590 ;
Driv0297CN[iQAM][26] = 3270 ;
Driv0297CN[iQAM][27] = 3000 ;
Driv0297CN[iQAM][28] = 2760 ;
Driv0297CN[iQAM][29] = 2560 ;
Driv0297CN[iQAM][30] = 2420 ;
Driv0297CN[iQAM][31] = 2260 ;
Driv0297CN[iQAM][32] = 2150 ;
Driv0297CN[iQAM][33] = 2060 ;
Driv0297CN[iQAM][34] = 1980 ;
Driv0297CN[iQAM][35] = 1910 ;
Driv0297CN[iQAM][36] = 1850 ;
Driv0297CN[iQAM][37] = 1810 ;
Driv0297CN[iQAM][38] = 1750 ;
Driv0297CN[iQAM][39] = 1740 ;
/* QAM = 32 */
iQAM = 1 ;
for (idB = 0 ; idB < 18 ; idB++)
Driv0297CN[iQAM][idB] = 10500 + (18-idB)*1000;
Driv0297CN[iQAM][18] = 10500 ;
Driv0297CN[iQAM][19] = 9120 ;
Driv0297CN[iQAM][20] = 8100 ;
Driv0297CN[iQAM][21] = 7300 ;
Driv0297CN[iQAM][22] = 6560 ;
Driv0297CN[iQAM][23] = 5930 ;
Driv0297CN[iQAM][24] = 5380 ;
Driv0297CN[iQAM][25] = 4920 ;
Driv0297CN[iQAM][26] = 4520 ;
Driv0297CN[iQAM][27] = 4130 ;
Driv0297CN[iQAM][28] = 3800 ;
Driv0297CN[iQAM][29] = 3520 ;
Driv0297CN[iQAM][30] = 3290 ;
Driv0297CN[iQAM][31] = 3120 ;
Driv0297CN[iQAM][32] = 2980 ;
Driv0297CN[iQAM][33] = 2850 ;
Driv0297CN[iQAM][34] = 2730 ;
Driv0297CN[iQAM][35] = 2650 ;
Driv0297CN[iQAM][36] = 2560 ;
Driv0297CN[iQAM][37] = 2510 ;
Driv0297CN[iQAM][38] = 2480 ;
Driv0297CN[iQAM][39] = 2440 ;
/* QAM = 64 */
iQAM = 2 ;
for (idB = 0 ; idB < 21 ; idB++)
Driv0297CN[iQAM][idB] = 10500 + (21-idB)*1000;
Driv0297CN[iQAM][21] = 10500 ;
Driv0297CN[iQAM][22] = 9300 ;
Driv0297CN[iQAM][23] = 8400 ;
Driv0297CN[iQAM][24] = 7600 ;
Driv0297CN[iQAM][25] = 6850 ;
Driv0297CN[iQAM][26] = 6250 ;
Driv0297CN[iQAM][27] = 5750 ;
Driv0297CN[iQAM][28] = 5250 ;
Driv0297CN[iQAM][29] = 4850 ;
Driv0297CN[iQAM][30] = 4450 ;
Driv0297CN[iQAM][31] = 4200 ;
Driv0297CN[iQAM][32] = 3900 ;
Driv0297CN[iQAM][33] = 3700 ;
Driv0297CN[iQAM][34] = 3550 ;
Driv0297CN[iQAM][35] = 3400 ;
Driv0297CN[iQAM][36] = 3300 ;
Driv0297CN[iQAM][37] = 3200 ;
Driv0297CN[iQAM][38] = 3130 ;
Driv0297CN[iQAM][39] = 3060 ;
/* QAM = 128 */
iQAM = 3 ;
for (idB = 0 ; idB < 24 ; idB++)
Driv0297CN[iQAM][idB] = 10500 + (24-idB)*1000;
Driv0297CN[iQAM][24] = 10500 ;
Driv0297CN[iQAM][25] = 9660 ;
Driv0297CN[iQAM][26] = 8780 ;
Driv0297CN[iQAM][27] = 7970 ;
Driv0297CN[iQAM][28] = 7310 ;
Driv0297CN[iQAM][29] = 6750 ;
Driv0297CN[iQAM][30] = 6220 ;
Driv0297CN[iQAM][31] = 5810 ;
Driv0297CN[iQAM][32] = 5430 ;
Driv0297CN[iQAM][33] = 5090 ;
Driv0297CN[iQAM][34] = 4880 ;
Driv0297CN[iQAM][35] = 4700 ;
Driv0297CN[iQAM][36] = 4500 ;
Driv0297CN[iQAM][37] = 4340 ;
Driv0297CN[iQAM][38] = 4270 ;
Driv0297CN[iQAM][39] = 4150 ;
/* QAM = 256 */
iQAM = 4 ;
for (idB = 0 ; idB < 28 ; idB++)
Driv0297CN[iQAM][idB] = 10500 + (28-idB)*1000;
Driv0297CN[iQAM][28] = 10500 ;
Driv0297CN[iQAM][29] = 9600 ;
Driv0297CN[iQAM][30] = 9000 ;
Driv0297CN[iQAM][31] = 8400 ;
Driv0297CN[iQAM][32] = 7800 ;
Driv0297CN[iQAM][33] = 7400 ;
Driv0297CN[iQAM][34] = 7100 ;
Driv0297CN[iQAM][35] = 6700 ;
Driv0297CN[iQAM][36] = 6550 ;
Driv0297CN[iQAM][37] = 6370 ;
Driv0297CN[iQAM][38] = 6200 ;
Driv0297CN[iQAM][39] = 6150 ;
}
/*----------------------+
NOTE:Driv0297Init
+-----------------------*/
void Driv0297CNEstimator(int *_pMean, int *_pCN)
{
int int_tmp , i ;
int idB ;
int iQAM, QAMSize ;
int CurrentMean ;
int ComputedMean ;
int OldMean ;
int Result ;
unsigned char val_equ7_lo,val_equ8_hi,EndOfSearch ;
/**/
QAMSize = 64;
switch (QAMSize)
{
case 16 :
iQAM = 0 ;
break ;
case 32 :
iQAM = 1 ;
break ;
case 64 :
iQAM = 2 ;
break ;
case 128 :
iQAM = 3 ;
break ;
case 256 :
iQAM = 4 ;
break ;
}
for (i = 0 ; i < 100 ; i ++)
{
task_delay(WAIT_FOR_1_SEC/1000) ; /* wait 1 ms */
link_read (0x07, &val_equ7_lo);
link_read (0x08, &val_equ8_hi);
int_tmp = (val_equ8_hi<<8)+ val_equ7_lo ;
Driv0297CNEstimation = (63*Driv0297CNEstimation)/64 + int_tmp/64 ;
}
ComputedMean = Driv0297CNEstimation - Driv0297CNEstimatorOffset ; /* offset correction */
CurrentMean = Driv0297CN[iQAM][0] ;
idB = 1 ;
EndOfSearch = 0 ;
while (EndOfSearch == 0)
{
OldMean = CurrentMean ;
CurrentMean = Driv0297CN[iQAM][idB] ;
if ((CurrentMean <= ComputedMean)||(idB >= 39))
EndOfSearch = 1 ;
else
idB += 1 ;
}
Result = 100*idB ;
if(CurrentMean < OldMean)
Result -= (100*(CurrentMean - ComputedMean))/(CurrentMean - OldMean) ;
if(LockIndicator==0)
Result=0;
if(Result>4000)
Result=4000;
*_pMean = Driv0297CNEstimation ;
*_pCN = Result/100;
return ;
}
int SignalStrong(void)
{
int data=0;
int agc=0;
if(LockIndicator==0)
return 0;
agc = linkGetAGC2();
if(agc>=599)
data=29;
else if(589<agc)
data=30;
else if(581<agc)
data=31;
else if(573<agc)
data=31;
else if(566<agc)
data=31;
else if(556<agc)
data=31;
else if(548<agc)
data=32;
else if(541<agc)
data=32;
else if(533<agc)
data=32;
else if(526<agc)
data=32;
else if(520<agc)
data=33;
else if(514<agc)
data=33;//517 34.1
else if(507<agc)
data=33;
else if(497<agc)
data=34;
else if(488<agc)
data=34;
else if(479<agc)
data=35;
else if(471<agc)
data=35;
else if(464<agc)
data=36;
else if(455<agc)
data=36;
else if(448<agc)
data=37;//37.8 448
else if(440<agc)
data=38;
else if(433<agc)
data=39;
else if(426<agc)
data=40;
else if(418<agc)
data=41;
else if(412<agc)
data=42;//50//416 42.3
else if(405<agc)
data=43;
else if(399<agc)
data=44;
else if(393<agc)
data=45;
else if(386<agc)
data=46;
else if(379<agc)
data=47;
else if(373<agc)
data=48;
else if(319<agc)
data=49;
else if(286<agc)
data=50;
else if(267<agc)
data=51;
else if(256<agc)
data=52;
else if(247<agc)
data=53;
else if(240<agc)
data=54;
else if(234<agc)
data=55;
else if(229<agc)
data=56;
else if(225<agc)
data=57;
else if(221<agc)
data=58;
else if(218<agc)
data=59;
else if(215<agc)
data=60;
else if(212<agc)
data=61;
else if(209<agc)
data=62;
else if(207<agc)
data=63;
else if(204<agc)
data=64;
else if(203<agc)
data=65;
else if(199<agc)
data=66;
else if(196<agc)
data=67;
else if(194<agc)
data=68;
else if(191<agc)
data=69;
else if(188<agc)
data=70;
else if(184<agc)
data=71;
else if(180<agc)
data=73;
else if(175<agc)
data=75;
else if(170<agc)
data=77;
else if(165<agc)
data=78;
else if(159<agc)
data=80;
else if(153<agc)
data=82;
else if(145<agc)
data=84;
else if(137<agc)
data=86;
else if(128<agc)
data=88;
else if(118<agc)
data=89;
else if(111<agc)
data=90;
else if(103<agc)
data=91;
else if(95<agc)
data=92;
else if(89<agc)
data=93;
else if(83<agc)
data=94;
else if(78<agc)
data=95;
else if(73<agc)
data=96;
else if(69<agc)
data=97;
else if(66<agc)
data=98;
else if(63<agc)
data=99;
else
data=100;
// do_report( severity_error, "agc=%d\n",agc);
/* sigal value=434 436 39.8
578 442 443 38.1
586 430 425 40.3
594 416 42.3
602 425 424 39.2
610 435 442 443 38.8
618 451 449 435 40.6
626 448 447 448 37.8
634 455 455 456 38.1
642 446 446 480 36.6
650 517 517 518 34.1
*/
return (data);
}
//
/*/////////////////////////////////////////////////////////////////////////////////////*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -