/*-------------------------------------------------------------------------------------
int8 tunerbb_drv_mtv319_get_fic(uint8* buffer, uint32* buffer_size)
    (1)   Getting the FIC data after calling tunerbb_drv_mtv319_multi_set_channel(freq, 1, ignore, ENSQUERY)
            In case of ENSQUERY, set_channel function must return Channel LOCKING or Not.
            Get_FIC is called in case of LOCKING Success
    (2)   Return Value
           Sucess : 1
           Fail : 0 or negative interger (If there is error code)
    (3)   Argument
           uint8* buffer (IN/OUT)
               - buffer for FIC data
           uint32* buffer_size (IN /OUT)
              - FIC Data Size

        <notice> This function is used in All HOST Interface
--------------------------------------------------------------------------------------- */
int8	tunerbb_drv_mtv319_get_fic(uint8* buffer, uint32* buffer_size  /*, uint8 crc_on_off */)
{
	int ret;
	static uint8 fic_buf[MTV319_FIC_BUF_SIZE];

	if (fic_timeout_retry_cnt < 10)
		ret = rtvTDMB_ReadFIC(fic_buf);
	else
		ret = RTV_FIC_READ_TIMEOUT;
	
	if (ret > 0)
	{
		memcpy(buffer, fic_buf, ret);
		*buffer_size = ret;
		return MTV319_RESULT_SUCCESS;
	}
	else
	{
		fic_timeout_retry_cnt++;

		DMBMSG("read fic failed (%d)\n", ret);
		*buffer_size = 0;
		return MTV319_RESULT_ERROR;
	}
}
/*====================================================================
FUNCTION       mtv350_read_fib
DESCRIPTION
DEPENDENCIES
RETURN VALUE number of FIB
SIDE EFFECTS
======================================================================*/
int mtv350_read_fib(uint8 *fibs)
{
  int fib_num;

  fib_num = rtvTDMB_ReadFIC(fibs);

  // 20101102 cys
  TDMB_MSG_RTV_BB("[%s] fib num %d  [%x]\n", __func__,fib_num,fibs[0]);

  return fib_num;//rtvTDMB_ReadFIC(fibs);
}
/*====================================================================
FUNCTION       mtv319_read_fib
DESCRIPTION
DEPENDENCIES
RETURN VALUE number of FIB
SIDE EFFECTS
======================================================================*/
int mtv319_read_fib(uint8 *fibs)
{
  int fib_num;

  fib_num = rtvTDMB_ReadFIC(fibs);

#ifdef FEATURE_DMB_DUMP_FILE
  dmb_data_dump(fibs, fib_num, FILENAME_RAW_FIC);
#endif    

  TDMB_MSG_RTV_BB("[%s] fib num %d  [%x]\n", __func__,fib_num,fibs[0]);

  return fib_num;//rtvTDMB_ReadFIC(fibs);
}
static bool mtv319_scan_ch(struct ensemble_info_type *e_info
							, unsigned long freq)
{
	enum E_RTV_FIC_DEC_RET_TYPE dc;
	bool ret = false;

	if (mtv319_pwr_on == true && e_info != NULL) {
		rtvTDMB_CloseAllSubChannels();

		if (rtvTDMB_ScanFrequency(freq/1000) == RTV_SUCCESS) {
			unsigned int i;
			int ret_size;

			rtvFICDEC_Init(); /* FIC parser Init */

			for (i = 0; i < 30; i++) {
				ret_size = rtvTDMB_ReadFIC(fic_buf);
				if (ret_size > 0) {
					dc = rtvFICDEC_Decode(fic_buf, 384);
					if (dc == RTV_FIC_RET_GOING)
						continue;

					if (dc == RTV_FIC_RET_DONE)
						ret = true;

					break; /* Stop */
				} else {
					DPRINTK("mtv319_scan_ch READ Fail\n");
				}
			}

			rtvTDMB_CloseFIC();
			if (ret == true)
				__get_ensemble_info(e_info, (freq));
		}
	}

	return ret;
}