/*====================================================================
FUNCTION       sharp_bb_get_status
DESCRIPTION 
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
void sharp_bb_get_status(tIsdbtSigInfo *sig_info)
{
  //ISDBT_MSG_SHARP_BB("[%s] \n", __func__);

  tIsdbtSignalStatus status;
    
  memset(&status, 0, sizeof(tIsdbtSignalStatus));

  status.get_simple_mode = 1; /* if zero, you will get all signal information. */
  
  nmi_isdbt_get_status(nMaster, &status);

  sig_info->ber = status.dberinst;
  sig_info->per = status.dperinst;
  // ant level -> sqindicator (0~100) by NMI.
  sig_info->cninfo = sharp_bb_get_ant_value(status.sqindicator);

  if(status.lock)
  {
    ISDBT_MSG_SHARP_BB("[%s] Locked, freq=[%d], ant=[%d], rssi=[%d]\n", __func__, status.frequency, sig_info->cninfo, status.rssi);
  }
  else
  {
    ISDBT_MSG_SHARP_BB("[%s] Unlocked, freq=[%d], ant=[%d], rssi=[%d]\n", __func__, status.frequency, sig_info->cninfo,status.rssi);
  }
}
/*====================================================================
FUNCTION       sharp_bb_get_tuner_info
DESCRIPTION 
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
void sharp_bb_get_tuner_info(tIsdbtTunerInfo *tuner_info)
{
  tIsdbtSignalStatus status;

  //ISDBT_MSG_SHARP_BB("[%s] \n", __func__);
  
  memset(&status, 0, sizeof(tIsdbtSignalStatus));

  status.get_simple_mode = 0; /* if zero, you will get all signal information. */

  nmi_isdbt_get_status(nMaster, &status);

  // ant level -> sqindicator (0~100) by NMI.
  tuner_info->rssi = status.rssi;
  tuner_info->ant_level = sharp_bb_get_ant_value(status.sqindicator);
  if(status.lock)
  {
    tuner_info->ber = status.dberinst;
  }
  else
  {
    tuner_info->ber = 9999;
  }
  tuner_info->per = status.dperinst;
  tuner_info->snr = status.nsnr;
  tuner_info->doppler_freq = status.doppler; // Hz ´ÜÀ§
  //tuner_info->doppler_freq = 0;
  tuner_info->tmcc_info.carrier_mod = status.modulation;
  tuner_info->tmcc_info.coderate= status.fec;
  tuner_info->tmcc_info.interleave_len= status.interleaver;

  if(status.lock)
  {
    ISDBT_MSG_SHARP_BB("[%s] Locked, freq=[%d], sq=[%d], rssi=[%d]\n", __func__, status.frequency, status.sqindicator, status.rssi);
    ISDBT_MSG_SHARP_BB("[%s] ber=[%ld], Dfreq=[%ld]\n", __func__, tuner_info->ber, tuner_info->doppler_freq);
  }
  else
  {
    ISDBT_MSG_SHARP_BB("[%s] Unlocked, freq=[%d], sq=[%d], rssi=[%d]\n", __func__, status.frequency, status.sqindicator,status.rssi);
  }
}
Esempio n. 3
0
int nmi_drv_ctl(uint32_t code, tNmDrvMode mode, tNmiIsdbtChip cix, void *inp)
{
	tNmiDrv *pd = &drv;
	int result = 1;

	switch (code) {
	case NMI_DRV_ISR_PROCESS:
		nmi_drv_dtv_excute_isr((tNmDrvIsdbtIrq*)inp);
		break;
	case NMI_DRV_DTV_TS_TEST_PATTERN:
		{
			int pattern = *((int *)inp);
			nmi_drv_dtv_ts_test_pattern(pattern);
		}
		break;
		
	case NMI_DRV_SWITCH_COMBINER:
		nmi_isdbt_switch_cmb(cix,*((int *)inp));
		break;
	case NMI_DRV_DEEP_SLEEP:
		nmi_drv_sleep(mode);
		break;
	case NMI_DRV_WAKEUP:
		nmi_drv_wakeup(mode);
		break;
	case NMI_DRV_INIT:
		result = nmi_drv_init(inp);
		break;
	case NMI_DRV_DEINIT:
		nmi_drv_deinit();
		break;
	case NMI_DRV_INIT_CORE:
		result = nmi_drv_init_core(mode, cix);
		break;
	case NMI_DRV_GET_CHIPID:
		*((uint32_t *)inp) = nmi_drv_get_chipid(mode, cix);	
		break;
	case NMI_DRV_RUN:
		result = nmi_drv_run(mode, cix, inp);	/* result means lock or not */
		break;
	case NMI_DRV_RW_DIR:
		{
			tNmDrvRWReg *p = (tNmDrvRWReg *)inp;
			if (p->dir) {		/* Read */
				nmi_drv_read_register(mode, cix, (uint8_t *)&p->dat, p->sz, p->adr);				
			} else {				/* Write */
				nmi_drv_write_register(mode, cix, (uint8_t *)&p->dat, p->sz, p->adr);				
			}
		}
		break;
	case NMI_DRV_RF_RW_DIR:
		{
			tNmDrvRWReg *p = (tNmDrvRWReg *)inp;
			if (p->dir) {		/* Read */
				nmi_drv_read_rf_register(mode, cix, (uint8_t *)&p->dat, p->sz, p->adr);				
			} else {				/* Write */
				nmi_drv_write_rf_register(mode, cix, (uint8_t *)&p->dat, p->sz, p->adr);				
			}
		}
		break;
	case NMI_DRV_SOFT_RESET:
		nmi_drv_soft_reset(mode, cix);
		break;
	case NMI_DRV_GET_ISDBT_STATUS:
		nmi_isdbt_get_status(cix, (tIsdbtSignalStatus *)inp);
		break;
	case NMI_DRV_SCAN:
		nmi_drv_scan(mode, cix, inp);
		break;	
	case NMI_DRV_START_STREAM:
		nmi_drv_video(mode, (tNmDtvStream*)inp, 1);
		break;
	case NMI_DRV_STOP_STREAM:
		nmi_drv_video(mode, (tNmDtvStream*)inp, 0);
		break;
	case NMI_DRV_ISDBT_RST_COUNT:
		nmi_drv_isdbt_rst_cnt(cix);
		break;
	case NMI_DRV_ISDBT_SET_GAIN:
		{
			tNmiIsdbtLnaGain *p = (tNmiIsdbtLnaGain*)inp;
			pd->dtv.vf.setgain(cix, *p);	
		}break;
	case NMI_DRV_ISDBT_UPDATE_PLL:
		pd->dtv.vf.updatepll(cix);
		break;

	case NMI_DRV_VERSION:
		{
			tNmiDriverVer *vp = (tNmiDriverVer *)inp; 
		
			vp->dVer.major 	= ASIC_DTV_MAJOR_VER;
			vp->dVer.minor 	= ASIC_DTV_MINOR_VER;
			vp->dVer.rev1 	= ASIC_DTV_REV1;
			vp->dVer.rev2 	= ASIC_DTV_REV2;
		}
		break;
	case NMI_DRV_GAIN_THOLD:
#ifndef FIX_POINT
		nmi_isdbt_set_gain_thold(cix, (tIsdbtGainThold *)inp);
		#endif
break;
	case NMI_DRV_SET_GAIN:
		pd->dtv.vf.setgain(cix, (tNmiIsdbtLnaGain)inp);	
		break;
	case NMI_DRV_UPDATE_PLL:
		pd->dtv.vf.updatepll(cix);
		break;
	case NMI_DRV_SWITCH_DSM:
		{
			int enable = *(int*)inp;
			nmi_isdbt_dsm_on(enable);
		}
		break;
	case NMI_DRV_ENABLE_PID_FILTER:
		{
			tIsdbtPidFilterCtl *ppid = (tIsdbtPidFilterCtl*)inp;
			pd->dtv.vf.pidfilter(cix, ppid);
		}
		break;
	case NMI_DRV_DISABLE_PID_FILTER:
		{
			tIsdbtPidFilterCtl ppid;
			ppid.enfilt = 0;
			pd->dtv.vf.pidfilter(cix, &ppid);	
		}break;
	case NMI_DRV_ADD_PID:
		pd->dtv.vf.addpid(cix, (tIsdbtPid*)inp);
		break;
	case NMI_DRV_REMOVE_PID: 
		{
			unsigned int pid = *(unsigned int*)inp;
			pd->dtv.vf.removepid(cix, pid);
		}break;
	default:
		break;
	}
	
	return result;
}
Esempio n. 4
0
void nmi_drv_scan(tNmDrvMode mode, tNmiIsdbtChip cix, void *pv)
{
	tNmiDrv *pd = &drv;

	tIsdbtTune tune;
	tIsdbtScan *p = (tIsdbtScan *)pv;
	pd->mfrequency = tune.frequency = p->frequency;	// tony, 20111122, to save the current frequency
	tune.highside = 0;
	p->found = pd->dtv.vf.scanpoll((void *)&tune);
#ifndef FIX_POINT
	p->tim.tscan = pd->dtv.vf.scantime();
	dPrint(N_VERB, "scan time (%f)\n", p->tim.tscan);
#endif
	dPrint(N_INFO, "Scan: freq(%d), found (%d)\n", p->frequency, p->found);

	if(p->found) {
		int lock;
		if(!pd->firstscan) {
			/**
				enable TS
			**/
			pd->dtv.vf.tsctl(1);	/* why ???, tony */

			/**
				need to run decoder for the first time
			**/
			lock = pd->dtv.vf.checklock(cix, 900);
			if (lock) {
				pd->dtv.vf.decoder(cix, 0, NULL);
				pd->firstscan = 1;
			} else {
				dPrint(N_ERR, "Error: find in scan but can't locked...\n");
				p->found = 0;
			}
		}

		if (p->found) {
			unsigned int val = 0, val1 = 0;
			uint32_t stim = nmi_get_tick();
			do {
				val = pd->dtv.vf.r32(nMaster, 0xa8f0);
				dPrint(N_VERB, "0xa8f0 (%08x)\n", val);
				if (val != 0) {
					if (val == val1) {
#ifndef FIX_POINT		// rachel - have to check SCAN TIME
						tIsdbtAcqTime acq;
		
						pd->dtv.vf.getacqtime(cix, (void *)&acq);
						p->tim.found = 1;
						p->tim.tsync = acq.totalacq - p->tim.tscan; 
#endif
						break;
					} else {
						val1 = val;
					}
				} else {
					val1 = val;
				}
			} while ((nmi_get_tick() - stim) <= 1010);
		}
	}

	/**
		get demod status
		tony, 20111122
	**/
	{
		tIsdbtSignalStatus signal;
		memset(&signal, 0, sizeof(tIsdbtSignalStatus));
		signal.get_simple_mode = 0;
		nmi_isdbt_get_status(nMaster, &signal);
		dPrint(N_VERB, "nmi_drv_scan, freq=[%d], lock=[%d], snr=[%d], rssi=[%d], lnamode=[%d]\n", 
				signal.frequency, signal.lock, signal.nsnr, signal.rssi, signal.lnamode);
	}
}