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

📄 db_ms.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
📖 第 1 页 / 共 5 页
字号:
	}
}
/*******************************************************************************************/

static void _dvb_net_2_db(	EN_SYSTEM_TYPE enSysType, DVB_NetInfo *pstNetInfo,
							DB_SatRel *pstNetRel, DB_NetDetail *pstNetDetail)
{
	pstNetDetail->enSysType = enSysType;

	switch(enSysType)
	{
	case EN_SYSTEM_TYPE_DVBC:
		memcpy(pstNetDetail->netCable.acProviderName,       pstNetInfo->netCable.acProviderName, MAX_PROVIDER_NAME_LENGTH);

		pstNetRel->as16SrvStartIdx[EN_SERVICE_TYPE_TV]    = pstNetInfo->netCable.u16VidService_start_idx;
		pstNetRel->as16SrvEndIdx  [EN_SERVICE_TYPE_TV]    = pstNetInfo->netCable.u16VidService_end_idx;
		pstNetRel->as16SrvStartIdx[EN_SERVICE_TYPE_RADIO] = pstNetInfo->netCable.u16RdoService_start_idx;
		pstNetRel->as16SrvEndIdx  [EN_SERVICE_TYPE_RADIO] = pstNetInfo->netCable.u16RdoService_end_idx;
		break;
	case EN_SYSTEM_TYPE_DVBT:
		memcpy(pstNetDetail->netTerre.acProviderName,       pstNetInfo->netTerre.acProviderName, MAX_PROVIDER_NAME_LENGTH);

		pstNetRel->as16SrvStartIdx[EN_SERVICE_TYPE_TV]    = pstNetInfo->netTerre.u16VidService_start_idx;
		pstNetRel->as16SrvEndIdx  [EN_SERVICE_TYPE_TV]    = pstNetInfo->netTerre.u16VidService_end_idx;
		pstNetRel->as16SrvStartIdx[EN_SERVICE_TYPE_RADIO] = pstNetInfo->netTerre.u16RdoService_start_idx;
		pstNetRel->as16SrvEndIdx  [EN_SERVICE_TYPE_RADIO] = pstNetInfo->netTerre.u16RdoService_end_idx;
		break;
	case EN_SYSTEM_TYPE_DVBS:
		memcpy(pstNetDetail->netSat.acSatelliteName,        pstNetInfo->netSat.acSatelliteName, MAX_SAT_NAME_LENGTH);
		pstNetDetail->netSat.b8Control12V                 = pstNetInfo->netSat.b8Control12V;
		pstNetDetail->netSat.b8Tone22K                    = pstNetInfo->netSat.b8Tone22K;
		pstNetDetail->netSat.u16LocalFrequency            = pstNetInfo->netSat.u16LocalFrequency;
		pstNetDetail->netSat.u16LocalFrequency_High       = pstNetInfo->netSat.u16LocalFrequency_High;
		pstNetDetail->netSat.s16Longitude                 = pstNetInfo->netSat.s16Longitude;
		pstNetDetail->netSat.u8DiSEqC                     = pstNetInfo->netSat.u8DiSEqC;
		pstNetDetail->netSat.u8LNBPower                   = pstNetInfo->netSat.u8LNBPower;
		pstNetDetail->netSat.u8LNBType                    = pstNetInfo->netSat.u8LNBType;
		pstNetDetail->netSat.u8MotorPosition              = pstNetInfo->netSat.u8MotorPosition;

		pstNetRel->as16SrvStartIdx[EN_SERVICE_TYPE_TV]    = pstNetInfo->netSat.u16VidService_start_idx;
		pstNetRel->as16SrvEndIdx  [EN_SERVICE_TYPE_TV]    = pstNetInfo->netSat.u16VidService_end_idx;
		pstNetRel->as16SrvStartIdx[EN_SERVICE_TYPE_RADIO] = pstNetInfo->netSat.u16RdoService_start_idx;
		pstNetRel->as16SrvEndIdx  [EN_SERVICE_TYPE_RADIO] = pstNetInfo->netSat.u16RdoService_end_idx;
		break;
	default:
		break;
	}
}
/*******************************************************************************************/

