From: John Melton g0orx/n6lyt Date: Sun, 1 May 2016 15:15:05 +0000 (+0000) Subject: fixed cw bug and added menu items to control sidetone volume and frequency X-Git-Url: https://git.rkrishnan.org/uri/vdrive/about.html?a=commitdiff_plain;h=0cd45816a61daafc0c691dfefb8767c5c81b46e3;p=pihpsdr.git fixed cw bug and added menu items to control sidetone volume and frequency --- diff --git a/menu.c b/menu.c index 662bed6..259de95 100644 --- a/menu.c +++ b/menu.c @@ -74,6 +74,16 @@ static void cw_keyer_mode_cb(GtkWidget *widget, gpointer data) { cw_changed(); } +static void cw_keyer_sidetone_level_value_changed_cb(GtkWidget *widget, gpointer data) { + cw_keyer_sidetone_volume=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget)); + cw_changed(); +} + +static void cw_keyer_sidetone_frequency_value_changed_cb(GtkWidget *widget, gpointer data) { + cw_keyer_sidetone_frequency=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget)); + cw_changed(); +} + static void vfo_divisor_value_changed_cb(GtkWidget *widget, gpointer data) { vfo_encoder_divisor=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget)); } @@ -965,6 +975,37 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_mode_b,0,4,1,1); g_signal_connect(cw_keyer_mode_b,"pressed",G_CALLBACK(cw_keyer_mode_cb),(gpointer *)KEYER_MODE_B); + GtkWidget *cw_keys_reversed_b=gtk_check_button_new_with_label("Keys reversed"); + //gtk_widget_override_font(cw_keys_reversed_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_keys_reversed_b), cw_keys_reversed); + gtk_widget_show(cw_keys_reversed_b); + gtk_grid_attach(GTK_GRID(cw_grid),cw_keys_reversed_b,0,5,1,1); + g_signal_connect(cw_keys_reversed_b,"toggled",G_CALLBACK(cw_keys_reversed_cb),NULL); + + GtkWidget *cw_keyer_sidetone_level_label=gtk_label_new("Sidetone Level:"); + //gtk_widget_override_font(cw_keyer_sidetone_level_label, pango_font_description_from_string("Arial 18")); + gtk_widget_show(cw_keyer_sidetone_level_label); + gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_sidetone_level_label,0,6,1,1); + + GtkWidget *cw_keyer_sidetone_level_b=gtk_spin_button_new_with_range(1.0,255.0,1.0); + //gtk_widget_override_font(cw_keyer_sidetone_level_b, pango_font_description_from_string("Arial 18")); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(cw_keyer_sidetone_level_b),(double)cw_keyer_sidetone_volume); + gtk_widget_show(cw_keyer_sidetone_level_b); + gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_sidetone_level_b,1,6,1,1); + g_signal_connect(cw_keyer_sidetone_level_b,"value_changed",G_CALLBACK(cw_keyer_sidetone_level_value_changed_cb),NULL); + + GtkWidget *cw_keyer_sidetone_frequency_label=gtk_label_new("Sidetone Freq:"); + //gtk_widget_override_font(cw_keyer_sidetone_frequency_label, pango_font_description_from_string("Arial 18")); + gtk_widget_show(cw_keyer_sidetone_frequency_label); + gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_sidetone_frequency_label,0,7,1,1); + + GtkWidget *cw_keyer_sidetone_frequency_b=gtk_spin_button_new_with_range(100.0,1000.0,1.0); + //gtk_widget_override_font(cw_keyer_sidetone_frequency_b, pango_font_description_from_string("Arial 18")); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(cw_keyer_sidetone_frequency_b),(double)cw_keyer_sidetone_frequency); + gtk_widget_show(cw_keyer_sidetone_frequency_b); + gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_sidetone_frequency_b,1,7,1,1); + g_signal_connect(cw_keyer_sidetone_frequency_b,"value_changed",G_CALLBACK(cw_keyer_sidetone_frequency_value_changed_cb),NULL); + id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),cw_grid,cw_label); GtkWidget *oc_label=gtk_label_new("OC"); diff --git a/new_protocol.c b/new_protocol.c index 1c432a7..736fc90 100644 --- a/new_protocol.c +++ b/new_protocol.c @@ -404,7 +404,7 @@ static void new_protocol_transmit_specific() { buffer[3]=tx_specific_sequence; buffer[4]=1; // 1 DAC - buffer[5]=0; // no CW + buffer[5]=0; // default no CW if(cw_keyer_internal) { buffer[5]|=0x02; } @@ -417,6 +417,9 @@ static void new_protocol_transmit_specific() { if(cw_keyer_mode==KEYER_MODE_B) { buffer[5]|=0x28; } + if(cw_keyer_sidetone_volume!=0) { + buffer[5]|=0x10; + } if(cw_keyer_spacing) { buffer[5]|=0x40; } @@ -448,6 +451,7 @@ static void new_protocol_transmit_specific() { } buffer[51]=0x7F; // Line in gain + if(sendto(data_socket,buffer,sizeof(buffer),0,(struct sockaddr*)&transmitter_addr,transmitter_addr_length)<0) { fprintf(stderr,"sendto socket failed for tx specific\n"); exit(1); diff --git a/old_protocol.c b/old_protocol.c index d5ede39..a335289 100644 --- a/old_protocol.c +++ b/old_protocol.c @@ -755,7 +755,6 @@ void ozy_send_buffer() { output_buffer[C4]=0x00; break; case 7: - // need to add cw configuration output_buffer[C0]=0x1E; if(cw_keyer_internal==1) { if(isTransmitting() || (mode!=modeCWU && mode!=modeCWL)) { @@ -771,7 +770,6 @@ void ozy_send_buffer() { output_buffer[C4]=0x00; break; case 8: - // need to add cw configuration output_buffer[C0]=0x20; output_buffer[C1]=cw_keyer_hang_time; output_buffer[C2]=cw_keyer_hang_time>>8; diff --git a/pihpsdr b/pihpsdr index 7840969..4faa57f 100755 Binary files a/pihpsdr and b/pihpsdr differ diff --git a/radio.c b/radio.c index 54ab494..8769e4a 100644 --- a/radio.c +++ b/radio.c @@ -23,6 +23,7 @@ #include #include +#include "mode.h" #include "radio.h" #include "channel.h" #include "agc.h" @@ -222,6 +223,11 @@ int getTune() { } int isTransmitting() { + BANDSTACK_ENTRY *entry; + entry=bandstack_entry_get_current(); + if((entry->mode==modeCWL || entry->mode==modeCWU) && cw_keyer_internal==1) { + return 0; + } return ptt!=0 || mox!=0 || tune!=0; } @@ -419,6 +425,12 @@ void radioRestoreState() { if(value) OCmemory_tune_time=atoi(value); value=getProperty("attenuation"); if(value) attenuation=atoi(value); + value=getProperty("rx_dither"); + if(value) rx_dither=atoi(value); + value=getProperty("rx_random"); + if(value) rx_random=atoi(value); + value=getProperty("rx_preamp"); + if(value) rx_preamp=atoi(value); bandRestoreState(); sem_post(&property_sem); @@ -544,6 +556,12 @@ void radioSaveState() { setProperty("OCmemory_tune_time",value); sprintf(value,"%d",attenuation); setProperty("attenuation",value); + sprintf(value,"%d",rx_dither); + setProperty("rx_dither",value); + sprintf(value,"%d",rx_random); + setProperty("rx_random",value); + sprintf(value,"%d",rx_preamp); + setProperty("rx_preamp",value); bandSaveState(); diff --git a/release/pihpsdr.tar b/release/pihpsdr.tar index 88acc4e..c3729ee 100644 Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ diff --git a/release/pihpsdr/pihpsdr b/release/pihpsdr/pihpsdr index 7840969..4faa57f 100755 Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ diff --git a/toolbar.c b/toolbar.c index 4ad4790..ac179e0 100644 --- a/toolbar.c +++ b/toolbar.c @@ -760,9 +760,9 @@ int ptt_update(void *data) { entry=bandstack_entry_get_current(); int ptt=(int)data; if((entry->mode==modeCWL || entry->mode==modeCWU) && cw_keyer_internal==1) { - if(ptt!= getMox()) { - mox_cb(NULL,NULL); - } + //if(ptt!=getMox()) { + // mox_cb(NULL,NULL); + //} } else { mox_cb(NULL,NULL); }