Почему неправильно отображается уровень wifi в yocto-linux?
Изучаю yocto(система конфигурирования/сборки операционных систем для встраиваемых устройств)в данный момент. Образ устанавливается на raspberry. Появилась необходимость вытаскивать уровень wifi в программе на c++, работающей в системе. Когда вытаскиваю уровень у встроенного модема - всё в порядке, но когда подключаю внешний usb-модем, числа выходят неадекватные. Слой с драйвером использую вот этот. Реализация на c++ (создание сокета опустил, что бы не засорять вопрос):
...
iwreq iwreq {};
iw_statistics iwstats {};
strncpy(iwreq.ifr_name, interface_name_.c_str(), IFNAMSIZ);
iwreq.u.data.pointer = &iwstats;
iwreq.u.data.length = sizeof(iw_statistics);
iwreq.u.data.flags = 1;
memset(&iwstats, 0, sizeof(iwstats));
if (ioctl(socket_, SIOCGIWSTATS, &iwreq) == -1) {
std::cout << "Ioctl failure" << std::endl;
return 0;
}
std::cout << "Wireless level:" << (int8_t)iwstats.qual.level << std::endl;
...
Как я определил что числа не адекватные? Во-первых уровень сигнала положителен, во-вторых на ПК у меня выдаются значения нормальные и они меньше почти в 2 раза по модулю, чем то, что я получаю на raspberry.
В файле proc/net/wireless
значения выходят так же не адекватные(такие же как в c++ программе). iw при этом выдаёт адекватные значения.
Ничего нагуглить я не смог, кроме того, что можно заглянуть в исходный код iw и разобраться как это работает там, либо использовать std::system и просто вызывать iw, либо ещё разобраться с тем как работает изнутри nmcli.
В какую сторону мне копать? Может так как сделал я вообще не правильно делать? Почему со встроенным модемом всё работает?