Почему неправильно отображается уровень 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. В какую сторону мне копать? Может так как сделал я вообще не правильно делать? Почему со встроенным модемом всё работает?


Ответы (0 шт):