static void _db_2_dvb_net(	EN_SYSTEM_TYPE enSysType, DVB_NetInfo *pstNetInfo,
							DB_SatRel *pstNetRel, DB_NetDetail *pstNetDetail)
{
	switch(enSysType)
	{
	case EN_SYSTEM_TYPE_DVBC:
		memcpy(pstNetInfo->netCable.acProviderName,    pstNetDetail->netCable.acProviderName, MAX_PROVIDER_NAME_LENGTH);

		pstNetInfo->netCable.u16VidService_start_idx = pstNetRel->as16SrvStartIdx[EN_SERVICE_TYPE_TV];
		pstNetInfo->netCable.u16VidService_end_idx   = pstNetRel->as16SrvEndIdx  [EN_SERVICE_TYPE_TV];
		pstNetInfo->netCable.u16RdoService_start_idx = pstNetRel->as16SrvStartIdx[EN_SERVICE_TYPE_RADIO];
		pstNetInfo->netCable.u16RdoService_end_idx   = pstNetRel->as16SrvEndIdx  [EN_SERVICE_TYPE_RADIO];
		break;
	case EN_SYSTEM_TYPE_DVBT:
		memcpy(pstNetInfo->netTerre.acProviderName,    pstNetDetail->netTerre.acProviderName, MAX_PROVIDER_NAME_LENGTH);

		pstNetInfo->netTerre.u16VidService_start_idx = pstNetRel->as16SrvStartIdx[EN_SERVICE_TYPE_TV];
		pstNetInfo->netTerre.u16VidService_end_idx   = pstNetRel->as16SrvEndIdx  [EN_SERVICE_TYPE_TV];
		pstNetInfo->netTerre.u16RdoService_start_idx = pstNetRel->as16SrvStartIdx[EN_SERVICE_TYPE_RADIO];
		pstNetInfo->netTerre.u16RdoService_end_idx   = pstNetRel->as16SrvEndIdx  [EN_SERVICE_TYPE_RADIO];
		break;
	case EN_SYSTEM_TYPE_DVBS:
		memcpy(pstNetInfo->netSat.acSatelliteName,     pstNetDetail->netSat.acSatelliteName, MAX_SAT_NAME_LENGTH);
		pstNetInfo->netSat.b8Control12V              = pstNetDetail->netSat.b8Control12V;
		pstNetInfo->netSat.b8Tone22K                 = pstNetDetail->netSat.b8Tone22K;
		pstNetInfo->netSat.u16LocalFrequency         = pstNetDetail->netSat.u16LocalFrequency;
		pstNetInfo->netSat.u16LocalFrequency_High    = pstNetDetail->netSat.u16LocalFrequency_High;
		pstNetInfo->netSat.s16Longitude              = pstNetDetail->netSat.s16Longitude;
		pstNetInfo->netSat.u8DiSEqC                  = pstNetDetail->netSat.u8DiSEqC;
		pstNetInfo->netSat.u8LNBPower                = pstNetDetail->netSat.u8LNBPower;
		pstNetInfo->netSat.u8LNBType                 = pstNetDetail->netSat.u8LNBType;
		pstNetInfo->netSat.u8MotorPosition           = pstNetDetail->netSat.u8MotorPosition;

		pstNetInfo->netSat.u16VidService_start_idx   = pstNetRel->as16SrvStartIdx[EN_SERVICE_TYPE_TV];
		pstNetInfo->netSat.u16VidService_end_idx     = pstNetRel->as16SrvEndIdx  [EN_SERVICE_TYPE_TV];
		pstNetInfo->netSat.u16RdoService_start_idx   = pstNetRel->as16SrvStartIdx[EN_SERVICE_TYPE_RADIO];
		pstNetInfo->netSat.u16RdoService_end_idx     = pstNetRel->as16SrvEndIdx  [EN_SERVICE_TYPE_RADIO];
		break;
	default:
		break;
	}
}
/*******************************************************************************************/

