diff --git a/filters/adrv9002/lte_10_lvds_nco_api_68_10_1.json b/filters/adrv9002/lte_10_lvds_nco_api_68_13_7.json similarity index 97% rename from filters/adrv9002/lte_10_lvds_nco_api_68_10_1.json rename to filters/adrv9002/lte_10_lvds_nco_api_68_13_7.json index a5a761107..732795999 100644 --- a/filters/adrv9002/lte_10_lvds_nco_api_68_10_1.json +++ b/filters/adrv9002/lte_10_lvds_nco_api_68_13_7.json @@ -1182,7 +1182,7 @@ "mcsMode": 0, "mcsInterfaceType": 0, "adcTypeMonitor": 1, - "pllLockTime_us": 750, + "pllLockTime_us": 380, "pllPhaseSyncWait_us": 0, "pllModulus": { "modulus": [ 8388593, 8388593, 8388593, 8388593, 8388593 ], diff --git a/filters/adrv9002/lte_40_lvds_api_68_10_1.stream b/filters/adrv9002/lte_10_lvds_nco_api_68_13_7.stream similarity index 79% rename from filters/adrv9002/lte_40_lvds_api_68_10_1.stream rename to filters/adrv9002/lte_10_lvds_nco_api_68_13_7.stream index a1bfa376f..79bfb3e61 100644 Binary files a/filters/adrv9002/lte_40_lvds_api_68_10_1.stream and b/filters/adrv9002/lte_10_lvds_nco_api_68_13_7.stream differ diff --git a/filters/adrv9002/lte_20_lvds_api_68_10_1.json b/filters/adrv9002/lte_20_lvds_api_68_13_7.json similarity index 97% rename from filters/adrv9002/lte_20_lvds_api_68_10_1.json rename to filters/adrv9002/lte_20_lvds_api_68_13_7.json index 52201cede..281e164e8 100644 --- a/filters/adrv9002/lte_20_lvds_api_68_10_1.json +++ b/filters/adrv9002/lte_20_lvds_api_68_13_7.json @@ -1182,7 +1182,7 @@ "mcsMode": 0, "mcsInterfaceType": 0, "adcTypeMonitor": 1, - "pllLockTime_us": 750, + "pllLockTime_us": 380, "pllPhaseSyncWait_us": 0, "pllModulus": { "modulus": [ 8388593, 8388593, 8388593, 8388593, 8388593 ], diff --git a/filters/adrv9002/lte_10_lvds_nco_api_68_10_1.stream b/filters/adrv9002/lte_20_lvds_api_68_13_7.stream similarity index 79% rename from filters/adrv9002/lte_10_lvds_nco_api_68_10_1.stream rename to filters/adrv9002/lte_20_lvds_api_68_13_7.stream index a1bfa376f..79bfb3e61 100644 Binary files a/filters/adrv9002/lte_10_lvds_nco_api_68_10_1.stream and b/filters/adrv9002/lte_20_lvds_api_68_13_7.stream differ diff --git a/filters/adrv9002/lte_40_lvds_api_68_10_1.json b/filters/adrv9002/lte_40_lvds_api_68_13_7.json similarity index 97% rename from filters/adrv9002/lte_40_lvds_api_68_10_1.json rename to filters/adrv9002/lte_40_lvds_api_68_13_7.json index d1e125942..9c87032b0 100644 --- a/filters/adrv9002/lte_40_lvds_api_68_10_1.json +++ b/filters/adrv9002/lte_40_lvds_api_68_13_7.json @@ -1182,7 +1182,7 @@ "mcsMode": 0, "mcsInterfaceType": 0, "adcTypeMonitor": 1, - "pllLockTime_us": 750, + "pllLockTime_us": 380, "pllPhaseSyncWait_us": 0, "pllModulus": { "modulus": [ 8388593, 8388593, 8388593, 8388593, 8388593 ], diff --git a/filters/adrv9002/lte_5_cmos_api_68_10_1.stream b/filters/adrv9002/lte_40_lvds_api_68_13_7.stream similarity index 79% rename from filters/adrv9002/lte_5_cmos_api_68_10_1.stream rename to filters/adrv9002/lte_40_lvds_api_68_13_7.stream index a1bfa376f..79bfb3e61 100644 Binary files a/filters/adrv9002/lte_5_cmos_api_68_10_1.stream and b/filters/adrv9002/lte_40_lvds_api_68_13_7.stream differ diff --git a/filters/adrv9002/lte_5_cmos_api_68_10_1.json b/filters/adrv9002/lte_5_cmos_api_68_13_7.json similarity index 97% rename from filters/adrv9002/lte_5_cmos_api_68_10_1.json rename to filters/adrv9002/lte_5_cmos_api_68_13_7.json index 576145065..3cde92d07 100644 --- a/filters/adrv9002/lte_5_cmos_api_68_10_1.json +++ b/filters/adrv9002/lte_5_cmos_api_68_13_7.json @@ -1182,7 +1182,7 @@ "mcsMode": 0, "mcsInterfaceType": 0, "adcTypeMonitor": 1, - "pllLockTime_us": 750, + "pllLockTime_us": 380, "pllPhaseSyncWait_us": 0, "pllModulus": { "modulus": [ 8388593, 8388593, 8388593, 8388593, 8388593 ], diff --git a/filters/adrv9002/lte_20_lvds_api_68_10_1.stream b/filters/adrv9002/lte_5_cmos_api_68_13_7.stream similarity index 79% rename from filters/adrv9002/lte_20_lvds_api_68_10_1.stream rename to filters/adrv9002/lte_5_cmos_api_68_13_7.stream index a1bfa376f..79bfb3e61 100644 Binary files a/filters/adrv9002/lte_20_lvds_api_68_10_1.stream and b/filters/adrv9002/lte_5_cmos_api_68_13_7.stream differ diff --git a/iio_widget.c b/iio_widget.c index 5739dc5a5..9f805f380 100644 --- a/iio_widget.c +++ b/iio_widget.c @@ -495,6 +495,18 @@ static gboolean iio_widget_signal_unblock(gpointer arg) return FALSE; } +void iio_widget_update_value(struct iio_widget *widget, const char *ensm, size_t len) +{ + guint sig = 0; + + if (widget->sig_handler_data) + sig = g_signal_handlers_block_matched(G_OBJECT(widget->widget), G_SIGNAL_MATCH_DATA, + 0, 0, NULL, NULL, widget->sig_handler_data); + widget->update_value(widget, ensm, len); + + if (sig) + g_timeout_add(1, (GSourceFunc)iio_widget_signal_unblock, widget); +} /* * The point of these is that when we update a widget, we can receive a different value from the * iio dev from the one in the GUI (eg: a failed call to widget->save() or an autonomous update). diff --git a/iio_widget.h b/iio_widget.h index 987195b01..e0cc8d3c0 100644 --- a/iio_widget.h +++ b/iio_widget.h @@ -44,6 +44,7 @@ void iio_make_widget_update_signal_based(struct iio_widget *widget, GCallback ha void iio_update_widgets(struct iio_widget *widgets, unsigned int num_widgets); void iio_update_widgets_block_signals_by_data(struct iio_widget *widgets, unsigned int num_widgets); void iio_widget_update(struct iio_widget *widget); +void iio_widget_update_value(struct iio_widget *widget, const char *ensm, size_t len); void iio_update_widgets_of_device(struct iio_widget *widgets, unsigned int num_widgets, struct iio_device *dev); void iio_widget_update_block_signals_by_data(struct iio_widget *widget); diff --git a/plugins/adrv9002.c b/plugins/adrv9002.c index c66c2a353..1000c9237 100644 --- a/plugins/adrv9002.c +++ b/plugins/adrv9002.c @@ -489,7 +489,7 @@ static void update_label(const struct adrv9002_gtklabel *label) gtk_label_set_text(label->labels, attr_val); } -static void update_special_widgets(struct adrv9002_common *chann) +static void update_special_widgets(struct adrv9002_common *chann, const char *ensm, size_t len) { char *gain_ctl = gtk_combo_box_text_get_active_text( GTK_COMBO_BOX_TEXT(chann->gain_ctrl.widget)); @@ -499,8 +499,8 @@ static void update_special_widgets(struct adrv9002_common *chann) if (gain_ctl && strcmp(gain_ctl, "spi")) iio_widget_update_block_signals_by_data(&chann->gain); - if (port_en && strcmp(port_en, "spi")) - iio_widget_update_block_signals_by_data(&chann->ensm); + if (port_en && strcmp(port_en, "spi") && ensm) + iio_widget_update_value(&chann->ensm, ensm, len); g_free(gain_ctl); g_free(port_en); @@ -513,13 +513,25 @@ static void update_special_rx_widgets(struct adrv9002_rx *rx, const int n_widget for (i = 0; i < n_widgets; i++) { char *digital_gain = gtk_combo_box_text_get_active_text( GTK_COMBO_BOX_TEXT(rx[i].digital_gain_ctl.widget)); + char ensm[32] = {0}; if (!rx[i].rx.enabled) goto nex_widget; - update_label(&rx[i].rssi); + /* + * There was a change in the driver API where an error is returned if we try to read + * the RSSI level if the channel is not enabled. Hence, make sure we only update it + * if the channel is enabled. + */ + if (iio_channel_attr_read(rx[i].rx.ensm.chn, rx[i].rx.ensm.attr_name, ensm, + sizeof(ensm)) > 0 && !strcmp(ensm, "rf_enabled")) + update_label(&rx[i].rssi); update_label(&rx[i].decimated_power); - update_special_widgets(&rx[i].rx); + /* + * Pass in ensm as we already got it and so no need for another possible + * remote call into the device. + */ + update_special_widgets(&rx[i].rx, ensm, sizeof(ensm)); if (digital_gain && strstr(digital_gain, "automatic")) iio_widget_update_block_signals_by_data(&rx[i].intf_gain); @@ -536,7 +548,7 @@ static void update_special_tx_widgets(struct adrv9002_common *tx, const int n_wi if (!tx[i].enabled) continue; - update_special_widgets(&tx[i]); + update_special_widgets(&tx[i], NULL, 0); } }