6 #define ts_add_nsec(ts, ns) { \
8 if (ts.tv_nsec >= 1000000000) { \
10 ts.tv_nsec -= 1000000000; \
14 static FILE *open_wl_stats(void)
20 for (i = 0; i < 100; i++) {
21 snprintf(buf, sizeof(buf),
22 "/sys/class/ieee80211/phy%d/device/wl_stats", i);
29 perror("open wl_stats");
35 static const char *names[VALS] = {
36 "fcs_err", "plcp_er", "seq_err", " valid",
37 " retry", " touts", "oth_err", " reqs"
39 static const unsigned char need_diff[VALS] = { 0, 0, 1, 0, 1, 1, 1, 1 };
41 static int get_vals(FILE *f, unsigned int *vals)
43 return fscanf(f, "%u %u %u %u %u %u %u %u\n",
44 &vals[0], &vals[1], &vals[2], &vals[3],
45 &vals[4], &vals[5], &vals[6], &vals[7]);
48 int main(int argc, char *argv[])
50 pthread_mutex_t dummy_mutex = PTHREAD_MUTEX_INITIALIZER;
51 pthread_cond_t dummy_cond = PTHREAD_COND_INITIALIZER;
52 unsigned int vals[VALS], vals_old[VALS];
62 get_vals(f, vals_old);
64 clock_gettime(CLOCK_REALTIME, &ts);
69 ret = get_vals(f, vals);
71 fprintf(stderr, "scan error (%d)\n", ret);
76 // printf("------------- rx ------------- ------------ tx -------------\n");
77 for (i = 0; i < VALS; i++)
78 printf("%s ", names[i]);
82 for (i = 0; i < VALS; i++)
83 printf("%7u ", need_diff[i] ? (vals[i] - vals_old[i]) : vals[i]);
87 memcpy(vals_old, vals, sizeof(vals_old));
89 ts_add_nsec(ts, 1000000000);
90 pthread_mutex_lock(&dummy_mutex);
91 pthread_cond_timedwait(&dummy_cond, &dummy_mutex, &ts);
92 pthread_mutex_unlock(&dummy_mutex);