5 #include "devicedvbinput.h"
7 #include "signalstatus.h"
12 SignalStatus::SignalStatus(BC_WindowBase *wdw, int x, int y)
13 : BC_SubWindow(x, y, 100, 35)
27 SignalStatus::~SignalStatus()
30 dvb_input->set_signal_status(0);
34 void SignalStatus::create_objects()
36 clear_box(0,0,get_w(),get_h());
38 channel_title = new BC_Title(x, y, " ", SMALLFONT, GREEN);
39 add_subwindow(channel_title);
40 y += channel_title->get_h();
42 add_subwindow(title = new BC_Title(x, y, "lk:", SMALLFONT, YELLOW));
43 lck_x = x + title->get_w() + pad0;
45 int x1 = lck_x + lck_w + pad1;
46 int y1 = y + title->get_h();
47 add_subwindow(title = new BC_Title(x, y1, "cr:", SMALLFONT, YELLOW));
50 add_subwindow(title = new BC_Title(x1, y, "pwr", SMALLFONT, YELLOW));
51 pwr_x = x1 + title->get_w() + pad0;
54 snr_y = pwr_y + pwr_h;
55 add_subwindow(title = new BC_Title(x1, y1, "err", SMALLFONT, YELLOW));
59 unc_y = ber_y + ber_h;
62 int SignalStatus::calculate_w(BC_WindowBase *wdw)
64 return BC_Title::calculate_w(wdw, "lk:", SMALLFONT) + pad0 + lck_w + pad1 +
65 BC_Title::calculate_w(wdw, "pwr", SMALLFONT) + pad0 + pwr_w;
68 int SignalStatus::calculate_h(BC_WindowBase *wdw)
70 return 3*BC_Title::calculate_h(wdw, "lk:", SMALLFONT);
73 void SignalStatus::update_lck(int v)
75 set_color(v>0 ? GREEN : RED);
76 draw_box(lck_x, lck_y, lck_w, lck_h);
79 void SignalStatus::update_crr(int v)
81 set_color(v>0 ? GREEN : RED);
82 draw_box(crr_x, crr_y, crr_w, crr_h);
85 void SignalStatus::update_pwr(int v)
88 int w0 = (v*pwr_w) / 65535, w1 = pwr_w-w0;
89 if( w0 > 0 ) { set_color(GREEN); draw_box(pwr_x, pwr_y, w0, pwr_h); }
90 if( w1 > 0 ) clear_box(pwr_x+w0, pwr_y, w1, pwr_h);
93 void SignalStatus::update_snr(int v)
96 int w0 = (v*snr_w) / 65535, w1 = pwr_w-w0;
97 if( w0 > 0 ) { set_color(BLUE); draw_box(snr_x, snr_y, w0, snr_h); }
98 if( w1 > 0 ) clear_box(snr_x+w0, snr_y, w1, snr_h);
101 void SignalStatus::update_ber(int v)
105 while( v > 0 ) { ++b; v>>=1; }
106 int w0 = (ber_w*b)/16, w1 = ber_w-w0;
107 if( w0 > 0 ) { set_color(YELLOW); draw_box(ber_x, ber_y, w0, ber_h); }
108 if( w1 > 0 ) clear_box(ber_x+w0, ber_y, w1, ber_h);
111 void SignalStatus::update_unc(int v)
115 while( v > 0 ) { ++b; v>>=1; }
116 int w0 = (unc_w*b)/16, w1 = unc_w-w0;
117 if( w0 > 0 ) { set_color(RED); draw_box(unc_x, unc_y, w0, unc_h); }
118 if( w1 > 0 ) clear_box(unc_x+w0, unc_y, w1, unc_h);
122 void SignalStatus::update()
124 channel_title->update(dvb_input->channel_title());
125 update_lck(dvb_input->signal_lck); update_crr(dvb_input->signal_crr);
126 update_pwr(dvb_input->signal_pwr); update_snr(dvb_input->signal_snr);
127 update_ber(dvb_input->signal_ber); update_unc(dvb_input->signal_unc);