[link-quality] helper fn to convert link margin, link quality, RSS (#8081)
This commit simplifies the helper functions that convert between
link margin, link quality and RSS (replacing the `static` methods
in `LinkQualityInfo`).
diff --git a/src/core/thread/link_quality.hpp b/src/core/thread/link_quality.hpp
index bc10957..e919e3d 100644
--- a/src/core/thread/link_quality.hpp
+++ b/src/core/thread/link_quality.hpp
@@ -242,12 +242,47 @@
};
/**
+ * This function computes the link margin from a given noise floor and received signal strength.
+ *
+ * @param[in] aNoiseFloor The noise floor value (in dBm).
+ * @param[in] aRss The received signal strength value (in dBm).
+ *
+ * @returns The link margin value in dB.
+ *
+ */
+uint8_t ComputeLinkMargin(int8_t aNoiseFloor, int8_t aRss);
+
+/**
+ * This function converts a link margin value to a link quality value.
+ *
+ * @param[in] aLinkMargin The Link Margin in dB.
+ *
+ * @returns The link quality value (0-3).
+ *
+ */
+LinkQuality LinkQualityForLinkMargin(uint8_t aLinkMargin);
+
+/**
+ * This function gets the typical received signal strength value for a given link quality.
+ *
+ * @param[in] aNoiseFloor The noise floor value (in dBm).
+ * @param[in] aLinkQuality The link quality value in [0, 3].
+ *
+ * @returns The typical platform RSSI in dBm.
+ *
+ */
+int8_t GetTypicalRssForLinkQuality(int8_t aNoiseFloor, LinkQuality aLinkQuality);
+
+/**
* This class encapsulates/stores all relevant information about quality of a link, including average received signal
* strength (RSS), last RSS, link margin, and link quality.
*
*/
class LinkQualityInfo : public InstanceLocatorInit
{
+ friend LinkQuality LinkQualityForLinkMargin(uint8_t aLinkMargin);
+ friend int8_t GetTypicalRssForLinkQuality(int8_t aNoiseFloor, LinkQuality aLinkQuality);
+
public:
static constexpr uint16_t kInfoStringSize = 50; ///< `InfoString` size (@sa ToInfoString()).
@@ -387,51 +422,6 @@
*/
uint16_t GetMessageErrorRate(void) const { return mMessageErrorRate.GetFailureRate(); }
- /**
- * This method converts a received signal strength value to a link margin value.
- *
- * @param[in] aNoiseFloor The noise floor value (in dBm).
- * @param[in] aRss The received signal strength value (in dBm).
- *
- * @returns The link margin value.
- *
- */
- static uint8_t ConvertRssToLinkMargin(int8_t aNoiseFloor, int8_t aRss);
-
- /**
- * This method converts a link margin value to a link quality value.
- *
- * @param[in] aLinkMargin The Link Margin in dB.
- *
- * @returns The link quality value (0-3).
- *
- */
- static LinkQuality ConvertLinkMarginToLinkQuality(uint8_t aLinkMargin);
-
- /**
- * This method converts a received signal strength value to a link quality value.
- *
- * @param[in] aNoiseFloor The noise floor value (in dBm).
- * @param[in] aRss The received signal strength value (in dBm).
- *
- * @returns The link quality value (0-3).
- *
- */
- static LinkQuality ConvertRssToLinkQuality(int8_t aNoiseFloor, int8_t aRss);
-
- /**
- * This method converts a link quality value to a typical received signal strength value.
- *
- * @note only for test.
- *
- * @param[in] aNoiseFloor The noise floor value (in dBm).
- * @param[in] aLinkQuality The link quality value in [0, 3].
- *
- * @returns The typical platform RSSI.
- *
- */
- static int8_t ConvertLinkQualityToRss(int8_t aNoiseFloor, LinkQuality aLinkQuality);
-
private:
// Constants for obtaining link quality from link margin: