int CStreamInfo2::doSignalStrengthLoop () { #define BAR_WIDTH 150 #define BAR_HEIGHT 12 int res = menu_return::RETURN_REPAINT; neutrino_msg_t msg; uint64_t maxb, minb, lastb, tmp_rate; unsigned int current_pmt_version= pmt_version; int cnt = 0; char tmp_str[150]; int delay_counter = 0; const int delay = 15; int offset = g_Font[font_info]->getRenderWidth(g_Locale->getText (LOCALE_STREAMINFO_BITRATE)); int sw = g_Font[font_info]->getRenderWidth ("99999.999"); maxb = minb = lastb = tmp_rate = 0; ts_setup (); while (1) { neutrino_msg_data_t data; uint64_t timeoutEnd = CRCInput::calcTimeoutEnd_MS (100); g_RCInput->getMsgAbsoluteTimeout (&msg, &data, &timeoutEnd); if (!mp) { signal.sig = frontend->getSignalStrength() & 0xFFFF; signal.snr = frontend->getSignalNoiseRatio() & 0xFFFF; signal.ber = frontend->getBitErrorRate(); } int ret = update_rate (); if (paint_mode == 0) { if (cnt < 12) cnt++; int dheight = g_Font[font_info]->getHeight (); int dx1 = x + 10; if(!mp && delay_counter > delay + 1){ CZapitChannel * channel = CZapit::getInstance()->GetCurrentChannel(); if(channel) pmt_version = channel->getPmtVersion(); if(pmt_version != current_pmt_version){ delay_counter = 0; } } if (ret && (lastb != bit_s)) { lastb = bit_s; if (maxb < bit_s) rate.max_short_average = maxb = bit_s; if ((cnt > 10) && ((minb == 0) || (minb > bit_s))) rate.min_short_average = minb = bit_s; char currate[150]; sprintf(tmp_str, "%s:",g_Locale->getText(LOCALE_STREAMINFO_BITRATE)); g_Font[font_info]->RenderString(dx1 , average_bitrate_pos, offset+10, tmp_str, COL_INFOBAR_TEXT); sprintf(currate, "%5llu.%02llu", rate.short_average / 1000ULL, rate.short_average % 1000ULL); frameBuffer->paintBoxRel (dx1 + average_bitrate_offset , average_bitrate_pos -dheight, sw, dheight, COL_MENUHEAD_PLUS_0); g_Font[font_info]->RenderString (dx1 + average_bitrate_offset , average_bitrate_pos, sw - 10, currate, COL_INFOBAR_TEXT); sprintf(tmp_str, "(%s)",g_Locale->getText(LOCALE_STREAMINFO_AVERAGE_BITRATE)); g_Font[font_info]->RenderString (dx1 + average_bitrate_offset + sw , average_bitrate_pos, sw *2, tmp_str, COL_INFOBAR_TEXT); } if (!mp) { showSNR (); if(pmt_version != current_pmt_version && delay_counter > delay){ current_pmt_version = pmt_version; paint_techinfo (x + 10, y+ hheight +5); } } delay_counter++; } rate.short_average = abit_s; if (signal.max_ber < signal.ber) signal.max_ber = signal.ber; if (signal.max_sig < signal.sig) signal.max_sig = signal.sig; if (signal.max_snr < signal.snr) signal.max_snr = signal.snr; if ((signal.min_ber == 0) || (signal.min_ber > signal.ber)) signal.min_ber = signal.ber; if ((signal.min_sig == 0) || (signal.min_sig > signal.sig)) signal.min_sig = signal.sig; if ((signal.min_snr == 0) || (signal.min_snr > signal.snr)) signal.min_snr = signal.snr; paint_signal_fe(rate, signal); signal.old_sig = signal.sig; signal.old_snr = signal.snr; signal.old_ber = signal.ber; // switch paint mode if (msg == CRCInput::RC_red || msg == CRCInput::RC_blue || msg == CRCInput::RC_green || msg == CRCInput::RC_yellow) { hide (); paint_mode = !paint_mode; paint (paint_mode); continue; } else if(msg == CRCInput::RC_setup) { res = menu_return::RETURN_EXIT_ALL; break; } else if((msg == CRCInput::RC_sat) || (msg == CRCInput::RC_favorites)) { g_RCInput->postMsg (msg, 0); res = menu_return::RETURN_EXIT_ALL; break; } else if (msg == (neutrino_msg_t) g_settings.key_screenshot) { CNeutrinoApp::getInstance ()->handleMsg (msg, data); continue; } // -- any key --> abort if (msg <= CRCInput::RC_MaxRC) break; // -- push other events if (msg > CRCInput::RC_MaxRC && msg != CRCInput::RC_timeout) CNeutrinoApp::getInstance ()->handleMsg (msg, data); } delete signalbox; signalbox = NULL; ts_close (); return res; }
int CStreamInfo2::doSignalStrengthLoop() { #define RED_BAR 40 #define YELLOW_BAR 70 #define GREEN_BAR 100 #define BAR_WIDTH 150 #define BAR_HEIGHT 12 sigscale = new CProgressBar(BAR_WIDTH, BAR_HEIGHT, RED_BAR, GREEN_BAR, YELLOW_BAR); snrscale = new CProgressBar(BAR_WIDTH, BAR_HEIGHT, RED_BAR, GREEN_BAR, YELLOW_BAR); neutrino_msg_t msg; unsigned long long maxb, minb, lastb, tmp_rate; int cnt = 0,i=0; uint16_t ssig, ssnr; uint32_t ber; char tmp_str[150]; int offset_tmp = 0; int offset = g_Font[font_info]->getRenderWidth(g_Locale->getText (LOCALE_STREAMINFO_BITRATE)); int sw = g_Font[font_info]->getRenderWidth ("99999.999"); int mm = g_Font[font_info]->getRenderWidth ("Max");//max min lenght maxb = minb = lastb = 0; frameBuffer->blit(); //channel //CChannelList *channelList = CNeutrinoApp::getInstance ()->channelList; //int curnum = channelList->getActiveChannelNumber(); //CZapitChannel * channel = channelList->getChannel(curnum); //CZapitClient::CCurrentServiceInfo si = g_Zapit->getCurrentServiceInfo(); ts_setup(); while (1) { neutrino_msg_data_t data; unsigned long long timeoutEnd = CRCInput::calcTimeoutEnd_MS (100); g_RCInput->getMsgAbsoluteTimeout (&msg, &data, &timeoutEnd); if(live_fe != NULL) { ssig = live_fe->getSignalStrength(); ssnr = live_fe->getSignalNoiseRatio(); ber = live_fe->getBitErrorRate(); } signal.sig = ssig & 0xFFFF; signal.snr = ssnr & 0xFFFF; signal.ber = ber; int ret = update_rate (); if (paint_mode == 0) { char currate[150]; if (cnt < 12) cnt++; int dheight = g_Font[font_info]->getHeight (); int dx1 = x + 10; //int dy = y+ height - dheight - 5; /**/ if (ret && (lastb != bit_s)) { lastb = bit_s; if (maxb < bit_s) rate.max_short_average = maxb = bit_s; if ((cnt > 10) && ((minb == 0) || (minb > bit_s))) rate.min_short_average = minb = bit_s; for(i = 0; i < 3; i++) { switch (i) { case 0: tmp_rate = bit_s; sprintf(tmp_str, "%s", g_Locale->getText(LOCALE_STREAMINFO_BITRATE)); offset_tmp = 0; break; case 1: tmp_rate = minb; sprintf(tmp_str, "%s", "Min"); offset_tmp = offset+5; break; case 2: tmp_rate = maxb; sprintf(tmp_str, "%s", "Max"); offset_tmp = offset+5+mm; break; } /* Bitrate */ //g_Font[font_info]->RenderString (dx1+offset_tmp+((sw)*i), yypos+(dheight*4), offset, tmp_str, COL_MENUCONTENTDARK, 0, true); sprintf(currate, "%5llu.%03llu", tmp_rate / 1000ULL, tmp_rate % 1000ULL); frameBuffer->paintBoxRel (dx1+offset+5+((sw+mm)*i), yypos+(dheight*3), sw, dheight, /*COL_MENUHEAD_PLUS_0*/ COL_MENUCONTENTDARK_PLUS_0); /* bitrate values max/min */ //g_Font[font_info]->RenderString (dx1+offset+10+((sw+mm)*i), yypos+(dheight*4), sw - 10, currate, COL_MENUCONTENTDARK); } } if(snrscale && sigscale) showSNR (); } rate.short_average = abit_s; if (signal.max_ber < signal.ber) { signal.max_ber = signal.ber; } if (signal.max_sig < signal.sig) { signal.max_sig = signal.sig; } if (signal.max_snr < signal.snr) { signal.max_snr = signal.snr; } if ((signal.min_ber == 0) || (signal.min_ber > signal.ber)) { signal.min_ber = signal.ber; } if ((signal.min_sig == 0) || (signal.min_sig > signal.sig)) { signal.min_sig = signal.sig; } if ((signal.min_snr == 0) || (signal.min_snr > signal.snr)) { signal.min_snr = signal.snr; } paint_signal_fe(rate, signal); signal.old_sig = signal.sig; signal.old_snr = signal.snr; signal.old_ber = signal.ber; // switch paint mode //FIXME picture info if (msg == CRCInput::RC_red || msg == CRCInput::RC_blue || msg == CRCInput::RC_green || msg == CRCInput::RC_yellow) { hide (); if(sigscale) sigscale->reset(); if(snrscale) snrscale->reset(); paint_mode = ++paint_mode % 2; paint(paint_mode); continue; } // -- any key --> abort if (msg <= CRCInput::RC_MaxRC) { break; } // -- push other events if (msg > CRCInput::RC_MaxRC && msg != CRCInput::RC_timeout) { CNeutrinoApp::getInstance ()->handleMsg (msg, data); } frameBuffer->blit(); } if(sigscale) { delete sigscale; sigscale = NULL; } if(snrscale) { delete snrscale; snrscale = NULL; } ts_close (); return msg; }