Ejemplo n.º 1
0
INT32 try_to_lock_DVBT2_signal(struct nim_device *dev, BOOL NeedToInitSystem, BOOL NeedToConfigTuner)
{	
	UINT16 waitTime = 0;
	INT32 result = ERR_FAILUE;
	sony_demod_t * param = (sony_demod_t *)dev->priv;
	
	param->plp_num = 0;
	param->plp_id = 0;
	param->plp_index = 0;
	
	PRINTK_INFO("[%s]:line=%d\n ", __FUNCTION__,__LINE__);

	if(NULL == dev)
	{
		return ERR_FAILUE;
	}
	else
	{
		PRINTK_INFO("[%s]:line=%d,NeedToInitSystem=%d,NeedToConfigTuner=%d,\n ", __FUNCTION__,__LINE__,NeedToInitSystem,NeedToConfigTuner);
	}
	
	result = DVBT2_change_PLP(dev, 0, NeedToInitSystem, NeedToConfigTuner,1); //for lock signal first.
	//get_the_first_data_PLP_info
	do
	{
		result = sony_demod_dvbt2_monitor_DataPLPs(param, (uint8_t *)&(param->all_plp_id),(uint8_t *)&(param->plp_num));
		if (result == SONY_RESULT_OK) 
		{
			UINT8 plp_idx;
			PRINTK_INFO("\t[%s]: plp_num=%d\n ", __FUNCTION__, param->plp_num);
			for (plp_idx=0; plp_idx < param->plp_num; ++plp_idx)
			{
				PRINTK_INFO("\t[plp_id=%d]\n", param->all_plp_id[plp_idx]);
			}
			break;
		}
		else if (result == SONY_RESULT_ERROR_HW_STATE) 
		{
			if (waitTime >= DTV_DEMOD_TUNE_T2_L1POST_TIMEOUT)
			{
				PRINTK_INFO("%s() error: timeout for get the first data_PLP\r\n", __FUNCTION__);
				param->plp_num = 0;
				return ERR_FAILUE;
			}
			else 
			{
				SONY_SLEEP (DEMOD_TUNE_POLL_INTERVAL); //10
				waitTime += DEMOD_TUNE_POLL_INTERVAL; 
			}
		} 
		else 
		{
			PRINTK_INFO("%s()=%d error: Fail to get the first data_PLP\r\n", __FUNCTION__, result);
			param->plp_num = 0;
			return ERR_FAILUE; // Other (fatal) error.
		}
	}while (1);
    
	return result;
}
int demod_get_data_plps(struct cxd2837_state *state, uint8_t *plp_ids, uint8_t *plp_num)
{
	sony_result_t ret;
	int wait_time = 0;

	*plp_num = 0;
	for(;;) {
    	ret = sony_demod_dvbt2_monitor_DataPLPs(&(state->demod), plp_ids, plp_num);
        if (ret == SONY_RESULT_OK) {
            break;
        } else if (ret == SONY_RESULT_ERROR_HW_STATE) {
            if (wait_time >= SONY_DVBT2_L1POST_TIMEOUT) {
				printk("Sony DVBT2 get data plps timeout\n");
				return 0;
            } else {
                msleep (DEMOD_TUNE_POLL_INTERVAL);
                wait_time += DEMOD_TUNE_POLL_INTERVAL;
            }
        } else {
        	printk("Sony DVBT2 get data plps failed, ret=0x%x\n", ret);
           return 1;
        }
    }

	printk("Sony DVBT2 cxd2837 get data plps: num=%d\n", *plp_num);
	return 0;
}