+
+ uint8_t numSlots=0; /* How many slots you need to go backwards from OTA */
+ uint32_t max_dl_delay_offset=interval_us_local; /* Start of the slot in which you will start CP DL */
+ while(p_dev_ctx->fh_cfg.T1a_max_cp_dl > max_dl_delay_offset)
+ {
+ max_dl_delay_offset += interval_us_local;
+ numSlots++;
+ }
+
+ /* Delay from start of 'a' slot */
+ delay_cp_dl_max = max_dl_delay_offset - p_dev_ctx->fh_cfg.T1a_max_cp_dl;
+ /* Symbol on which we will start CP transmission */
+ sym_cp_dl_max = delay_cp_dl_max*1000/(interval_us_local*1000/N_SYM_PER_SLOT)+1;
+ /* Backward offset from OTA in terms of symbols when Cp transmission will start
+ * i.e. cp transmission will start 'max_dl_offset_sym' symbols before OTA
+ */
+ uint8_t max_dl_offset_sym = (numSlots+1)*N_SYM_PER_SLOT - sym_cp_dl_max;
+ /* Handle corner case of symbol-0*/
+ sym_cp_dl_max%=N_SYM_PER_SLOT;
+
+ uint32_t min_dl_delay_offset=interval_us_local;
+ numSlots=0;
+ while(p_dev_ctx->fh_cfg.T1a_min_cp_dl > min_dl_delay_offset)
+ {
+ min_dl_delay_offset += interval_us_local;
+ numSlots++;
+ }
+ delay_cp_dl_min = min_dl_delay_offset - p_dev_ctx->fh_cfg.T1a_min_cp_dl;
+ sym_cp_dl_min = delay_cp_dl_min*1000/(interval_us_local*1000/N_SYM_PER_SLOT) - 1;
+ uint8_t min_dl_offset_sym = (numSlots+1)*N_SYM_PER_SLOT - sym_cp_dl_min;
+ sym_cp_dl_min%=N_SYM_PER_SLOT;
+
+
+ uint32_t ul_delay_offset=interval_us_local;
+ numSlots=0;
+ while(p_dev_ctx->fh_cfg.T1a_max_cp_ul > ul_delay_offset)
+ {
+ ul_delay_offset += interval_us_local;
+ numSlots++;
+ }
+ delay_cp_ul = ul_delay_offset - p_dev_ctx->fh_cfg.T1a_max_cp_ul;
+ sym_cp_ul = (delay_cp_ul*1000/(interval_us_local*1000/N_SYM_PER_SLOT)+1);
+ uint8_t ul_offset_sym = (numSlots+1)*N_SYM_PER_SLOT - sym_cp_ul;
+ sym_cp_ul%=N_SYM_PER_SLOT;
+
+ printf("delay_cp_dl_max=%u, sym_cp_dl_max=%u, max_dl_offset_sym=%u\n"
+ "delay_cp_dl_min=%u, sym_cp_dl_min=%u, min_dl_offset_sym=%u\n"
+ "delay_cp_ul=%u, sym_cp_ul=%u, ul_offset_sym=%u\n",
+ delay_cp_dl_max, sym_cp_dl_max, max_dl_offset_sym,
+ delay_cp_dl_min, sym_cp_dl_min, min_dl_offset_sym,
+ delay_cp_ul, sym_cp_ul, ul_offset_sym);
+
+