From 7e728bec22ea622b54c7288de841a031aba71b0b Mon Sep 17 00:00:00 2001
From: John Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Date: Tue, 19 Jul 2016 07:42:08 +0000
Subject: [PATCH] CW Configuration - added weight adjustment, TX frequency
 offset by Sidetone frequency. GPIO removed for UP board.

---
 configure.c    |  3 ---
 main.c         |  3 ---
 menu.c         | 17 +++++++++++++++++
 meter.c        |  2 +-
 old_protocol.c | 18 ++++++++++++------
 radio.c        |  2 --
 radio.h        |  2 --
 wdsp_init.c    |  8 ++++----
 8 files changed, 34 insertions(+), 21 deletions(-)

diff --git a/configure.c b/configure.c
index 2ec820f..7a708d8 100644
--- a/configure.c
+++ b/configure.c
@@ -39,9 +39,6 @@
 #ifdef odroid
 #define INCLUDE_GPIO
 #endif
-#ifdef up
-#define INCLUDE_GPIO
-#endif
 
 static void display_panadapter_cb(GtkWidget *widget, gpointer data) {
   display_panadapter=display_panadapter==1?0:1;
diff --git a/main.c b/main.c
index d96e15c..d25a44e 100644
--- a/main.c
+++ b/main.c
@@ -64,9 +64,6 @@
 #ifdef odroid
 #define INCLUDE_GPIO
 #endif
-#ifdef up
-#define INCLUDE_GPIO
-#endif
 
 #define VFO_HEIGHT ((display_height/32)*4)
 #define VFO_WIDTH ((display_width/32)*16)
diff --git a/menu.c b/menu.c
index 7536cc4..4282b59 100644
--- a/menu.c
+++ b/menu.c
@@ -78,6 +78,11 @@ static void cw_keyer_hang_time_value_changed_cb(GtkWidget *widget, gpointer data
   cw_changed();
 }
 
+static void cw_keyer_weight_value_changed_cb(GtkWidget *widget, gpointer data) {
+  cw_keyer_weight=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
+  cw_changed();
+}
+
 static void cw_keys_reversed_cb(GtkWidget *widget, gpointer data) {
   cw_keys_reversed=cw_keys_reversed==1?0:1;
   cw_changed();
@@ -1217,6 +1222,18 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
     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);
   
+    GtkWidget *cw_keyer_weight_label=gtk_label_new("Weight:");
+    //gtk_widget_override_font(cw_keyer_weight_label, pango_font_description_from_string("Arial 18"));
+    gtk_widget_show(cw_keyer_weight_label);
+    gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_weight_label,0,8,1,1);
+
+    GtkWidget *cw_keyer_weight_b=gtk_spin_button_new_with_range(0.0,100.0,1.0);
+    //gtk_widget_override_font(cw_keyer_weight_b, pango_font_description_from_string("Arial 18"));
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(cw_keyer_weight_b),(double)cw_keyer_weight);
+    gtk_widget_show(cw_keyer_weight_b);
+    gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_weight_b,1,8,1,1);
+    g_signal_connect(cw_keyer_weight_b,"value_changed",G_CALLBACK(cw_keyer_weight_value_changed_cb),NULL);
+ 
     id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),cw_grid,cw_label);
   }
 
diff --git a/meter.c b/meter.c
index 40da458..c2b6676 100644
--- a/meter.c
+++ b/meter.c
@@ -25,8 +25,8 @@
 
 #include "meter.h"
 #include "wdsp.h"
-#ifdef FREEDV
 #include "radio.h"
+#ifdef FREEDV
 #include "mode.h"
 #include "freedv.h"
 #endif
diff --git a/old_protocol.c b/old_protocol.c
index a64e812..23e3a9c 100644
--- a/old_protocol.c
+++ b/old_protocol.c
@@ -804,19 +804,25 @@ void ozy_send_buffer() {
       }
       }
       break;
-    case 1:
+    case 1: // rx frequency
       output_buffer[C0]=0x04;
       output_buffer[C1]=ddsFrequency>>24;
       output_buffer[C2]=ddsFrequency>>16;
       output_buffer[C3]=ddsFrequency>>8;
       output_buffer[C4]=ddsFrequency;
       break;
-    case 2:
+    case 2: // tx frequency
       output_buffer[C0]=0x02;
-      output_buffer[C1]=ddsFrequency>>24;
-      output_buffer[C2]=ddsFrequency>>16;
-      output_buffer[C3]=ddsFrequency>>8;
-      output_buffer[C4]=ddsFrequency;
+      long txFrequency=ddsFrequency;
+      if(mode==modeCWU) {
+        txFrequency+=cw_keyer_sidetone_frequency;
+      } else if(mode==modeCWL) {
+        txFrequency-=cw_keyer_sidetone_frequency;
+      }
+      output_buffer[C1]=txFrequency>>24;
+      output_buffer[C2]=txFrequency>>16;
+      output_buffer[C3]=txFrequency>>8;
+      output_buffer[C4]=txFrequency;
       break;
     case 3:
       {
diff --git a/radio.c b/radio.c
index 7931e8d..c013e53 100644
--- a/radio.c
+++ b/radio.c
@@ -111,8 +111,6 @@ int nr2_gain_method=2; // 0=Linear 1=Log 2=gamma
 int nr2_npe_method=0; // 0=OSMS 1=MMSE
 int nr2_ae=1; // 0=disable 1=enable
 
-int cwPitch=600;
-
 int tune_drive=6;
 int drive=60;
 
diff --git a/radio.h b/radio.h
index 1b6eadf..fd17af9 100644
--- a/radio.h
+++ b/radio.h
@@ -112,8 +112,6 @@ extern int nr2_gain_method;
 extern int nr2_npe_method;
 extern int nr2_ae;
 
-extern int cwPitch;
-
 extern int mic_linein;
 extern int mic_boost;
 extern int mic_bias_enabled;
diff --git a/wdsp_init.c b/wdsp_init.c
index 76d84c4..6279a38 100644
--- a/wdsp_init.c
+++ b/wdsp_init.c
@@ -109,11 +109,11 @@ int getMode() {
 void setFilter(int low,int high) {
 fprintf(stderr,"setFilter: %d %d\n",low,high);
     if(mode==modeCWL) {
-        filterLow=-cwPitch-low;
-        filterHigh=-cwPitch+high;
+        filterLow=-cw_keyer_sidetone_frequency-low;
+        filterHigh=-cw_keyer_sidetone_frequency+high;
     } else if(mode==modeCWU) {
-        filterLow=cwPitch-low;
-        filterHigh=cwPitch+high;
+        filterLow=cw_keyer_sidetone_frequency-low;
+        filterHigh=cw_keyer_sidetone_frequency+high;
     } else {
         filterLow=low;
         filterHigh=high;
-- 
2.45.2