Commit 103b516a authored by Lukasz Maciejonczyk's avatar Lukasz Maciejonczyk Committed by Kumar Gala
Browse files

net: openthread: add Link Metrics API



This commit implements the OpenThread APIs to configure Enhanced-ACK
Based Probing in radio for a specific Initiator. This is needed for
Link Metrics functionality.

Signed-off-by: default avatarLukasz Maciejonczyk <lukasz.maciejonczyk@nordicsemi.no>
parent f3f8af4c
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -170,6 +170,11 @@ enum ieee802154_config_type {
	 *  based on the radio time.
	 */
	IEEE802154_CONFIG_CSL_RX_TIME,

	/** Enable/disable or update Enhanced-ACK Based Probing in radio
	 *  for a specific Initiator.
	 */
	IEEE802154_CONFIG_ENH_ACK_PROBING,
};

/** IEEE802.15.4 driver configuration data. */
@@ -225,6 +230,15 @@ struct ieee802154_config {

		/** ``IEEE802154_CONFIG_CSL_RX_TIME`` */
		uint32_t csl_rx_time;

		/** ``IEEE802154_CONFIG_ENH_ACK_PROBING`` */
		struct {
			bool lqi : 1;
			bool link_margin : 1;
			bool rssi : 1;
			uint16_t short_addr;
			const uint8_t *ext_addr;
		} enh_ack;
	};
};

+3 −0
Original line number Diff line number Diff line
@@ -182,3 +182,6 @@ config OPENTHREAD_OTNS

config OPENTHREAD_FULL_LOGS
	bool "Enable OpenThread full logs"

config OPENTHREAD_MLE_LINK_METRICS_ENABLE
	bool "Enable Link Metrics support"
+11 −0
Original line number Diff line number Diff line
@@ -291,4 +291,15 @@
	CONFIG_OPENTHREAD_CSL_RECEIVE_TIME_AHEAD
#endif /* CONFIG_OPENTHREAD_CSL_RECEIVE_TIME_AHEAD */

/**
 * @def OPENTHREAD_CONFIG_MLE_LINK_METRICS_ENABLE
 *
 * Set to 1 to enable Link Metrics feature.
 *
 */
#ifdef CONFIG_OPENTHREAD_MLE_LINK_METRICS_ENABLE
#define OPENTHREAD_CONFIG_MLE_LINK_METRICS_ENABLE                              \
	CONFIG_OPENTHREAD_MLE_LINK_METRICS_ENABLE
#endif /* CONFIG_OPENTHREAD_MLE_LINK_METRICS_ENABLE */

#endif  /* OPENTHREAD_CORE_ZEPHYR_CONFIG_H_ */
+23 −0
Original line number Diff line number Diff line
@@ -1017,3 +1017,26 @@ uint8_t otPlatRadioGetCslAccuracy(otInstance *aInstance)

	return radio_api->get_csl_acc(radio_dev);
}

#if defined(CONFIG_OPENTHREAD_MLE_LINK_METRICS_ENABLE)
otError otPlatRadioConfigureEnhAckProbing(otInstance *aInstance, otLinkMetrics aLinkMetrics,
					  const otShortAddress aShortAddress,
					  const otExtAddress *aExtAddress)
{
	int result;

	ARG_UNUSED(aInstance);

	struct ieee802154_config config = {
		.enh_ack.lqi = aLinkMetrics.mLqi,
		.enh_ack.link_margin = aLinkMetrics.mLinkMargin,
		.enh_ack.rssi = aLinkMetrics.mRssi,
		.enh_ack.short_addr = aShortAddress,
		.enh_ack.ext_addr = aExtAddress->m8,
	};

	result = radio_api->configure(radio_dev, IEEE802154_CONFIG_ENH_ACK_PROBING, &config);

	return result ? OT_ERROR_FAILED : OT_ERROR_NONE;
}
#endif /* OPENTHREAD_CONFIG_MLE_LINK_METRICS_ENABLE */