]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
fixed cw bug and added menu items to control sidetone volume and frequency
authorJohn Melton g0orx/n6lyt <john.d.melton@googlemail.com>
Sun, 1 May 2016 15:15:05 +0000 (15:15 +0000)
committerJohn Melton g0orx/n6lyt <john.d.melton@googlemail.com>
Sun, 1 May 2016 15:15:05 +0000 (15:15 +0000)
menu.c
new_protocol.c
old_protocol.c
pihpsdr
radio.c
release/pihpsdr.tar
release/pihpsdr/pihpsdr
toolbar.c

diff --git a/menu.c b/menu.c
index 662bed68c320e27c056971e49cdcca3d827177c2..259de959f833e365246d6340e5b7d355f2922b84 100644 (file)
--- 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");
index 1c432a75d8999fa9a3f9927e179e707d999e9909..736fc90574626ba1be84da80c4ead86ed15f620d 100644 (file)
@@ -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);
index d5ede39c8dc8ca425c76796584c3db8403f72e23..a3352890a5060269a45d1fc5683c7cd3a744bfbb 100644 (file)
@@ -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 784096991f01817a8dc8ff7d2d93497ab06d035a..4faa57f76bd435498a2e7de154a74aa6ef16fadf 100755 (executable)
Binary files a/pihpsdr and b/pihpsdr differ
diff --git a/radio.c b/radio.c
index 54ab494143c580cdcfec792483e7a89076b4e4fa..8769e4afeb9bfffe718a1b2a5d5aacd67f41b000 100644 (file)
--- a/radio.c
+++ b/radio.c
@@ -23,6 +23,7 @@
 #include <semaphore.h>
 #include <math.h>
 
+#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();
 
index 88acc4ee6a45c681a9faf56cb04f227e79166ea5..c3729ee275425e67cfa068b75e21644d95dfb95d 100644 (file)
Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ
index 784096991f01817a8dc8ff7d2d93497ab06d035a..4faa57f76bd435498a2e7de154a74aa6ef16fadf 100755 (executable)
Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ
index 4ad47905eafa4796486eca7e9be8b943d270ac19..ac179e0385bcb1cb620adf07d685cc560ef14115 100644 (file)
--- 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);
   }