feat: channel/band mapping helpers for radio1 AP
This commit is contained in:
@@ -1594,6 +1594,55 @@ def _uci_wifi_iface(name):
|
|||||||
return _uci_values('wireless.%s' % name)
|
return _uci_values('wireless.%s' % name)
|
||||||
|
|
||||||
|
|
||||||
|
BAND_2G = '2.4'
|
||||||
|
BAND_5G = '5'
|
||||||
|
BAND_6G = '6'
|
||||||
|
|
||||||
|
CHANNEL_BANDS = {
|
||||||
|
BAND_2G: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
|
||||||
|
BAND_5G: [36, 40, 44, 48, 52, 56, 60, 64,
|
||||||
|
100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144,
|
||||||
|
149, 153, 157, 161, 165],
|
||||||
|
BAND_6G: list(range(1, 234, 4)),
|
||||||
|
}
|
||||||
|
DFS_CHANNELS = frozenset([52, 56, 60, 64, 100, 104, 108, 112, 116, 120,
|
||||||
|
124, 128, 132, 136, 140, 144])
|
||||||
|
|
||||||
|
|
||||||
|
def channel_band(ch):
|
||||||
|
if ch is None:
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
ch = int(ch)
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
return None
|
||||||
|
if 1 <= ch <= 14:
|
||||||
|
return BAND_2G
|
||||||
|
if 36 <= ch <= 177:
|
||||||
|
return BAND_5G
|
||||||
|
if 1 <= ch <= 233 and (ch - 1) % 4 == 0:
|
||||||
|
return BAND_6G
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def channel_freq(band, ch):
|
||||||
|
if band == BAND_2G:
|
||||||
|
return 2412 + (ch - 1) * 5
|
||||||
|
if band == BAND_5G:
|
||||||
|
return 5180 + (ch - 36) * 5
|
||||||
|
if band == BAND_6G:
|
||||||
|
return 5955 + (ch - 1) * 5
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def band_htmode(band):
|
||||||
|
return {BAND_2G: 'HT20', BAND_5G: 'VHT80', BAND_6G: 'HE80'}.get(band)
|
||||||
|
|
||||||
|
|
||||||
|
def band_radio(band):
|
||||||
|
return 'radio0' if band == BAND_2G else 'radio1'
|
||||||
|
|
||||||
|
|
||||||
def _uci_section(section):
|
def _uci_section(section):
|
||||||
return _uci_values(section)
|
return _uci_values(section)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'payload', 'user', 'remote_access', 'pager-webui'))
|
||||||
|
import server
|
||||||
|
|
||||||
|
|
||||||
|
def setUpModule():
|
||||||
|
__import__('importlib').reload(server)
|
||||||
|
|
||||||
|
|
||||||
|
class ChannelBandTest(unittest.TestCase):
|
||||||
|
def test_2g_channels(self):
|
||||||
|
for ch in (1, 6, 11, 14):
|
||||||
|
self.assertEqual(server.channel_band(ch), server.BAND_2G)
|
||||||
|
|
||||||
|
def test_5g_channels(self):
|
||||||
|
for ch in (36, 48, 100, 149, 165, 177):
|
||||||
|
self.assertEqual(server.channel_band(ch), server.BAND_5G)
|
||||||
|
|
||||||
|
def test_6g_channels(self):
|
||||||
|
for ch in (181, 189, 197, 205, 213, 225, 233):
|
||||||
|
self.assertEqual(server.channel_band(ch), server.BAND_6G)
|
||||||
|
|
||||||
|
def test_invalid(self):
|
||||||
|
for ch in (0, 15, 35, 178, 234, None, 'x'):
|
||||||
|
self.assertIsNone(server.channel_band(ch))
|
||||||
|
|
||||||
|
|
||||||
|
class ChannelFreqTest(unittest.TestCase):
|
||||||
|
def test_freqs(self):
|
||||||
|
self.assertEqual(server.channel_freq(server.BAND_2G, 1), 2412)
|
||||||
|
self.assertEqual(server.channel_freq(server.BAND_2G, 11), 2462)
|
||||||
|
self.assertEqual(server.channel_freq(server.BAND_5G, 36), 5180)
|
||||||
|
self.assertEqual(server.channel_freq(server.BAND_5G, 165), 5825)
|
||||||
|
self.assertEqual(server.channel_freq(server.BAND_6G, 1), 5955)
|
||||||
|
self.assertEqual(server.channel_freq(server.BAND_6G, 233), 7115)
|
||||||
|
|
||||||
|
|
||||||
|
class BandAuxTest(unittest.TestCase):
|
||||||
|
def test_htmode(self):
|
||||||
|
self.assertEqual(server.band_htmode(server.BAND_2G), 'HT20')
|
||||||
|
self.assertEqual(server.band_htmode(server.BAND_5G), 'VHT80')
|
||||||
|
self.assertEqual(server.band_htmode(server.BAND_6G), 'HE80')
|
||||||
|
|
||||||
|
def test_radio(self):
|
||||||
|
self.assertEqual(server.band_radio(server.BAND_2G), 'radio0')
|
||||||
|
self.assertEqual(server.band_radio(server.BAND_5G), 'radio1')
|
||||||
|
self.assertEqual(server.band_radio(server.BAND_6G), 'radio1')
|
||||||
|
|
||||||
|
def test_dfs_marker(self):
|
||||||
|
self.assertIn(52, server.DFS_CHANNELS)
|
||||||
|
self.assertIn(144, server.DFS_CHANNELS)
|
||||||
|
self.assertNotIn(149, server.DFS_CHANNELS)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
Reference in New Issue
Block a user