📄 drv_channel.c
字号:
void DiSEqCDataSend(unsigned char unitId, unsigned char ucCmdNum)
{
#ifdef THOMSON_MM
#else
unsigned char i,ret;
unsigned char timeout;
unsigned char tempCOunt = ucCmdNum;
if (ucCmdNum > 7) ucCmdNum = 7;
PN1010_Set_Register(unitId,0x3B, 0x03);
PN1010_Set_Register(unitId,0x3B,((ucCmdNum-1)<<4)|0x2); /* LNB Control : Set DiSEqC Mode and count*/
/* LNB Message Contents ( MSB Sent first on each byte) */
if(((PN1010_Get_Register(unitId,0x3B) & 0x08) >>3 ) == 0 ) /* Check whether data transfer has been finished or not? */
{
for(i=0; i< ucCmdNum; i++)
{
PN1010_Set_Register(unitId,0x3D+i,DEMOD_REG[unitId][0x3D/*DEMOD_REG_OCT1*/+i]); /* LNB Control : Set DiSEqC Mode */
}
PN1010_Set_Register(unitId,0x3B,((ucCmdNum-1)<<4)|0x2|(BEGIN_DATA_TRANSFER<<3)); /* LNB Control : Set DiSEqC Mode and count*/
ret = 0;
timeout = 1000;
while(timeout-- && !ret) ret = DSEC_Get_Status(unitId);
}
else
{
//printDrvCh(("[DSEC] DsecCommandWrite : DiSEqC not ready.. \n\r"));
task_delay(17);
/* One more try */
PN1010_Set_Register(unitId,0x3B, 0x03);
PN1010_Set_Register(unitId,0x3B,((tempCOunt-1)<<4)|0x2);
if(((PN1010_Get_Register(unitId,0x3B) & 0x08) >>3 ) == 0)
{
for(i=0; i< tempCOunt; i++)
{
PN1010_Set_Register(unitId,0x3D+i,DEMOD_REG[unitId][0x3D/*DEMOD_REG_OCT1*/+i]);
}
PN1010_Set_Register(unitId,0x3B,((tempCOunt-1)<<4)|0x2|(BEGIN_DATA_TRANSFER<<3));
ret = 0;
timeout = 1000;
while(timeout-- && !ret) ret = DSEC_Get_Status(unitId);
}
else
{
printDrvCh(("[DSEC] DsecCommandWrite : DiSEqC Still not ready.. \n\r"));
}
}
#endif
} // end of DiSEqCDataSend
/////////////////////////////////////////////////////////////////////////////////
// Function : drv_channel_DiSEqC
// Description :
// Input :
// Output :
// Return :
/////////////////////////////////////////////////////////////////////////////////
void drv_channel_DiSEqC(unsigned char unitId,__channel_DiSEqCType_t type)
{
#ifdef THOMSON_MM
int ucCmdNum;
int i;
DEMOD_REG[unitId][0x3B] = 0x00; // Framing Byte (Clear)
// set DiSEqC message
switch(type)
{
case DiSEqCType_2_0:
DEMOD_REG[unitId][0x3D/*DEMOD_REG_OCT1*/] = 0x02; // Framing Byte
case DiSEqCType_1_0:
DEMOD_REG[unitId][0x3D+0/*DEMOD_REG_OCT1*/] |= 0xE0; // Framing Byte (0xE0 for Type1, 0xE2 for Type2)
DEMOD_REG[unitId][0x3D+1/*DEMOD_REG_OCT2*/] = 0x10; // Address Byte
DEMOD_REG[unitId][0x3D+2/*DEMOD_REG_OCT3*/] = 0x38; // Command Byte
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] = 0xF0; // Data Byte
if (g_ChInfo[unitId].Tuner.Sat.ucSwitchOption == SWITCH_OPTION_B)
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] |= 0x08;
if (g_ChInfo[unitId].Tuner.Sat.ucSatellitePosition == SATELLITE_POSITION_B)
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] |= 0x04;
if (g_ChInfo[unitId].Tuner.Sat.ucPolarisation == TUNER_POLAR_HOR)
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] |= 0x02;
if (g_ChInfo[unitId].Tuner.Sat.ucLnbSelect == LNB_SELECT_HIGH)
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] |= 0x01;
ucCmdNum = 4;
break;
// 8sw
case DiSEqCType_1_1:
DEMOD_REG[unitId][0x3D+0/*DEMOD_REG_OCT1*/] |= 0xE0; // Framing Byte (0xE0 for Type1, 0xE2 for Type2)
DEMOD_REG[unitId][0x3D+1/*DEMOD_REG_OCT2*/] = 0x10; // Address Byte
DEMOD_REG[unitId][0x3D+2/*DEMOD_REG_OCT3*/] = 0x39; // Command Byte
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] = 0xF1; // Data Byte
#ifdef CANADA_PORT_8//20070709 EMP-CENTAURI
//sttbx_Print(">>> g_ChInfo[unitId].Tuner.Sat.ucSatellitePosition : %d\n",g_ChInfo[unitId].Tuner.Sat.ucSatellitePosition-1);
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] = (g_ChInfo[unitId].Tuner.Sat.ucSatellitePosition-1);//0xF1; // Data Byte drvTunerParam.Sat.ucSatellitePosition = stChannelParam.Sat.ucDiseqcPosInput;
#endif
ucCmdNum = 4;
break;
//end
case DiSEqCType_1_2:
#if 0//original
ucCmdNum = g_ucDiSEqCCmdNum[unitId];
for(i = 0; i < g_ucDiSEqCCmdNum[unitId]; i++)
DEMOD_REG[unitId][0x3D/*DEMOD_REG_OCT1*/ + i] = g_ucDiSEqCCmdBuf[unitId][i];
#else // 080118
ucCmdNum = g_ucDiSEqCCmdNum[unitId];
for(i = 0; i < g_ucDiSEqCCmdNum[unitId]; i++)
{
if(flag_motor_stop == 1)
{
DEMOD_REG[unitId][0x3D/*DEMOD_REG_OCT1*/ + i] = g_ucDiSEqCCmdBuf[unitId][i];
DEMOD_REG[unitId][0x3D] = 0xe0;
}
else
DEMOD_REG[unitId][0x3D/*DEMOD_REG_OCT1*/ + i] = g_ucDiSEqCCmdBuf[unitId][i];
}
#endif
break;
}
drv_channel_LNB22KHzTone(unitId, LNB22KHzTone_OFF);
//thomson DiSEqCDataSend(unitId, ucCmdNum);
#if 0 //original opened
DsecCommandWrite(0,&DEMOD_REG[unitId][0x3D],ucCmdNum);
#else // 080118
VK_TASK_Sleep(100);
DsecCommandWrite(0,&DEMOD_REG[unitId][0x3D],ucCmdNum);
VK_TASK_Sleep(100);
#endif
#else
unsigned char ucCmdNum;
int i;
DEMOD_REG[unitId][0x3B] = 0x00; // Framing Byte (Clear)
// set DiSEqC message
switch(type)
{
case DiSEqCType_2_0:
DEMOD_REG[unitId][0x3D/*DEMOD_REG_OCT1*/] = 0x02; // Framing Byte
case DiSEqCType_1_0:
DEMOD_REG[unitId][0x3D+0/*DEMOD_REG_OCT1*/] |= 0xE0; // Framing Byte (0xE0 for Type1, 0xE2 for Type2)
DEMOD_REG[unitId][0x3D+1/*DEMOD_REG_OCT2*/] = 0x10; // Address Byte
DEMOD_REG[unitId][0x3D+2/*DEMOD_REG_OCT3*/] = 0x38; // Command Byte
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] = 0xF0; // Data Byte
if (g_ChInfo[unitId].Tuner.Sat.ucSwitchOption == SWITCH_OPTION_B)
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] |= 0x08;
if (g_ChInfo[unitId].Tuner.Sat.ucSatellitePosition == SATELLITE_POSITION_B)
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] |= 0x04;
if (g_ChInfo[unitId].Tuner.Sat.ucPolarisation == TUNER_POLAR_HOR)
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] |= 0x02;
if (g_ChInfo[unitId].Tuner.Sat.ucLnbSelect == LNB_SELECT_HIGH)
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] |= 0x01;
ucCmdNum = 4;
break;
// 8sw
case DiSEqCType_1_1:
DEMOD_REG[unitId][0x3D+0/*DEMOD_REG_OCT1*/] |= 0xE0; // Framing Byte (0xE0 for Type1, 0xE2 for Type2)
DEMOD_REG[unitId][0x3D+1/*DEMOD_REG_OCT2*/] = 0x10; // Address Byte
DEMOD_REG[unitId][0x3D+2/*DEMOD_REG_OCT3*/] = 0x39; // Command Byte
DEMOD_REG[unitId][0x3D+3/*DEMOD_REG_OCT4*/] = 0xF1; // Data Byte
ucCmdNum = 4;
break;
//end
case DiSEqCType_1_2:
ucCmdNum = g_ucDiSEqCCmdNum[unitId];
for(i = 0; i < g_ucDiSEqCCmdNum[unitId]; i++)
DEMOD_REG[unitId][0x3D/*DEMOD_REG_OCT1*/ + i] = g_ucDiSEqCCmdBuf[unitId][i];
break;
}
drv_channel_LNB22KHzTone(unitId, LNB22KHzTone_OFF);
DiSEqCDataSend(unitId, ucCmdNum);
#endif
} // end of drv_channel_DiSEqC
/////////////////////////////////////////////////////////////////////////////////
// Function : SetExternalControl
// Description :
// Input :
// Output :
// Return :
/////////////////////////////////////////////////////////////////////////////////
void SetExternalControl(unsigned char unitId)
{
// LNB Over Load 啊 惯积 饶 官肺 Power阑 On 版快 SMPS俊 何淬阑 临 荐啊 乐栏骨肺
// 3锅狼 Loop 阑 荐青 饶 LNB Power 阑 On 窍绊 促矫 OverLoad阑 Check.
printDrvChEnter(("SetExternalControl ++\n"));
#if 0
printDrvCh(("Drv_channel : SetExternalControl unitId [%x] \n",unitId));
printDrvCh(("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucLnbPower : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucLnbPower ));
printDrvCh(("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucSwitchOption : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucSwitchOption ));
printDrvCh(("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucToneBurst : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucToneBurst ));
printDrvCh(("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucLnbSelect : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucLnbSelect ));
printDrvCh(("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucSwitchOption : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucSwitchOption ));
printDrvCh(("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucLnbVoltage : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucLnbVoltage ));
printDrvCh(("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucPolarisation : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucPolarisation ));
printDrvCh(("Drv_channel : g_ChannelFlag[%x].fgLNBOverLoad : %x \n",unitId,g_ChannelFlag[unitId].fgLNBOverLoad ));
printf("Drv_channel : SetExternalControl unitId [%x] \n",unitId);
printf("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucLnbPower : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucLnbPower );
printf("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucSwitchOption : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucSwitchOption );
printf("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucToneBurst : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucToneBurst );
printf("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucLnbSelect : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucLnbSelect );
printf("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucSwitchOption : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucSwitchOption );
printf("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucLnbVoltage : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucLnbVoltage );
printf("Drv_channel : g_ChInfo[%x].Tuner.Sat.ucPolarisation : %x \n",unitId,g_ChInfo[unitId].Tuner.Sat.ucPolarisation );
printf("Drv_channel : g_ChannelFlag[%x].fgLNBOverLoad : %x \n",unitId,g_ChannelFlag[unitId].fgLNBOverLoad);
#endif
#if (0)
if(g_ChInfo[unitId].Tuner.Sat.ucLnbPower == LNB_POWER_ON)
{
if(!g_ChannelFlag[unitId].fgLNBOverLoad)
{
drv_channel_Stream_Disable(unitId); // disable the ts stream.
}
}
#endif
// 080118 closed DSEC_ResetMicom(unitId); //
if(g_ChInfo[unitId].Tuner.Sat.ucLnbPower == LNB_POWER_ON)
{
if(!g_ChannelFlag[unitId].fgLNBOverLoad)
{
drv_channel_SoftresetRegister(unitId); // disable the ts stream.
//drv_channel_LNBPower(unitId, LNB_POWER_ON);
drv_channel_LNBVoltage(unitId, LNB_POWER_ON);
#if defined(SUPPORT_LEGACY_SWITCH) /* Legacy SW support */
FE_Wait(20);
//sttbx_Print(">>> SUPPORT_LEGACY_SWITCH g_ChInfo[unitId].Tuner.Sat.ucLegacySwitchMode : %x !!!\n",g_ChInfo[unitId].Tuner.Sat.ucLegacySwitchMode);
if (g_ChInfo[unitId].Tuner.Sat.ucLegacySwitchMode != eDISEQC_LEGACY_OFF)
{
// sttbx_Print("[%s %d]SetExternalControl ... Legacy SW = %d\n", __FILE__, __LINE__, g_ChInfo[unitId].Tuner.Sat.ucLegacySwitchMode);
drv_channel_LegacySwitchControl(unitId, g_ChInfo[unitId].Tuner.Sat.ucLegacySwitchMode);
}
FE_Wait(100);
drv_channel_Polarization(unitId,g_ChInfo[unitId].Tuner.Sat.ucPolarisation);
FE_Wait(100);
#else
drv_channel_Polarization(unitId,g_ChInfo[unitId].Tuner.Sat.ucPolarisation);
FE_Wait(20);
#endif /* SUPPORT_LEGACY_SWITCH */
g_ucLNBPower[unitId] = LNB_POWER_ON;
// g_ChannelFlag[unitId].fgLNBOverLoad = 0;
if(g_ChInfo[unitId].Tuner.Sat.ucSwitchOption != SWITCH_OPTION_MOTOR
&& g_ChInfo[unitId].Tuner.Sat.ucSwitchOption != SWITCH_OPTION_NONE)
{
// drv_channel_LNB22KHzTone(unitId, LNB22KHzTone_OFF);
if((g_ChInfo[unitId].Tuner.Sat.ucToneBurst == TONE_BURST_A)
|| (g_ChInfo[unitId].Tuner.Sat.ucToneBurst == TONE_BURST_B))
{
//printDrvCh(("ucToneBurst Control : %x\n",g_ChInfo[unitId].Tuner.Sat.ucToneBurst));
drv_channel_LNB22KHzTone(unitId, LNB22KHzTone_OFF);
drv_channel_ToneBurst(unitId, g_ChInfo[unitId].Tuner.Sat.ucToneBurst);
}
else if(g_ChInfo[unitId].Tuner.Sat.ucSwitchOption == SWITCH_OPTION_A ||
g_ChInfo[unitId].Tuner.Sat.ucSwitchOption == SWITCH_OPTION_B )
{
//printDrvCh(("ucSwitchOption : %x\n",g_ChInfo[unitId].Tuner.Sat.ucSwitchOption));
if(g_ChInfo[unitId].Tuner.Sat.ucDiseqc2xCommand == DiSEqC2XCMD)
{
drv_channel_DiSEqC(unitId, DiSEqCType_2_0);
}
else if(g_ChInfo[unitId].Tuner.Sat.ucDiseqc2xCommand == DiSEqC11XCMD)// 8sw
{
#ifndef CANADA_PORT_8
drv_channel_DiSEqC(unitId, DiSEqCType_1_0);
//task_delay(ST_GetClocksPerSecond()/1000*17);//do not delete
#endif
VK_TASK_Sleep(17);
drv_channel_DiSEqC(unitId, DiSEqCType_1_1);
}//end
else
{
drv_channel_DiSEqC(unitId, DiSEqCType_1_0);
}
}
}
//printf(">> g_ChInfo[unitId].Tuner.Sat.ucLnbSelect : %x \n",g_ChInfo[unitId].Tuner.Sat.ucLnbSelect);
//task_delay((ST_GetClocksPerSecond()*60)/1000);// 5105
VK_TASK_Sleep(60*3);
if( g_ChInfo[unitId].Tuner.Sat.ucLnbSelect == DDI_LNB_22K_TONE_ON/* NEO_ANTENNA_LNB_22K_TONE_ON */)
drv_channel_LNB22KHzTone(unitId, LNB22KHzTone_ON);
else if( g_ChInfo[unitId].Tuner.Sat.ucLnbSelect == DDI_LNB_22K_TONE_OFF /*NEO_ANTENNA_LNB_22K_TONE_OFF*/ )
drv_channel_LNB22KHzTone(unitId, LNB22KHzTone_OFF);
#if defined(SUPPORT_LEGACY_SWITCH) /* Legacy SW support */
FE_Wait(100);
if (g_ChInfo[unitId].Tuner.Sat.ucLegacySwitchMode != eDISEQC_LEGACY_OFF)
drv_channel_LegacySwitchControl(unitId, g_ChInfo[unitId].Tuner.Sat.ucLegacySwitchMode);
/* Recover HV */
FE_Wait(100);
//drv_channel_LNBVoltage(unitId, g_ChInfo[unitId].Tuner.Sat.ucLnbVoltage);
drv_channel_Polarization(unitId,g_ChInfo[unitId].Tuner.Sat.ucPolarisation);
FE_Wait(20);
#endif /* SUPPORT_LEGACY_SWITCH */
}
}
else
{
//drv_channel_LNBPower(unitId, LNB_POWER_OFF);
drv_channel_LNBVoltage(unitId, LNB_POWER_OFF);
g_ucLNBPower[unitId] = LNB_POWER_OFF;
}
printDrvChExit(("SetExternalControl --\n"));
} // end of SetExternalControl
/////////////////////////////////////////////////////////////////////////////////
// Function : GET_VAGCA
// Description : Get Analog AGC information
// Input :
// Output :
// Return :
/////////////////////////////////////////////////////////////////////////////////
void GET_VAGCA(unsigned char unitId,unsigned char *VAGCA)
{
#ifdef THOMSON_MM
#else
drv_ch_i2c_DEMODRead(unitId, DEMOD_REG_VAGCA, VAGCA, 1);
#endif
} // end of GET_VAGCA
/////////////////////////////////////////////////////////////////////////////////
// Function : drv_channel_GetAGCLevel
// Description :
// Input :
// Output :
// Return :
/////////////////////////////////////////////////////////////////////////////////
unsigned char drv_channel_GetAGCLevel(unsigned char unitId)
{
unsigned char ucVAGCA_tmp, ucVAGCA;
unsigned char ucMaxAttempt = 3;
do
{
ucMaxAttempt --;
ucVAGCA_tmp = Snim_Drv_Get_Strength();
ucVAGCA = Snim_Drv_Get_Strength();
} while((ucVAGCA_tmp != ucVAGCA) && (ucMaxAttempt > 0));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -