On Thu, Jul 13, 2006 at 11:37:45PM -0400, Dan Williams wrote: > On Tue, 2006-07-11 at 23:03 -0500, Larry Finger wrote: > > Dan Williams wrote: > > > > > > NAK... remember, range->max_qual.level must be _0_ if you're in dBm, > > > > I do not think this is right. From the comments in include/linux/wireless.h: > > > > /* Quality of link & SNR stuff */ > > /* Quality range (link, level, noise) > > * If the quality is absolute, it will be in the range [0 ; > > max_qual], > > * if the quality is dBm, it will be in the range [max_qual ; 0]. > > * Don't forget that we use 8 bit arithmetics... */ > > Jean, what's the official word on range->max_qual.level? > > I don't know where I came up with the requirement that max_qual.level > must be 0 to indicate that the units are in dBm (as opposed to RSSI), > but it might well have been because we had no way to detect RSSI vs. dBm > before IW_QUAL_DBM was added as a flag in WE-19, and therefore using > level = 0 was the only reliable way because 0 is the theoretical "max" > level that most cards can handle.
I must admit that the original definition was too clever (or too ambiguous, or too original, take your pick). range->max_qual.level is always supposed to have a meaningfull value. People that did not understand that original definition just put 0 there, as it was the easiest way to output dBm. If you want more details, check the comment in the function iw_print_stats() in iwlib.c. As I say, range->max_qual.level is always supposed to have something useful, so : if(IW_QUAL_DBM == 0) rssi level in the range [0 ; range->max_qual.level] if(IW_QUAL_DBM == 1) (rssi level - 256) in the range [range->max_qual.level - 256 ; 0] > So if you want to express your quality in dBm, you have a choice; either > set IW_QUAL_DBM explicitly and do what you want with max_qual.level, or > set your max_qual.level to 0. That's my interpretation, of course I > could be wrong. Correct for WE>19. > Furthermore, there's no point to setting your max_qual.level to be the > lowest level, since that's what your max_qual.noise is!!! > max_qual.noise is the noise floor of your card and that effectively _is_ > the lowest level at which your card can operate. I did not think about that, and that's a very interesting point. Yes, we could modify the definition to make use of that. > In the ideal world, which we are now much closer to, we could _require_ > that IW_QUAL_DBM was set, otherwise values would be interpreted as RSSI. > And we can if the driver's we_source_version is >= 19. I agree, it's > all quite confusing for starters. > > Jean? I think WE-19 is old enough (most distro seems to use 2.6.16) that we don't have to bother about earlier version going forward. > Hm, I didn't think that WE's quality specification took scale into > account; AFAIK you get 255 values to play with, and each maps either to > an RSSI value of your choice, or to an absolute dBm value. There's no > scaling involved AFAIK. You can use the full 255 values (but not 256). There is scaling is you want you indicator to look nice with all cards. > So; if you want to use dBm you should probably set IW_QUAL_DBM flag on > the qual->updated field when you update level & noise. Then, nothing is > ambiguous and everyone knows exactly what you mean. Which is why > IW_QUAL_DBM was added, because I complained that quality was too > ambiguous. > > Jean? Correct. And as pointed out later, it has the added bonus of having a correct display of dBm in /proc/net/wireless. > Cheers, > Dan Jean - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html