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;
}
Exemplo n.º 2
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);
}