Issue with hello_dect sample using DECT NR+ FW v1.1.0

Nordic TS,

I've installed and begin to experiment with the DECT NR+ v1.1.1.0 FW.  Initially, I'm noticing on obvious difference in the behavior of the dect_hello sample between v1.0.2 of the FW and v1.1.0.  With v1.0.2, the "hello" messages are sent at 5 sec intervals, as configured in the RX_PERIOD_S var in the Kconfig file.  However, when the same dect_hello sample is run using v1.1.0 of the FW, it seems to almost not wait at all (less than 1 ms) between transmissions.  It seems to wait very little time to try to receive a packet before moving on the next transmission.

My output from v1.1.0 + hello_dect is the following:

To observe this issue, pls do the following:

1. Load v1.0.2 of FW

2. Load dect_hello

3. Execute and observe the interdeparture time of 5 sec.

4.   Load v1.1.0 of FW

5.. Load dect_hello

6. Execute and observe the interdeparture time of less than 1  ms.

Pls let me know if there is anything I can do that can fix this.

Thanks!

Best,

Steven Gordon

Parents
  • Hello Steven, 

    I've been asked to follow up with the issue you are describing. 

    I can see the same result on my side. I programmed the hello_dect sample from NCS v2.9.1 and see the same issue with dect modem fw.

    mfw-nr+_nrf91x1_1.1.0-47.alpha

    *** Booting nRF Connect SDK v2.9.1-60d0d6c8d42d ***
    *** Using Zephyr OS v3.7.99-ca954a6216c9 ***
    [00:00:00.292,907] <inf> app: Dect NR+ PHY Hello sample started
    [00:00:00.479,370] <inf> app: Dect NR+ PHY initialized, device ID: 13309
    [00:00:00.479,431] <inf> app: Transmitting 0
    --- 1 messages dropped ---
    [00:00:00.492,797] <inf> app: Transmitting 2
    [00:00:00.499,328] <inf> app: Transmitting 3
    [00:00:00.505,859] <inf> app: Transmitting 4
    [00:00:00.512,390] <inf> app: Transmitting 5
    [00:00:00.518,920] <inf> app: Transmitting 6
    [00:00:00.525,451] <inf> app: Transmitting 7
    [00:00:00.531,982] <inf> app: Transmitting 8
    [00:00:00.538,360] <inf> app: Transmitting 9
    [00:00:00.538,635] <inf> app: Transmitting 10
    [00:00:00.538,909] <inf> app: Transmitting 11
    [00:00:00.539,154] <inf> app: Transmitting 12
    [00:00:00.539,428] <inf> app: Transmitting 13
    [00:00:00.539,672] <inf> app: Transmitting 14
    [00:00:00.539,947] <inf> app: Transmitting 15
    [00:00:00.540,191] <inf> app: Transmitting 16
    [00:00:00.540,466] <inf> app: Transmitting 17
    [00:00:00.540,710] <inf> app: Transmitting 18
    [00:00:00.540,985] <inf> app: Transmitting 19
    [00:00:00.541,259] <inf> app: Transmitting 20
    [00:00:00.541,503] <inf> app: Transmitting 21
    [00:00:00.541,778] <inf> app: Transmitting 22
    [00:00:00.542,022] <inf> app: Transmitting 23
    [00:00:00.542,297] <inf> app: Transmitting 24
    [00:00:00.542,541] <inf> app: Transmitting 25
    [00:00:00.542,816] <inf> app: Transmitting 26
    [00:00:00.543,670] <inf> app: Transmitting 27
    [00:00:00.544,250] <inf> app: Transmitting 28
    [00:00:00.544,830] <inf> app: Transmitting 29
    [00:00:00.544,891] <inf> app: Reached maximum number of transmissions (30)
    [00:00:00.544,921] <inf> app: Shutting down
    [00:00:00.566,162] <inf> app: Bye!

    mfw-nr+_nrf91x1_1.0.2

    *** Booting nRF Connect SDK v2.9.1-60d0d6c8d42d ***
    *** Using Zephyr OS v3.7.99-ca954a6216c9 ***
    [00:00:00.303,375] <inf> app: Dect NR+ PHY Hello sample started
    [00:00:00.667,541] <inf> app: Dect NR+ PHY initialized, device ID: 51521
    [00:00:00.667,602] <inf> app: Transmitting 0
    [00:00:05.673,980] <inf> app: Transmitting 1
    [00:00:10.680,297] <inf> app: Transmitting 2
    [00:00:15.686,614] <inf> app: Transmitting 3
    [00:00:20.692,932] <inf> app: Transmitting 4
    [00:00:25.699,249] <inf> app: Transmitting 5
    [00:00:30.705,566] <inf> app: Transmitting 6
    [00:00:35.711,883] <inf> app: Transmitting 7
    [00:00:40.718,200] <inf> app: Transmitting 8
    [00:00:45.724,517] <inf> app: Transmitting 9
    [00:00:50.730,834] <inf> app: Transmitting 10
    [00:00:55.737,152] <inf> app: Transmitting 11
    [00:01:00.743,469] <inf> app: Transmitting 12
    [00:01:05.749,786] <inf> app: Transmitting 13
    [00:01:10.756,103] <inf> app: Transmitting 14
    [00:01:15.762,420] <inf> app: Transmitting 15
    [00:01:20.768,737] <inf> app: Transmitting 16
    [00:01:25.775,054] <inf> app: Transmitting 17
    [00:01:30.781,372] <inf> app: Transmitting 18
    [00:01:35.787,689] <inf> app: Transmitting 19
    [00:01:40.794,006] <inf> app: Transmitting 20
    [00:01:45.800,323] <inf> app: Transmitting 21
    [00:01:50.806,640] <inf> app: Transmitting 22
    [00:01:55.812,957] <inf> app: Transmitting 23
    [00:02:00.819,274] <inf> app: Transmitting 24
    [00:02:05.825,592] <inf> app: Transmitting 25
    [00:02:10.831,909] <inf> app: Transmitting 26
    [00:02:15.838,226] <inf> app: Transmitting 27
    [00:02:20.844,573] <inf> app: Transmitting 28
    [00:02:25.850,860] <inf> app: Transmitting 29
    [00:02:25.850,952] <inf> app: Reached maximum number of transmissions (30)
    [00:02:25.850,982] <inf> app: Shutting down
    [00:02:25.867,919] <inf> app: Bye!

    I will forward to our DECT experts and get back to you.

    Kind regards,
    Øyvind

  • Hi Steven, our DECT team informed me that there has been some API changes and thus you must use nRF Connect SDK v3.0.0 with mfw-nr+_nrf91x1_1.1.0-47.alpha. 

    Can you please test and let me know how that works?

    Kind regards;
    Øyvind

  • Øyvind,

    I tried it and it does work.  Thanks for the insight.

    However, in the process of trying this, I discovered something I don't understand.  After upgrading to sdk 3.0.0 and toolchain 3.0.0, I used the existing dect_hello project (which was created with sdk 2.9.1) and created a new build configuration where I specified sdk 3.0.0 and toolchain 3.0.0.  This build consistently failed, ever after reinstalling all fo the components of the NRF Connect environment.  

    However, when I recopied the hello_dect sample using sdk 3.0.0 (rather than using the project created under sdk 2.9.1 with a new 3.0.0 build config), it did build and flash properly.  Can you tell me why this is?

    Thank you.

    Best,

    Steven Gordon

  • Hello, 

    Unfortunately there are no release notes of these changes. Our DECT NR+ developers state that the main difference is that the separate callback_apis have been replaced by a single event-based callback. Additionally, the startup process has changed due to the new operation mode configuration.

    Here is a quick diff between nrfxlib/nrf_modem/include/nrf_modem_dect_phy.h in both v2.9.1 and v3.0.0

    diff --git a/C:/ncs/v3.0.0/nrfxlib/nrf_modem/include/nrf_modem_dect_phy.h b/C:/ncs/v2.9.1/nrfxlib/nrf_modem/include/nrf_modem_dect_phy.h
    index 64ce153..50e8553 100644
    --- a/C:/ncs/v3.0.0/nrfxlib/nrf_modem/include/nrf_modem_dect_phy.h
    +++ b/C:/ncs/v2.9.1/nrfxlib/nrf_modem/include/nrf_modem_dect_phy.h
    @@ -42,21 +42,18 @@ extern "C" {
     /** @brief Minimum LBT measurement period in modem time units. */
     #define NRF_MODEM_DECT_LBT_PERIOD_MIN (2 * NRF_MODEM_DECT_SYMBOL_DURATION)
     
    -/** @brief Signal to noise ratio not measured. */
    -#define NRF_MODEM_DECT_PHY_SNR_NOT_MEASURED -32768
     /** @brief Symbol RSSI not measured. */
     #define NRF_MODEM_DECT_PHY_RSSI_NOT_MEASURED 0
    -/** @brief RSSI-2 not measured. */
    -#define NRF_MODEM_DECT_PHY_RSSI2_NOT_MEASURED -32768
     /** @brief Temperature not measured. */
     #define NRF_MODEM_DECT_PHY_TEMP_NOT_MEASURED 999
    -/** @brief Voltage not measured. */
    -#define NRF_MODEM_DECT_PHY_VOLTAGE_NOT_MEASURED 0
    +/** @brief RSSI-2 not measured. */
    +#define NRF_MODEM_DECT_PHY_RSSI2_NOT_MEASURED -32768
    +/** @brief Signal to noise ratio not measured. */
    +#define NRF_MODEM_DECT_PHY_SNR_NOT_MEASURED -32768
     
    -/** @brief Special handle to cancel all operations in @ref nrf_modem_dect_phy_cancel */
    -#define NRF_MODEM_DECT_PHY_HANDLE_CANCEL_ALL UINT32_MAX
     /** @brief Buffer status and Channel quality indicator not used. */
     #define NRF_MODEM_DECT_PHY_BS_CQI_NOT_USED 0
    +
     /** @brief Unspecified link identifier. */
     #define NRF_MODEM_DECT_PHY_LINK_UNSPECIFIED ((struct nrf_modem_dect_phy_link_id){ 0 })
     
    @@ -77,9 +74,9 @@ enum nrf_modem_dect_phy_err {
     	 */
     	NRF_MODEM_DECT_PHY_ERR_UNSUPPORTED_OP = 0x2,
     	/**
    -	 * @brief Operation not found.
    +	 * @brief Operation is not executing; it cannot be stopped.
     	 */
    -	NRF_MODEM_DECT_PHY_ERR_NOT_FOUND = 0x3,
    +	NRF_MODEM_DECT_PHY_ERR_NO_ONGOING_OP = 0x3,
     	/**
     	 * @brief Modem out of memory.
     	 */
    @@ -138,10 +135,6 @@ enum nrf_modem_dect_phy_err {
     	 * @brief Operation not executed because combined operation failed.
     	 */
     	NRF_MODEM_DECT_PHY_ERR_COMBINED_OP_FAILED = 0x100A,
    -	/**
    -	 * @brief Operation is not allowed in the current radio mode.
    -	 */
    -	NRF_MODEM_DECT_PHY_ERR_RADIO_MODE_CONFLICT = 0x100B,
     	/**
     	 * @brief Unsupported carrier.
     	 */
    @@ -166,10 +159,6 @@ enum nrf_modem_dect_phy_err {
     	 * @brief Invalid parameter.
     	 */
     	NRF_MODEM_DECT_PHY_ERR_INVALID_PARAMETER = 0x6005,
    -	/**
    -	 * @brief TX power limit exceeded.
    -	 */
    -	NRF_MODEM_DECT_PHY_ERR_TX_POWER_OVER_MAX_LIMIT = 0x6006,
     	/**
     	 * @brief Modem error.
     	 */
    @@ -188,6 +177,74 @@ enum nrf_modem_dect_phy_err {
     	NRF_MODEM_DECT_PHY_ERR_PROD_LOCK = 0x7003,
     };
     
    +/**
    + * @brief Modem PHY configuration.
    + *
    + * Includes radio state transition latencies and operating temperature limit.
    + */
    +struct nrf_modem_dect_phy_modem_cfg {
    +	/**
    +	 * @brief Maximum operating temperature, in degrees Celsius.
    +	 *
    +	 * The minimum resolution is 1 degree Celsius.
    +	 */
    +	int16_t temperature_limit;
    +	/**
    +	 * @brief Latency of radio state transitions, in modem time units.
    +	 */
    +	struct {
    +		/**
    +		 * @brief From Idle to RSSI RF sampling start.
    +		 */
    +		uint32_t idle_to_rssi;
    +		/**
    +		 * @brief From RF sampling of RSSI to Idle.
    +		 */
    +		uint32_t rssi_to_idle;
    +		/**
    +		 * @brief From Idle to RX RF sampling start.
    +		 */
    +		uint32_t idle_to_rx;
    +		/**
    +		 * @brief From RF sampling of RX to Idle.
    +		 */
    +		uint32_t rx_to_idle;
    +		/**
    +		 * @brief From RF sampling of RX with RSSI measurement to Idle.
    +		 */
    +		uint32_t rx_rssi_to_idle;
    +		/**
    +		 * @brief From RX stop request to RF sampling stop.
    +		 */
    +		uint32_t rx_stop_to_rf_off;
    +		/**
    +		 * @brief From RX with RSSI measurement stop request to RF sampling stop.
    +		 */
    +		uint32_t rx_rssi_stop_to_rf_off;
    +		/**
    +		 * @brief From Idle to TX RF sample transmission start.
    +		 */
    +		uint32_t idle_to_tx;
    +		/**
    +		 * @brief From Idle to TX with LBT monitoring RF sampling start.
    +		 */
    +		uint32_t idle_to_tx_with_lbt;
    +		/**
    +		 * @brief From TX RF sample transmission end (with or without LBT) to Idle.
    +		 */
    +		uint32_t tx_to_idle;
    +		/**
    +		 * @brief From Idle to TX with LBT monitoring RF sampling start in TX-RX operation.
    +		 */
    +		uint32_t idle_to_txrx_with_lbt;
    +		/**
    +		 * @brief From TX RF sample transmission end
    +		 *	  to RX RF sampling start in TX-RX operation.
    +		 */
    +		uint32_t txrx_tx_to_rx;
    +	} latency;
    +};
    +
     /**
      * @brief Modem PHY capabilities.
      */
    @@ -204,6 +261,10 @@ struct nrf_modem_dect_phy_capability {
     	 * @brief Capability variants.
     	 */
     	struct {
    +		/**
    +		 * @brief Power class.
    +		 */
    +		uint8_t power_class;
     		/**
     		 * @brief Supported reception capability of spatial stream transmissions.
     		 */
    @@ -212,6 +273,10 @@ struct nrf_modem_dect_phy_capability {
     		 * @brief Reception capability of TX diversity transmission.
     		 */
     		uint8_t rx_tx_diversity;
    +		/**
    +		 * @brief Receiver sensitivity in dB.
    +		 */
    +		int8_t rx_gain;
     		/**
     		 * @brief Maximum supported modulation and coding scheme for reception.
     		 */
    @@ -239,39 +304,6 @@ struct nrf_modem_dect_phy_capability {
     	} variant[];
     };
     
    -/**
    - * @brief Band information.
    - */
    -struct nrf_modem_dect_phy_band {
    -	/**
    -	 * @brief Band group index.
    -	 *
    -	 * Value 0 refers to RF frequencies operating near 2GHz and
    -	 * value 1 to RF frequencies near 1 GHz.
    -	 */
    -	uint8_t band_group_index;
    -	/**
    -	 * @brief Band number.
    -	 */
    -	uint8_t band_number;
    -	/**
    -	 * @brief Receiver sensitivity capability in dB.
    -	 */
    -	int8_t rx_gain;
    -	/**
    -	 * @brief Power class.
    -	 */
    -	uint8_t power_class;
    -	/**
    -	 * @brief Minimum carrier number.
    -	 */
    -	uint16_t min_carrier;
    -	/**
    -	 * @brief Maximum carrier number.
    -	 */
    -	uint16_t max_carrier;
    -};
    -
     /**
      * @brief Reception mode.
      */
    @@ -319,7 +351,7 @@ enum nrf_modem_dect_phy_rssi_interval {
     /**
      * @brief Physical header type 1.
      *
    - * See 6.2 in @ref DECT-SPEC "DECT-2020 NR Part 4".
    + * See 6.2 of [2].
      */
     struct nrf_modem_dect_phy_hdr_type_1 {
     	/**
    @@ -363,7 +395,7 @@ struct nrf_modem_dect_phy_hdr_type_1 {
     /**
      * @brief Feedback format types.
      *
    - * See 6.2.2 in @ref DECT-SPEC "DECT-2020 NR Part 4".
    + * See 6.2.2 of [2].
      */
     union nrf_modem_dect_phy_feedback {
     	struct {
    @@ -419,9 +451,10 @@ union nrf_modem_dect_phy_feedback {
     /**
      * @brief Physical header type 2.
      *
    - * See 6.2 in @ref DECT-SPEC "DECT-2020 NR Part 4".
    + * See 6.2 of [2].
      */
     struct nrf_modem_dect_phy_hdr_type_2 {
    +
     	/**
     	 * @brief Packet length in subslots or slots.
     	 */
    @@ -535,7 +568,8 @@ enum nrf_modem_dect_phy_hdr_status {
     /**
      * @brief Radio link identifier.
      *
    - * Identifies a radio link using fields that are available in Physical Layer Control Field.
    + * Radio link identifier identifies a radio link using fields that are available in Physical Layer
    + * Control Field.
      */
     struct nrf_modem_dect_phy_link_id {
     	/**
    @@ -560,7 +594,7 @@ struct nrf_modem_dect_phy_link_id {
      * element value for the PCC to be accepted. PCC rejection will stop PDC reception and return
      * processing to synchronization search.
      *
    - * See 6.2.1 in @ref DECT-SPEC "DECT-2020 NR Part 4".
    + *  See 6.2.1 in @ref DECT-SPEC "DECT-2020 NR Part 4".
      */
     struct nrf_modem_dect_phy_rx_filter {
     	/**
    @@ -592,6 +626,155 @@ struct nrf_modem_dect_phy_rx_filter {
     	uint16_t receiver_identity;
     };
     
    +/**
    + * @brief Reception parameters (PCC).
    + */
    +struct nrf_modem_dect_phy_rx_pcc_status {
    +	/**
    +	 * @brief Synchronization Training Field start time.
    +	 *
    +	 * Start time of the STF of this reception in modem time.
    +	 */
    +	uint64_t stf_start_time;
    +	/**
    +	 * @brief Physical layer control field type.
    +	 *
    +	 * Valid values are 0 and 1 corresponding types 1 and 2, respectively.
    +	 *
    +	 * See 6.2.1 in @ref DECT-SPEC "DECT-2020 NR Part 4".
    +	 */
    +	uint8_t phy_type;
    +	/**
    +	 * @brief Validity of the physical header.
    +	 */
    +	enum nrf_modem_dect_phy_hdr_status header_status;
    +	/**
    +	 * @brief Received signal strength indicator (RSSI-2).
    +	 *
    +	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    +	 *
    +	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t rssi_2;
    +	/**
    +	 * @brief Received signal to noise indicator (SNR).
    +	 *
    +	 * Values are dB values with 0.25 dB resolution (Q13.2).
    +	 *
    +	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t snr;
    +};
    +
    +/**
    + * @brief Reception parameters (PDC).
    + */
    +struct nrf_modem_dect_phy_rx_pdc_status {
    +	/**
    +	 * @brief Received signal strength indicator (RSSI-2).
    +	 *
    +	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    +	 *
    +	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t rssi_2;
    +	/**
    +	 * @brief Received signal to noise indicator (SNR).
    +	 *
    +	 * Values are dB values with 0.25 dB resolution (Q13.2).
    +	 *
    +	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t snr;
    +};
    +
    +/**
    + * @brief Reception parameters for PCC CRC failures.
    + */
    +struct nrf_modem_dect_phy_rx_pcc_crc_failure {
    +	/**
    +	 * @brief Synchronization Training Field start time.
    +	 *
    +	 * Start time of the STF of this reception in modem time.
    +	 */
    +	uint64_t stf_start_time;
    +	/**
    +	 * @brief Received signal strength indicator (RSSI-2).
    +	 *
    +	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    +	 *
    +	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t rssi_2;
    +	/**
    +	 * @brief Received signal to noise indicator (SNR).
    +	 *
    +	 * Values are dB values with 0.25 dB resolution (Q13.2).
    +	 *
    +	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t snr;
    +};
    +
    +/**
    + * @brief Reception parameters for PDC CRC failures.
    + */
    +struct nrf_modem_dect_phy_rx_pdc_crc_failure {
    +	/**
    +	 * @brief Received signal strength indicator (RSSI-2).
    +	 *
    +	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    +	 *
    +	 * If this value is not measured, it is reported as
    +	 * @ref NRF_MODEM_DECT_PHY_RSSI2_NOT_MEASURED.
    +	 *
    +	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t rssi_2;
    +	/**
    +	 * @brief Received signal to noise indicator (SNR).
    +	 *
    +	 * Values are dB values with 0.25 dB resolution (Q13.2).
    +	 *
    +	 * If this value is not measured, it is reported as
    +	 * @ref NRF_MODEM_DECT_PHY_SNR_NOT_MEASURED.
    +	 *
    +	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t snr;
    +};
    +
    +/**
    + * @brief RSSI measurement.
    + */
    +struct nrf_modem_dect_phy_rssi_meas {
    +	/**
    +	 * @brief Measurement start time, in modem time units.
    +	 */
    +	uint64_t meas_start_time;
    +	/**
    +	 * @brief Handle of the operation.
    +	 */
    +	uint32_t handle;
    +	/**
    +	 * @brief The absolute channel frequency number on which the measurements were made.
    +	 */
    +	uint16_t carrier;
    +	/**
    +	 * @brief Number of measurements in @ref meas.
    +	 */
    +	uint16_t meas_len;
    +	/**
    +	 * @brief RSSI measurements, in dBm.
    +	 *
    +	 * If a symbol is measured, its measurement is in the interval [-140, -1].
    +	 * If the measurement is saturated, the measured signal strength is reported
    +	 * as a positive integer. If a symbol is not measured, its value is reported
    +	 * as @ref NRF_MODEM_DECT_PHY_RSSI_NOT_MEASURED.
    +	 */
    +	int8_t *meas;
    +};
    +
     /**
      * @brief RX operation.
      */
    @@ -605,7 +788,7 @@ struct nrf_modem_dect_phy_rx_params {
     	 */
     	uint64_t start_time;
     	/**
    -	 * @brief Handle for the operation.
    +	 * @brief Handle for the RX operation.
     	 *
     	 * An application-defined handle for the operation.
     	 */
    @@ -643,7 +826,7 @@ struct nrf_modem_dect_phy_rx_params {
     	 * signal level.
     	 *
     	 * If the duration of the RX operation is long enough to receive multiple slots,
    -	 * this value will only be used for the first successful reception. Subsequent receptions
    +	 * `rssi_level` will only be used for the first successful reception. Subsequent receptions
     	 * during the same RX operation are initiated using a level that has been adjusted based on
     	 * the previous successful reception (slow AGC).
     	 */
    @@ -677,7 +860,7 @@ struct nrf_modem_dect_phy_tx_params {
     	 */
     	uint64_t start_time;
     	/**
    -	 * @brief Handle for the operation.
    +	 * @brief Handle for the TX operation.
     	 *
     	 * An application-defined handle for the operation.
     	 */
    @@ -725,20 +908,21 @@ struct nrf_modem_dect_phy_tx_params {
     	/**
     	 * @brief Listen before talk period in modem time units.
     	 *
    -	 * This is the required duration for the channel to be assessed as "free" or "available"
    -	 * before starting transmission. This duration is divided into as many as 64 separate
    -	 * integration periods, with each period being a multiple of the symbol duration.
    -	 * Each integration period is of equal length, up to a maximum of 7 symbols.
    -	 * The maximum number of integration periods is utilized. For instance, LBT durations of
    -	 * up to 64 symbols are divided into integration periods of one symbol each, and
    -	 * LBT durations of 65-128 symbols are divided into two-symbol integration periods.
    -	 * The LBT duration may be adjusted slightly to meet these requirements without exceeding
    -	 * the specified LBT length, for example, a duration of 71 symbols would be adjusted to
    -	 * 70 symbols (35 periods of 2 symbols each).
    -	 *
    -	 * If the channel is initially found to be "busy," the modem will cease further measurement
    -	 * of the channel and will report an error instead. It is then the responsibility of the
    -	 * higher layer to reschedule the transmission.
    +	 * The period that the channel needs to be measured "free" or "possible" before initiating
    +	 * transmission.
    +	 *
    +	 * The period is split into up to 64 individual integration periods, each period
    +	 * being an integer multiple of a symbol duration (2880 modem time units). All integration
    +	 * periods have the same length, maximum 7 symbols. The maximum number of integration
    +	 * periods is used. For example, LBT periods of up to 64 symbols will be split into one
    +	 * symbol long integration periods, and LBT periods of 65-128 symbols will be split into two
    +	 * symbol long integration periods. If necessary the LBT period may be shortened slightly
    +	 * to fit these constraints while still not exceeding the given LBT length, e.g.
    +	 * a period of 71 symbols will effectively be 70 symbols long (35 periods of 2 symbols).
    +	 *
    +	 * In case the channel is initially detected "busy" the modem will not continue measuring
    +	 * the channel. Instead the modem will report an error. Rescheduling a transmission is left
    +	 * up to the higher layer.
     	 *
     	 * If set to zero, LBT is not used. Otherwise the acceptable value range is
     	 * [@ref NRF_MODEM_DECT_LBT_PERIOD_MIN, @ref NRF_MODEM_DECT_LBT_PERIOD_MAX].
    @@ -798,7 +982,7 @@ struct nrf_modem_dect_phy_rssi_params {
     	 */
     	uint64_t start_time;
     	/**
    -	 * @brief Handle for the operation.
    +	 * @brief Handle for the RSSI operation.
     	 *
     	 * An application-defined handle for the operation.
     	 */
    @@ -823,251 +1007,64 @@ struct nrf_modem_dect_phy_rssi_params {
     };
     
     /**
    - * @brief Radio modes.
    - *
    - * Different radio modes yield different performance and power consumption.
    + * @brief Link configuration parameters.
      */
    -enum nrf_modem_dect_phy_radio_mode {
    +struct nrf_modem_dect_phy_link_config_params {
     	/**
    -	 * @brief Low latency.
    +	 * @brief Primary link.
     	 *
    -	 * This mode has the lowest latency, the best RX/TX switching performance,
    -	 * and the highest power consumption. This is the only mode that supports
    -	 * starting operations immediately, that is, operations whose configured
    -	 * start time is zero.
    +	 * The modem tracks the frequency of the primary link for Automatic Frequency Control
    +	 * purposes. This frequency is propagated down the tree, that is, the Radio Device uses
    +	 * this frequency for all its radio operations except those directed to secondary links.
     	 */
    -	NRF_MODEM_DECT_PHY_RADIO_MODE_LOW_LATENCY,
    +	struct nrf_modem_dect_phy_link_id primary_link_id;
     	/**
    -	 * @brief Low latency with standby.
    -	 *
    -	 * This mode has the same RX/TX switching performance as the low latency mode,
    -	 * but higher operation start-up latency due to radio entering standby mode
    -	 * when possible. Power consumption is thus lower compared to the low latency mode.
    +	 * @brief Number of secondary links.
     	 */
    -	NRF_MODEM_DECT_PHY_RADIO_MODE_LOW_LATENCY_WITH_STANDBY,
    +	uint8_t secondary_link_count;
     	/**
    -	 * @brief Listen-before-talk disabled, with standby.
    +	 * @brief Secondary links.
     	 *
    -	 * This mode has the lowest power consumption, due the to modem entering
    -	 * standby mode when possible and not using Listen-Before-Talk, at the cost
    -	 * of higher start-up latency and worse RX/TX switching performance compared
    -	 * to the other radio modes.
    -	 */
    -	NRF_MODEM_DECT_PHY_RADIO_MODE_NON_LBT_WITH_STANDBY,
    -	/**
    -	 * @brief Number of radio modes available.
    +	 * The modem tracks the frequency of secondary links for Automatic Frequency Control
    +	 * purposes. When communicating with a secondary link the modem compensates the frequency
    +	 * difference between the secondary link and the primary link.
     	 */
    -	NRF_MODEM_DECT_PHY_RADIO_MODE_COUNT,
    +	struct nrf_modem_dect_phy_link_id secondary_link_ids[];
     };
     
     /**
    - * @brief Radio configuration operation.
    + * @brief DECT PHY callbacks.
    + *
    + * Callbacks for user operations and incoming data.
    + *
    + * @note
    + * All callbacks are executed in ISR.
      */
    -struct nrf_modem_dect_phy_radio_config_params {
    +struct nrf_modem_dect_phy_callbacks {
     	/**
    -	 * @brief Operation start time as modem time.
    +	 * @brief DECT PHY initialization callback.
     	 *
    -	 * If zero, the operation will be executed immediately.
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
    -	 * This kind of scheduling can only be done when the modem is idle.
    -	 */
    -	uint64_t start_time;
    -	/**
    -	 * @brief Handle for the operation.
    +	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    +	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    +	 * - @ref NRF_MODEM_DECT_PHY_ERR_TEMP_HIGH
    +	 * - @ref NRF_MODEM_DECT_PHY_ERR_PROD_LOCK
     	 *
    -	 * An application-defined handle for the operation.
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param temp Temperature in degrees Celsius.
    +	 * @param err Operation result.
    +	 * @param[in] cfg Modem configuration.
     	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Desired radio mode.
    -	 */
    -	enum nrf_modem_dect_phy_radio_mode radio_mode;
    -};
    +	void (*init)(const uint64_t *time, int16_t temp, enum nrf_modem_dect_phy_err err,
    +		     const struct nrf_modem_dect_phy_modem_cfg *cfg);
     
    -/**
    - * @brief DECT PHY latency information.
    - *
    - * Includes radio state transition and configuration latencies.
    - */
    -struct nrf_modem_dect_phy_latency_info {
     	/**
    -	 * @brief Radio mode specific latencies.
    +	 * @brief Callback to indicate the completion of RX, TX and RSSI measurement operations.
     	 *
    -	 * These latencies must be used according to the currently active radio mode
    -	 * and operation type (immediate or scheduled).
    -	 */
    -	struct {
    -		/**
    -		 * @brief Scheduled operation transition delay.
    -		 *
    -		 * The delay between transitioning from one scheduled operation to the next.
    -		 *
    -		 * The start time of a scheduled operation must account for the start time
    -		 * of the previous operation, plus its duration, plus the operation
    -		 * transition delay in the current radio mode.
    -		 */
    -		uint32_t scheduled_operation_transition;
    -		/**
    -		 * @brief Additional delay for scheduled operations.
    -		 *
    -		 * Used together with the values in @ref operation to calculate the total
    -		 * operation start latency for scheduled operations.
    -		 */
    -		uint32_t scheduled_operation_startup;
    -		/**
    -		 * @brief Delay in transitioning from one radio mode to another.
    -		 */
    -		uint32_t radio_mode_transition[NRF_MODEM_DECT_PHY_RADIO_MODE_COUNT];
    -	} radio_mode[NRF_MODEM_DECT_PHY_RADIO_MODE_COUNT];
    -
    -	/**
    -	 * @brief Duration of radio state transitions.
    -	 *
    -	 * Immediate operations can use these values directly.
    -	 * Scheduled operations must account for this value plus the value
    -	 * of @ref scheduled_operation_startup.
    -	 */
    -	struct {
    -		struct {
    -			/**
    -			 * @brief Receive operation start latency (IDLE to RF ON).
    -			 */
    -			uint32_t idle_to_active;
    -			/**
    -			 * @brief RSSI operation end latency (RF OFF to IDLE).
    -			 */
    -			uint32_t active_to_idle_rssi;
    -			/**
    -			 * @brief RX operation end latency (RF OFF to IDLE).
    -			 */
    -			uint32_t active_to_idle_rx;
    -			/**
    -			 * @brief RX with RSSI operation end latency (RF OFF to IDLE).
    -			 */
    -			uint32_t active_to_idle_rx_rssi;
    -			/**
    -			 * @brief Operation stop latency (STOP_REQ to RF OFF).
    -			 */
    -			uint32_t stop_to_rf_off;
    -		} receive;
    -		struct {
    -			/**
    -			 * @brief Transmit operation start latency (IDLE to RF ON).
    -			 */
    -			uint32_t idle_to_active;
    -			/**
    -			 * @brief Transmit operation end latency (RF OFF to IDLE).
    -			 */
    -			uint32_t active_to_idle;
    -		} transmit;
    -	} operation;
    -
    -	/**
    -	 * @brief Duration of DECT PHY stack operations.
    -	 */
    -	struct {
    -		/**
    -		 * @brief Duration of DECT PHY stack initialization.
    -		 *
    -		 * Duration of @ref nrf_modem_dect_phy_init().
    -		 */
    -		uint32_t initialization;
    -		/**
    -		 * @brief Duration of DECT PHY stack deinitialization.
    -		 *
    -		 * Duration of @ref nrf_modem_dect_phy_deinit().
    -		 */
    -		uint32_t deinitialization;
    -		/**
    -		 * @brief Duration of DECT PHY stack configuration.
    -		 *
    -		 * Duration of @ref nrf_modem_dect_phy_configure().
    -		 */
    -		uint32_t configuration;
    -		/**
    -		 * @brief Duration of DECT PHY stack activation.
    -		 *
    -		 * Duration of @ref nrf_modem_dect_phy_activate().
    -		 */
    -		uint32_t activation;
    -		/**
    -		 * @brief Duration of DECT PHY stack deactivation.
    -		 *
    -		 * Duration of @ref nrf_modem_dect_phy_deactivate().
    -		 */
    -		uint32_t deactivation;
    -	} stack;
    -};
    -
    -/**
    - * @brief Link configuration parameters.
    - */
    -struct nrf_modem_dect_phy_link_config_params {
    -	/**
    -	 * @brief Primary link.
    -	 *
    -	 * The modem tracks the frequency of the primary link for Automatic Frequency Control
    -	 * purposes. This frequency is propagated down the tree, that is, the Radio Device uses
    -	 * this frequency for all its radio operations except those directed to secondary links.
    -	 */
    -	struct nrf_modem_dect_phy_link_id primary_link_id;
    -	/**
    -	 * @brief Number of secondary links.
    -	 */
    -	uint8_t secondary_link_count;
    -	/**
    -	 * @brief Secondary links.
    -	 *
    -	 * The modem tracks the frequency of secondary links for Automatic Frequency Control
    -	 * purposes. When communicating with a secondary link the modem compensates the frequency
    -	 * difference between the secondary link and the primary link.
    -	 */
    -	struct nrf_modem_dect_phy_link_id secondary_link_ids[];
    -};
    -
    -/** Events */
    -
    -/**
    - * @brief Initialization event.
    - */
    -struct nrf_modem_dect_phy_init_event {
    -	/**
    -	 * @brief Operation result.
    -	 *
    -	 * Can be one of the following values:
    -	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_TEMP_HIGH
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_PROD_LOCK
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief Temperature in degrees Celsius.
    -	 */
    -	int16_t temp;
    -	/**
    -	 * @brief Voltage in millivolts.
    -	 */
    -	uint16_t voltage;
    -	/**
    -	 * @brief Operating temperature limit, in degrees Celsius.
    -	 */
    -	uint16_t temperature_limit;
    -};
    -
    -/**
    - * @brief Operation complete event.
    - */
    -struct nrf_modem_dect_phy_op_complete_event {
    -	/**
    -	 * @brief Handle of the operation.
    -	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Operation result.
    -	 *
    -	 * Can be one of the following values:
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
     	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_LBT_CHANNEL_BUSY
    @@ -1092,574 +1089,163 @@ struct nrf_modem_dect_phy_op_complete_event {
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_INVALID_DURATION
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_INVALID_PARAMETER
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_TEMP_HIGH
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief Temperature in degrees Celsius.
    -	 */
    -	int16_t temp;
    -	/**
    -	 * @brief Voltage in millivolts.
    -	 */
    -	uint16_t voltage;
    -};
    -
    -/**
    - * @brief RSSI measurement event.
    - */
    -struct nrf_modem_dect_phy_rssi_event {
    -	/**
    -	 * @brief Handle of the operation.
    -	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Measurement start time, in modem time units.
    -	 */
    -	uint64_t meas_start_time;
    -	/**
    -	 * @brief The absolute channel frequency number on which the measurements were made.
    -	 */
    -	uint16_t carrier;
    -	/**
    -	 * @brief Number of measurements in @ref meas.
    -	 */
    -	uint16_t meas_len;
    -	/**
    -	 * @brief RSSI measurements, in dBm.
     	 *
    -	 * If a symbol is measured, its measurement is in the interval [-140, -1].
    -	 * If the measurement is saturated, the measured signal strength is reported
    -	 * as a positive integer. If a symbol is not measured, its value is reported
    -	 * as @ref NRF_MODEM_DECT_PHY_RSSI_NOT_MEASURED.
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param temp Temperature in degrees Celsius.
    +	 * @param err Operation result.
    +	 * @param handle Operation handle.
     	 */
    -	int8_t *meas;
    -};
    +	void (*op_complete)(const uint64_t *time, int16_t temperature,
    +			    enum nrf_modem_dect_phy_err err, uint32_t handle);
     
    -struct nrf_modem_dect_phy_cancel_event {
    -	/**
    -	 * @brief Handle of the operation.
    -	 */
    -	uint32_t handle;
     	/**
    -	 * @brief Operation result.
    +	 * @brief Callback to receive RSSI measurements.
     	 *
    -	 * Can be one of the following values:
    +	 * Callback function to receive the RSSI measurements requested
    +	 * with @ref nrf_modem_dect_phy_rssi or @ref nrf_modem_dect_phy_rx.
     	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_UNSUPPORTED_OP
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_FOUND
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param[in] meas RSSI measurement.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    +	void (*rssi)(const uint64_t *time, const struct nrf_modem_dect_phy_rssi_meas *meas);
     
    -/**
    - * @brief PCC reception event.
    - */
    -struct nrf_modem_dect_phy_pcc_event {
    -	/**
    -	 * @brief Synchronization Training Field start time.
    -	 *
    -	 * Start time of the STF of this reception in modem time.
    -	 */
    -	uint64_t stf_start_time;
    -	/**
    -	 * @brief Handle for the operation.
    -	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Validity of the physical header.
    -	 */
    -	enum nrf_modem_dect_phy_hdr_status header_status;
    -	/**
    -	 * @brief Physical layer control field type.
    -	 *
    -	 * Valid values are 0 and 1 corresponding types 1 and 2, respectively.
    -	 *
    -	 * See 6.2.1 in @ref DECT-SPEC "DECT-2020 NR Part 4".
    -	 */
    -	uint8_t phy_type;
     	/**
    -	 * @brief PHY header.
    -	 */
    -	union nrf_modem_dect_phy_hdr hdr;
    -	/**
    -	 * @brief Received signal strength indicator (RSSI-2).
    -	 *
    -	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    -	 *
    -	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t rssi_2;
    -	/**
    -	 * @brief Received signal to noise indicator (SNR).
    +	 * @brief Callback for @ref nrf_modem_dect_phy_rx_stop.
     	 *
    -	 * Values are dB values with 0.25 dB resolution (Q13.2).
    -	 *
    -	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t snr;
    -	/**
    -	 * @brief Transaction ID.
    -	 *
    -	 * Used to map PCC data with corresponding PDC data.
    -	 */
    -	uint16_t transaction_id;
    -};
    +	 * When an RX operation is stopped, the operation complete callback will be called
    +	 * once the operation has fully stopped. That is, it is possible that the
    +	 * operation hasn't been fully stopped at the time this callback is called.
     
    -/**
    - * @brief PCC reception CRC failure event.
    - */
    -struct nrf_modem_dect_phy_pcc_crc_failure_event {
    -	/**
    -	 * @brief Synchronization Training Field start time.
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
    -	 * Start time of the STF of this reception in modem time.
    -	 */
    -	uint64_t stf_start_time;
    -	/**
    -	 * @brief Handle for the operation.
    -	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Received signal strength indicator (RSSI-2).
    -	 *
    -	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    -	 *
    -	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t rssi_2;
    -	/**
    -	 * @brief Received signal to noise indicator (SNR).
    -	 *
    -	 * Values are dB values with 0.25 dB resolution (Q13.2).
    -	 *
    -	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t snr;
    -	/**
    -	 * @brief Transaction ID.
    +	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    +	 * - @ref NRF_MODEM_DECT_PHY_ERR_UNSUPPORTED_OP
    +	 * - @ref NRF_MODEM_DECT_PHY_ERR_NO_ONGOING_OP
    +	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
     	 *
    -	 * Used to map PCC data with corresponding PDC data.
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param err Operation result.
    +	 * @param handle Operation handle.
     	 */
    -	uint16_t transaction_id;
    -};
    +	void (*rx_stop)(const uint64_t *time, enum nrf_modem_dect_phy_err err, uint32_t handle);
     
    -/**
    - * @brief PDC reception event.
    - */
    -struct nrf_modem_dect_phy_pdc_event {
     	/**
    -	 * @brief Handle for the operation.
    -	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Received signal strength indicator (RSSI-2).
    -	 *
    -	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    -	 *
    -	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t rssi_2;
    -	/**
    -	 * @brief Received signal to noise indicator (SNR).
    -	 *
    -	 * Values are dB values with 0.25 dB resolution (Q13.2).
    -	 *
    -	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t snr;
    -	/**
    -	 * @brief Transaction ID.
    +	 * @brief Callback for control channel reception.
     	 *
    -	 * Used to map PCC data with corresponding PDC data.
    -	 */
    -	uint16_t transaction_id;
    -	/**
    -	 * @brief Received data payload.
    -	 */
    -	void *data;
    -	/**
    -	 * @brief Data payload length, in bytes.
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param status Reception data.
    +	 * @param[in] hdr Physical layer control header.
     	 */
    -	size_t len;
    -};
    +	void (*pcc)(const uint64_t *time, const struct nrf_modem_dect_phy_rx_pcc_status *status,
    +		    const union nrf_modem_dect_phy_hdr *hdr);
     
    -/**
    - * @brief PDC CRC failure event.
    - */
    -struct nrf_modem_dect_phy_pdc_crc_failure_event {
    -	/**
    -	 * @brief Handle for the operation.
    -	 */
    -	uint32_t handle;
     	/**
    -	 * @brief Received signal strength indicator (RSSI-2).
    -	 *
    -	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    -	 *
    -	 * If this value is not measured, it is reported as
    -	 * @ref NRF_MODEM_DECT_PHY_RSSI2_NOT_MEASURED.
    +	 * @brief Callback for CRC failures on the physical control channel.
     	 *
    -	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param[in] crc_failure CRC failure information.
     	 */
    -	int16_t rssi_2;
    -	/**
    -	 * @brief Received signal to noise indicator (SNR).
    -	 *
    -	 * Values are dB values with 0.25 dB resolution (Q13.2).
    -	 *
    -	 * If this value is not measured, it is reported as
    -	 * @ref NRF_MODEM_DECT_PHY_SNR_NOT_MEASURED.
    -	 *
    -	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t snr;
    -	/**
    -	 * @brief Transaction ID.
    -	 *
    -	 * Used to map PCC data with corresponding PDC data.
    -	 */
    -	uint16_t transaction_id;
    -};
    +	void (*pcc_crc_err)(const uint64_t *time,
    +			    const struct nrf_modem_dect_phy_rx_pcc_crc_failure *crc_failure);
     
    -/**
    - * @brief DECT PHY stack configuration event.
    - */
    -struct nrf_modem_dect_phy_configure_event {
     	/**
    -	 * @brief Operation result.
    -	 *
    -	 * Can be one of the following values:
    +	 * @brief Callback for data channel reception.
     	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_INVALID_PARAMETER
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param status Reception data.
    +	 * @param[in] data Data received.
    +	 * @param len Size of received data.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief Temperature in degrees Celsius.
    -	 */
    -	int16_t temp;
    -	/**
    -	 * @brief Voltage in millivolts.
    -	 */
    -	uint16_t voltage;
    -};
    +	void (*pdc)(const uint64_t *time, const struct nrf_modem_dect_phy_rx_pdc_status *status,
    +		    const void *data, uint32_t len);
     
    -/**
    - * @brief Radio configuration event.
    - */
    -struct nrf_modem_dect_phy_radio_config_event {
     	/**
    -	 * @brief Handle of the operation.
    -	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Operation result.
    -	 *
    -	 * Can be one of the following values:
    +	 * @brief Callback for CRC failures on the physical data channel.
     	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param[in] crc_failure CRC failure information.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    +	void (*pdc_crc_err)(const uint64_t *time,
    +			    const struct nrf_modem_dect_phy_rx_pdc_crc_failure *crc_failure);
     
    -struct nrf_modem_dect_phy_link_config_event {
     	/**
    -	 * @brief Operation result.
    +	 * @brief Callback for @ref nrf_modem_dect_phy_link_config.
     	 *
    -	 * Can be one of the following values:
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
     	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_NO_MEMORY
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_INVALID_PARAMETER
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    -
    -/**
    - * @brief Time get event.
    - */
    -struct nrf_modem_dect_phy_time_get_event {
    -	/**
    -	 * @brief Operation result.
    -	 *
    -	 * Can be one of the following values:
     	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param err Operation result.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    +	void (*link_config)(const uint64_t *time, enum nrf_modem_dect_phy_err err);
     
    -/**
    - * @brief Capability get event.
    - */
    -struct nrf_modem_dect_phy_capability_get_event {
     	/**
    -	 * @brief Operation result.
    +	 * @brief Callback for @ref nrf_modem_dect_phy_time_get.
     	 *
    -	 * Can be one of the following values:
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
     	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief PHY capability.
    -	 */
    -	struct nrf_modem_dect_phy_capability *capability;
    -};
    -
    -/**
    - * @brief Band information event.
    - */
    -struct nrf_modem_dect_phy_band_get_event {
    -	/**
    -	 * @brief Operation result.
     	 *
    -	 * Can be one of the following values:
    -	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief Supported bands as a bitmap.
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param err Operation result.
     	 */
    -	uint32_t supported_bands;
    -	/**
    -	 * @brief Number of elements in @c band.
    -	 */
    -	uint32_t band_count;
    -	/**
    -	 * @brief Band information.
    -	 */
    -	struct nrf_modem_dect_phy_band *band;
    -};
    +	void (*time_get)(const uint64_t *time, enum nrf_modem_dect_phy_err err);
     
    -/**
    - * @brief STF cover sequence control event.
    - */
    -struct nrf_modem_dect_phy_stf_control_event {
     	/**
    -	 * @brief Operation result.
    +	 * @brief Callback for @ref nrf_modem_dect_phy_capability_get.
     	 *
    -	 * Can be one of the following values:
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
     	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    -
    -/**
    - * @brief Deinitialization event.
    - */
    -struct nrf_modem_dect_phy_deinit_event {
    -	/**
    -	 * @brief Operation result.
     	 *
    -	 * Can be one of the following values:
    -	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param err Operation result.
    +	 * @param[in] capability PHY capabilities.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    +	void (*capability_get)(const uint64_t *time, enum nrf_modem_dect_phy_err err,
    +			       const struct nrf_modem_dect_phy_capability *capability);
     
    -/**
    - * @brief Activation event.
    - */
    -struct nrf_modem_dect_phy_activate_event {
     	/**
    -	 * @brief Operation result.
    +	 * @brief Callback for @ref nrf_modem_dect_phy_stf_cover_seq_control.
     	 *
    -	 * Can be one of the following values:
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
     	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief Temperature in degrees Celsius.
    -	 */
    -	int16_t temp;
    -	/**
    -	 * @brief Voltage in millivolts.
    -	 */
    -	uint16_t voltage;
    -};
    -
    -/**
    - * @brief Deactivation event.
    - */
    -struct nrf_modem_dect_phy_deactivate_event {
    -	/**
    -	 * @brief Operation result.
    -	 *
    -	 * Can be one of the following values:
     	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param err Operation result.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    +	void (*stf_cover_seq_control)(const uint64_t *time, enum nrf_modem_dect_phy_err err);
     
    -/**
    - * @brief Latency event.
    - */
    -struct nrf_modem_dect_phy_latency_info_event {
     	/**
    -	 * @brief Operation result.
    +	 * @brief Callback for @ref nrf_modem_dect_phy_deinit.
     	 *
    -	 * Can be one of the following values:
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
     	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    +	 *
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param err Operation result.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief PHY latency info.
    -	 */
    -	struct nrf_modem_dect_phy_latency_info *latency_info;
    -};
    -
    -enum nrf_modem_dect_phy_event_id {
    -	/**
    -	 * @brief Event to indicate the completion of the DECT PHY stack initialization.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_INIT,
    -	/**
    -	 * @brief Event to indicate the completion of the DECT PHY stack deinitialization.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_DEINIT,
    -	/**
    -	 * @brief Event to indicate the completion of the DECT PHY stack configuration.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_CONFIGURE,
    -	/**
    -	 * @brief Event to indicate the completion of radio mode configuration.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_RADIO_CONFIG,
    -	/**
    -	 * @brief Event to indicate the completion of the DECT PHY stack activation.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_ACTIVATE,
    -	/**
    -	 * @brief Event to indicate the completion of the DECT PHY stack deactivation.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_DEACTIVATE,
    -	/**
    -	 * @brief Event to indicate the completion of RX, TX and RSSI measurement operations.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_COMPLETED,
    -	/**
    -	 * @brief Event to indicate the cancellation of an operation.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_CANCELED,
    -	/**
    -	 * @brief Event carrying RSSI measurements.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_RSSI,
    -	/**
    -	 * @brief Event for control channel reception.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_PCC,
    -	/**
    -	 * @brief Event for CRC failures on the physical control channel.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_PCC_ERROR,
    -	/**
    -	 * @brief Event for data channel reception.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_PDC,
    -	/**
    -	 * @brief Event for CRC failures on the physical data channel.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_PDC_ERROR,
    -	/**
    -	 * @brief Event carrying modem time.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_TIME,
    -	/**
    -	 * @brief Event carrying capabilities.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_CAPABILITY,
    -	/**
    -	 * @brief Event carrying band information.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_BANDS,
    -	/**
    -	 * @brief Event carrying latency information.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_LATENCY,
    -	/**
    -	 * @brief Event to indicate the completion of link configuration.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_LINK_CONFIG,
    -	/**
    -	 * @brief Event to indicate the completion of STF configuration.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_STF_CONFIG,
    +	void (*deinit)(const uint64_t *time, enum nrf_modem_dect_phy_err err);
     };
     
     /**
    - * @brief DECT PHY event.
    + * @brief Configuration for DECT PHY interface.
      */
    -struct nrf_modem_dect_phy_event {
    -	/**
    -	 * @brief Event ID.
    -	 */
    -	enum nrf_modem_dect_phy_event_id id;
    -	/**
    -	 * @brief Modem time, in modem time units.
    -	 */
    -	uint64_t time;
    -	/**
    -	 * @brief Event data.
    -	 */
    -	union {
    -		struct nrf_modem_dect_phy_init_event init;
    -		struct nrf_modem_dect_phy_deinit_event deinit;
    -		struct nrf_modem_dect_phy_activate_event activate;
    -		struct nrf_modem_dect_phy_deactivate_event deactivate;
    -		struct nrf_modem_dect_phy_configure_event configure;
    -		struct nrf_modem_dect_phy_radio_config_event radio_config;
    -		struct nrf_modem_dect_phy_op_complete_event op_complete;
    -		struct nrf_modem_dect_phy_rssi_event rssi;
    -		struct nrf_modem_dect_phy_cancel_event cancel;
    -		struct nrf_modem_dect_phy_pcc_event pcc;
    -		struct nrf_modem_dect_phy_pcc_crc_failure_event pcc_crc_err;
    -		struct nrf_modem_dect_phy_pdc_event pdc;
    -		struct nrf_modem_dect_phy_pdc_crc_failure_event pdc_crc_err;
    -		struct nrf_modem_dect_phy_time_get_event time_get;
    -		struct nrf_modem_dect_phy_capability_get_event capability_get;
    -		struct nrf_modem_dect_phy_band_get_event band_get;
    -		struct nrf_modem_dect_phy_latency_info_event latency_get;
    -		struct nrf_modem_dect_phy_stf_control_event stf_cover_seq_control;
    -		struct nrf_modem_dect_phy_link_config_event link_config;
    -	};
    -};
    -
    -/**
    - * @brief DECT PHY configuration parameters.
    - */
    -struct nrf_modem_dect_phy_config_params {
    -	/**
    -	 * @brief Band group index.
    -	 *
    -	 * Allowed values: 0 or 1.
    -	 * Value 0 refers to RF frequencies operating near 2GHz and
    -	 * value 1 to RF frequencies near 1 GHz.
    -	 */
    -	uint8_t band_group_index;
    -	/**
    -	 * @brief Number of HARQ processes.
    -	 *
    -	 * The HARQ reception buffer is divided equally between processes.
    -	 * Supported values: 1, 2, 4, 8.
    -	 */
    -	uint8_t harq_rx_process_count;
    +struct nrf_modem_dect_phy_init_params {
     	/**
     	 * @brief HARQ RX buffer expiry time, in microseconds.
     	 *
    @@ -1669,119 +1255,113 @@ struct nrf_modem_dect_phy_config_params {
     	 * Maximum supported value: 5000000.
     	 */
     	uint32_t harq_rx_expiry_time_us;
    +	struct {
    +		/**
    +		 * @brief Number of HARQ processes.
    +		 *
    +		 * The HARQ reception buffer is divided equally between processes.
    +		 * Supported values: 1, 2, 4, 8.
    +		 */
    +		uint8_t harq_rx_process_count : 4;
    +		/**
    +		 * @brief Reserved for future use.
    +		 */
    +		uint8_t reserved : 3;
    +		/**
    +		 * @brief Band 4 support.
    +		 *
    +		 * 1 - Enables band 4 operation.
    +		 * 0 - Disables band 4 operation.
    +		 *
    +		 * Band 4 support is only available for nRF9151 devices.
    +		 *
    +		 * @warning
    +		 * When operating on band 4, carriers outside the [525, 551] range
    +		 * shall not be used as they interfere with other radio devices,
    +		 * including LTE devices, car keys, and others.
    +		 *
    +		 * @note
    +		 * Band 4 support may only be toggled when de-initialized.
    +		 * Toggling band 4 support when already initialized is not supported.
    +		 */
    +		uint8_t band4_support : 1;
    +	};
     };
     
     /**
    - * @brief Application handler prototype for PHY events.
    - */
    -typedef void (*nrf_modem_dect_phy_event_handler_t)(const struct nrf_modem_dect_phy_event *event);
    -
    -/**
    - * @brief Set the application event handler for PHY events.
    + * @brief Set application callbacks for PHY operations.
      *
    - * The application must set the handler for events coming the DECT PHY before attempting
    - * other operations.
    + * The application must set the callbacks for PHY operations before attempting other operations.
    + * That includes PHY initialization itself, that is, nrf_modem_dect_phy_init().
      *
    - * @param handler Event handler.
    + * @param cb Application callbacks.
      *
      * @return 0 On success.
    - * @retval -NRF_EFAULT @p handler is @c NULL.
    + * @retval -NRF_EFAULT @p cb is @c NULL.
    + * @retval -NRF_EINVAL One of the fields in @p cb is @c NULL.
      */
    -int nrf_modem_dect_phy_event_handler_set(nrf_modem_dect_phy_event_handler_t handler);
    +int nrf_modem_dect_phy_callback_set(const struct nrf_modem_dect_phy_callbacks *cb);
     
     /**
      * @brief Retrieve DECT PHY capabilities.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_CAPABILITY event.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.capability_get callback.
      *
      * @return 0 On success.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    + * @retval -NRF_EFAULT Callback configuration is invalid.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_capability_get(void);
     
     /**
    - * @brief Initialize the DECT PHY interface.
    + * @brief Initialize DECT PHY interface.
      *
    - * Initialize the DECT PHY interface and associated hardware resources.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.init callback.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_INIT event.
    + * @param[in] params  Configuration parameters.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
    -int nrf_modem_dect_phy_init(void);
    +int nrf_modem_dect_phy_init(const struct nrf_modem_dect_phy_init_params *params);
     
     /**
    - * @brief Deinitialize the DECT PHY interface.
    + * @brief De-initialize DECT PHY interface.
      *
    - * Deinitialize the DECT PHY interface and all associated hardware resources.
    - * This implicitly cancels all operations, both executing or scheduled for execution.
    + * Cancel all operations and de-initialize the PHY.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_DEINIT event.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.deinit callback.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    + * @retval -NRF_EFAULT Callback configuration is invalid.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_deinit(void);
     
    -/**
    - * @brief Activate the DECT PHY software stack in given radio mode.
    - *
    - * Before each activation, the DECT PHY software stack must be configured using
    - * @ref nrf_modem_dect_phy_configure.
    - *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_ACTIVATE event.
    - *
    - * @param mode Desired radio mode.
    - *
    - * @retval 0           Request was sent to modem.
    - * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    - * @retval -NRF_ENOMEM Not enough shared memory for this request.
    - */
    -int nrf_modem_dect_phy_activate(enum nrf_modem_dect_phy_radio_mode mode);
    -
    -/**
    - * @brief Deactivate the DECT PHY software stack.
    - *
    - * Deactivation implicitly cancels all operations, both executing or scheduled for execution.
    - *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_DEACTIVATE event.
    - *
    - * @retval 0           Request was sent to modem.
    - * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    - * @retval -NRF_ENOMEM Not enough shared memory for this request.
    - */
    -int nrf_modem_dect_phy_deactivate(void);
    -
     /**
      * @brief Schedule a reception.
      *
    - * Schedule a reception with given parameters.
    + * Schedule a continuous, semicontinuous or single shot reception at a given time, with parameters.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event.
    + * Incoming data received on the physical layer control and data channels is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.pcc and @ref nrf_modem_dect_phy_callbacks.pdc callbacks.
      *
    - * Data received on the physical layer control and data channels is sent to the application
    - * in the @ref NRF_MODEM_DECT_PHY_EVT_PCC and @ref NRF_MODEM_DECT_PHY_EVT_PDC events respectively.
    + * When the operation has completed, either successfully or unsuccessfully, the result is sent
    + * to the @ref nrf_modem_dect_phy_callbacks.op_complete callback, with a `handle`
    + * parameter equal to the `handle` specified in @p params.
      *
      * @param[in] params  Operation parameters.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_rx(const struct nrf_modem_dect_phy_rx_params *params);
    @@ -1791,14 +1371,15 @@ int nrf_modem_dect_phy_rx(const struct nrf_modem_dect_phy_rx_params *params);
      *
      * Schedule a data transmission with given parameters.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event.
    + * When the operation has completed, either successfully or unsuccessfully, the result is sent
    + * to the @ref nrf_modem_dect_phy_callbacks.op_complete callback, with a `handle`
    + * parameter equal to the `handle` specified in @p params.
      *
      * @param[in] params  Operation parameters.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_tx(const struct nrf_modem_dect_phy_tx_params *params);
    @@ -1818,14 +1399,15 @@ int nrf_modem_dect_phy_tx(const struct nrf_modem_dect_phy_tx_params *params);
      * received. In that case modem will inject ACK or NACK feedback into the Transmission feedback
      * field based on the PDC reception result once the reception is complete.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event.
    + * When the operation has completed, either successfully or unsuccessfully, the result is sent
    + * to the @ref nrf_modem_dect_phy_callbacks.op_complete callback, with a `handle`
    + * parameter equal to the `handle` specified in @p params.
      *
      * @param[in] params  Operation parameters.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_tx_harq(const struct nrf_modem_dect_phy_tx_params *params);
    @@ -1840,14 +1422,19 @@ int nrf_modem_dect_phy_tx_harq(const struct nrf_modem_dect_phy_tx_params *params
      * The RX operation scheduling is relative to the end of the TX operation and must include
      * the guard time.
      *
    - * These operations are performed asynchronously.
    - * Completion of each of operation is indicated by one @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event.
    + * When the TX operation has completed, either successfully or unsuccessfully, the result is sent
    + * to the @ref nrf_modem_dect_phy_callbacks.op_complete callback, with a `handle`
    + * parameter equal to the `handle` specified in @p params.tx.
    + *
    + * When the RX operation has completed, either successfully or unsuccessfully, the result is sent
    + * to the @ref nrf_modem_dect_phy_callbacks.op_complete callback, with a `handle`
    + * parameter equal to the `handle` specified in @p params.rx.
      *
      * @param[in] params  Operation parameters.
      *
      * @retval 0           Request was sent to the modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_tx_rx(const struct nrf_modem_dect_phy_tx_rx_params *params);
    @@ -1856,135 +1443,69 @@ int nrf_modem_dect_phy_tx_rx(const struct nrf_modem_dect_phy_tx_rx_params *param
      * @brief Schedule an RSSI measurement operation.
      *
      * Schedule an RSSI measurement operation with given parameters.
    + * The measurements are sent to the @ref nrf_modem_dect_phy_callbacks.rssi callback.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event.
    - * The measurements are sent in the @ref NRF_MODEM_DECT_PHY_EVT_RSSI event.
    + * When the operation has completed, either successfully or unsuccessfully, the result is sent
    + * to the @ref nrf_modem_dect_phy_callbacks.op_complete callback, with a `handle`
    + * parameter equal to the `handle` specified in @p params.
      *
      * @param[in] params  Operation parameters.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_rssi(const struct nrf_modem_dect_phy_rssi_params *params);
     
     /**
    - * @brief Cancel an operation.
    - *
    - * Cancel an ongoing operation or an operation scheduled to be executed.
    - *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_CANCELED event.
    - *
    - * When an operation is canceled, a @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event is sent to the
    - * application. If the operation is canceled while it is executing, the event reports that the
    - * operation completed successfully. If the operation was scheduled but not yet executing, the
    - * @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event will indicate the status as
    - * @ref NRF_MODEM_DECT_PHY_ERR_OP_CANCELED.
    - *
    - * @param handle  Handle of the operation to be canceled,
    - *		  or @ref NRF_MODEM_DECT_PHY_HANDLE_CANCEL_ALL to cancel all operations.
    - *
    - * @retval 0           Request was sent to modem.
    - * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    - * @retval -NRF_ENOMEM Not enough shared memory for this request.
    - */
    -int nrf_modem_dect_phy_cancel(uint32_t handle);
    -
    -/**
    - * @brief Configure the PHY stack.
    + * @brief Stop an ongoing reception.
      *
    - * This operation can only be performed when the DECT PHY is deactivated.
    + * Stop an ongoing reception before its duration has ended; this can take more or less
    + * time depending on the internal state of the operation at the time the request is received.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_CONFIGURE event.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.rx_stop callback.
      *
    - * @param[in] params PHY configuration parameters.
    - *
    - * @retval 0           Request was sent to modem.
    - * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    - * @retval -NRF_ENOMEM Not enough shared memory for this request.
    - */
    -int nrf_modem_dect_phy_configure(const struct nrf_modem_dect_phy_config_params *params);
    -
    -/**
    - * @brief Configure radio mode.
    - *
    - * Configure the radio for the desired operation latency, RX/TX performance and power consumption.
    - *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_RADIO_CONFIG event.
    + * @note
    + * Only RX operations can be stopped.
      *
    - * @param[in] params Radio mode configuration parameters.
    + * @param handle  Handle of the operation to be stopped.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
    -int nrf_modem_dect_phy_radio_config(const struct nrf_modem_dect_phy_radio_config_params *params);
    +int nrf_modem_dect_phy_rx_stop(uint32_t handle);
     
     /**
      * @brief Configure links.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_LINK_CONFIG event.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.link_config callback.
      *
      * @param[in] params Link configuration parameters.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      * @retval -NRF_ENOSYS Functionality not implemented.
      */
     int nrf_modem_dect_phy_link_config(const struct nrf_modem_dect_phy_link_config_params *params);
     
     /**
    - * @brief Retrieve band information.
    - *
    - * This operation can only be performed when the DECT PHY is deactivated.
    - *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_BANDS event.
    - *
    - * @retval 0           Request was sent to modem.
    - * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    - * @retval -NRF_ENOMEM Not enough shared memory for this request.
    - */
    -int nrf_modem_dect_phy_band_get(void);
    -
    -/**
    - * @brief Retrieve latency information.
    - *
    - * This operation can only be performed when the DECT PHY is deactivated.
    - *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_LATENCY event.
    - *
    - * @retval 0           Request was sent to modem.
    - * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    - * @retval -NRF_ENOMEM Not enough shared memory for this request.
    - */
    -int nrf_modem_dect_phy_latency_get(void);
    -
    -/**
    - * @brief Retrieve modem time.
    + * @brief Query modem time.
      *
      * Retrieve modem time, in modem time units.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_TIME event.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.time_get callback.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    + * @retval -NRF_EFAULT Callback configuration is invalid.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_time_get(void);
    @@ -1993,21 +1514,20 @@ int nrf_modem_dect_phy_time_get(void);
      * @brief STF cover sequence control.
      *
      * Enable or disable STF cover sequence.
    - * The default, applied at each initialization, is enabled.
      *
      * @note
      * This API is intended for certification purposes only.
      * It should not be used for normal operation.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_STF_CONFIG event.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.stf_cover_seq_control callback.
      *
      * @param rx_enable Enable STF cover sequence for reception.
      * @param tx_enable Enable STF cover sequence for transmission.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    + * @retval -NRF_EFAULT Callback configuration is invalid.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_stf_cover_seq_control(bool rx_enable, bool tx_enable);
    

    Note that there are most likely more changes in other files, but this gives you an indication of the changes. 

    Kind regards,
    Øyvind

Reply
  • Hello, 

    Unfortunately there are no release notes of these changes. Our DECT NR+ developers state that the main difference is that the separate callback_apis have been replaced by a single event-based callback. Additionally, the startup process has changed due to the new operation mode configuration.

    Here is a quick diff between nrfxlib/nrf_modem/include/nrf_modem_dect_phy.h in both v2.9.1 and v3.0.0

    diff --git a/C:/ncs/v3.0.0/nrfxlib/nrf_modem/include/nrf_modem_dect_phy.h b/C:/ncs/v2.9.1/nrfxlib/nrf_modem/include/nrf_modem_dect_phy.h
    index 64ce153..50e8553 100644
    --- a/C:/ncs/v3.0.0/nrfxlib/nrf_modem/include/nrf_modem_dect_phy.h
    +++ b/C:/ncs/v2.9.1/nrfxlib/nrf_modem/include/nrf_modem_dect_phy.h
    @@ -42,21 +42,18 @@ extern "C" {
     /** @brief Minimum LBT measurement period in modem time units. */
     #define NRF_MODEM_DECT_LBT_PERIOD_MIN (2 * NRF_MODEM_DECT_SYMBOL_DURATION)
     
    -/** @brief Signal to noise ratio not measured. */
    -#define NRF_MODEM_DECT_PHY_SNR_NOT_MEASURED -32768
     /** @brief Symbol RSSI not measured. */
     #define NRF_MODEM_DECT_PHY_RSSI_NOT_MEASURED 0
    -/** @brief RSSI-2 not measured. */
    -#define NRF_MODEM_DECT_PHY_RSSI2_NOT_MEASURED -32768
     /** @brief Temperature not measured. */
     #define NRF_MODEM_DECT_PHY_TEMP_NOT_MEASURED 999
    -/** @brief Voltage not measured. */
    -#define NRF_MODEM_DECT_PHY_VOLTAGE_NOT_MEASURED 0
    +/** @brief RSSI-2 not measured. */
    +#define NRF_MODEM_DECT_PHY_RSSI2_NOT_MEASURED -32768
    +/** @brief Signal to noise ratio not measured. */
    +#define NRF_MODEM_DECT_PHY_SNR_NOT_MEASURED -32768
     
    -/** @brief Special handle to cancel all operations in @ref nrf_modem_dect_phy_cancel */
    -#define NRF_MODEM_DECT_PHY_HANDLE_CANCEL_ALL UINT32_MAX
     /** @brief Buffer status and Channel quality indicator not used. */
     #define NRF_MODEM_DECT_PHY_BS_CQI_NOT_USED 0
    +
     /** @brief Unspecified link identifier. */
     #define NRF_MODEM_DECT_PHY_LINK_UNSPECIFIED ((struct nrf_modem_dect_phy_link_id){ 0 })
     
    @@ -77,9 +74,9 @@ enum nrf_modem_dect_phy_err {
     	 */
     	NRF_MODEM_DECT_PHY_ERR_UNSUPPORTED_OP = 0x2,
     	/**
    -	 * @brief Operation not found.
    +	 * @brief Operation is not executing; it cannot be stopped.
     	 */
    -	NRF_MODEM_DECT_PHY_ERR_NOT_FOUND = 0x3,
    +	NRF_MODEM_DECT_PHY_ERR_NO_ONGOING_OP = 0x3,
     	/**
     	 * @brief Modem out of memory.
     	 */
    @@ -138,10 +135,6 @@ enum nrf_modem_dect_phy_err {
     	 * @brief Operation not executed because combined operation failed.
     	 */
     	NRF_MODEM_DECT_PHY_ERR_COMBINED_OP_FAILED = 0x100A,
    -	/**
    -	 * @brief Operation is not allowed in the current radio mode.
    -	 */
    -	NRF_MODEM_DECT_PHY_ERR_RADIO_MODE_CONFLICT = 0x100B,
     	/**
     	 * @brief Unsupported carrier.
     	 */
    @@ -166,10 +159,6 @@ enum nrf_modem_dect_phy_err {
     	 * @brief Invalid parameter.
     	 */
     	NRF_MODEM_DECT_PHY_ERR_INVALID_PARAMETER = 0x6005,
    -	/**
    -	 * @brief TX power limit exceeded.
    -	 */
    -	NRF_MODEM_DECT_PHY_ERR_TX_POWER_OVER_MAX_LIMIT = 0x6006,
     	/**
     	 * @brief Modem error.
     	 */
    @@ -188,6 +177,74 @@ enum nrf_modem_dect_phy_err {
     	NRF_MODEM_DECT_PHY_ERR_PROD_LOCK = 0x7003,
     };
     
    +/**
    + * @brief Modem PHY configuration.
    + *
    + * Includes radio state transition latencies and operating temperature limit.
    + */
    +struct nrf_modem_dect_phy_modem_cfg {
    +	/**
    +	 * @brief Maximum operating temperature, in degrees Celsius.
    +	 *
    +	 * The minimum resolution is 1 degree Celsius.
    +	 */
    +	int16_t temperature_limit;
    +	/**
    +	 * @brief Latency of radio state transitions, in modem time units.
    +	 */
    +	struct {
    +		/**
    +		 * @brief From Idle to RSSI RF sampling start.
    +		 */
    +		uint32_t idle_to_rssi;
    +		/**
    +		 * @brief From RF sampling of RSSI to Idle.
    +		 */
    +		uint32_t rssi_to_idle;
    +		/**
    +		 * @brief From Idle to RX RF sampling start.
    +		 */
    +		uint32_t idle_to_rx;
    +		/**
    +		 * @brief From RF sampling of RX to Idle.
    +		 */
    +		uint32_t rx_to_idle;
    +		/**
    +		 * @brief From RF sampling of RX with RSSI measurement to Idle.
    +		 */
    +		uint32_t rx_rssi_to_idle;
    +		/**
    +		 * @brief From RX stop request to RF sampling stop.
    +		 */
    +		uint32_t rx_stop_to_rf_off;
    +		/**
    +		 * @brief From RX with RSSI measurement stop request to RF sampling stop.
    +		 */
    +		uint32_t rx_rssi_stop_to_rf_off;
    +		/**
    +		 * @brief From Idle to TX RF sample transmission start.
    +		 */
    +		uint32_t idle_to_tx;
    +		/**
    +		 * @brief From Idle to TX with LBT monitoring RF sampling start.
    +		 */
    +		uint32_t idle_to_tx_with_lbt;
    +		/**
    +		 * @brief From TX RF sample transmission end (with or without LBT) to Idle.
    +		 */
    +		uint32_t tx_to_idle;
    +		/**
    +		 * @brief From Idle to TX with LBT monitoring RF sampling start in TX-RX operation.
    +		 */
    +		uint32_t idle_to_txrx_with_lbt;
    +		/**
    +		 * @brief From TX RF sample transmission end
    +		 *	  to RX RF sampling start in TX-RX operation.
    +		 */
    +		uint32_t txrx_tx_to_rx;
    +	} latency;
    +};
    +
     /**
      * @brief Modem PHY capabilities.
      */
    @@ -204,6 +261,10 @@ struct nrf_modem_dect_phy_capability {
     	 * @brief Capability variants.
     	 */
     	struct {
    +		/**
    +		 * @brief Power class.
    +		 */
    +		uint8_t power_class;
     		/**
     		 * @brief Supported reception capability of spatial stream transmissions.
     		 */
    @@ -212,6 +273,10 @@ struct nrf_modem_dect_phy_capability {
     		 * @brief Reception capability of TX diversity transmission.
     		 */
     		uint8_t rx_tx_diversity;
    +		/**
    +		 * @brief Receiver sensitivity in dB.
    +		 */
    +		int8_t rx_gain;
     		/**
     		 * @brief Maximum supported modulation and coding scheme for reception.
     		 */
    @@ -239,39 +304,6 @@ struct nrf_modem_dect_phy_capability {
     	} variant[];
     };
     
    -/**
    - * @brief Band information.
    - */
    -struct nrf_modem_dect_phy_band {
    -	/**
    -	 * @brief Band group index.
    -	 *
    -	 * Value 0 refers to RF frequencies operating near 2GHz and
    -	 * value 1 to RF frequencies near 1 GHz.
    -	 */
    -	uint8_t band_group_index;
    -	/**
    -	 * @brief Band number.
    -	 */
    -	uint8_t band_number;
    -	/**
    -	 * @brief Receiver sensitivity capability in dB.
    -	 */
    -	int8_t rx_gain;
    -	/**
    -	 * @brief Power class.
    -	 */
    -	uint8_t power_class;
    -	/**
    -	 * @brief Minimum carrier number.
    -	 */
    -	uint16_t min_carrier;
    -	/**
    -	 * @brief Maximum carrier number.
    -	 */
    -	uint16_t max_carrier;
    -};
    -
     /**
      * @brief Reception mode.
      */
    @@ -319,7 +351,7 @@ enum nrf_modem_dect_phy_rssi_interval {
     /**
      * @brief Physical header type 1.
      *
    - * See 6.2 in @ref DECT-SPEC "DECT-2020 NR Part 4".
    + * See 6.2 of [2].
      */
     struct nrf_modem_dect_phy_hdr_type_1 {
     	/**
    @@ -363,7 +395,7 @@ struct nrf_modem_dect_phy_hdr_type_1 {
     /**
      * @brief Feedback format types.
      *
    - * See 6.2.2 in @ref DECT-SPEC "DECT-2020 NR Part 4".
    + * See 6.2.2 of [2].
      */
     union nrf_modem_dect_phy_feedback {
     	struct {
    @@ -419,9 +451,10 @@ union nrf_modem_dect_phy_feedback {
     /**
      * @brief Physical header type 2.
      *
    - * See 6.2 in @ref DECT-SPEC "DECT-2020 NR Part 4".
    + * See 6.2 of [2].
      */
     struct nrf_modem_dect_phy_hdr_type_2 {
    +
     	/**
     	 * @brief Packet length in subslots or slots.
     	 */
    @@ -535,7 +568,8 @@ enum nrf_modem_dect_phy_hdr_status {
     /**
      * @brief Radio link identifier.
      *
    - * Identifies a radio link using fields that are available in Physical Layer Control Field.
    + * Radio link identifier identifies a radio link using fields that are available in Physical Layer
    + * Control Field.
      */
     struct nrf_modem_dect_phy_link_id {
     	/**
    @@ -560,7 +594,7 @@ struct nrf_modem_dect_phy_link_id {
      * element value for the PCC to be accepted. PCC rejection will stop PDC reception and return
      * processing to synchronization search.
      *
    - * See 6.2.1 in @ref DECT-SPEC "DECT-2020 NR Part 4".
    + *  See 6.2.1 in @ref DECT-SPEC "DECT-2020 NR Part 4".
      */
     struct nrf_modem_dect_phy_rx_filter {
     	/**
    @@ -592,6 +626,155 @@ struct nrf_modem_dect_phy_rx_filter {
     	uint16_t receiver_identity;
     };
     
    +/**
    + * @brief Reception parameters (PCC).
    + */
    +struct nrf_modem_dect_phy_rx_pcc_status {
    +	/**
    +	 * @brief Synchronization Training Field start time.
    +	 *
    +	 * Start time of the STF of this reception in modem time.
    +	 */
    +	uint64_t stf_start_time;
    +	/**
    +	 * @brief Physical layer control field type.
    +	 *
    +	 * Valid values are 0 and 1 corresponding types 1 and 2, respectively.
    +	 *
    +	 * See 6.2.1 in @ref DECT-SPEC "DECT-2020 NR Part 4".
    +	 */
    +	uint8_t phy_type;
    +	/**
    +	 * @brief Validity of the physical header.
    +	 */
    +	enum nrf_modem_dect_phy_hdr_status header_status;
    +	/**
    +	 * @brief Received signal strength indicator (RSSI-2).
    +	 *
    +	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    +	 *
    +	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t rssi_2;
    +	/**
    +	 * @brief Received signal to noise indicator (SNR).
    +	 *
    +	 * Values are dB values with 0.25 dB resolution (Q13.2).
    +	 *
    +	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t snr;
    +};
    +
    +/**
    + * @brief Reception parameters (PDC).
    + */
    +struct nrf_modem_dect_phy_rx_pdc_status {
    +	/**
    +	 * @brief Received signal strength indicator (RSSI-2).
    +	 *
    +	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    +	 *
    +	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t rssi_2;
    +	/**
    +	 * @brief Received signal to noise indicator (SNR).
    +	 *
    +	 * Values are dB values with 0.25 dB resolution (Q13.2).
    +	 *
    +	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t snr;
    +};
    +
    +/**
    + * @brief Reception parameters for PCC CRC failures.
    + */
    +struct nrf_modem_dect_phy_rx_pcc_crc_failure {
    +	/**
    +	 * @brief Synchronization Training Field start time.
    +	 *
    +	 * Start time of the STF of this reception in modem time.
    +	 */
    +	uint64_t stf_start_time;
    +	/**
    +	 * @brief Received signal strength indicator (RSSI-2).
    +	 *
    +	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    +	 *
    +	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t rssi_2;
    +	/**
    +	 * @brief Received signal to noise indicator (SNR).
    +	 *
    +	 * Values are dB values with 0.25 dB resolution (Q13.2).
    +	 *
    +	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t snr;
    +};
    +
    +/**
    + * @brief Reception parameters for PDC CRC failures.
    + */
    +struct nrf_modem_dect_phy_rx_pdc_crc_failure {
    +	/**
    +	 * @brief Received signal strength indicator (RSSI-2).
    +	 *
    +	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    +	 *
    +	 * If this value is not measured, it is reported as
    +	 * @ref NRF_MODEM_DECT_PHY_RSSI2_NOT_MEASURED.
    +	 *
    +	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t rssi_2;
    +	/**
    +	 * @brief Received signal to noise indicator (SNR).
    +	 *
    +	 * Values are dB values with 0.25 dB resolution (Q13.2).
    +	 *
    +	 * If this value is not measured, it is reported as
    +	 * @ref NRF_MODEM_DECT_PHY_SNR_NOT_MEASURED.
    +	 *
    +	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 */
    +	int16_t snr;
    +};
    +
    +/**
    + * @brief RSSI measurement.
    + */
    +struct nrf_modem_dect_phy_rssi_meas {
    +	/**
    +	 * @brief Measurement start time, in modem time units.
    +	 */
    +	uint64_t meas_start_time;
    +	/**
    +	 * @brief Handle of the operation.
    +	 */
    +	uint32_t handle;
    +	/**
    +	 * @brief The absolute channel frequency number on which the measurements were made.
    +	 */
    +	uint16_t carrier;
    +	/**
    +	 * @brief Number of measurements in @ref meas.
    +	 */
    +	uint16_t meas_len;
    +	/**
    +	 * @brief RSSI measurements, in dBm.
    +	 *
    +	 * If a symbol is measured, its measurement is in the interval [-140, -1].
    +	 * If the measurement is saturated, the measured signal strength is reported
    +	 * as a positive integer. If a symbol is not measured, its value is reported
    +	 * as @ref NRF_MODEM_DECT_PHY_RSSI_NOT_MEASURED.
    +	 */
    +	int8_t *meas;
    +};
    +
     /**
      * @brief RX operation.
      */
    @@ -605,7 +788,7 @@ struct nrf_modem_dect_phy_rx_params {
     	 */
     	uint64_t start_time;
     	/**
    -	 * @brief Handle for the operation.
    +	 * @brief Handle for the RX operation.
     	 *
     	 * An application-defined handle for the operation.
     	 */
    @@ -643,7 +826,7 @@ struct nrf_modem_dect_phy_rx_params {
     	 * signal level.
     	 *
     	 * If the duration of the RX operation is long enough to receive multiple slots,
    -	 * this value will only be used for the first successful reception. Subsequent receptions
    +	 * `rssi_level` will only be used for the first successful reception. Subsequent receptions
     	 * during the same RX operation are initiated using a level that has been adjusted based on
     	 * the previous successful reception (slow AGC).
     	 */
    @@ -677,7 +860,7 @@ struct nrf_modem_dect_phy_tx_params {
     	 */
     	uint64_t start_time;
     	/**
    -	 * @brief Handle for the operation.
    +	 * @brief Handle for the TX operation.
     	 *
     	 * An application-defined handle for the operation.
     	 */
    @@ -725,20 +908,21 @@ struct nrf_modem_dect_phy_tx_params {
     	/**
     	 * @brief Listen before talk period in modem time units.
     	 *
    -	 * This is the required duration for the channel to be assessed as "free" or "available"
    -	 * before starting transmission. This duration is divided into as many as 64 separate
    -	 * integration periods, with each period being a multiple of the symbol duration.
    -	 * Each integration period is of equal length, up to a maximum of 7 symbols.
    -	 * The maximum number of integration periods is utilized. For instance, LBT durations of
    -	 * up to 64 symbols are divided into integration periods of one symbol each, and
    -	 * LBT durations of 65-128 symbols are divided into two-symbol integration periods.
    -	 * The LBT duration may be adjusted slightly to meet these requirements without exceeding
    -	 * the specified LBT length, for example, a duration of 71 symbols would be adjusted to
    -	 * 70 symbols (35 periods of 2 symbols each).
    -	 *
    -	 * If the channel is initially found to be "busy," the modem will cease further measurement
    -	 * of the channel and will report an error instead. It is then the responsibility of the
    -	 * higher layer to reschedule the transmission.
    +	 * The period that the channel needs to be measured "free" or "possible" before initiating
    +	 * transmission.
    +	 *
    +	 * The period is split into up to 64 individual integration periods, each period
    +	 * being an integer multiple of a symbol duration (2880 modem time units). All integration
    +	 * periods have the same length, maximum 7 symbols. The maximum number of integration
    +	 * periods is used. For example, LBT periods of up to 64 symbols will be split into one
    +	 * symbol long integration periods, and LBT periods of 65-128 symbols will be split into two
    +	 * symbol long integration periods. If necessary the LBT period may be shortened slightly
    +	 * to fit these constraints while still not exceeding the given LBT length, e.g.
    +	 * a period of 71 symbols will effectively be 70 symbols long (35 periods of 2 symbols).
    +	 *
    +	 * In case the channel is initially detected "busy" the modem will not continue measuring
    +	 * the channel. Instead the modem will report an error. Rescheduling a transmission is left
    +	 * up to the higher layer.
     	 *
     	 * If set to zero, LBT is not used. Otherwise the acceptable value range is
     	 * [@ref NRF_MODEM_DECT_LBT_PERIOD_MIN, @ref NRF_MODEM_DECT_LBT_PERIOD_MAX].
    @@ -798,7 +982,7 @@ struct nrf_modem_dect_phy_rssi_params {
     	 */
     	uint64_t start_time;
     	/**
    -	 * @brief Handle for the operation.
    +	 * @brief Handle for the RSSI operation.
     	 *
     	 * An application-defined handle for the operation.
     	 */
    @@ -823,251 +1007,64 @@ struct nrf_modem_dect_phy_rssi_params {
     };
     
     /**
    - * @brief Radio modes.
    - *
    - * Different radio modes yield different performance and power consumption.
    + * @brief Link configuration parameters.
      */
    -enum nrf_modem_dect_phy_radio_mode {
    +struct nrf_modem_dect_phy_link_config_params {
     	/**
    -	 * @brief Low latency.
    +	 * @brief Primary link.
     	 *
    -	 * This mode has the lowest latency, the best RX/TX switching performance,
    -	 * and the highest power consumption. This is the only mode that supports
    -	 * starting operations immediately, that is, operations whose configured
    -	 * start time is zero.
    +	 * The modem tracks the frequency of the primary link for Automatic Frequency Control
    +	 * purposes. This frequency is propagated down the tree, that is, the Radio Device uses
    +	 * this frequency for all its radio operations except those directed to secondary links.
     	 */
    -	NRF_MODEM_DECT_PHY_RADIO_MODE_LOW_LATENCY,
    +	struct nrf_modem_dect_phy_link_id primary_link_id;
     	/**
    -	 * @brief Low latency with standby.
    -	 *
    -	 * This mode has the same RX/TX switching performance as the low latency mode,
    -	 * but higher operation start-up latency due to radio entering standby mode
    -	 * when possible. Power consumption is thus lower compared to the low latency mode.
    +	 * @brief Number of secondary links.
     	 */
    -	NRF_MODEM_DECT_PHY_RADIO_MODE_LOW_LATENCY_WITH_STANDBY,
    +	uint8_t secondary_link_count;
     	/**
    -	 * @brief Listen-before-talk disabled, with standby.
    +	 * @brief Secondary links.
     	 *
    -	 * This mode has the lowest power consumption, due the to modem entering
    -	 * standby mode when possible and not using Listen-Before-Talk, at the cost
    -	 * of higher start-up latency and worse RX/TX switching performance compared
    -	 * to the other radio modes.
    -	 */
    -	NRF_MODEM_DECT_PHY_RADIO_MODE_NON_LBT_WITH_STANDBY,
    -	/**
    -	 * @brief Number of radio modes available.
    +	 * The modem tracks the frequency of secondary links for Automatic Frequency Control
    +	 * purposes. When communicating with a secondary link the modem compensates the frequency
    +	 * difference between the secondary link and the primary link.
     	 */
    -	NRF_MODEM_DECT_PHY_RADIO_MODE_COUNT,
    +	struct nrf_modem_dect_phy_link_id secondary_link_ids[];
     };
     
     /**
    - * @brief Radio configuration operation.
    + * @brief DECT PHY callbacks.
    + *
    + * Callbacks for user operations and incoming data.
    + *
    + * @note
    + * All callbacks are executed in ISR.
      */
    -struct nrf_modem_dect_phy_radio_config_params {
    +struct nrf_modem_dect_phy_callbacks {
     	/**
    -	 * @brief Operation start time as modem time.
    +	 * @brief DECT PHY initialization callback.
     	 *
    -	 * If zero, the operation will be executed immediately.
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
    -	 * This kind of scheduling can only be done when the modem is idle.
    -	 */
    -	uint64_t start_time;
    -	/**
    -	 * @brief Handle for the operation.
    +	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    +	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    +	 * - @ref NRF_MODEM_DECT_PHY_ERR_TEMP_HIGH
    +	 * - @ref NRF_MODEM_DECT_PHY_ERR_PROD_LOCK
     	 *
    -	 * An application-defined handle for the operation.
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param temp Temperature in degrees Celsius.
    +	 * @param err Operation result.
    +	 * @param[in] cfg Modem configuration.
     	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Desired radio mode.
    -	 */
    -	enum nrf_modem_dect_phy_radio_mode radio_mode;
    -};
    +	void (*init)(const uint64_t *time, int16_t temp, enum nrf_modem_dect_phy_err err,
    +		     const struct nrf_modem_dect_phy_modem_cfg *cfg);
     
    -/**
    - * @brief DECT PHY latency information.
    - *
    - * Includes radio state transition and configuration latencies.
    - */
    -struct nrf_modem_dect_phy_latency_info {
     	/**
    -	 * @brief Radio mode specific latencies.
    +	 * @brief Callback to indicate the completion of RX, TX and RSSI measurement operations.
     	 *
    -	 * These latencies must be used according to the currently active radio mode
    -	 * and operation type (immediate or scheduled).
    -	 */
    -	struct {
    -		/**
    -		 * @brief Scheduled operation transition delay.
    -		 *
    -		 * The delay between transitioning from one scheduled operation to the next.
    -		 *
    -		 * The start time of a scheduled operation must account for the start time
    -		 * of the previous operation, plus its duration, plus the operation
    -		 * transition delay in the current radio mode.
    -		 */
    -		uint32_t scheduled_operation_transition;
    -		/**
    -		 * @brief Additional delay for scheduled operations.
    -		 *
    -		 * Used together with the values in @ref operation to calculate the total
    -		 * operation start latency for scheduled operations.
    -		 */
    -		uint32_t scheduled_operation_startup;
    -		/**
    -		 * @brief Delay in transitioning from one radio mode to another.
    -		 */
    -		uint32_t radio_mode_transition[NRF_MODEM_DECT_PHY_RADIO_MODE_COUNT];
    -	} radio_mode[NRF_MODEM_DECT_PHY_RADIO_MODE_COUNT];
    -
    -	/**
    -	 * @brief Duration of radio state transitions.
    -	 *
    -	 * Immediate operations can use these values directly.
    -	 * Scheduled operations must account for this value plus the value
    -	 * of @ref scheduled_operation_startup.
    -	 */
    -	struct {
    -		struct {
    -			/**
    -			 * @brief Receive operation start latency (IDLE to RF ON).
    -			 */
    -			uint32_t idle_to_active;
    -			/**
    -			 * @brief RSSI operation end latency (RF OFF to IDLE).
    -			 */
    -			uint32_t active_to_idle_rssi;
    -			/**
    -			 * @brief RX operation end latency (RF OFF to IDLE).
    -			 */
    -			uint32_t active_to_idle_rx;
    -			/**
    -			 * @brief RX with RSSI operation end latency (RF OFF to IDLE).
    -			 */
    -			uint32_t active_to_idle_rx_rssi;
    -			/**
    -			 * @brief Operation stop latency (STOP_REQ to RF OFF).
    -			 */
    -			uint32_t stop_to_rf_off;
    -		} receive;
    -		struct {
    -			/**
    -			 * @brief Transmit operation start latency (IDLE to RF ON).
    -			 */
    -			uint32_t idle_to_active;
    -			/**
    -			 * @brief Transmit operation end latency (RF OFF to IDLE).
    -			 */
    -			uint32_t active_to_idle;
    -		} transmit;
    -	} operation;
    -
    -	/**
    -	 * @brief Duration of DECT PHY stack operations.
    -	 */
    -	struct {
    -		/**
    -		 * @brief Duration of DECT PHY stack initialization.
    -		 *
    -		 * Duration of @ref nrf_modem_dect_phy_init().
    -		 */
    -		uint32_t initialization;
    -		/**
    -		 * @brief Duration of DECT PHY stack deinitialization.
    -		 *
    -		 * Duration of @ref nrf_modem_dect_phy_deinit().
    -		 */
    -		uint32_t deinitialization;
    -		/**
    -		 * @brief Duration of DECT PHY stack configuration.
    -		 *
    -		 * Duration of @ref nrf_modem_dect_phy_configure().
    -		 */
    -		uint32_t configuration;
    -		/**
    -		 * @brief Duration of DECT PHY stack activation.
    -		 *
    -		 * Duration of @ref nrf_modem_dect_phy_activate().
    -		 */
    -		uint32_t activation;
    -		/**
    -		 * @brief Duration of DECT PHY stack deactivation.
    -		 *
    -		 * Duration of @ref nrf_modem_dect_phy_deactivate().
    -		 */
    -		uint32_t deactivation;
    -	} stack;
    -};
    -
    -/**
    - * @brief Link configuration parameters.
    - */
    -struct nrf_modem_dect_phy_link_config_params {
    -	/**
    -	 * @brief Primary link.
    -	 *
    -	 * The modem tracks the frequency of the primary link for Automatic Frequency Control
    -	 * purposes. This frequency is propagated down the tree, that is, the Radio Device uses
    -	 * this frequency for all its radio operations except those directed to secondary links.
    -	 */
    -	struct nrf_modem_dect_phy_link_id primary_link_id;
    -	/**
    -	 * @brief Number of secondary links.
    -	 */
    -	uint8_t secondary_link_count;
    -	/**
    -	 * @brief Secondary links.
    -	 *
    -	 * The modem tracks the frequency of secondary links for Automatic Frequency Control
    -	 * purposes. When communicating with a secondary link the modem compensates the frequency
    -	 * difference between the secondary link and the primary link.
    -	 */
    -	struct nrf_modem_dect_phy_link_id secondary_link_ids[];
    -};
    -
    -/** Events */
    -
    -/**
    - * @brief Initialization event.
    - */
    -struct nrf_modem_dect_phy_init_event {
    -	/**
    -	 * @brief Operation result.
    -	 *
    -	 * Can be one of the following values:
    -	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_TEMP_HIGH
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_PROD_LOCK
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief Temperature in degrees Celsius.
    -	 */
    -	int16_t temp;
    -	/**
    -	 * @brief Voltage in millivolts.
    -	 */
    -	uint16_t voltage;
    -	/**
    -	 * @brief Operating temperature limit, in degrees Celsius.
    -	 */
    -	uint16_t temperature_limit;
    -};
    -
    -/**
    - * @brief Operation complete event.
    - */
    -struct nrf_modem_dect_phy_op_complete_event {
    -	/**
    -	 * @brief Handle of the operation.
    -	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Operation result.
    -	 *
    -	 * Can be one of the following values:
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
     	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_LBT_CHANNEL_BUSY
    @@ -1092,574 +1089,163 @@ struct nrf_modem_dect_phy_op_complete_event {
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_INVALID_DURATION
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_INVALID_PARAMETER
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_TEMP_HIGH
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief Temperature in degrees Celsius.
    -	 */
    -	int16_t temp;
    -	/**
    -	 * @brief Voltage in millivolts.
    -	 */
    -	uint16_t voltage;
    -};
    -
    -/**
    - * @brief RSSI measurement event.
    - */
    -struct nrf_modem_dect_phy_rssi_event {
    -	/**
    -	 * @brief Handle of the operation.
    -	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Measurement start time, in modem time units.
    -	 */
    -	uint64_t meas_start_time;
    -	/**
    -	 * @brief The absolute channel frequency number on which the measurements were made.
    -	 */
    -	uint16_t carrier;
    -	/**
    -	 * @brief Number of measurements in @ref meas.
    -	 */
    -	uint16_t meas_len;
    -	/**
    -	 * @brief RSSI measurements, in dBm.
     	 *
    -	 * If a symbol is measured, its measurement is in the interval [-140, -1].
    -	 * If the measurement is saturated, the measured signal strength is reported
    -	 * as a positive integer. If a symbol is not measured, its value is reported
    -	 * as @ref NRF_MODEM_DECT_PHY_RSSI_NOT_MEASURED.
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param temp Temperature in degrees Celsius.
    +	 * @param err Operation result.
    +	 * @param handle Operation handle.
     	 */
    -	int8_t *meas;
    -};
    +	void (*op_complete)(const uint64_t *time, int16_t temperature,
    +			    enum nrf_modem_dect_phy_err err, uint32_t handle);
     
    -struct nrf_modem_dect_phy_cancel_event {
    -	/**
    -	 * @brief Handle of the operation.
    -	 */
    -	uint32_t handle;
     	/**
    -	 * @brief Operation result.
    +	 * @brief Callback to receive RSSI measurements.
     	 *
    -	 * Can be one of the following values:
    +	 * Callback function to receive the RSSI measurements requested
    +	 * with @ref nrf_modem_dect_phy_rssi or @ref nrf_modem_dect_phy_rx.
     	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_UNSUPPORTED_OP
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_FOUND
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param[in] meas RSSI measurement.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    +	void (*rssi)(const uint64_t *time, const struct nrf_modem_dect_phy_rssi_meas *meas);
     
    -/**
    - * @brief PCC reception event.
    - */
    -struct nrf_modem_dect_phy_pcc_event {
    -	/**
    -	 * @brief Synchronization Training Field start time.
    -	 *
    -	 * Start time of the STF of this reception in modem time.
    -	 */
    -	uint64_t stf_start_time;
    -	/**
    -	 * @brief Handle for the operation.
    -	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Validity of the physical header.
    -	 */
    -	enum nrf_modem_dect_phy_hdr_status header_status;
    -	/**
    -	 * @brief Physical layer control field type.
    -	 *
    -	 * Valid values are 0 and 1 corresponding types 1 and 2, respectively.
    -	 *
    -	 * See 6.2.1 in @ref DECT-SPEC "DECT-2020 NR Part 4".
    -	 */
    -	uint8_t phy_type;
     	/**
    -	 * @brief PHY header.
    -	 */
    -	union nrf_modem_dect_phy_hdr hdr;
    -	/**
    -	 * @brief Received signal strength indicator (RSSI-2).
    -	 *
    -	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    -	 *
    -	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t rssi_2;
    -	/**
    -	 * @brief Received signal to noise indicator (SNR).
    +	 * @brief Callback for @ref nrf_modem_dect_phy_rx_stop.
     	 *
    -	 * Values are dB values with 0.25 dB resolution (Q13.2).
    -	 *
    -	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t snr;
    -	/**
    -	 * @brief Transaction ID.
    -	 *
    -	 * Used to map PCC data with corresponding PDC data.
    -	 */
    -	uint16_t transaction_id;
    -};
    +	 * When an RX operation is stopped, the operation complete callback will be called
    +	 * once the operation has fully stopped. That is, it is possible that the
    +	 * operation hasn't been fully stopped at the time this callback is called.
     
    -/**
    - * @brief PCC reception CRC failure event.
    - */
    -struct nrf_modem_dect_phy_pcc_crc_failure_event {
    -	/**
    -	 * @brief Synchronization Training Field start time.
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
    -	 * Start time of the STF of this reception in modem time.
    -	 */
    -	uint64_t stf_start_time;
    -	/**
    -	 * @brief Handle for the operation.
    -	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Received signal strength indicator (RSSI-2).
    -	 *
    -	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    -	 *
    -	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t rssi_2;
    -	/**
    -	 * @brief Received signal to noise indicator (SNR).
    -	 *
    -	 * Values are dB values with 0.25 dB resolution (Q13.2).
    -	 *
    -	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t snr;
    -	/**
    -	 * @brief Transaction ID.
    +	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    +	 * - @ref NRF_MODEM_DECT_PHY_ERR_UNSUPPORTED_OP
    +	 * - @ref NRF_MODEM_DECT_PHY_ERR_NO_ONGOING_OP
    +	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
     	 *
    -	 * Used to map PCC data with corresponding PDC data.
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param err Operation result.
    +	 * @param handle Operation handle.
     	 */
    -	uint16_t transaction_id;
    -};
    +	void (*rx_stop)(const uint64_t *time, enum nrf_modem_dect_phy_err err, uint32_t handle);
     
    -/**
    - * @brief PDC reception event.
    - */
    -struct nrf_modem_dect_phy_pdc_event {
     	/**
    -	 * @brief Handle for the operation.
    -	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Received signal strength indicator (RSSI-2).
    -	 *
    -	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    -	 *
    -	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t rssi_2;
    -	/**
    -	 * @brief Received signal to noise indicator (SNR).
    -	 *
    -	 * Values are dB values with 0.25 dB resolution (Q13.2).
    -	 *
    -	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t snr;
    -	/**
    -	 * @brief Transaction ID.
    +	 * @brief Callback for control channel reception.
     	 *
    -	 * Used to map PCC data with corresponding PDC data.
    -	 */
    -	uint16_t transaction_id;
    -	/**
    -	 * @brief Received data payload.
    -	 */
    -	void *data;
    -	/**
    -	 * @brief Data payload length, in bytes.
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param status Reception data.
    +	 * @param[in] hdr Physical layer control header.
     	 */
    -	size_t len;
    -};
    +	void (*pcc)(const uint64_t *time, const struct nrf_modem_dect_phy_rx_pcc_status *status,
    +		    const union nrf_modem_dect_phy_hdr *hdr);
     
    -/**
    - * @brief PDC CRC failure event.
    - */
    -struct nrf_modem_dect_phy_pdc_crc_failure_event {
    -	/**
    -	 * @brief Handle for the operation.
    -	 */
    -	uint32_t handle;
     	/**
    -	 * @brief Received signal strength indicator (RSSI-2).
    -	 *
    -	 * Values are in dBm with 0.5 dBm resolution (Q14.1).
    -	 *
    -	 * If this value is not measured, it is reported as
    -	 * @ref NRF_MODEM_DECT_PHY_RSSI2_NOT_MEASURED.
    +	 * @brief Callback for CRC failures on the physical control channel.
     	 *
    -	 * See 8.3 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param[in] crc_failure CRC failure information.
     	 */
    -	int16_t rssi_2;
    -	/**
    -	 * @brief Received signal to noise indicator (SNR).
    -	 *
    -	 * Values are dB values with 0.25 dB resolution (Q13.2).
    -	 *
    -	 * If this value is not measured, it is reported as
    -	 * @ref NRF_MODEM_DECT_PHY_SNR_NOT_MEASURED.
    -	 *
    -	 * See 8.4 in @ref DECT-SPEC "DECT-2020 NR Part 2".
    -	 */
    -	int16_t snr;
    -	/**
    -	 * @brief Transaction ID.
    -	 *
    -	 * Used to map PCC data with corresponding PDC data.
    -	 */
    -	uint16_t transaction_id;
    -};
    +	void (*pcc_crc_err)(const uint64_t *time,
    +			    const struct nrf_modem_dect_phy_rx_pcc_crc_failure *crc_failure);
     
    -/**
    - * @brief DECT PHY stack configuration event.
    - */
    -struct nrf_modem_dect_phy_configure_event {
     	/**
    -	 * @brief Operation result.
    -	 *
    -	 * Can be one of the following values:
    +	 * @brief Callback for data channel reception.
     	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_INVALID_PARAMETER
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param status Reception data.
    +	 * @param[in] data Data received.
    +	 * @param len Size of received data.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief Temperature in degrees Celsius.
    -	 */
    -	int16_t temp;
    -	/**
    -	 * @brief Voltage in millivolts.
    -	 */
    -	uint16_t voltage;
    -};
    +	void (*pdc)(const uint64_t *time, const struct nrf_modem_dect_phy_rx_pdc_status *status,
    +		    const void *data, uint32_t len);
     
    -/**
    - * @brief Radio configuration event.
    - */
    -struct nrf_modem_dect_phy_radio_config_event {
     	/**
    -	 * @brief Handle of the operation.
    -	 */
    -	uint32_t handle;
    -	/**
    -	 * @brief Operation result.
    -	 *
    -	 * Can be one of the following values:
    +	 * @brief Callback for CRC failures on the physical data channel.
     	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param[in] crc_failure CRC failure information.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    +	void (*pdc_crc_err)(const uint64_t *time,
    +			    const struct nrf_modem_dect_phy_rx_pdc_crc_failure *crc_failure);
     
    -struct nrf_modem_dect_phy_link_config_event {
     	/**
    -	 * @brief Operation result.
    +	 * @brief Callback for @ref nrf_modem_dect_phy_link_config.
     	 *
    -	 * Can be one of the following values:
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
     	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_NO_MEMORY
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_INVALID_PARAMETER
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    -
    -/**
    - * @brief Time get event.
    - */
    -struct nrf_modem_dect_phy_time_get_event {
    -	/**
    -	 * @brief Operation result.
    -	 *
    -	 * Can be one of the following values:
     	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param err Operation result.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    +	void (*link_config)(const uint64_t *time, enum nrf_modem_dect_phy_err err);
     
    -/**
    - * @brief Capability get event.
    - */
    -struct nrf_modem_dect_phy_capability_get_event {
     	/**
    -	 * @brief Operation result.
    +	 * @brief Callback for @ref nrf_modem_dect_phy_time_get.
     	 *
    -	 * Can be one of the following values:
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
     	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief PHY capability.
    -	 */
    -	struct nrf_modem_dect_phy_capability *capability;
    -};
    -
    -/**
    - * @brief Band information event.
    - */
    -struct nrf_modem_dect_phy_band_get_event {
    -	/**
    -	 * @brief Operation result.
     	 *
    -	 * Can be one of the following values:
    -	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief Supported bands as a bitmap.
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param err Operation result.
     	 */
    -	uint32_t supported_bands;
    -	/**
    -	 * @brief Number of elements in @c band.
    -	 */
    -	uint32_t band_count;
    -	/**
    -	 * @brief Band information.
    -	 */
    -	struct nrf_modem_dect_phy_band *band;
    -};
    +	void (*time_get)(const uint64_t *time, enum nrf_modem_dect_phy_err err);
     
    -/**
    - * @brief STF cover sequence control event.
    - */
    -struct nrf_modem_dect_phy_stf_control_event {
     	/**
    -	 * @brief Operation result.
    +	 * @brief Callback for @ref nrf_modem_dect_phy_capability_get.
     	 *
    -	 * Can be one of the following values:
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
     	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    -
    -/**
    - * @brief Deinitialization event.
    - */
    -struct nrf_modem_dect_phy_deinit_event {
    -	/**
    -	 * @brief Operation result.
     	 *
    -	 * Can be one of the following values:
    -	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param err Operation result.
    +	 * @param[in] capability PHY capabilities.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    +	void (*capability_get)(const uint64_t *time, enum nrf_modem_dect_phy_err err,
    +			       const struct nrf_modem_dect_phy_capability *capability);
     
    -/**
    - * @brief Activation event.
    - */
    -struct nrf_modem_dect_phy_activate_event {
     	/**
    -	 * @brief Operation result.
    +	 * @brief Callback for @ref nrf_modem_dect_phy_stf_cover_seq_control.
     	 *
    -	 * Can be one of the following values:
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
     	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    -	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief Temperature in degrees Celsius.
    -	 */
    -	int16_t temp;
    -	/**
    -	 * @brief Voltage in millivolts.
    -	 */
    -	uint16_t voltage;
    -};
    -
    -/**
    - * @brief Deactivation event.
    - */
    -struct nrf_modem_dect_phy_deactivate_event {
    -	/**
    -	 * @brief Operation result.
    -	 *
    -	 * Can be one of the following values:
     	 *
    -	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
    -	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param err Operation result.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -};
    +	void (*stf_cover_seq_control)(const uint64_t *time, enum nrf_modem_dect_phy_err err);
     
    -/**
    - * @brief Latency event.
    - */
    -struct nrf_modem_dect_phy_latency_info_event {
     	/**
    -	 * @brief Operation result.
    +	 * @brief Callback for @ref nrf_modem_dect_phy_deinit.
     	 *
    -	 * Can be one of the following values:
    +	 * The @p err parameter indicates the result of the operation.
    +	 * It can be one of the following values:
     	 *
     	 * - @ref NRF_MODEM_DECT_PHY_SUCCESS
     	 * - @ref NRF_MODEM_DECT_PHY_ERR_NOT_ALLOWED
    +	 *
    +	 * @param[in] time Modem time, in modem time units.
    +	 * @param err Operation result.
     	 */
    -	enum nrf_modem_dect_phy_err err;
    -	/**
    -	 * @brief PHY latency info.
    -	 */
    -	struct nrf_modem_dect_phy_latency_info *latency_info;
    -};
    -
    -enum nrf_modem_dect_phy_event_id {
    -	/**
    -	 * @brief Event to indicate the completion of the DECT PHY stack initialization.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_INIT,
    -	/**
    -	 * @brief Event to indicate the completion of the DECT PHY stack deinitialization.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_DEINIT,
    -	/**
    -	 * @brief Event to indicate the completion of the DECT PHY stack configuration.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_CONFIGURE,
    -	/**
    -	 * @brief Event to indicate the completion of radio mode configuration.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_RADIO_CONFIG,
    -	/**
    -	 * @brief Event to indicate the completion of the DECT PHY stack activation.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_ACTIVATE,
    -	/**
    -	 * @brief Event to indicate the completion of the DECT PHY stack deactivation.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_DEACTIVATE,
    -	/**
    -	 * @brief Event to indicate the completion of RX, TX and RSSI measurement operations.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_COMPLETED,
    -	/**
    -	 * @brief Event to indicate the cancellation of an operation.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_CANCELED,
    -	/**
    -	 * @brief Event carrying RSSI measurements.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_RSSI,
    -	/**
    -	 * @brief Event for control channel reception.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_PCC,
    -	/**
    -	 * @brief Event for CRC failures on the physical control channel.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_PCC_ERROR,
    -	/**
    -	 * @brief Event for data channel reception.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_PDC,
    -	/**
    -	 * @brief Event for CRC failures on the physical data channel.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_PDC_ERROR,
    -	/**
    -	 * @brief Event carrying modem time.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_TIME,
    -	/**
    -	 * @brief Event carrying capabilities.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_CAPABILITY,
    -	/**
    -	 * @brief Event carrying band information.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_BANDS,
    -	/**
    -	 * @brief Event carrying latency information.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_LATENCY,
    -	/**
    -	 * @brief Event to indicate the completion of link configuration.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_LINK_CONFIG,
    -	/**
    -	 * @brief Event to indicate the completion of STF configuration.
    -	 */
    -	NRF_MODEM_DECT_PHY_EVT_STF_CONFIG,
    +	void (*deinit)(const uint64_t *time, enum nrf_modem_dect_phy_err err);
     };
     
     /**
    - * @brief DECT PHY event.
    + * @brief Configuration for DECT PHY interface.
      */
    -struct nrf_modem_dect_phy_event {
    -	/**
    -	 * @brief Event ID.
    -	 */
    -	enum nrf_modem_dect_phy_event_id id;
    -	/**
    -	 * @brief Modem time, in modem time units.
    -	 */
    -	uint64_t time;
    -	/**
    -	 * @brief Event data.
    -	 */
    -	union {
    -		struct nrf_modem_dect_phy_init_event init;
    -		struct nrf_modem_dect_phy_deinit_event deinit;
    -		struct nrf_modem_dect_phy_activate_event activate;
    -		struct nrf_modem_dect_phy_deactivate_event deactivate;
    -		struct nrf_modem_dect_phy_configure_event configure;
    -		struct nrf_modem_dect_phy_radio_config_event radio_config;
    -		struct nrf_modem_dect_phy_op_complete_event op_complete;
    -		struct nrf_modem_dect_phy_rssi_event rssi;
    -		struct nrf_modem_dect_phy_cancel_event cancel;
    -		struct nrf_modem_dect_phy_pcc_event pcc;
    -		struct nrf_modem_dect_phy_pcc_crc_failure_event pcc_crc_err;
    -		struct nrf_modem_dect_phy_pdc_event pdc;
    -		struct nrf_modem_dect_phy_pdc_crc_failure_event pdc_crc_err;
    -		struct nrf_modem_dect_phy_time_get_event time_get;
    -		struct nrf_modem_dect_phy_capability_get_event capability_get;
    -		struct nrf_modem_dect_phy_band_get_event band_get;
    -		struct nrf_modem_dect_phy_latency_info_event latency_get;
    -		struct nrf_modem_dect_phy_stf_control_event stf_cover_seq_control;
    -		struct nrf_modem_dect_phy_link_config_event link_config;
    -	};
    -};
    -
    -/**
    - * @brief DECT PHY configuration parameters.
    - */
    -struct nrf_modem_dect_phy_config_params {
    -	/**
    -	 * @brief Band group index.
    -	 *
    -	 * Allowed values: 0 or 1.
    -	 * Value 0 refers to RF frequencies operating near 2GHz and
    -	 * value 1 to RF frequencies near 1 GHz.
    -	 */
    -	uint8_t band_group_index;
    -	/**
    -	 * @brief Number of HARQ processes.
    -	 *
    -	 * The HARQ reception buffer is divided equally between processes.
    -	 * Supported values: 1, 2, 4, 8.
    -	 */
    -	uint8_t harq_rx_process_count;
    +struct nrf_modem_dect_phy_init_params {
     	/**
     	 * @brief HARQ RX buffer expiry time, in microseconds.
     	 *
    @@ -1669,119 +1255,113 @@ struct nrf_modem_dect_phy_config_params {
     	 * Maximum supported value: 5000000.
     	 */
     	uint32_t harq_rx_expiry_time_us;
    +	struct {
    +		/**
    +		 * @brief Number of HARQ processes.
    +		 *
    +		 * The HARQ reception buffer is divided equally between processes.
    +		 * Supported values: 1, 2, 4, 8.
    +		 */
    +		uint8_t harq_rx_process_count : 4;
    +		/**
    +		 * @brief Reserved for future use.
    +		 */
    +		uint8_t reserved : 3;
    +		/**
    +		 * @brief Band 4 support.
    +		 *
    +		 * 1 - Enables band 4 operation.
    +		 * 0 - Disables band 4 operation.
    +		 *
    +		 * Band 4 support is only available for nRF9151 devices.
    +		 *
    +		 * @warning
    +		 * When operating on band 4, carriers outside the [525, 551] range
    +		 * shall not be used as they interfere with other radio devices,
    +		 * including LTE devices, car keys, and others.
    +		 *
    +		 * @note
    +		 * Band 4 support may only be toggled when de-initialized.
    +		 * Toggling band 4 support when already initialized is not supported.
    +		 */
    +		uint8_t band4_support : 1;
    +	};
     };
     
     /**
    - * @brief Application handler prototype for PHY events.
    - */
    -typedef void (*nrf_modem_dect_phy_event_handler_t)(const struct nrf_modem_dect_phy_event *event);
    -
    -/**
    - * @brief Set the application event handler for PHY events.
    + * @brief Set application callbacks for PHY operations.
      *
    - * The application must set the handler for events coming the DECT PHY before attempting
    - * other operations.
    + * The application must set the callbacks for PHY operations before attempting other operations.
    + * That includes PHY initialization itself, that is, nrf_modem_dect_phy_init().
      *
    - * @param handler Event handler.
    + * @param cb Application callbacks.
      *
      * @return 0 On success.
    - * @retval -NRF_EFAULT @p handler is @c NULL.
    + * @retval -NRF_EFAULT @p cb is @c NULL.
    + * @retval -NRF_EINVAL One of the fields in @p cb is @c NULL.
      */
    -int nrf_modem_dect_phy_event_handler_set(nrf_modem_dect_phy_event_handler_t handler);
    +int nrf_modem_dect_phy_callback_set(const struct nrf_modem_dect_phy_callbacks *cb);
     
     /**
      * @brief Retrieve DECT PHY capabilities.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_CAPABILITY event.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.capability_get callback.
      *
      * @return 0 On success.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    + * @retval -NRF_EFAULT Callback configuration is invalid.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_capability_get(void);
     
     /**
    - * @brief Initialize the DECT PHY interface.
    + * @brief Initialize DECT PHY interface.
      *
    - * Initialize the DECT PHY interface and associated hardware resources.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.init callback.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_INIT event.
    + * @param[in] params  Configuration parameters.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
    -int nrf_modem_dect_phy_init(void);
    +int nrf_modem_dect_phy_init(const struct nrf_modem_dect_phy_init_params *params);
     
     /**
    - * @brief Deinitialize the DECT PHY interface.
    + * @brief De-initialize DECT PHY interface.
      *
    - * Deinitialize the DECT PHY interface and all associated hardware resources.
    - * This implicitly cancels all operations, both executing or scheduled for execution.
    + * Cancel all operations and de-initialize the PHY.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_DEINIT event.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.deinit callback.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    + * @retval -NRF_EFAULT Callback configuration is invalid.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_deinit(void);
     
    -/**
    - * @brief Activate the DECT PHY software stack in given radio mode.
    - *
    - * Before each activation, the DECT PHY software stack must be configured using
    - * @ref nrf_modem_dect_phy_configure.
    - *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_ACTIVATE event.
    - *
    - * @param mode Desired radio mode.
    - *
    - * @retval 0           Request was sent to modem.
    - * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    - * @retval -NRF_ENOMEM Not enough shared memory for this request.
    - */
    -int nrf_modem_dect_phy_activate(enum nrf_modem_dect_phy_radio_mode mode);
    -
    -/**
    - * @brief Deactivate the DECT PHY software stack.
    - *
    - * Deactivation implicitly cancels all operations, both executing or scheduled for execution.
    - *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_DEACTIVATE event.
    - *
    - * @retval 0           Request was sent to modem.
    - * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    - * @retval -NRF_ENOMEM Not enough shared memory for this request.
    - */
    -int nrf_modem_dect_phy_deactivate(void);
    -
     /**
      * @brief Schedule a reception.
      *
    - * Schedule a reception with given parameters.
    + * Schedule a continuous, semicontinuous or single shot reception at a given time, with parameters.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event.
    + * Incoming data received on the physical layer control and data channels is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.pcc and @ref nrf_modem_dect_phy_callbacks.pdc callbacks.
      *
    - * Data received on the physical layer control and data channels is sent to the application
    - * in the @ref NRF_MODEM_DECT_PHY_EVT_PCC and @ref NRF_MODEM_DECT_PHY_EVT_PDC events respectively.
    + * When the operation has completed, either successfully or unsuccessfully, the result is sent
    + * to the @ref nrf_modem_dect_phy_callbacks.op_complete callback, with a `handle`
    + * parameter equal to the `handle` specified in @p params.
      *
      * @param[in] params  Operation parameters.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_rx(const struct nrf_modem_dect_phy_rx_params *params);
    @@ -1791,14 +1371,15 @@ int nrf_modem_dect_phy_rx(const struct nrf_modem_dect_phy_rx_params *params);
      *
      * Schedule a data transmission with given parameters.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event.
    + * When the operation has completed, either successfully or unsuccessfully, the result is sent
    + * to the @ref nrf_modem_dect_phy_callbacks.op_complete callback, with a `handle`
    + * parameter equal to the `handle` specified in @p params.
      *
      * @param[in] params  Operation parameters.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_tx(const struct nrf_modem_dect_phy_tx_params *params);
    @@ -1818,14 +1399,15 @@ int nrf_modem_dect_phy_tx(const struct nrf_modem_dect_phy_tx_params *params);
      * received. In that case modem will inject ACK or NACK feedback into the Transmission feedback
      * field based on the PDC reception result once the reception is complete.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event.
    + * When the operation has completed, either successfully or unsuccessfully, the result is sent
    + * to the @ref nrf_modem_dect_phy_callbacks.op_complete callback, with a `handle`
    + * parameter equal to the `handle` specified in @p params.
      *
      * @param[in] params  Operation parameters.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_tx_harq(const struct nrf_modem_dect_phy_tx_params *params);
    @@ -1840,14 +1422,19 @@ int nrf_modem_dect_phy_tx_harq(const struct nrf_modem_dect_phy_tx_params *params
      * The RX operation scheduling is relative to the end of the TX operation and must include
      * the guard time.
      *
    - * These operations are performed asynchronously.
    - * Completion of each of operation is indicated by one @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event.
    + * When the TX operation has completed, either successfully or unsuccessfully, the result is sent
    + * to the @ref nrf_modem_dect_phy_callbacks.op_complete callback, with a `handle`
    + * parameter equal to the `handle` specified in @p params.tx.
    + *
    + * When the RX operation has completed, either successfully or unsuccessfully, the result is sent
    + * to the @ref nrf_modem_dect_phy_callbacks.op_complete callback, with a `handle`
    + * parameter equal to the `handle` specified in @p params.rx.
      *
      * @param[in] params  Operation parameters.
      *
      * @retval 0           Request was sent to the modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_tx_rx(const struct nrf_modem_dect_phy_tx_rx_params *params);
    @@ -1856,135 +1443,69 @@ int nrf_modem_dect_phy_tx_rx(const struct nrf_modem_dect_phy_tx_rx_params *param
      * @brief Schedule an RSSI measurement operation.
      *
      * Schedule an RSSI measurement operation with given parameters.
    + * The measurements are sent to the @ref nrf_modem_dect_phy_callbacks.rssi callback.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event.
    - * The measurements are sent in the @ref NRF_MODEM_DECT_PHY_EVT_RSSI event.
    + * When the operation has completed, either successfully or unsuccessfully, the result is sent
    + * to the @ref nrf_modem_dect_phy_callbacks.op_complete callback, with a `handle`
    + * parameter equal to the `handle` specified in @p params.
      *
      * @param[in] params  Operation parameters.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_rssi(const struct nrf_modem_dect_phy_rssi_params *params);
     
     /**
    - * @brief Cancel an operation.
    - *
    - * Cancel an ongoing operation or an operation scheduled to be executed.
    - *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_CANCELED event.
    - *
    - * When an operation is canceled, a @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event is sent to the
    - * application. If the operation is canceled while it is executing, the event reports that the
    - * operation completed successfully. If the operation was scheduled but not yet executing, the
    - * @ref NRF_MODEM_DECT_PHY_EVT_COMPLETED event will indicate the status as
    - * @ref NRF_MODEM_DECT_PHY_ERR_OP_CANCELED.
    - *
    - * @param handle  Handle of the operation to be canceled,
    - *		  or @ref NRF_MODEM_DECT_PHY_HANDLE_CANCEL_ALL to cancel all operations.
    - *
    - * @retval 0           Request was sent to modem.
    - * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    - * @retval -NRF_ENOMEM Not enough shared memory for this request.
    - */
    -int nrf_modem_dect_phy_cancel(uint32_t handle);
    -
    -/**
    - * @brief Configure the PHY stack.
    + * @brief Stop an ongoing reception.
      *
    - * This operation can only be performed when the DECT PHY is deactivated.
    + * Stop an ongoing reception before its duration has ended; this can take more or less
    + * time depending on the internal state of the operation at the time the request is received.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_CONFIGURE event.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.rx_stop callback.
      *
    - * @param[in] params PHY configuration parameters.
    - *
    - * @retval 0           Request was sent to modem.
    - * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    - * @retval -NRF_ENOMEM Not enough shared memory for this request.
    - */
    -int nrf_modem_dect_phy_configure(const struct nrf_modem_dect_phy_config_params *params);
    -
    -/**
    - * @brief Configure radio mode.
    - *
    - * Configure the radio for the desired operation latency, RX/TX performance and power consumption.
    - *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_RADIO_CONFIG event.
    + * @note
    + * Only RX operations can be stopped.
      *
    - * @param[in] params Radio mode configuration parameters.
    + * @param handle  Handle of the operation to be stopped.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
    -int nrf_modem_dect_phy_radio_config(const struct nrf_modem_dect_phy_radio_config_params *params);
    +int nrf_modem_dect_phy_rx_stop(uint32_t handle);
     
     /**
      * @brief Configure links.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_LINK_CONFIG event.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.link_config callback.
      *
      * @param[in] params Link configuration parameters.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set, or @p params is @c NULL.
    + * @retval -NRF_EFAULT Callback configuration is invalid, or @p params is @c NULL.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      * @retval -NRF_ENOSYS Functionality not implemented.
      */
     int nrf_modem_dect_phy_link_config(const struct nrf_modem_dect_phy_link_config_params *params);
     
     /**
    - * @brief Retrieve band information.
    - *
    - * This operation can only be performed when the DECT PHY is deactivated.
    - *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_BANDS event.
    - *
    - * @retval 0           Request was sent to modem.
    - * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    - * @retval -NRF_ENOMEM Not enough shared memory for this request.
    - */
    -int nrf_modem_dect_phy_band_get(void);
    -
    -/**
    - * @brief Retrieve latency information.
    - *
    - * This operation can only be performed when the DECT PHY is deactivated.
    - *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_LATENCY event.
    - *
    - * @retval 0           Request was sent to modem.
    - * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    - * @retval -NRF_ENOMEM Not enough shared memory for this request.
    - */
    -int nrf_modem_dect_phy_latency_get(void);
    -
    -/**
    - * @brief Retrieve modem time.
    + * @brief Query modem time.
      *
      * Retrieve modem time, in modem time units.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_TIME event.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.time_get callback.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    + * @retval -NRF_EFAULT Callback configuration is invalid.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_time_get(void);
    @@ -1993,21 +1514,20 @@ int nrf_modem_dect_phy_time_get(void);
      * @brief STF cover sequence control.
      *
      * Enable or disable STF cover sequence.
    - * The default, applied at each initialization, is enabled.
      *
      * @note
      * This API is intended for certification purposes only.
      * It should not be used for normal operation.
      *
    - * This operation is performed asynchronously.
    - * Completion of this operation is indicated by the @ref NRF_MODEM_DECT_PHY_EVT_STF_CONFIG event.
    + * This operation is asynchronous. The result of the operation is sent to the
    + * @ref nrf_modem_dect_phy_callbacks.stf_cover_seq_control callback.
      *
      * @param rx_enable Enable STF cover sequence for reception.
      * @param tx_enable Enable STF cover sequence for transmission.
      *
      * @retval 0           Request was sent to modem.
      * @retval -NRF_EPERM  The Modem library is not initialized.
    - * @retval -NRF_EFAULT No event handler is set.
    + * @retval -NRF_EFAULT Callback configuration is invalid.
      * @retval -NRF_ENOMEM Not enough shared memory for this request.
      */
     int nrf_modem_dect_phy_stf_cover_seq_control(bool rx_enable, bool tx_enable);
    

    Note that there are most likely more changes in other files, but this gives you an indication of the changes. 

    Kind regards,
    Øyvind

Children
No Data
Related