Я создал следующую программу 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?