luci-mod-status: fix bugs in channel analysis
- Add check for missing ht_operation data - Add support for radio that both support 5 and 2.4 band - Hide wireless station that doesn't belong to the graph band Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
This commit is contained in:
parent
1827e6dab2
commit
ea4119f25c
1 changed files with 96 additions and 73 deletions
|
@ -63,8 +63,8 @@ return view.extend({
|
||||||
if (scanCache[res.bssid].graph == null)
|
if (scanCache[res.bssid].graph == null)
|
||||||
scanCache[res.bssid].graph = [];
|
scanCache[res.bssid].graph = [];
|
||||||
|
|
||||||
for (var i=0; i < channels.length; i++) {
|
channels.forEach(function(channel) {
|
||||||
var chan_offset = offset_tbl[channels[i]],
|
var chan_offset = offset_tbl[channel],
|
||||||
points = [
|
points = [
|
||||||
(chan_offset-(step*channel_width))+','+height,
|
(chan_offset-(step*channel_width))+','+height,
|
||||||
(chan_offset-(step*(channel_width-1)))+','+height_diff,
|
(chan_offset-(step*(channel_width-1)))+','+height_diff,
|
||||||
|
@ -94,11 +94,12 @@ return view.extend({
|
||||||
scanCache[res.bssid].graph[i].line.setAttribute('points', points);
|
scanCache[res.bssid].graph[i].line.setAttribute('points', points);
|
||||||
scanCache[res.bssid].graph[i].group.style.zIndex = res.signal*-1;
|
scanCache[res.bssid].graph[i].group.style.zIndex = res.signal*-1;
|
||||||
scanCache[res.bssid].graph[i].group.style.opacity = res.stale ? '0.5' : null;
|
scanCache[res.bssid].graph[i].group.style.opacity = res.stale ? '0.5' : null;
|
||||||
}
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
create_channel_graph: function(chan_analysis, freq_tbl, is5GHz) {
|
create_channel_graph: function(chan_analysis, freq_tbl, freq) {
|
||||||
var columns = is5GHz ? freq_tbl.length * 4 : freq_tbl.length + 3,
|
var is5GHz = freq == '5GHz',
|
||||||
|
columns = is5GHz ? freq_tbl.length * 4 : freq_tbl.length + 3,
|
||||||
chan_graph = chan_analysis.graph,
|
chan_graph = chan_analysis.graph,
|
||||||
G = chan_graph.firstElementChild,
|
G = chan_graph.firstElementChild,
|
||||||
step = (chan_graph.offsetWidth - 2) / columns,
|
step = (chan_graph.offsetWidth - 2) / columns,
|
||||||
|
@ -127,7 +128,7 @@ return view.extend({
|
||||||
|
|
||||||
createGraphHLine(G,curr_offset);
|
createGraphHLine(G,curr_offset);
|
||||||
for (var i=0; i< freq_tbl.length;i++) {
|
for (var i=0; i< freq_tbl.length;i++) {
|
||||||
var channel = freq_tbl[i].channel
|
var channel = freq_tbl[i]
|
||||||
chan_analysis.offset_tbl[channel] = curr_offset+step;
|
chan_analysis.offset_tbl[channel] = curr_offset+step;
|
||||||
|
|
||||||
createGraphHLine(G,curr_offset+step);
|
createGraphHLine(G,curr_offset+step);
|
||||||
|
@ -135,7 +136,7 @@ return view.extend({
|
||||||
curr_offset += step;
|
curr_offset += step;
|
||||||
|
|
||||||
if (is5GHz && freq_tbl[i+1]) {
|
if (is5GHz && freq_tbl[i+1]) {
|
||||||
var next_channel = freq_tbl[i+1].channel;
|
var next_channel = freq_tbl[i+1];
|
||||||
/* Check if we are transitioning to another 5Ghz band range */
|
/* Check if we are transitioning to another 5Ghz band range */
|
||||||
if ((next_channel - channel) == 4) {
|
if ((next_channel - channel) == 4) {
|
||||||
for (var j=1; j < 4; j++) {
|
for (var j=1; j < 4; j++) {
|
||||||
|
@ -195,15 +196,14 @@ return view.extend({
|
||||||
|
|
||||||
scanCache[local_wifi.bssid].data = local_wifi;
|
scanCache[local_wifi.bssid].data = local_wifi;
|
||||||
|
|
||||||
|
if (chan_analysis.offset_tbl[local_wifi.channel] != null) {
|
||||||
var center_channels = [local_wifi.center_chan1],
|
var center_channels = [local_wifi.center_chan1],
|
||||||
chan_width_text = local_wifi.htmode.replace(/(V)*HT/,''),
|
chan_width_text = local_wifi.htmode.replace(/(V)*HT/,''),
|
||||||
chan_width;
|
chan_width = parseInt(chan_width_text)/10;
|
||||||
|
|
||||||
if (local_wifi.center_chan2) {
|
if (local_wifi.center_chan2) {
|
||||||
center_channels.push(local_wifi.center_chan2);
|
center_channels.push(local_wifi.center_chan2);
|
||||||
chan_width = 8;
|
chan_width = 8;
|
||||||
} else {
|
|
||||||
chan_width = parseInt(chan_width_text)/10;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local_wifi.signal = -10;
|
local_wifi.signal = -10;
|
||||||
|
@ -221,6 +221,7 @@ return view.extend({
|
||||||
'%h'.format(local_wifi.mode),
|
'%h'.format(local_wifi.mode),
|
||||||
'%h'.format(local_wifi.bssid)
|
'%h'.format(local_wifi.bssid)
|
||||||
]);
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
for (var k in scanCache)
|
for (var k in scanCache)
|
||||||
if (scanCache[k].stale)
|
if (scanCache[k].stale)
|
||||||
|
@ -252,7 +253,12 @@ return view.extend({
|
||||||
center_channels = [res.channel],
|
center_channels = [res.channel],
|
||||||
chan_width = 2;
|
chan_width = 2;
|
||||||
|
|
||||||
|
/* Skip WiFi not supported by the current band */
|
||||||
|
if (chan_analysis.offset_tbl[res.channel] == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
res.channel_width = "20 MHz";
|
res.channel_width = "20 MHz";
|
||||||
|
if (res.ht_operation != null)
|
||||||
if (res.ht_operation.channel_width == 2040) { /* 40 MHz Channel Enabled */
|
if (res.ht_operation.channel_width == 2040) { /* 40 MHz Channel Enabled */
|
||||||
if (res.ht_operation.secondary_channel_offset == "below") {
|
if (res.ht_operation.secondary_channel_offset == "below") {
|
||||||
res.channel_width = "40 MHz";
|
res.channel_width = "40 MHz";
|
||||||
|
@ -344,9 +350,25 @@ return view.extend({
|
||||||
var v = E('div', {}, E('div'));
|
var v = E('div', {}, E('div'));
|
||||||
|
|
||||||
for (var ifname in wifiDevs) {
|
for (var ifname in wifiDevs) {
|
||||||
|
var freq_tbl = {
|
||||||
|
['2.4GHz'] : [],
|
||||||
|
['5GHz'] : [],
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Split FrequencyList in Bands */
|
||||||
|
wifiDevs[ifname].freq.forEach(function(freq) {
|
||||||
|
if (freq.mhz >= 5000) {
|
||||||
|
freq_tbl['5GHz'].push(freq.channel);
|
||||||
|
} else {
|
||||||
|
freq_tbl['2.4GHz'].push(freq.channel);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for (var freq in freq_tbl) {
|
||||||
|
if (freq_tbl[freq].length == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
var csvg = svg.cloneNode(true),
|
var csvg = svg.cloneNode(true),
|
||||||
freq_tbl = wifiDevs[ifname].freq,
|
|
||||||
is5GHz = freq_tbl[0].mhz >= 5000,
|
|
||||||
table = E('div', { 'class': 'table' }, [
|
table = E('div', { 'class': 'table' }, [
|
||||||
E('div', { 'class': 'tr table-titles' }, [
|
E('div', { 'class': 'tr table-titles' }, [
|
||||||
E('div', { 'class': 'th col-2 middle center' }, _('Signal')),
|
E('div', { 'class': 'th col-2 middle center' }, _('Signal')),
|
||||||
|
@ -357,7 +379,7 @@ return view.extend({
|
||||||
E('div', { 'class': 'th col-3 middle left hide-xs' }, _('BSSID'))
|
E('div', { 'class': 'th col-3 middle left hide-xs' }, _('BSSID'))
|
||||||
])
|
])
|
||||||
]),
|
]),
|
||||||
tab = E('div', { 'data-tab': ifname, 'data-tab-title': ifname+' ('+(is5GHz ? '5GHz' : '2.4GHz')+') ' },
|
tab = E('div', { 'data-tab': ifname+freq, 'data-tab-title': ifname+' ('+freq+')' },
|
||||||
[E('br'),csvg,E('br'),table,E('br')]),
|
[E('br'),csvg,E('br'),table,E('br')]),
|
||||||
graph_data = {
|
graph_data = {
|
||||||
graph: csvg,
|
graph: csvg,
|
||||||
|
@ -366,7 +388,7 @@ return view.extend({
|
||||||
tab: tab,
|
tab: tab,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.radios[ifname] = {
|
this.radios[ifname+freq] = {
|
||||||
dev: wifiDevs[ifname].dev,
|
dev: wifiDevs[ifname].dev,
|
||||||
graph: graph_data,
|
graph: graph_data,
|
||||||
table: table,
|
table: table,
|
||||||
|
@ -377,7 +399,8 @@ return view.extend({
|
||||||
|
|
||||||
v.firstElementChild.appendChild(tab)
|
v.firstElementChild.appendChild(tab)
|
||||||
|
|
||||||
requestAnimationFrame(L.bind(this.create_channel_graph, this, graph_data, freq_tbl, is5GHz));
|
requestAnimationFrame(L.bind(this.create_channel_graph, this, graph_data, freq_tbl[freq], freq));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ui.tabs.initTabGroup(v.firstElementChild.childNodes);
|
ui.tabs.initTabGroup(v.firstElementChild.childNodes);
|
||||||
|
|
Loading…
Reference in a new issue