📄 txpow.c
字号:
/* * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting * Copyright (c) 2002-2005 Atheros Communications, Inc. * All rights reserved. * * $Id: txpow.c,v 1.1.1.1 2006/09/12 03:45:21 steven Exp $ */#include "diag.h"#include <getopt.h>#include "ah.h"#include "ah_devid.h"#include "ah_internal.h"#undef AH_PRIVATE /* XXX twist defs in ar5212.h to suit */#define AH_PRIVATE(ah) (ah)#include "ar5212/ar5212.h"#include "ar5212/ar5212reg.h"static void printPcdacTable(FILE *fd, u_int16_t pcdac[], u_int n);static void printPowerPerRate(FILE *fd, u_int16_t ratesArray[], u_int n);static void printRevs(FILE *fd, const HAL_REVS *revs);static voidusage(const char *progname){ fprintf(stderr, "usage: %s [-v] [-i dev]\n", progname); exit(1);}intmain(int argc, char *argv[]){ int s, i, verbose = 0, c; struct ath_diag atd; HAL_REVS revs; u_int16_t pcdacTable[MAX(PWR_TABLE_SIZE,PWR_TABLE_SIZE_2413)]; u_int16_t ratesArray[16]; u_int nrates, npcdac; s = socket(AF_INET, SOCK_DGRAM, 0); if (s < 0) err(1, "socket"); strncpy(atd.ad_name, ATH_DEFAULT, sizeof (atd.ad_name)); while ((c = getopt(argc, argv, "i:v")) != -1) switch (c) { case 'i': strncpy(atd.ad_name, optarg, sizeof (atd.ad_name)); break; case 'v': verbose++; break; default: usage(argv[0]); } atd.ad_id = HAL_DIAG_REVS; atd.ad_out_data = (caddr_t) &revs; atd.ad_out_size = sizeof(revs); if (ioctl(s, SIOCGATHDIAG, &atd) < 0) err(1, atd.ad_name); if (verbose) printRevs(stdout, &revs); atd.ad_id = HAL_DIAG_TXRATES; atd.ad_out_data = (caddr_t) ratesArray; atd.ad_out_size = sizeof(ratesArray); if (ioctl(s, SIOCGATHDIAG, &atd) < 0) err(1, atd.ad_name); nrates = sizeof(ratesArray) / sizeof(u_int16_t); atd.ad_id = HAL_DIAG_PCDAC; atd.ad_out_data = (caddr_t) pcdacTable; atd.ad_out_size = sizeof(pcdacTable); if (ioctl(s, SIOCGATHDIAG, &atd) < 0) err(1, atd.ad_name); if (IS_2413(&revs)) npcdac = PWR_TABLE_SIZE_2413; else npcdac = PWR_TABLE_SIZE; printf("PCDAC table:\n"); printPcdacTable(stdout, pcdacTable, npcdac); printf("Power per rate table:\n"); printPowerPerRate(stdout, ratesArray, nrates); return 0;}static voidprintPcdacTable(FILE *fd, u_int16_t pcdac[], u_int n){ int i, halfRates = n/2; for (i = 0; i < halfRates; i += 2) fprintf(fd, "[%2u] %04x %04x [%2u] %04x %04x\n", i, pcdac[2*i + 1], pcdac[2*i], i+1, pcdac[2*(i+1) + 1], pcdac[2*(i+1)]);}static voidprintPowerPerRate(FILE *fd, u_int16_t ratesArray[], u_int n){ const unsigned char *rateString[] = { " 6mb OFDM", " 9mb OFDM", "12mb OFDM", "18mb OFDM", "24mb OFDM", "36mb OFDM", "48mb OFDM", "54mb OFDM", "1L CCK ", "2L CCK ", "2S CCK ", "5.5L CCK ", "5.5S CCK ", "11L CCK ", "11S CCK ", "XR " }; int i, halfRates = n/2; for (i = 0; i < halfRates; i++) fprintf(fd, " %s %3d.%1d dBm | %s %3d.%1d dBm\n", rateString[i], ratesArray[i]/2, (ratesArray[i] %2) * 5, rateString[i + halfRates], ratesArray[i + halfRates]/2, (ratesArray[i + halfRates] %2) *5);}static voidprintRevs(FILE *fd, const HAL_REVS *revs){ const char *rfbackend; fprintf(fd, "PCI device id 0x%x subvendor id 0x%x\n", revs->ah_devid, revs->ah_subvendorid); fprintf(fd, "mac %d.%d phy %d.%d" , revs->ah_macVersion, revs->ah_macRev , revs->ah_phyRev >> 4, revs->ah_phyRev & 0xf ); rfbackend = IS_2413(revs) ? "2413" : IS_5112(revs) ? "5112" : "5111"; if (revs->ah_analog5GhzRev && revs->ah_analog2GhzRev) fprintf(fd, " 5ghz radio %d.%d 2ghz radio %d.%d (%s)\n" , revs->ah_analog5GhzRev >> 4 , revs->ah_analog5GhzRev & 0xf , revs->ah_analog2GhzRev >> 4 , revs->ah_analog2GhzRev & 0xf , rfbackend ); else fprintf(fd, " radio %d.%d (%s)\n" , revs->ah_analog5GhzRev >> 4 , revs->ah_analog5GhzRev & 0xf , rfbackend );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -