Maybe it's my recent lack of sleep, maybe I'm just being picky, or maybe I'm not seeing this correctly but I'm sitting here tonight reading through some driver documentation on an ARM microcontroller with built in Wi-Fi I may want to snag for a project. I glanced across the section detailing how the roams are calculated, the triggers and thresholds and such. I noticed some numbers that seem like they could potentially be a bit troublesome at first glance and if they are I may end up trying to tweak them a bit if I end up getting the device. Before I go messing with the chipset drivers though I want to grab some other opinions if possible.
The documented defaults for the driver's roaming mechanism are:
- RSSI Upper Threshold: -40dBm (initiate background scan for roam candidate if RSSI falls below this)
- RSSI Lower Threshold: -65dBm (initiate roam to best AP if RSSI is falls below this)
- RSSI Tolerance Threshold: -10dBm (delay roaming if the difference in RSSI between the current AP and the best roam target AP)
First, no matter what when the RSSI drops below -40dBm, start building a table of the candidate APs.
Next, when the RSSI drops below -65dBm, roam to the best AP in the table where the cadidate AP RSSI is -10dB or more meaning an RSSI of -66dBm will cause a roam if any candidate is a -55dBm or more.
Finally, the client will refuse to roam if no candidate in the table exceeds that -10dB threshold.
-40dBm? To me that seems a tad excessive and will cause issues if I'm trying to maintain a stable connection because the thing will pretty much always be in background scanning mode. I don't even know if I can hit that value without putting this thing directly on top of an access point. And that doesn't even take into account the damaging overhead added to the tiny CPU.
Is the -65dBm lower threshold for triggering a roam, based on current design guides from pretty much every vendor out there (-67dBm minimum for voice) this thing is going to want to start roaming before I even reach a cell edge.
The -10dB buffer leads me to beleive this thing will be a sticky client no matter what I do.
If I were to change the values to one based on new info released by Apple (I'm not putting them on a pedestal or anything, just as a reference) the values would be:
- RSSI Upper Threshold: -70dBm
- RSSI Lower Threshold: -70dBm
- RSSI Tolerance Threshold: -8dBm (-12dBm if idle w/ screen off)
They also do it a bit differently, only initiating the scan when the client is actually ready to roam, not just looking for the sake of looking while sitting there with incredible signal strength..
First, am I off-base here? If I am, please enlighten me. If not... second, based on the values at the top and my interpretation, would you change these values? And third, has anyone tweaked something like this to correct any poorly designed drivers?