static int ite9173_read_ber(struct dvb_frontend *fe, u32 * ber) { struct aml_fe *afe = fe->demodulator_priv; struct aml_fe_dev *dev = afe->dtv_demod; Dword ret = 0; OUT Dword postErrorCount = 0; /** 24 bits */ OUT Dword postBitCount = 0; /** 16 bits */ OUT Word abortCount = 0; pr_dbg("ite9173_read_ber\n"); mutex_lock(&ite_lock); ret = Demodulator_getPostVitBer(pdemod,&postErrorCount,&postBitCount,&abortCount); mutex_unlock(&ite_lock); *ber = (postErrorCount /postBitCount ); if(Error_NO_ERROR != ret) return -1; pr_dbg("ite9173_read_ber--\n"); return 0; }
void Example_monitorStatistic (Demodulator *demod) { Dword error = Error_NO_ERROR; Statistic stat; Dword postErrorCount=0; Dword postBitCount=0; Word abortCount=0; Word cnt=0; Long dbm = 0; do{ error = Demodulator_getStatistic(demod, &stat); if (error) { printk("Demodulator_getStatistic failed!Error = 0x%08x\n", error); break; } else { printk("Signal Present = %s, Locked = %s\n", stat.signalPresented?"TRUE":"FALSE", stat.signalLocked?"TRUE":"FALSE"); printk("Signal Quality = %d, Strength = %d\n", stat.signalQuality, stat.signalStrength); } error = Demodulator_getSignalStrengthDbm(demod, 18, 18, &dbm); if (error) { printk("Demodulator_getSignalStrengthDbm failed!Error = 0x%08x\n", error); break; } else { printk("Signal Strength = %d(DBm)\n", dbm); } error = Demodulator_getPostVitBer (demod, &postErrorCount, &postBitCount, &abortCount); if (error) { printk("Demodulator_getPostVitBer failed!Error = 0x%08x\n", error); break; } else { if(postErrorCount){ while(postErrorCount<postBitCount){ postErrorCount = postErrorCount*10; cnt++; } } //printk("BER = %.03f+E%d, Abort Cnt = %d\n", (double)postErrorCount/(double)postBitCount,cnt, abortCount); } }while(0); }