/*==================================================================== 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); } }
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; }
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); } }