static void _dvb_srv_2_db(DVB_ServiceInfo *pstService, DB_SrvRel* pstSrvRel, DB_ExtraSrv* pstExtraSrv, DB_SrvDetail*	pstSrvDetail)
{
#ifdef MULTI_AUDIO_SURPPORT
	u8 u8tempi = 0;
#endif
#ifdef ATSC_SYSTEM
	memcpy (pstSrvDetail->acServiceName, pstService->acServiceName, (MAX_UTF16_SERVICE_NAME_LENGTH * 2 + 3));
#if 0	
	DBMS_DBG(("##db [%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][0x%x]\n",
	pstSrvDetail->acServiceName[0],
	pstSrvDetail->acServiceName[1], pstSrvDetail->acServiceName[2],
	pstSrvDetail->acServiceName[3], pstSrvDetail->acServiceName[4],
	pstSrvDetail->acServiceName[5], pstSrvDetail->acServiceName[6],
	pstSrvDetail->acServiceName[7], pstSrvDetail->acServiceName[8],
	pstSrvDetail->acServiceName[9], pstSrvDetail->acServiceName[10],
	pstSrvDetail->acServiceName[11], pstSrvDetail->acServiceName[12],
	pstSrvDetail->acServiceName[13], pstSrvDetail->acServiceName[14]));
#endif	

	pstSrvDetail->u32MajorCHNo = pstService->u32MajorCHNo;
	pstSrvDetail->u32MinorCHNo = pstService->u32MinorCHNo;
		
	pstSrvDetail->u32AccessCtrl = pstService->u32AccessCtrl;
	pstSrvDetail->u32Hidden = pstService->u32Hidden;
	pstSrvDetail->u32HideGuide = pstService->u32HideGuide;
	pstSrvDetail->u32ServiceType = pstService->u32ServiceType;
#else
	memcpy (pstSrvDetail->acServiceName, pstService->acServiceName, MAX_SERVICE_NAME_LENGTH);
#endif
	pstSrvDetail->u16AudioPid = pstService->au16AudioPid[0];
#ifdef MULTI_AUDIO_SURPPORT
	while((pstService->au16AudioPid[u8tempi]!=0)&&(u8tempi<=MAX_AUDIO_PID_NUMBER))
	{
		pstSrvDetail->au16AudioPid[u8tempi] = pstService->au16AudioPid[u8tempi];
		u8tempi++;
	}
#endif
	pstSrvDetail->u16PCRPid = pstService->u16PCRPid;
	pstSrvDetail->u16ServiceId = pstService->u16ServiceId;
	pstSrvDetail->u16TTXPid = pstService->u16TTXPid;
	pstSrvDetail->u16TypeEX = pstService->u16TypeEX;
	pstSrvDetail->u16VideoPid = pstService->u16VideoPid;
	pstSrvDetail->u8Type = pstService->u8Type;
	pstSrvDetail->u16PMTPid = pstService->u16PMTPid;
	pstSrvDetail->u8AudioVolume = pstService->u8AudioVolume;
	pstSrvDetail->bitAc3Flag = pstService->u16AC3Flag;

#ifdef ATSC_SYSTEM
	pstSrvDetail->u16SourceID = pstService->u16SourceID;
#endif
	
#ifdef ENABLE_LCN_SUPPORT
	pstSrvDetail->b1VisibleService = pstService->b1VisibleService;
	pstSrvDetail->b1LCNEnable      = pstService->b1LCNEnable;
	pstSrvDetail->u16LCN = pstService->u16LCN;
	pstSrvDetail->bitLCNGet = pstService->bitLCNGet;
	pstSrvDetail->u16NID = pstService->u16NID;
    #ifdef LCN_COUNTRY_CHECK_DISABLE    
    pstSrvDetail->u16PCN        = pstService->u16PCN;
    pstSrvDetail->bitCollison   = pstService->bitCollison;
    #endif
#endif
	pstSrvDetail->u16TSID = pstService->u16TSID;
	pstSrvDetail->u16ONID = pstService->u16ONID;

#ifdef CI_ENABLE
	pstSrvDetail->u16CASystemID = pstService->u16CASystemID;
#endif
//	pstSrvRel->u16LogicAddress = 0xffff;
	pstSrvRel->u16TpIdx = pstService->u8TransponderIndex;

	pstExtraSrv->u16TypeEx = pstService->u16TypeEX;
	pstExtraSrv->u16EIT_HeaderIdx = pstService->u16EitHeaderIdx;
	
#ifdef SUPPORT_SECOND_AUDIO_LANGUAGE
    pstSrvDetail->u8MultiAudio   = pstService->u8MultiAudio;
#endif//SUPPORT_SECOND_AUDIO_LANGUAGE
}
/*******************************************************************************************/

