Получение SNR Wi-Fi через wireless.h для интерфейса wlan на linux - PullRequest
0 голосов
/ 06 мая 2020

Я создал следующую программу c для получения SNR через wireless.h услышите linux.

#include <stdio.h>  
#include <string.h> 
#include <sys/socket.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/wireless.h>
#include <iostream>


unsigned char get_snr(char *iface)
{
    int sock = -1;
    struct iwreq pwrq;
    memset(&pwrq, 0, sizeof(pwrq)); 
    strncpy(pwrq.ifr_name, iface, IFNAMSIZ); 
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
        perror("socket");
        return 0;
    }    
    if (ioctl(sock, SIOCGIWNAME, &pwrq) != -1)
    {   
        unsigned char snr =(int8_t)pwrq.u.qual.qual; 
        close(sock);
        return snr;         
    }    
    close(sock);
    return 0;   
}


int
main (int argc, char *argv[])
{ 
  unsigned char snr = get_snr("wlan0");  
  printf("snr is  %u\n", snr);
  return 0;
}

В моем случае я получаю значение 73. В заголовке wireless. h упоминается, что:

struct iw_quality {
    __u8        qual;       /* link quality (%retries, SNR,
                       %missed beacons or better...) */
    __u8        level;      /* signal level (dBm) */
    __u8        noise;      /* noise level (dBm) */
    __u8        updated;    /* Flags to know if updated */
};

Таким образом, квалификация относится к качеству ссылки (% повторных попыток, SNR,% пропущенных маяков или лучше ...)
Поскольку я не нашел более подробного описания Я хотел бы спросить, относится ли полученное мной значение 73 к SNR (73 дБ) или к более общему показателю качества c, и если да, то как я могу извлечь только значение SNR?

...