Handling maximum transmit power requirements by regulatory region #12144
Replies: 1 comment 1 reply
-
|
Hello @sjlongland, Right, nRF Connect SDK does not implement optional Radio Platform APIs such as For now, you can use the following function to achieve your use case: In your view, does OpenThread need a new API for this, or is it more a matter of SoC vendors providing broader implementations of the existing optional APIs? By the way, it is also possible to use certified OpenThread libraries from NCS and still implement power mapping as part of the application or through radio port extensions. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Hi all,
A few years back, we underwent the necessary steps to start selling a Thread-based product in the US market, which meant we were required to comply with the FCC rules regarding maximum transmit power on certain frequencies.
The device we ship has a +22dBm power amplifier. For the US market, we could run at a maximum of +20dBm power on most channels, but a couple we had to limit to +11dBm. This is a restriction we didn't have in the Australian market. (The EU was even more strict: +10dBm across the board.)
At the time, OpenThread added the
otPlatRadioGetRegionandotPlatRadioSetRegioncalls, but no drivers actually supported this feature. It was up to us to actually implement the power limiting feature.My approach then was firstly to generate a look-up table and function that, given a region, a channel and a target TX power; could tell me the TX power to use, and then to modify the radio driver (CC2538 in our case) to clamp/update the transmit power when changing the radio TX power or channel:
We're porting the codebase across to the nRF Connect SDK and its version of OpenThread. I see looking at the APIs,
otPlatRadioSetChannelTargetPowerwas recently added as an optional feature. For Thread certification purposes, we're using their binary build, which means modifying the driver to call our code is not possible.Given this is a problem that affects all commercial users of OpenThread shipping products built on it (regardless of what hardware platform they use, many will use the library toolkits provided by their vendors), it would appear a common approach is what should be aimed for here, since the actual maximum transmit power we permit is going to be dependent on multiple factors:
otPlatRadioSetRegion)otPlatRadioSetChannel, but OpenThread also hops channels momentarily to "scan" for other nodes).It's not possible for a chip designer or the OpenThread team to know the above. Thus we need a hook in OpenThread that allows us to clamp the transmit power specified to the radio driver. This hook would need to be called in the
otPlatRadioTransmitfunction, as the radio frame encodes what channel we're on (mChannel) and the radio configuration sets the region and maximum power.Question is, how do we go about adding such a hook to OpenThread?
Is this currently possible with the existing builds and I just missed something or is this something that needs to be implemented in the OpenThread core, and filter down through the vendor SDKs?
Are there vendors already handling this in their drivers? Which ones are not?
Thanks in advance.
Regards,
Beta Was this translation helpful? Give feedback.
All reactions