Possible fix to RSSI bug by scoping rssi_sensor variable to local function

This commit is contained in:
Ismael Gomez 2017-12-29 19:21:36 +01:00
parent 03da3dadce
commit bbc5fad1cf
1 changed files with 11 additions and 13 deletions

View File

@ -50,7 +50,6 @@ typedef struct {
double tx_rate; double tx_rate;
bool dynamic_rate; bool dynamic_rate;
bool has_rssi; bool has_rssi;
uhd_sensor_value_handle rssi_value;
uint32_t nof_rx_channels; uint32_t nof_rx_channels;
int nof_tx_channels; int nof_tx_channels;
@ -281,10 +280,15 @@ bool get_has_rssi(void *h) {
float rf_uhd_get_rssi(void *h) { float rf_uhd_get_rssi(void *h) {
rf_uhd_handler_t *handler = (rf_uhd_handler_t*) h; rf_uhd_handler_t *handler = (rf_uhd_handler_t*) h;
if (handler->has_rssi) { if (handler->has_rssi) {
double val_out; double val_out;
uhd_usrp_get_rx_sensor(handler->usrp, "rssi", 0, &handler->rssi_value);
uhd_sensor_value_to_realnum(handler->rssi_value, &val_out); uhd_sensor_value_handle rssi_value;
return val_out; uhd_sensor_value_make_from_realnum(&rssi_value, "rssi", 0, "dBm", "%f");
uhd_usrp_get_rx_sensor(handler->usrp, "rssi", 0, &rssi_value);
uhd_sensor_value_to_realnum(rssi_value, &val_out);
uhd_sensor_value_free(&rssi_value);
return val_out;
} else { } else {
return 0.0; return 0.0;
} }
@ -490,10 +494,7 @@ int rf_uhd_open_multi(char *args, void **h, uint32_t nof_channels)
} }
handler->has_rssi = get_has_rssi(handler); handler->has_rssi = get_has_rssi(handler);
if (handler->has_rssi) {
uhd_sensor_value_make_from_realnum(&handler->rssi_value, "rssi", 0, "dBm", "%f");
}
size_t channel[4] = {0, 1, 2, 3}; size_t channel[4] = {0, 1, 2, 3};
uhd_stream_args_t stream_args = { uhd_stream_args_t stream_args = {
.cpu_format = "fc32", .cpu_format = "fc32",
@ -570,10 +571,7 @@ int rf_uhd_close(void *h)
uhd_rx_metadata_free(&handler->rx_md_first); uhd_rx_metadata_free(&handler->rx_md_first);
uhd_rx_metadata_free(&handler->rx_md); uhd_rx_metadata_free(&handler->rx_md);
uhd_meta_range_free(&handler->rx_gain_range); uhd_meta_range_free(&handler->rx_gain_range);
if (handler->has_rssi) { handler->async_thread_running = false;
uhd_sensor_value_free(&handler->rssi_value);
}
handler->async_thread_running = false;
pthread_join(handler->async_thread, NULL); pthread_join(handler->async_thread, NULL);
uhd_tx_streamer_free(&handler->tx_stream); uhd_tx_streamer_free(&handler->tx_stream);