Ive обнаружил, что несколько Android-приложений Wi-Fi (WiFi Manager, WiFi Analyzer) показывают номер канала сети WiFi дополнительно к BSSID/SSID и т.д. Но я не могу найти никакой информации о том, как они это делают. Единственное, что я знаю, это то, что я могу получить некоторую частоту Wi-Fi. Может быть, они определяют канал, соответствующий этой частоте? Есть ли способ обнаружить канал Wi-Fi сети в Android? Конечно, эта информация не имеет большого значения, и я могу жить без нее:), но все же мне любопытно...
Как определить номер канала wifi, используемый wifi ap/network?
Ответ 1
Согласно Radio-Electronics.com, номер канала действительно связан с частотой.
CHA LOWER CENTER UPPER NUM FREQ FREQ FREQ MHZ MHZ MHZ 1 2 401 2 412 2 423 2 2 404 2 417 2 428 3 2 411 2 422 2 433 4 2 416 2 427 2 438 5 2 421 2 432 2 443 6 2 426 2 437 2 448 7 2 431 2 442 2 453 8 2 436 2 447 2 458 9 2 441 2 452 2 463 10 2 451 2 457 2 468 11 2 451 2 462 2 473 12 2 456 2 467 2 478 13 2 461 2 472 2 483 14 2 473 2 484 2 495
Для Android ScanResult содержит частоту канала.
Ответ 2
@SuppressWarnings("boxing")
private final static ArrayList<Integer> channelsFrequency = new ArrayList<Integer>(
Arrays.asList(0, 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447,
2452, 2457, 2462, 2467, 2472, 2484));
public static Integer getFrequencyFromChannel(int channel) {
return channelsFrequency.get(channel);
}
public static int getChannelFromFrequency(int frequency) {
return channelsFrequency.indexOf(Integer.valueOf(frequency));
}
Ответ 3
Вы можете выразить преобразование, используя пару формул, по одной для каждой группы. Функция возвращает канал данной частоты или -1, если частота не является допустимой частотой Wi-Fi (2,4 ГГц и 5 ГГц).
public static int convertFrequencyToChannel(int freq) {
if (freq >= 2412 && freq <= 2484) {
return (freq - 2412) / 5 + 1;
} else if (freq >= 5170 && freq <= 5825) {
return (freq - 5170) / 5 + 34;
} else {
return -1;
}
}
Это компактный способ сделать то же самое.
Ответ 4
Согласно стандарту [802.11-2012], существует более простой способ определения номера канала с частотой. В частности,
channel_center_frequency = channel_starting_frequency + 5 * channel_number
Для полосы 5G,
channel_number
= 0, 1,..., 200; channel_starting_frequency
= 5000 МГц.
Для диапазона 2,4 ГГц,
channel_number
= 1, 2,..., 13; channel_starting_frequency
= 2047 МГц.
Список всех частот каналов можно найти на WiFi-каналах
Переведите это в код - обратитесь к iw
source:
int ieee80211_frequency_to_channel(int freq)
{
if (freq == 2484)
return 14;
if (freq < 2484)
return (freq - 2407) / 5;
return freq/5 - 1000;
}