From 669794ac21e40b6aa4a09929c752e5ebb239ae1f Mon Sep 17 00:00:00 2001 From: Ramakrishnan Muthukrishnan Date: Tue, 14 Nov 2023 21:57:18 +0530 Subject: [PATCH] clang-format radio.c --- radio.c | 3940 ++++++++++++++++++++++++++-------------------------- receiver.c | 1 - 2 files changed, 1969 insertions(+), 1972 deletions(-) diff --git a/radio.c b/radio.c index 2ddbfce..556efbf 100644 --- a/radio.c +++ b/radio.c @@ -36,12 +36,16 @@ #include "audio.h" #include "dac.h" #include "discovered.h" -//#include "discovery.h" +// #include "discovery.h" +#include "actions.h" #include "agc.h" #include "band.h" #include "channel.h" +#include "ext.h" #include "filter.h" +#include "gpio.h" #include "main.h" +#include "meter.h" #include "mode.h" #include "new_menu.h" #include "new_protocol.h" @@ -49,22 +53,18 @@ #include "property.h" #include "radio.h" #include "receiver.h" -#include "store.h" -#include "transmitter.h" -#include "actions.h" -#include "ext.h" -#include "gpio.h" -#include "meter.h" #include "rigctl.h" #include "rx_panadapter.h" +#include "screen.h" #include "sliders.h" +#include "store.h" #include "toolbar.h" +#include "transmitter.h" #include "tx_panadapter.h" #include "vfo.h" #include "vox.h" #include "waterfall.h" #include "zoompan.h" -#include "screen.h" #ifdef LOCALCW #include "iambic.h" @@ -98,7 +98,6 @@ // toolbar height (optional) 30 // zoom/pan height (optional) 50 - #ifdef MIDI gboolean midi_enabled; #endif @@ -237,7 +236,7 @@ int cw_keyer_weight = 50; // 0-100 int cw_keyer_spacing = 0; // 0=on 1=off int cw_keyer_internal = 1; // 0=external 1=internal int cw_keyer_midi = 0; // 0 = (external) midi keyer - // disabled, 1 = enabled + // disabled, 1 = enabled int cw_keyer_sidetone_volume = 50; // 0-127 int cw_keyer_ptt_delay = 20; // 0-255ms int cw_keyer_hang_time = 500; // ms @@ -354,1206 +353,1214 @@ gint sequence_errors = 0; gint rx_height; void radio_stop() { - if (can_transmit) { - g_print("radio_stop: TX: CloseChannel: %d\n", transmitter->id); - CloseChannel(transmitter->id); - } - set_displaying(receiver[0], 0); - g_print("radio_stop: RX0: CloseChannel: %d\n", receiver[0]->id); - CloseChannel(receiver[0]->id); - set_displaying(receiver[1], 0); - g_print("radio_stop: RX1: CloseChannel: %d\n", receiver[1]->id); - CloseChannel(receiver[1]->id); + if (can_transmit) { + g_print("radio_stop: TX: CloseChannel: %d\n", transmitter->id); + CloseChannel(transmitter->id); + } + set_displaying(receiver[0], 0); + g_print("radio_stop: RX0: CloseChannel: %d\n", receiver[0]->id); + CloseChannel(receiver[0]->id); + set_displaying(receiver[1], 0); + g_print("radio_stop: RX1: CloseChannel: %d\n", receiver[1]->id); + CloseChannel(receiver[1]->id); } void reconfigure_radio() { - int i; - int y; - g_print("reconfigure_radio: receivers=%d\n", receivers); - rx_height = display_height - VFO_HEIGHT; - if (display_zoompan) { - rx_height -= ZOOMPAN_HEIGHT; - } - if (display_sliders) { - rx_height -= SLIDERS_HEIGHT; - } - if (display_toolbar) { - rx_height -= TOOLBAR_HEIGHT; - } - - y = VFO_HEIGHT; - for (i = 0; i < receivers; i++) { - reconfigure_receiver(receiver[i], rx_height / receivers); - gtk_fixed_move(GTK_FIXED(fixed), receiver[i]->panel, 0, y); - receiver[i]->x = 0; - receiver[i]->y = y; - y += rx_height / receivers; - } - - if (display_zoompan) { - if (zoompan == NULL) { - zoompan = zoompan_init(display_width, ZOOMPAN_HEIGHT); - gtk_fixed_put(GTK_FIXED(fixed), zoompan, 0, y); - } else { - gtk_fixed_move(GTK_FIXED(fixed), zoompan, 0, y); + int i; + int y; + g_print("reconfigure_radio: receivers=%d\n", receivers); + rx_height = display_height - VFO_HEIGHT; + if (display_zoompan) { + rx_height -= ZOOMPAN_HEIGHT; + } + if (display_sliders) { + rx_height -= SLIDERS_HEIGHT; } - gtk_widget_show_all(zoompan); - y += ZOOMPAN_HEIGHT; - } else { - if (zoompan != NULL) { - gtk_container_remove(GTK_CONTAINER(fixed), zoompan); - zoompan = NULL; + if (display_toolbar) { + rx_height -= TOOLBAR_HEIGHT; } - } - if (display_sliders) { - if (sliders == NULL) { - sliders = sliders_init(display_width, SLIDERS_HEIGHT); - gtk_fixed_put(GTK_FIXED(fixed), sliders, 0, y); - } else { - gtk_fixed_move(GTK_FIXED(fixed), sliders, 0, y); - } - gtk_widget_show_all( - sliders); // ... this shows both C25 and Alex ATT/Preamp sliders - att_type_changed(); // ... and this hides the „wrong“ ones. - y += SLIDERS_HEIGHT; - } else { - if (sliders != NULL) { - gtk_container_remove(GTK_CONTAINER(fixed), sliders); - sliders = NULL; - } - } - - if (display_toolbar) { - if (toolbar == NULL) { - toolbar = toolbar_init(display_width, TOOLBAR_HEIGHT, top_window); - gtk_fixed_put(GTK_FIXED(fixed), toolbar, 0, y); + y = VFO_HEIGHT; + for (i = 0; i < receivers; i++) { + reconfigure_receiver(receiver[i], rx_height / receivers); + gtk_fixed_move(GTK_FIXED(fixed), receiver[i]->panel, 0, y); + receiver[i]->x = 0; + receiver[i]->y = y; + y += rx_height / receivers; + } + + if (display_zoompan) { + if (zoompan == NULL) { + zoompan = zoompan_init(display_width, ZOOMPAN_HEIGHT); + gtk_fixed_put(GTK_FIXED(fixed), zoompan, 0, y); + } else { + gtk_fixed_move(GTK_FIXED(fixed), zoompan, 0, y); + } + gtk_widget_show_all(zoompan); + y += ZOOMPAN_HEIGHT; } else { - gtk_fixed_move(GTK_FIXED(fixed), toolbar, 0, y); + if (zoompan != NULL) { + gtk_container_remove(GTK_CONTAINER(fixed), zoompan); + zoompan = NULL; + } } - gtk_widget_show_all(toolbar); - } else { - if (toolbar != NULL) { - gtk_container_remove(GTK_CONTAINER(fixed), toolbar); - toolbar = NULL; + + if (display_sliders) { + if (sliders == NULL) { + sliders = sliders_init(display_width, SLIDERS_HEIGHT); + gtk_fixed_put(GTK_FIXED(fixed), sliders, 0, y); + } else { + gtk_fixed_move(GTK_FIXED(fixed), sliders, 0, y); + } + gtk_widget_show_all( + sliders); // ... this shows both C25 and Alex ATT/Preamp sliders + att_type_changed(); // ... and this hides the „wrong“ ones. + y += SLIDERS_HEIGHT; + } else { + if (sliders != NULL) { + gtk_container_remove(GTK_CONTAINER(fixed), sliders); + sliders = NULL; + } } - } - if (can_transmit) { - if (!duplex) { - reconfigure_transmitter(transmitter, display_width, rx_height); + if (display_toolbar) { + if (toolbar == NULL) { + toolbar = toolbar_init(display_width, TOOLBAR_HEIGHT, top_window); + gtk_fixed_put(GTK_FIXED(fixed), toolbar, 0, y); + } else { + gtk_fixed_move(GTK_FIXED(fixed), toolbar, 0, y); + } + gtk_widget_show_all(toolbar); + } else { + if (toolbar != NULL) { + gtk_container_remove(GTK_CONTAINER(fixed), toolbar); + toolbar = NULL; + } } + + if (can_transmit) { + if (!duplex) { + reconfigure_transmitter(transmitter, display_width, rx_height); + } #ifdef MIDI - if (cw_keyer_midi == 1) { - midi_keyer_update(); - } + if (cw_keyer_midi == 1) { + midi_keyer_update(); + } #endif - } + } } static gboolean minimize_cb(GtkWidget *widget, GdkEventButton *event, gpointer data) { - gtk_window_iconify(GTK_WINDOW(top_window)); - return TRUE; + gtk_window_iconify(GTK_WINDOW(top_window)); + return TRUE; } static gboolean menu_cb(GtkWidget *widget, GdkEventButton *event, gpointer data) { - new_menu(); - return TRUE; + new_menu(); + return TRUE; } static void create_visual() { - int y = 0; - - fixed = gtk_fixed_new(); - g_object_ref(grid); // so it does not get deleted - gtk_container_remove(GTK_CONTAINER(top_window), grid); - gtk_container_add(GTK_CONTAINER(top_window), fixed); - - // g_print("radio: vfo_init\n"); - vfo_panel = vfo_init(VFO_WIDTH, VFO_HEIGHT, top_window); - gtk_fixed_put(GTK_FIXED(fixed), vfo_panel, 0, y); - - // g_print("radio: meter_init\n"); - meter = meter_init(METER_WIDTH, METER_HEIGHT, top_window); - gtk_fixed_put(GTK_FIXED(fixed), meter, VFO_WIDTH, y); - - GtkWidget *minimize_b = gtk_button_new_with_label("Hide"); - gtk_widget_override_font( - minimize_b, pango_font_description_from_string("FreeSans Bold 8")); - gtk_widget_set_size_request(minimize_b, MENU_WIDTH, MENU_HEIGHT); - g_signal_connect(minimize_b, "button-press-event", G_CALLBACK(minimize_cb), - NULL); - gtk_fixed_put(GTK_FIXED(fixed), minimize_b, VFO_WIDTH + METER_WIDTH, y); - y += MENU_HEIGHT; - - GtkWidget *menu_b = gtk_button_new_with_label("Menu"); - gtk_widget_override_font( - menu_b, pango_font_description_from_string("FreeSans Bold 8")); - gtk_widget_set_size_request(menu_b, MENU_WIDTH, MENU_HEIGHT); - g_signal_connect(menu_b, "button-press-event", G_CALLBACK(menu_cb), NULL); - gtk_fixed_put(GTK_FIXED(fixed), menu_b, VFO_WIDTH + METER_WIDTH, y); - y += MENU_HEIGHT; - - GdkColor color_bg; - gdk_color_parse("black", &color_bg); - gtk_widget_modify_bg(GTK_WIDGET(minimize_b), GTK_STATE_NORMAL, &color_bg); - gtk_widget_modify_bg(GTK_WIDGET(menu_b), GTK_STATE_NORMAL, &color_bg); - - gtk_button_set_relief(GTK_BUTTON(minimize_b), GTK_RELIEF_NONE); - gtk_button_set_relief(GTK_BUTTON(menu_b), GTK_RELIEF_NONE); - - rx_height = display_height - VFO_HEIGHT; - if (display_zoompan) { - rx_height -= ZOOMPAN_HEIGHT; - } - if (display_sliders) { - rx_height -= SLIDERS_HEIGHT; - } - if (display_toolbar) { - rx_height -= TOOLBAR_HEIGHT; - } - - // - // To be on the safe side, we create ALL receiver panels here - // If upon startup, we only should display one panel, we do the switch below - // - for (int i = 0; i < RECEIVERS; i++) { + int y = 0; + + fixed = gtk_fixed_new(); + g_object_ref(grid); // so it does not get deleted + gtk_container_remove(GTK_CONTAINER(top_window), grid); + gtk_container_add(GTK_CONTAINER(top_window), fixed); + + // g_print("radio: vfo_init\n"); + vfo_panel = vfo_init(VFO_WIDTH, VFO_HEIGHT, top_window); + gtk_fixed_put(GTK_FIXED(fixed), vfo_panel, 0, y); + + // g_print("radio: meter_init\n"); + meter = meter_init(METER_WIDTH, METER_HEIGHT, top_window); + gtk_fixed_put(GTK_FIXED(fixed), meter, VFO_WIDTH, y); + + GtkWidget *minimize_b = gtk_button_new_with_label("Hide"); + gtk_widget_override_font( + minimize_b, pango_font_description_from_string("FreeSans Bold 8")); + gtk_widget_set_size_request(minimize_b, MENU_WIDTH, MENU_HEIGHT); + g_signal_connect(minimize_b, "button-press-event", G_CALLBACK(minimize_cb), + NULL); + gtk_fixed_put(GTK_FIXED(fixed), minimize_b, VFO_WIDTH + METER_WIDTH, y); + y += MENU_HEIGHT; + + GtkWidget *menu_b = gtk_button_new_with_label("Menu"); + gtk_widget_override_font( + menu_b, pango_font_description_from_string("FreeSans Bold 8")); + gtk_widget_set_size_request(menu_b, MENU_WIDTH, MENU_HEIGHT); + g_signal_connect(menu_b, "button-press-event", G_CALLBACK(menu_cb), NULL); + gtk_fixed_put(GTK_FIXED(fixed), menu_b, VFO_WIDTH + METER_WIDTH, y); + y += MENU_HEIGHT; + + GdkColor color_bg; + gdk_color_parse("black", &color_bg); + gtk_widget_modify_bg(GTK_WIDGET(minimize_b), GTK_STATE_NORMAL, &color_bg); + gtk_widget_modify_bg(GTK_WIDGET(menu_b), GTK_STATE_NORMAL, &color_bg); + + gtk_button_set_relief(GTK_BUTTON(minimize_b), GTK_RELIEF_NONE); + gtk_button_set_relief(GTK_BUTTON(menu_b), GTK_RELIEF_NONE); + + rx_height = display_height - VFO_HEIGHT; + if (display_zoompan) { + rx_height -= ZOOMPAN_HEIGHT; + } + if (display_sliders) { + rx_height -= SLIDERS_HEIGHT; + } + if (display_toolbar) { + rx_height -= TOOLBAR_HEIGHT; + } + + // + // To be on the safe side, we create ALL receiver panels here + // If upon startup, we only should display one panel, we do the switch below + // + for (int i = 0; i < RECEIVERS; i++) { #ifdef CLIENT_SERVER - if (radio_is_remote) { - receiver_create_remote(receiver[i]); - } else { + if (radio_is_remote) { + receiver_create_remote(receiver[i]); + } else { #endif - receiver[i] = create_receiver(i, buffer_size, fft_size, display_width, - updates_per_second, display_width, - rx_height / RECEIVERS); - setSquelch(receiver[i]); + receiver[i] = create_receiver(i, buffer_size, fft_size, + display_width, updates_per_second, + display_width, rx_height / RECEIVERS); + setSquelch(receiver[i]); #ifdef CLIENT_SERVER - } + } #endif - receiver[i]->x = 0; - receiver[i]->y = y; - receiver[i]->active_vfo = VFO_A; - // Upon startup, if RIT or CTUN is active, tell WDSP. + receiver[i]->x = 0; + receiver[i]->y = y; + receiver[i]->active_vfo = VFO_A; + // Upon startup, if RIT or CTUN is active, tell WDSP. #ifdef CLIENT_SERVER - if (!radio_is_remote) { + if (!radio_is_remote) { #endif - set_displaying(receiver[i], 1); - set_offset(receiver[i], vfo[i].offset); + set_displaying(receiver[i], 1); + set_offset(receiver[i], vfo[i].offset); #ifdef CLIENT_SERVER - } + } #endif - gtk_fixed_put(GTK_FIXED(fixed), receiver[i]->panel, 0, y); - g_object_ref((gpointer)receiver[i]->panel); - y += rx_height / RECEIVERS; - } + gtk_fixed_put(GTK_FIXED(fixed), receiver[i]->panel, 0, y); + g_object_ref((gpointer)receiver[i]->panel); + y += rx_height / RECEIVERS; + } - // - // Sanity check: in old protocol, all receivers must have the same sample rate - // - if ((protocol == ORIGINAL_PROTOCOL) && (RECEIVERS == 2) && - (receiver[0]->sample_rate != receiver[1]->sample_rate)) { - receiver[1]->sample_rate = receiver[0]->sample_rate; - } + // + // Sanity check: in old protocol, all receivers must have the same sample + // rate + // + if ((protocol == ORIGINAL_PROTOCOL) && (RECEIVERS == 2) && + (receiver[0]->sample_rate != receiver[1]->sample_rate)) { + receiver[1]->sample_rate = receiver[0]->sample_rate; + } - active_receiver = receiver[0]; + active_receiver = receiver[0]; // TEMP #ifdef CLIENT_SERVER - if (!radio_is_remote) { + if (!radio_is_remote) { #endif - // g_print("Create transmitter\n"); - if (can_transmit) { - if (duplex) { - transmitter = create_transmitter(CHANNEL_TX, buffer_size, fft_size, - updates_per_second, display_width / 4, - display_height / 2); - } else { - int tx_height = display_height - VFO_HEIGHT; - if (display_zoompan) - tx_height -= ZOOMPAN_HEIGHT; - if (display_sliders) - tx_height -= SLIDERS_HEIGHT; - if (display_toolbar) - tx_height -= TOOLBAR_HEIGHT; - transmitter = - create_transmitter(CHANNEL_TX, buffer_size, fft_size, - updates_per_second, display_width, tx_height); - } - transmitter->x = 0; - transmitter->y = VFO_HEIGHT; - - calcDriveLevel(); + // g_print("Create transmitter\n"); + if (can_transmit) { + if (duplex) { + transmitter = create_transmitter( + CHANNEL_TX, buffer_size, fft_size, updates_per_second, + display_width / 4, display_height / 2); + } else { + int tx_height = display_height - VFO_HEIGHT; + if (display_zoompan) + tx_height -= ZOOMPAN_HEIGHT; + if (display_sliders) + tx_height -= SLIDERS_HEIGHT; + if (display_toolbar) + tx_height -= TOOLBAR_HEIGHT; + transmitter = create_transmitter(CHANNEL_TX, buffer_size, + fft_size, updates_per_second, + display_width, tx_height); + } + transmitter->x = 0; + transmitter->y = VFO_HEIGHT; + + calcDriveLevel(); #ifdef PURESIGNAL - if (protocol == NEW_PROTOCOL || protocol == ORIGINAL_PROTOCOL) { - tx_set_ps_sample_rate(transmitter, protocol == NEW_PROTOCOL - ? 192000 - : active_receiver->sample_rate); - receiver[PS_TX_FEEDBACK] = create_pure_signal_receiver( - PS_TX_FEEDBACK, buffer_size, - protocol == ORIGINAL_PROTOCOL ? active_receiver->sample_rate - : 192000, - display_width); - receiver[PS_RX_FEEDBACK] = create_pure_signal_receiver( - PS_RX_FEEDBACK, buffer_size, - protocol == ORIGINAL_PROTOCOL ? active_receiver->sample_rate - : 192000, - display_width); - switch (protocol) { - case NEW_PROTOCOL: - pk = 0.2899; - break; - case ORIGINAL_PROTOCOL: - switch (device) { - case DEVICE_HERMES_LITE2: - pk = 0.2300; - break; - default: - pk = 0.4067; - break; - } - } - SetPSHWPeak(transmitter->id, pk); - } + if (protocol == NEW_PROTOCOL || protocol == ORIGINAL_PROTOCOL) { + tx_set_ps_sample_rate(transmitter, + protocol == NEW_PROTOCOL + ? 192000 + : active_receiver->sample_rate); + receiver[PS_TX_FEEDBACK] = create_pure_signal_receiver( + PS_TX_FEEDBACK, buffer_size, + protocol == ORIGINAL_PROTOCOL ? active_receiver->sample_rate + : 192000, + display_width); + receiver[PS_RX_FEEDBACK] = create_pure_signal_receiver( + PS_RX_FEEDBACK, buffer_size, + protocol == ORIGINAL_PROTOCOL ? active_receiver->sample_rate + : 192000, + display_width); + switch (protocol) { + case NEW_PROTOCOL: + pk = 0.2899; + break; + case ORIGINAL_PROTOCOL: + switch (device) { + case DEVICE_HERMES_LITE2: + pk = 0.2300; + break; + default: + pk = 0.4067; + break; + } + } + SetPSHWPeak(transmitter->id, pk); + } #endif - } + } #ifdef CLIENT_SERVER - } + } #endif #ifdef AUDIO_WATERFALL - audio_waterfall = audio_waterfall_init(200, 100); - gtk_fixed_put(GTK_FIXED(fixed), audio_waterfall, 0, VFO_HEIGHT + 20); + audio_waterfall = audio_waterfall_init(200, 100); + gtk_fixed_put(GTK_FIXED(fixed), audio_waterfall, 0, VFO_HEIGHT + 20); #endif - gboolean init_gpio = FALSE; + gboolean init_gpio = FALSE; #ifdef LOCALCW - init_gpio = TRUE; + init_gpio = TRUE; #endif #ifdef PTT - init_gpio = TRUE; + init_gpio = TRUE; #endif #ifdef GPIO - init_gpio = TRUE; + init_gpio = TRUE; #endif - if (init_gpio) { + if (init_gpio) { #ifdef GPIO - if (gpio_init() < 0) { - g_print("GPIO failed to initialize\n"); - } + if (gpio_init() < 0) { + g_print("GPIO failed to initialize\n"); + } #endif - } + } #ifdef LOCALCW - // init local keyer if enabled - if (cw_keyer_internal == 0) { - g_print("Initialize keyer.....\n"); - keyer_update(); - } + // init local keyer if enabled + if (cw_keyer_internal == 0) { + g_print("Initialize keyer.....\n"); + keyer_update(); + } #ifdef MIDI - if (cw_keyer_midi == 1) { - midi_keyer_update(); - } + if (cw_keyer_midi == 1) { + midi_keyer_update(); + } #endif #endif #ifdef CLIENT_SERVER - if (!radio_is_remote) { + if (!radio_is_remote) { #endif - switch (protocol) { - case ORIGINAL_PROTOCOL: - old_protocol_init(0, display_width, receiver[0]->sample_rate); - break; - case NEW_PROTOCOL: - new_protocol_init(display_width); - break; - } + switch (protocol) { + case ORIGINAL_PROTOCOL: + old_protocol_init(0, display_width, receiver[0]->sample_rate); + break; + case NEW_PROTOCOL: + new_protocol_init(display_width); + break; + } #ifdef CLIENT_SERVER - } + } #endif - if (display_zoompan) { - zoompan = zoompan_init(display_width, ZOOMPAN_HEIGHT); - gtk_fixed_put(GTK_FIXED(fixed), zoompan, 0, y); - y += ZOOMPAN_HEIGHT; - } - - if (display_sliders) { - // g_print("create sliders\n"); - sliders = sliders_init(display_width, SLIDERS_HEIGHT); - gtk_fixed_put(GTK_FIXED(fixed), sliders, 0, y); - y += SLIDERS_HEIGHT; - } - - if (display_toolbar) { - toolbar = toolbar_init(display_width, TOOLBAR_HEIGHT, top_window); - gtk_fixed_put(GTK_FIXED(fixed), toolbar, 0, y); - y += TOOLBAR_HEIGHT; - } - - g_print("create_visual: receivers=%d RECEIVERS=%d\n", receivers, RECEIVERS); - if (receivers != RECEIVERS) { - int r = receivers; - receivers = RECEIVERS; - g_print( - "create_visual: calling radio_change_receivers: receivers=%d r=%d\n", - receivers, r); - radio_change_receivers(r); - } - - // gtk_widget_show_all (fixed); - gtk_widget_show_all(top_window); + if (display_zoompan) { + zoompan = zoompan_init(display_width, ZOOMPAN_HEIGHT); + gtk_fixed_put(GTK_FIXED(fixed), zoompan, 0, y); + y += ZOOMPAN_HEIGHT; + } + + if (display_sliders) { + // g_print("create sliders\n"); + sliders = sliders_init(display_width, SLIDERS_HEIGHT); + gtk_fixed_put(GTK_FIXED(fixed), sliders, 0, y); + y += SLIDERS_HEIGHT; + } + + if (display_toolbar) { + toolbar = toolbar_init(display_width, TOOLBAR_HEIGHT, top_window); + gtk_fixed_put(GTK_FIXED(fixed), toolbar, 0, y); + y += TOOLBAR_HEIGHT; + } + + g_print("create_visual: receivers=%d RECEIVERS=%d\n", receivers, RECEIVERS); + if (receivers != RECEIVERS) { + int r = receivers; + receivers = RECEIVERS; + g_print("create_visual: calling radio_change_receivers: receivers=%d " + "r=%d\n", + receivers, r); + radio_change_receivers(r); + } + + // gtk_widget_show_all (fixed); + gtk_widget_show_all(top_window); } void start_radio() { - int i; - // g_print("start_radio: selected radio=%p device=%d\n",radio,radio->device); - gdk_window_set_cursor(gtk_widget_get_window(top_window), - gdk_cursor_new(GDK_WATCH)); - - protocol = radio->protocol; - device = radio->device; - - // set the default power output and max drive value - drive_max = 100.0; - switch (protocol) { - case ORIGINAL_PROTOCOL: - switch (device) { - case DEVICE_METIS: - pa_power = PA_1W; - break; - case DEVICE_HERMES: - pa_power = PA_100W; - break; - case DEVICE_GRIFFIN: - pa_power = PA_100W; - break; - case DEVICE_ANGELIA: - pa_power = PA_100W; - break; - case DEVICE_ORION: - pa_power = PA_100W; - break; - case DEVICE_HERMES_LITE: - pa_power = PA_1W; - break; - case DEVICE_HERMES_LITE2: - pa_power = PA_10W; - break; - case DEVICE_ORION2: - pa_power = PA_200W; - break; - } - break; - case NEW_PROTOCOL: - switch (device) { - case NEW_DEVICE_ATLAS: - pa_power = PA_1W; - break; - case NEW_DEVICE_HERMES: - case NEW_DEVICE_HERMES2: - pa_power = PA_100W; - break; - case NEW_DEVICE_ANGELIA: - pa_power = PA_100W; - break; - case NEW_DEVICE_ORION: - pa_power = PA_100W; - break; - case NEW_DEVICE_HERMES_LITE: - pa_power = PA_1W; - break; - case NEW_DEVICE_HERMES_LITE2: - pa_power = PA_10W; - break; - case NEW_DEVICE_ORION2: - pa_power = PA_200W; - break; - } - break; - } - - switch (pa_power) { - case PA_1W: - for (i = 0; i < 11; i++) { - pa_trim[i] = i * 100; - } - break; - case PA_10W: - for (i = 0; i < 11; i++) { - pa_trim[i] = i; - } - break; - case PA_30W: - for (i = 0; i < 11; i++) { - pa_trim[i] = i * 3; - } - break; - case PA_50W: - for (i = 0; i < 11; i++) { - pa_trim[i] = i * 5; - } - break; - case PA_100W: - for (i = 0; i < 11; i++) { - pa_trim[i] = i * 10; - } - break; - case PA_200W: - for (i = 0; i < 11; i++) { - pa_trim[i] = i * 20; - } - break; - case PA_500W: - for (i = 0; i < 11; i++) { - pa_trim[i] = i * 50; - } - break; - } - - // - // have_rx_gain determines whether we have "ATT" or "RX Gain" Sliders - // It is set for HermesLite (and RadioBerry, for that matter) - // - have_rx_gain = 0; - switch (protocol) { - case ORIGINAL_PROTOCOL: - switch (device) { - case DEVICE_HERMES_LITE: - case DEVICE_HERMES_LITE2: - have_rx_gain = 1; - rx_gain_calibration = 14; - break; - default: - have_rx_gain = 0; - rx_gain_calibration = 0; - break; - } - break; - case NEW_PROTOCOL: - switch (device) { - case NEW_DEVICE_HERMES_LITE: - case NEW_DEVICE_HERMES_LITE2: - have_rx_gain = 1; - rx_gain_calibration = 14; - break; - default: - have_rx_gain = 0; - rx_gain_calibration = 0; - break; + int i; + // g_print("start_radio: selected radio=%p + // device=%d\n",radio,radio->device); + gdk_window_set_cursor(gtk_widget_get_window(top_window), + gdk_cursor_new(GDK_WATCH)); + + protocol = radio->protocol; + device = radio->device; + + // set the default power output and max drive value + drive_max = 100.0; + switch (protocol) { + case ORIGINAL_PROTOCOL: + switch (device) { + case DEVICE_METIS: + pa_power = PA_1W; + break; + case DEVICE_HERMES: + pa_power = PA_100W; + break; + case DEVICE_GRIFFIN: + pa_power = PA_100W; + break; + case DEVICE_ANGELIA: + pa_power = PA_100W; + break; + case DEVICE_ORION: + pa_power = PA_100W; + break; + case DEVICE_HERMES_LITE: + pa_power = PA_1W; + break; + case DEVICE_HERMES_LITE2: + pa_power = PA_10W; + break; + case DEVICE_ORION2: + pa_power = PA_200W; + break; + } + break; + case NEW_PROTOCOL: + switch (device) { + case NEW_DEVICE_ATLAS: + pa_power = PA_1W; + break; + case NEW_DEVICE_HERMES: + case NEW_DEVICE_HERMES2: + pa_power = PA_100W; + break; + case NEW_DEVICE_ANGELIA: + pa_power = PA_100W; + break; + case NEW_DEVICE_ORION: + pa_power = PA_100W; + break; + case NEW_DEVICE_HERMES_LITE: + pa_power = PA_1W; + break; + case NEW_DEVICE_HERMES_LITE2: + pa_power = PA_10W; + break; + case NEW_DEVICE_ORION2: + pa_power = PA_200W; + break; + } + break; + } + + switch (pa_power) { + case PA_1W: + for (i = 0; i < 11; i++) { + pa_trim[i] = i * 100; + } + break; + case PA_10W: + for (i = 0; i < 11; i++) { + pa_trim[i] = i; + } + break; + case PA_30W: + for (i = 0; i < 11; i++) { + pa_trim[i] = i * 3; + } + break; + case PA_50W: + for (i = 0; i < 11; i++) { + pa_trim[i] = i * 5; + } + break; + case PA_100W: + for (i = 0; i < 11; i++) { + pa_trim[i] = i * 10; + } + break; + case PA_200W: + for (i = 0; i < 11; i++) { + pa_trim[i] = i * 20; + } + break; + case PA_500W: + for (i = 0; i < 11; i++) { + pa_trim[i] = i * 50; + } + break; } - break; - default: + + // + // have_rx_gain determines whether we have "ATT" or "RX Gain" Sliders + // It is set for HermesLite (and RadioBerry, for that matter) + // have_rx_gain = 0; - break; - } - - // - // can_transmit decides whether we have a transmitter. - // - switch (protocol) { - case ORIGINAL_PROTOCOL: - case NEW_PROTOCOL: - can_transmit = 1; - break; - } - - // - // A semaphore for safely writing to the props file - // - g_mutex_init(&property_mutex); - - // - // Create text for the top line of the piHPSDR window - // - char text[1024]; - switch (protocol) { - case ORIGINAL_PROTOCOL: - case NEW_PROTOCOL: + switch (protocol) { + case ORIGINAL_PROTOCOL: + switch (device) { + case DEVICE_HERMES_LITE: + case DEVICE_HERMES_LITE2: + have_rx_gain = 1; + rx_gain_calibration = 14; + break; + default: + have_rx_gain = 0; + rx_gain_calibration = 0; + break; + } + break; + case NEW_PROTOCOL: + switch (device) { + case NEW_DEVICE_HERMES_LITE: + case NEW_DEVICE_HERMES_LITE2: + have_rx_gain = 1; + rx_gain_calibration = 14; + break; + default: + have_rx_gain = 0; + rx_gain_calibration = 0; + break; + } + break; + default: + have_rx_gain = 0; + break; + } + + // + // can_transmit decides whether we have a transmitter. + // + switch (protocol) { + case ORIGINAL_PROTOCOL: + case NEW_PROTOCOL: + can_transmit = 1; + break; + } + + // + // A semaphore for safely writing to the props file + // + g_mutex_init(&property_mutex); + + // + // Create text for the top line of the piHPSDR window + // + char text[1024]; + switch (protocol) { + case ORIGINAL_PROTOCOL: + case NEW_PROTOCOL: #ifdef USBOZY - if (device == DEVICE_OZY) { - sprintf(text, "%s (%s) on USB /dev/ozy\n", radio->name, - protocol == ORIGINAL_PROTOCOL ? "Protocol 1" : "Protocol 2"); - } else { + if (device == DEVICE_OZY) { + sprintf(text, "%s (%s) on USB /dev/ozy\n", radio->name, + protocol == ORIGINAL_PROTOCOL ? "Protocol 1" + : "Protocol 2"); + } else { #endif - sprintf(text, "Starting %s (%s v%d.%d)", radio->name, - protocol == ORIGINAL_PROTOCOL ? "Protocol 1" : "Protocol 2", - radio->software_version / 10, radio->software_version % 10); + sprintf(text, "Starting %s (%s v%d.%d)", radio->name, + protocol == ORIGINAL_PROTOCOL ? "Protocol 1" : "Protocol 2", + radio->software_version / 10, radio->software_version % 10); #ifdef USBOZY - } + } #endif - break; - } - - char p[32]; - char version[32]; - char mac[32]; - char ip[32]; - char iface[64]; - - switch (protocol) { - case ORIGINAL_PROTOCOL: - strcpy(p, "Protocol 1"); - sprintf(version, "v%d.%d)", radio->software_version / 10, - radio->software_version % 10); - sprintf( - mac, "%02X:%02X:%02X:%02X:%02X:%02X", - radio->info.network.mac_address[0], radio->info.network.mac_address[1], - radio->info.network.mac_address[2], radio->info.network.mac_address[3], - radio->info.network.mac_address[4], radio->info.network.mac_address[5]); - sprintf(ip, "%s", inet_ntoa(radio->info.network.address.sin_addr)); - sprintf(iface, "%s", radio->info.network.interface_name); - break; - case NEW_PROTOCOL: - strcpy(p, "Protocol 2"); - sprintf(version, "v%d.%d)", radio->software_version / 10, - radio->software_version % 10); - sprintf( - mac, "%02X:%02X:%02X:%02X:%02X:%02X", - radio->info.network.mac_address[0], radio->info.network.mac_address[1], - radio->info.network.mac_address[2], radio->info.network.mac_address[3], - radio->info.network.mac_address[4], radio->info.network.mac_address[5]); - sprintf(ip, "%s", inet_ntoa(radio->info.network.address.sin_addr)); - sprintf(iface, "%s", radio->info.network.interface_name); - break; - } - - switch (protocol) { - case ORIGINAL_PROTOCOL: - case NEW_PROTOCOL: + break; + } + + char p[32]; + char version[32]; + char mac[32]; + char ip[32]; + char iface[64]; + + switch (protocol) { + case ORIGINAL_PROTOCOL: + strcpy(p, "Protocol 1"); + sprintf(version, "v%d.%d)", radio->software_version / 10, + radio->software_version % 10); + sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X", + radio->info.network.mac_address[0], + radio->info.network.mac_address[1], + radio->info.network.mac_address[2], + radio->info.network.mac_address[3], + radio->info.network.mac_address[4], + radio->info.network.mac_address[5]); + sprintf(ip, "%s", inet_ntoa(radio->info.network.address.sin_addr)); + sprintf(iface, "%s", radio->info.network.interface_name); + break; + case NEW_PROTOCOL: + strcpy(p, "Protocol 2"); + sprintf(version, "v%d.%d)", radio->software_version / 10, + radio->software_version % 10); + sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X", + radio->info.network.mac_address[0], + radio->info.network.mac_address[1], + radio->info.network.mac_address[2], + radio->info.network.mac_address[3], + radio->info.network.mac_address[4], + radio->info.network.mac_address[5]); + sprintf(ip, "%s", inet_ntoa(radio->info.network.address.sin_addr)); + sprintf(iface, "%s", radio->info.network.interface_name); + break; + } + + switch (protocol) { + case ORIGINAL_PROTOCOL: + case NEW_PROTOCOL: #ifdef USBOZY - if (device == DEVICE_OZY) { - sprintf(text, "%s (%s) on USB /dev/ozy\n", radio->name, p); - } else { + if (device == DEVICE_OZY) { + sprintf(text, "%s (%s) on USB /dev/ozy\n", radio->name, p); + } else { #endif - sprintf(text, "Starting %s (%s %s)", radio->name, p, version); + sprintf(text, "Starting %s (%s %s)", radio->name, p, version); #ifdef USBOZY - } + } #endif - break; - } + break; + } - status_text(text); + status_text(text); - sprintf(text, "piHPSDR: %s (%s %s) %s (%s) on %s", radio->name, p, version, - ip, mac, iface); + sprintf(text, "piHPSDR: %s (%s %s) %s (%s) on %s", radio->name, p, version, + ip, mac, iface); - gtk_window_set_title(GTK_WINDOW(top_window), text); + gtk_window_set_title(GTK_WINDOW(top_window), text); - // - // determine name of the props file - // - switch (protocol) { - case ORIGINAL_PROTOCOL: - case NEW_PROTOCOL: - switch (device) { + // + // determine name of the props file + // + switch (protocol) { + case ORIGINAL_PROTOCOL: + case NEW_PROTOCOL: + switch (device) { #ifdef USBOZY - case DEVICE_OZY: - sprintf(property_path, "ozy.props"); - break; + case DEVICE_OZY: + sprintf(property_path, "ozy.props"); + break; #endif - default: - sprintf(property_path, "%02X-%02X-%02X-%02X-%02X-%02X.props", - radio->info.network.mac_address[0], - radio->info.network.mac_address[1], - radio->info.network.mac_address[2], - radio->info.network.mac_address[3], - radio->info.network.mac_address[4], - radio->info.network.mac_address[5]); - break; - } - break; - } - - switch (protocol) { - case ORIGINAL_PROTOCOL: - switch (device) { - case DEVICE_ORION2: - // meter_calibration=3.0; - // display_calibration=3.36; - break; - default: - // meter_calibration=-2.44; - // display_calibration=-2.1; - break; - } - break; - case NEW_PROTOCOL: - switch (device) { - case NEW_DEVICE_ORION2: - // meter_calibration=3.0; - // display_calibration=3.36; - break; - default: - // meter_calibration=-2.44; - // display_calibration=-2.1; - break; - } - break; - } - - // - // Determine number of ADCs in the device - // - switch (protocol) { - case ORIGINAL_PROTOCOL: - switch (device) { - case DEVICE_METIS: // No support for multiple MERCURY cards on a single + default: + sprintf(property_path, "%02X-%02X-%02X-%02X-%02X-%02X.props", + radio->info.network.mac_address[0], + radio->info.network.mac_address[1], + radio->info.network.mac_address[2], + radio->info.network.mac_address[3], + radio->info.network.mac_address[4], + radio->info.network.mac_address[5]); + break; + } + break; + } + + switch (protocol) { + case ORIGINAL_PROTOCOL: + switch (device) { + case DEVICE_ORION2: + // meter_calibration=3.0; + // display_calibration=3.36; + break; + default: + // meter_calibration=-2.44; + // display_calibration=-2.1; + break; + } + break; + case NEW_PROTOCOL: + switch (device) { + case NEW_DEVICE_ORION2: + // meter_calibration=3.0; + // display_calibration=3.36; + break; + default: + // meter_calibration=-2.44; + // display_calibration=-2.1; + break; + } + break; + } + + // + // Determine number of ADCs in the device + // + switch (protocol) { + case ORIGINAL_PROTOCOL: + switch (device) { + case DEVICE_METIS: // No support for multiple MERCURY cards on a single + // ATLAS bus. + case DEVICE_HERMES: + case DEVICE_HERMES_LITE: + case DEVICE_HERMES_LITE2: + n_adc = 1; + break; + default: + n_adc = 2; + break; + } + break; + case NEW_PROTOCOL: + switch (device) { + case NEW_DEVICE_ATLAS: + n_adc = 1; // No support for multiple MERCURY cards on a single // ATLAS bus. - case DEVICE_HERMES: - case DEVICE_HERMES_LITE: - case DEVICE_HERMES_LITE2: - n_adc = 1; - break; - default: - n_adc = 2; - break; - } - break; - case NEW_PROTOCOL: - switch (device) { - case NEW_DEVICE_ATLAS: - n_adc = 1; // No support for multiple MERCURY cards on a single ATLAS bus. - break; - case NEW_DEVICE_HERMES: - case NEW_DEVICE_HERMES2: - case NEW_DEVICE_HERMES_LITE: - case NEW_DEVICE_HERMES_LITE2: - n_adc = 1; - break; + break; + case NEW_DEVICE_HERMES: + case NEW_DEVICE_HERMES2: + case NEW_DEVICE_HERMES_LITE: + case NEW_DEVICE_HERMES_LITE2: + n_adc = 1; + break; + default: + n_adc = 2; + break; + } + break; default: - n_adc = 2; - break; + break; } - break; - default: - break; - } - iqswap = 0; + iqswap = 0; - /* - adc_attenuation[0]=0; - adc_attenuation[1]=0; + /* + adc_attenuation[0]=0; + adc_attenuation[1]=0; - if(have_rx_gain) { - adc_attenuation[0]=14; - adc_attenuation[1]=14; - } -*/ - adc[0].antenna = ANTENNA_1; - adc[0].filters = AUTOMATIC; - adc[0].hpf = HPF_13; - adc[0].lpf = LPF_30_20; - adc[0].dither = FALSE; - adc[0].random = FALSE; - adc[0].preamp = FALSE; - - // - // Some HPSDR radios have RX GAIN instead of attenuation - // these usually have a gain range from -12 to +48 - // - if(have_rx_gain && (protocol==ORIGINAL_PROTOCOL || protocol==NEW_PROTOCOL)) { - adc[0].min_gain=-12.0; - adc[0].max_gain=+48.0; - } - - if (have_rx_gain) { - adc[0].gain = 14.0; - } else { - adc[0].attenuation = 0; - } - - - adc[1].antenna = ANTENNA_1; - adc[1].filters = AUTOMATIC; - adc[1].hpf = HPF_9_5; - adc[1].lpf = LPF_60_40; - adc[1].dither = FALSE; - adc[1].random = FALSE; - adc[1].preamp = FALSE; - if (have_rx_gain) { - adc[1].gain = 14; - } else { - adc[1].attenuation = 0; - } - - // g_print("meter_calibration=%f display_calibration=%f\n", meter_calibration, - // display_calibration); + if(have_rx_gain) { + adc_attenuation[0]=14; + adc_attenuation[1]=14; + } + */ + adc[0].antenna = ANTENNA_1; + adc[0].filters = AUTOMATIC; + adc[0].hpf = HPF_13; + adc[0].lpf = LPF_30_20; + adc[0].dither = FALSE; + adc[0].random = FALSE; + adc[0].preamp = FALSE; + + // + // Some HPSDR radios have RX GAIN instead of attenuation + // these usually have a gain range from -12 to +48 + // + if (have_rx_gain && + (protocol == ORIGINAL_PROTOCOL || protocol == NEW_PROTOCOL)) { + adc[0].min_gain = -12.0; + adc[0].max_gain = +48.0; + } + + if (have_rx_gain) { + adc[0].gain = 14.0; + } else { + adc[0].attenuation = 0; + } + + adc[1].antenna = ANTENNA_1; + adc[1].filters = AUTOMATIC; + adc[1].hpf = HPF_9_5; + adc[1].lpf = LPF_60_40; + adc[1].dither = FALSE; + adc[1].random = FALSE; + adc[1].preamp = FALSE; + if (have_rx_gain) { + adc[1].gain = 14; + } else { + adc[1].attenuation = 0; + } + + // g_print("meter_calibration=%f display_calibration=%f\n", + // meter_calibration, display_calibration); #ifdef GPIO - switch (controller) { - case NO_CONTROLLER: + switch (controller) { + case NO_CONTROLLER: + display_zoompan = 1; + display_sliders = 1; + display_toolbar = 1; + break; + case CONTROLLER2_V1: + case CONTROLLER2_V2: + display_zoompan = 1; + display_sliders = 0; + display_toolbar = 0; + break; + } +#else display_zoompan = 1; display_sliders = 1; display_toolbar = 1; - break; - case CONTROLLER2_V1: - case CONTROLLER2_V2: - display_zoompan = 1; - display_sliders = 0; - display_toolbar = 0; - break; - } -#else - display_zoompan = 1; - display_sliders = 1; - display_toolbar = 1; #endif - temperature = 0; - average_temperature = 0; - n_temperature = 0; - current = 0; - average_current = 0; - n_current = 0; + temperature = 0; + average_temperature = 0; + n_temperature = 0; + current = 0; + average_current = 0; + n_current = 0; - display_sequence_errors = TRUE; + display_sequence_errors = TRUE; - g_print("%s: setup RECEIVERS protocol=%d\n", __FUNCTION__, protocol); - switch (protocol) { - default: - g_print("%s: setup RECEIVERS default\n", __FUNCTION__); - RECEIVERS = 2; + g_print("%s: setup RECEIVERS protocol=%d\n", __FUNCTION__, protocol); + switch (protocol) { + default: + g_print("%s: setup RECEIVERS default\n", __FUNCTION__); + RECEIVERS = 2; #ifdef PURESIGNAL - MAX_RECEIVERS = (RECEIVERS + 2); - PS_TX_FEEDBACK = (RECEIVERS); - PS_RX_FEEDBACK = (RECEIVERS + 1); + MAX_RECEIVERS = (RECEIVERS + 2); + PS_TX_FEEDBACK = (RECEIVERS); + PS_RX_FEEDBACK = (RECEIVERS + 1); #else - MAX_RECEIVERS = RECEIVERS; + MAX_RECEIVERS = RECEIVERS; #endif - MAX_DDC = (RECEIVERS + 2); - break; - } - - receivers = RECEIVERS; - - radioRestoreState(); - - // - // It is possible that an option has been read in - // which is not compatible with the hardware. - // Change setting to reasonable value then. - // This could possibly be moved to radioRestoreState(). - // - // Sanity Check #1: restrict buffer size in new protocol - // - switch (protocol) { - case ORIGINAL_PROTOCOL: - if (buffer_size > 2048) - buffer_size = 2048; - break; - case NEW_PROTOCOL: - if (buffer_size > 512) - buffer_size = 512; - break; - } - // - // Sanity Check #2: enable diversity only if there are two RX and two ADCs - // - if (RECEIVERS < 2 || n_adc < 2) { - diversity_enabled = 0; - } - - radio_change_region(region); - - create_visual(); - - // save every 30 seconds - // save_timer_id=gdk_threads_add_timeout(30000, save_cb, NULL); - - if (rigctl_enable) { - launch_rigctl(); - launch_serial(); // edit - } - - if (can_transmit) { - calcDriveLevel(); - if (transmitter->puresignal) { - tx_set_ps(transmitter, transmitter->puresignal); + MAX_DDC = (RECEIVERS + 2); + break; } - } - if (protocol == NEW_PROTOCOL) { - schedule_high_priority(); - } + receivers = RECEIVERS; + radioRestoreState(); - g_idle_add(ext_vfo_update, (gpointer)NULL); + // + // It is possible that an option has been read in + // which is not compatible with the hardware. + // Change setting to reasonable value then. + // This could possibly be moved to radioRestoreState(). + // + // Sanity Check #1: restrict buffer size in new protocol + // + switch (protocol) { + case ORIGINAL_PROTOCOL: + if (buffer_size > 2048) + buffer_size = 2048; + break; + case NEW_PROTOCOL: + if (buffer_size > 512) + buffer_size = 512; + break; + } + // + // Sanity Check #2: enable diversity only if there are two RX and two ADCs + // + if (RECEIVERS < 2 || n_adc < 2) { + diversity_enabled = 0; + } - gdk_window_set_cursor(gtk_widget_get_window(top_window), - gdk_cursor_new(GDK_ARROW)); + radio_change_region(region); - // - // MIDIstartup must not be called before the radio is completely set up, since - // then MIDI can asynchronously trigger actions which require the radio - // already running. So this is the last thing we do when starting the radio. - // -#ifdef MIDI - g_print("%s: midi_enabled=%d midi_device_name=%s\n", __FUNCTION__, - midi_enabled, midi_device_name); - if (midi_enabled && (midi_device_name != NULL)) { - if (register_midi_device(midi_device_name) < 0) { - midi_enabled = FALSE; + create_visual(); + + // save every 30 seconds + // save_timer_id=gdk_threads_add_timeout(30000, save_cb, NULL); + + if (rigctl_enable) { + launch_rigctl(); + launch_serial(); // edit } - if (cw_keyer_midi == 1) { - midi_keyer_update(); + + if (can_transmit) { + calcDriveLevel(); + if (transmitter->puresignal) { + tx_set_ps(transmitter, transmitter->puresignal); + } + } + + if (protocol == NEW_PROTOCOL) { + schedule_high_priority(); + } + + g_idle_add(ext_vfo_update, (gpointer)NULL); + + gdk_window_set_cursor(gtk_widget_get_window(top_window), + gdk_cursor_new(GDK_ARROW)); + + // + // MIDIstartup must not be called before the radio is completely set up, + // since then MIDI can asynchronously trigger actions which require the + // radio already running. So this is the last thing we do when starting the + // radio. + // +#ifdef MIDI + g_print("%s: midi_enabled=%d midi_device_name=%s\n", __FUNCTION__, + midi_enabled, midi_device_name); + if (midi_enabled && (midi_device_name != NULL)) { + if (register_midi_device(midi_device_name) < 0) { + midi_enabled = FALSE; + } + if (cw_keyer_midi == 1) { + midi_keyer_update(); + } + } else { + midi_enabled = FALSE; } - } else { - midi_enabled = FALSE; - } #endif #ifdef CLIENT_SERVER - if (hpsdr_server) { - create_hpsdr_server(); - } + if (hpsdr_server) { + create_hpsdr_server(); + } #endif } void disable_rigctl() { - g_print("RIGCTL: disable_rigctl()\n"); - close_rigctl_ports(); + g_print("RIGCTL: disable_rigctl()\n"); + close_rigctl_ports(); } void radio_change_receivers(int r) { - g_print("radio_change_receivers: from %d to %d\n", receivers, r); - // The button in the radio menu will call this function even if the - // number of receivers has not changed. - if (receivers == r) - return; - // - // When changing the number of receivers, restart the - // old protocol - // + g_print("radio_change_receivers: from %d to %d\n", receivers, r); + // The button in the radio menu will call this function even if the + // number of receivers has not changed. + if (receivers == r) + return; + // + // When changing the number of receivers, restart the + // old protocol + // #ifdef CLIENT_SERVER - if (!radio_is_remote) { + if (!radio_is_remote) { #endif - if (protocol == ORIGINAL_PROTOCOL) { - old_protocol_stop(); - } + if (protocol == ORIGINAL_PROTOCOL) { + old_protocol_stop(); + } #ifdef CLIENT_SERVER - } + } #endif - switch (r) { - case 1: - set_displaying(receiver[1], 0); - gtk_container_remove(GTK_CONTAINER(fixed), receiver[1]->panel); - receivers = 1; - break; - case 2: - gtk_fixed_put(GTK_FIXED(fixed), receiver[1]->panel, 0, 0); - set_displaying(receiver[1], 1); - receivers = 2; - break; - } - reconfigure_radio(); - active_receiver = receiver[0]; + switch (r) { + case 1: + set_displaying(receiver[1], 0); + gtk_container_remove(GTK_CONTAINER(fixed), receiver[1]->panel); + receivers = 1; + break; + case 2: + gtk_fixed_put(GTK_FIXED(fixed), receiver[1]->panel, 0, 0); + set_displaying(receiver[1], 1); + receivers = 2; + break; + } + reconfigure_radio(); + active_receiver = receiver[0]; #ifdef CLIENT_SERVER - if (!radio_is_remote) { + if (!radio_is_remote) { #endif - if (protocol == NEW_PROTOCOL) { - schedule_high_priority(); - } - if (protocol == ORIGINAL_PROTOCOL) { - old_protocol_run(); - } + if (protocol == NEW_PROTOCOL) { + schedule_high_priority(); + } + if (protocol == ORIGINAL_PROTOCOL) { + old_protocol_run(); + } #ifdef CLIENT_SERVER - } + } #endif } void radio_change_sample_rate(int rate) { - int i; - - switch (protocol) { - case ORIGINAL_PROTOCOL: - // The radio menu calls this function even if the sample rate - // has not changed. Do nothing in this case. - if (receiver[0]->sample_rate != rate) { - radio_sample_rate = rate; - old_protocol_stop(); - for (i = 0; i < receivers; i++) { - receiver_change_sample_rate(receiver[i], rate); - } + int i; + + switch (protocol) { + case ORIGINAL_PROTOCOL: + // The radio menu calls this function even if the sample rate + // has not changed. Do nothing in this case. + if (receiver[0]->sample_rate != rate) { + radio_sample_rate = rate; + old_protocol_stop(); + for (i = 0; i < receivers; i++) { + receiver_change_sample_rate(receiver[i], rate); + } #ifdef PURESIGNAL - receiver_change_sample_rate(receiver[PS_RX_FEEDBACK], rate); + receiver_change_sample_rate(receiver[PS_RX_FEEDBACK], rate); #endif - old_protocol_set_mic_sample_rate(rate); - old_protocol_run(); - tx_set_ps_sample_rate(transmitter, rate); + old_protocol_set_mic_sample_rate(rate); + old_protocol_run(); + tx_set_ps_sample_rate(transmitter, rate); + } + break; } - break; - } } static void rxtx(int state) { - int i; + int i; - if (state) { - // switch to tx + if (state) { + // switch to tx #ifdef PURESIGNAL - RECEIVER *rx_feedback = receiver[PS_RX_FEEDBACK]; - RECEIVER *tx_feedback = receiver[PS_TX_FEEDBACK]; + RECEIVER *rx_feedback = receiver[PS_RX_FEEDBACK]; + RECEIVER *tx_feedback = receiver[PS_TX_FEEDBACK]; - rx_feedback->samples = 0; - tx_feedback->samples = 0; + rx_feedback->samples = 0; + tx_feedback->samples = 0; #endif - if (!duplex) { - for (i = 0; i < receivers; i++) { - // Delivery of RX samples - // to WDSP via fexchange0() may come to an abrupt stop - // (especially with PURESIGNAL or DIVERSITY). - // Therefore, wait for *all* receivers to complete - // their slew-down before going TX. - SetChannelState(receiver[i]->id, 0, 1); - set_displaying(receiver[i], 0); - g_object_ref((gpointer)receiver[i]->panel); - g_object_ref((gpointer)receiver[i]->panadapter); - if (receiver[i]->waterfall != NULL) { - g_object_ref((gpointer)receiver[i]->waterfall); + if (!duplex) { + for (i = 0; i < receivers; i++) { + // Delivery of RX samples + // to WDSP via fexchange0() may come to an abrupt stop + // (especially with PURESIGNAL or DIVERSITY). + // Therefore, wait for *all* receivers to complete + // their slew-down before going TX. + SetChannelState(receiver[i]->id, 0, 1); + set_displaying(receiver[i], 0); + g_object_ref((gpointer)receiver[i]->panel); + g_object_ref((gpointer)receiver[i]->panadapter); + if (receiver[i]->waterfall != NULL) { + g_object_ref((gpointer)receiver[i]->waterfall); + } + gtk_container_remove(GTK_CONTAINER(fixed), receiver[i]->panel); + } } - gtk_container_remove(GTK_CONTAINER(fixed), receiver[i]->panel); - } - } - if (duplex) { - gtk_widget_show_all(transmitter->dialog); - if (transmitter->dialog_x != -1 && transmitter->dialog_y != -1) { - gtk_window_move(GTK_WINDOW(transmitter->dialog), transmitter->dialog_x, - transmitter->dialog_y); - } - } else { - gtk_fixed_put(GTK_FIXED(fixed), transmitter->panel, transmitter->x, - transmitter->y); - } + if (duplex) { + gtk_widget_show_all(transmitter->dialog); + if (transmitter->dialog_x != -1 && transmitter->dialog_y != -1) { + gtk_window_move(GTK_WINDOW(transmitter->dialog), + transmitter->dialog_x, transmitter->dialog_y); + } + } else { + gtk_fixed_put(GTK_FIXED(fixed), transmitter->panel, transmitter->x, + transmitter->y); + } - SetChannelState(transmitter->id, 1, 0); - tx_set_displaying(transmitter, 1); - switch (protocol) { - } - } else { - // switch to rx - switch (protocol) { - } - SetChannelState(transmitter->id, 0, 1); - tx_set_displaying(transmitter, 0); - if (duplex) { - gtk_window_get_position(GTK_WINDOW(transmitter->dialog), - &transmitter->dialog_x, &transmitter->dialog_y); - gtk_widget_hide(transmitter->dialog); + SetChannelState(transmitter->id, 1, 0); + tx_set_displaying(transmitter, 1); + switch (protocol) {} } else { - gtk_container_remove(GTK_CONTAINER(fixed), transmitter->panel); - } - if (!duplex) { - for (i = 0; i < receivers; i++) { - gtk_fixed_put(GTK_FIXED(fixed), receiver[i]->panel, receiver[i]->x, - receiver[i]->y); - SetChannelState(receiver[i]->id, 1, 0); - set_displaying(receiver[i], 1); - } + // switch to rx + switch (protocol) {} + SetChannelState(transmitter->id, 0, 1); + tx_set_displaying(transmitter, 0); + if (duplex) { + gtk_window_get_position(GTK_WINDOW(transmitter->dialog), + &transmitter->dialog_x, + &transmitter->dialog_y); + gtk_widget_hide(transmitter->dialog); + } else { + gtk_container_remove(GTK_CONTAINER(fixed), transmitter->panel); + } + if (!duplex) { + for (i = 0; i < receivers; i++) { + gtk_fixed_put(GTK_FIXED(fixed), receiver[i]->panel, + receiver[i]->x, receiver[i]->y); + SetChannelState(receiver[i]->id, 1, 0); + set_displaying(receiver[i], 1); + } + } } - } #ifdef PURESIGNAL - if (transmitter->puresignal) { - SetPSMox(transmitter->id, state); - } + if (transmitter->puresignal) { + SetPSMox(transmitter->id, state); + } #endif } void setMox(int state) { - if (!can_transmit) - return; - vox_cancel(); // remove time-out - if (mox != state) { - if (state && vox) { - // Suppress RX-TX transition if VOX was already active - } else { - rxtx(state); - } - mox = state; - } - vox = 0; - switch (protocol) { - case NEW_PROTOCOL: - schedule_high_priority(); - schedule_receive_specific(); - break; - default: - break; - } + if (!can_transmit) + return; + vox_cancel(); // remove time-out + if (mox != state) { + if (state && vox) { + // Suppress RX-TX transition if VOX was already active + } else { + rxtx(state); + } + mox = state; + } + vox = 0; + switch (protocol) { + case NEW_PROTOCOL: + schedule_high_priority(); + schedule_receive_specific(); + break; + default: + break; + } } int getMox() { return mox; } void vox_changed(int state) { - if (vox != state && !tune && !mox) { - rxtx(state); - } - vox = state; - if (protocol == NEW_PROTOCOL) { - schedule_high_priority(); - schedule_receive_specific(); - } + if (vox != state && !tune && !mox) { + rxtx(state); + } + vox = state; + if (protocol == NEW_PROTOCOL) { + schedule_high_priority(); + schedule_receive_specific(); + } } void frequency_changed(RECEIVER *rx) { - // g_print("frequency_changed: channel=%d frequency=%ld lo=%ld error=%ld - // ctun=%d - // offset=%ld\n",rx->channel,rx->frequency_a,rx->lo_a,rx->error_a,rx->ctun,rx->offset); - if (vfo[0].ctun) { - SetRXAShiftFreq(rx->id, (double)vfo[0].offset); - RXANBPSetShiftFrequency(rx->id, (double)vfo[0].offset); - } else { - if (protocol == NEW_PROTOCOL) { - schedule_high_priority(); + // g_print("frequency_changed: channel=%d frequency=%ld lo=%ld error=%ld + // ctun=%d + // offset=%ld\n",rx->channel,rx->frequency_a,rx->lo_a,rx->error_a,rx->ctun,rx->offset); + if (vfo[0].ctun) { + SetRXAShiftFreq(rx->id, (double)vfo[0].offset); + RXANBPSetShiftFrequency(rx->id, (double)vfo[0].offset); + } else { + if (protocol == NEW_PROTOCOL) { + schedule_high_priority(); + } + vfo[0].band = get_band_from_frequency(vfo[0].frequency); } - vfo[0].band = get_band_from_frequency(vfo[0].frequency); - } } void setTune(int state) { - int i; + int i; - if (!can_transmit) - return; + if (!can_transmit) + return; - // if state==tune, this function is a no-op + // if state==tune, this function is a no-op - if (tune != state) { - vox_cancel(); - if (vox || mox) { - rxtx(0); - vox = 0; - mox = 0; - } - if (state) { - if (transmitter->puresignal) { - // - // DL1YCF: - // Some users have reported that especially when having - // very long (10 hours) operating times with PS, hitting - // the "TUNE" button makes the PS algorithm crazy, such that - // it produces a very broad line spectrum. Experimentally, it - // has been observed that this can be avoided by hitting - // "Off" in the PS menu before hitting "TUNE", and hitting - // "Restart" in the PS menu when tuning is complete. - // - // It is therefore suggested to to so implicitly when PS - // is enabled. - // - // So before start tuning: Reset PS engine - // - SetPSControl(transmitter->id, 1, 0, 0, 0); - usleep(50000); - } - if (full_tune) { - if (OCfull_tune_time != 0) { - struct timeval te; - gettimeofday(&te, NULL); - tune_timeout = (te.tv_sec * 1000LL + te.tv_usec / 1000) + - (long long)OCfull_tune_time; + if (tune != state) { + vox_cancel(); + if (vox || mox) { + rxtx(0); + vox = 0; + mox = 0; + } + if (state) { + if (transmitter->puresignal) { + // + // DL1YCF: + // Some users have reported that especially when having + // very long (10 hours) operating times with PS, hitting + // the "TUNE" button makes the PS algorithm crazy, such that + // it produces a very broad line spectrum. Experimentally, it + // has been observed that this can be avoided by hitting + // "Off" in the PS menu before hitting "TUNE", and hitting + // "Restart" in the PS menu when tuning is complete. + // + // It is therefore suggested to to so implicitly when PS + // is enabled. + // + // So before start tuning: Reset PS engine + // + SetPSControl(transmitter->id, 1, 0, 0, 0); + usleep(50000); + } + if (full_tune) { + if (OCfull_tune_time != 0) { + struct timeval te; + gettimeofday(&te, NULL); + tune_timeout = (te.tv_sec * 1000LL + te.tv_usec / 1000) + + (long long)OCfull_tune_time; + } + } + if (memory_tune) { + if (OCmemory_tune_time != 0) { + struct timeval te; + gettimeofday(&te, NULL); + tune_timeout = (te.tv_sec * 1000LL + te.tv_usec / 1000) + + (long long)OCmemory_tune_time; + } + } + } + if (protocol == NEW_PROTOCOL) { + schedule_high_priority(); + // schedule_general(); } - } - if (memory_tune) { - if (OCmemory_tune_time != 0) { - struct timeval te; - gettimeofday(&te, NULL); - tune_timeout = (te.tv_sec * 1000LL + te.tv_usec / 1000) + - (long long)OCmemory_tune_time; + if (state) { + if (!duplex) { + for (i = 0; i < receivers; i++) { + // Delivery of RX samples + // to WDSP via fexchange0() may come to an abrupt stop + // (especially with PURESIGNAL or DIVERSITY) + // Therefore, wait for *all* receivers to complete + // their slew-down before going TX. + SetChannelState(receiver[i]->id, 0, 1); + set_displaying(receiver[i], 0); + if (protocol == NEW_PROTOCOL) { + schedule_high_priority(); + } + } + } + + int txmode = get_tx_mode(); + pre_tune_mode = txmode; + pre_tune_cw_internal = cw_keyer_internal; + + // + // in USB/DIGU/DSB, tune 1000 Hz above carrier + // in LSB/DIGL, tune 1000 Hz below carrier + // all other (CW, AM, FM): tune on carrier freq. + // + switch (txmode) { + case modeLSB: + case modeDIGL: + SetTXAPostGenToneFreq(transmitter->id, -(double)1000.0); + break; + case modeUSB: + case modeDSB: + case modeDIGU: + SetTXAPostGenToneFreq(transmitter->id, (double)1000.0); + break; + default: + SetTXAPostGenToneFreq(transmitter->id, (double)0.0); + break; + } + + SetTXAPostGenToneMag(transmitter->id, 0.99999); + SetTXAPostGenMode(transmitter->id, 0); + SetTXAPostGenRun(transmitter->id, 1); + + switch (txmode) { + case modeCWL: + cw_keyer_internal = 0; + tx_set_mode(transmitter, modeLSB); + break; + case modeCWU: + cw_keyer_internal = 0; + tx_set_mode(transmitter, modeUSB); + break; + } + rxtx(state); + } else { + rxtx(state); + SetTXAPostGenRun(transmitter->id, 0); + switch (pre_tune_mode) { + case modeCWL: + case modeCWU: + tx_set_mode(transmitter, pre_tune_mode); + cw_keyer_internal = pre_tune_cw_internal; + break; + } + if (transmitter->puresignal) { + // + // DL1YCF: + // Since we have done a "PS reset" when we started tuning, + // resume PS engine now. + // + SetPSControl(transmitter->id, 0, 0, 1, 0); + } } - } + tune = state; } if (protocol == NEW_PROTOCOL) { - schedule_high_priority(); - // schedule_general(); + schedule_high_priority(); + schedule_receive_specific(); } - if (state) { - if (!duplex) { - for (i = 0; i < receivers; i++) { - // Delivery of RX samples - // to WDSP via fexchange0() may come to an abrupt stop - // (especially with PURESIGNAL or DIVERSITY) - // Therefore, wait for *all* receivers to complete - // their slew-down before going TX. - SetChannelState(receiver[i]->id, 0, 1); - set_displaying(receiver[i], 0); - if (protocol == NEW_PROTOCOL) { - schedule_high_priority(); - } - } - } - - int txmode = get_tx_mode(); - pre_tune_mode = txmode; - pre_tune_cw_internal = cw_keyer_internal; - - // - // in USB/DIGU/DSB, tune 1000 Hz above carrier - // in LSB/DIGL, tune 1000 Hz below carrier - // all other (CW, AM, FM): tune on carrier freq. - // - switch (txmode) { - case modeLSB: - case modeDIGL: - SetTXAPostGenToneFreq(transmitter->id, -(double)1000.0); - break; - case modeUSB: - case modeDSB: - case modeDIGU: - SetTXAPostGenToneFreq(transmitter->id, (double)1000.0); - break; - default: - SetTXAPostGenToneFreq(transmitter->id, (double)0.0); - break; - } - - SetTXAPostGenToneMag(transmitter->id, 0.99999); - SetTXAPostGenMode(transmitter->id, 0); - SetTXAPostGenRun(transmitter->id, 1); - - switch (txmode) { - case modeCWL: - cw_keyer_internal = 0; - tx_set_mode(transmitter, modeLSB); - break; - case modeCWU: - cw_keyer_internal = 0; - tx_set_mode(transmitter, modeUSB); - break; - } - rxtx(state); - } else { - rxtx(state); - SetTXAPostGenRun(transmitter->id, 0); - switch (pre_tune_mode) { - case modeCWL: - case modeCWU: - tx_set_mode(transmitter, pre_tune_mode); - cw_keyer_internal = pre_tune_cw_internal; - break; - } - if (transmitter->puresignal) { - // - // DL1YCF: - // Since we have done a "PS reset" when we started tuning, - // resume PS engine now. - // - SetPSControl(transmitter->id, 0, 0, 1, 0); - } - } - tune = state; - } - if (protocol == NEW_PROTOCOL) { - schedule_high_priority(); - schedule_receive_specific(); - } } int getTune() { return tune; } @@ -1561,132 +1568,127 @@ int getTune() { return tune; } int isTransmitting() { return mox | vox | tune; } void setFrequency(long long f) { - int v = active_receiver->id; - vfo[v].band = get_band_from_frequency(f); - - switch (protocol) { - case NEW_PROTOCOL: - case ORIGINAL_PROTOCOL: - if (vfo[v].ctun) { - long long minf = - vfo[v].frequency - (long long)(active_receiver->sample_rate / 2); - long long maxf = - vfo[v].frequency + (long long)(active_receiver->sample_rate / 2); - if (f < minf) - f = minf; - if (f > maxf) - f = maxf; - vfo[v].ctun_frequency = f; - vfo[v].offset = f - vfo[v].frequency; - set_offset(active_receiver, vfo[v].offset); - return; - } else { - vfo[v].frequency = f; - } - break; - } - - switch (protocol) { - case NEW_PROTOCOL: - schedule_high_priority(); - break; - case ORIGINAL_PROTOCOL: - break; - } -} + int v = active_receiver->id; + vfo[v].band = get_band_from_frequency(f); -long long getFrequency(void) { - return vfo[active_receiver->id].frequency; -} + switch (protocol) { + case NEW_PROTOCOL: + case ORIGINAL_PROTOCOL: + if (vfo[v].ctun) { + long long minf = vfo[v].frequency - + (long long)(active_receiver->sample_rate / 2); + long long maxf = vfo[v].frequency + + (long long)(active_receiver->sample_rate / 2); + if (f < minf) + f = minf; + if (f > maxf) + f = maxf; + vfo[v].ctun_frequency = f; + vfo[v].offset = f - vfo[v].frequency; + set_offset(active_receiver, vfo[v].offset); + return; + } else { + vfo[v].frequency = f; + } + break; + } -double getDrive(void) { - return transmitter->drive; + switch (protocol) { + case NEW_PROTOCOL: + schedule_high_priority(); + break; + case ORIGINAL_PROTOCOL: + break; + } } +long long getFrequency(void) { return vfo[active_receiver->id].frequency; } + +double getDrive(void) { return transmitter->drive; } + static int calcLevel(double d) { - int level = 0; - int v = get_tx_vfo(); - - BAND *band = band_get_band(vfo[v].band); - double target_dbm_orig = 10.0 * log10(d * 1000.0); - double gbb = band->pa_calibration; - double target_dbm = target_dbm_orig - gbb; - double target_volts = sqrt(pow(10, target_dbm * 0.1) * 0.05); - double volts = min((target_volts / 0.8), 1.0); - double actual_volts = volts * (1.0 / 0.98); - - /* printf("calcLevel: d = %f\n", d); */ - /* printf("calcLevel: target_dbm_orig = %f\n", target_dbm_orig); */ - /* printf("calcLevel: gbb = %f\n", gbb); */ - /* printf("calcLevel: target_dbm = %f\n", target_dbm); */ - - if (actual_volts < 0.0) { - actual_volts = 0.0; - } else if (actual_volts > 1.0) { - actual_volts = 1.0; - } - - level = (int)(actual_volts * 255.0); - - return level; + int level = 0; + int v = get_tx_vfo(); + + BAND *band = band_get_band(vfo[v].band); + double target_dbm_orig = 10.0 * log10(d * 1000.0); + double gbb = band->pa_calibration; + double target_dbm = target_dbm_orig - gbb; + double target_volts = sqrt(pow(10, target_dbm * 0.1) * 0.05); + double volts = min((target_volts / 0.8), 1.0); + double actual_volts = volts * (1.0 / 0.98); + + /* printf("calcLevel: d = %f\n", d); */ + /* printf("calcLevel: target_dbm_orig = %f\n", target_dbm_orig); */ + /* printf("calcLevel: gbb = %f\n", gbb); */ + /* printf("calcLevel: target_dbm = %f\n", target_dbm); */ + + if (actual_volts < 0.0) { + actual_volts = 0.0; + } else if (actual_volts > 1.0) { + actual_volts = 1.0; + } + + level = (int)(actual_volts * 255.0); + + return level; } void calcDriveLevel() { - transmitter->drive_level = calcLevel(transmitter->drive); - if (isTransmitting() && protocol == NEW_PROTOCOL) { - schedule_high_priority(); - } - // g_print("calcDriveLevel: drive=%d - // drive_level=%d\n",transmitter->drive,transmitter->drive_level); + transmitter->drive_level = calcLevel(transmitter->drive); + if (isTransmitting() && protocol == NEW_PROTOCOL) { + schedule_high_priority(); + } + // g_print("calcDriveLevel: drive=%d + // drive_level=%d\n",transmitter->drive,transmitter->drive_level); } void setDrive(double value) { - transmitter->drive = value; - switch (protocol) { - case ORIGINAL_PROTOCOL: - case NEW_PROTOCOL: - calcDriveLevel(); - break; - } + transmitter->drive = value; + switch (protocol) { + case ORIGINAL_PROTOCOL: + case NEW_PROTOCOL: + calcDriveLevel(); + break; + } } double getTuneDrive() { return transmitter->tune_percent; } void setSquelch(RECEIVER *rx) { - double am_sq = ((rx->squelch / 100.0) * 160.0) - 160.0; - SetRXAAMSQThreshold(rx->id, am_sq); - SetRXAAMSQRun(rx->id, rx->squelch_enable); + double am_sq = ((rx->squelch / 100.0) * 160.0) - 160.0; + SetRXAAMSQThreshold(rx->id, am_sq); + SetRXAAMSQRun(rx->id, rx->squelch_enable); - double fm_sq = pow(10.0, -2.0 * rx->squelch / 100.0); - SetRXAFMSQThreshold(rx->id, fm_sq); - SetRXAFMSQRun(rx->id, rx->squelch_enable); + double fm_sq = pow(10.0, -2.0 * rx->squelch / 100.0); + SetRXAFMSQThreshold(rx->id, fm_sq); + SetRXAFMSQRun(rx->id, rx->squelch_enable); } -void radio_set_rf_gain(RECEIVER *rx) { -} +void radio_set_rf_gain(RECEIVER *rx) {} void set_attenuation(int value) { - switch (protocol) { - case NEW_PROTOCOL: - schedule_high_priority(); - break; - } + switch (protocol) { + case NEW_PROTOCOL: + schedule_high_priority(); + break; + } } void set_alex_rx_antenna(int v) { - if (active_receiver->id == 0) { - active_receiver->alex_antenna = v; - if (protocol == NEW_PROTOCOL) { - schedule_high_priority(); + if (active_receiver->id == 0) { + active_receiver->alex_antenna = v; + if (protocol == NEW_PROTOCOL) { + schedule_high_priority(); + } } - } } void set_alex_tx_antenna(int v) { - transmitter->alex_antenna = v; - if (protocol == NEW_PROTOCOL) { - schedule_high_priority(); - } + transmitter->alex_antenna = v; + if (protocol == NEW_PROTOCOL) { + schedule_high_priority(); + } } // @@ -1699,920 +1701,916 @@ void set_alex_tx_antenna(int v) { // receiver, but separately (as is the case with adc_attenuation). // void set_alex_attenuation(int v) { - if (active_receiver->id == 0) { - active_receiver->alex_attenuation = v; - if (protocol == NEW_PROTOCOL) { - schedule_high_priority(); + if (active_receiver->id == 0) { + active_receiver->alex_attenuation = v; + if (protocol == NEW_PROTOCOL) { + schedule_high_priority(); + } } - } } void radioRestoreState() { - char name[32]; - char *value; - int i; - - g_print("radioRestoreState: %s\n", property_path); - g_mutex_lock(&property_mutex); - loadProperties(property_path); - - value = getProperty("display_filled"); - if (value) - display_filled = atoi(value); - value = getProperty("display_gradient"); - if (value) - display_gradient = atoi(value); - value = getProperty("display_zoompan"); - if (value) - display_zoompan = atoi(value); - value = getProperty("display_sliders"); - if (value) - display_sliders = atoi(value); - value = getProperty("display_toolbar"); - if (value) - display_toolbar = atoi(value); + char name[32]; + char *value; + int i; -#ifdef CLIENT_SERVER - if (radio_is_remote) { -#ifdef CLIENT_SERVER -#endif - } else { -#endif + g_print("radioRestoreState: %s\n", property_path); + g_mutex_lock(&property_mutex); + loadProperties(property_path); - value = getProperty("radio_sample_rate"); - if (value) - radio_sample_rate = atoi(value); - value = getProperty("diversity_enabled"); - if (value) - diversity_enabled = atoi(value); - value = getProperty("diversity_gain"); - if (value) - div_gain = atof(value); - value = getProperty("diversity_phase"); - if (value) - div_phase = atof(value); - value = getProperty("diversity_cos"); + value = getProperty("display_filled"); if (value) - div_cos = atof(value); - value = getProperty("diversity_sin"); + display_filled = atoi(value); + value = getProperty("display_gradient"); if (value) - div_sin = atof(value); - value = getProperty("new_pa_board"); + display_gradient = atoi(value); + value = getProperty("display_zoompan"); if (value) - new_pa_board = atoi(value); - value = getProperty("region"); + display_zoompan = atoi(value); + value = getProperty("display_sliders"); if (value) - region = atoi(value); - value = getProperty("buffer_size"); + display_sliders = atoi(value); + value = getProperty("display_toolbar"); if (value) - buffer_size = atoi(value); - value = getProperty("fft_size"); - if (value) - fft_size = atoi(value); - value = getProperty("atlas_penelope"); - if (value) - atlas_penelope = atoi(value); - value = getProperty("tx_out_of_band"); - if (value) - tx_out_of_band = atoi(value); - value = getProperty("filter_board"); - if (value) - filter_board = atoi(value); - value = getProperty("pa_enabled"); - if (value) - pa_enabled = atoi(value); - value = getProperty("pa_power"); - if (value) - pa_power = atoi(value); - for (i = 0; i < 11; i++) { - sprintf(name, "pa_trim[%d]", i); - value = getProperty(name); - if (value) - pa_trim[i] = atoi(value); - } - value = getProperty("updates_per_second"); - if (value) - updates_per_second = atoi(value); - value = getProperty("display_detector_mode"); - if (value) - display_detector_mode = atoi(value); - value = getProperty("display_average_mode"); - if (value) - display_average_mode = atoi(value); - value = getProperty("display_average_time"); - if (value) - display_average_time = atof(value); - value = getProperty("panadapter_high"); - if (value) - panadapter_high = atoi(value); - value = getProperty("panadapter_low"); - if (value) - panadapter_low = atoi(value); - value = getProperty("waterfall_high"); - if (value) - waterfall_high = atoi(value); - value = getProperty("waterfall_low"); - if (value) - waterfall_low = atoi(value); - value = getProperty("mic_gain"); - if (value) - mic_gain = atof(value); - value = getProperty("mic_boost"); - if (value) - mic_boost = atof(value); - value = getProperty("mic_linein"); - if (value) - mic_linein = atoi(value); - value = getProperty("linein_gain"); - if (value) - linein_gain = atoi(value); - value = getProperty("mic_ptt_enabled"); - if (value) - mic_ptt_enabled = atof(value); - value = getProperty("mic_bias_enabled"); - if (value) - mic_bias_enabled = atof(value); - value = getProperty("mic_ptt_tip_bias_ring"); - if (value) - mic_ptt_tip_bias_ring = atof(value); + display_toolbar = atoi(value); - value = getProperty("tx_filter_low"); - if (value) - tx_filter_low = atoi(value); - value = getProperty("tx_filter_high"); - if (value) - tx_filter_high = atoi(value); +#ifdef CLIENT_SERVER + if (radio_is_remote) { +#ifdef CLIENT_SERVER +#endif + } else { +#endif - value = getProperty("step"); - if (value) - step = atoll(value); - value = getProperty("cw_is_on_vfo_freq"); - if (value) - cw_is_on_vfo_freq = atoi(value); - value = getProperty("cw_keys_reversed"); - if (value) - cw_keys_reversed = atoi(value); - value = getProperty("cw_keyer_speed"); - if (value) { - cw_keyer_speed = atoi(value); + value = getProperty("radio_sample_rate"); + if (value) + radio_sample_rate = atoi(value); + value = getProperty("diversity_enabled"); + if (value) + diversity_enabled = atoi(value); + value = getProperty("diversity_gain"); + if (value) + div_gain = atof(value); + value = getProperty("diversity_phase"); + if (value) + div_phase = atof(value); + value = getProperty("diversity_cos"); + if (value) + div_cos = atof(value); + value = getProperty("diversity_sin"); + if (value) + div_sin = atof(value); + value = getProperty("new_pa_board"); + if (value) + new_pa_board = atoi(value); + value = getProperty("region"); + if (value) + region = atoi(value); + value = getProperty("buffer_size"); + if (value) + buffer_size = atoi(value); + value = getProperty("fft_size"); + if (value) + fft_size = atoi(value); + value = getProperty("atlas_penelope"); + if (value) + atlas_penelope = atoi(value); + value = getProperty("tx_out_of_band"); + if (value) + tx_out_of_band = atoi(value); + value = getProperty("filter_board"); + if (value) + filter_board = atoi(value); + value = getProperty("pa_enabled"); + if (value) + pa_enabled = atoi(value); + value = getProperty("pa_power"); + if (value) + pa_power = atoi(value); + for (i = 0; i < 11; i++) { + sprintf(name, "pa_trim[%d]", i); + value = getProperty(name); + if (value) + pa_trim[i] = atoi(value); + } + value = getProperty("updates_per_second"); + if (value) + updates_per_second = atoi(value); + value = getProperty("display_detector_mode"); + if (value) + display_detector_mode = atoi(value); + value = getProperty("display_average_mode"); + if (value) + display_average_mode = atoi(value); + value = getProperty("display_average_time"); + if (value) + display_average_time = atof(value); + value = getProperty("panadapter_high"); + if (value) + panadapter_high = atoi(value); + value = getProperty("panadapter_low"); + if (value) + panadapter_low = atoi(value); + value = getProperty("waterfall_high"); + if (value) + waterfall_high = atoi(value); + value = getProperty("waterfall_low"); + if (value) + waterfall_low = atoi(value); + value = getProperty("mic_gain"); + if (value) + mic_gain = atof(value); + value = getProperty("mic_boost"); + if (value) + mic_boost = atof(value); + value = getProperty("mic_linein"); + if (value) + mic_linein = atoi(value); + value = getProperty("linein_gain"); + if (value) + linein_gain = atoi(value); + value = getProperty("mic_ptt_enabled"); + if (value) + mic_ptt_enabled = atof(value); + value = getProperty("mic_bias_enabled"); + if (value) + mic_bias_enabled = atof(value); + value = getProperty("mic_ptt_tip_bias_ring"); + if (value) + mic_ptt_tip_bias_ring = atof(value); + + value = getProperty("tx_filter_low"); + if (value) + tx_filter_low = atoi(value); + value = getProperty("tx_filter_high"); + if (value) + tx_filter_high = atoi(value); + + value = getProperty("step"); + if (value) + step = atoll(value); + value = getProperty("cw_is_on_vfo_freq"); + if (value) + cw_is_on_vfo_freq = atoi(value); + value = getProperty("cw_keys_reversed"); + if (value) + cw_keys_reversed = atoi(value); + value = getProperty("cw_keyer_speed"); + if (value) { + cw_keyer_speed = atoi(value); #ifdef MIDI - // if we have the midikeyer, set the speed to this value - midi_keyer_update(); + // if we have the midikeyer, set the speed to this value + midi_keyer_update(); #endif - } - value = getProperty("cw_keyer_mode"); - if (value) - cw_keyer_mode = atoi(value); - value = getProperty("cw_keyer_weight"); - if (value) - cw_keyer_weight = atoi(value); - value = getProperty("cw_keyer_spacing"); - if (value) - cw_keyer_spacing = atoi(value); + } + value = getProperty("cw_keyer_mode"); + if (value) + cw_keyer_mode = atoi(value); + value = getProperty("cw_keyer_weight"); + if (value) + cw_keyer_weight = atoi(value); + value = getProperty("cw_keyer_spacing"); + if (value) + cw_keyer_spacing = atoi(value); #ifdef LOCALCW - value = getProperty("cw_keyer_internal"); - if (value) - cw_keyer_internal = atoi(value); + value = getProperty("cw_keyer_internal"); + if (value) + cw_keyer_internal = atoi(value); - value = getProperty("cw_keyer_midi"); - if (value) - cw_keyer_midi = atoi(value); + value = getProperty("cw_keyer_midi"); + if (value) + cw_keyer_midi = atoi(value); #endif - value = getProperty("cw_keyer_sidetone_volume"); - if (value) - cw_keyer_sidetone_volume = atoi(value); - value = getProperty("cw_keyer_ptt_delay"); - if (value) - cw_keyer_ptt_delay = atoi(value); - value = getProperty("cw_keyer_hang_time"); - if (value) - cw_keyer_hang_time = atoi(value); - value = getProperty("cw_keyer_sidetone_frequency"); - if (value) - cw_keyer_sidetone_frequency = atoi(value); - value = getProperty("cw_breakin"); - if (value) - cw_breakin = atoi(value); - value = getProperty("vfo_encoder_divisor"); - if (value) - vfo_encoder_divisor = atoi(value); - value = getProperty("OCtune"); - if (value) - OCtune = atoi(value); - value = getProperty("OCfull_tune_time"); - if (value) - OCfull_tune_time = atoi(value); - value = getProperty("OCmemory_tune_time"); - if (value) - OCmemory_tune_time = atoi(value); - value = getProperty("analog_meter"); - if (value) - analog_meter = atoi(value); - value = getProperty("smeter"); - if (value) - smeter = atoi(value); - value = getProperty("alc"); - if (value) - alc = atoi(value); + value = getProperty("cw_keyer_sidetone_volume"); + if (value) + cw_keyer_sidetone_volume = atoi(value); + value = getProperty("cw_keyer_ptt_delay"); + if (value) + cw_keyer_ptt_delay = atoi(value); + value = getProperty("cw_keyer_hang_time"); + if (value) + cw_keyer_hang_time = atoi(value); + value = getProperty("cw_keyer_sidetone_frequency"); + if (value) + cw_keyer_sidetone_frequency = atoi(value); + value = getProperty("cw_breakin"); + if (value) + cw_breakin = atoi(value); + value = getProperty("vfo_encoder_divisor"); + if (value) + vfo_encoder_divisor = atoi(value); + value = getProperty("OCtune"); + if (value) + OCtune = atoi(value); + value = getProperty("OCfull_tune_time"); + if (value) + OCfull_tune_time = atoi(value); + value = getProperty("OCmemory_tune_time"); + if (value) + OCmemory_tune_time = atoi(value); + value = getProperty("analog_meter"); + if (value) + analog_meter = atoi(value); + value = getProperty("smeter"); + if (value) + smeter = atoi(value); + value = getProperty("alc"); + if (value) + alc = atoi(value); #ifdef OLD_AUDIO - value = getProperty("local_audio"); - if (value) - local_audio = atoi(value); - value = getProperty("n_selected_output_device"); - if (value) - n_selected_output_device = atoi(value); + value = getProperty("local_audio"); + if (value) + local_audio = atoi(value); + value = getProperty("n_selected_output_device"); + if (value) + n_selected_output_device = atoi(value); #endif - value = getProperty("local_microphone"); - if (value) - local_microphone = atoi(value); - // value=getProperty("n_selected_input_device"); - // if(value) n_selected_input_device=atoi(value); - value = getProperty("enable_tx_equalizer"); - if (value) - enable_tx_equalizer = atoi(value); - value = getProperty("tx_equalizer.0"); - if (value) - tx_equalizer[0] = atoi(value); - value = getProperty("tx_equalizer.1"); - if (value) - tx_equalizer[1] = atoi(value); - value = getProperty("tx_equalizer.2"); - if (value) - tx_equalizer[2] = atoi(value); - value = getProperty("tx_equalizer.3"); - if (value) - tx_equalizer[3] = atoi(value); - value = getProperty("enable_rx_equalizer"); - if (value) - enable_rx_equalizer = atoi(value); - value = getProperty("rx_equalizer.0"); - if (value) - rx_equalizer[0] = atoi(value); - value = getProperty("rx_equalizer.1"); - if (value) - rx_equalizer[1] = atoi(value); - value = getProperty("rx_equalizer.2"); - if (value) - rx_equalizer[2] = atoi(value); - value = getProperty("rx_equalizer.3"); - if (value) - rx_equalizer[3] = atoi(value); - value = getProperty("rit_increment"); - if (value) - rit_increment = atoi(value); - value = getProperty("pre_emphasize"); - if (value) - pre_emphasize = atoi(value); - - value = getProperty("vox_enabled"); - if (value) - vox_enabled = atoi(value); - value = getProperty("vox_threshold"); - if (value) - vox_threshold = atof(value); - /* - value=getProperty("vox_gain"); - if(value) vox_gain=atof(value); - */ - value = getProperty("vox_hang"); - if (value) - vox_hang = atof(value); - - value = getProperty("binaural"); - if (value) - binaural = atoi(value); - - value = getProperty("calibration"); - if (value) - calibration = atoll(value); - - value = getProperty("frequencyB"); - if (value) - frequencyB = atoll(value); - - value = getProperty("modeB"); - if (value) - modeB = atoi(value); - - value = getProperty("filterB"); - if (value) - filterB = atoi(value); - - value = getProperty("tone_level"); - if (value) - tone_level = atof(value); - - value = getProperty("receivers"); - if (value) - receivers = atoi(value); - - value = getProperty("iqswap"); - if (value) - iqswap = atoi(value); - - value = getProperty("rx_gain_calibration"); - if (value) - rx_gain_calibration = atoi(value); - - filterRestoreState(); - bandRestoreState(); - memRestoreState(); - vfo_restore_state(); - modesettings_restore_state(); - gpio_restore_actions(); - value = getProperty("rigctl_enable"); - if (value) - rigctl_enable = atoi(value); - value = getProperty("rigctl_port_base"); - if (value) - rigctl_port_base = atoi(value); - - /* - value=getProperty("adc_0_attenuation"); - if(value) adc_attenuation[0]=atoi(value); - value=getProperty("adc_1_attenuation"); - if(value) adc_attenuation[1]=atoi(value); - */ - - value = getProperty("split"); - if (value) - split = atoi(value); - value = getProperty("duplex"); - if (value) - duplex = atoi(value); - value = getProperty("sat_mode"); - if (value) - sat_mode = atoi(value); - value = getProperty("mute_rx_while_transmitting"); - if (value) - mute_rx_while_transmitting = atoi(value); - - value = getProperty("radio.adc[0].filters"); - if (value) - adc[0].filters = atoi(value); - value = getProperty("radio.adc[0].hpf"); - if (value) - adc[0].hpf = atoi(value); - value = getProperty("radio.adc[0].lpf"); - if (value) - adc[0].lpf = atoi(value); - value = getProperty("radio.adc[0].antenna"); - if (value) - adc[0].antenna = atoi(value); - value = getProperty("radio.adc[0].dither"); - if (value) - adc[0].dither = atoi(value); - value = getProperty("radio.adc[0].random"); - if (value) - adc[0].random = atoi(value); - value = getProperty("radio.adc[0].preamp"); - if (value) - adc[0].preamp = atoi(value); - value = getProperty("radio.adc[0].attenuation"); - if (value) - adc[0].attenuation = atoi(value); - value = getProperty("radio.adc[0].enable_step_attenuation"); - if (value) - adc[0].enable_step_attenuation = atoi(value); - value = getProperty("radio.adc[0].gain"); - if (value) - adc[0].gain = atof(value); - value = getProperty("radio.adc[0].min_gain"); - if (value) - adc[0].min_gain = atof(value); - value = getProperty("radio.adc[0].max_gain"); - if (value) - adc[0].max_gain = atof(value); - - - value = getProperty("radio.dac[0].antenna"); - if (value) - dac[0].antenna = atoi(value); - value = getProperty("radio.dac[0].gain"); - if (value) - dac[0].gain = atof(value); - - if (receivers > 1) { - value = getProperty("radio.adc[1].filters"); - if (value) - adc[1].filters = atoi(value); - value = getProperty("radio.adc[1].hpf"); - if (value) - adc[1].hpf = atoi(value); - value = getProperty("radio.adc[1].lpf"); - if (value) - adc[1].lpf = atoi(value); - value = getProperty("radio.adc[1].antenna"); - if (value) - adc[1].antenna = atoi(value); - value = getProperty("radio.adc[1].dither"); - if (value) - adc[1].dither = atoi(value); - value = getProperty("radio.adc[1].random"); - if (value) - adc[1].random = atoi(value); - value = getProperty("radio.adc[1].preamp"); - if (value) - adc[1].preamp = atoi(value); - value = getProperty("radio.adc[1].attenuation"); - if (value) - adc[1].attenuation = atoi(value); - value = getProperty("radio.adc[1].enable_step_attenuation"); - if (value) - adc[1].enable_step_attenuation = atoi(value); - value = getProperty("radio.adc[1].gain"); - if (value) - adc[1].gain = atof(value); - value = getProperty("radio.adc[1].min_gain"); - if (value) - adc[1].min_gain = atof(value); - value = getProperty("radio.adc[1].max_gain"); - if (value) - adc[1].max_gain = atof(value); - - - value = getProperty("radio.dac[1].antenna"); - if (value) - dac[1].antenna = atoi(value); - value = getProperty("radio.dac[1].gain"); - if (value) - dac[1].gain = atof(value); - } + value = getProperty("local_microphone"); + if (value) + local_microphone = atoi(value); + // value=getProperty("n_selected_input_device"); + // if(value) n_selected_input_device=atoi(value); + value = getProperty("enable_tx_equalizer"); + if (value) + enable_tx_equalizer = atoi(value); + value = getProperty("tx_equalizer.0"); + if (value) + tx_equalizer[0] = atoi(value); + value = getProperty("tx_equalizer.1"); + if (value) + tx_equalizer[1] = atoi(value); + value = getProperty("tx_equalizer.2"); + if (value) + tx_equalizer[2] = atoi(value); + value = getProperty("tx_equalizer.3"); + if (value) + tx_equalizer[3] = atoi(value); + value = getProperty("enable_rx_equalizer"); + if (value) + enable_rx_equalizer = atoi(value); + value = getProperty("rx_equalizer.0"); + if (value) + rx_equalizer[0] = atoi(value); + value = getProperty("rx_equalizer.1"); + if (value) + rx_equalizer[1] = atoi(value); + value = getProperty("rx_equalizer.2"); + if (value) + rx_equalizer[2] = atoi(value); + value = getProperty("rx_equalizer.3"); + if (value) + rx_equalizer[3] = atoi(value); + value = getProperty("rit_increment"); + if (value) + rit_increment = atoi(value); + value = getProperty("pre_emphasize"); + if (value) + pre_emphasize = atoi(value); + + value = getProperty("vox_enabled"); + if (value) + vox_enabled = atoi(value); + value = getProperty("vox_threshold"); + if (value) + vox_threshold = atof(value); + /* + value=getProperty("vox_gain"); + if(value) vox_gain=atof(value); + */ + value = getProperty("vox_hang"); + if (value) + vox_hang = atof(value); + + value = getProperty("binaural"); + if (value) + binaural = atoi(value); + + value = getProperty("calibration"); + if (value) + calibration = atoll(value); + + value = getProperty("frequencyB"); + if (value) + frequencyB = atoll(value); + + value = getProperty("modeB"); + if (value) + modeB = atoi(value); + + value = getProperty("filterB"); + if (value) + filterB = atoi(value); + + value = getProperty("tone_level"); + if (value) + tone_level = atof(value); + + value = getProperty("receivers"); + if (value) + receivers = atoi(value); + + value = getProperty("iqswap"); + if (value) + iqswap = atoi(value); + + value = getProperty("rx_gain_calibration"); + if (value) + rx_gain_calibration = atoi(value); + + filterRestoreState(); + bandRestoreState(); + memRestoreState(); + vfo_restore_state(); + modesettings_restore_state(); + gpio_restore_actions(); + value = getProperty("rigctl_enable"); + if (value) + rigctl_enable = atoi(value); + value = getProperty("rigctl_port_base"); + if (value) + rigctl_port_base = atoi(value); + + /* + value=getProperty("adc_0_attenuation"); + if(value) adc_attenuation[0]=atoi(value); + value=getProperty("adc_1_attenuation"); + if(value) adc_attenuation[1]=atoi(value); + */ + + value = getProperty("split"); + if (value) + split = atoi(value); + value = getProperty("duplex"); + if (value) + duplex = atoi(value); + value = getProperty("sat_mode"); + if (value) + sat_mode = atoi(value); + value = getProperty("mute_rx_while_transmitting"); + if (value) + mute_rx_while_transmitting = atoi(value); + + value = getProperty("radio.adc[0].filters"); + if (value) + adc[0].filters = atoi(value); + value = getProperty("radio.adc[0].hpf"); + if (value) + adc[0].hpf = atoi(value); + value = getProperty("radio.adc[0].lpf"); + if (value) + adc[0].lpf = atoi(value); + value = getProperty("radio.adc[0].antenna"); + if (value) + adc[0].antenna = atoi(value); + value = getProperty("radio.adc[0].dither"); + if (value) + adc[0].dither = atoi(value); + value = getProperty("radio.adc[0].random"); + if (value) + adc[0].random = atoi(value); + value = getProperty("radio.adc[0].preamp"); + if (value) + adc[0].preamp = atoi(value); + value = getProperty("radio.adc[0].attenuation"); + if (value) + adc[0].attenuation = atoi(value); + value = getProperty("radio.adc[0].enable_step_attenuation"); + if (value) + adc[0].enable_step_attenuation = atoi(value); + value = getProperty("radio.adc[0].gain"); + if (value) + adc[0].gain = atof(value); + value = getProperty("radio.adc[0].min_gain"); + if (value) + adc[0].min_gain = atof(value); + value = getProperty("radio.adc[0].max_gain"); + if (value) + adc[0].max_gain = atof(value); + + value = getProperty("radio.dac[0].antenna"); + if (value) + dac[0].antenna = atoi(value); + value = getProperty("radio.dac[0].gain"); + if (value) + dac[0].gain = atof(value); + + if (receivers > 1) { + value = getProperty("radio.adc[1].filters"); + if (value) + adc[1].filters = atoi(value); + value = getProperty("radio.adc[1].hpf"); + if (value) + adc[1].hpf = atoi(value); + value = getProperty("radio.adc[1].lpf"); + if (value) + adc[1].lpf = atoi(value); + value = getProperty("radio.adc[1].antenna"); + if (value) + adc[1].antenna = atoi(value); + value = getProperty("radio.adc[1].dither"); + if (value) + adc[1].dither = atoi(value); + value = getProperty("radio.adc[1].random"); + if (value) + adc[1].random = atoi(value); + value = getProperty("radio.adc[1].preamp"); + if (value) + adc[1].preamp = atoi(value); + value = getProperty("radio.adc[1].attenuation"); + if (value) + adc[1].attenuation = atoi(value); + value = getProperty("radio.adc[1].enable_step_attenuation"); + if (value) + adc[1].enable_step_attenuation = atoi(value); + value = getProperty("radio.adc[1].gain"); + if (value) + adc[1].gain = atof(value); + value = getProperty("radio.adc[1].min_gain"); + if (value) + adc[1].min_gain = atof(value); + value = getProperty("radio.adc[1].max_gain"); + if (value) + adc[1].max_gain = atof(value); + + value = getProperty("radio.dac[1].antenna"); + if (value) + dac[1].antenna = atoi(value); + value = getProperty("radio.dac[1].gain"); + if (value) + dac[1].gain = atof(value); + } #ifdef MIDI - midi_restore_state(); - value = getProperty("radio.midi_enabled"); - if (value) - midi_enabled = atoi(value); + midi_restore_state(); + value = getProperty("radio.midi_enabled"); + if (value) + midi_enabled = atoi(value); #endif - value = getProperty("radio.display_sequence_errors"); - if (value != NULL) - display_sequence_errors = atoi(value); + value = getProperty("radio.display_sequence_errors"); + if (value != NULL) + display_sequence_errors = atoi(value); #ifdef CLIENT_SERVER - } + } #endif #ifdef CLIENT_SERVER - value = getProperty("radio.hpsdr_server"); - if (value != NULL) - hpsdr_server = atoi(value); - value = getProperty("radio.hpsdr_server.listen_port"); - if (value != NULL) - listen_port = atoi(value); + value = getProperty("radio.hpsdr_server"); + if (value != NULL) + hpsdr_server = atoi(value); + value = getProperty("radio.hpsdr_server.listen_port"); + if (value != NULL) + listen_port = atoi(value); #endif - g_mutex_unlock(&property_mutex); + g_mutex_unlock(&property_mutex); } void radioSaveState() { - int i; - char value[80]; - char name[32]; - - g_print("radioSaveState: %s\n", property_path); - - g_mutex_lock(&property_mutex); - clearProperties(); - gpio_save_actions(); - sprintf(value, "%d", receivers); - setProperty("receivers", value); - for (i = 0; i < receivers; i++) { - receiver_save_state(receiver[i]); - } - - sprintf(value, "%d", display_filled); - setProperty("display_filled", value); - sprintf(value, "%d", display_gradient); - setProperty("display_gradient", value); - sprintf(value, "%d", display_zoompan); - setProperty("display_zoompan", value); - sprintf(value, "%d", display_sliders); - setProperty("display_sliders", value); - sprintf(value, "%d", display_toolbar); - setProperty("display_toolbar", value); - - if (can_transmit) { + int i; + char value[80]; + char name[32]; + + g_print("radioSaveState: %s\n", property_path); + + g_mutex_lock(&property_mutex); + clearProperties(); + gpio_save_actions(); + sprintf(value, "%d", receivers); + setProperty("receivers", value); + for (i = 0; i < receivers; i++) { + receiver_save_state(receiver[i]); + } + + sprintf(value, "%d", display_filled); + setProperty("display_filled", value); + sprintf(value, "%d", display_gradient); + setProperty("display_gradient", value); + sprintf(value, "%d", display_zoompan); + setProperty("display_zoompan", value); + sprintf(value, "%d", display_sliders); + setProperty("display_sliders", value); + sprintf(value, "%d", display_toolbar); + setProperty("display_toolbar", value); + + if (can_transmit) { #ifdef PURESIGNAL - // The only variables of interest in this receiver are - // the alex_antenna an the adc - receiver_save_state(receiver[PS_RX_FEEDBACK]); + // The only variables of interest in this receiver are + // the alex_antenna an the adc + receiver_save_state(receiver[PS_RX_FEEDBACK]); #endif - transmitter_save_state(transmitter); - } + transmitter_save_state(transmitter); + } #ifdef CLIENT_SERVER - if (!radio_is_remote) { + if (!radio_is_remote) { #endif - sprintf(value, "%d", radio_sample_rate); - setProperty("radio_sample_rate", value); - sprintf(value, "%d", diversity_enabled); - setProperty("diversity_enabled", value); - sprintf(value, "%f", div_gain); - setProperty("diversity_gain", value); - sprintf(value, "%f", div_phase); - setProperty("diversity_phase", value); - sprintf(value, "%f", div_cos); - setProperty("diversity_cos", value); - sprintf(value, "%f", div_sin); - setProperty("diversity_sin", value); - sprintf(value, "%d", new_pa_board); - setProperty("new_pa_board", value); - sprintf(value, "%d", region); - setProperty("region", value); - sprintf(value, "%d", buffer_size); - setProperty("buffer_size", value); - sprintf(value, "%d", fft_size); - setProperty("fft_size", value); - sprintf(value, "%d", atlas_penelope); - setProperty("atlas_penelope", value); - sprintf(value, "%d", filter_board); - setProperty("filter_board", value); - sprintf(value, "%d", tx_out_of_band); - setProperty("tx_out_of_band", value); - sprintf(value, "%d", updates_per_second); - setProperty("updates_per_second", value); - sprintf(value, "%d", display_detector_mode); - setProperty("display_detector_mode", value); - sprintf(value, "%d", display_average_mode); - setProperty("display_average_mode", value); - sprintf(value, "%f", display_average_time); - setProperty("display_average_time", value); - sprintf(value, "%d", panadapter_high); - setProperty("panadapter_high", value); - sprintf(value, "%d", panadapter_low); - setProperty("panadapter_low", value); - sprintf(value, "%d", waterfall_high); - setProperty("waterfall_high", value); - sprintf(value, "%d", waterfall_low); - setProperty("waterfall_low", value); - sprintf(value, "%f", mic_gain); - setProperty("mic_gain", value); - sprintf(value, "%d", mic_boost); - setProperty("mic_boost", value); - sprintf(value, "%d", mic_linein); - setProperty("mic_linein", value); - sprintf(value, "%d", linein_gain); - setProperty("linein_gain", value); - sprintf(value, "%d", mic_ptt_enabled); - setProperty("mic_ptt_enabled", value); - sprintf(value, "%d", mic_bias_enabled); - setProperty("mic_bias_enabled", value); - sprintf(value, "%d", mic_ptt_tip_bias_ring); - setProperty("mic_ptt_tip_bias_ring", value); - sprintf(value, "%d", tx_filter_low); - setProperty("tx_filter_low", value); - sprintf(value, "%d", tx_filter_high); - setProperty("tx_filter_high", value); - sprintf(value, "%d", pa_enabled); - setProperty("pa_enabled", value); - sprintf(value, "%d", pa_power); - setProperty("pa_power", value); - for (i = 0; i < 11; i++) { - sprintf(name, "pa_trim[%d]", i); - sprintf(value, "%d", pa_trim[i]); - setProperty(name, value); - } - - sprintf(value, "%lld", step); - setProperty("step", value); - sprintf(value, "%d", cw_is_on_vfo_freq); - setProperty("cw_is_on_vfo_freq", value); - sprintf(value, "%d", cw_keys_reversed); - setProperty("cw_keys_reversed", value); - sprintf(value, "%d", cw_keyer_speed); - setProperty("cw_keyer_speed", value); - sprintf(value, "%d", cw_keyer_mode); - setProperty("cw_keyer_mode", value); - sprintf(value, "%d", cw_keyer_weight); - setProperty("cw_keyer_weight", value); - sprintf(value, "%d", cw_keyer_spacing); - setProperty("cw_keyer_spacing", value); - sprintf(value, "%d", cw_keyer_internal); - setProperty("cw_keyer_internal", value); - - sprintf(value, "%d", cw_keyer_midi); - setProperty("cw_keyer_midi", value); - - sprintf(value, "%d", cw_keyer_sidetone_volume); - setProperty("cw_keyer_sidetone_volume", value); - sprintf(value, "%d", cw_keyer_ptt_delay); - setProperty("cw_keyer_ptt_delay", value); - sprintf(value, "%d", cw_keyer_hang_time); - setProperty("cw_keyer_hang_time", value); - sprintf(value, "%d", cw_keyer_sidetone_frequency); - setProperty("cw_keyer_sidetone_frequency", value); - sprintf(value, "%d", cw_breakin); - setProperty("cw_breakin", value); - sprintf(value, "%d", vfo_encoder_divisor); - setProperty("vfo_encoder_divisor", value); - sprintf(value, "%d", OCtune); - setProperty("OCtune", value); - sprintf(value, "%d", OCfull_tune_time); - setProperty("OCfull_tune_time", value); - sprintf(value, "%d", OCmemory_tune_time); - setProperty("OCmemory_tune_time", value); - sprintf(value, "%d", analog_meter); - setProperty("analog_meter", value); - sprintf(value, "%d", smeter); - setProperty("smeter", value); - sprintf(value, "%d", alc); - setProperty("alc", value); + sprintf(value, "%d", radio_sample_rate); + setProperty("radio_sample_rate", value); + sprintf(value, "%d", diversity_enabled); + setProperty("diversity_enabled", value); + sprintf(value, "%f", div_gain); + setProperty("diversity_gain", value); + sprintf(value, "%f", div_phase); + setProperty("diversity_phase", value); + sprintf(value, "%f", div_cos); + setProperty("diversity_cos", value); + sprintf(value, "%f", div_sin); + setProperty("diversity_sin", value); + sprintf(value, "%d", new_pa_board); + setProperty("new_pa_board", value); + sprintf(value, "%d", region); + setProperty("region", value); + sprintf(value, "%d", buffer_size); + setProperty("buffer_size", value); + sprintf(value, "%d", fft_size); + setProperty("fft_size", value); + sprintf(value, "%d", atlas_penelope); + setProperty("atlas_penelope", value); + sprintf(value, "%d", filter_board); + setProperty("filter_board", value); + sprintf(value, "%d", tx_out_of_band); + setProperty("tx_out_of_band", value); + sprintf(value, "%d", updates_per_second); + setProperty("updates_per_second", value); + sprintf(value, "%d", display_detector_mode); + setProperty("display_detector_mode", value); + sprintf(value, "%d", display_average_mode); + setProperty("display_average_mode", value); + sprintf(value, "%f", display_average_time); + setProperty("display_average_time", value); + sprintf(value, "%d", panadapter_high); + setProperty("panadapter_high", value); + sprintf(value, "%d", panadapter_low); + setProperty("panadapter_low", value); + sprintf(value, "%d", waterfall_high); + setProperty("waterfall_high", value); + sprintf(value, "%d", waterfall_low); + setProperty("waterfall_low", value); + sprintf(value, "%f", mic_gain); + setProperty("mic_gain", value); + sprintf(value, "%d", mic_boost); + setProperty("mic_boost", value); + sprintf(value, "%d", mic_linein); + setProperty("mic_linein", value); + sprintf(value, "%d", linein_gain); + setProperty("linein_gain", value); + sprintf(value, "%d", mic_ptt_enabled); + setProperty("mic_ptt_enabled", value); + sprintf(value, "%d", mic_bias_enabled); + setProperty("mic_bias_enabled", value); + sprintf(value, "%d", mic_ptt_tip_bias_ring); + setProperty("mic_ptt_tip_bias_ring", value); + sprintf(value, "%d", tx_filter_low); + setProperty("tx_filter_low", value); + sprintf(value, "%d", tx_filter_high); + setProperty("tx_filter_high", value); + sprintf(value, "%d", pa_enabled); + setProperty("pa_enabled", value); + sprintf(value, "%d", pa_power); + setProperty("pa_power", value); + for (i = 0; i < 11; i++) { + sprintf(name, "pa_trim[%d]", i); + sprintf(value, "%d", pa_trim[i]); + setProperty(name, value); + } + + sprintf(value, "%lld", step); + setProperty("step", value); + sprintf(value, "%d", cw_is_on_vfo_freq); + setProperty("cw_is_on_vfo_freq", value); + sprintf(value, "%d", cw_keys_reversed); + setProperty("cw_keys_reversed", value); + sprintf(value, "%d", cw_keyer_speed); + setProperty("cw_keyer_speed", value); + sprintf(value, "%d", cw_keyer_mode); + setProperty("cw_keyer_mode", value); + sprintf(value, "%d", cw_keyer_weight); + setProperty("cw_keyer_weight", value); + sprintf(value, "%d", cw_keyer_spacing); + setProperty("cw_keyer_spacing", value); + sprintf(value, "%d", cw_keyer_internal); + setProperty("cw_keyer_internal", value); + + sprintf(value, "%d", cw_keyer_midi); + setProperty("cw_keyer_midi", value); + + sprintf(value, "%d", cw_keyer_sidetone_volume); + setProperty("cw_keyer_sidetone_volume", value); + sprintf(value, "%d", cw_keyer_ptt_delay); + setProperty("cw_keyer_ptt_delay", value); + sprintf(value, "%d", cw_keyer_hang_time); + setProperty("cw_keyer_hang_time", value); + sprintf(value, "%d", cw_keyer_sidetone_frequency); + setProperty("cw_keyer_sidetone_frequency", value); + sprintf(value, "%d", cw_breakin); + setProperty("cw_breakin", value); + sprintf(value, "%d", vfo_encoder_divisor); + setProperty("vfo_encoder_divisor", value); + sprintf(value, "%d", OCtune); + setProperty("OCtune", value); + sprintf(value, "%d", OCfull_tune_time); + setProperty("OCfull_tune_time", value); + sprintf(value, "%d", OCmemory_tune_time); + setProperty("OCmemory_tune_time", value); + sprintf(value, "%d", analog_meter); + setProperty("analog_meter", value); + sprintf(value, "%d", smeter); + setProperty("smeter", value); + sprintf(value, "%d", alc); + setProperty("alc", value); #ifdef OLD_AUDIO - sprintf(value, "%d", local_audio); - setProperty("local_audio", value); - sprintf(value, "%d", n_selected_output_device); - setProperty("n_selected_output_device", value); + sprintf(value, "%d", local_audio); + setProperty("local_audio", value); + sprintf(value, "%d", n_selected_output_device); + setProperty("n_selected_output_device", value); #endif - sprintf(value, "%d", local_microphone); - setProperty("local_microphone", value); - - sprintf(value, "%d", enable_tx_equalizer); - setProperty("enable_tx_equalizer", value); - sprintf(value, "%d", tx_equalizer[0]); - setProperty("tx_equalizer.0", value); - sprintf(value, "%d", tx_equalizer[1]); - setProperty("tx_equalizer.1", value); - sprintf(value, "%d", tx_equalizer[2]); - setProperty("tx_equalizer.2", value); - sprintf(value, "%d", tx_equalizer[3]); - setProperty("tx_equalizer.3", value); - sprintf(value, "%d", enable_rx_equalizer); - setProperty("enable_rx_equalizer", value); - sprintf(value, "%d", rx_equalizer[0]); - setProperty("rx_equalizer.0", value); - sprintf(value, "%d", rx_equalizer[1]); - setProperty("rx_equalizer.1", value); - sprintf(value, "%d", rx_equalizer[2]); - setProperty("rx_equalizer.2", value); - sprintf(value, "%d", rx_equalizer[3]); - setProperty("rx_equalizer.3", value); - sprintf(value, "%d", rit_increment); - setProperty("rit_increment", value); - sprintf(value, "%d", pre_emphasize); - setProperty("pre_emphasize", value); - - sprintf(value, "%d", vox_enabled); - setProperty("vox_enabled", value); - sprintf(value, "%f", vox_threshold); - setProperty("vox_threshold", value); - sprintf(value, "%f", vox_hang); - setProperty("vox_hang", value); - - sprintf(value, "%d", binaural); - setProperty("binaural", value); - - sprintf(value, "%lld", calibration); - setProperty("calibration", value); - - sprintf(value, "%lld", frequencyB); - setProperty("frequencyB", value); - sprintf(value, "%d", modeB); - setProperty("modeB", value); - sprintf(value, "%d", filterB); - setProperty("filterB", value); - - sprintf(value, "%f", tone_level); - setProperty("tone_level", value); - - /* - sprintf(value,"%d",adc_attenuation[0]); - setProperty("adc_0_attenuation",value); - sprintf(value,"%d",adc_attenuation[1]); - setProperty("adc_1_attenuation",value); - */ - - sprintf(value, "%d", rx_gain_calibration); - setProperty("rx_gain_calibration", value); - - sprintf(value, "%d", adc[0].filters); - setProperty("radio.adc[0].filters", value); - sprintf(value, "%d", adc[0].hpf); - setProperty("radio.adc[0].hpf", value); - sprintf(value, "%d", adc[0].lpf); - setProperty("radio.adc[0].lpf", value); - sprintf(value, "%d", adc[0].antenna); - setProperty("radio.adc[0].antenna", value); - sprintf(value, "%d", adc[0].dither); - setProperty("radio.adc[0].dither", value); - sprintf(value, "%d", adc[0].random); - setProperty("radio.adc[0].random", value); - sprintf(value, "%d", adc[0].preamp); - setProperty("radio.adc[0].preamp", value); - sprintf(value, "%d", adc[0].attenuation); - setProperty("radio.adc[0].attenuation", value); - sprintf(value, "%d", adc[0].enable_step_attenuation); - setProperty("radio.adc[0].enable_step_attenuation", value); - sprintf(value, "%f", adc[0].gain); - setProperty("radio.adc[0].gain", value); - sprintf(value, "%f", adc[0].min_gain); - setProperty("radio.adc[0].min_gain", value); - sprintf(value, "%f", adc[0].max_gain); - setProperty("radio.adc[0].max_gain", value); - - - sprintf(value, "%d", dac[0].antenna); - setProperty("radio.dac[0].antenna", value); - sprintf(value, "%f", dac[0].gain); - setProperty("radio.dac[0].gain", value); - - if (receivers > 1) { - sprintf(value, "%d", adc[1].filters); - setProperty("radio.adc[1].filters", value); - sprintf(value, "%d", adc[1].hpf); - setProperty("radio.adc[1].hpf", value); - sprintf(value, "%d", adc[1].lpf); - setProperty("radio.adc[1].lpf", value); - sprintf(value, "%d", adc[1].antenna); - setProperty("radio.adc[1].antenna", value); - sprintf(value, "%d", adc[1].dither); - setProperty("radio.adc[1].dither", value); - sprintf(value, "%d", adc[1].random); - setProperty("radio.adc[1].random", value); - sprintf(value, "%d", adc[1].preamp); - setProperty("radio.adc[1].preamp", value); - sprintf(value, "%d", adc[1].attenuation); - setProperty("radio.adc[1].attenuation", value); - sprintf(value, "%d", adc[1].enable_step_attenuation); - setProperty("radio.adc[1].enable_step_attenuation", value); - sprintf(value, "%f", adc[1].gain); - setProperty("radio.adc[1].gain", value); - sprintf(value, "%f", adc[1].min_gain); - setProperty("radio.adc[1].min_gain", value); - sprintf(value, "%f", adc[1].max_gain); - setProperty("radio.adc[1].max_gain", value); - - - sprintf(value, "%d", dac[1].antenna); - setProperty("radio.dac[1].antenna", value); - sprintf(value, "%f", dac[1].gain); - setProperty("radio.dac[1].gain", value); - } + sprintf(value, "%d", local_microphone); + setProperty("local_microphone", value); + + sprintf(value, "%d", enable_tx_equalizer); + setProperty("enable_tx_equalizer", value); + sprintf(value, "%d", tx_equalizer[0]); + setProperty("tx_equalizer.0", value); + sprintf(value, "%d", tx_equalizer[1]); + setProperty("tx_equalizer.1", value); + sprintf(value, "%d", tx_equalizer[2]); + setProperty("tx_equalizer.2", value); + sprintf(value, "%d", tx_equalizer[3]); + setProperty("tx_equalizer.3", value); + sprintf(value, "%d", enable_rx_equalizer); + setProperty("enable_rx_equalizer", value); + sprintf(value, "%d", rx_equalizer[0]); + setProperty("rx_equalizer.0", value); + sprintf(value, "%d", rx_equalizer[1]); + setProperty("rx_equalizer.1", value); + sprintf(value, "%d", rx_equalizer[2]); + setProperty("rx_equalizer.2", value); + sprintf(value, "%d", rx_equalizer[3]); + setProperty("rx_equalizer.3", value); + sprintf(value, "%d", rit_increment); + setProperty("rit_increment", value); + sprintf(value, "%d", pre_emphasize); + setProperty("pre_emphasize", value); + + sprintf(value, "%d", vox_enabled); + setProperty("vox_enabled", value); + sprintf(value, "%f", vox_threshold); + setProperty("vox_threshold", value); + sprintf(value, "%f", vox_hang); + setProperty("vox_hang", value); + + sprintf(value, "%d", binaural); + setProperty("binaural", value); + + sprintf(value, "%lld", calibration); + setProperty("calibration", value); + + sprintf(value, "%lld", frequencyB); + setProperty("frequencyB", value); + sprintf(value, "%d", modeB); + setProperty("modeB", value); + sprintf(value, "%d", filterB); + setProperty("filterB", value); + + sprintf(value, "%f", tone_level); + setProperty("tone_level", value); + + /* + sprintf(value,"%d",adc_attenuation[0]); + setProperty("adc_0_attenuation",value); + sprintf(value,"%d",adc_attenuation[1]); + setProperty("adc_1_attenuation",value); + */ + + sprintf(value, "%d", rx_gain_calibration); + setProperty("rx_gain_calibration", value); + + sprintf(value, "%d", adc[0].filters); + setProperty("radio.adc[0].filters", value); + sprintf(value, "%d", adc[0].hpf); + setProperty("radio.adc[0].hpf", value); + sprintf(value, "%d", adc[0].lpf); + setProperty("radio.adc[0].lpf", value); + sprintf(value, "%d", adc[0].antenna); + setProperty("radio.adc[0].antenna", value); + sprintf(value, "%d", adc[0].dither); + setProperty("radio.adc[0].dither", value); + sprintf(value, "%d", adc[0].random); + setProperty("radio.adc[0].random", value); + sprintf(value, "%d", adc[0].preamp); + setProperty("radio.adc[0].preamp", value); + sprintf(value, "%d", adc[0].attenuation); + setProperty("radio.adc[0].attenuation", value); + sprintf(value, "%d", adc[0].enable_step_attenuation); + setProperty("radio.adc[0].enable_step_attenuation", value); + sprintf(value, "%f", adc[0].gain); + setProperty("radio.adc[0].gain", value); + sprintf(value, "%f", adc[0].min_gain); + setProperty("radio.adc[0].min_gain", value); + sprintf(value, "%f", adc[0].max_gain); + setProperty("radio.adc[0].max_gain", value); + + sprintf(value, "%d", dac[0].antenna); + setProperty("radio.dac[0].antenna", value); + sprintf(value, "%f", dac[0].gain); + setProperty("radio.dac[0].gain", value); + + if (receivers > 1) { + sprintf(value, "%d", adc[1].filters); + setProperty("radio.adc[1].filters", value); + sprintf(value, "%d", adc[1].hpf); + setProperty("radio.adc[1].hpf", value); + sprintf(value, "%d", adc[1].lpf); + setProperty("radio.adc[1].lpf", value); + sprintf(value, "%d", adc[1].antenna); + setProperty("radio.adc[1].antenna", value); + sprintf(value, "%d", adc[1].dither); + setProperty("radio.adc[1].dither", value); + sprintf(value, "%d", adc[1].random); + setProperty("radio.adc[1].random", value); + sprintf(value, "%d", adc[1].preamp); + setProperty("radio.adc[1].preamp", value); + sprintf(value, "%d", adc[1].attenuation); + setProperty("radio.adc[1].attenuation", value); + sprintf(value, "%d", adc[1].enable_step_attenuation); + setProperty("radio.adc[1].enable_step_attenuation", value); + sprintf(value, "%f", adc[1].gain); + setProperty("radio.adc[1].gain", value); + sprintf(value, "%f", adc[1].min_gain); + setProperty("radio.adc[1].min_gain", value); + sprintf(value, "%f", adc[1].max_gain); + setProperty("radio.adc[1].max_gain", value); + + sprintf(value, "%d", dac[1].antenna); + setProperty("radio.dac[1].antenna", value); + sprintf(value, "%f", dac[1].gain); + setProperty("radio.dac[1].gain", value); + } - sprintf(value, "%d", receivers); - setProperty("receivers", value); + sprintf(value, "%d", receivers); + setProperty("receivers", value); - sprintf(value, "%d", iqswap); - setProperty("iqswap", value); + sprintf(value, "%d", iqswap); + setProperty("iqswap", value); #ifdef CLIENT_SERVER - sprintf(value, "%d", hpsdr_server); - setProperty("radio.hpsdr_server", value); - sprintf(value, "%d", listen_port); - setProperty("radio.hpsdr_server.listen_port", value); + sprintf(value, "%d", hpsdr_server); + setProperty("radio.hpsdr_server", value); + sprintf(value, "%d", listen_port); + setProperty("radio.hpsdr_server.listen_port", value); #endif - vfo_save_state(); - modesettings_save_state(); - - sprintf(value, "%d", duplex); - setProperty("duplex", value); - sprintf(value, "%d", split); - setProperty("split", value); - sprintf(value, "%d", sat_mode); - setProperty("sat_mode", value); - sprintf(value, "%d", mute_rx_while_transmitting); - setProperty("mute_rx_while_transmitting", value); - - filterSaveState(); - bandSaveState(); - memSaveState(); - - sprintf(value, "%d", rigctl_enable); - setProperty("rigctl_enable", value); - sprintf(value, "%d", rigctl_port_base); - setProperty("rigctl_port_base", value); - - sprintf(value, "%d", display_sequence_errors); - setProperty("radio.display_sequence_errors", value); + vfo_save_state(); + modesettings_save_state(); + + sprintf(value, "%d", duplex); + setProperty("duplex", value); + sprintf(value, "%d", split); + setProperty("split", value); + sprintf(value, "%d", sat_mode); + setProperty("sat_mode", value); + sprintf(value, "%d", mute_rx_while_transmitting); + setProperty("mute_rx_while_transmitting", value); + + filterSaveState(); + bandSaveState(); + memSaveState(); + + sprintf(value, "%d", rigctl_enable); + setProperty("rigctl_enable", value); + sprintf(value, "%d", rigctl_port_base); + setProperty("rigctl_port_base", value); + + sprintf(value, "%d", display_sequence_errors); + setProperty("radio.display_sequence_errors", value); #ifdef CLIENT_SERVER - } + } #endif #ifdef MIDI - sprintf(value, "%d", midi_enabled); - setProperty("radio.midi_enabled", value); - midi_save_state(); + sprintf(value, "%d", midi_enabled); + setProperty("radio.midi_enabled", value); + midi_save_state(); #endif - - saveProperties(property_path); - g_mutex_unlock(&property_mutex); + + saveProperties(property_path); + g_mutex_unlock(&property_mutex); } void calculate_display_average(RECEIVER *rx) { - double display_avb; - int display_average; - - double t = 0.001 * display_average_time; - display_avb = exp(-1.0 / ((double)rx->fps * t)); - display_average = max(2, (int)fmin(60, (double)rx->fps * t)); - SetDisplayAvBackmult(rx->id, 0, display_avb); - SetDisplayNumAverage(rx->id, 0, display_average); + double display_avb; + int display_average; + + double t = 0.001 * display_average_time; + display_avb = exp(-1.0 / ((double)rx->fps * t)); + display_average = max(2, (int)fmin(60, (double)rx->fps * t)); + SetDisplayAvBackmult(rx->id, 0, display_avb); + SetDisplayNumAverage(rx->id, 0, display_average); } void set_filter_type(int filter_type) { - int i; - - // g_print("set_filter_type: %d\n",filter_type); - for (i = 0; i < RECEIVERS; i++) { - receiver[i]->low_latency = filter_type; - RXASetMP(receiver[i]->id, filter_type); - } - transmitter->low_latency = filter_type; - TXASetMP(transmitter->id, filter_type); + int i; + + // g_print("set_filter_type: %d\n",filter_type); + for (i = 0; i < RECEIVERS; i++) { + receiver[i]->low_latency = filter_type; + RXASetMP(receiver[i]->id, filter_type); + } + transmitter->low_latency = filter_type; + TXASetMP(transmitter->id, filter_type); } void set_filter_size(int filter_size) { - int i; - - // g_print("set_filter_size: %d\n",filter_size); - for (i = 0; i < RECEIVERS; i++) { - receiver[i]->fft_size = filter_size; - RXASetNC(receiver[i]->id, filter_size); - } - transmitter->fft_size = filter_size; - TXASetNC(transmitter->id, filter_size); + int i; + + // g_print("set_filter_size: %d\n",filter_size); + for (i = 0; i < RECEIVERS; i++) { + receiver[i]->fft_size = filter_size; + RXASetNC(receiver[i]->id, filter_size); + } + transmitter->fft_size = filter_size; + TXASetNC(transmitter->id, filter_size); } void radio_change_region(int r) { - region = r; - switch (region) { - case REGION_UK: - channel_entries = UK_CHANNEL_ENTRIES; - band_channels_60m = &band_channels_60m_UK[0]; - bandstack60.entries = UK_CHANNEL_ENTRIES; - bandstack60.current_entry = 0; - bandstack60.entry = bandstack_entries60_UK; - break; - case REGION_OTHER: - channel_entries = OTHER_CHANNEL_ENTRIES; - band_channels_60m = &band_channels_60m_OTHER[0]; - bandstack60.entries = OTHER_CHANNEL_ENTRIES; - bandstack60.current_entry = 0; - bandstack60.entry = bandstack_entries60_OTHER; - break; - case REGION_WRC15: - channel_entries = WRC15_CHANNEL_ENTRIES; - band_channels_60m = &band_channels_60m_WRC15[0]; - bandstack60.entries = WRC15_CHANNEL_ENTRIES; - bandstack60.current_entry = 0; - bandstack60.entry = bandstack_entries60_WRC15; - break; - } + region = r; + switch (region) { + case REGION_UK: + channel_entries = UK_CHANNEL_ENTRIES; + band_channels_60m = &band_channels_60m_UK[0]; + bandstack60.entries = UK_CHANNEL_ENTRIES; + bandstack60.current_entry = 0; + bandstack60.entry = bandstack_entries60_UK; + break; + case REGION_OTHER: + channel_entries = OTHER_CHANNEL_ENTRIES; + band_channels_60m = &band_channels_60m_OTHER[0]; + bandstack60.entries = OTHER_CHANNEL_ENTRIES; + bandstack60.current_entry = 0; + bandstack60.entry = bandstack_entries60_OTHER; + break; + case REGION_WRC15: + channel_entries = WRC15_CHANNEL_ENTRIES; + band_channels_60m = &band_channels_60m_WRC15[0]; + bandstack60.entries = WRC15_CHANNEL_ENTRIES; + bandstack60.current_entry = 0; + bandstack60.entry = bandstack_entries60_WRC15; + break; + } } #ifdef CLIENT_SERVER int remote_start(void *data) { - char *server = (char *)data; - sprintf(property_path, "%s@%s.props", name, server); - radio_is_remote = TRUE; + char *server = (char *)data; + sprintf(property_path, "%s@%s.props", name, server); + radio_is_remote = TRUE; #ifdef GPIO - switch (controller) { - case CONTROLLER2_V1: - case CONTROLLER2_V2: - display_zoompan = 1; - display_sliders = 0; - display_toolbar = 0; - break; - default: + switch (controller) { + case CONTROLLER2_V1: + case CONTROLLER2_V2: + display_zoompan = 1; + display_sliders = 0; + display_toolbar = 0; + break; + default: + display_zoompan = 1; + display_sliders = 1; + display_toolbar = 1; + break; + } +#else display_zoompan = 1; display_sliders = 1; display_toolbar = 1; - break; - } -#else - display_zoompan = 1; - display_sliders = 1; - display_toolbar = 1; #endif - radioRestoreState(); - create_visual(); - for (int i = 0; i < receivers; i++) { - receiver_restore_state(receiver[i]); - if (receiver[i]->local_audio) { - if (audio_open_output(receiver[i])) { - receiver[i]->local_audio = 0; - } - } - } - reconfigure_radio(); - g_idle_add(ext_vfo_update, (gpointer)NULL); - gdk_window_set_cursor(gtk_widget_get_window(top_window), - gdk_cursor_new(GDK_ARROW)); + radioRestoreState(); + create_visual(); + for (int i = 0; i < receivers; i++) { + receiver_restore_state(receiver[i]); + if (receiver[i]->local_audio) { + if (audio_open_output(receiver[i])) { + receiver[i]->local_audio = 0; + } + } + } + reconfigure_radio(); + g_idle_add(ext_vfo_update, (gpointer)NULL); + gdk_window_set_cursor(gtk_widget_get_window(top_window), + gdk_cursor_new(GDK_ARROW)); #ifdef MIDI - MIDIstartup(); - if (cw_keyer_midi == 1) { - midi_keyer_update(); - } + MIDIstartup(); + if (cw_keyer_midi == 1) { + midi_keyer_update(); + } #endif - for (int i = 0; i < receivers; i++) { - gint timer_id = gdk_threads_add_timeout_full( - G_PRIORITY_DEFAULT_IDLE, 100, start_spectrum, receiver[i], NULL); - } - start_vfo_timer(); - remote_started = TRUE; - return 0; + for (int i = 0; i < receivers; i++) { + gint timer_id = gdk_threads_add_timeout_full( + G_PRIORITY_DEFAULT_IDLE, 100, start_spectrum, receiver[i], NULL); + } + start_vfo_timer(); + remote_started = TRUE; + return 0; } #endif diff --git a/receiver.c b/receiver.c index 4ecfb47..db9b498 100644 --- a/receiver.c +++ b/receiver.c @@ -1438,7 +1438,6 @@ void receiver_frequency_changed(RECEIVER *rx) { int id = rx->id; if (vfo[id].ctun) { - long long frequency = vfo[id].frequency; long long half = (long long)rx->sample_rate / 2LL; long long rx_low = vfo[id].ctun_frequency + rx->filter_low; -- 2.45.2