예제 #1
0
static bool __get_ensemble_info(struct ensemble_info_type *e_info
							, unsigned long freq)
{
	struct tcc_ensemble_info *ensbl_info;
	struct tcc_ensemble *esbl = &ensbl_info->ensbl;
	struct tcc_service_info *svc_info;
	struct tcc_service_comp_info *svc_comp_info;

	unsigned char i;
	unsigned char cnt = 0;

	ensbl_info = tcc_fic_get_ensbl_info(1);
	esbl = &ensbl_info->ensbl;

	memset(e_info, 0, sizeof(struct ensemble_info_type));

	e_info->ensem_freq = freq;
	e_info->ensem_id = esbl->eid;
	strncpy(e_info->ensem_label, esbl->label, \
		ENSEMBLE_LABEL_MAX);

	for (i = 0; i < esbl->num_svc; i++) {
		svc_info = &ensbl_info->svc_info[i];
		svc_comp_info = &svc_info->svc_comp_info[0];
		if ((svc_comp_info->svc_comp.tmid == 0x00 &&
			svc_comp_info->svc_comp.ascty_dscty == 0x00) ||
			(svc_comp_info->svc_comp.tmid == 0x01 &&
			svc_comp_info->svc_comp.ascty_dscty == 0x18)) {
			e_info->sub_ch[cnt].sub_ch_id = \
				svc_comp_info->sub_ch.subch_id;
			e_info->sub_ch[cnt].start_addr = \
				svc_comp_info->sub_ch.start_cu;
			e_info->sub_ch[cnt].tmid = \
				svc_comp_info->svc_comp.tmid;
			e_info->sub_ch[cnt].svc_type = \
				svc_comp_info->svc_comp.ascty_dscty;
			e_info->sub_ch[cnt].svc_id = \
				svc_comp_info->svc_comp.sid;
			e_info->sub_ch[cnt].ecc = esbl->ensbl_ecc;
			if(svc_comp_info->svc_comp.order == 0 &&
				svc_comp_info->svc_comp.scids == 0xff) {
				e_info->sub_ch[cnt].scids = 0;
			} else {
				e_info->sub_ch[cnt].scids = \
				svc_comp_info->svc_comp.scids;
			}

			strncpy(e_info->sub_ch[cnt].svc_label, \
				svc_info->svc.svc_label, SVC_LABEL_MAX);
			cnt++;
		}
	}
	e_info->tot_sub_ch = cnt;

#ifdef TDMB_DEBUG_SCAN
	__print_ensemble_info(e_info);
#endif

	return (e_info->tot_sub_ch > 0) ? true : false;
}
static bool __get_ensemble_info(struct ensemble_info_type *e_info
						, unsigned long freq)
{
	DPRINTK("%s\n", __func__);

	rtvFICDEC_GetEnsembleInfo(e_info, freq);

	if (e_info->tot_sub_ch) {
#ifdef TDMB_DEBUG_SCAN
		__print_ensemble_info(e_info);
#endif
		return true;
	} else {
		return false;
	}
}
예제 #3
0
static bool __get_ensemble_info(struct ensemble_info_type *e_info
							, unsigned long freq)
{
	struct sub_channel_info_type *fci_sub_info;

	DPRINTK("%s : freq(%ld)\n", __func__, freq);

	e_info->tot_sub_ch
		= dmb_drv_get_dmb_sub_ch_cnt() + dmb_drv_get_dab_sub_ch_cnt();
	DPRINTK("total subchannel number : %d\n", e_info->tot_sub_ch);

	if (e_info->tot_sub_ch > 0) {
		int i;
		int j;
		int sub_i = 0;
		const char *ensembleName = NULL;

		ensembleName = (char *)dmb_drv_get_ensemble_label();

		if (ensembleName)
			strncpy((char *)e_info->ensem_label,
					(char *)ensembleName,
					ENSEMBLE_LABEL_MAX);

		e_info->ensem_freq = freq;

		for (i = 0; i < 2; i++) {
			int cnt;
			cnt = (i == 0)
				? dmb_drv_get_dmb_sub_ch_cnt()
				: dmb_drv_get_dab_sub_ch_cnt();

			for (j = 0; j < cnt; j++, sub_i++) {
				fci_sub_info = (i == 0)
					? dmb_drv_get_fic_dmb(j)
					: dmb_drv_get_fic_dab(j);

				e_info->ensem_id
					= fci_sub_info->uiEnsembleID;
				e_info->sub_ch[sub_i].sub_ch_id
					= fci_sub_info->ucSubchID;
				e_info->sub_ch[sub_i].start_addr
					= fci_sub_info->uiStartAddress;
				e_info->sub_ch[sub_i].tmid
					= fci_sub_info->ucTMId;
				e_info->sub_ch[sub_i].svc_type
					= fci_sub_info->ucServiceType;
				e_info->sub_ch[sub_i].svc_id
					= fci_sub_info->ulServiceID;
				e_info->sub_ch[sub_i].scids
					= fci_sub_info->scids;
				e_info->sub_ch[sub_i].ecc
					= fci_sub_info->ecc;
				if (i == 0)
					memcpy(
						e_info->sub_ch[sub_i].svc_label,
						dmb_drv_get_sub_ch_dmb_label(j),
						SVC_LABEL_MAX);
				else
					memcpy(e_info->sub_ch[sub_i].svc_label,
						dmb_drv_get_sub_ch_dab_label(j),
						SVC_LABEL_MAX);

			}
		}
#ifdef TDMB_DEBUG_SCAN
		__print_ensemble_info(e_info);
#endif
		return true;
	} else {
		return false;
	}
}