/*====================================================================
FUNCTION       sharp_bb_set_frequency
DESCRIPTION 
DEPENDENCIES
RETURN VALUE
SIDE EFFECTS
======================================================================*/
int sharp_bb_set_frequency(int freq_idx)
{
  tIsdbtScan scan;
  tIsdbtRun tune;

  memset(&scan, 0, sizeof(tIsdbtScan));

  if(freq_idx == 100)
  {
    scan.frequency = 473143000;
  }
  else
  {
    scan.frequency = isdbt_bb_index2freq(freq_idx);
  }

  nmi_drv_scan(nISDBTMode, nMaster, &scan);

  if(scan.found)
  {
    ISDBT_MSG_SHARP_BB("[%s] found the channel, freq=[%d]\n", __func__, scan.frequency);
  }
  else
  {
    ISDBT_MSG_SHARP_BB("[%s] No. channel, freq=[%d]\n", __func__, scan.frequency);
  }

  tune.highside = 0;
  tune.frequency = scan.frequency;
  nmi_drv_run(nISDBTMode, nMaster, &tune);

  ISDBT_MSG_SHARP_BB("[%s]  freq[%d] result [%d]\n", __func__, scan.frequency, scan.found);

  return scan.found;
}
Example #2
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;
}