78 spdlog::debug(
"Received GET request {}", message.to_string() );
79 auto paths = uri::split_path(uri::decode(message.relative_uri().path()));
81 (message.headers()[
"Authorization"] !=
"Bearer " +
_api_key)) {
82 message.reply(status_codes::Unauthorized);
87 message.reply(status_codes::NotFound);
89 if (paths[0] ==
"status") {
90 auto state = value::object();
94 state[
"state"] = value::string(
"searching");
97 state[
"state"] = value::string(
"syncing");
100 state[
"state"] = value::string(
"synchronized");
105 state[
"nof_prb"] = value(
_phy.
cell().nof_prb);
107 state[
"nof_prb"] = value(
_phy.
cell().mbsfn_prb);
109 state[
"cell_id"] = value(
_phy.
cell().id);
110 state[
"cfo"] = value(
_phy.
cfo());
111 state[
"cinr_db"] = value(
cinr_db());
113 message.reply(status_codes::OK, state);
114 }
else if (paths[0] ==
"sdr_params") {
115 value sdr = value::object();
124 message.reply(status_codes::OK, sdr);
125 }
else if (paths[0] ==
"ce_values") {
126 auto cestream = Concurrency::streams::bytestream::open_istream(
_ce_values);
127 message.reply(status_codes::OK, cestream);
128 }
else if (paths[0] ==
"pdsch_status") {
129 value sdr = value::object();
135 message.reply(status_codes::OK, sdr);
136 }
else if (paths[0] ==
"pdsch_data") {
137 auto cestream = Concurrency::streams::bytestream::open_istream(
_pdsch.
GetData());
138 message.reply(status_codes::OK, cestream);
139 }
else if (paths[0] ==
"mcch_status") {
140 value sdr = value::object();
141 sdr[
"bler"] = value(
static_cast<float>(
_mcch.
errors) /
146 message.reply(status_codes::OK, sdr);
147 }
else if (paths[0] ==
"mcch_data") {
148 auto cestream = Concurrency::streams::bytestream::open_istream(
_mcch.
GetData());
149 message.reply(status_codes::OK, cestream);
150 }
else if (paths[0] ==
"mch_info") {
151 std::vector<value> mi;
153 std::for_each(std::begin(mch_info), std::end(mch_info), [&mi](
Phy::mch_info_t const& mch) {
155 m[
"mcs"] = value(mch.
mcs);
156 std::vector<value> mti;
159 mt[
"tmgi"] = value(mtch.tmgi);
160 mt[
"dest"] = value(mtch.dest);
161 mt[
"lcid"] = value(mtch.lcid);
164 m[
"mtchs"] = value::array(mti);
167 message.reply(status_codes::OK, value::array(mi));
168 }
else if (paths[0] ==
"mch_status") {
169 int idx = std::stoi(paths[1]);
170 value sdr = value::object();
171 sdr[
"bler"] = value(
static_cast<float>(
_mch[idx].errors) /
172 static_cast<float>(
_mch[idx].total));
173 sdr[
"ber"] = value(
_mch[idx].ber);
174 sdr[
"mcs"] = value(
_mch[idx].mcs);
175 sdr[
"present"] = value(
_mch[idx].present);
176 message.reply(status_codes::OK, sdr);
177 }
else if (paths[0] ==
"mch_data") {
178 int idx = std::stoi(paths[1]);
179 auto cestream = Concurrency::streams::bytestream::open_istream(
_mch[idx].GetData());
180 message.reply(status_codes::OK, cestream);
181 }
else if (paths[0] ==
"log") {
182 std::string logfile =
"/var/log/syslog";
184 Concurrency::streams::file_stream<uint8_t>::open_istream(logfile).then(
185 [message](
const Concurrency::streams::basic_istream<unsigned char>&
187 message.reply(status_codes::OK, file_stream,
"text/plain");
const std::vector< mch_info_t > & mch_info()
srsran_cell_t cell()
Get the current cell (with params adjusted for MBSFN)
float mbsfn_subcarrier_spacing_khz()
float cfo()
Get the current CFO value.
std::vector< uint8_t > GetData()
float cinr_db()
Current CINR value.
std::vector< uint8_t > _ce_values
Time domain subcarrier CE values.
ChannelInfo _mcch
RX info for MCCH.
std::map< uint32_t, ChannelInfo > _mch
RX info for MCHs.
ChannelInfo _pdsch
RX info for PDSCH.
double get_frequency()
Get current center frequency.
double get_buffer_level()
Get current ringbuffer level (0 = empty .
unsigned get_filter_bw()
Get current filter bandwidth.
std::string get_antenna()
Get current antenna port.
double get_gain()
Get current gain.
double get_sample_rate()
Get current sample rate.
std::vector< mtch_info_t > mtchs