📄 cu1216.c
字号:
#include "Z_os_api.h"
#include "dem_def.h"
/*Platform */
#include <stdio.h>
#include "opentvx.h"
#include "globals.h"
#include "gpio.h"
#include "i2c.h"
#include "i68dbg.h"
#include "utility.h"
/*Especially for cu1216*/
#include "tmTypes.h"
#include "tmhalFEtypes.h"
#include "dvp.h"
#include "SystemFunc.h"
#include "tmbslTuner.h"
#include "tmbslTunerext.h"
#include "tmbslDemodCab.h"
#include "tmbsl10023.h"
#include "tmbsl10023local.h"
#include "cu1216.h"
/*Other*/
#include "demod.h"
/*===========================================================
--- Macro defination ---
===========================================================*/
#define DISPLAY_ERR(x,y) if(TM_OK != x) { \
dbprintf(("\n%s returns %u\n", y, x)); \
}
#define DEMOD_I2C_ADDRESSS 0x18
#define TUNER_I2C_ADDRESSS 0xC0
#define CHANTABLE_CHINA 0
#define CHANTABLE_EUROPE 1
/*===========================================================
--- Static Parametres defination ---
===========================================================*/
static o_demodulator_scan_request gRequest;
static UINT8 gScanProgress = 0;
static DTV_BOOL g_isScanning = DTV_FALSE;
/*===========================================================
--- Fuction declaration ---
===========================================================*/
extern void (*pDemodCallback)(long lDemodulator, int iReason);
/*===========================================================
--- Function Context ---
===========================================================*/
// //////////////////////////////////////////////////////////////////////////
// Function Name:
// Cu1216_Init
//
// Input Parameters:
// int iIndex - the index withing all demodulators list
//
// Return Value:
// None
//
// Description:
// Initial the DEMOD driver, This function need to call once at the power-
// up stage.
// //////////////////////////////////////////////////////////////////////////
void Cu1216_Init(DEMOD_HANDLE handle, int iIndex)
{
tmErrorCode_t eErrorCode;
I2C_Conf_T sI2CConf;
tmhalFEBslSystemFunc_t myDemodSystemFunc;
tmhalFEBslSystemFunc_t myTunerSystemFunc;
tmbslTuConfig_t myTunerFunc;
tmbslTuParam_t MyTunerParam;
tmbslDcParam_t MyDemodParam;
tmhalFEManagerStatus_t eStatus;
DEMOD_CABLE_DATA *sDemodData = (DEMOD_CABLE_DATA*)handle;
sDemodData->Cu1216_Index = iIndex;
//---------
// INIT COM
//---------
// open
SY_OpenCom();
// set the config - LPT1 at 100khz
sI2CConf.iLptPort = 1;
sI2CConf.iI2cSpeed = 100000;
sI2CConf.bAutoInc = 1;
sI2CConf.bDebugTrace = 0;
SY_SetComConfig(sI2CConf);
//---------
// INIT BSL
//---------
// initialize system func for demod
myDemodSystemFunc.SY_GetTickTime = SY_GetTickTime;
myDemodSystemFunc.SY_GetTickPeriod = SY_GetTickPeriod;
myDemodSystemFunc.SY_GetCommErrors = SY_GetComError;
myDemodSystemFunc.SY_Write = SY_WriteDemod;
myDemodSystemFunc.SY_WriteBit = SY_WriteBitDemod;
myDemodSystemFunc.SY_Read = SY_ReadDemod;
// initialize system func for tuner
myTunerSystemFunc.SY_GetTickTime = SY_GetTickTime;
myTunerSystemFunc.SY_GetTickPeriod = SY_GetTickPeriod;
myTunerSystemFunc.SY_GetCommErrors = SY_GetComError;
myTunerSystemFunc.SY_Write = SY_WriteTuner;
myTunerSystemFunc.SY_WriteBit = SY_WriteBitTuner;
myTunerSystemFunc.SY_Read = SY_ReadTuner;
// initialize tuner address for the demod
myTunerFunc.initFunc = tmbslTunerInit;
myTunerFunc.deinitFunc = tmbslTunerDeInit;
myTunerFunc.getSWVersionFunc = tmbslTunerGetSWVersion;
myTunerFunc.setPowerStateFunc = tmbslTunerSetPowerState;
myTunerFunc.getPowerStateFunc = tmbslTunerGetPowerState;
myTunerFunc.setCfgFunc = tmbslTunerSetConfig;
myTunerFunc.getCfgFunc = tmbslTunerGetConfig;
myTunerFunc.writeFunc = tmbslTunerWrite;
myTunerFunc.writeBitFunc = tmbslTunerWriteBit;
myTunerFunc.readFunc = tmbslTunerRead;
myTunerFunc.setRfFunc = tmbslTunerSetRf;
myTunerFunc.getRfFunc = tmbslTunerGetRf;
printf("here0\n");
// initialize tuner unit 0
MyTunerParam.uHwAddress = TUNER_I2C_ADDRESSS;
MyTunerParam.systemFunc = myTunerSystemFunc;
eErrorCode = tmbslTunerInit ((tmUnitSelect_t)0, MyTunerParam);
printf("here1\n");
// initialize demod unit 0
MyDemodParam.uHwAddress = DEMOD_I2C_ADDRESSS;
MyDemodParam.systemFunc = myDemodSystemFunc;
MyDemodParam.tunerFunc = myTunerFunc;
MyDemodParam.eTunerUnit = (tmUnitSelect_t)0;
eErrorCode = tmbsl10023Init ((tmUnitSelect_t)0, MyDemodParam);
printf("here2\n");
// set the tuner and demod config for CU1216 board
eErrorCode = tmbslTunerSetConfig ((tmUnitSelect_t)0, tmhalFEBoard, 0x12160000);//0x57550000);
eErrorCode = tmbsl10023SetConfig((tmUnitSelect_t)0, tmhalFEBoard, 0x12160000);//0x57550000);
printf("here3\n");
// Initialize TDA10023 registers
eErrorCode = tmbsl10023SetConfig((tmUnitSelect_t)0, tmhalFEInit, 0);
#if 0
//------------------
// PROGRAM FRONT-END
//------------------
eErrorCode = tmbsl10023SetRF ((tmUnitSelect_t)0, 259000000);
//DISPLAY_ERR (eErrorCode, "tmbsl10023SetRF");
eErrorCode = tmbsl10023SetSR ((tmUnitSelect_t)0, 6875000);
//DISPLAY_ERR (eErrorCode, "tmbsl10023SetSR");
eErrorCode = tmbsl10023SetSI ((tmUnitSelect_t)0, tmhalFESpectrumNormal);
//DISPLAY_ERR (eErrorCode, "tmbsl10023SetSI");
eErrorCode = tmbsl10023SetMod ((tmUnitSelect_t)0, tmhalFEModulationQam64);
//DISPLAY_ERR (eErrorCode, "tmbsl10023SetMod");
// perform algo
do {
eErrorCode = tmbsl10023Manager((tmUnitSelect_t)0, &eStatus);
DISPLAY_ERR (eErrorCode, "tmbsl10023Manager");
} while (tmhalFEManagerStatusNotCompleted == eStatus);
if (tmhalFEManagerStatusCarrierOk == eStatus){
dbprintf(("\n Carrier detected...\n"));
}
else{
dbprintf(("\n No carrier detected !\n"));
}
#endif
}
#include "tsi_api.h"
int Cu1216_Connect_DBG(DEMOD_HANDLE handle, unsigned long uNewFreq, UINT32 uSymRate )
{
static SIGNAL Signal;
tmhalFEManagerStatus_t eStatus;
tmErrorCode_t eErrorCode;
/*
Init the appropriate TS
*/
TSI_Set_InConfig_and_run( TSI_TS1, TSI_FE2 );
Signal.Frequency = uNewFreq*1000; /*In kHz*/
Signal.QAMSize = 64 ;
Signal.SymbolRate = uSymRate*1000; /* in Baud/s */
#if 0
Driv0297CarrierSearch(DEMOD_HANDLE handle, SIGNAL * _pSignal, _FLAG _SpectrumInversion, int _SweepRate, int _CarrierOffset)(handle, &Signal, 0,6,-20);
#else
//To search the appointed channel;
eErrorCode = tmbsl10023SetRF ((tmUnitSelect_t)0, Signal.Frequency*1000);
DISPLAY_ERR (eErrorCode, "tmbsl10023SetRF");
eErrorCode = tmbsl10023SetSR ((tmUnitSelect_t)0, Signal.SymbolRate);
DISPLAY_ERR (eErrorCode, "tmbsl10023SetSR");
eErrorCode = tmbsl10023SetSI ((tmUnitSelect_t)0, tmhalFESpectrumNormal);
DISPLAY_ERR (eErrorCode, "tmbsl10023SetSI");
eErrorCode = tmbsl10023SetMod ((tmUnitSelect_t)0, tmhalFEModulationAuto);
DISPLAY_ERR (eErrorCode, "tmbsl10023SetMod");
// perform algo
do {
eErrorCode = tmbsl10023Manager((tmUnitSelect_t)0, &eStatus);
DISPLAY_ERR (eErrorCode, "tmbsl10023Manager");
} while (tmhalFEManagerStatusNotCompleted == eStatus);
//---------------
// DISPLAY RESULT
//---------------
if (tmhalFEManagerStatusCarrierOk == eStatus){
dbprintf(("\n Carrier detected...\n"));
return 1;
}
else{
dbprintf(("\n No carrier detected !\n"));
return 0;
}
#endif
return 1;
}
int Cu1216_Connect( DEMOD_HANDLE handle, o_dvb_delivery *tuning_info )
{
static SIGNAL Signal;
tmhalFEManagerStatus_t eStatus;
tmErrorCode_t eErrorCode;
Signal.Frequency = tuning_info->delivery.cable.frequency;//convert_BCD_to_decimal(tuning_info->delivery.cable.frequency)*10; //In kHz
Signal.QAMSize = DVBModulationToDriverQamSize(tuning_info->delivery.cable.modulation); ;
Signal.SymbolRate = tuning_info->delivery.cable.symbol_rate;//convert_BCD_to_decimal(tuning_info->delivery.cable.symbol_rate) * 10; //6875000; // in Baud/s
dbprintf(("Cu1216_Connect(): signal Frequency is %d,SymbolRate is %d\n ", Signal.Frequency,Signal.SymbolRate ));
eErrorCode = tmbsl10023SetRF ((tmUnitSelect_t)0, Signal.Frequency*1000);
if (eErrorCode != TM_OK) return 0;
eErrorCode = tmbsl10023SetSR ((tmUnitSelect_t)0, Signal.SymbolRate);
if (eErrorCode != TM_OK) return 0;
eErrorCode = tmbsl10023SetSI ((tmUnitSelect_t)0, tmhalFESpectrumAuto);
if (eErrorCode != TM_OK) return 0;
switch(Signal.QAMSize)
{
case 16:
eErrorCode = tmbsl10023SetMod ((tmUnitSelect_t)0, tmhalFEModulationQam16);
break;
case 32:
eErrorCode = tmbsl10023SetMod ((tmUnitSelect_t)0, tmhalFEModulationQam32);
break;
case 64:
eErrorCode = tmbsl10023SetMod ((tmUnitSelect_t)0, tmhalFEModulationQam64);
break;
case 128:
eErrorCode = tmbsl10023SetMod ((tmUnitSelect_t)0, tmhalFEModulationQam128);
break;
case 256:
eErrorCode = tmbsl10023SetMod ((tmUnitSelect_t)0, tmhalFEModulationQam256);
break;
default:
return 0;
}
if (eErrorCode != TM_OK) return 0;
// perform algo
do {
eErrorCode = tmbsl10023Manager((tmUnitSelect_t)0, &eStatus);
} while (tmhalFEManagerStatusNotCompleted == eStatus);
//---------------
// DISPLAY RESULT
//---------------
if (tmhalFEManagerStatusCarrierOk == eStatus){
dbprintf(("\n Carrier detected...\n"));
return 1;
}
else{
dbprintf(("\n No carrier detected !\n"));
return 0;
}
}
int Cu1216_SetLnb(DEMOD_HANDLE handle, o_demodulator_lnb *pLnb)
{
dbprintf(("Dcf8710_SetLnb()\n"));
return 0;
}
// //////////////////////////////////////////////////////////////////////////
// Function Name:
// Cu1216_GetSignalData
//
// Input Parameters:
// pSignal - o_demodulator_signal defined by OpenTV
//
// Return Value:
// Dcf8710_GetSignalData is always considered valid, whether the demodulator
// is locked or not, and irrespective of whether the demodulator is being
// used for scanning (through the requests above) or is connected using the
// normal demodulator functions. A FAILURE response is expected only if the
// demodulator control driver does not provide the capability. A set request
// is always invalid and should result in an immediate FAILURE response.
//
// Description:
// Gets information on the quality of the signal being received by the
// tuner and demodulation hardware.
// //////////////////////////////////////////////////////////////////////////
int Cu1216_GetSignalData(DEMOD_HANDLE handle, o_demodulator_signal *pSignal)
{
static UINT16 signal_quality = 0xFF;
UINT8 i = 0,agc = 0;
UINT32 puBytes[4];
#if 1
tmbsl10023Read(0, TDA10023_STATUS_IND, 1, puBytes);
pSignal->signal_lock = (puBytes[0] & TDA10023_STATUS_FSYNC_BIT)/TDA10023_STATUS_FSYNC_BIT;
// dbprintf(( "\nSync Byte add 0x%02x : 0x%02x", TDA10023_STATUS_IND, puBytes[0] ));
// dbprintf(( " --> FEL=%x \n", pSignal->signal_lock));
if(0 == pSignal->signal_lock)
{
pSignal->signal_strength = 0;
pSignal->signal_quality = 255;
return 0;
}
//pSignal->signal_strength = 80;
//pSignal->signal_quality = 85;
switch(puBytes[0]&0x30)
{
case 0x00:pSignal->signal_quality = 0;
break;
case 0x10:pSignal->signal_quality = 255*10/100;
break;
case 0x20:pSignal->signal_quality = 255*40/100;
break;
case 0x30:pSignal->signal_quality = 255*80/100;
break;
}
tmbsl10023GetSNR((tmUnitSelect_t)0,&(pSignal->signal_strength));
//d_prinft( "-%d- \n",pSignal->signal_strength);
return 0;
#else
pSignal->signal_lock = RegGetField0297(handle, SYNCSTATE); // 1 - locked 0 - unlocked
if(0 == pSignal->signal_lock)
{
pSignal->signal_strength = 0;
pSignal->signal_quality = 255;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -