mirror of
https://github.com/espressif/openthread.git
synced 2026-07-29 07:07:47 +00:00
[link-quality] move CostForLinkQuality() to link_quality.hpp (#8561)
This commit renames and moves the function which coverts a given `LinkQuality` value to a link cost to `link_quality` source files.
This commit is contained in:
@@ -219,6 +219,29 @@ int8_t GetTypicalRssForLinkQuality(int8_t aNoiseFloor, LinkQuality aLinkQuality)
|
||||
return linkMargin + aNoiseFloor;
|
||||
}
|
||||
|
||||
uint8_t CostForLinkQuality(LinkQuality aLinkQuality)
|
||||
{
|
||||
static const uint8_t kCostsForLinkQuality[] = {
|
||||
kCostForLinkQuality0, // Link cost for `kLinkQuality0` (0).
|
||||
kCostForLinkQuality1, // Link cost for `kLinkQuality1` (1).
|
||||
kCostForLinkQuality2, // Link cost for `kLinkQuality2` (2).
|
||||
kCostForLinkQuality3, // Link cost for `kLinkQuality3` (3).
|
||||
};
|
||||
|
||||
static_assert(kLinkQuality0 == 0, "kLinkQuality0 is invalid");
|
||||
static_assert(kLinkQuality1 == 1, "kLinkQuality1 is invalid");
|
||||
static_assert(kLinkQuality2 == 2, "kLinkQuality2 is invalid");
|
||||
static_assert(kLinkQuality3 == 3, "kLinkQuality3 is invalid");
|
||||
|
||||
uint8_t cost = Mle::kMaxRouteCost;
|
||||
|
||||
VerifyOrExit(aLinkQuality <= kLinkQuality3);
|
||||
cost = kCostsForLinkQuality[aLinkQuality];
|
||||
|
||||
exit:
|
||||
return cost;
|
||||
}
|
||||
|
||||
LinkQuality LinkQualityInfo::CalculateLinkQuality(uint8_t aLinkMargin, uint8_t aLastLinkQuality)
|
||||
{
|
||||
// Static private method to calculate the link quality from a given
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include "common/clearable.hpp"
|
||||
#include "common/locator.hpp"
|
||||
#include "common/string.hpp"
|
||||
#include "thread/mle_types.hpp"
|
||||
|
||||
namespace ot {
|
||||
|
||||
@@ -241,6 +242,21 @@ enum LinkQuality : uint8_t
|
||||
kLinkQuality3 = 3, ///< Link quality 3
|
||||
};
|
||||
|
||||
constexpr uint8_t kCostForLinkQuality0 = Mle::kMaxRouteCost; ///< Link Cost for Link Quality 0.
|
||||
constexpr uint8_t kCostForLinkQuality1 = 4; ///< Link Cost for Link Quality 1.
|
||||
constexpr uint8_t kCostForLinkQuality2 = 2; ///< Link Cost for Link Quality 2.
|
||||
constexpr uint8_t kCostForLinkQuality3 = 1; ///< Link Cost for Link Quality 3.
|
||||
|
||||
/**
|
||||
* This function converts link quality to route cost.
|
||||
*
|
||||
* @param[in] aLinkQuality The link quality to covert.
|
||||
*
|
||||
* @returns The route cost corresponding to @p aLinkQuality.
|
||||
*
|
||||
*/
|
||||
uint8_t CostForLinkQuality(LinkQuality aLinkQuality);
|
||||
|
||||
/**
|
||||
* This function computes the link margin from a given noise floor and received signal strength.
|
||||
*
|
||||
|
||||
@@ -437,7 +437,7 @@ void MeshForwarder::EvaluateRoutingCost(uint16_t aDest, uint8_t &aBestCost, uint
|
||||
if (!Mle::IsActiveRouter(aDest))
|
||||
{
|
||||
// Assume best link between remote child server and its parent.
|
||||
curCost += 1;
|
||||
curCost += kCostForLinkQuality3;
|
||||
}
|
||||
|
||||
// Cost if the server is direct neighbor.
|
||||
@@ -451,7 +451,7 @@ void MeshForwarder::EvaluateRoutingCost(uint16_t aDest, uint8_t &aBestCost, uint
|
||||
{
|
||||
// Cost calculated only from Link Quality In as the parent only maintains
|
||||
// one-direction link info.
|
||||
cost = Mle::MleRouter::LinkQualityToCost(neighbor->GetLinkQualityIn());
|
||||
cost = CostForLinkQuality(neighbor->GetLinkQualityIn());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1038,32 +1038,6 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
uint8_t MleRouter::LinkQualityToCost(uint8_t aLinkQuality)
|
||||
{
|
||||
uint8_t rval;
|
||||
|
||||
switch (aLinkQuality)
|
||||
{
|
||||
case 1:
|
||||
rval = kLinkQuality1LinkCost;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
rval = kLinkQuality2LinkCost;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
rval = kLinkQuality3LinkCost;
|
||||
break;
|
||||
|
||||
default:
|
||||
rval = kLinkQuality0LinkCost;
|
||||
break;
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
uint8_t MleRouter::GetLinkCost(uint8_t aRouterId)
|
||||
{
|
||||
uint8_t rval = kMaxRouteCost;
|
||||
@@ -4031,7 +4005,7 @@ void MleRouter::FillConnectivityTlv(ConnectivityTlv &aTlv)
|
||||
break;
|
||||
}
|
||||
|
||||
cost += LinkQualityToCost(mParent.GetLinkQualityIn());
|
||||
cost += CostForLinkQuality(mParent.GetLinkQualityIn());
|
||||
break;
|
||||
|
||||
case kRoleRouter:
|
||||
|
||||
@@ -493,16 +493,6 @@ public:
|
||||
*/
|
||||
void ResetAdvertiseInterval(void);
|
||||
|
||||
/**
|
||||
* This static method converts link quality to route cost.
|
||||
*
|
||||
* @param[in] aLinkQuality The link quality.
|
||||
*
|
||||
* @returns The link cost corresponding to @p aLinkQuality.
|
||||
*
|
||||
*/
|
||||
static uint8_t LinkQualityToCost(uint8_t aLinkQuality);
|
||||
|
||||
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
/**
|
||||
* This method generates an MLE Time Synchronization message.
|
||||
|
||||
@@ -183,11 +183,6 @@ constexpr int8_t kParentPriorityMedium = 0; ///< Parent Priority Medium (d
|
||||
constexpr int8_t kParentPriorityLow = -1; ///< Parent Priority Low
|
||||
constexpr int8_t kParentPriorityUnspecified = -2; ///< Parent Priority Unspecified
|
||||
|
||||
constexpr uint8_t kLinkQuality3LinkCost = 1; ///< Link Cost for Link Quality 3
|
||||
constexpr uint8_t kLinkQuality2LinkCost = 2; ///< Link Cost for Link Quality 2
|
||||
constexpr uint8_t kLinkQuality1LinkCost = 4; ///< Link Cost for Link Quality 1
|
||||
constexpr uint8_t kLinkQuality0LinkCost = kMaxRouteCost; ///< Link Cost for Link Quality 0
|
||||
|
||||
/**
|
||||
* This type represents a Thread device role.
|
||||
*
|
||||
|
||||
@@ -352,7 +352,7 @@ uint8_t RouterTable::GetLinkCost(const Router &aRouter) const
|
||||
|
||||
VerifyOrExit(aRouter.GetRloc16() != Get<Mle::MleRouter>().GetRloc16() && aRouter.IsStateValid());
|
||||
|
||||
rval = Mle::MleRouter::LinkQualityToCost(aRouter.GetTwoWayLinkQuality());
|
||||
rval = CostForLinkQuality(aRouter.GetTwoWayLinkQuality());
|
||||
|
||||
exit:
|
||||
return rval;
|
||||
|
||||
Reference in New Issue
Block a user