22 #include <lime/LimeSuite.h>
29 #include <libconfig.h++>
31 #include "srslte/srslte.h"
32 #include "srslte/interfaces/rrc_interface_types.h"
33 #include "srslte/common/gen_mch_tables.h"
34 #include "srslte/phy/common/phy_common.h"
36 constexpr
unsigned int MAX_PRB = 100;
48 typedef std::function<int(cf_t* data, uint32_t nsamples, srslte_timestamp_t* rx_time)>
get_samples_t;
58 Phy(
const libconfig::Config& cfg,
get_samples_t cb, uint8_t cs_nof_prb, int8_t override_nof_prb);
99 unsigned nr_prb() {
return _cell.nof_prb; }
104 uint32_t
tti() {
return _tti; }
109 float cfo() {
return srslte_ue_sync_get_cfo(&_ue_sync);}
129 void reset() { _mcch_configured = _mch_configured =
false; }
139 uint8_t
mbsfn_area_id() {
return _sib13.mbsfn_area_info_list[0].mbsfn_area_id; }
165 std::vector< mtch_info_t > mtchs;
168 const std::vector< mch_info_t>& mch_info() {
return _mch_info; }
170 void set_dest_for_lcid(
int lcid, std::string dest) { _dests[_mcs][lcid] = dest; }
172 enum class SubcarrierSpacing {
178 SubcarrierSpacing mbsfn_subcarrier_spacing() {
179 switch (_sib13.mbsfn_area_info_list[0].subcarrier_spacing) {
180 case srslte::mbsfn_area_info_t::subcarrier_spacing_t::khz_1dot25:
return SubcarrierSpacing::df_1kHz25;
181 case srslte::mbsfn_area_info_t::subcarrier_spacing_t::khz_7dot5:
return SubcarrierSpacing::df_7kHz5;
182 default:
return SubcarrierSpacing::df_15kHz;
186 float mbsfn_subcarrier_spacing_khz() {
187 switch (_sib13.mbsfn_area_info_list[0].subcarrier_spacing) {
188 case srslte::mbsfn_area_info_t::subcarrier_spacing_t::khz_1dot25:
return 1.25;
189 case srslte::mbsfn_area_info_t::subcarrier_spacing_t::khz_7dot5:
return 7.5;
194 srslte::mcch_msg_t& mcch() {
return _mcch; }
200 const libconfig::Config& _cfg;
201 srslte_ue_sync_t _ue_sync = {};
202 srslte_ue_cellsearch_t _cell_search = {};
203 srslte_ue_mib_sync_t _mib_sync = {};
204 srslte_ue_mib_t _mib = {};
205 srslte_cell_t _cell = {};
207 bool _decode_mcch =
false;
209 cf_t* _mib_buffer[SRSLTE_MAX_CHANNELS] = {};
210 uint32_t _buffer_max_samples = 0;
213 uint8_t _mcch_table[10] = {};
214 bool _mcch_configured =
false;
215 srslte::sib13_t _sib13 = {};
216 srslte::mcch_msg_t _mcch = {};
218 bool _mch_configured =
false;
222 std::vector< mch_info_t > _mch_info;
224 std::map< int, std::map< int, std::string >> _dests;
226 int8_t _override_nof_prb;