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

  •  
    Does anybody know if that events callback is called inside ISR context or inside zephyr thread context? 
    Are there any strict limitations for the time processing inside that event callback handler?

Reply Children
No Data
Related