From 24f4e18811bfafec314aff8b41bdcecbc358d89f Mon Sep 17 00:00:00 2001 From: c vw Date: Tue, 6 Aug 2019 19:22:11 +0200 Subject: [PATCH] some corrections --- MacOS/Info.plist | 10 ++++--- MacOS/hpsdr.png | Bin 15116 -> 21117 bytes MacOS/pihpsdr.sh | 12 ++++++-- discovery.c | 7 ++--- ext.c | 5 ++++ ext.h | 1 + hpsdrsim.c | 22 -------------- hpsdrsim.h | 24 +++++++++++++++ meter.c | 15 ++++++++++ midi3.c | 12 ++++---- newhpsdrsim.c | 17 ++++++++--- ps_menu.c | 8 +++-- radio.c | 9 ++++++ rx_menu.c | 75 +++++++++++++++++++++-------------------------- rx_panadapter.c | 5 ++++ sliders.c | 66 +++++++++++++++++++++++++++++++++++++---- step_menu.c | 2 +- toolbar.c | 16 +++++----- 18 files changed, 207 insertions(+), 99 deletions(-) diff --git a/MacOS/Info.plist b/MacOS/Info.plist index 09c46c3..f077b42 100644 --- a/MacOS/Info.plist +++ b/MacOS/Info.plist @@ -2,7 +2,7 @@ - CFBundleIdentifier + CFBundleIdentifier piHPSDR CFBundleExecutable pihpsdr @@ -10,9 +10,11 @@ hpsdr.icns CFBundlePackageType APPL - CFBundleSignature + CFBundleSignature BNDL - NSMicrophoneUsageDescription - Allow for using Sound input devices + NSMicrophoneUsageDescription + Allow for using Sound input devices + CFBundleInfoDictionaryVersion + 6.0 diff --git a/MacOS/hpsdr.png b/MacOS/hpsdr.png index ea96fd7a497da5a35c56bef1c6e4636163882aed..8ad5dd26f35115f36a71f6fe4498e984ce34e457 100755 GIT binary patch literal 21117 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 $HOME/test.out + +mkdir -p "$localdir" +cd "$localdir" cp $this/../Resources/hpsdr.png . exec $this/pihpsdr-bin diff --git a/discovery.c b/discovery.c index da5b866..5de6a0a 100644 --- a/discovery.c +++ b/discovery.c @@ -317,13 +317,13 @@ fprintf(stderr,"%p Protocol=%d name=%s\n",d,d->protocol,d->name); } GtkWidget *label=gtk_label_new(text); - gtk_widget_override_font(label, pango_font_description_from_string("FreeMono 12")); + gtk_widget_override_font(label, pango_font_description_from_string("Sans 11")); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_widget_show(label); gtk_grid_attach(GTK_GRID(grid),label,0,i,3,1); GtkWidget *start_button=gtk_button_new_with_label("Start"); - gtk_widget_override_font(start_button, pango_font_description_from_string("FreeMono 18")); + gtk_widget_override_font(start_button, pango_font_description_from_string("Sans 16")); gtk_widget_show(start_button); gtk_grid_attach(GTK_GRID(grid),start_button,3,i,1,1); g_signal_connect(start_button,"button_press_event",G_CALLBACK(start_cb),(gpointer)d); @@ -347,8 +347,7 @@ fprintf(stderr,"%p Protocol=%d name=%s\n",d,d->protocol,d->name); gtk_widget_set_sensitive(start_button, FALSE); } else { apps_combobox[i] = gtk_combo_box_text_new(); - gtk_widget_override_font(apps_combobox[i], - pango_font_description_from_string("FreeMono 12")); + gtk_widget_override_font(apps_combobox[i], pango_font_description_from_string("Sans 11")); // We want the default selection priority for the STEMlab app to be // RP-Trx > HAMlab-Trx > Pavel-Trx > Pavel-Rx, so we add in decreasing order and // always set the newly added entry to be active. diff --git a/ext.c b/ext.c index fe33284..1379c5c 100644 --- a/ext.c +++ b/ext.c @@ -197,6 +197,11 @@ int ext_set_drive(void *data) { return 0; } +int ext_set_compression(void *data) { + set_compression(transmitter); + return 0; +} + int ext_vfo_a_swap_b(void *data) { vfo_a_swap_b(); return 0; diff --git a/ext.h b/ext.h index 98ae352..97ab829 100644 --- a/ext.h +++ b/ext.h @@ -66,3 +66,4 @@ int ext_vfo_b_to_a(void *data); int ext_update_att_preamp(void *data); int ext_set_alex_attenuation(void *data); int ext_set_attenuation_value(void *data); +int ext_set_compression(void *data); diff --git a/hpsdrsim.c b/hpsdrsim.c index 97e3820..90fb695 100644 --- a/hpsdrsim.c +++ b/hpsdrsim.c @@ -167,28 +167,6 @@ static double last_i_sample=0.0; static double last_q_sample=0.0; static int txptr=0; -// -// Unfortunately, the code number of the gear -// differes in old and new protocol -// - -#define DEVICE_ATLAS 0 -#define DEVICE_HERMES 1 -#define DEVICE_HERMES2 2 -#define DEVICE_ANGELIA 4 -#define DEVICE_ORION 5 -#define DEVICE_HERMES_LITE 6 -#define DEVICE_ORION2 10 -#define DEVICE_C25 100 - -#define NEW_DEVICE_ATLAS 0 -#define NEW_DEVICE_HERMES 1 -#define NEW_DEVICE_HERMES2 2 -#define NEW_DEVICE_ANGELIA 3 -#define NEW_DEVICE_ORION 4 -#define NEW_DEVICE_ORION2 5 -#define NEW_DEVICE_HERMES_LITE 6 - int main(int argc, char *argv[]) { int i, j, size; diff --git a/hpsdrsim.h b/hpsdrsim.h index 79e6e56..e89b041 100644 --- a/hpsdrsim.h +++ b/hpsdrsim.h @@ -11,6 +11,28 @@ // /////////////////////////////////////////////////////////////////////////// +// +// Unfortunately, the code number of the gear +// differes in old and new protocol +// + +#define DEVICE_ATLAS 0 +#define DEVICE_HERMES 1 +#define DEVICE_HERMES2 2 +#define DEVICE_ANGELIA 4 +#define DEVICE_ORION 5 +#define DEVICE_HERMES_LITE 6 +#define DEVICE_ORION2 10 +#define DEVICE_C25 100 + +#define NEW_DEVICE_ATLAS 0 +#define NEW_DEVICE_HERMES 1 +#define NEW_DEVICE_HERMES2 2 +#define NEW_DEVICE_ANGELIA 3 +#define NEW_DEVICE_ORION 4 +#define NEW_DEVICE_ORION2 5 +#define NEW_DEVICE_HERMES_LITE 6 + EXTERN int OLDDEVICE; EXTERN int NEWDEVICE; @@ -94,6 +116,8 @@ extern int clock_nanosleep(clockid_t __clock_id, int __flags, // // Constants defining the distortion of the TX signal +// These give about -24 dBc at full drive, that is +// about the value a reasonable amp gives. // #define IM3a 0.60 #define IM3b 0.20 diff --git a/meter.c b/meter.c index 137eb05..e154ad5 100644 --- a/meter.c +++ b/meter.c @@ -237,6 +237,13 @@ if(analog_meter) { if (rx->preamp) level -= 18.0; if (rx->dither) level -= 18.0; } + // + // Assume that alex_attenuation is set correctly if we have an ALEX board + // + if (filter_board == ALEX && rx->adc == 0) { + level += 10*rx->alex_attenuation; + } + offset=210.0; int i; @@ -543,6 +550,14 @@ if(analog_meter) { if (rx->preamp) level -= 18.0; if (rx->dither) level -= 18.0; } + + // + // Assume that alex_attenuation is set correctly if we have an ALEX board + // + if (filter_board == ALEX && rx->adc == 0) { + level += 10*rx->alex_attenuation; + } + if(meter_width>=114) { //int db=meter_width/114; // S9+60 (9*6)+60 //if(db>2) db=2; diff --git a/midi3.c b/midi3.c index 3fd2f94..7e035c7 100644 --- a/midi3.c +++ b/midi3.c @@ -214,10 +214,12 @@ void DoTheMidi(enum MIDIaction action, enum MIDItype type, int val) { case ATT: // Key for ALEX attenuator, wheel or knob for slider switch(type) { case MIDI_KEY: - new=active_receiver->alex_attenuation + 1; - if (new > 3) new=0; - g_idle_add(ext_set_alex_attenuation, (gpointer)(uintptr_t)new); - g_idle_add(ext_update_att_preamp, NULL); + if (filter_board == ALEX && active_receiver->adc == 0) { + new=active_receiver->alex_attenuation + 1; + if (new > 3) new=0; + g_idle_add(ext_set_alex_attenuation, (gpointer)(uintptr_t)new); + g_idle_add(ext_update_att_preamp, NULL); + } break; case MIDI_WHEEL: case MIDI_KNOB: @@ -250,7 +252,7 @@ void DoTheMidi(enum MIDIaction action, enum MIDItype type, int val) { transmitter->compressor_level=dnew; if (dnew < 0.5) transmitter->compressor=0; if (dnew > 0.5) transmitter->compressor=1; - g_idle_add(ext_vfo_update, NULL); + g_idle_add(ext_set_compression, NULL); break; case NB: // cycle through NoiseBlanker settings diff --git a/newhpsdrsim.c b/newhpsdrsim.c index bc4eaa1..ba72616 100644 --- a/newhpsdrsim.c +++ b/newhpsdrsim.c @@ -319,6 +319,7 @@ void *ddc_specific_thread(void *data) { if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("***** ERROR: RX specific: bind"); + close(sock); return NULL; } @@ -437,6 +438,7 @@ void *duc_specific_thread(void *data) { if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("***** ERROR: TXspec: bind"); + close(sock); return NULL; } @@ -548,6 +550,7 @@ void *highprio_thread(void *data) { if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("***** ERROR: HP: bind"); + close(sock); return NULL; } @@ -702,9 +705,14 @@ void *highprio_thread(void *data) { rc=buffer[1443]; if (rc != stepatt0) { stepatt0=rc; - rxatt0_dbl=pow(10.0, -0.05*stepatt0); fprintf(stderr,"HP: StepAtt0 = %d\n", stepatt0); } + // rxatt0 depends both on ALEX att and Step Att, so re-calc. it each time + if (NEWDEVICE == NEW_DEVICE_ORION2) { + rxatt0_dbl=pow(10.0, -0.05*stepatt0); + } else { + rxatt0_dbl=pow(10.0, -0.05*(stepatt0+10*alex0[14]+20*alex0[13])); + } } return NULL; } @@ -804,7 +812,7 @@ void *rx_thread(void *data) { wait=238000000L/rxrate[myddc]; // time for these samples in nano-secs } // - // ADC0 RX: noise + 800Hz signal at -100 dBm + // ADC0 RX: noise + 800Hz signal at -73 dBm // ADC0 TX: noise + distorted TX signal // ADC1 RX: noise // ADC1 TX: HERMES only: original TX signal @@ -859,8 +867,8 @@ void *rx_thread(void *data) { i1sample = irsample * 0.2899; q1sample = qrsample * 0.2899; } else if (myadc == 0) { - i0sample += toneItab[tonept] * 0.00001 * rxatt0_dbl; - q0sample += toneQtab[tonept] * 0.00001 * rxatt0_dbl; + i0sample += toneItab[tonept] * 0.0002239 * rxatt0_dbl; + q0sample += toneQtab[tonept] * 0.0002239 * rxatt0_dbl; tonept += decimation; if (tonept >= LENTONE) tonept=0; } if (diversity && !sync && myadc == 0) { @@ -1026,6 +1034,7 @@ void *tx_thread(void * data) { } txlevel=sum * txdrv_dbl * txdrv_dbl * 0.0041667; } + close(sock); return NULL; } diff --git a/ps_menu.c b/ps_menu.c index fb80d26..acd90ad 100644 --- a/ps_menu.c +++ b/ps_menu.c @@ -306,7 +306,9 @@ static void resume_cb(GtkWidget *widget, gpointer data) { if(transmitter->auto_on) { transmitter->attenuation=0; } - SetPSControl(transmitter->id, 0, 0, 1, 0); + if (transmitter->puresignal) { + SetPSControl(transmitter->id, 0, 0, 1, 0); + } } static void feedback_cb(GtkWidget *widget, gpointer data) { @@ -320,7 +322,9 @@ static void feedback_cb(GtkWidget *widget, gpointer data) { } static void reset_cb(GtkWidget *widget, gpointer data) { - SetPSControl(transmitter->id, 1, 0, 0, 0); + if (transmitter->puresignal) { + SetPSControl(transmitter->id, 1, 0, 0, 0); + } } static void twotone_cb(GtkWidget *widget, gpointer data) { diff --git a/radio.c b/radio.c index d4acf84..94922ba 100644 --- a/radio.c +++ b/radio.c @@ -1147,6 +1147,15 @@ void set_alex_tx_antenna(int v) { } } +// +// There is an error here. +// The alex att should not be associated with a receiver, +// but with an ADC. *all* receivers bound to that ADC +// will experience the same attenuation. +// +// This means, alex_attenuation should not be stored in thre +// 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; diff --git a/rx_menu.c b/rx_menu.c index 6ac0d1f..66d262c 100644 --- a/rx_menu.c +++ b/rx_menu.c @@ -250,52 +250,45 @@ void rx_menu(GtkWidget *parent) { // The CHARLY25 board (with RedPitaya) has no support for dither or random, // so those are left out. For Charly25, PreAmps and Alex Attenuator are controlled via // the sliders menu. - // On SDRs other than CHARLY25, preamps or Alex attenuators may be present or not, and we - // do not try to find out whether they are. This would overload the code, and we then - // also must have a menu to check e.g. which ANAN model is actually present. - // Instead, we offer these checkboxes in either case. // - // NOTE: Preamps are not present on most current HPSDR models, and ALEX attenuators - // are not present e.g. in ANAN-7000. + // Preamps are not switchable on all SDR hardware I know of, so this is commented out + // + // We assume Alex attenuators are present if we have an ALEX board and no Orion2 + // (ANAN-7000/8000 do not have these), and if the RX is fed by the first ADC. // if (filter_board != CHARLY25) { - switch(protocol) { - case ORIGINAL_PROTOCOL: - case NEW_PROTOCOL: - { - GtkWidget *dither_b=gtk_check_button_new_with_label("Dither"); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dither_b), active_receiver->dither); - gtk_grid_attach(GTK_GRID(grid),dither_b,x,2,1,1); - g_signal_connect(dither_b,"toggled",G_CALLBACK(dither_cb),NULL); - - GtkWidget *random_b=gtk_check_button_new_with_label("Random"); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (random_b), active_receiver->random); - gtk_grid_attach(GTK_GRID(grid),random_b,x,3,1,1); - g_signal_connect(random_b,"toggled",G_CALLBACK(random_cb),NULL); - - GtkWidget *preamp_b=gtk_check_button_new_with_label("Preamp"); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preamp_b), active_receiver->preamp); - gtk_grid_attach(GTK_GRID(grid),preamp_b,x,4,1,1); - g_signal_connect(preamp_b,"toggled",G_CALLBACK(preamp_cb),NULL); - - GtkWidget *alex_att_label=gtk_label_new("Alex Attenuator"); - gtk_grid_attach(GTK_GRID(grid), alex_att_label, x, 5, 1, 1); - GtkWidget *last_alex_att_b = NULL; - for (i = 0; i <= 3; i++) { - gchar button_text[] = "xx dB"; - sprintf(button_text, "%d dB", i*10); - GtkWidget *alex_att_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(last_alex_att_b), button_text); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(alex_att_b), active_receiver->alex_attenuation == i); - gtk_grid_attach(GTK_GRID(grid), alex_att_b, x, 6 + i, 1, 1); - g_signal_connect(alex_att_b, "toggled", G_CALLBACK(alex_att_cb), (gpointer) (long) i); - last_alex_att_b = alex_att_b; - } + GtkWidget *dither_b=gtk_check_button_new_with_label("Dither"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dither_b), active_receiver->dither); + gtk_grid_attach(GTK_GRID(grid),dither_b,x,2,1,1); + g_signal_connect(dither_b,"toggled",G_CALLBACK(dither_cb),NULL); + + GtkWidget *random_b=gtk_check_button_new_with_label("Random"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (random_b), active_receiver->random); + gtk_grid_attach(GTK_GRID(grid),random_b,x,3,1,1); + g_signal_connect(random_b,"toggled",G_CALLBACK(random_cb),NULL); + + //GtkWidget *preamp_b=gtk_check_button_new_with_label("Preamp"); + //gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preamp_b), active_receiver->preamp); + //gtk_grid_attach(GTK_GRID(grid),preamp_b,x,4,1,1); + //g_signal_connect(preamp_b,"toggled",G_CALLBACK(preamp_cb),NULL); + + if (filter_board == ALEX && active_receiver->adc == 0 + && ((protocol==ORIGINAL_PROTOCOL && device != DEVICE_ORION2) || (protocol==NEW_PROTOCOL && device != NEW_DEVICE_ORION2))) { + + GtkWidget *alex_att_label=gtk_label_new("Alex Attenuator"); + gtk_grid_attach(GTK_GRID(grid), alex_att_label, x, 5, 1, 1); + GtkWidget *last_alex_att_b = NULL; + for (i = 0; i <= 3; i++) { + gchar button_text[] = "xx dB"; + sprintf(button_text, "%d dB", i*10); + GtkWidget *alex_att_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(last_alex_att_b), button_text); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(alex_att_b), active_receiver->alex_attenuation == i); + gtk_grid_attach(GTK_GRID(grid), alex_att_b, x, 6 + i, 1, 1); + g_signal_connect(alex_att_b, "toggled", G_CALLBACK(alex_att_cb), (gpointer) (long) i); + last_alex_att_b = alex_att_b; } - x++; - break; - default: - break; } + x++; } // If there is more than one ADC, let the user associate an ADC diff --git a/rx_panadapter.c b/rx_panadapter.c index 7b91d92..ebad2a9 100644 --- a/rx_panadapter.c +++ b/rx_panadapter.c @@ -294,11 +294,13 @@ void rx_panadapter_update(RECEIVER *rx) { GetRXAAGCThresh(rx->id, &thresh, 4096.0, (double)rx->sample_rate); double knee_y=thresh+(double)adc_attenuation[rx->adc]; + if (filter_board == ALEX && rx->adc == 0) knee_y += (double)(10*rx->alex_attenuation); knee_y = floor((rx->panadapter_high - knee_y) * (double) display_height / (rx->panadapter_high - rx->panadapter_low)); double hang_y=hang+(double)adc_attenuation[rx->adc]; + if (filter_board == ALEX && rx->adc == 0) hang_y += (double)(10*rx->alex_attenuation); hang_y = floor((rx->panadapter_high - hang_y) * (double) display_height / (rx->panadapter_high - rx->panadapter_low)); @@ -353,12 +355,15 @@ void rx_panadapter_update(RECEIVER *rx) { samples[display_width-1]=-200.0; s1=(double)samples[0]+(double)adc_attenuation[rx->adc]; + if (filter_board == ALEX && rx->adc == 0) s1 += (double)(10*rx->alex_attenuation); + s1 = floor((rx->panadapter_high - s1) * (double) display_height / (rx->panadapter_high - rx->panadapter_low)); cairo_move_to(cr, 0.0, s1); for(i=1;iadc]; + if (filter_board == ALEX && rx->adc == 0) s2 += (double)(10*rx->alex_attenuation); s2 = floor((rx->panadapter_high - s2) * (double) display_height / (rx->panadapter_high - rx->panadapter_low)); diff --git a/sliders.c b/sliders.c index d1b7a1c..df7c384 100644 --- a/sliders.c +++ b/sliders.c @@ -191,7 +191,7 @@ void update_att_preamp(void) { // We should also set the attenuation for use in meter.c if (filter_board == CHARLY25) { char id[] = "x"; - if (active_receiver->id != 0) { + if (active_receiver->adc != 0) { active_receiver->alex_attenuation=0; active_receiver->preamp=0; active_receiver->dither=0; @@ -229,7 +229,7 @@ static gboolean load_att_type_cb(gpointer data) { static void c25_att_combobox_changed(GtkWidget *widget, gpointer data) { int val = atoi(gtk_combo_box_get_active_id(GTK_COMBO_BOX(widget))); - if (active_receiver->id == 0) { + if (active_receiver->adc == 0) { // this button is only valid for the first receiver // store attenuation, such that in meter.c the correct level is displayed adc_attenuation[active_receiver->adc] = 12*val; @@ -448,6 +448,7 @@ void set_drive(double value) { scale_dialog=gtk_dialog_new_with_buttons("Drive",GTK_WINDOW(top_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); drive_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); + //gtk_widget_override_font(drive_scale, pango_font_description_from_string("Sans 10")); gtk_widget_set_size_request (drive_scale, 400, 30); gtk_range_set_value (GTK_RANGE(drive_scale),value); gtk_widget_show(drive_scale); @@ -485,17 +486,25 @@ static void squelch_enable_cb(GtkWidget *widget, gpointer data) { static void compressor_value_changed_cb(GtkWidget *widget, gpointer data) { transmitter_set_compressor_level(transmitter,gtk_range_get_value(GTK_RANGE(widget))); + // This value is now also reflected in the VFO panel + g_idle_add(ext_vfo_update, NULL); + } static void compressor_enable_cb(GtkWidget *widget, gpointer data) { transmitter_set_compressor(transmitter,gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))); + // This value is now also reflected in the VFO panel + g_idle_add(ext_vfo_update, NULL); + } void set_squelch() { setSquelch(active_receiver); +#ifndef COMPRESSION_SLIDER if(display_sliders) { gtk_range_set_value (GTK_RANGE(squelch_scale),active_receiver->squelch); } else { +#endif if(scale_status!=SQUELCH) { if(scale_status!=NONE) { g_source_remove(scale_timer); @@ -508,6 +517,7 @@ void set_squelch() { scale_dialog=gtk_dialog_new_with_buttons("Squelch",GTK_WINDOW(top_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); squelch_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); + //gtk_widget_override_font(squelch_scale, pango_font_description_from_string("Sans 10")); gtk_range_set_value (GTK_RANGE(squelch_scale),active_receiver->squelch); gtk_widget_set_size_request (squelch_scale, 400, 30); gtk_widget_show(squelch_scale); @@ -519,13 +529,17 @@ void set_squelch() { gtk_range_set_value (GTK_RANGE(squelch_scale),active_receiver->squelch); scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); } +#ifndef COMPRESSION_SLIDER } +#endif } void set_compression(TRANSMITTER* tx) { -// if(display_sliders) { -// gtk_range_set_value (GTK_RANGE(comp_scale),tx->compressor_level); -// } else { +#ifdef COMPRESSION_SLIDER + if(display_sliders) { + gtk_range_set_value (GTK_RANGE(comp_scale),tx->compressor_level); + } else { +#endif if(scale_status!=COMP) { if(scale_status!=NONE) { g_source_remove(scale_timer); @@ -538,6 +552,7 @@ void set_compression(TRANSMITTER* tx) { scale_dialog=gtk_dialog_new_with_buttons("COMP",GTK_WINDOW(top_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); comp_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 20.0, 1.00); + //gtk_widget_override_font(comp_scale, pango_font_description_from_string("Sans 10")); gtk_range_set_value (GTK_RANGE(comp_scale),tx->compressor_level); gtk_widget_set_size_request (comp_scale, 400, 30); gtk_widget_show(comp_scale); @@ -549,7 +564,11 @@ void set_compression(TRANSMITTER* tx) { gtk_range_set_value (GTK_RANGE(comp_scale),tx->compressor_level); scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); } - //} +#ifdef COMPRESSION_SLIDER + } +#endif + // Now we are also displaying the TX compressor value in the VFO panel + g_idle_add(ext_vfo_update, NULL); } GtkWidget *sliders_init(int my_width, int my_height) { @@ -564,20 +583,24 @@ fprintf(stderr,"sliders_init: width=%d height=%d\n", width,height); gtk_grid_set_column_homogeneous(GTK_GRID(sliders),TRUE); af_gain_label=gtk_label_new("AF:"); + //gtk_widget_override_font(af_gain_label, pango_font_description_from_string("Sans 11")); gtk_widget_show(af_gain_label); gtk_grid_attach(GTK_GRID(sliders),af_gain_label,0,0,1,1); af_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); + //gtk_widget_override_font(af_gain_scale, pango_font_description_from_string("Sans 10")); gtk_range_set_value (GTK_RANGE(af_gain_scale),active_receiver->volume*100.0); gtk_widget_show(af_gain_scale); gtk_grid_attach(GTK_GRID(sliders),af_gain_scale,1,0,2,1); g_signal_connect(G_OBJECT(af_gain_scale),"value_changed",G_CALLBACK(afgain_value_changed_cb),NULL); agc_gain_label=gtk_label_new("AGC:"); + //gtk_widget_override_font(agc_gain_label, pango_font_description_from_string("Sans 11")); gtk_widget_show(agc_gain_label); gtk_grid_attach(GTK_GRID(sliders),agc_gain_label,3,0,1,1); agc_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,-20.0, 120.0, 1.0); + //gtk_widget_override_font(agc_scale, pango_font_description_from_string("Sans 10")); gtk_range_set_value (GTK_RANGE(agc_scale),active_receiver->agc_gain); gtk_widget_show(agc_scale); gtk_grid_attach(GTK_GRID(sliders),agc_scale,4,0,2,1); @@ -590,6 +613,7 @@ fprintf(stderr,"sliders_init: width=%d height=%d\n", width,height); sprintf(title,"ATT (dB)"/*,active_receiver->adc*/); #endif attenuation_label=gtk_label_new(title); + //gtk_widget_override_font(attenuation_label, pango_font_description_from_string("Sans 11")); gtk_widget_show(attenuation_label); gtk_grid_attach(GTK_GRID(sliders),attenuation_label,6,0,1,1); @@ -600,15 +624,18 @@ fprintf(stderr,"sliders_init: width=%d height=%d\n", width,height); attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.0); gtk_range_set_value (GTK_RANGE(attenuation_scale),adc_attenuation[active_receiver->adc]); #endif + //gtk_widget_override_font(attenuation_scale, pango_font_description_from_string("Sans 10")); gtk_widget_show(attenuation_scale); gtk_grid_attach(GTK_GRID(sliders),attenuation_scale,7,0,2,1); g_signal_connect(G_OBJECT(attenuation_scale),"value_changed",G_CALLBACK(attenuation_value_changed_cb),NULL); c25_att_preamp_label = gtk_label_new("Att/PreAmp"); + //gtk_widget_override_font(c25_att_preamp_label, pango_font_description_from_string("Sans 11")); gtk_grid_attach(GTK_GRID(sliders), c25_att_preamp_label, 6, 0, 1, 1); c25_att_combobox = gtk_combo_box_text_new(); + //gtk_widget_override_font(c25_att_combobox, pango_font_description_from_string("Sans 10")); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_att_combobox), "0", "0 dB"); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_att_combobox), "1", "-12 dB"); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_att_combobox), "2", "-24 dB"); @@ -617,6 +644,7 @@ fprintf(stderr,"sliders_init: width=%d height=%d\n", width,height); g_signal_connect(G_OBJECT(c25_att_combobox), "changed", G_CALLBACK(c25_att_combobox_changed), NULL); c25_preamp_combobox = gtk_combo_box_text_new(); + //gtk_widget_override_font(c25_preamp_combobox, pango_font_description_from_string("Sans 10")); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_preamp_combobox), "0", "0 dB"); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_preamp_combobox), "1", "18 dB"); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_preamp_combobox), "2", "36 dB"); @@ -626,27 +654,34 @@ fprintf(stderr,"sliders_init: width=%d height=%d\n", width,height); mic_gain_label=gtk_label_new(mic_linein?"Linein:":"Mic (dB):"); + //gtk_widget_override_font(mic_gain_label, pango_font_description_from_string("Sans 11")); gtk_grid_attach(GTK_GRID(sliders),mic_gain_label,0,1,1,1); mic_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,mic_linein?0.0:-10.0,mic_linein?31.0:50.0, 1.0); + //gtk_widget_override_font(mic_gain_scale, pango_font_description_from_string("Sans 10")); gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_linein?linein_gain:mic_gain); gtk_grid_attach(GTK_GRID(sliders),mic_gain_scale,1,1,2,1); g_signal_connect(G_OBJECT(mic_gain_scale),"value_changed",G_CALLBACK(micgain_value_changed_cb),NULL); drive_label=gtk_label_new("Drive:"); + //gtk_widget_override_font(drive_label, pango_font_description_from_string("Sans 11")); gtk_grid_attach(GTK_GRID(sliders),drive_label,3,1,1,1); drive_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0); + //gtk_widget_override_font(drive_scale, pango_font_description_from_string("Sans 10")); gtk_range_set_value (GTK_RANGE(drive_scale),getDrive()); gtk_widget_show(drive_scale); gtk_grid_attach(GTK_GRID(sliders),drive_scale,4,1,2,1); g_signal_connect(G_OBJECT(drive_scale),"value_changed",G_CALLBACK(drive_value_changed_cb),NULL); +#ifndef COMPRESSION_SLIDER squelch_label=gtk_label_new("Squelch:"); + //gtk_widget_override_font(squelch_label, pango_font_description_from_string("Sans 11")); gtk_widget_show(squelch_label); gtk_grid_attach(GTK_GRID(sliders),squelch_label,6,1,1,1); squelch_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0); + //gtk_widget_override_font(squelch_scale, pango_font_description_from_string("Sans 10")); gtk_range_set_value (GTK_RANGE(squelch_scale),active_receiver->squelch); gtk_widget_show(squelch_scale); gtk_grid_attach(GTK_GRID(sliders),squelch_scale,7,1,2,1); @@ -657,6 +692,25 @@ fprintf(stderr,"sliders_init: width=%d height=%d\n", width,height); gtk_widget_show(squelch_enable); gtk_grid_attach(GTK_GRID(sliders),squelch_enable,9,1,1,1); g_signal_connect(squelch_enable,"toggled",G_CALLBACK(squelch_enable_cb),NULL); +#else + comp_label=gtk_label_new("TX Cmpr:"); + //gtk_widget_override_font(comp_label, pango_font_description_from_string("Sans 11")); + gtk_widget_show(comp_label); + gtk_grid_attach(GTK_GRID(sliders),comp_label,6,1,1,1); + + comp_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 20.0, 1.0); + //gtk_widget_override_font(comp_scale, pango_font_description_from_string("Sans 10")); + gtk_range_set_value (GTK_RANGE(comp_scale),transmitter->compressor_level); + gtk_widget_show(comp_scale); + gtk_grid_attach(GTK_GRID(sliders),comp_scale,7,1,2,1); + g_signal_connect(G_OBJECT(comp_scale),"value_changed",G_CALLBACK(compressor_value_changed_cb),NULL); + + comp_enable=gtk_check_button_new(); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(comp_enable),transmitter->compressor); + gtk_widget_show(comp_enable); + gtk_grid_attach(GTK_GRID(sliders),comp_enable,9,1,1,1); + g_signal_connect(comp_enable,"toggled",G_CALLBACK(compressor_enable_cb),NULL); +#endif return sliders; } diff --git a/step_menu.c b/step_menu.c index 9782cb3..5fb76a6 100644 --- a/step_menu.c +++ b/step_menu.c @@ -92,7 +92,7 @@ void step_menu(GtkWidget *parent) { } else { step_rb=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(step_rb),step_labels[i]); } - gtk_widget_override_font(step_rb, pango_font_description_from_string("FreeMono 18")); + gtk_widget_override_font(step_rb, pango_font_description_from_string("Sans 16")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (step_rb), steps[i]==step); gtk_widget_show(step_rb); gtk_grid_attach(GTK_GRID(grid),step_rb,i%5,1+(i/5),1,1); diff --git a/toolbar.c b/toolbar.c index 541e19a..4337118 100644 --- a/toolbar.c +++ b/toolbar.c @@ -652,50 +652,50 @@ GtkWidget *toolbar_init(int my_width, int my_height, GtkWidget* parent) { gtk_grid_set_column_homogeneous(GTK_GRID(toolbar),TRUE); sim_mox=gtk_button_new_with_label("Mox"); - //gtk_widget_override_font(sim_mox, pango_font_description_from_string("Arial 16")); + //gtk_widget_override_font(sim_mox, pango_font_description_from_string("Sans 11")); g_signal_connect(G_OBJECT(sim_mox),"clicked",G_CALLBACK(sim_mox_cb),NULL); gtk_grid_attach(GTK_GRID(toolbar),sim_mox,0,0,4,1); sim_s1=gtk_button_new_with_label("Band"); gtk_widget_set_size_request (sim_s1, button_width, 0); - //gtk_widget_override_font(sim_s1, pango_font_description_from_string("Arial 16")); + //gtk_widget_override_font(sim_s1, pango_font_description_from_string("Sans 11")); g_signal_connect(G_OBJECT(sim_s1),"pressed",G_CALLBACK(sim_s1_pressed_cb),NULL); g_signal_connect(G_OBJECT(sim_s1),"released",G_CALLBACK(sim_s1_released_cb),NULL); gtk_grid_attach(GTK_GRID(toolbar),sim_s1,4,0,4,1); sim_s2=gtk_button_new_with_label("BStack"); gtk_widget_set_size_request (sim_s2, button_width, 0); - //gtk_widget_override_font(sim_s2, pango_font_description_from_string("Arial 16")); + //gtk_widget_override_font(sim_s2, pango_font_description_from_string("Sans 11")); g_signal_connect(G_OBJECT(sim_s2),"pressed",G_CALLBACK(sim_s2_pressed_cb),NULL); g_signal_connect(G_OBJECT(sim_s2),"released",G_CALLBACK(sim_s2_released_cb),NULL); gtk_grid_attach(GTK_GRID(toolbar),sim_s2,8,0,4,1); sim_s3=gtk_button_new_with_label("Mode"); - //gtk_widget_override_font(sim_s3, pango_font_description_from_string("Arial 16")); + //gtk_widget_override_font(sim_s3, pango_font_description_from_string("Sans 11")); g_signal_connect(G_OBJECT(sim_s3),"pressed",G_CALLBACK(sim_s3_pressed_cb),NULL); g_signal_connect(G_OBJECT(sim_s3),"released",G_CALLBACK(sim_s3_released_cb),NULL); gtk_grid_attach(GTK_GRID(toolbar),sim_s3,12,0,4,1); sim_s4=gtk_button_new_with_label("Filter"); - //gtk_widget_override_font(sim_s4, pango_font_description_from_string("Arial 16")); + //gtk_widget_override_font(sim_s4, pango_font_description_from_string("Sans 11")); g_signal_connect(G_OBJECT(sim_s4),"pressed",G_CALLBACK(sim_s4_pressed_cb),NULL); g_signal_connect(G_OBJECT(sim_s4),"released",G_CALLBACK(sim_s4_released_cb),NULL); gtk_grid_attach(GTK_GRID(toolbar),sim_s4,16,0,4,1); sim_s5=gtk_button_new_with_label("Noise"); - //gtk_widget_override_font(sim_s5, pango_font_description_from_string("Arial 16")); + //gtk_widget_override_font(sim_s5, pango_font_description_from_string("Sans 11")); g_signal_connect(G_OBJECT(sim_s5),"pressed",G_CALLBACK(sim_s5_pressed_cb),NULL); g_signal_connect(G_OBJECT(sim_s5),"released",G_CALLBACK(sim_s5_released_cb),NULL); gtk_grid_attach(GTK_GRID(toolbar),sim_s5,20,0,4,1); sim_s6=gtk_button_new_with_label("AGC"); - //gtk_widget_override_font(sim_s6, pango_font_description_from_string("Arial 16")); + //gtk_widget_override_font(sim_s6, pango_font_description_from_string("Sans 11")); g_signal_connect(G_OBJECT(sim_s6),"pressed",G_CALLBACK(sim_s6_pressed_cb),NULL); g_signal_connect(G_OBJECT(sim_s6),"released",G_CALLBACK(sim_s6_released_cb),NULL); gtk_grid_attach(GTK_GRID(toolbar),sim_s6,24,0,4,1); sim_function=gtk_button_new_with_label("Function"); - //gtk_widget_override_font(sim_function, pango_font_description_from_string("Arial 16")); + //gtk_widget_override_font(sim_function, pango_font_description_from_string("Sans 11")); g_signal_connect(G_OBJECT(sim_function),"clicked",G_CALLBACK(sim_function_cb),NULL); gtk_grid_attach(GTK_GRID(toolbar),sim_function,28,0,4,1); -- 2.45.2