⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scan_s.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
📖 第 1 页 / 共 2 页
字号:
		}	
		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 + -