Exemple #1
0
//parse LCN descriptor
INT32 si_on_lcn_desc(UINT8 tag, UINT8 length, UINT8 *data, void *priv)
{
	struct nit_section_info *n_info = (struct nit_section_info *)priv;

	if (n_info->s_nr==PSI_MODULE_MAX_NIT_SINFO_NUMBER)
	{
		SN_PRINTF("%s: maximum lcn collected!\n", __FUNCTION__);
		return SI_SUCCESS;
	}

	//must follow private data specifier descriptor
#if(PRIVATE_DATA_SPEC != INVALID_PRIVATE_DATA_SPEC)
	if(n_info->priv_spec != PRIVATE_DATA_SPEC)
		return SI_SUCCESS;
#endif

	//parse lcn loop	
	while (length >= 4)
	{
#ifdef SUPPORT_FRANCE_HD
		UINT16 i;
		for(i=0; i<n_info->s_nr; i++)
		{
			if(n_info->s_info[i].sid == ((data[0]<<8)|data[1]))
				break;
		}

		if(i == n_info->s_nr)
		{
			n_info->s_info[n_info->s_nr].onid = n_info->onid;
			n_info->s_info[n_info->s_nr].tsid = n_info->tsid;
			n_info->s_info[n_info->s_nr].sid = (data[0]<<8)|data[1];
			n_info->s_info[n_info->s_nr].lcn = ((data[2]&0x03)<<8)|data[3];
		#ifdef ITALY_HD_BOOK_SUPPORT	
			n_info->s_info[n_info->s_nr].visible_service_flag = (data[2] >> 7);
		#endif
			SN_PRINTF("LCN[%d]: %d - onid: 0x%X, tsid: 0x%X, sid: 0x%X\n",
						n_info->s_nr,
						n_info->s_info[n_info->s_nr].lcn,
						n_info->s_info[n_info->s_nr].onid,
						n_info->s_info[n_info->s_nr].tsid,
						n_info->s_info[n_info->s_nr].sid
						);
			n_info->s_nr ++;
		}
		else
		{
Exemple #2
0
INT32 si_on_HDsimulLCN_desc(UINT8 tag, UINT8 length, UINT8 *data, void *priv)
{
	struct nit_section_info *n_info = (struct nit_section_info *)priv;

	if (n_info->s_nr==PSI_MODULE_MAX_NIT_SINFO_NUMBER)
	{
		SN_PRINTF("%s: maximum lcn collected!\n", __FUNCTION__);
		return SI_SUCCESS;
	}

	//must follow private data specifier descriptor
#if(PRIVATE_DATA_SPEC != INVALID_PRIVATE_DATA_SPEC)
	if(n_info->priv_spec != PRIVATE_DATA_SPEC)
		return SI_SUCCESS;
#endif

	//parse lcn loop	
	while (length >= 4)
	{
		n_info->hd_info[n_info->hd_nr].onid = n_info->onid;
		n_info->hd_info[n_info->hd_nr].tsid = n_info->tsid;
		n_info->hd_info[n_info->hd_nr].sid = (data[0]<<8)|data[1];
		n_info->hd_info[n_info->hd_nr].hd_lcn = ((data[2]&0x03)<<8)|data[3];
		SN_PRINTF("tag=%x,LCN[%d]: %d - onid: 0x%X, tsid: 0x%X, sid: 0x%X\n",
			              tag,
					n_info->hd_nr,
					n_info->hd_info[n_info->hd_nr].hd_lcn,
					n_info->hd_info[n_info->hd_nr].onid,
					n_info->hd_info[n_info->hd_nr].tsid,
					n_info->hd_info[n_info->hd_nr].sid
					);
		n_info->hd_nr ++;
	
		if (n_info->hd_nr==PSI_MODULE_MAX_NIT_SINFO_NUMBER)
		{
			SN_PRINTF("%s: maximum hd_simul_lcn collected!\n", __FUNCTION__);
			return SI_SUCCESS;
		}

		data += 4;
		length -= 4;
	}
	
	return SI_SUCCESS;
}
Exemple #3
0
INT32 si_on_service_list_desc(UINT8 tag, UINT8 length, UINT8 *data, void *priv)
{
	struct nit_section_info *n_info = (struct nit_section_info *)priv;
	INT16 i;

	if (n_info->s_nr==PSI_MODULE_MAX_NIT_SINFO_NUMBER)
	{
		SN_PRINTF("%s: maximum lcn collected!\n", __FUNCTION__);
		return SI_SUCCESS;
	}

	//parse lcn loop	
	while (length >= 3)
	{
		for(i=0; i<n_info->s_nr; i++)
		{
			if(n_info->s_info[i].sid == ((data[0]<<8)|data[1]))
				break;
		}

		if(i == n_info->s_nr)
		{
			n_info->s_info[n_info->s_nr].onid = n_info->onid;
			n_info->s_info[n_info->s_nr].tsid = n_info->tsid;
			n_info->s_info[n_info->s_nr].sid = (data[0]<<8)|data[1];
			n_info->s_nr ++;
		}
	
		if (n_info->s_nr==PSI_MODULE_MAX_NIT_SINFO_NUMBER)
		{
			SN_PRINTF("%s: maximum lcn collected!\n", __FUNCTION__);
			return SI_SUCCESS;
		}
		data += 3;
		length -= 3;
	}
	
	return SI_SUCCESS;
}
Exemple #4
0
INT32 si_nit_parser(UINT8 *data, INT32 len, struct section_parameter *param)
{
	INT32 i, ret, dloop_len;
	struct network_descriptor *nw_desc;
	struct nit_section_info *n_info = (struct nit_section_info *)param->priv;
	struct transport_stream_info *ts_info;
	if (data == NULL) {
		n_info->xp_nr = 0;
		return SI_SUCCESS;
	}
	
#if(defined( _MHEG5_ENABLE_) || defined( _MHEG5_V20_ENABLE_)||defined(SUPPORT_FRANCE_HD))
	//network_id
	n_info->net_id = (data[3]<<8) | data[4];
#endif

#ifdef SUPPORT_FRANCE_HD
	n_info->version_num = (data[5]&0x3e)>>1;
#endif

	nw_desc = &((struct nit_section *)data)->network;
	dloop_len = SI_MERGE_HL8(nw_desc->network_descriptor_length);
	
	if (n_info->lp1_nr&&(dloop_len>0)) {
#ifdef AUTO_OTA
		ret = desc_loop_parser(nw_desc->descriptor, dloop_len, 
			n_info->loop1, n_info->lp1_nr, &n_info->p_firstloopinfo.descriptors_parse_stat, n_info);
#else
		ret = desc_loop_parser(nw_desc->descriptor, dloop_len, 
			n_info->loop1, n_info->lp1_nr, NULL, n_info);
#endif
		if (ret != SI_SUCCESS) {
			SN_PRINTF("%s: loop1 parse failure!\n",
				__FUNCTION__);
			return ret;
		}
#ifdef AUTO_OTA
		if(0 == (&n_info->p_firstloopinfo.descriptors_parse_stat)&(1<<NIT_LINKAGE_EXIST_BIT))
			set_linkagetype09_exist(0);
#endif
	}
	
	if (n_info->lp2_nr==0) {
		return SI_SUCCESS;
	}
	
	for(i=sizeof(struct nit_section)+dloop_len-4; i<len-4; 
		i += sizeof(struct transport_stream_info)+dloop_len) {
		ts_info = (struct transport_stream_info *)(data+i);
		n_info->tsid = SI_MERGE_UINT16(ts_info->transport_stream_id);
		n_info->onid = SI_MERGE_UINT16(ts_info->original_network_id);
		dloop_len = SI_MERGE_HL8(ts_info->transport_stream_length);
		if (dloop_len>0) {
			ret = desc_loop_parser(ts_info->descriptor,
				dloop_len, n_info->loop2, n_info->lp2_nr, NULL, n_info);
			if (ret != SI_SUCCESS) {
				SN_PRINTF("%s: loop2 parse failure!\n",
					__FUNCTION__);
				return ret;
			}
		}
	}
		
	return SI_SUCCESS;
}
Exemple #5
0
// get LCN from NIT
INT32 si_nit_get_info(struct nit_section_info *nsi,
	UINT16 onid, UINT16 tsid, PROG_INFO *pg)
{
	INT32 i;
#ifdef SUPPORT_FRANCE_HD
	for(i=0; i<nsi->s_nr; i++)
	{
		if ((nsi->s_info[i].sid == pg->prog_number)
			&&(nsi->s_info[i].tsid == tsid)
			&&(nsi->s_info[i].onid == onid))
		{
			pg->lcn = nsi->s_info[i].lcn;
			if(nsi->s_info[i].lcn== 0)  //for DTG test SI05
				pg->lcn_true = FALSE;
			else
				pg->lcn_true = TRUE;
			SN_PRINTF("found lcn: %d\n",pg->lcn);
			//return SI_SUCCESS;
		}
	}	
	SN_PRINTF("not found lcn of prog 0x%X!!\n",pg->prog_number);

	for(i=0; i<nsi->hd_nr; i++)
	{
		if ((nsi->hd_info[i].sid == pg->prog_number)
			&&(nsi->hd_info[i].tsid == tsid)
			&&(nsi->hd_info[i].onid == onid))
		{
			pg->hd_lcn = nsi->hd_info[i].hd_lcn;
			if(nsi->hd_info[i].hd_lcn== 0)  //for DTG test SI05
				pg->hd_lcn_true = FALSE;
			else
			{	
				pg->hd_lcn_true = TRUE;
				SN_PRINTF("found hd_lcn: %d,hd_lcn=%x\n",pg->hd_lcn,pg->hd_lcn_true );
			}
			return SI_SUCCESS;
		}
	}	
	SN_PRINTF("not found lcn of prog 0x%X!!\n",pg->prog_number);
#else
	for(i=0; i<nsi->s_nr; i++)
	{
		if ((nsi->s_info[i].sid == pg->prog_number)
			&&(nsi->s_info[i].tsid == tsid)
			&&(nsi->s_info[i].onid == onid))
		{
			pg->lcn = nsi->s_info[i].lcn;
			if(nsi->s_info[i].lcn== 0)  //for DTG test SI05
				pg->lcn_true = FALSE;
			else
				pg->lcn_true = TRUE;
			SN_PRINTF("found lcn: %d\n",pg->lcn);
			return SI_SUCCESS;
		}
	}	
	SN_PRINTF("not found lcn of prog 0x%X!!\n",pg->prog_number);

#endif
	return ERR_FAILUE;
}