static void _db_2_dvb_srv(DVB_ServiceInfo *pstService, DB_SrvRel* pstSrvRel, DB_ExtraSrv* pstExtraSrv, DB_SrvDetail*	pstSrvDetail)
{
#ifdef MULTI_AUDIO_SURPPORT
	u8	u8tempi = 0;
#endif
#ifdef ATSC_SYSTEM
	//pstService->acServiceName[0] = 0x11;
	memcpy (pstService->acServiceName, pstSrvDetail->acServiceName, MAX_UTF16_SERVICE_NAME_LENGTH * 2 + 3);
#if 0	
	DBMS_DBG(("dvb [%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][0x%x]\n",
	pstService->acServiceName[0],
	pstService->acServiceName[1], pstService->acServiceName[2],
	pstService->acServiceName[3], pstService->acServiceName[4],
	pstService->acServiceName[5], pstService->acServiceName[6],
	pstService->acServiceName[7], pstService->acServiceName[8],
	pstService->acServiceName[9], pstService->acServiceName[10],
	pstService->acServiceName[11], pstService->acServiceName[12],
	pstService->acServiceName[13], pstService->acServiceName[14]));
#endif
	pstService->u32MajorCHNo = pstSrvDetail->u32MajorCHNo;
	pstService->u32MinorCHNo = pstSrvDetail->u32MinorCHNo;
	
	pstService->u32AccessCtrl = pstSrvDetail->u32AccessCtrl;
	pstService->u32Hidden = pstSrvDetail->u32Hidden;
	pstService->u32HideGuide = pstSrvDetail->u32HideGuide;
	pstService->u32ServiceType = pstSrvDetail->u32ServiceType;
#else
	memcpy(pstService->acServiceName,pstSrvDetail->acServiceName, MAX_SERVICE_NAME_LENGTH);
#endif	
	pstService->au16AudioPid[0] = pstSrvDetail->u16AudioPid;
#ifdef MULTI_AUDIO_SURPPORT
	while((pstSrvDetail->au16AudioPid[u8tempi]!=0)&&(u8tempi<=MAX_AUDIO_PID_NUMBER))
	{
		pstService->au16AudioPid[u8tempi] = pstSrvDetail->au16AudioPid[u8tempi];
		u8tempi++;
	}
#endif
	pstService->u16EitHeaderIdx = pstExtraSrv->u16EIT_HeaderIdx;
	pstService->u16PCRPid = pstSrvDetail->u16PCRPid;
	pstService->u16ServiceId = pstSrvDetail->u16ServiceId;
	pstService->u16TTXPid = pstSrvDetail->u16TTXPid;
	pstService->u16TypeEX = pstSrvDetail->u16TypeEX;
	pstService->u16VideoPid = pstSrvDetail->u16VideoPid;
	pstService->u8TransponderIndex = pstSrvRel->u16TpIdx;
	pstService->u8Type = pstSrvDetail->u8Type;
	pstService->u16PMTPid = pstSrvDetail->u16PMTPid;
	pstService->u8AudioVolume = pstSrvDetail->u8AudioVolume;
	pstService->u16AC3Flag=pstSrvDetail->bitAc3Flag;

#ifdef ATSC_SYSTEM
	pstService->u16SourceID = pstSrvDetail->u16SourceID;
//DBMS_DBG(("@@@@@@@@ u16SourceID[%d]\n", pstService->u16SourceID));	
#endif
	
#ifdef ENABLE_LCN_SUPPORT
	pstService->u16LCN = pstSrvDetail->u16LCN;	
    pstService->b1VisibleService = pstSrvDetail->b1VisibleService;
	pstService->b1LCNEnable      = pstSrvDetail->b1LCNEnable;
	pstService->bitLCNGet        = pstSrvDetail->bitLCNGet;
	pstService->u16NID = pstSrvDetail->u16NID;
    #ifdef LCN_COUNTRY_CHECK_DISABLE    
    pstService->u16PCN      = pstSrvDetail->u16PCN;
    pstService->bitCollison = pstSrvDetail->bitCollison;
    #endif    
#endif
	pstService->u16TSID = pstSrvDetail->u16TSID;
	pstService->u16ONID = pstSrvDetail->u16ONID;

#ifdef  HDTV_DETECTION_ENABLE
	pstService->u8StreamType = pstSrvDetail->u8StreamType;
#endif

#ifdef CI_ENABLE
	pstService->u16CASystemID = pstSrvDetail->u16CASystemID;
#endif

#ifdef SUPPORT_SECOND_AUDIO_LANGUAGE
    pstService->u8MultiAudio = pstSrvDetail->u8MultiAudio;
#endif//SUPPORT_SECOND_AUDIO_LANGUAGE
}
/*******************************************************************************************/

