/*-------------------------------------------------------------------------- int8 tunerbb_drv_fc8050_get_bbinfo(tdmb_status_rsp_type* dmb_bb_info) (1) Getting the RF/BB Information (2) Return Value Sucess : 1 Fail : 0 or negative interger (If there is error code) (3) Argument tdmb_status_rsp_type* dmb_bb_info (IN/OUT) typedef struct tdmb_status_rsp_status { uint32 dab_ok; uint32 msc_ber; uint32 sync_lock; uint32 afc_ok; uint32 cir; uint32 fic_ber; uint32 tp_lock; uint32 sch_ber; uint32 tp_err_cnt; uint32 va_ber; byte srv_state_flag; }; These paramters are dependent on Information supplied by Device. ---------------------------------------------------------------------------- */ int8 tunerbb_drv_fc8050_get_ber(struct broadcast_tdmb_sig_info *dmb_bb_info) { uint8 sync_status; uint32 tp_err_cnt=0; fc8050_isr_control(0); tunerbb_drv_fc8050_check_overrun(serviceType[0]); dmb_bb_info->msc_ber=tunerbb_drv_fc8050_get_viterbi_ber(); sync_status=tunerbb_drv_fc8050_get_sync_status(); dmb_bb_info->sync_lock = ((sync_status & 0x10) ? 1 : 0); dmb_bb_info->cir = ((sync_status & 0x08) ? 1 : 0); dmb_bb_info->afc_ok = (((sync_status & 0x06)==0x06) ? 1 : 0); if(dmb_bb_info->cir && dmb_bb_info->sync_lock) { dmb_bb_info->sch_ber = 1; // dab_ok : channel impulse response dmb_bb_info->dab_ok = 1; } else { dmb_bb_info->sch_ber = 0; // dab_ok : channel impulse response dmb_bb_info->dab_ok = 0; } if(serviceType[0] == FC8050_DMB || serviceType[0] == FC8050_VISUAL) { tp_err_cnt=tunerbb_drv_fc8050_rserror_count(); if((dmb_bb_info->sync_lock == 0) || (tp_total_cnt == 0)) { dmb_bb_info->tp_err_cnt = 0; dmb_bb_info->tp_lock = 0; } else if(tp_err_cnt == 0) { dmb_bb_info->tp_err_cnt = 0; dmb_bb_info->tp_lock = 1; } else //if(bb_info.tp_err_cnt > 0) { dmb_bb_info->tp_err_cnt = (uint32)((tp_err_cnt *1000)/(3*tp_total_cnt)); dmb_bb_info->tp_lock = 0; } // initialize information tp_total_cnt = 0; } else { dmb_bb_info->tp_err_cnt =0; dmb_bb_info->tp_lock =0; } dmb_bb_info->fic_ber=0; dmb_bb_info->va_ber=tunerbb_drv_fc8050_get_rs_ber(); dmb_bb_info->srv_state_flag=0; fc8050_isr_control(1); return FC8050_RESULT_SUCCESS; }
/*-------------------------------------------------------------------------- int8 tunerbb_drv_fc8050_get_bbinfo(tdmb_status_rsp_type* dmb_bb_info) (1) Getting the RF/BB Information (2) Return Value Sucess : 1 Fail : 0 or negative interger (If there is error code) (3) Argument tdmb_status_rsp_type* dmb_bb_info (IN/OUT) typedef struct tdmb_status_rsp_status { uint32 dab_ok; uint32 msc_ber; uint32 sync_lock; uint32 afc_ok; uint32 cir; uint32 fic_ber; uint32 tp_lock; uint32 sch_ber; uint32 tp_err_cnt; uint32 va_ber; byte srv_state_flag; }; These paramters are dependent on Information supplied by Device. ---------------------------------------------------------------------------- */ int8 tunerbb_drv_fc8050_get_ber(struct broadcast_tdmb_sig_info *dmb_bb_info) { uint8 sync_status; uint32 tp_err_cnt=0; uint16 nframe = 0; //fc8050_isr_control(0); tunerbb_drv_fc8050_check_overrun(serviceType[0]); dmb_bb_info->msc_ber = tunerbb_drv_fc8050_get_viterbi_ber(); sync_status = tunerbb_drv_fc8050_get_sync_status(); dmb_bb_info->sync_lock = ((sync_status & 0x10) ? 1 : 0); dmb_bb_info->cir = ((sync_status & 0x08) ? 1 : 0); dmb_bb_info->afc_ok = (((sync_status & 0x06)==0x06) ? 1 : 0); if(dmb_bb_info->cir && dmb_bb_info->sync_lock) { dmb_bb_info->sch_ber = 1; // dab_ok : channel impulse response dmb_bb_info->dab_ok = 1; } else { dmb_bb_info->sch_ber = 0; // dab_ok : channel impulse response dmb_bb_info->dab_ok = 0; } if(serviceType[0] == FC8050_DMB || serviceType[0] == FC8050_VISUAL) { tp_err_cnt = tunerbb_drv_fc8050_rserror_count(&nframe); //실시간 frame수 체크 if((dmb_bb_info->sync_lock == 0) || (tp_total_cnt == 0)) { dmb_bb_info->tp_err_cnt = 0; dmb_bb_info->tp_lock = 0; } else if(tp_err_cnt == 0) { dmb_bb_info->tp_err_cnt = 0; dmb_bb_info->tp_lock = 1; } else //if(bb_info.tp_err_cnt > 0) { dmb_bb_info->tp_err_cnt = (uint32)((tp_err_cnt *1000)/(3*tp_total_cnt)); dmb_bb_info->tp_lock = 0; } // initialize information tp_total_cnt = 0; dmb_bb_info->va_ber = tunerbb_drv_fc8050_get_rs_ber(); } else { dmb_bb_info->tp_err_cnt = 0; dmb_bb_info->tp_lock = 0; dmb_bb_info->va_ber = 0; } dmb_bb_info->fic_ber = 0; if(dmb_bb_info->msc_ber < 6000) { dmb_bb_info->antenna_level = 4; } else if(dmb_bb_info->msc_ber >= 6000 && dmb_bb_info->msc_ber < 8000) { dmb_bb_info->antenna_level = 3; } else if(dmb_bb_info->msc_ber >= 8000 && dmb_bb_info->msc_ber < 9000) { dmb_bb_info->antenna_level = 2; } else if(dmb_bb_info->msc_ber >= 9000 && dmb_bb_info->msc_ber < 12000) { dmb_bb_info->antenna_level = 1; } else if(dmb_bb_info->msc_ber >= 12000) { dmb_bb_info->antenna_level = 0; } #if 0 //채널은 잡았으나 (sync_status == 0x3f) frame이 들어오지 않는 경우(nframe == 0) - MBN V-Radio if((sync_status==0x3f)&&(nframe==0)) { //antenna level을 0으로 만듬. dmb_bb_info->antenna_level = 0; } //antenna level이 0이면 약전계이므로 5분종료를 위해 dab_ok를 0으로 만듬. if(dmb_bb_info->antenna_level == 0) { dmb_bb_info->dab_ok = 0; } #endif //fc8050_isr_control(1); return FC8050_RESULT_SUCCESS; }