Changeset 2527


Ignore:
Timestamp:
2005-11-19T01:34:35+01:00 (10 years ago)
Author:
nbd
Message:

add wl0_txpwr setting to wificonf

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/whiterussian/openwrt/package/wificonf/wificonf.c

    r2475 r2527  
    100100} 
    101101 
     102 
     103/* Quarter dBm units to mW 
     104 * Table starts at QDBM_OFFSET, so the first entry is mW for qdBm=153 
     105 * Table is offset so the last entry is largest mW value that fits in 
     106 * a uint16. 
     107 */ 
     108 
     109#define QDBM_OFFSET 153 
     110#define QDBM_TABLE_LEN 40 
     111 
     112/* Smallest mW value that will round up to the first table entry, QDBM_OFFSET. 
     113 * Value is ( mW(QDBM_OFFSET - 1) + mW(QDBM_OFFSET) ) / 2 
     114 */ 
     115#define QDBM_TABLE_LOW_BOUND 6493 
     116 
     117/* Largest mW value that will round down to the last table entry, 
     118 * QDBM_OFFSET + QDBM_TABLE_LEN-1. 
     119 * Value is ( mW(QDBM_OFFSET + QDBM_TABLE_LEN - 1) + mW(QDBM_OFFSET + QDBM_TABLE_LEN) ) / 2. 
     120 */ 
     121#define QDBM_TABLE_HIGH_BOUND 64938 
     122 
     123static const uint16 nqdBm_to_mW_map[QDBM_TABLE_LEN] = { 
     124/* qdBm:        +0              +1              +2              +3              +4              +5              +6              +7      */ 
     125/* 153: */      6683,   7079,   7499,   7943,   8414,   8913,   9441,   10000, 
     126/* 161: */      10593,  11220,  11885,  12589,  13335,  14125,  14962,  15849, 
     127/* 169: */      16788,  17783,  18836,  19953,  21135,  22387,  23714,  25119, 
     128/* 177: */      26607,  28184,  29854,  31623,  33497,  35481,  37584,  39811, 
     129/* 185: */      42170,  44668,  47315,  50119,  53088,  56234,  59566,  63096 
     130}; 
     131 
     132unsigned char mw_to_qdbm(uint16 mw) 
     133{ 
     134        char qdbm; 
     135        int offset; 
     136        uint mw_uint = mw; 
     137        uint boundary; 
     138         
     139        /* handle boundary case */ 
     140        if (mw_uint <= 1) 
     141                return 0; 
     142         
     143        offset = QDBM_OFFSET; 
     144         
     145        /* move mw into the range of the table */ 
     146        while (mw_uint < QDBM_TABLE_LOW_BOUND) { 
     147                mw_uint *= 10; 
     148                offset -= 40; 
     149        } 
     150 
     151        for (qdbm = 0; qdbm < QDBM_TABLE_LEN-1; qdbm++) { 
     152                boundary = nqdBm_to_mW_map[qdbm] + (nqdBm_to_mW_map[qdbm+1] - nqdBm_to_mW_map[qdbm])/2; 
     153                if (mw_uint < boundary) break; 
     154        } 
     155 
     156        qdbm += (unsigned char)offset; 
     157 
     158        return(qdbm); 
     159} 
    102160 
    103161static int bcom_ioctl(int skfd, char *ifname, int cmd, void *buf, int len) 
     
    262320        buf[3] = 0; 
    263321        bcom_ioctl(skfd, ifname, WLC_SET_COUNTRY, buf, 4); 
     322         
     323        if (v = nvram_get(wl_var("txpwr"))) { 
     324                val = atoi(v); 
     325                val = mw_to_qdbm(val); 
     326                bcom_set_int(skfd, ifname, "qtxpower", val); 
     327        } 
    264328         
    265329        /* Set other options */ 
Note: See TracChangeset for help on using the changeset viewer.