3 #include "devicedvbinput.h"
5 #include "signalstatus.h"
10 SignalStatus::SignalStatus(BC_WindowBase *wdw, int x, int y)
11 : BC_SubWindow(x, y, 100, 35)
25 SignalStatus::~SignalStatus()
28 dvb_input->set_signal_status(0);
32 void SignalStatus::create_objects()
34 clear_box(0,0,get_w(),get_h());
36 channel_title = new BC_Title(x, y, " ", SMALLFONT, GREEN);
37 add_subwindow(channel_title);
38 y += channel_title->get_h();
40 add_subwindow(title = new BC_Title(x, y, "lk:", SMALLFONT, YELLOW));
41 lck_x = x + title->get_w() + pad0;
43 int x1 = lck_x + lck_w + pad1;
44 int y1 = y + title->get_h();
45 add_subwindow(title = new BC_Title(x, y1, "cr:", SMALLFONT, YELLOW));
48 add_subwindow(title = new BC_Title(x1, y, "pwr", SMALLFONT, YELLOW));
49 pwr_x = x1 + title->get_w() + pad0;
52 snr_y = pwr_y + pwr_h;
53 add_subwindow(title = new BC_Title(x1, y1, "err", SMALLFONT, YELLOW));
57 unc_y = ber_y + ber_h;
60 int SignalStatus::calculate_w(BC_WindowBase *wdw)
62 return BC_Title::calculate_w(wdw, "lk:", SMALLFONT) + pad0 + lck_w + pad1 +
63 BC_Title::calculate_w(wdw, "pwr", SMALLFONT) + pad0 + pwr_w;
66 int SignalStatus::calculate_h(BC_WindowBase *wdw)
68 return 3*BC_Title::calculate_h(wdw, "lk:", SMALLFONT);
71 void SignalStatus::update_lck(int v)
73 set_color(v>0 ? GREEN : RED);
74 draw_box(lck_x, lck_y, lck_w, lck_h);
77 void SignalStatus::update_crr(int v)
79 set_color(v>0 ? GREEN : RED);
80 draw_box(crr_x, crr_y, crr_w, crr_h);
83 void SignalStatus::update_pwr(int v)
86 int w0 = (v*pwr_w) / 65535, w1 = pwr_w-w0;
87 if( w0 > 0 ) { set_color(GREEN); draw_box(pwr_x, pwr_y, w0, pwr_h); }
88 if( w1 > 0 ) clear_box(pwr_x+w0, pwr_y, w1, pwr_h);
91 void SignalStatus::update_snr(int v)
94 int w0 = (v*snr_w) / 65535, w1 = pwr_w-w0;
95 if( w0 > 0 ) { set_color(BLUE); draw_box(snr_x, snr_y, w0, snr_h); }
96 if( w1 > 0 ) clear_box(snr_x+w0, snr_y, w1, snr_h);
99 void SignalStatus::update_ber(int v)
103 while( v > 0 ) { ++b; v>>=1; }
104 int w0 = (ber_w*b)/16, w1 = ber_w-w0;
105 if( w0 > 0 ) { set_color(YELLOW); draw_box(ber_x, ber_y, w0, ber_h); }
106 if( w1 > 0 ) clear_box(ber_x+w0, ber_y, w1, ber_h);
109 void SignalStatus::update_unc(int v)
113 while( v > 0 ) { ++b; v>>=1; }
114 int w0 = (unc_w*b)/16, w1 = unc_w-w0;
115 if( w0 > 0 ) { set_color(RED); draw_box(unc_x, unc_y, w0, unc_h); }
116 if( w1 > 0 ) clear_box(unc_x+w0, unc_y, w1, unc_h);
120 void SignalStatus::update()
122 channel_title->update(dvb_input->channel_title());
123 update_lck(dvb_input->signal_lck); update_crr(dvb_input->signal_crr);
124 update_pwr(dvb_input->signal_pwr); update_snr(dvb_input->signal_snr);
125 update_ber(dvb_input->signal_ber); update_unc(dvb_input->signal_unc);