📄 scan_s.c
字号:
}
if(enScanEditType==EN_SCAN_EDIT_ADD_NEW_ONLY)
{
DVB_SatReadDetail(u16SatIdxOfAutoScan,&stSatItem, &stSatRel);
u16Service_start_idx = stSatRel.as16SrvStartIdx[enSrvType];
u16Service_end_idx = stSatRel.as16SrvEndIdx[enSrvType];
if((u16Service_start_idx != 0xFFFF)&&(u16Service_end_idx != 0xFFFF))
{
for(j=u16Service_start_idx; j<=u16Service_end_idx; j++)
{
DVB_ServiceReadDetail(enSrvType, j, &stSrvTempItem, &stSrvRelTemp );
if(stSrvRelTemp.u16TpIdx == *pu16TpIdx)
// don't check sid, order by manual key in database
// if(stSrvTempItem.u16ServiceId== stSrvItem.u16ServiceId)
if(stSrvTempItem.u16VideoPid == stSrvItem.u16VideoPid)
{
if((stSrvTempItem.u8Type&0x08)==0x08)
{
stSrvItem.u8Type |= 0x08;
}
if((stSrvTempItem.u8Type&0x80)==0x80)
{
stSrvItem.u8Type |= 0x80;
}
stSrvItem.u16TypeEX = stSrvTempItem.u16TypeEX;
DVB_ServiceUpdateDetail(enSrvType, j, &stSrvItem, stSrvRelTemp.u16TpIdx);
if(enSrvType==EN_SERVICE_TYPE_TV)
{
if(u16video_insert_idx==0xffff)
{
u16video_insert_idx = j;
}
}
else
{
if(u16radio_insert_idx==0xffff)
{
u16radio_insert_idx = j;
}
}
break;
}
}
if(j<=u16Service_end_idx)
{
continue; // same service found!!
}
}
}
{
if (b8SetTPID == FALSE)
{
pstTP->u16OrgNID = u16OriginalNID;
pstTP->u16TPID = u16TransportStreamID;
//SCAN_DBG((" ##### pu16TpIdx[%d] freq[%d] u16OriginalNID[%d] u16TransportStreamID[%d]\n",
// *pu16TpIdx, pstTP->u16TPFrequency, u16OriginalNID, u16TransportStreamID));
DVB_TPUpdateDetail(*pu16TpIdx, pstTP);
b8SetTPID = TRUE;
}
}
if(DVB_ServiceAddDetail(enSrvType, &u16SrvIdx, &stSrvItem, *pu16TpIdx)==FALSE)
{
// database full!!
b8SrvDbFree = FALSE;
break;
}
if(enSrvType==EN_SERVICE_TYPE_TV)
{
u8NumOfVideoInTp++;
if(u16video_insert_idx==0xffff)
u16video_insert_idx = u16SrvIdx;
}
else
{
u8NumOfRadioInTp++;
if(u16radio_insert_idx==0xffff)
u16radio_insert_idx = u16SrvIdx;
}
}
DVB_SI_EndOfParserTP();
#if defined(CT216U)||defined(CT956)
if (CT_DEMUX_SetPreScan (FALSE) != DRV_OK)
{
return EN_SCAN_ERROR_ABORT;
}
#endif
if(b8SrvDbFree == TRUE)
{
return EN_SCAN_NO_ERROR;
}
else
{
return EN_SCAN_ERROR_SERVICE_FULL;
}
}
/****************************************************************************/
EN_SCAN_ERROR DVB_ScanTPEdit (u16 u16TpIdx, DB_TpDetail *pstTP, EN_SCAN_EDIT_TYPE enScanEditType, bool8 b8FreeMode)
{
switch(DVB_TunerSetParameter(u16TpIdx, pstTP, EN_TUNER_WAITING_LONG))
{
case EN_NIM_ABORT:
return EN_SCAN_ERROR_ABORT;
case EN_NIM_NO_LOCKED:
return EN_SCAN_ERROR_NIM_NO_LOCK;
case EN_NIM_LOCKED:
break;
default:
return EN_SCAN_ERROR_ABORT;
}
return _ParsingTp(&u16TpIdx, pstTP, enScanEditType, b8FreeMode);
}
/****************************************************************************/
EN_SCAN_ERROR DVB_ScanTPAdd (DB_TpDetail *pstTP, bool8 b8FreeMode, u16 *pu16TpIdx)
{
if(DVB_TPGetTotal()>=MAX_NUM_OF_TP)
return EN_SCAN_ERROR_TP_FULL;
switch(DVB_TunerSetParameter(0xffff, pstTP, EN_TUNER_WAITING_LONG))
{
case EN_NIM_ABORT:
return EN_SCAN_ERROR_ABORT;
case EN_NIM_NO_LOCKED:
return EN_SCAN_ERROR_NIM_NO_LOCK;
case EN_NIM_LOCKED:
break;
default:
return EN_SCAN_ERROR_ABORT;
}
return _ParsingTp(pu16TpIdx, pstTP, EN_SCAN_ADD_ALL, b8FreeMode);
}
/****************************************************************************/
void DVB_GetScanResultTPInfo (DVB_ScanTpInfo *pstScanTpInfo)
{
pstScanTpInfo->u16Vid1stServiceIdx = u16video_insert_idx;
pstScanTpInfo->u16Rdo1stServiceIdx = u16radio_insert_idx;
pstScanTpInfo->u16VidServiceNum = u8NumOfVideoInTp;
pstScanTpInfo->u16RdoServiceNum = u8NumOfRadioInTp;
}
/****************************************************************************/
EN_SCAN_ERROR DVB_ScanSatellite (u16 u16SatelliteIdx, DVB_AutoScanParameter *pstScanParameter)
{
stAutoScanParameter = *pstScanParameter;
u16SatIdxOfAutoScan = u16SatelliteIdx;
u16TotalTpCount = DVB_TPGetTotal();
u16TotalVideoCount = 0;
u16TotalRadioCount = 0;
u16 u16Key;
DVB_SatReadDetail(u16SatIdxOfAutoScan,&stSatItem,&stSatRel);
pstScanParameter->b8DiSEqC_Toneburst = stSatItem.b8DiSEqC_Toneburst; //add by KS
DVB_TunerAutoScan(pstScanParameter);
if ( DVB_DetectKey() )
{
u16Key = DVB_CheckKey();
DVB_CleanKey();
if(u16Key == KEY_EXIT)
{
return EN_SCAN_ERROR_ABORT;
}
}
if(DVB_TPGetTotal()>=MAX_NUM_OF_TP)
{
return EN_SCAN_ERROR_TP_FULL;
}
if(DVB_ServiceGetTotal(EN_SERVICE_TYPE_TV)+DVB_ServiceGetTotal(EN_SERVICE_TYPE_RADIO) >= MAX_NUM_OF_SRV-1)
{
return EN_SCAN_ERROR_SERVICE_FULL;
}
return EN_SCAN_NO_ERROR;
}
/****************************************************************************/
void ScanProgress_Callback (u8 u8Percent)
{
DVB_ScanProgress_Callback (u8Percent);
}
/****************************************************************************/
bool8 ScanLocked_Callback (DB_TpDetail *pstTP)
{
DVB_AutoScanInfo stCallbackInfo;
u16 u16DontCare;
u16 u16Key;
switch ( _ParsingTp(&u16DontCare, pstTP, EN_SCAN_AUTO, stAutoScanParameter.b8FreeMode)==EN_SCAN_NO_ERROR )
{
case EN_SCAN_ERROR_TP_FULL:
case EN_SCAN_ERROR_SERVICE_FULL:
//SCAN_DBG(("\n>> ScanLocked_Callback() : EN_SCAN_ERROR_TP_FULL\EN_SCAN_ERROR_SERVICE_FULL"));
return FALSE; // terminate autoscan
default:
//SCAN_DBG(("\n>> ScanLocked_Callback() : default"));
break;
}
if(DVB_DetectKey())
{
u16Key = DVB_CheckKey();
DVB_CleanKey();
if(u16Key == KEY_EXIT)
{
return FALSE; // terminate autoscan
}
}
// for info call back function
u16TotalVideoCount += u8NumOfVideoInTp;
u16TotalRadioCount += u8NumOfRadioInTp;
stCallbackInfo.pstTP = pstTP;
stCallbackInfo.u16TPNum = u16TotalTpCount;
stCallbackInfo.u16Vid1stServiceIdx = u16video_insert_idx;
stCallbackInfo.u16Rdo1stServiceIdx = u16radio_insert_idx;
stCallbackInfo.u16VidServiceNum = u8NumOfVideoInTp;
stCallbackInfo.u16RdoServiceNum = u8NumOfRadioInTp;
stCallbackInfo.u16TotalVidServiceNum = u16TotalVideoCount;
stCallbackInfo.u16TotalRdoServiceNum = u16TotalRadioCount;
DVB_ScanInfo_Callback (&stCallbackInfo);
#if 1
SCAN_DBG(("\n>> %03d, frequency = %05d, symbol rate = %05d, polar = %d, tone = %d\n",
u16TotalTpCount,
pstTP->u16TPFrequency,
pstTP->u16SymbolRate,
pstTP->b8Polar_H,
pstTP->b8Tone22K));
#endif
return TRUE; // keeping scan next transponder
}
/****************************************************************************/
#if 0
void dump_autoscan_params(DVB_AutoScanParameter *pstScanParameter)
{
SCAN_DBG(("\n>> pstScanParameter->u16LocalFrequency = 0x%x",pstScanParameter->u16LocalFrequency));
SCAN_DBG(("\n>> pstScanParameter->u8DiSEqC = 0x%hx",pstScanParameter->u8DiSEqC));
SCAN_DBG(("\n>> pstScanParameter->b8QuickSearch = 0x%hx",pstScanParameter->b8QuickSearch));
SCAN_DBG(("\n>> pstScanParameter->b8FreeMode = 0x%hx",pstScanParameter->b8FreeMode));
SCAN_DBG(("\n>> pstScanParameter->b8Tone22K = 0x%hx\n",pstScanParameter->b8Tone22K));
}
#endif
/****************************************************************************/
#if 0
#include "ap_ch_sw.h"
void test_NIM_PerformeceCheck(u16 u16CurrentSatListIdx)
{
u16 u16TpStartIdx, u16TpEndIdx, u16Count;
bool8 b8LockSta;
DB_TpDetail stTempTpDetail;
DB_TpRel stTempTpRel;
//disable ap_ch_switch_timer_callback()
ap_ch_switch_lock (TRUE);
// disable AV pid
DVB_AudioSetPID(0);
DVB_VideoSetPID(0);
// reset DSP/RISC
DVB_AudioVideoStop();
SCAN_DBG(("NIM test start\n"));
{//add by KS 2007/10/16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -