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; }