xref: /aosp_15_r20/external/ot-br-posix/src/openwrt/view/admin_thread/thread_scan.htm (revision 4a64e381480ef79f0532b2421e44e6ee336b8e0d)
1<%-
2	local ubus = require "ubus"
3	local sys = require "luci.sys"
4	local utl = require "luci.util"
5
6	function guess_thread_signal(info)
7		local scale
8		local icon
9		local rssi = info.Rssi or 0
10
11		if rssi <= -100 then
12			scale = 0
13		elseif rssi >= -50 then
14			scale = 100
15		else
16			scale = math.floor(2 * (100 + rssi))
17		end
18
19		if info.NetworkName == nil then
20			icon = resource .. "/icons/signal-none.png"
21		elseif scale < 15 then
22			icon = resource .. "/icons/signal-0.png"
23		elseif scale < 35 then
24			icon = resource .. "/icons/signal-0-25.png"
25		elseif scale < 55 then
26			icon = resource .. "/icons/signal-25-50.png"
27		elseif scale < 75 then
28			icon = resource .. "/icons/signal-50-75.png"
29		else
30			icon = resource .. "/icons/signal-75-100.png"
31		end
32
33		return icon
34	end
35
36	function percent_thread_signal(info)
37		local rssi = info.Rssi or 0
38
39		if rssi <= -100 then
40			return 0
41		elseif rssi >= -50 then
42			return 100
43		else
44			return math.floor(2 * (100 + rssi))
45		end
46	end
47
48	function scanlist()
49		local k, v
50		local l = { }
51
52		local conn = ubus.connect()
53		if not conn then
54			error("Failed to connect to ubusd")
55		end
56
57		local scanresult = conn:call("otbr", "scan", {})
58
59		for k, v in pairs(scanresult.scan_list) do
60			l[#l+1] = v
61		end
62
63		return l
64	end
65-%>
66
67<%+header%>
68
69<h2><%:Join Network: Thread Scan%></h2>
70<br />
71
72<div class="cbi-map">
73	<div class="cbi-section">
74		<div class="table">
75			<div class="tr table-titles">
76				<div class="th col-1 center"><%:RSSI%></div>
77				<div class="th col-1 center"><%:Channel%></div>
78				<div class="th col-2 center"><%:PAN Id%></div>
79				<div class="th col-1 left"><%:Lqi%></div>
80				<div class="th cbi-section-actions">&#160;</div>
81			</div>
82
83			<!-- scan list -->
84			<% for i, net in ipairs(scanlist()) do %>
85			<div class="tr cbi-rowstyle-<%=1 + ((i-1) % 2)%>">
86				<div class="td col-1 center">
87					<abbr title="<%:Signal%>: <%=net.Rssi%> <%:dB%> / <%:Quality%>: <%=net.Lqi%>">
88						<img src="<%=guess_thread_signal(net)%>" /><br />
89						<small><%=percent_thread_signal(net)%>%</small>
90					</abbr>
91				</div>
92				<div class="td col-1 center" data-title="<%:Channel%>">
93					<%=net.Channel%>
94				</div>
95				<div class="td col-2 center" data-title="<%:PanId%>">
96					<%=net.PanId%>
97				</div>
98				<div class="td col-1 left" data-title="<%:Lqi%>">
99					<%=net.Lqi%>
100				</div>
101				<div class="td cbi-section-actions">
102					<!--div><%:test%></div-->
103					<form action="<%=url('admin/network/thread_join')%>" method="post">
104						<input type="hidden" name="token" value="<%=token%>" />
105						<input type="hidden" name="PanId" value="<%=net.PanId%>" .>
106						<input type="hidden" name="Channel" value="<%=net.Channel%>" .>
107						<input class="cbi-button cbi-button-action important" type="submit" value="<%:Join Network%>" />
108					</form>
109				</div>
110			</div>
111			<% end %>
112			<!-- /scan list -->
113		</div>
114	</div>
115</div>
116<div class="cbi-page-actions right">
117	<form class="inline" action="<%=url('admin/network/thread')%>" method="get">
118		<input class="cbi-button cbi-button-neutral" type="submit" value="<%:Back to overview%>" />
119	</form>
120	<form class="inline" action="<%=url('admin/network/thread_scan')%>" method="post">
121		<input type="hidden" name="token" value="<%=token%>" />
122		<input class="cbi-button cbi-button-action" type="submit" value="<%:Repeat scan%>" />
123	</form>
124</div>
125
126<%+footer%>
127