static void _evil_kindergarten(EN_DB_TABLE_TYPE enTableType, u16 u16TotalChildNum)
{
#define CHECK 1
#define NOT_HERE 0

	u8 *pu8ChildNameList;
	s16 s16EvilStick;
	EN_SYSTEM_TYPE	enSysType, enOrigSysType;
	EN_SERVICE_TYPE		enSrvType;
	DB_SrvRel			stSrvRel;
	DB_TpRel			stTpRel;
	DB_SatRel			stNetRel;
	u16					u16RelIdx, u16SrvIdx;

	enOrigSysType = m_enSystemType;

#if defined(WIN32)
	pu8ChildNameList = malloc(u16TotalChildNum);
#else
gen_point = 146;
	pu8ChildNameList = DVB_MemoryAllocate(u16TotalChildNum);
#endif

	if (pu8ChildNameList == NULL)
	{
		DBMS_MSG (( "\n allocate memory fail in _evil_kindergarten\n"));
	}

	// check children at morning
	for(s16EvilStick=0; s16EvilStick<u16TotalChildNum; s16EvilStick++)
	{
		// say "where is stan?"
		if( DBFS_InfoCheckAvailable(enTableType, s16EvilStick)==FALSE)
		{
			pu8ChildNameList[s16EvilStick] = NOT_HERE;
		}	
		else
		{
			pu8ChildNameList[s16EvilStick] = CHECK;
		}	
	}

	// after playing whole day....

	// it's time to go home
	switch(enTableType)
	{
	case EN_SRV_TABLE:	// stammer parents
		for(enSysType=0; enSysType<EN_SYSTEM_TYPE_TOTAL; enSysType++)
		{
			m_enSystemType = enSysType;
			for(enSrvType=0; enSrvType<EN_SERVICE_TYPE_TOTAL; enSrvType++)
			{
				for(s16EvilStick = 0;
					s16EvilStick < m_as16SrvTotal[enSysType][enSrvType];
					s16EvilStick++)
				{
					// hard to communicate
					u16SrvIdx = s16EvilStick;
					u16RelIdx = _service_get_relation_index(enSysType, enSrvType, u16SrvIdx);

					// Parents say his child's name.
					DBFS_RelationGetSrv(u16RelIdx, &stSrvRel);

					// check my namelist...
					if( pu8ChildNameList[stSrvRel.u16LogicAddress]==CHECK )
					{
						// your child is here, take him back.
						pu8ChildNameList[stSrvRel.u16LogicAddress] = NOT_HERE;
					}
					else
					{
						// evil kindergarten lost this child..., clean parent's memory
						DVB_ServiceDelete ( enSrvType, u16SrvIdx);
						s16EvilStick--;
					}
				}
			}
		}
		break;
	case EN_TP_TABLE:	// normal parents
		for(enSysType = 0; enSysType < EN_SYSTEM_TYPE_TOTAL; enSysType++)
		{
			m_enSystemType = enSysType;
			for(s16EvilStick=0; s16EvilStick<m_as16TpTotal[enSysType]; s16EvilStick++)
			{
				// Parents say his child's name.
				DBFS_RelationGetTp(_tp_get_relation_index(enSysType, s16EvilStick), &stTpRel);

				// check my namelist...
				if( pu8ChildNameList[stTpRel.u16LogicAddress]==CHECK )
				{
					// your child is here, take him back.
					pu8ChildNameList[stTpRel.u16LogicAddress] = NOT_HERE;
				}
				else
				{
					// evil kindergarten lost this child..., clean parent's memory
					DVB_TPDelete (s16EvilStick, &u16SrvIdx, &u16SrvIdx);
					s16EvilStick--;
				}
			}
		}
		break;
	case EN_SAT_TABLE:	// weird parents
		for(enSysType = 0; enSysType < EN_SYSTEM_TYPE_TOTAL; enSysType++)
		{
			m_enSystemType = enSysType;
			for(s16EvilStick = 0; s16EvilStick < m_as16NetTotal[enSysType]; s16EvilStick++)
			{
				// Parents say his child's name.
				DBFS_RelationGetNet(_network_get_relation_index(enSysType, s16EvilStick), &stNetRel);

				// check my namelist...
				if( pu8ChildNameList[stNetRel.u16LogicAddress]==CHECK )
				{
					// your child is here, take him back.
					pu8ChildNameList[stNetRel.u16LogicAddress] = NOT_HERE;
				}
				else
				{
					if(	(enSysType == EN_SYSTEM_TYPE_DVBS) &&
						(s16EvilStick == m_as16NetTotal[enSysType] - 1) )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -