]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
Added new functions to midi. Fixed RIT bug when in CTUN mode. Moved some indicators...
authorJohn Melton G0ORX <john.d.melton@googlemail.com>
Fri, 8 Nov 2019 11:43:02 +0000 (11:43 +0000)
committerJohn Melton G0ORX <john.d.melton@googlemail.com>
Fri, 8 Nov 2019 11:43:02 +0000 (11:43 +0000)
19 files changed:
Makefile.orig [deleted file]
discovery.c.orig [deleted file]
ext.c
ext.h
general_menu.c.orig [deleted file]
gpio.c
gpio.c.orig [deleted file]
main.c.orig [deleted file]
midi.h
midi2.c
midi3.c
radio.c.orig [deleted file]
receiver.c
rx_menu.c.orig [deleted file]
toolbar.c.orig [deleted file]
transmitter.c.orig [deleted file]
transmitter.h.orig [deleted file]
vfo.c
vfo.c.orig [deleted file]

diff --git a/Makefile.orig b/Makefile.orig
deleted file mode 100644 (file)
index 6e35039..0000000
+++ /dev/null
@@ -1,426 +0,0 @@
-# Get git commit version and date
-#GIT_VERSION := $(shell git --no-pager describe --tags --always --dirty)
-GIT_DATE := $(firstword $(shell git --no-pager show --date=short --format="%ai" --name-only))
-GIT_VERSION := $(shell git describe --abbrev=0 --tags)
-
-# uncomment the line below to include GPIO
-#GPIO_INCLUDE=GPIO
-
-# uncomment the line below to include MCP23017 I2C
-#I2C_INCLUDE=I2C
-
-# uncomment the line below to include USB Ozy support
-# USBOZY_INCLUDE=USBOZY
-
-# uncomment the line below to include support for psk31
-#PSK_INCLUDE=PSK
-
-# uncomment the line to below include support for FreeDV codec2
-#FREEDV_INCLUDE=FREEDV
-
-# uncomment the line below to include Pure Signal support
-#PURESIGNAL_INCLUDE=PURESIGNAL
-
-# uncomment the line to below include support for sx1509 i2c expander
-#SX1509_INCLUDE=sx1509
-
-# uncomment the line to below include support local CW keyer
-#LOCALCW_INCLUDE=LOCALCW
-
-# uncomment the line below to include support for STEMlab discovery
-#STEMLAB_DISCOVERY=STEMLAB_DISCOVERY
-
-#uncomment the line below for the platform being compiled on
-UNAME_N=raspberrypi
-#UNAME_N=odroid
-#UNAME_N=up
-#UNAME_N=pine64
-#UNAME_N=jetsen
-
-CC=gcc
-LINK=gcc
-
-# uncomment the line below for various debug facilities
-#DEBUG_OPTION=-D DEBUG
-
-ifeq ($(PURESIGNAL_INCLUDE),PURESIGNAL)
-PURESIGNAL_OPTIONS=-D PURESIGNAL
-PURESIGNAL_SOURCES= \
-ps_menu.c
-PURESIGNAL_HEADERS= \
-ps_menu.h
-PURESIGNAL_OBJS= \
-ps_menu.o
-endif
-
-ifeq ($(REMOTE_INCLUDE),REMOTE)
-REMOTE_OPTIONS=-D REMOTE
-REMOTE_SOURCES= \
-remote_radio.c \
-remote_receiver.c
-REMOTE_HEADERS= \
-remote_radio.h \
-remote_receiver.h
-REMOTE_OBJS= \
-remote_radio.o \
-remote_receiver.o
-endif
-
-ifeq ($(USBOZY_INCLUDE),USBOZY)
-USBOZY_OPTIONS=-D USBOZY
-USBOZY_LIBS=-lusb-1.0
-USBOZY_SOURCES= \
-ozyio.c
-USBOZY_HEADERS= \
-ozyio.h
-USBOZY_OBJS= \
-ozyio.o
-endif
-
-# uncomment the line below for LimeSDR (uncomment line below)
-#LIMESDR_INCLUDE=LIMESDR
-
-# uncomment the line below when Radioberry radio cape is plugged in (for now use emulator and old protocol)
-RADIOBERRY_INCLUDE=RADIOBERRY
-ifeq ($(RADIOBERRY_INCLUDE),RADIOBERRY)
-RADIOBERRY_OPTIONS=-D RADIOBERRY
-endif
-
-ifeq ($(LIMESDR_INCLUDE),LIMESDR)
-LIMESDR_OPTIONS=-D LIMESDR
-SOAPYSDRLIBS=-lSoapySDR
-LIMESDR_SOURCES= \
-lime_discovery.c \
-lime_protocol.c
-LIMESDR_HEADERS= \
-lime_discovery.h \
-lime_protocol.h
-LIMESDR_OBJS= \
-lime_discovery.o \
-lime_protocol.o
-endif
-
-
-ifeq ($(PSK_INCLUDE),PSK)
-PSK_OPTIONS=-D PSK
-PSKLIBS=-lpsk
-PSK_SOURCES= \
-psk.c \
-psk_waterfall.c
-PSK_HEADERS= \
-psk.h \
-psk_waterfall.h
-PSK_OBJS= \
-psk.o \
-psk_waterfall.o
-endif
-
-
-ifeq ($(FREEDV_INCLUDE),FREEDV)
-FREEDV_OPTIONS=-D FREEDV
-FREEDVLIBS=-lcodec2
-FREEDV_SOURCES= \
-freedv.c \
-freedv_menu.c
-FREEDV_HEADERS= \
-freedv.h \
-freedv_menu.h
-FREEDV_OBJS= \
-freedv.o \
-freedv_menu.o
-endif
-
-ifeq ($(LOCALCW_INCLUDE),LOCALCW)
-LOCALCW_OPTIONS=-D LOCALCW
-LOCALCW_SOURCES= \
-beep.c \
-iambic.c
-LOCALCW_HEADERS= \
-beep.h \
-iambic.h
-LOCALCW_OBJS= \
-iambic.o
-endif
-
-ifeq ($(GPIO_INCLUDE),GPIO)
-  GPIO_OPTIONS=-D GPIO
-  GPIO_LIBS=-lwiringPi -lpigpio 
-  GPIO_SOURCES= \
-  gpio.c \
-  encoder_menu.c
-  GPIO_HEADERS= \
-  gpio.h \
-  encoder_menu.h
-  GPIO_OBJS= \
-  gpio.o \
-  encoder_menu.o
-endif
-
-ifeq ($(I2C_INCLUDE),I2C)
-  I2C_OPTIONS=-D I2C
-  I2C_SOURCES=i2c.c
-  I2C_HEADERS=i2c.h
-  I2C_OBJS=i2c.o
-endif
-
-ifeq ($(STEMLAB_DISCOVERY), STEMLAB_DISCOVERY)
-STEMLAB_OPTIONS=-D STEMLAB_DISCOVERY \
-  `pkg-config --cflags avahi-gobject` \
-  `pkg-config --cflags libcurl`
-STEMLAB_LIBS=`pkg-config --libs avahi-gobject` `pkg-config --libs libcurl`
-STEMLAB_SOURCES=stemlab_discovery.c
-STEMLAB_HEADERS=stemlab_discovery.h
-STEMLAB_OBJS=stemlab_discovery.o
-endif
-
-GTKINCLUDES=`pkg-config --cflags gtk+-3.0`
-GTKLIBS=`pkg-config --libs gtk+-3.0`
-
-AUDIO_LIBS=-lasound
-#AUDIO_LIBS=-lsoundio
-
-OPTIONS=-g -Wno-deprecated-declarations $(PURESIGNAL_OPTIONS) $(REMOTE_OPTIONS) $(USBOZY_OPTIONS) $(I2C_OPTIONS) $(GPIO_OPTIONS) $(LIMESDR_OPTIONS) $(FREEDV_OPTIONS) $(LOCALCW_OPTIONS) $(RADIOBERRY_OPTIONS) $(PSK_OPTIONS) $(STEMLAB_OPTIONS) -D GIT_DATE='"$(GIT_DATE)"' -D GIT_VERSION='"$(GIT_VERSION)"' $(DEBUG_OPTION) -O3
-
-LIBS=-lrt -lm -lwdsp -lpthread $(AUDIO_LIBS) $(USBOZY_LIBS) $(PSKLIBS) $(GTKLIBS) $(GPIO_LIBS) $(SOAPYSDRLIBS) $(FREEDVLIBS) $(STEMLAB_LIBS)
-INCLUDES=$(GTKINCLUDES)
-
-COMPILE=$(CC) $(OPTIONS) $(INCLUDES)
-
-.c.o:
-       $(COMPILE) -c -o $@ $<
-
-PROGRAM=pihpsdr
-
-SOURCES= \
-audio.c \
-audio_waterfall.c \
-band.c \
-configure.c \
-frequency.c \
-discovered.c \
-discovery.c \
-filter.c \
-main.c \
-new_menu.c \
-about_menu.c \
-exit_menu.c \
-radio_menu.c \
-rx_menu.c \
-ant_menu.c \
-display_menu.c \
-dsp_menu.c \
-pa_menu.c \
-cw_menu.c \
-oc_menu.c \
-xvtr_menu.c \
-equalizer_menu.c \
-step_menu.c \
-meter_menu.c \
-band_menu.c \
-bandstack_menu.c \
-mode_menu.c \
-filter_menu.c \
-noise_menu.c \
-agc_menu.c \
-vox_menu.c \
-fft_menu.c \
-diversity_menu.c \
-freqent_menu.c \
-tx_menu.c \
-vfo_menu.c \
-test_menu.c \
-meter.c \
-mode.c \
-old_discovery.c \
-new_discovery.c \
-old_protocol.c \
-new_protocol.c \
-new_protocol_programmer.c \
-rx_panadapter.c \
-tx_panadapter.c \
-property.c \
-radio.c \
-receiver.c \
-rigctl.c \
-rigctl_menu.c \
-toolbar.c \
-transmitter.c \
-sliders.c \
-version.c \
-vfo.c \
-waterfall.c \
-button_text.c \
-vox.c \
-update.c \
-store.c \
-store_menu.c \
-memory.c \
-led.c \
-ext.c \
-error_handler.c
-
-
-HEADERS= \
-audio.h \
-audio_waterfall.h \
-agc.h \
-alex.h \
-band.h \
-configure.h \
-frequency.h \
-bandstack.h \
-channel.h \
-discovered.h \
-discovery.h \
-filter.h \
-new_menu.h \
-about_menu.h \
-rx_menu.h \
-exit_menu.h \
-radio_menu.h \
-ant_menu.h \
-display_menu.h \
-dsp_menu.h \
-pa_menu.h \
-cw_menu.h \
-oc_menu.h \
-xvtr_menu.h \
-equalizer_menu.h \
-step_menu.h \
-meter_menu.h \
-band_menu.h \
-bandstack_menu.h \
-mode_menu.h \
-filter_menu.h \
-noise_menu.h \
-agc_menu.h \
-vox_menu.h \
-fft_menu.h \
-diversity_menu.h \
-freqent_menu.h \
-tx_menu.h \
-vfo_menu.h \
-test_menu.h \
-meter.h \
-mode.h \
-old_discovery.h \
-new_discovery.h \
-old_protocol.h \
-new_protocol.h \
-rx_panadapter.h \
-tx_panadapter.h \
-property.h \
-radio.h \
-receiver.h \
-rigctl.h \
-rigctl_menu.h \
-toolbar.h \
-transmitter.h \
-sliders.h \
-version.h \
-vfo.h \
-waterfall.h \
-button_text.h \
-vox.h \
-update.h \
-store.h \
-store_menu.h \
-memory.h \
-led.h \
-ext.h \
-error_handler.h
-
-
-OBJS= \
-audio.o \
-audio_waterfall.o \
-band.o \
-configure.o \
-frequency.o \
-discovered.o \
-discovery.o \
-filter.o \
-version.o \
-main.o \
-new_menu.o \
-about_menu.o \
-rx_menu.o \
-exit_menu.o \
-radio_menu.o \
-ant_menu.o \
-display_menu.o \
-dsp_menu.o \
-pa_menu.o \
-cw_menu.o \
-oc_menu.o \
-xvtr_menu.o \
-equalizer_menu.o \
-step_menu.o \
-meter_menu.o \
-band_menu.o \
-bandstack_menu.o \
-mode_menu.o \
-filter_menu.o \
-noise_menu.o \
-agc_menu.o \
-vox_menu.o \
-fft_menu.o \
-diversity_menu.o \
-freqent_menu.o \
-tx_menu.o \
-vfo_menu.o \
-test_menu.o \
-meter.o \
-mode.o \
-old_discovery.o \
-new_discovery.o \
-old_protocol.o \
-new_protocol.o \
-new_protocol_programmer.o \
-rx_panadapter.o \
-tx_panadapter.o \
-property.o \
-radio.o \
-receiver.o \
-rigctl.o \
-rigctl_menu.o \
-toolbar.o \
-transmitter.o \
-sliders.o \
-vfo.o \
-waterfall.o \
-button_text.o \
-vox.o \
-update.o \
-store.o \
-store_menu.o \
-memory.o \
-led.o \
-ext.o \
-error_handler.o
-
-<<<<<<< HEAD
-$(PROGRAM):  $(OBJS) $(REMOTE_OBJS) $(USBOZY_OBJS) $(LIMESDR_OBJS) $(FREEDV_OBJS) $(LOCALCW_OBJS) $(I2C_OBJS) $(GPIO_OBJS) $(PSK_OBJS) $(PURESIGNAL_OBJS) $(STEMLAB_OBJS)
-       $(LINK) -o $(PROGRAM) $(OBJS) $(REMOTE_OBJS) $(USBOZY_OBJS) $(I2C_OBJS) $(GPIO_OBJS) $(LIMESDR_OBJS) $(FREEDV_OBJS) $(LOCALCW_OBJS) $(PSK_OBJS) $(LIBS) $(PURESIGNAL_OBJS) $(STEMLAB_OBJS)
-=======
-$(PROGRAM):  $(OBJS) $(REMOTE_OBJS) $(USBOZY_OBJS) $(LIMESDR_OBJS) $(FREEDV_OBJS) $(LOCALCW_OBJS) $(I2C_OBJS) $(GPIO_OBJS) $(PSK_OBJS) $(RADIOBERRY_OBJS)  $(PURESIGNAL_OBJS) $(STEMLAB_OBJS)
-       $(LINK) -o $(PROGRAM) $(OBJS) $(REMOTE_OBJS) $(USBOZY_OBJS) $(I2C_OBJS) $(GPIO_OBJS) $(LIMESDR_OBJS) $(FREEDV_OBJS) $(LOCALCW_OBJS) $(PSK_OBJS) $(RADIOBERRY_OBJS) $(PURESIGNAL_OBJS) $(STEMLAB_OBJS) $(LIBS)
->>>>>>> upstream/master
-
-all: prebuild  $(PROGRAM) $(HEADERS) $(REMOTE_HEADERS) $(USBOZY_HEADERS) $(LIMESDR_HEADERS) $(FREEDV_HEADERS) $(LOCALCW_HEADERS) $(I2C_HEADERS) $(GPIO_HEADERS) $(PSK_HEADERS) $(PURESIGNAL_HEADERS) $(STEMLAB_HEADERS) $(SOURCES) $(REMOTE_SOURCES) $(USBOZY_SOURCES) $(LIMESDR_SOURCES) $(FREEDV_SOURCES) $(I2C_SOURCES) $(GPIO_SOURCES) $(PSK_SOURCES) $(PURESIGNAL_SOURCES) $(STEMLAB_SOURCES)
-
-prebuild:
-       rm -f version.o
-
-clean:
-       -rm -f *.o
-       -rm -f $(PROGRAM)
-
-install: $(PROGRAM)
-       cp $(PROGRAM) /usr/local/bin
-
-release: $(PROGRAM)
-       cp $(PROGRAM) release/pihpsdr
-       cd release; tar cvf pihpsdr.tar pihpsdr
-       cd release; tar cvf pihpsdr-$(GIT_VERSION).tar pihpsdr
-
diff --git a/discovery.c.orig b/discovery.c.orig
deleted file mode 100644 (file)
index 908fa3a..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-/* Copyright (C)
-* 2015 - John Melton, G0ORX/N6LYT
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*
-*/
-
-#include <gtk/gtk.h>
-#include <gdk/gdk.h>
-#include <math.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <semaphore.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include "discovered.h"
-#include "discovery.h"
-#include "main.h"
-#include "radio.h"
-#ifdef USBOZY
-#include "ozyio.h"
-#endif
-#ifdef RADIOBERRY
-#include "radioberry_discovery.h"
-#endif
-#ifdef RADIOBERRY
-#include "radioberry.h"
-#endif
-
-static GtkWidget *discovery_dialog;
-static DISCOVERED *d;
-
-int discovery(void *data);
-
-static gboolean start_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-fprintf(stderr,"start_cb: %p\n",data);
-  radio=(DISCOVERED *)data;
-  gtk_widget_destroy(discovery_dialog);
-  start_radio();
-  return TRUE;
-}
-
-#ifdef GPIO
-static gboolean gpio_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-  configure_gpio(discovery_dialog);
-  return TRUE;
-}
-#endif
-
-static gboolean discover_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-  gtk_widget_destroy(discovery_dialog);
-  g_idle_add(discovery,NULL);
-  return TRUE;
-}
-
-static gboolean exit_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-  gtk_widget_destroy(discovery_dialog);
-  _exit(0);
-  return TRUE;
-}
-
-int discovery(void *data) {
-fprintf(stderr,"discovery\n");
-  selected_device=0;
-  devices=0;
-
-#ifdef USBOZY
-//
-// first: look on USB for an Ozy
-//
-  fprintf(stderr,"looking for USB based OZY devices\n");
-
-  if (ozy_discover() != 0)
-  {
-    discovered[devices].protocol = ORIGINAL_PROTOCOL;
-    discovered[devices].device = DEVICE_OZY;
-    discovered[devices].software_version = 10;              // we can't know yet so this isn't a real response
-    discovered[devices].status = STATE_AVAILABLE;
-    strcpy(discovered[devices].name,"Ozy on USB");
-
-    strcpy(discovered[devices].info.network.interface_name,"USB");
-    devices++;
-  }
-#endif
-
-
-  status_text("Old Protocol ... Discovering Devices");
-  old_discovery();
-
-  status_text("New Protocol ... Discovering Devices");
-  new_discovery();
-
-#ifdef LIMESDR
-  status_text("LimeSDR ... Discovering Devices");
-  lime_discovery();
-#endif
-
-<<<<<<< HEAD
-#ifdef RADIOBERRY
-      splash_status("Radioberry SDR ... Discovering Device");
-      radioberry_discovery();
-#endif
-
-=======
-  status_text("Discovery");
->>>>>>> upstream/master
-
-  if(devices==0) {
-    gdk_window_set_cursor(gtk_widget_get_window(top_window),gdk_cursor_new(GDK_ARROW));
-    discovery_dialog = gtk_dialog_new();
-    gtk_window_set_transient_for(GTK_WINDOW(discovery_dialog),GTK_WINDOW(top_window));
-    gtk_window_set_decorated(GTK_WINDOW(discovery_dialog),FALSE);
-
-    gtk_widget_override_font(discovery_dialog, pango_font_description_from_string("FreeMono 16"));
-
-    GdkRGBA color;
-    color.red = 1.0;
-    color.green = 1.0;
-    color.blue = 1.0;
-    color.alpha = 1.0;
-    gtk_widget_override_background_color(discovery_dialog,GTK_STATE_FLAG_NORMAL,&color);
-
-    GtkWidget *content;
-
-    content=gtk_dialog_get_content_area(GTK_DIALOG(discovery_dialog));
-
-    GtkWidget *grid=gtk_grid_new();
-    gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
-    gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
-    gtk_grid_set_row_spacing (GTK_GRID(grid),10);
-
-    GtkWidget *label=gtk_label_new("No devices found!");
-    gtk_grid_attach(GTK_GRID(grid),label,0,0,2,1);
-
-    GtkWidget *exit_b=gtk_button_new_with_label("Exit");
-    g_signal_connect (exit_b, "button-press-event", G_CALLBACK(exit_cb), NULL);
-    gtk_grid_attach(GTK_GRID(grid),exit_b,0,1,1,1);
-
-    GtkWidget *discover_b=gtk_button_new_with_label("Retry Discovery");
-    g_signal_connect (discover_b, "button-press-event", G_CALLBACK(discover_cb), NULL);
-    gtk_grid_attach(GTK_GRID(grid),discover_b,1,1,1,1);
-
-    gtk_container_add (GTK_CONTAINER (content), grid);
-    gtk_widget_show_all(discovery_dialog);
-  } else {
-    fprintf(stderr,"discovery: found %d devices\n", devices);
-    gdk_window_set_cursor(gtk_widget_get_window(top_window),gdk_cursor_new(GDK_ARROW));
-    discovery_dialog = gtk_dialog_new();
-    gtk_window_set_transient_for(GTK_WINDOW(discovery_dialog),GTK_WINDOW(top_window));
-    gtk_window_set_decorated(GTK_WINDOW(discovery_dialog),FALSE);
-
-    gtk_widget_override_font(discovery_dialog, pango_font_description_from_string("FreeMono 16"));
-
-    GdkRGBA color;
-    color.red = 1.0;
-    color.green = 1.0;
-    color.blue = 1.0;
-    color.alpha = 1.0;
-    gtk_widget_override_background_color(discovery_dialog,GTK_STATE_FLAG_NORMAL,&color);
-
-    GtkWidget *content;
-
-    content=gtk_dialog_get_content_area(GTK_DIALOG(discovery_dialog));
-
-    GtkWidget *grid=gtk_grid_new();
-    gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
-    gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
-    gtk_grid_set_row_spacing (GTK_GRID(grid),10);
-
-    int i;
-    char version[16];
-    char text[128];
-    for(i=0;i<devices;i++) {
-      d=&discovered[i];
-fprintf(stderr,"%p protocol=%d name=%s\n",d,d->protocol,d->name);
-      if(d->protocol==ORIGINAL_PROTOCOL) {
-        sprintf(version,"%d.%d",
-                        d->software_version/10,
-                        d->software_version%10);
-      } else {
-        sprintf(version,"%d.%d",
-                        d->software_version/10,
-                        d->software_version%10);
-      }
-      switch(d->protocol) {
-        case ORIGINAL_PROTOCOL:
-        case NEW_PROTOCOL:
-#ifdef USBOZY
-          if(d->device==DEVICE_OZY) {
-            sprintf(text,"%s (%s) on USB /dev/ozy\n", d->name, d->protocol==ORIGINAL_PROTOCOL?"old":"new");
-          } else {
-#endif
-            sprintf(text,"%s (%s %s) %s (%02X:%02X:%02X:%02X:%02X:%02X) on %s\n",
-                          d->name,
-                          d->protocol==ORIGINAL_PROTOCOL?"old":"new",
-                          version,
-                          inet_ntoa(d->info.network.address.sin_addr),
-                          d->info.network.mac_address[0],
-                          d->info.network.mac_address[1],
-                          d->info.network.mac_address[2],
-                          d->info.network.mac_address[3],
-                          d->info.network.mac_address[4],
-                          d->info.network.mac_address[5],
-                          d->info.network.interface_name);
-#ifdef USBOZY
-          }
-#endif
-          break;
-#ifdef LIMESDR
-        case LIMESDR_PROTOCOL:
-          sprintf(text,"%s\n",
-                        d->name);
-          break;
-#endif
-#ifdef RADIOBERRY
-                               case RADIOBERRY_PROTOCOL:
-                                       sprintf(text,"%s\n",d->name);
-                               break;
-#endif
-      }
-
-      GtkWidget *label=gtk_label_new(text);
-      gtk_widget_override_font(label, pango_font_description_from_string("FreeMono 12"));
-      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_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);
-
-      // if not available then cannot start it
-      if(d->status!=STATE_AVAILABLE) {
-        gtk_button_set_label(GTK_BUTTON(start_button),"In Use");
-        gtk_widget_set_sensitive(start_button, FALSE);
-      }
-
-      // if not on the same subnet then cannot start it
-      if((d->info.network.interface_address.sin_addr.s_addr&d->info.network.interface_netmask.sin_addr.s_addr) != (d->info.network.address.sin_addr.s_addr&d->info.network.interface_netmask.sin_addr.s_addr)) {
-        gtk_button_set_label(GTK_BUTTON(start_button),"Subnet!");
-        gtk_widget_set_sensitive(start_button, FALSE);
-      }
-
-    }
-#ifdef GPIO
-    GtkWidget *gpio_b=gtk_button_new_with_label("Config GPIO");
-    g_signal_connect (gpio_b, "button-press-event", G_CALLBACK(gpio_cb), NULL);
-    gtk_grid_attach(GTK_GRID(grid),gpio_b,0,i,1,1);
-#endif
-    GtkWidget *discover_b=gtk_button_new_with_label("Discover");
-    g_signal_connect (discover_b, "button-press-event", G_CALLBACK(discover_cb), NULL);
-    gtk_grid_attach(GTK_GRID(grid),discover_b,1,i,1,1);
-
-    GtkWidget *exit_b=gtk_button_new_with_label("Exit");
-    g_signal_connect (exit_b, "button-press-event", G_CALLBACK(exit_cb), NULL);
-    gtk_grid_attach(GTK_GRID(grid),exit_b,2,i,1,1);
-
-    gtk_container_add (GTK_CONTAINER (content), grid);
-    gtk_widget_show_all(discovery_dialog);
-fprintf(stderr,"showing device dialog\n");
-  }
-
-  return 0;
-
-}
-
-
diff --git a/ext.c b/ext.c
index 155f4e58e122c9e1dead03e0b1c145b3980340ba..20e72d3a5a67d1c7ebd037fe4069f2afc4ed01e0 100644 (file)
--- a/ext.c
+++ b/ext.c
@@ -444,15 +444,14 @@ int ext_lock_update(void *data) {
 
 int ext_rit_update(void *data) {
   vfo[active_receiver->id].rit_enabled=vfo[active_receiver->id].rit_enabled==1?0:1;
-  if(protocol==NEW_PROTOCOL) {
-    schedule_high_priority();
-  }
+  receiver_frequency_changed(active_receiver);
   vfo_update();
   return 0;
 }
 
 int ext_rit_clear(void *data) {
   vfo[active_receiver->id].rit=0;
+  receiver_frequency_changed(active_receiver);
   vfo_update();
   return 0;
 }
@@ -579,5 +578,19 @@ int ext_function_update(void *data) {
   }
   update_toolbar_labels();
   vfo_update();
+  return 0;
+}
+
+int ext_set_rf_gain(void *data) {
+  int pos=GPOINTER_TO_INT(data);
+  double value;
+  value=(double)pos;
+  if(value<0.0) {
+    value=0.0;
+  } else if(value>100.0) {
+    value=100.0;
+  }
+  set_rf_gain(active_receiver->id,value);
+  return 0;
 }
 
diff --git a/ext.h b/ext.h
index 115d05eb8e8f408b7ef302c55e7ac69ce5fe11af..f533acad5d61199f3b422e9c0d39c85201a1ce9e 100644 (file)
--- a/ext.h
+++ b/ext.h
@@ -103,3 +103,4 @@ int ext_set_compression(void *data);
 int ext_start_rx(void *data);
 int ext_diversity_update(void *data);
 int ext_sat_update(void *data);
+int ext_set_rf_gain(void *data);
diff --git a/general_menu.c.orig b/general_menu.c.orig
deleted file mode 100644 (file)
index 6bbc78e..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-/* Copyright (C)
-* 2015 - John Melton, G0ORX/N6LYT
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*
-*/
-
-#include <gtk/gtk.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "new_menu.h"
-#include "general_menu.h"
-#include "band.h"
-#include "filter.h"
-#include "radio.h"
-#include "receiver.h"
-
-static GtkWidget *parent_window=NULL;
-
-static GtkWidget *menu_b=NULL;
-
-static GtkWidget *dialog=NULL;
-
-static gboolean close_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-  if(dialog!=NULL) {
-    gtk_widget_destroy(dialog);
-    dialog=NULL;
-    sub_menu=NULL;
-  }
-  return TRUE;
-}
-
-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));
-}
-
-/*
-static void toolbar_dialog_buttons_cb(GtkWidget *widget, gpointer data) {
-  toolbar_dialog_buttons=toolbar_dialog_buttons==1?0:1;
-  update_toolbar_labels();
-}
-*/
-
-static void ptt_cb(GtkWidget *widget, gpointer data) {
-  mic_ptt_enabled=mic_ptt_enabled==1?0:1;
-}
-
-static void ptt_ring_cb(GtkWidget *widget, gpointer data) {
-  mic_ptt_tip_bias_ring=0;
-}
-
-static void ptt_tip_cb(GtkWidget *widget, gpointer data) {
-  mic_ptt_tip_bias_ring=1;
-}
-
-static void bias_cb(GtkWidget *widget, gpointer data) {
-  mic_bias_enabled=mic_bias_enabled==1?0:1;
-}
-
-static void apollo_cb(GtkWidget *widget, gpointer data);
-
-static void alex_cb(GtkWidget *widget, gpointer data) {
-  if(filter_board==ALEX) {
-    filter_board=NONE;
-  } else if(filter_board==NONE) {
-    filter_board=ALEX;
-  } else if(filter_board==APOLLO) {
-    GtkWidget *w=(GtkWidget *)data;
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), FALSE);
-    filter_board=ALEX;
-  }
-
-  if(protocol==NEW_PROTOCOL) {
-    filter_board_changed();
-  }
-
-  if(filter_board==ALEX) {
-    BAND *band=band_get_current_band();
-    BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
-    setFrequency(entry->frequency);
-    //setMode(entry->mode);
-    set_mode(active_receiver,entry->mode);
-    FILTER* band_filters=filters[entry->mode];
-    FILTER* band_filter=&band_filters[entry->filter];
-    //setFilter(band_filter->low,band_filter->high);
-    set_filter(active_receiver,band_filter->low,band_filter->high);
-    if(active_receiver->id==0) {
-      set_alex_rx_antenna(band->alexRxAntenna);
-      set_alex_tx_antenna(band->alexTxAntenna);
-      set_alex_attenuation(band->alexAttenuation);
-    }
-  }
-}
-
-static void apollo_cb(GtkWidget *widget, gpointer data) {
-  if(filter_board==APOLLO) {
-    filter_board=NONE;
-  } else if(filter_board==NONE) {
-    filter_board=APOLLO;
-  } else if(filter_board==ALEX) {
-    GtkWidget *w=(GtkWidget *)data;
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), FALSE);
-    filter_board=APOLLO;
-  }
-  if(protocol==NEW_PROTOCOL) {
-    filter_board_changed();
-  }
-
-  if(filter_board==APOLLO) {
-    BAND *band=band_get_current_band();
-    BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
-    setFrequency(entry->frequency);
-    //setMode(entry->mode);
-    set_mode(active_receiver,entry->mode);
-    FILTER* band_filters=filters[entry->mode];
-    FILTER* band_filter=&band_filters[entry->filter];
-    //setFilter(band_filter->low,band_filter->high);
-    set_filter(active_receiver,band_filter->low,band_filter->high);
-  }
-}
-
-static void sample_rate_cb(GtkWidget *widget, gpointer data) {
-<<<<<<< HEAD
- switch(protocol) {
-    case ORIGINAL_PROTOCOL:
-      old_protocol_new_sample_rate((int)data);
-      break;
-    case NEW_PROTOCOL:
-      new_protocol_new_sample_rate((int)data);
-      break;
-#ifdef RADIOBERRY
-       case RADIOBERRY_PROTOCOL:
-               radioberry_new_sample_rate((int)data);
-               break;
-#endif
-  }  
-  
-=======
-  radio_change_sample_rate((int)data);
->>>>>>> upstream/master
-}
-
-static void rit_cb(GtkWidget *widget,gpointer data) {
-  rit_increment=(int)data;
-}
-
-void general_menu(GtkWidget *parent) {
-  parent_window=parent;
-
-  dialog=gtk_dialog_new();
-  gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(parent_window));
-  gtk_window_set_decorated(GTK_WINDOW(dialog),FALSE);
-
-  GdkRGBA color;
-  color.red = 1.0;
-  color.green = 1.0;
-  color.blue = 1.0;
-  color.alpha = 1.0;
-  gtk_widget_override_background_color(dialog,GTK_STATE_FLAG_NORMAL,&color);
-
-  GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
-
-  GtkWidget *grid=gtk_grid_new();
-  gtk_grid_set_column_spacing (GTK_GRID(grid),10);
-  //gtk_grid_set_row_spacing (GTK_GRID(grid),10);
-  //gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
-  //gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
-
-  GtkWidget *close_b=gtk_button_new_with_label("Close General");
-  g_signal_connect (close_b, "button_press_event", G_CALLBACK(close_cb), NULL);
-  gtk_grid_attach(GTK_GRID(grid),close_b,0,0,1,1);
-
-  GtkWidget *vfo_divisor_label=gtk_label_new("VFO Encoder Divisor: ");
-  gtk_grid_attach(GTK_GRID(grid),vfo_divisor_label,4,1,1,1);
-
-  GtkWidget *vfo_divisor=gtk_spin_button_new_with_range(1.0,60.0,1.0);
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(vfo_divisor),(double)vfo_encoder_divisor);
-  gtk_grid_attach(GTK_GRID(grid),vfo_divisor,4,2,1,1);
-  g_signal_connect(vfo_divisor,"value_changed",G_CALLBACK(vfo_divisor_value_changed_cb),NULL);
-
-<<<<<<< HEAD
-  if(protocol==ORIGINAL_PROTOCOL || protocol==NEW_PROTOCOL
-#ifdef RADIOBERRY
-  || protocol==RADIOBERRY_PROTOCOL) {
-#else
-       ){
-#endif  
-    GtkWidget *rx_dither_b=gtk_check_button_new_with_label("Dither");
-    //gtk_widget_override_font(rx_dither_b, pango_font_description_from_string("Arial 18"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx_dither_b), rx_dither);
-    gtk_grid_attach(GTK_GRID(grid),rx_dither_b,1,4,1,1);
-    g_signal_connect(rx_dither_b,"toggled",G_CALLBACK(rx_dither_cb),NULL);
-
-    GtkWidget *rx_random_b=gtk_check_button_new_with_label("Random");
-    //gtk_widget_override_font(rx_random_b, pango_font_description_from_string("Arial 18"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx_random_b), rx_random);
-    gtk_grid_attach(GTK_GRID(grid),rx_random_b,1,5,1,1);
-    g_signal_connect(rx_random_b,"toggled",G_CALLBACK(rx_random_cb),NULL);
-=======
-  if(protocol==ORIGINAL_PROTOCOL || protocol==NEW_PROTOCOL) {
->>>>>>> upstream/master
-
-    if((protocol==NEW_PROTOCOL && device==NEW_DEVICE_ORION) ||
-       (protocol==NEW_PROTOCOL && device==NEW_DEVICE_ORION2) ||
-       (protocol==ORIGINAL_PROTOCOL && device==DEVICE_ORION) ||
-       (protocol==ORIGINAL_PROTOCOL && device==DEVICE_ORION2)) {
-
-      GtkWidget *ptt_ring_b=gtk_radio_button_new_with_label(NULL,"PTT On Ring, Mic and Bias on Tip");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_ring_b), mic_ptt_tip_bias_ring==0);
-      gtk_grid_attach(GTK_GRID(grid),ptt_ring_b,3,1,1,1);
-      g_signal_connect(ptt_ring_b,"pressed",G_CALLBACK(ptt_ring_cb),NULL);
-
-      GtkWidget *ptt_tip_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(ptt_ring_b),"PTT On Tip, Mic and Bias on Ring");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_tip_b), mic_ptt_tip_bias_ring==1);
-      gtk_grid_attach(GTK_GRID(grid),ptt_tip_b,3,2,1,1);
-      g_signal_connect(ptt_tip_b,"pressed",G_CALLBACK(ptt_tip_cb),NULL);
-
-      GtkWidget *ptt_b=gtk_check_button_new_with_label("PTT Enabled");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_b), mic_ptt_enabled);
-      gtk_grid_attach(GTK_GRID(grid),ptt_b,3,3,1,1);
-      g_signal_connect(ptt_b,"toggled",G_CALLBACK(ptt_cb),NULL);
-
-      GtkWidget *bias_b=gtk_check_button_new_with_label("BIAS Enabled");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bias_b), mic_bias_enabled);
-      gtk_grid_attach(GTK_GRID(grid),bias_b,3,4,1,1);
-      g_signal_connect(bias_b,"toggled",G_CALLBACK(bias_cb),NULL);
-    }
-
-#ifdef RADIOBERRY
-  if (protocol==ORIGINAL_PROTOCOL || protocol==NEW_PROTOCOL) {
-#endif  
-    GtkWidget *alex_b=gtk_check_button_new_with_label("ALEX");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alex_b), filter_board==ALEX);
-    gtk_grid_attach(GTK_GRID(grid),alex_b,1,1,1,1);
-
-    GtkWidget *apollo_b=gtk_check_button_new_with_label("APOLLO");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (apollo_b), filter_board==APOLLO);
-    gtk_grid_attach(GTK_GRID(grid),apollo_b,1,2,1,1);
-
-    g_signal_connect(alex_b,"toggled",G_CALLBACK(alex_cb),apollo_b);
-    g_signal_connect(apollo_b,"toggled",G_CALLBACK(apollo_cb),alex_b);
-#ifdef RADIOBERRY
-       }
-#endif 
-  }
-
-  GtkWidget *sample_rate_label=gtk_label_new("Sample Rate:");
-  gtk_grid_attach(GTK_GRID(grid),sample_rate_label,0,1,1,1);
-
-  if(protocol==ORIGINAL_PROTOCOL || protocol==NEW_PROTOCOL
- #ifdef RADIOBERRY
-  || protocol==RADIOBERRY_PROTOCOL) {
-#else
-       ){
-#endif  
-    GtkWidget *sample_rate_48=gtk_radio_button_new_with_label(NULL,"48000");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_48), sample_rate==48000);
-    gtk_grid_attach(GTK_GRID(grid),sample_rate_48,0,2,1,1);
-    g_signal_connect(sample_rate_48,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)48000);
-
-    GtkWidget *sample_rate_96=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_48),"96000");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_96), sample_rate==96000);
-    gtk_grid_attach(GTK_GRID(grid),sample_rate_96,0,3,1,1);
-    g_signal_connect(sample_rate_96,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)96000);
-
-    GtkWidget *sample_rate_192=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_96),"192000");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_192), sample_rate==192000);
-    gtk_grid_attach(GTK_GRID(grid),sample_rate_192,0,4,1,1);
-    g_signal_connect(sample_rate_192,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)192000);
-
-    GtkWidget *sample_rate_384=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_192),"384000");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_384), sample_rate==384000);
-    gtk_grid_attach(GTK_GRID(grid),sample_rate_384,0,5,1,1);
-    g_signal_connect(sample_rate_384,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)384000);
-
-    if(protocol==NEW_PROTOCOL) {
-      GtkWidget *sample_rate_768=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_384),"768000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_768), sample_rate==768000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_768,0,6,1,1);
-      g_signal_connect(sample_rate_768,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)768000);
-
-      GtkWidget *sample_rate_1536=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_768),"1536000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_1536), sample_rate==1536000);
-        gtk_grid_attach(GTK_GRID(grid),sample_rate_1536,0,7,1,1);
-      g_signal_connect(sample_rate_1536,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)1536000);
-
-#ifdef GPIO
-      gtk_widget_set_sensitive(sample_rate_768,FALSE);
-      gtk_widget_set_sensitive(sample_rate_1536,FALSE);
-#endif
-    }
-
-  }
-
-#ifdef LIMESDR
-  if(protocol==LIMESDR_PROTOCOL) {
-    GtkWidget *sample_rate_1M=gtk_radio_button_new_with_label(NULL,"1000000");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_1M), sample_rate==1000000);
-    gtk_grid_attach(GTK_GRID(grid),sample_rate_1M,0,2,1,1);
-    g_signal_connect(sample_rate_1M,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)1000000);
-
-    GtkWidget *sample_rate_2M=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_1M),"2000000");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_2M), sample_rate==2000000);
-    gtk_grid_attach(GTK_GRID(grid),sample_rate_2M,0,3,1,1);
-    g_signal_connect(sample_rate_2M,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)2000000);
-
-  }
-#endif
-
-
-  GtkWidget *rit_label=gtk_label_new("RIT step: ");
-  gtk_grid_attach(GTK_GRID(grid),rit_label,5,1,1,1);
-
-  GtkWidget *rit_1=gtk_radio_button_new_with_label(NULL,"1 Hz");
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rit_1), rit_increment==1);
-  gtk_grid_attach(GTK_GRID(grid),rit_1,5,2,1,1);
-  g_signal_connect(rit_1,"pressed",G_CALLBACK(rit_cb),(gpointer *)1);
-
-  GtkWidget *rit_10=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(rit_1),"10");
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rit_10), rit_increment==10);
-  gtk_grid_attach(GTK_GRID(grid),rit_10,5,3,1,1);
-  g_signal_connect(rit_10,"pressed",G_CALLBACK(rit_cb),(gpointer *)10);
-
-  GtkWidget *rit_100=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(rit_10),"100");
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rit_100), rit_increment==100);
-  gtk_grid_attach(GTK_GRID(grid),rit_100,5,4,1,1);
-  g_signal_connect(rit_100,"pressed",G_CALLBACK(rit_cb),(gpointer *)100);
-
-  gtk_container_add(GTK_CONTAINER(content),grid);
-
-  sub_menu=dialog;
-
-  gtk_widget_show_all(dialog);
-
-}
-
diff --git a/gpio.c b/gpio.c
index e9e18dcb46d1df08eab56ecc8cabce27f448f63c..70ce4e8aa137a85d4a5da5126dfb667abcf30972 100644 (file)
--- a/gpio.c
+++ b/gpio.c
@@ -1815,9 +1815,7 @@ static void encoder_changed(int action,int pos) {
         value=10000.0;
       }
       vfo[receiver[0]->id].rit=(int)value;
-      if(protocol==NEW_PROTOCOL) {
-        schedule_high_priority();
-      }
+      receiver_frequency_changed(receiver[0]);
       g_idle_add(ext_vfo_update,NULL);
       break;
     case ENCODER_RIT_RX2:
@@ -1829,9 +1827,7 @@ static void encoder_changed(int action,int pos) {
         value=10000.0;
       }
       vfo[receiver[1]->id].rit=(int)value;
-      if(protocol==NEW_PROTOCOL) {
-        schedule_high_priority();
-      }
+      receiver_frequency_changed(receiver[1]);
       g_idle_add(ext_vfo_update,NULL);
       break;
     case ENCODER_XIT:
diff --git a/gpio.c.orig b/gpio.c.orig
deleted file mode 100644 (file)
index 72ecd23..0000000
+++ /dev/null
@@ -1,1570 +0,0 @@
-/* Copyright (C)
-* 2015 - John Melton, G0ORX/N6LYT
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*
-*/
-
-#include <gtk/gtk.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdint.h>
-#include <fcntl.h>
-#include <poll.h>
-#include <sched.h>
-#include <wiringPi.h>
-#include <semaphore.h>
-
-#include "band.h"
-#include "channel.h"
-#include "discovered.h"
-#include "mode.h"
-#include "filter.h"
-#include "bandstack.h"
-#include "toolbar.h"
-#include "gpio.h"
-#include "radio.h"
-#include "toolbar.h"
-#include "main.h"
-#include "property.h"
-#include "vfo.h"
-#include "wdsp.h"
-#ifdef PSK
-#include "psk.h"
-#endif
-#include "new_menu.h"
-#include "encoder_menu.h"
-#include "gpio.h"
-#ifdef CONTROLLER2
-#include "i2c.h"
-#endif
-#include "ext.h"
-#include "sliders.h"
-
-<<<<<<< HEAD
-#ifdef RADIOBERRY
-#include <pigpio.h>
-#endif
-
-// debounce settle time in ms
-#define DEFAULT_SETTLE_TIME 150
-
-int settle_time=DEFAULT_SETTLE_TIME;
-static gint release_timer=-1;
-
-
-=======
-// debounce settle time in ms
-#define DEFAULT_SETTLE_TIME 150
-
-int settle_time=DEFAULT_SETTLE_TIME;
-static gint release_timer=-1;
-
-
->>>>>>> upstream/master
-#ifdef CONTROLLER2
-
-int ENABLE_VFO_ENCODER=1;
-int ENABLE_VFO_PULLUP=0;
-int VFO_ENCODER_A=1;
-int VFO_ENCODER_B=0;
-#ifdef VFO_HAS_FUNCTION
-int VFO_FUNCTION=12;
-#endif
-int ENABLE_E1_ENCODER=1;
-int ENABLE_E1_PULLUP=0;
-int E1_ENCODER_A=28;
-int E1_ENCODER_B=25;
-int E1_FUNCTION=3;
-int ENABLE_E2_ENCODER=1;
-int ENABLE_E2_PULLUP=0;
-int E2_ENCODER_A=7;
-int E2_ENCODER_B=29;
-int E2_FUNCTION=2;
-int ENABLE_E3_ENCODER=1;
-int ENABLE_E3_PULLUP=0;
-int E3_ENCODER_A=27;
-int E3_ENCODER_B=24;
-int E3_FUNCTION=4;
-int ENABLE_E4_ENCODER=1;
-int ENABLE_E4_PULLUP=0;
-int E4_ENCODER_A=6;
-int E4_ENCODER_B=10;
-int E4_FUNCTION=5;
-
-int ENABLE_E1_BUTTON=1;
-int ENABLE_E2_BUTTON=1;
-int ENABLE_E3_BUTTON=1;
-int ENABLE_E4_BUTTON=1;
-
-int I2C_INTERRUPT=16;
-
-#else
-// uses wiringpi pin numbers
-int ENABLE_VFO_ENCODER=1;
-int ENABLE_VFO_PULLUP=1;
-int VFO_ENCODER_A=1;
-int VFO_ENCODER_B=0;
-int ENABLE_E1_ENCODER=1;
-int ENABLE_E1_PULLUP=0;
-int E1_ENCODER_A=28;
-int E1_ENCODER_B=25;
-int E1_FUNCTION=6;
-int ENABLE_E2_ENCODER=1;
-int ENABLE_E2_PULLUP=0;
-int E2_ENCODER_A=27;
-int E2_ENCODER_B=24;
-int E2_FUNCTION=10;
-int ENABLE_E3_ENCODER=1;
-int ENABLE_E3_PULLUP=0;
-int E3_ENCODER_A=7;
-int E3_ENCODER_B=29;
-int E3_FUNCTION=11;
-int ENABLE_S1_BUTTON=1;
-int S1_BUTTON=23;
-int ENABLE_S2_BUTTON=1;
-int S2_BUTTON=26;
-int ENABLE_S3_BUTTON=1;
-int S3_BUTTON=22;
-int ENABLE_S4_BUTTON=1;
-int S4_BUTTON=21;
-int ENABLE_S5_BUTTON=1;
-int S5_BUTTON=5;
-int ENABLE_S6_BUTTON=1;
-int S6_BUTTON=4;
-int ENABLE_MOX_BUTTON=1;
-int MOX_BUTTON=2;
-int ENABLE_FUNCTION_BUTTON=1;
-int FUNCTION_BUTTON=3;
-int ENABLE_E1_BUTTON=1;
-int ENABLE_E2_BUTTON=1;
-int ENABLE_E3_BUTTON=1;
-int ENABLE_CW_BUTTONS=1;
-#endif
-<<<<<<< HEAD
-#ifdef LOCALCW
-int CWL_BUTTON=1;
-int CWR_BUTTON=24;
-#endif
-=======
-
->>>>>>> upstream/master
-
-static volatile int vfoEncoderPos;
-static volatile int vfo_A;
-static volatile int vfo_B;
-static volatile int vfoFunction;
-static volatile int e1EncoderPos;
-static volatile int e1Function;
-int e1_encoder_action=ENCODER_AF_GAIN;
-static volatile int e2EncoderPos;
-static volatile int e2Function;
-int e2_encoder_action=ENCODER_DRIVE;
-static volatile int e3EncoderPos;
-static volatile int e3Function;
-int e3_encoder_action=ENCODER_ATTENUATION;
-#ifdef CONTROLLER2
-static volatile int e4EncoderPos;
-static volatile int e4Function;
-int e4_encoder_action=ENCODER_MIC_GAIN;
-#endif
-static volatile int function_state;
-static volatile int band_state;
-static volatile int bandstack_state;
-static volatile int mode_state;
-static volatile int filter_state;
-static volatile int noise_state;
-static volatile int agc_state;
-static volatile int mox_state;
-static volatile int lock_state;
-
-static gpointer rotary_encoder_thread(gpointer data);
-static GThread *rotary_encoder_thread_id;
-
-static int previous_function_button=0;
-static int e1_function=0;
-static int previous_e1_function=0;
-static int e2_function=0;
-static int previous_e2_function=0;
-static int e3_function=0;
-static int previous_e3_function=0;
-#ifdef CONTROLLER2
-static int e4_function=0;
-static int previous_e4_function=0;
-#endif
-static int band_button=0;
-static int previous_band_button=0;
-static int bandstack_button=0;
-static int previous_bandstack_button=0;
-static int mode_button=0;
-static int previous_mode_button=0;
-static int filter_button=0;
-static int previous_filter_button=0;
-static int noise_button=0;
-static int previous_noise_button=0;
-static int agc_button=0;
-static int previous_agc_button=0;
-static int mox_button=0;
-static int previous_mox_button=0;
-
-static int running=0;
-
-char *encoder_string[] = {
-"AF GAIN",
-"AGC GAIN",
-"ATTENUATION",
-"MIC GAIN",
-"DRIVE",
-"RIT",
-"CW SPEED",
-"CW FREQUENCY",
-"PANADAPTER HIGH",
-"PANADAPTER LOW",
-"SQUELCH",
-"COMP"
-};
-
-static int mox_pressed(void *data) {
-  if(running) sim_mox_cb(NULL,NULL);
-  return 0;
-}
-
-static int s1_pressed(void *data) {
-  if(running) sim_s1_pressed_cb(NULL,NULL);
-  return 0;
-}
-
-static int s1_released(void *data) {
-  if(running) sim_s1_released_cb(NULL,NULL);
-  return 0;
-}
-
-static int s2_pressed(void *data) {
-  if(running) sim_s2_pressed_cb(NULL,NULL);
-  return 0;
-}
-
-static int s2_released(void *data) {
-  if(running) sim_s2_released_cb(NULL,NULL);
-  return 0;
-}
-
-static int s3_pressed(void *data) {
-  if(running) sim_s3_pressed_cb(NULL,NULL);
-  return 0;
-}
-
-static int s3_released(void *data) {
-  if(running) sim_s3_released_cb(NULL,NULL);
-  return 0;
-}
-
-static int s4_pressed(void *data) {
-  if(running) sim_s4_pressed_cb(NULL,NULL);
-  return 0;
-}
-
-static int s4_released(void *data) {
-  if(running) sim_s4_released_cb(NULL,NULL);
-  return 0;
-}
-
-static int s5_pressed(void *data) {
-  if(running) sim_s5_pressed_cb(NULL,NULL);
-  return 0;
-}
-
-static int s5_released(void *data) {
-  if(running) sim_s5_released_cb(NULL,NULL);
-  return 0;
-}
-
-static int s6_pressed(void *data) {
-  if(running) sim_s6_pressed_cb(NULL,NULL);
-  return 0;
-}
-
-static int s6_released(void *data) {
-  if(running) sim_s6_released_cb(NULL,NULL);
-  return 0;
-}
-
-static int function_pressed(void *data) {
-  if(running) sim_function_cb(NULL,NULL);
-  return 0;
-}
-
-static int vfo_function_pressed(void *data) {
-  RECEIVER *rx;
-  if(receivers==2) {
-    if(active_receiver==receiver[0]) {
-      rx=receiver[1];
-    } else {
-      rx=receiver[0];
-    }
-    active_receiver=rx;
-    g_idle_add(menu_active_receiver_changed,NULL);
-    g_idle_add(ext_vfo_update,NULL);
-    g_idle_add(sliders_active_receiver_changed,NULL);
-  }
-  return 0;
-}
-
-static int vfo_function_released(void *data) {
-  return 0;
-}
-
-static int e_function_pressed(void *data) {
-  int encoder=(int)data;
-  start_encoder(encoder);
-  return 0;
-}
-
-static unsigned long e1debounce=0;
-
-static void e1FunctionAlert() {
-    int level=digitalRead(E1_FUNCTION);
-    if(level==0) {
-      if(running) g_idle_add(e_function_pressed,(gpointer)1);
-    }
-}
-
-static unsigned long e2debounce=0;
-
-static void e2FunctionAlert() {
-    int level=digitalRead(E2_FUNCTION);
-    if(level==0) {
-      if(running) g_idle_add(e_function_pressed,(gpointer)2);
-    }
-}
-
-static unsigned long e3debounce=0;
-
-static void e3FunctionAlert() {
-    int level=digitalRead(E3_FUNCTION);
-    if(level==0) {
-      if(running) g_idle_add(e_function_pressed,(gpointer)3);
-    }
-}
-
-#ifdef CONTROLLER2
-static unsigned long e4debounce=0;
-
-static void e4FunctionAlert() {
-    int level=digitalRead(E4_FUNCTION);
-    if(level==0) {
-      if(running) g_idle_add(e_function_pressed,(gpointer)4);
-    }
-}
-#endif
-
-#ifndef CONTROLLER2
-static unsigned long function_debounce=0;
-
-static void functionAlert() {
-    int t=millis();
-    if(t-function_debounce > settle_time) {
-      int level=digitalRead(FUNCTION_BUTTON);
-      if(level==0) {
-        if(running) g_idle_add(function_pressed,NULL);
-      }
-      function_debounce=t;
-    }
-}
-
-static unsigned long s1_debounce=0;
-static gint s1_timer=-1;
-
-static gboolean s1_timer_cb(gpointer data) {
-    int level=digitalRead(S1_BUTTON);
-    if(level==1) {
-      s1_timer=-1;
-      g_idle_add(s1_released,NULL);
-      return FALSE;
-    }
-    return TRUE;
-}
-
-static void s1Alert() {
-    int t=millis();
-    if(t-s1_debounce > settle_time) {
-      int level=digitalRead(S1_BUTTON);
-      if(level==0) {
-        g_idle_add(s1_pressed,NULL);
-        s1_timer=g_timeout_add(settle_time,s1_timer_cb,NULL);
-      } else {
-        if(s1_timer!=-1) {
-          g_source_remove(s1_timer);
-          s1_timer==-1;
-        }
-        g_idle_add(s1_released,NULL);
-      }
-      s1_debounce=t;
-    }
-}
-
-static unsigned long s2_debounce=0;
-static gint s2_timer=-1;
-
-static gboolean s2_timer_cb(gpointer data) {
-    int level=digitalRead(S2_BUTTON);
-    if(level==1) {
-      s2_timer=-1;
-      g_idle_add(s2_released,NULL);
-      return FALSE;
-    }
-    return TRUE;
-}
-
-static void s2Alert() {
-    int t=millis();
-    if(t-s2_debounce > settle_time) {
-      int level=digitalRead(S2_BUTTON);
-      if(level==0) {
-        g_idle_add(s2_pressed,NULL);
-        s2_timer=g_timeout_add(settle_time,s2_timer_cb,NULL);
-      } else {
-        if(s2_timer!=-1) {
-          g_source_remove(s2_timer);
-          s2_timer==-1;
-        }
-        g_idle_add(s2_released,NULL);
-      }
-      s2_debounce=t;
-    }
-}
-
-static unsigned long s3_debounce=0;
-static gint s3_timer=-1;
-
-static gboolean s3_timer_cb(gpointer data) {
-    int level=digitalRead(S3_BUTTON);
-    if(level==1) {
-      s3_timer=-1;
-      g_idle_add(s3_released,NULL);
-      return FALSE;
-    }
-    return TRUE;
-}
-
-static void s3Alert() {
-    int t=millis();
-    if(t-s3_debounce > settle_time) {
-      int level=digitalRead(S3_BUTTON);
-      if(level==0) {
-        g_idle_add(s3_pressed,NULL);
-        s3_timer=g_timeout_add(settle_time,s3_timer_cb,NULL);
-      } else {
-        if(s3_timer!=-1) {
-          g_source_remove(s3_timer);
-          s3_timer==-1;
-        }
-        g_idle_add(s3_released,NULL);
-      }
-      s3_debounce=t;
-    }
-}
-
-static unsigned long s4_debounce=0;
-static gint s4_timer=-1;
-
-static gboolean s4_timer_cb(gpointer data) {
-    int level=digitalRead(S4_BUTTON);
-    if(level==1) {
-      s4_timer=-1;
-      g_idle_add(s4_released,NULL);
-      return FALSE;
-    }
-    return TRUE;
-}
-
-static void s4Alert() {
-    int t=millis();
-    if(t-s4_debounce > settle_time) {
-      int level=digitalRead(S4_BUTTON);
-      if(level==0) {
-        g_idle_add(s4_pressed,NULL);
-        s4_timer=g_timeout_add(settle_time,s4_timer_cb,NULL);
-      } else {
-        if(s4_timer!=-1) {
-          g_source_remove(s4_timer);
-          s4_timer==-1;
-        }
-        g_idle_add(s4_released,NULL);
-      }
-      s4_debounce=t;
-    }
-}
-
-static unsigned long s5_debounce=0;
-static gint s5_timer=-1;
-
-static gboolean s5_timer_cb(gpointer data) {
-    int level=digitalRead(S5_BUTTON);
-    if(level==1) {
-      s5_timer=-1;
-      g_idle_add(s5_released,NULL);
-      return FALSE;
-    }
-    return TRUE;
-}
-
-static void s5Alert() {
-    int t=millis();
-    if(t-s5_debounce > settle_time) {
-      int level=digitalRead(S5_BUTTON);
-      if(level==0) {
-        g_idle_add(s5_pressed,NULL);
-        s5_timer=g_timeout_add(settle_time,s5_timer_cb,NULL);
-      } else {
-        if(s5_timer!=-1) {
-          g_source_remove(s5_timer);
-          s5_timer==-1;
-        }
-        g_idle_add(s5_released,NULL);
-      }
-      s5_debounce=t;
-    }
-}
-
-static unsigned long s6_debounce=0;
-static gint s6_timer=-1;
-
-static gboolean s6_timer_cb(gpointer data) {
-    int level=digitalRead(S6_BUTTON);
-    if(level==1) {
-      s6_timer=-1;
-      g_idle_add(s6_released,NULL);
-      return FALSE;
-    }
-    return TRUE;
-}
-
-static void s6Alert() {
-    int t=millis();
-    if(t-s6_debounce > settle_time) {
-      int level=digitalRead(S6_BUTTON);
-      if(level==0) {
-        g_idle_add(s6_pressed,NULL);
-        s6_timer=g_timeout_add(settle_time,s6_timer_cb,NULL);
-      } else {
-        if(s6_timer!=-1) {
-          g_source_remove(s6_timer);
-          s6_timer==-1;
-        }
-        g_idle_add(s6_released,NULL);
-      }
-      s6_debounce=t;
-    }
-}
-
-static unsigned long mox_debounce=0;
-
-static void moxAlert() {
-    int t=millis();
-    if(t-mox_debounce > settle_time) {
-      int level=digitalRead(MOX_BUTTON);
-      if(level==0) {
-        g_idle_add(mox_pressed,(gpointer)NULL);
-      }
-      mox_debounce=t;
-    }
-}
-#endif
-
-
-#ifdef VFO_HAS_FUNCTION
-static unsigned long vfo_debounce=0;
-
-static void vfoFunctionAlert() {
-    int t=millis();
-    if(t-vfo_debounce > settle_time) {
-      int level=digitalRead(VFO_FUNCTION);
-      if(level==0) {
-        if(running) g_idle_add(vfo_function_pressed,NULL);
-      } else {
-        if(running) g_idle_add(vfo_function_released,NULL);
-      }
-      vfo_debounce=t;
-    }
-}
-#endif
-
-static void vfoEncoderInt(int A_or_B) {
-    int switch_A=digitalRead(VFO_ENCODER_A);
-    int switch_B=digitalRead(VFO_ENCODER_B);
-    if(vfo_A==switch_A && vfo_B==switch_B) {
-      return; // same as last
-    }
-    vfo_A=switch_A;
-    vfo_B=switch_B;
-    if(switch_A && switch_B) {
-      if(A_or_B==VFO_ENCODER_B) {
-        vfoEncoderPos--;
-      } else {
-        vfoEncoderPos++;
-      }
-    }
-}
-
-static void vfoEncoderA() {
-    vfoEncoderInt(VFO_ENCODER_A);
-}
-
-static void vfoEncoderB() {
-    vfoEncoderInt(VFO_ENCODER_B);
-}
-
-static void e1EncoderInterrupt(int gpio) {
-  static int e1CurrentA=1, e1CurrentB=1;
-
-  int levelA=digitalRead(E1_ENCODER_A);
-  int levelB=digitalRead(E1_ENCODER_B);
-
-  if(e1CurrentA==levelA && e1CurrentB==levelB) {
-    return;
-  }
-
-  e1CurrentA=levelA;
-  e1CurrentB=levelB;
-
-  if(levelA && levelB) {
-    if(gpio==E1_ENCODER_B) {
-      --e1EncoderPos;
-    } else {
-      ++e1EncoderPos;
-    }
-  }
-}
-
-static void e1EncoderA() {
-  e1EncoderInterrupt(E1_ENCODER_A);
-}
-
-static void e1EncoderB() {
-  e1EncoderInterrupt(E1_ENCODER_B);
-}
-
-static void e2EncoderInterrupt(int gpio) {
-  static int e2CurrentA=1, e2CurrentB=1;
-
-  int levelA=digitalRead(E2_ENCODER_A);
-  int levelB=digitalRead(E2_ENCODER_B);
-
-  if(e2CurrentA==levelA && e2CurrentB==levelB) {
-    return;
-  }
-
-  e2CurrentA=levelA;
-  e2CurrentB=levelB;
-
-  if(levelA && levelB) {
-    if(gpio==E2_ENCODER_B) {
-      --e2EncoderPos;
-    } else {
-      ++e2EncoderPos;
-    }
-  }
-}
-
-static void e2EncoderA() {
-  e2EncoderInterrupt(E2_ENCODER_A);
-}
-
-static void e2EncoderB() {
-  e2EncoderInterrupt(E2_ENCODER_B);
-}
-
-static void e3EncoderInterrupt(int gpio) {
-  static int e3CurrentA=1, e3CurrentB=1;
-
-  int levelA=digitalRead(E3_ENCODER_A);
-  int levelB=digitalRead(E3_ENCODER_B);
-
-  if(e3CurrentA==levelA && e3CurrentB==levelB) {
-    return;
-  }
-
-  e3CurrentA=levelA;
-  e3CurrentB=levelB;
-
-  if(levelA && levelB) {
-    if(gpio==E3_ENCODER_B) {
-      --e3EncoderPos;
-    } else {
-      ++e3EncoderPos;
-    }
-  }
-}
-
-static void e3EncoderA() {
-  e3EncoderInterrupt(E3_ENCODER_A);
-}
-
-static void e3EncoderB() {
-  e3EncoderInterrupt(E3_ENCODER_B);
-}
-
-#ifdef CONTROLLER2
-static void e4EncoderInterrupt(int gpio) {
-  static int e4CurrentA=1, e4CurrentB=1;
-
-  int levelA=digitalRead(E4_ENCODER_A);
-  int levelB=digitalRead(E4_ENCODER_B);
-
-  if(e4CurrentA==levelA && e4CurrentB==levelB) {
-    return;
-  }
-
-  e4CurrentA=levelA;
-  e4CurrentB=levelB;
-
-  if(levelA && levelB) {
-    if(gpio==E4_ENCODER_B) {
-      --e4EncoderPos;
-    } else {
-      ++e4EncoderPos;
-    }
-  }
-<<<<<<< HEAD
-}
-
-static void e4EncoderA() {
-  e4EncoderInterrupt(E4_ENCODER_A);
-=======
-}
-
-static void e4EncoderA() {
-  e4EncoderInterrupt(E4_ENCODER_A);
-}
-
-static void e4EncoderB() {
-  e4EncoderInterrupt(E4_ENCODER_B);
->>>>>>> upstream/master
-}
-#endif
-
-<<<<<<< HEAD
-static void e4EncoderB() {
-  e4EncoderInterrupt(E4_ENCODER_B);
-}
-#endif
-
-=======
->>>>>>> upstream/master
-#ifdef CONTROLLER2
-static void pI2CInterrupt() {
-    int level=digitalRead(I2C_INTERRUPT);
-    if(level==0) {
-      i2c_interrupt();
-    }
-}
-#endif
-
-void gpio_restore_state() {
-  char* value;
-  loadProperties("gpio.props");
-  value=getProperty("ENABLE_VFO_ENCODER");
-  if(value) ENABLE_VFO_ENCODER=atoi(value);
-  value=getProperty("ENABLE_VFO_PULLUP");
-  if(value) ENABLE_VFO_PULLUP=atoi(value);
-  value=getProperty("VFO_ENCODER_A");
-  if(value) VFO_ENCODER_A=atoi(value);
-  value=getProperty("VFO_ENCODER_B");
-  if(value) VFO_ENCODER_B=atoi(value);
-  value=getProperty("ENABLE_E1_ENCODER");
-  if(value) ENABLE_E1_ENCODER=atoi(value);
-  value=getProperty("ENABLE_E1_PULLUP");
-  if(value) ENABLE_E1_PULLUP=atoi(value);
-  value=getProperty("E1_ENCODER_A");
-  if(value) E1_ENCODER_A=atoi(value);
-  value=getProperty("E1_ENCODER_B");
-  if(value) E1_ENCODER_B=atoi(value);
-  value=getProperty("ENABLE_E2_ENCODER");
-  if(value) ENABLE_E2_ENCODER=atoi(value);
-  value=getProperty("ENABLE_E2_PULLUP");
-  if(value) ENABLE_E2_PULLUP=atoi(value);
-  value=getProperty("E2_ENCODER_A");
-  if(value) E2_ENCODER_A=atoi(value);
-  value=getProperty("E2_ENCODER_B");
-  if(value) E2_ENCODER_B=atoi(value);
-  value=getProperty("ENABLE_E3_ENCODER");
-  if(value) ENABLE_E3_ENCODER=atoi(value);
-  value=getProperty("ENABLE_E3_PULLUP");
-  if(value) ENABLE_E3_PULLUP=atoi(value);
-  value=getProperty("E3_ENCODER_A");
-  if(value) E3_ENCODER_A=atoi(value);
-  value=getProperty("E3_ENCODER_B");
-  if(value) E3_ENCODER_B=atoi(value);
-#ifdef CONTROLLER2
-  value=getProperty("ENABLE_E4_ENCODER");
-  if(value) ENABLE_E4_ENCODER=atoi(value);
-  value=getProperty("ENABLE_E4_PULLUP");
-  if(value) ENABLE_E4_PULLUP=atoi(value);
-  value=getProperty("E4_ENCODER_A");
-  if(value) E4_ENCODER_A=atoi(value);
-  value=getProperty("E4_ENCODER_B");
-  if(value) E4_ENCODER_B=atoi(value);
-#endif
-#ifndef CONTROLLER2
-  value=getProperty("ENABLE_S1_BUTTON");
-  if(value) ENABLE_S1_BUTTON=atoi(value);
-  value=getProperty("S1_BUTTON");
-  if(value) S1_BUTTON=atoi(value);
-  value=getProperty("ENABLE_S2_BUTTON");
-  if(value) ENABLE_S2_BUTTON=atoi(value);
-  value=getProperty("S2_BUTTON");
-  if(value) S2_BUTTON=atoi(value);
-  value=getProperty("ENABLE_S3_BUTTON");
-  if(value) ENABLE_S3_BUTTON=atoi(value);
-  value=getProperty("S3_BUTTON");
-  if(value) S3_BUTTON=atoi(value);
-  value=getProperty("ENABLE_S4_BUTTON");
-  if(value) ENABLE_S4_BUTTON=atoi(value);
-  value=getProperty("S4_BUTTON");
-  if(value) S4_BUTTON=atoi(value);
-  value=getProperty("ENABLE_S5_BUTTON");
-  if(value) ENABLE_S5_BUTTON=atoi(value);
-  value=getProperty("S5_BUTTON");
-  if(value) S5_BUTTON=atoi(value);
-  value=getProperty("ENABLE_S6_BUTTON");
-  if(value) ENABLE_S6_BUTTON=atoi(value);
-  value=getProperty("S6_BUTTON");
-  if(value) S6_BUTTON=atoi(value);
-  value=getProperty("ENABLE_FUNCTION_BUTTON");
-  if(value) ENABLE_FUNCTION_BUTTON=atoi(value);
-  value=getProperty("FUNCTION_BUTTON");
-  if(value) FUNCTION_BUTTON=atoi(value);
-  value=getProperty("ENABLE_MOX_BUTTON");
-  if(value) ENABLE_MOX_BUTTON=atoi(value);
-  value=getProperty("MOX_BUTTON");
-  if(value) MOX_BUTTON=atoi(value);
-#endif
-
-  value=getProperty("ENABLE_E1_BUTTON");
-  if(value) ENABLE_E1_BUTTON=atoi(value);
-  value=getProperty("ENABLE_E2_BUTTON");
-  if(value) ENABLE_E2_BUTTON=atoi(value);
-  value=getProperty("ENABLE_E3_BUTTON");
-  if(value) ENABLE_E3_BUTTON=atoi(value);
-#ifdef CONTROLLER2
-  value=getProperty("ENABLE_E4_BUTTON");
-  if(value) ENABLE_E4_BUTTON=atoi(value);
-#endif
-
-<<<<<<< HEAD
-#ifdef LOCALCW
-  value=getProperty("ENABLE_CW_BUTTONS");
-  if(value) ENABLE_CW_BUTTONS=atoi(value);
-  value=getProperty("CWL_BUTTON");
-  if(value) CWL_BUTTON=atoi(value);
-  value=getProperty("CWR_BUTTON");
-  if(value) CWR_BUTTON=atoi(value);
-#endif
-
-=======
->>>>>>> upstream/master
-}
-
-void gpio_save_state() {
-   char value[80];
-
-  sprintf(value,"%d",ENABLE_VFO_ENCODER);
-  setProperty("ENABLE_VFO_ENCODER",value);
-  sprintf(value,"%d",ENABLE_VFO_PULLUP);
-  setProperty("ENABLE_VFO_PULLUP",value);
-  sprintf(value,"%d",VFO_ENCODER_A);
-  setProperty("VFO_ENCODER_A",value);
-  sprintf(value,"%d",VFO_ENCODER_B);
-  setProperty("VFO_ENCODER_B",value);
-  sprintf(value,"%d",ENABLE_E1_ENCODER);
-  setProperty("ENABLE_E1_ENCODER",value);
-  sprintf(value,"%d",ENABLE_E1_PULLUP);
-  setProperty("ENABLE_E1_PULLUP",value);
-  sprintf(value,"%d",E1_ENCODER_A);
-  setProperty("E1_ENCODER_A",value);
-  sprintf(value,"%d",E1_ENCODER_B);
-  setProperty("E1_ENCODER_B",value);
-  sprintf(value,"%d",ENABLE_E2_ENCODER);
-  setProperty("ENABLE_E2_ENCODER",value);
-  sprintf(value,"%d",ENABLE_E2_PULLUP);
-  setProperty("ENABLE_E2_PULLUP",value);
-  sprintf(value,"%d",E2_ENCODER_A);
-  setProperty("E2_ENCODER_A",value);
-  sprintf(value,"%d",E2_ENCODER_B);
-  setProperty("E2_ENCODER_B",value);
-  sprintf(value,"%d",ENABLE_E3_ENCODER);
-  setProperty("ENABLE_E3_ENCODER",value);
-  sprintf(value,"%d",ENABLE_E3_PULLUP);
-  setProperty("ENABLE_E3_PULLUP",value);
-  sprintf(value,"%d",E3_ENCODER_A);
-  setProperty("E3_ENCODER_A",value);
-  sprintf(value,"%d",E3_ENCODER_B);
-  setProperty("E3_ENCODER_B",value);
-#ifdef CONTROLLER2
-  sprintf(value,"%d",ENABLE_E4_ENCODER);
-  setProperty("ENABLE_E4_ENCODER",value);
-  sprintf(value,"%d",ENABLE_E4_PULLUP);
-  setProperty("ENABLE_E4_PULLUP",value);
-  sprintf(value,"%d",E4_ENCODER_A);
-  setProperty("E4_ENCODER_A",value);
-  sprintf(value,"%d",E4_ENCODER_B);
-  setProperty("E4_ENCODER_B",value);
-#endif
-#ifndef CONTROLLER2
-  sprintf(value,"%d",ENABLE_S1_BUTTON);
-  setProperty("ENABLE_S1_BUTTON",value);
-  sprintf(value,"%d",S1_BUTTON);
-  setProperty("S1_BUTTON",value);
-  sprintf(value,"%d",ENABLE_S2_BUTTON);
-  setProperty("ENABLE_S2_BUTTON",value);
-  sprintf(value,"%d",S2_BUTTON);
-  setProperty("S2_BUTTON",value);
-  sprintf(value,"%d",ENABLE_S3_BUTTON);
-  setProperty("ENABLE_S3_BUTTON",value);
-  sprintf(value,"%d",S3_BUTTON);
-  setProperty("S3_BUTTON",value);
-  sprintf(value,"%d",ENABLE_S4_BUTTON);
-  setProperty("ENABLE_S4_BUTTON",value);
-  sprintf(value,"%d",S4_BUTTON);
-  setProperty("S4_BUTTON",value);
-  sprintf(value,"%d",ENABLE_S5_BUTTON);
-  setProperty("ENABLE_S5_BUTTON",value);
-  sprintf(value,"%d",S5_BUTTON);
-  setProperty("S5_BUTTON",value);
-  sprintf(value,"%d",ENABLE_S6_BUTTON);
-  setProperty("ENABLE_S6_BUTTON",value);
-  sprintf(value,"%d",S6_BUTTON);
-  setProperty("S6_BUTTON",value);
-  sprintf(value,"%d",ENABLE_FUNCTION_BUTTON);
-  setProperty("ENABLE_FUNCTION_BUTTON",value);
-  sprintf(value,"%d",FUNCTION_BUTTON);
-  setProperty("FUNCTION_BUTTON",value);
-  sprintf(value,"%d",ENABLE_MOX_BUTTON);
-  setProperty("ENABLE_MOX_BUTTON",value);
-  sprintf(value,"%d",MOX_BUTTON);
-  setProperty("MOX_BUTTON",value);
-#endif
-
-  sprintf(value,"%d",ENABLE_E1_BUTTON);
-  setProperty("ENABLE_E1_BUTTON",value);
-  sprintf(value,"%d",ENABLE_E2_BUTTON);
-  setProperty("ENABLE_E2_BUTTON",value);
-  sprintf(value,"%d",ENABLE_E3_BUTTON);
-  setProperty("ENABLE_E3_BUTTON",value);
-#ifdef CONTROLLER2
-  sprintf(value,"%d",ENABLE_E4_BUTTON);
-  setProperty("ENABLE_E4_BUTTON",value);
-<<<<<<< HEAD
-#endif
-
-#ifdef LOCALCW
-  sprintf(value,"%d",ENABLE_CW_BUTTONS);
-  setProperty("ENABLE_CW_BUTTONS",value);
-  sprintf(value,"%d",CWL_BUTTON);
-  setProperty("CWL_BUTTON",value);
-  sprintf(value,"%d",CWR_BUTTON);
-  setProperty("CWR_BUTTON",value);
-=======
->>>>>>> upstream/master
-#endif
-  saveProperties("gpio.props");
-}
-
-static void setup_pin(int pin, int up_down, void(*pAlert)(void)) {
-fprintf(stderr,"setup_pin: pin=%d mode=%d updown=%d\n",pin,INPUT,up_down);
-  pinMode(pin,INPUT);
-  pullUpDnControl(pin,up_down);
-<<<<<<< HEAD
-  usleep(10000);
-  wiringPiISR(pin,INT_EDGE_BOTH,pAlert);
-}
-
-
-static void setup_encoder_pin(int pin, int up_down, void(*pAlert)(void)) {
-fprintf(stderr,"setup_encoder_pin: pin=%d updown=%d\n",pin,up_down);
-    pinMode(pin,INPUT);
-    pullUpDnControl(pin,up_down);
-    usleep(10000);
-    wiringPiISR(pin,INT_EDGE_RISING,pAlert);
-}
-
-#ifdef LOCALCW
-#ifdef RADIOBERRY
-#define BUTTON_STEADY_TIME_US 5000
-static void setup_button(int button, gpioAlertFunc_t pAlert) {
-  gpioSetMode(button, PI_INPUT);
-  gpioSetPullUpDown(button,PI_PUD_UP);
-  // give time to settle to avoid false triggers
-=======
->>>>>>> upstream/master
-  usleep(10000);
-  wiringPiISR(pin,INT_EDGE_BOTH,pAlert);
-}
-
-<<<<<<< HEAD
-static void cwAlert(int gpio, int level, uint32_t tick) {
-       //fprintf(stderr,"cw key at pin %d \n", gpio);
-    if (cw_keyer_internal == 0 ){
-               //fprintf(stderr,"call keyer_event...\n");
-       keyer_event(gpio, cw_active_level == 0 ? level : (level==0));
-       }
-}
-
-/*
-static unsigned long cwl_debounce=0;
-static void cwlAlert() {
-    int t=millis();
-    if(t - cwl_debounce > settle_time) {
-      int level=digitalRead(CWL_BUTTON);
-      if (cw_keyer_internal == 0 ){
-               fprintf(stderr,"call keyer_event CWL Button \n");
-               keyer_event(CWL_BUTTON, cw_active_level == 0 ? level : (level==0));
-               }
-      cwl_debounce=t;
-    }
-}
-
-static unsigned long cwr_debounce=0;
-static void cwrAlert() {
-    int t=millis();
-    if(t - cwr_debounce > settle_time) {
-      int level=digitalRead(CWR_BUTTON);
-      if (cw_keyer_internal == 0 ){
-               fprintf(stderr,"call keyer_event CWR Button \n");
-               keyer_event(CWR_BUTTON, cw_active_level == 0 ? level : (level==0));
-               }
-      cwr_debounce=t;
-    }
-}
-*/
-#endif
-#endif
-=======
-
-static void setup_encoder_pin(int pin, int up_down, void(*pAlert)(void)) {
-fprintf(stderr,"setup_encoder_pin: pin=%d updown=%d\n",pin,up_down);
-    pinMode(pin,INPUT);
-    pullUpDnControl(pin,up_down);
-    usleep(10000);
-    wiringPiISR(pin,INT_EDGE_RISING,pAlert);
-}
->>>>>>> upstream/master
-
-int gpio_init() {
-  int i;
-
-  fprintf(stderr,"gpio_wiringpi: gpio_init\n");
-
-  gpio_restore_state();
-
-  wiringPiSetup(); // use WiringPi pin numbers
-<<<<<<< HEAD
-#ifdef RADIOBERRY 
-       if (gpioInitialise() < 0) {
-               fprintf(stderr,"radioberry_protocol: gpio could not be initialized. \n");
-               exit(-1);
-       }
-#endif
-=======
->>>>>>> upstream/master
-
-  if(ENABLE_VFO_ENCODER) {
-#ifdef CONTROLLER2
-#ifdef VFO_HAS_FUNCTION
-    setup_pin(VFO_FUNCTION, PUD_UP, &vfoFunctionAlert);
-    vfoFunction=0;
-#endif
-    vfo_A=1;
-    vfo_B=1;
-    setup_encoder_pin(VFO_ENCODER_A,ENABLE_VFO_PULLUP?PUD_UP:PUD_DOWN,&vfoEncoderA);
-    setup_encoder_pin(VFO_ENCODER_B,ENABLE_VFO_PULLUP?PUD_UP:PUD_DOWN,&vfoEncoderB);
-#else
-    vfo_A=1;
-    vfo_B=1;
-    setup_encoder_pin(VFO_ENCODER_A,ENABLE_VFO_PULLUP?PUD_UP:PUD_DOWN,&vfoEncoderA);
-    setup_encoder_pin(VFO_ENCODER_B,ENABLE_VFO_PULLUP?PUD_UP:PUD_DOWN,&vfoEncoderB);
-    //setup_pin(VFO_ENCODER_A,ENABLE_VFO_PULLUP?PUD_UP:PUD_OFF,&vfoEncoderA);
-    //setup_pin(VFO_ENCODER_B,ENABLE_VFO_PULLUP?PUD_UP:PUD_OFF,&vfoEncoderB);
-#endif
-    vfoEncoderPos=0;
-  }
-
-  setup_pin(E1_FUNCTION, PUD_UP, &e1FunctionAlert);
-  e1Function=0;
-
-  if(ENABLE_E1_ENCODER) {
-    setup_encoder_pin(E1_ENCODER_A,ENABLE_E1_PULLUP?PUD_UP:PUD_OFF,&e1EncoderA);
-    setup_encoder_pin(E1_ENCODER_B,ENABLE_E1_PULLUP?PUD_UP:PUD_OFF,&e1EncoderB);
-    e1EncoderPos=0;
-  }
-
-  setup_pin(E2_FUNCTION, PUD_UP, &e2FunctionAlert);
-  e2Function=0;
-
-  if(ENABLE_E2_ENCODER) {
-    setup_encoder_pin(E2_ENCODER_A,ENABLE_E2_PULLUP?PUD_UP:PUD_OFF,&e2EncoderA);
-    setup_encoder_pin(E2_ENCODER_B,ENABLE_E2_PULLUP?PUD_UP:PUD_OFF,&e2EncoderB);
-    e2EncoderPos=0;
-  }
-
-  setup_pin(E3_FUNCTION, PUD_UP, &e3FunctionAlert);
-  e3Function=0;
-
-  if(ENABLE_E3_ENCODER) {
-    setup_encoder_pin(E3_ENCODER_A,ENABLE_E3_PULLUP?PUD_UP:PUD_OFF,&e3EncoderA);
-    setup_encoder_pin(E3_ENCODER_B,ENABLE_E3_PULLUP?PUD_UP:PUD_OFF,&e3EncoderB);
-    e3EncoderPos=0;
-  }
-
-#ifdef CONTROLLER2
-  setup_pin(E4_FUNCTION, PUD_UP, &e4FunctionAlert);
-  e4Function=0;
-
-  if(ENABLE_E4_ENCODER) {
-    setup_encoder_pin(E4_ENCODER_A,ENABLE_E4_PULLUP?PUD_UP:PUD_OFF,&e4EncoderA);
-    setup_encoder_pin(E4_ENCODER_B,ENABLE_E4_PULLUP?PUD_UP:PUD_OFF,&e4EncoderB);
-    e4EncoderPos=0;
-  }
-#endif
-
-#ifndef CONTROLLER2
-  if(ENABLE_FUNCTION_BUTTON) {
-<<<<<<< HEAD
-    //setup_pin(FUNCTION_BUTTON, PUD_UP, &functionAlert);
-=======
-    setup_pin(FUNCTION_BUTTON, PUD_UP, &functionAlert);
->>>>>>> upstream/master
-  }
-
-  if(ENABLE_MOX_BUTTON) {
-    setup_pin(MOX_BUTTON, PUD_UP, &moxAlert);
-  }
-
-  if(ENABLE_S1_BUTTON) {
-    setup_pin(S1_BUTTON, PUD_UP, &s1Alert);
-  }
-
-  if(ENABLE_S2_BUTTON) {
-    setup_pin(S2_BUTTON, PUD_UP, &s2Alert);
-  }
-
-  if(ENABLE_S3_BUTTON) {
-    setup_pin(S3_BUTTON, PUD_UP, &s3Alert);
-  }
-
-  if(ENABLE_S4_BUTTON) {
-    setup_pin(S4_BUTTON, PUD_UP, &s4Alert);
-  }
-
-  if(ENABLE_S5_BUTTON) {
-    setup_pin(S5_BUTTON, PUD_UP, &s5Alert);
-  }
-
-  if(ENABLE_S6_BUTTON) {
-    setup_pin(S6_BUTTON, PUD_UP, &s6Alert);
-  }
-#endif
-
-  rotary_encoder_thread_id = g_thread_new( "rotary encoder", rotary_encoder_thread, NULL);
-  if( ! rotary_encoder_thread_id )
-  {
-    fprintf(stderr,"g_thread_new failed on rotary_encoder_thread\n");
-    exit( -1 );
-  }
-  fprintf(stderr, "rotary_encoder_thread: id=%p\n",rotary_encoder_thread_id);
-
-#ifdef CONTROLLER2
-  // setup i2c
-  i2c_init();
-
-  // setup interrupt pin
-  fprintf(stderr,"setup i2c interrupt: pin=%d\n",I2C_INTERRUPT);
-  //digitalWrite(I2C_INTERRUPT,0); // clear pin
-  pinMode(I2C_INTERRUPT,INPUT);
-  pullUpDnControl(I2C_INTERRUPT,PUD_UP);
-  usleep(10000);
-  //wiringPiISR(I2C_INTERRUPT,INT_EDGE_FALLING,pI2CInterrupt);
-  wiringPiISR(I2C_INTERRUPT,INT_EDGE_BOTH,pI2CInterrupt);
-#endif
-<<<<<<< HEAD
-
-#ifdef LOCALCW
-       fprintf(stderr,"GPIO: ENABLE_CW_BUTTONS=%d  CWL_BUTTON=%d CWR_BUTTON=%d\n",ENABLE_CW_BUTTONS, CWL_BUTTON, CWR_BUTTON);
-       if(ENABLE_CW_BUTTONS) {
-               /*
-               setup_pin(CWL_BUTTON, PUD_UP, &cwlAlert);
-               setup_pin(CWR_BUTTON, PUD_UP, &cwrAlert);
-               */
-               
-               #ifdef RADIOBERRY
-                       setup_button(CWL_BUTTON, cwAlert);
-                       setup_button(CWR_BUTTON, cwAlert);
-               #endif
-               
-               
-       }
-#endif
-=======
->>>>>>> upstream/master
-
-  return 0;
-}
-
-void gpio_close() {
-    running=0;
-}
-
-int vfo_encoder_get_pos() {
-  int pos=vfoEncoderPos;
-
-  if(vfo_encoder_divisor>1) {
-    if(pos<0 && pos>-vfo_encoder_divisor) {
-        pos=0;
-    } else if(pos>0 && pos<vfo_encoder_divisor) {
-        pos=0;
-    }
-    pos=pos/vfo_encoder_divisor;
-    vfoEncoderPos=vfoEncoderPos-(pos*vfo_encoder_divisor);
-  } else {
-    vfoEncoderPos=0;
-  }
-  return pos;
-}
-
-int e1_encoder_get_pos() {
-    int pos=e1EncoderPos;
-    e1EncoderPos=0;
-    return pos;
-}
-
-int e2_encoder_get_pos() {
-    int pos=e2EncoderPos;
-    e2EncoderPos=0;
-    return pos;
-}
-
-int e3_encoder_get_pos() {
-    int pos=e3EncoderPos;
-    e3EncoderPos=0;
-    return pos;
-}
-
-int e3_function_get_state() {
-    return e3Function;
-}
-
-#ifdef CONTROLLER2
-int e4_encoder_get_pos() {
-    int pos=e4EncoderPos;
-    e4EncoderPos=0;
-    return pos;
-}
-#endif
-
-int function_get_state() {
-    return function_state;
-}
-
-int band_get_state() {
-    return band_state;
-}
-
-int bandstack_get_state() {
-    return bandstack_state;
-}
-
-int mode_get_state() {
-    return mode_state;
-}
-
-int filter_get_state() {
-    return filter_state;
-}
-
-int noise_get_state() {
-    return noise_state;
-}
-
-int agc_get_state() {
-    return agc_state;
-}
-
-int mox_get_state() {
-    return mox_state;
-}
-
-int lock_get_state() {
-    return lock_state;
-}
-
-
-static int vfo_encoder_changed(void *data) {
-  if(!locked) {
-    int pos=(int)data;
-    vfo_step(pos);
-  }
-  //free(data);
-  return 0;
-}
-
-static encoder_changed(int action,int pos) {
-  double value;
-  int mode;
-  int id;
-  FILTER * band_filters=filters[vfo[active_receiver->id].mode];
-  FILTER *band_filter;
-  FILTER *filter;
-  int new_val;
-
-  switch(action) {
-    case ENCODER_AF_GAIN:
-      value=active_receiver->volume;
-      value+=(double)pos/100.0;
-      if(value<0.0) {
-        value=0.0;
-      } else if(value>1.0) {
-        value=1.0;
-      }
-      set_af_gain(value);
-      break;
-    case ENCODER_AGC_GAIN:
-      value=active_receiver->agc_gain;
-      value+=(double)pos;
-      if(value<-20.0) {
-        value=-20.0;
-      } else if(value>120.0) {
-        value=120.0;
-      }
-      set_agc_gain(value);
-      break;
-    case ENCODER_ATTENUATION:
-      value=(double)adc_attenuation[active_receiver->adc];
-      value+=(double)pos;
-      if(value<0.0) {
-        value=0.0;
-      } else if (value>31.0) {
-        value=31.0;
-      }
-      set_attenuation_value(value);
-      break;
-    case ENCODER_MIC_GAIN:
-      value=mic_gain;
-      //gain+=(double)pos/100.0;
-      value+=(double)pos;
-      if(value<-10.0) {
-        value=-10.0;
-      } else if(value>50.0) {
-        value=50.0;
-      }
-      set_mic_gain(value);
-      break;
-    case ENCODER_DRIVE:
-      value=getDrive();
-      value+=(double)pos;
-      if(value<0.0) {
-        value=0.0;
-      } else if(value>100.0) {
-        value=100.0;
-      }
-      set_drive(value);
-      break;
-    case ENCODER_RIT:
-      value=(double)vfo[active_receiver->id].rit;
-      value+=(double)(pos*rit_increment);
-      if(value<-1000.0) {
-        value=-1000.0;
-      } else if(value>1000.0) {
-        value=1000.0;
-      }
-      vfo[active_receiver->id].rit=(int)value;
-      if(protocol==NEW_PROTOCOL) {
-        schedule_high_priority();
-      }
-      vfo_update();
-      break;
-    case ENCODER_CW_SPEED:
-      value=(double)cw_keyer_speed;
-      value+=(double)pos;
-      if(value<1.0) {
-        value=1.0;
-      } else if(value>60.0) {
-        value=60.0;
-      }
-      cw_keyer_speed=(int)value;
-      vfo_update();
-      break;
-    case ENCODER_CW_FREQUENCY:
-      value=(double)cw_keyer_sidetone_frequency;
-      value+=(double)pos;
-      if(value<0.0) {
-        value=0.0;
-      } else if(value>1000.0) {
-        value=1000.0;
-      }
-      cw_keyer_sidetone_frequency=(int)value;
-      vfo_update();
-      break;
-    case ENCODER_PANADAPTER_HIGH:
-      value=(double)active_receiver->panadapter_high;
-      value+=(double)pos;
-      active_receiver->panadapter_high=(int)value;
-      break;
-    case ENCODER_PANADAPTER_LOW:
-      value=(double)active_receiver->panadapter_low;
-      value+=(double)pos;
-      active_receiver->panadapter_low=(int)value;
-      break;
-    case ENCODER_SQUELCH:
-      value=active_receiver->squelch;
-      value+=(double)pos;
-      if(value<0.0) {
-        value=0.0;
-      } else if(value>100.0) {
-        value=100.0;
-      }
-      active_receiver->squelch=value;
-      set_squelch(active_receiver);
-      break;
-    case ENCODER_COMP:
-      value=(double)transmitter->compressor_level;
-      value+=(double)pos;
-      if(value<0.0) {
-        value=0.0;
-      } else if(value>20.0) {
-        value=20.0;
-      }
-      transmitter->compressor_level=(int)value;
-      set_compression(transmitter);
-      break;
-  }
-}
-
-static int e1_encoder_changed(void *data) {
-  int pos=(int)data;
-  if(active_menu==E1_MENU) {
-    encoder_select(pos);
-  } else {
-    encoder_changed(e1_encoder_action,pos);
-  }
-  //free(data);
-  return 0;
-}
-
-static int e2_encoder_changed(void *data) {
-  int pos=(int)data;
-  if(active_menu==E2_MENU) {
-    encoder_select(pos);
-  } else {
-    encoder_changed(e2_encoder_action,pos);
-  }
-  //free(data);
-  return 0;
-}
-
-static int e3_encoder_changed(void *data) {
-  int pos=(int)data;
-  if(active_menu==E3_MENU) {
-    encoder_select(pos);
-  } else {
-    encoder_changed(e3_encoder_action,pos);
-  }
-  //free(data);
-  return 0;
-}
-
-#ifdef CONTROLLER2
-static int e4_encoder_changed(void *data) {
-  int pos=(int)data;
-  if(active_menu==E4_MENU) {
-    encoder_select(pos);
-  } else {
-    encoder_changed(e4_encoder_action,pos);
-  }
-  //free(data);
-  return 0;
-}
-#endif
-
-static gpointer rotary_encoder_thread(gpointer data) {
-    int pos;
-
-    // ignore startup glitches
-    sleep(2);
-
-    //g_mutex_lock(&m_running);
-    running=1;
-    //g_mutex_unlock(&m_running);
-    while(1) {
-
-        pos=vfo_encoder_get_pos();
-        if(pos!=0) {
-            g_idle_add(vfo_encoder_changed,(gpointer)pos);
-        }
-
-        pos=e1_encoder_get_pos();
-        if(pos!=0) {
-            g_idle_add(e1_encoder_changed,(gpointer)pos);
-        }
-
-        pos=e2_encoder_get_pos();
-        if(pos!=0) {
-            g_idle_add(e2_encoder_changed,(gpointer)pos);
-        }
-
-        pos=e3_encoder_get_pos();
-        if(pos!=0) {
-            g_idle_add(e3_encoder_changed,(gpointer)pos);
-        }
-
-#ifdef CONTROLLER2
-        pos=e4_encoder_get_pos();
-        if(pos!=0) {
-            g_idle_add(e4_encoder_changed,(gpointer)pos);
-        }
-#endif
-
-#ifdef sx1509
-        // buttons only generate interrupt when
-        // pushed onODER_AF_GAIN = 0,
-        function_state = 0;
-        band_state = 0;
-        bandstack_state = 0;
-        mode_state = 0;
-        filter_state = 0;
-        noise_state = 0;
-        agc_state = 0;
-        mox_state = 0;
-        lock_state = 0;
-#endif
-//fprintf(stderr,"gpio_thread: lock\n");
-        //g_mutex_lock(&m_running);
-        if(running==0) {
-fprintf(stderr,"gpio_thread: unlock (running==0)\n");
-          //g_mutex_unlock(&m_running);
-          g_thread_exit(NULL);
-        }
-        usleep(100000);
-
-//fprintf(stderr,"gpio_thread: unlock (running==1)\n");
-        //g_mutex_unlock(&m_running);
-    }
-    return NULL;
-}
diff --git a/main.c.orig b/main.c.orig
deleted file mode 100644 (file)
index 9d6c988..0000000
+++ /dev/null
@@ -1,885 +0,0 @@
-/* Copyright (C)
-* 2015 - John Melton, G0ORX/N6LYT
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*
-*/
-
-#include <gtk/gtk.h>
-#include <gdk/gdk.h>
-#include <math.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <semaphore.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include "audio.h"
-#include "band.h"
-#include "bandstack.h"
-#include "main.h"
-#include "channel.h"
-#include "discovered.h"
-#include "configure.h"
-#include "gpio.h"
-<<<<<<< HEAD
-#include "old_discovery.h"
-#include "new_discovery.h"
-#ifdef LIMESDR
-#include "lime_discovery.h"
-#endif
-#ifdef RADIOBERRY
-#include "radioberry_discovery.h"
-#endif
-#include "old_protocol.h"
-#include "new_protocol.h"
-#ifdef LIMESDR
-#include "lime_protocol.h"
-#endif
-#ifdef RADIOBERRY
-#include "radioberry.h"
-#endif
-=======
->>>>>>> upstream/master
-#include "wdsp.h"
-#include "new_menu.h"
-#include "radio.h"
-#include "version.h"
-#include "button_text.h"
-#ifdef I2C
-#include "i2c.h"
-#endif
-#include "discovery.h"
-
-struct utsname unameData;
-
-gint display_width;
-gint display_height;
-gint full_screen=1;
-
-static GtkWidget *discovery_dialog;
-
-static sem_t wisdom_sem;
-
-static GdkCursor *cursor_arrow;
-static GdkCursor *cursor_watch;
-
-static GtkWidget *splash;
-
-GtkWidget *top_window;
-GtkWidget *grid;
-
-static DISCOVERED* d;
-
-static GtkWidget *status;
-
-void status_text(char *text) {
-  //fprintf(stderr,"splash_status: %s\n",text);
-  gtk_label_set_text(GTK_LABEL(status),text);
-  usleep(10000);
-  while (gtk_events_pending ())
-    gtk_main_iteration ();
-}
-
-static gint save_cb(gpointer data) {
-    radioSaveState();
-    return TRUE;
-}
-
-static pthread_t wisdom_thread_id;
-
-static void* wisdom_thread(void *arg) {
-  status_text("Creating FFTW Wisdom file ...");
-  WDSPwisdom ((char *)arg);
-  sem_post(&wisdom_sem);
-}
-
-gboolean main_delete (GtkWidget *widget) {
-#ifdef GPIO
-  gpio_close();
-#endif
-  switch(protocol) {
-    case ORIGINAL_PROTOCOL:
-      old_protocol_stop();
-      break;
-    case NEW_PROTOCOL:
-      new_protocol_stop();
-      break;
-#ifdef LIMESDR
-    case LIMESDR_PROTOCOL:
-      lime_protocol_stop();
-      break;
-#endif
-#ifdef RADIOBERRY
-       case RADIOBERRY_PROTOCOL:
-               radioberry_protocol_stop();
-               break;
-#endif
-  }
-  radioSaveState();
-  _exit(0);
-}
-
-<<<<<<< HEAD
-static gboolean start_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-fprintf(stderr,"start_cb: %p\n",data);
-  radio=(DISCOVERED *)data;
-  gtk_widget_destroy(discovery_dialog);
-  start_radio();
-  return TRUE;
-}
-
-#ifdef GPIO
-static gboolean gpio_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-  configure_gpio(discovery_dialog);
-  return TRUE;
-}
-#endif
-
-static gboolean discover_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-  gtk_widget_destroy(discovery_dialog);
-  discover_devices();
-  return TRUE;
-}
-
-static gboolean exit_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-  gtk_widget_destroy(discovery_dialog);
-  _exit(0);
-  return TRUE;
-}
-
-static void discover_devices() {
-
-      gdk_window_set_cursor(splash_window,cursor_watch);
-      selected_device=0;
-      devices=0;
-      splash_status("Old Protocol ... Discovering Devices");
-      old_discovery();
-      splash_status("New Protocol ... Discovering Devices");
-      new_discovery();
-#ifdef LIMESDR
-      splash_status("LimeSDR ... Discovering Devices");
-      lime_discovery();
-#endif
-#ifdef RADIOBERRY
-      splash_status("Radioberry SDR ... Discovering Device");
-      radioberry_discovery();
-#endif
-      splash_status("Discovery");
-      if(devices==0) {
-          gdk_window_set_cursor(splash_window,cursor_arrow);
-          fprintf(stderr,"No devices found!\n");
-          GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT;
-/*
-          discovery_dialog = gtk_message_dialog_new (GTK_WINDOW(splash_screen),
-                                 flags,
-                                 GTK_MESSAGE_ERROR,
-                                 GTK_BUTTONS_OK_CANCEL,
-                                 "No devices found! Retry Discovery?");
-*/
-          discovery_dialog = gtk_dialog_new();
-          gtk_window_set_transient_for(GTK_WINDOW(discovery_dialog),GTK_WINDOW(splash_screen));
-          gtk_window_set_decorated(GTK_WINDOW(discovery_dialog),FALSE);
-
-          gtk_widget_override_font(discovery_dialog, pango_font_description_from_string("FreeMono 16"));
-
-          GdkRGBA color;
-          color.red = 1.0;
-          color.green = 1.0;
-          color.blue = 1.0;
-          color.alpha = 1.0;
-          gtk_widget_override_background_color(discovery_dialog,GTK_STATE_FLAG_NORMAL,&color);
-
-          GtkWidget *content;
-
-          content=gtk_dialog_get_content_area(GTK_DIALOG(discovery_dialog));
-
-          GtkWidget *grid=gtk_grid_new();
-          gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
-          gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
-          gtk_grid_set_row_spacing (GTK_GRID(grid),10);
-
-          GtkWidget *label=gtk_label_new("No devices found!");
-          gtk_grid_attach(GTK_GRID(grid),label,0,0,2,1);
-
-          GtkWidget *exit_b=gtk_button_new_with_label("Exit");
-          g_signal_connect (exit_b, "button-press-event", G_CALLBACK(exit_cb), NULL);
-          gtk_grid_attach(GTK_GRID(grid),exit_b,0,1,1,1);
-
-          GtkWidget *discover_b=gtk_button_new_with_label("Retry Discovery");
-          g_signal_connect (discover_b, "button-press-event", G_CALLBACK(discover_cb), NULL);
-          gtk_grid_attach(GTK_GRID(grid),discover_b,1,1,1,1);
-
-          gtk_container_add (GTK_CONTAINER (content), grid);
-          gtk_widget_show_all(discovery_dialog);
-      } else {
-          //fprintf(stderr,"%s: found %d devices.\n", (char *)arg, devices);
-          gdk_window_set_cursor(splash_window,cursor_arrow);
-/*
-          GtkDialogFlags flags=GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT;
-          discovery_dialog = gtk_dialog_new_with_buttons ("Discovered",
-                                      GTK_WINDOW(splash_window),
-                                      flags,
-#ifdef GPIO
-                                      "Configure GPIO",
-                                      GTK_RESPONSE_YES,
-#endif
-                                      "Discover",
-                                      GTK_RESPONSE_REJECT,
-                                      "Exit",
-                                      GTK_RESPONSE_CLOSE,
-                                      NULL);
-*/
-
-          discovery_dialog = gtk_dialog_new();
-          gtk_window_set_transient_for(GTK_WINDOW(discovery_dialog),GTK_WINDOW(splash_screen));
-          gtk_window_set_decorated(GTK_WINDOW(discovery_dialog),FALSE);
-
-          gtk_widget_override_font(discovery_dialog, pango_font_description_from_string("FreeMono 16"));
-
-          GdkRGBA color;
-          color.red = 1.0;
-          color.green = 1.0;
-          color.blue = 1.0;
-          color.alpha = 1.0;
-          gtk_widget_override_background_color(discovery_dialog,GTK_STATE_FLAG_NORMAL,&color);
-
-          GtkWidget *content;
-
-          content=gtk_dialog_get_content_area(GTK_DIALOG(discovery_dialog));
-
-          GtkWidget *grid=gtk_grid_new();
-          gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
-          gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
-          gtk_grid_set_row_spacing (GTK_GRID(grid),10);
-
-          int i;
-          char version[16];
-          char text[128];
-          for(i=0;i<devices;i++) {
-              d=&discovered[i];
-fprintf(stderr,"%p protocol=%d name=%s\n",d,d->protocol,d->name);
-              if(d->protocol==ORIGINAL_PROTOCOL) {
-                  sprintf(version,"%d.%d",
-                        d->software_version/10,
-                        d->software_version%10);
-              } else {
-                  sprintf(version,"%d.%d.%d",
-                        d->software_version/100,
-                        (d->software_version%100)/10,
-                        d->software_version%10);
-              }
-              switch(d->protocol) {
-                case ORIGINAL_PROTOCOL:
-                case NEW_PROTOCOL:
-                  sprintf(text,"%s (%s %s) %s (%02X:%02X:%02X:%02X:%02X:%02X) on %s\n",
-                        d->name,
-                        d->protocol==ORIGINAL_PROTOCOL?"old":"new",
-                        version,
-                        inet_ntoa(d->info.network.address.sin_addr),
-                        d->info.network.mac_address[0],
-                        d->info.network.mac_address[1],
-                        d->info.network.mac_address[2],
-                        d->info.network.mac_address[3],
-                        d->info.network.mac_address[4],
-                        d->info.network.mac_address[5],
-                        d->info.network.interface_name);
-                  break;
-#ifdef LIMESDR
-                case LIMESDR_PROTOCOL:
-/*
-                  sprintf(text,"%s (%s %s)\n",
-                        d->name,
-                        "lime",
-                        version);
-*/
-                  sprintf(text,"%s\n",
-                        d->name);
-                  break;
-#endif
-#ifdef RADIOBERRY
-                               case RADIOBERRY_PROTOCOL:
-                                       sprintf(text,"%s\n",d->name);
-                               break;
-#endif
-              }
-
-              GtkWidget *label=gtk_label_new(text);
-              gtk_widget_override_font(label, pango_font_description_from_string("FreeMono 12"));
-              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_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);
-
-              // if not available then cannot start it
-              if(d->status!=STATE_AVAILABLE) {
-                gtk_button_set_label(GTK_BUTTON(start_button),"In Use");
-                gtk_widget_set_sensitive(start_button, FALSE);
-              }
-
-              // if not on the same subnet then cannot start it
-              if((d->info.network.interface_address.sin_addr.s_addr&d->info.network.interface_netmask.sin_addr.s_addr) != (d->info.network.address.sin_addr.s_addr&d->info.network.interface_netmask.sin_addr.s_addr)) {
-                gtk_button_set_label(GTK_BUTTON(start_button),"Subnet!");
-                gtk_widget_set_sensitive(start_button, FALSE);
-              }
-
-          }
-
-#ifdef GPIO
-          GtkWidget *gpio_b=gtk_button_new_with_label("Config GPIO");
-          g_signal_connect (gpio_b, "button-press-event", G_CALLBACK(gpio_cb), NULL);
-          gtk_grid_attach(GTK_GRID(grid),gpio_b,0,i,1,1);
-#endif
-          GtkWidget *discover_b=gtk_button_new_with_label("Discover");
-          g_signal_connect (discover_b, "button-press-event", G_CALLBACK(discover_cb), NULL);
-          gtk_grid_attach(GTK_GRID(grid),discover_b,1,i,1,1);
-
-          GtkWidget *exit_b=gtk_button_new_with_label("Exit");
-          g_signal_connect (exit_b, "button-press-event", G_CALLBACK(exit_cb), NULL);
-          gtk_grid_attach(GTK_GRID(grid),exit_b,2,i,1,1);
-
-
-          gtk_container_add (GTK_CONTAINER (content), grid);
-          gtk_widget_show_all(discovery_dialog);
-      }
-}
-
-static gboolean minimize_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-  gtk_window_iconify(GTK_WINDOW(window));
-  return TRUE;
-}
-
-static void start_radio() {
-  int y;
-fprintf(stderr,"start: selected radio=%p device=%d\n",radio,radio->device);
-  gdk_window_set_cursor(splash_window,cursor_watch);
-
-  splash_status("Initializing wdsp ...");
-  protocol=radio->protocol;
-  device=radio->device;
-
-  switch(radio->protocol) {
-    case ORIGINAL_PROTOCOL:
-    case NEW_PROTOCOL:
-      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;
-#ifdef LIMESDR
-    case LIMESDR_PROTOCOL:
-      sprintf(property_path,"limesdr.props");
-      break;
-#endif
-#ifdef RADIOBERRY
-       case RADIOBERRY_PROTOCOL:
-               sprintf(property_path,"radioberry.props");
-               break;
-#endif
- }
-
-#ifdef GPIO
-  fprintf(stderr,"gpio_init\n");
-  splash_status("Initializing GPIO ...");
-  if(gpio_init()<0) {
-  }
-#ifdef LOCALCW
-  // init local keyer if enabled
-  else if (cw_keyer_internal == 0)
-    keyer_update();
-#endif
-#endif
-  radioRestoreState();
-
-  fprintf(stderr,"malloc samples\n");
-  if(radio->protocol==NEW_PROTOCOL) {
-    samples=malloc(display_width*sizeof(float)*2*4); // 192 -> 48
-  } else {
-    samples=malloc(display_width*sizeof(float)*2);
-  }
-
-  //splash_status("Initializing wdsp ...");
-  fprintf(stderr,"wdsp_init\n");
-  wdsp_init(0,display_width,radio->protocol);
-
-  switch(radio->protocol) {
-    case ORIGINAL_PROTOCOL:
-      splash_status("Initializing old protocol ...");
-  fprintf(stderr,"old_protocol_init\n");
-      old_protocol_init(0,display_width);
-      break;
-    case NEW_PROTOCOL:
-      splash_status("Initializing new protocol ...");
-  fprintf(stderr,"new_protocol_init\n");
-      new_protocol_init(display_width);
-      break;
-#ifdef LIMESDR
-    case LIMESDR_PROTOCOL:
-      splash_status("Initializing lime protocol ...");
-      lime_protocol_init(0,display_width);
-      break;
-#endif
-#ifdef RADIOBERRY
-       case RADIOBERRY_PROTOCOL:
-               splash_status("Initializing radioberry protocol ...");
-               radioberry_protocol_init(0,display_width);
-               break;
-#endif
-  }
-
-
-
-  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  gtk_window_set_title (GTK_WINDOW (window), "pihpsdr");
-  gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER_ALWAYS);
-  gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
-  g_signal_connect (window, "delete-event", G_CALLBACK (main_delete), NULL);
-
-  fixed=gtk_fixed_new();
-  gtk_container_add(GTK_CONTAINER(window), fixed);
-  y=0;
-
-  vfo = vfo_init(VFO_WIDTH,VFO_HEIGHT,window);
-  gtk_fixed_put(GTK_FIXED(fixed),vfo,0,0);
-
-
-
-  //rit_control = rit_init(RIT_WIDTH,MENU_HEIGHT,window);
-  //gtk_fixed_put(GTK_FIXED(fixed),rit_control,VFO_WIDTH,y);
-
-  GtkWidget *minimize_b=gtk_button_new_with_label("Hide");
-  gtk_widget_override_font(minimize_b, pango_font_description_from_string("FreeMono Bold 10"));
-  gtk_widget_set_size_request (minimize_b, MENU_WIDTH, MENU_HEIGHT/2);
-  g_signal_connect (minimize_b, "button-press-event", G_CALLBACK(minimize_cb), NULL);
-  gtk_widget_show(minimize_b);
-  gtk_fixed_put(GTK_FIXED(fixed),minimize_b,VFO_WIDTH,y);
-
-  //menu = menu_init(MENU_WIDTH,MENU_HEIGHT,window);
-  menu = new_menu_init(MENU_WIDTH,MENU_HEIGHT/2,window);
-  gtk_fixed_put(GTK_FIXED(fixed),menu,VFO_WIDTH,y+(MENU_HEIGHT/2));
-
-  meter = meter_init(METER_WIDTH,METER_HEIGHT,window);
-  gtk_fixed_put(GTK_FIXED(fixed),meter,VFO_WIDTH+MENU_WIDTH,y);
-  y+=VFO_HEIGHT;
-
-  if(display_panadapter) {
-    int height=PANADAPTER_HEIGHT;
-    if(!display_waterfall) {
-      height+=WATERFALL_HEIGHT;
-      if(!display_sliders) {
-        height+=SLIDERS_HEIGHT;
-      }
-      if(!display_toolbar) {
-        height+=TOOLBAR_HEIGHT;
-      }
-    } else {
-      if(!display_sliders) {
-        height+=SLIDERS_HEIGHT/2;
-      }
-    }
-    panadapter = panadapter_init(display_width,height);
-    gtk_fixed_put(GTK_FIXED(fixed),panadapter,0,VFO_HEIGHT);
-    y+=height;
-  }
-
-  if(display_waterfall) {
-    int height=WATERFALL_HEIGHT;
-    if(!display_panadapter) {
-      height+=PANADAPTER_HEIGHT;
-    }
-    if(!display_sliders) {
-      if(display_panadapter) {
-        height+=SLIDERS_HEIGHT/2;
-      } else {
-        height+=SLIDERS_HEIGHT;
-      }
-    }
-    if(!display_toolbar) {
-      height+=TOOLBAR_HEIGHT;
-    }
-    waterfall = waterfall_init(display_width,height);
-    gtk_fixed_put(GTK_FIXED(fixed),waterfall,0,y);
-    y+=height;
-
-  }
-
-#ifdef PSK
-    int psk_height=PSK_WATERFALL_HEIGHT;
-    if(!display_sliders) {
-      psk_height+=SLIDERS_HEIGHT/2;
-    }
-    if(!display_toolbar) {
-      psk_height+=TOOLBAR_HEIGHT/2;
-    }
-    psk_waterfall = psk_waterfall_init(display_width,psk_height);
-    gtk_fixed_put(GTK_FIXED(fixed),psk_waterfall,0,VFO_HEIGHT);
-    psk = init_psk();
-    gtk_fixed_put(GTK_FIXED(fixed),psk,0,VFO_HEIGHT+psk_height);
-#endif
-
-  if(display_sliders) {
-    sliders = sliders_init(display_width,SLIDERS_HEIGHT,window);
-    gtk_fixed_put(GTK_FIXED(fixed),sliders,0,y);
-    y+=SLIDERS_HEIGHT;
-  }
-
-  if(display_toolbar) {
-    toolbar = toolbar_init(display_width,TOOLBAR_HEIGHT,window);
-    gtk_fixed_put(GTK_FIXED(fixed),toolbar,0,y);
-    y+=TOOLBAR_HEIGHT;
-  }
-
-  splash_close();
-
-  gtk_widget_show_all (window);
-
-  linein_changed();
-
-  if(full_screen) {
-    gtk_window_fullscreen(GTK_WINDOW(window));
-  }
-
-  GdkWindow *gdk_window = gtk_widget_get_window(window);
-  gdk_window_set_cursor(gdk_window,cursor_arrow);
-
-  // start the receiver
-  SetChannelState(CHANNEL_RX0,1,1);
-
-  //update_timer_id=gdk_threads_add_timeout(1000/updates_per_second, update, NULL);
-  update_timer_id=gdk_threads_add_timeout_full(G_PRIORITY_HIGH_IDLE,1000/updates_per_second, update, NULL, NULL);
-
-  // save every 30 seconds
-  save_timer_id=gdk_threads_add_timeout(30000, save_cb, NULL);
-
-
-  if(protocol!=NEW_PROTOCOL) {
-    setFrequency(getFrequency());
-  }
-
-#ifdef PSK
-  if(mode==modePSK) {
-    show_psk();
-  } else {
-    show_waterfall();
-  }
-#endif
-
-  launch_rigctl();
-
-  g_idle_add(vfo_update,(gpointer)NULL);
-
-}
-
-#ifdef PSK
-void show_psk() {
-  if(display_waterfall) {
-    gtk_widget_hide(waterfall);
-  }
-  if(display_panadapter) {
-    gtk_widget_hide(panadapter);
-  }
-  gtk_widget_show(psk);
-  gtk_widget_show(psk_waterfall);
-}
-
-void show_waterfall() {
-  gtk_widget_hide(psk_waterfall);
-  gtk_widget_hide(psk);
-  if(display_panadapter) {
-    gtk_widget_show(panadapter);
-  }
-  if(display_waterfall) {
-    gtk_widget_show(waterfall);
-  }
-}
-#endif
-
-void reconfigure_display() {
-  int y=VFO_HEIGHT;
-
-  // configure panadapter
-  if(display_panadapter) {
-    int height=PANADAPTER_HEIGHT;
-    if(!display_waterfall) {
-      height+=WATERFALL_HEIGHT;
-      if(!display_sliders) {
-        height+=SLIDERS_HEIGHT;
-      }
-      if(!display_toolbar) {
-        height+=TOOLBAR_HEIGHT;
-      }
-    } else {
-      if(!display_sliders) {
-        height+=SLIDERS_HEIGHT/2;
-      }
-      if(!display_toolbar) {
-        height+=TOOLBAR_HEIGHT/2;
-      }
-    }
-fprintf(stderr,"panadapter_height=%d\n",height);
-    if(panadapter==NULL) {
-fprintf(stderr,"reconfigure_display: panadapter_init: width:%d height:%d\n",display_width,height);
-      panadapter = panadapter_init(display_width,height);
-      gtk_fixed_put(GTK_FIXED(fixed),panadapter,0,y);
-    } else {
-      // set the size
-fprintf(stderr,"reconfigure_display: panadapter set_size_request: width:%d height:%d\n",display_width,height);
-      gtk_widget_set_size_request(panadapter, display_width, height);
-      // move the current one
-      gtk_fixed_move(GTK_FIXED(fixed),panadapter,0,y);
-    }
-    gtk_widget_show_all(panadapter);
-    y+=height;
-  } else {
-    gtk_widget_hide(panadapter);
-  }
-
-  // configure waterfall
-  if(display_waterfall) {
-    int height=WATERFALL_HEIGHT;
-
-    if(!display_panadapter) {
-      height+=PANADAPTER_HEIGHT;
-      if(!display_sliders) {
-        height+=SLIDERS_HEIGHT;
-      }
-      if(!display_toolbar) {
-        height+=TOOLBAR_HEIGHT;
-      }
-    } else {
-      if(!display_sliders) {
-        height+=SLIDERS_HEIGHT/2;
-      }
-      if(!display_toolbar) {
-        height+=TOOLBAR_HEIGHT/2;
-      }
-    }
-fprintf(stderr,"waterfall_height=%d\n",height);
-    if(waterfall==NULL) {
-fprintf(stderr,"reconfigure_display: waterfall_init: width:%d height:%d\n",display_width,height);
-      waterfall = waterfall_init(display_width,height);
-      gtk_fixed_put(GTK_FIXED(fixed),waterfall,0,y);
-    } else {
-      // set the size
-fprintf(stderr,"reconfigure_display: waterfall set_size_request: width:%d height:%d\n",display_width,height);
-      gtk_widget_set_size_request (waterfall, display_width, height);
-      // move the current one
-      gtk_fixed_move(GTK_FIXED(fixed),waterfall,0,y);
-    }
-    gtk_widget_show_all(waterfall);
-    y+=height;
-  } else {
-    gtk_widget_hide(waterfall);
-  }
-
-  if(display_sliders) {
-fprintf(stderr,"sliders_height=%d\n",SLIDERS_HEIGHT);
-    if(sliders==NULL) {
-fprintf(stderr,"reconfigure_display: sliders_init: width:%d height:%d\n",display_width,SLIDERS_HEIGHT);
-      sliders = sliders_init(display_width,SLIDERS_HEIGHT,window);
-      gtk_fixed_put(GTK_FIXED(fixed),sliders,0,y);
-    } else {
-      gtk_fixed_move(GTK_FIXED(fixed),sliders,0,y);
-      gtk_widget_show(sliders);
-    }
-    gtk_widget_show_all(sliders);
-    linein_changed();
-    y+=SLIDERS_HEIGHT;
-  } else {
-    gtk_widget_hide(sliders);
-  }
-
-  if(display_toolbar) {
-fprintf(stderr,"toolbar_height=%d\n",TOOLBAR_HEIGHT);
-    if(toolbar==NULL) {
-fprintf(stderr,"reconfigure_display: toolbar_init: width:%d height:%d\n",display_width,TOOLBAR_HEIGHT);
-      toolbar = toolbar_init(display_width,TOOLBAR_HEIGHT,window);
-      gtk_fixed_put(GTK_FIXED(fixed),toolbar,0,y);
-    } else {
-      gtk_fixed_move(GTK_FIXED(fixed),toolbar,0,y);
-      gtk_widget_show(toolbar);
-    }
-    gtk_widget_show_all(toolbar);
-    y+=TOOLBAR_HEIGHT;
-  } else {
-    gtk_widget_hide(toolbar);
-  }
-
-}
-
-gint init(void* arg) {
-=======
-static int init(void *data) {
->>>>>>> upstream/master
-  char *res;
-  char wisdom_directory[1024];
-  char wisdom_file[1024];
-
-  fprintf(stderr,"init\n");
-
-  audio_get_cards();
-
-  cursor_arrow=gdk_cursor_new(GDK_ARROW);
-  cursor_watch=gdk_cursor_new(GDK_WATCH);
-
-  gdk_window_set_cursor(gtk_widget_get_window(top_window),cursor_watch);
-
-  // check if wisdom file exists
-  res=getcwd(wisdom_directory, sizeof(wisdom_directory));
-  strcpy(&wisdom_directory[strlen(wisdom_directory)],"/");
-  strcpy(wisdom_file,wisdom_directory);
-  strcpy(&wisdom_file[strlen(wisdom_file)],"wdspWisdom");
-  status_text("Checking FFTW Wisdom file ...");
-  if(access(wisdom_file,F_OK)<0) {
-      int rc=sem_init(&wisdom_sem, 0, 0);
-      rc=pthread_create(&wisdom_thread_id, NULL, wisdom_thread, (void *)wisdom_directory);
-      while(sem_trywait(&wisdom_sem)<0) {
-        status_text(wisdom_get_status());
-        while (gtk_events_pending ())
-          gtk_main_iteration ();
-        usleep(100000); // 100ms
-      }
-  }
-
-  g_idle_add(discovery,NULL);
-  return 0;
-}
-
-static void activate_pihpsdr(GtkApplication *app, gpointer data) {
-
-
-  //gtk_init (&argc, &argv);
-
-  fprintf(stderr,"Build: %s %s\n",build_date,version);
-
-  uname(&unameData);
-  fprintf(stderr,"sysname: %s\n",unameData.sysname);
-  fprintf(stderr,"nodename: %s\n",unameData.nodename);
-  fprintf(stderr,"release: %s\n",unameData.release);
-  fprintf(stderr,"version: %s\n",unameData.version);
-  fprintf(stderr,"machine: %s\n",unameData.machine);
-
-  GdkScreen *screen=gdk_screen_get_default();
-  if(screen==NULL) {
-    fprintf(stderr,"no default screen!\n");
-    _exit(0);
-  }
-
-
-  display_width=gdk_screen_get_width(screen);
-  display_height=gdk_screen_get_height(screen);
-
-fprintf(stderr,"width=%d height=%d\n", display_width, display_height);
-  if(display_width>800 || display_height>480) {
-    display_width=800;
-    display_height=480;
-    full_screen=0;
-  }
-
-fprintf(stderr,"display_width=%d display_height=%d\n", display_width, display_height);
-
-  fprintf(stderr,"create top level window\n");
-  top_window = gtk_application_window_new (app);
-  if(full_screen) {
-fprintf(stderr,"full screen\n");
-    gtk_window_fullscreen(GTK_WINDOW(top_window));
-  }
-  gtk_widget_set_size_request(top_window, display_width, display_height);
-  gtk_window_set_title (GTK_WINDOW (top_window), "pihpsdr");
-  gtk_window_set_position(GTK_WINDOW(top_window),GTK_WIN_POS_CENTER_ALWAYS);
-  gtk_window_set_resizable(GTK_WINDOW(top_window), FALSE);
-  g_signal_connect (top_window, "delete-event", G_CALLBACK (main_delete), NULL);
-  //g_signal_connect (top_window,"draw", G_CALLBACK (main_draw_cb), NULL);
-
-//fprintf(stderr,"create fixed container\n");
-  //fixed=gtk_fixed_new();
-  //gtk_container_add(GTK_CONTAINER(top_window), fixed);
-
-fprintf(stderr,"create grid\n");
-  grid = gtk_grid_new();
-  gtk_widget_set_size_request(grid, display_width, display_height);
-  gtk_grid_set_row_homogeneous(GTK_GRID(grid),FALSE);
-  gtk_grid_set_column_homogeneous(GTK_GRID(grid),FALSE);
-fprintf(stderr,"add grid\n");
-  gtk_container_add (GTK_CONTAINER (top_window), grid);
-
-fprintf(stderr,"create image\n");
-  GtkWidget  *image=gtk_image_new_from_file("hpsdr.png");
-fprintf(stderr,"add image to grid\n");
-  gtk_grid_attach(GTK_GRID(grid), image, 0, 0, 1, 4);
-
-fprintf(stderr,"create pi label\n");
-  char build[64];
-  sprintf(build,"build: %s %s",build_date, version);
-  GtkWidget *pi_label=gtk_label_new("pihpsdr by John Melton g0orx/n6lyt");
-  gtk_label_set_justify(GTK_LABEL(pi_label),GTK_JUSTIFY_LEFT);
-  gtk_widget_show(pi_label);
-fprintf(stderr,"add pi label to grid\n");
-  gtk_grid_attach(GTK_GRID(grid),pi_label,1,0,1,1);
-
-fprintf(stderr,"create build label\n");
-  GtkWidget *build_date_label=gtk_label_new(build);
-  gtk_label_set_justify(GTK_LABEL(build_date_label),GTK_JUSTIFY_LEFT);
-  gtk_widget_show(build_date_label);
-fprintf(stderr,"add build label to grid\n");
-  gtk_grid_attach(GTK_GRID(grid),build_date_label,1,1,1,1);
-
-fprintf(stderr,"create status\n");
-  status=gtk_label_new("");
-  gtk_label_set_justify(GTK_LABEL(status),GTK_JUSTIFY_LEFT);
-  gtk_widget_override_font(status, pango_font_description_from_string("FreeMono 18"));
-  gtk_widget_show(status);
-fprintf(stderr,"add status to grid\n");
-  gtk_grid_attach(GTK_GRID(grid), status, 1, 3, 1, 1);
-
-/*
-fprintf(stderr,"create exit button\n");
-  GtkWidget *button = gtk_button_new_with_label ("Exit");
-  //g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
-  g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), top_window);
-fprintf(stderr,"add exit button to grid\n");
-  gtk_grid_attach(GTK_GRID(grid), button, 1, 4, 1, 1);
-*/
-
-  gtk_widget_show_all(top_window);
-
-  g_idle_add(init,NULL);
-  //g_idle_add(discovery,NULL);
-
-
-}
-
-int main(int argc,char **argv) {
-  GtkApplication *pihpsdr;
-  int status;
-
-  pihpsdr=gtk_application_new("org.g0orx.pihpsdr", G_APPLICATION_FLAGS_NONE);
-  g_signal_connect(pihpsdr, "activate", G_CALLBACK(activate_pihpsdr), NULL);
-  status=g_application_run(G_APPLICATION(pihpsdr), argc, argv);
-fprintf(stderr,"exiting ...\n");
-  g_object_unref(pihpsdr);
-  return status;
-}
diff --git a/midi.h b/midi.h
index 1f68f0c039adf225a47aadbdc60c20fc0e879b22..2104e43eb40c1f2d8ea1a01a6f0147d1add3d59b 100644 (file)
--- a/midi.h
+++ b/midi.h
 //
 enum MIDIaction {
   ACTION_NONE=0,       // No-Op (unassigned key)
-  MIDI_AGC,                    // AGC level
+  MIDI_AGC,            // AGC level
   AGCATTACK,           // AGC ATTACK (cycle fast/med/slow etc.)
   ATT,                 // Step attenuator or Programmable attenuator
   AF_GAIN,             // AF gain
   BAND_DOWN,           // cycle through bands downwards
   BAND_UP,             // cycle through bands upwards
   COMPRESS,            // TX compressor value
-  MIDI_CTUN,                   // CTUN on/off
+  MIDI_CTUN,           // CTUN on/off
+  MIDI_DUP,            // DUP on/off
   FILTER_UP,           // cycle through filters upwards
   FILTER_DOWN,         // cycle through filters downwards
   MIC_VOLUME,          // MIC gain
-  MIDI_LOCK,                   // disable frequency changes
+  MIDI_LOCK,           // disable frequency changes
   MODE_UP,             // cycle through modes upwards
   MODE_DOWN,           // cycle through modes downwards
-  MIDI_MOX,                    // toggle "mox" state
-  MIDI_NB,                     // cycle through NoiseBlanker states (none, NB, NB2)
-  MIDI_NR,                     // cycle through NoiseReduction states (none, NR, NR2)
+  MIDI_MOX,            // toggle "mox" state
+  MIDI_NB,             // cycle through NoiseBlanker states (none, NB, NB2)
+  MIDI_NR,             // cycle through NoiseReduction states (none, NR, NR2)
   PRE,                 // preamp on/off
   PAN_HIGH,            // "high" value of current panadapter
   PAN_LOW,             // "low" value of current panadapter
-  MIDI_PS,                     // PURESIGNAL on/off
-  MIDI_RIT_CLEAR,              // clear RIT value
+  MIDI_PS,             // PURESIGNAL on/off
+  MIDI_RF_GAIN,                // RF gain
+  MIDI_RIT_CLEAR,      // clear RIT value
   RIT_VAL,             // change RIT value
+  MIDI_RSAT,           // RSAT on/off
+  MIDI_SAT,            // SAT on/off
   MIDI_SPLIT,          // Split on/off
   SWAP_VFO,            // swap VFO A/B frequency
-  MIDI_TUNE,                   // toggle "tune" state
+  MIDI_TUNE,           // toggle "tune" state
   TX_DRIVE,            // RF output power
   VFO,                 // change VFO frequency
   VFO_A2B,             // VFO A -> B
@@ -81,6 +85,8 @@ enum MIDIaction {
   VOX,                         // VOX on/off
   VFO_STEP_UP,         // cycle through vfo steps upwards;
   VFO_STEP_DOWN,       // cycle through vfo steps downwards;
+  MIDI_XIT_CLEAR,      // clear XIT
+  XIT_VAL,             // change XIT value
 };
 
 //
diff --git a/midi2.c b/midi2.c
index 9b950e27c090a78b3e117c7d86356b237cc38441..f862bde48db9a40715af992ca0acdd7e295ef585 100644 (file)
--- a/midi2.c
+++ b/midi2.c
@@ -99,6 +99,7 @@ static struct {
         { BAND_UP,      "BANDUP"},
         { COMPRESS,     "COMPRESS"},
        { MIDI_CTUN,    "CTUN"},
+       { MIDI_DUP,     "DUP"},
         { FILTER_DOWN,  "FILTERDOWN"},
         { FILTER_UP,    "FILTERUP"},
        { MIDI_LOCK,    "LOCK"},
@@ -112,8 +113,11 @@ static struct {
         { PAN_LOW,      "PANLOW"},
         { PRE,          "PREAMP"},
        { MIDI_PS,      "PURESIGNAL"},
+       { MIDI_RF_GAIN, "RFGAIN"},
         { MIDI_RIT_CLEAR,"RITCLEAR"},
         { RIT_VAL,      "RITVAL"},
+        { MIDI_RSAT,    "RSAT"},
+        { MIDI_SAT,     "SAT"},
        { MIDI_SPLIT,   "SPLIT"},
        { SWAP_VFO,     "SWAPVFO"},
         { MIDI_TUNE,    "TUNE"},
@@ -124,6 +128,8 @@ static struct {
        { VOX,          "VOX"},
        { VFO_STEP_UP,  "VFOSTEPUP"},
        { VFO_STEP_DOWN,  "VFOSTEPDOWN"},
+       { MIDI_XIT_CLEAR,  "XITCLEAR"},
+       { XIT_VAL,  "XITVAL"},
         { ACTION_NONE,  "NONE"},
         { ACTION_NONE,  NULL}
 };
diff --git a/midi3.c b/midi3.c
index 2a2fd05c165b7f6d514b3bc4dea2dab148bb581c..08bbcd25003f0e4f90d2b97cf568bb52b97ddf3d 100644 (file)
--- a/midi3.c
+++ b/midi3.c
@@ -64,6 +64,14 @@ void DoTheMidi(enum MIDIaction action, enum MIDItype type, int val) {
            }
            g_idle_add(ext_update_af_gain, NULL);
            break;
+        case MIDI_RF_GAIN: // knob or wheel supported
+           if (type == MIDI_KNOB) {
+               new=val;
+           } else  if (type == MIDI_WHEEL) {
+                new=(int)active_receiver->rf_gain+val;
+            }
+           g_idle_add(ext_set_rf_gain, GINT_TO_POINTER((int)val));
+            break;
        case MIC_VOLUME: // knob or wheel supported
            if (type == MIDI_KNOB) {
                dnew=-10.0 + 0.6*val;
@@ -158,7 +166,7 @@ void DoTheMidi(enum MIDIaction action, enum MIDItype type, int val) {
        case MIDI_RIT_CLEAR:  // only key supported
            if (type == MIDI_KEY) {
                // this clears the RIT value and disables RIT
-               vfo[active_receiver->id].rit = new;
+               vfo[active_receiver->id].rit = 0;
                vfo[active_receiver->id].rit_enabled = 0;
                g_idle_add(ext_vfo_update, NULL);
            }
@@ -168,13 +176,37 @@ void DoTheMidi(enum MIDIaction action, enum MIDItype type, int val) {
                // This changes the RIT value. If a value of 0 is reached,
                // RIT is disabled
                new = vfo[active_receiver->id].rit + val*rit_increment;
-               if (new >  9999) new= 9999;
-               if (new < -9999) new=-9999;
+               if (new >  10000) new= 10000;
+               if (new < -10000) new=-10000;
                vfo[active_receiver->id].rit = new;
                vfo[active_receiver->id].rit_enabled = (new != 0);
                g_idle_add(ext_vfo_update, NULL);
            }
            break;
+       case MIDI_XIT_CLEAR:  // only key supported
+           if (type == MIDI_KEY) {
+               // this clears the XIT value and disables XIT
+                if(can_transmit) {
+                 transmitter->xit = 0;
+                 transmitter->xit_enabled = 0;
+                 g_idle_add(ext_vfo_update, NULL);
+                }
+           }
+           break;
+       case XIT_VAL:   // only wheel supported
+           if (type == MIDI_WHEEL) {
+               // This changes the XIT value. If a value of 0 is reached,
+               // XIT is disabled
+                if(can_transmit) {
+                 new = transmitter->xit + val*rit_increment;
+                 if (new >  10000) new= 10000;
+                 if (new < -10000) new=-10000;
+                 transmitter->xit = new;
+                 transmitter->xit_enabled = (new != 0);
+                 g_idle_add(ext_vfo_update, NULL);
+                }
+           }
+           break;
        case PAN_HIGH:  // only wheel supported
            if (type == MIDI_WHEEL) {
                if (mox) {
@@ -304,6 +336,30 @@ void DoTheMidi(enum MIDIaction action, enum MIDItype type, int val) {
            set_offset(active_receiver,vfo[new].offset);
            g_idle_add(ext_vfo_update, NULL);
            break;
+        case MIDI_DUP:
+            if(duplex) {
+              duplex=0;
+            } else {
+              duplex=1;
+            }
+            g_idle_add(ext_vfo_update, NULL);
+            break;
+        case MIDI_RSAT:
+            if(sat_mode==RSAT_MODE) {
+              sat_mode=SAT_NONE;
+            } else {
+              sat_mode=RSAT_MODE;
+            }
+            g_idle_add(ext_vfo_update, NULL);
+            break;
+        case MIDI_SAT:
+            if(sat_mode==SAT_MODE) {
+              sat_mode=SAT_NONE;
+            } else {
+              sat_mode=SAT_MODE;
+            }
+            g_idle_add(ext_vfo_update, NULL);
+            break;
        case MIDI_PS:
 #ifdef PURESIGNAL
            // toggle PURESIGNAL
diff --git a/radio.c.orig b/radio.c.orig
deleted file mode 100644 (file)
index d7b94ed..0000000
+++ /dev/null
@@ -1,1541 +0,0 @@
-/* Copyrieht (C)
-* 2015 - John Melton, G0ORX/N6LYT
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*
-*/
-
-#include <gtk/gtk.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <semaphore.h>
-#include <math.h>
-#include <sys/time.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <wdsp.h>
-
-#include "audio.h"
-#include "discovered.h"
-//#include "discovery.h"
-#include "filter.h"
-#include "main.h"
-#include "mode.h"
-#include "radio.h"
-#include "receiver.h"
-#include "transmitter.h"
-#include "channel.h"
-#include "agc.h"
-#include "band.h"
-#include "property.h"
-#include "new_menu.h"
-#include "new_protocol.h"
-#include "old_protocol.h"
-#ifdef RADIOBERRY
-#include "radioberry.h"
-#endif
-#include "store.h"
-#ifdef LIMESDR
-#include "lime_protocol.h"
-#endif
-#ifdef FREEDV
-#include "freedv.h"
-#endif
-#include "audio_waterfall.h"
-#ifdef GPIO
-#include "gpio.h"
-#endif
-#include "vfo.h"
-#include "vox.h"
-#include "meter.h"
-#include "rx_panadapter.h"
-#include "tx_panadapter.h"
-#include "waterfall.h"
-#include "sliders.h"
-#include "toolbar.h"
-#include "rigctl.h"
-#include "ext.h"
-
-#define min(x,y) (x<y?x:y)
-#define max(x,y) (x<y?y:x)
-
-#define MENU_HEIGHT (30)
-#define MENU_WIDTH (64)
-#define VFO_HEIGHT (60)
-#define VFO_WIDTH (display_width-METER_WIDTH-MENU_WIDTH)
-#define METER_HEIGHT (60)
-#define METER_WIDTH (200)
-#define PANADAPTER_HEIGHT (105)
-#define SLIDERS_HEIGHT (90)
-#define TOOLBAR_HEIGHT (30)
-#define WATERFALL_HEIGHT (105)
-#ifdef PSK
-#define PSK_WATERFALL_HEIGHT (90)
-#define PSK_HEIGHT (display_height-(VFO_HEIGHT+PSK_WATERFALL_HEIGHT+SLIDERS_HEIGHT+TOOLBAR_HEIGHT))
-#endif
-
-#ifdef FREEDV
-#define FREEDV_WATERFALL_HEIGHT (105)
-#endif
-
-static GtkWidget *fixed;
-static GtkWidget *vfo_panel;
-static GtkWidget *meter;
-static GtkWidget *menu;
-static GtkWidget *sliders;
-static GtkWidget *toolbar;
-static GtkWidget *panadapter;
-static GtkWidget *waterfall;
-#ifdef PSK
-static GtkWidget *psk;
-static GtkWidget *psk_waterfall;
-#endif
-static GtkWidget *audio_waterfall;
-
-#ifdef GPIO
-static GtkWidget *encoders;
-static cairo_surface_t *encoders_surface = NULL;
-#endif
-#ifdef WIRIINGPI
-static GtkWidget *encoders;
-static cairo_surface_t *encoders_surface = NULL;
-#endif
-
-int region=REGION_OTHER;
-
-int echo=0;
-
-static gint save_timer_id;
-
-DISCOVERED *radio=NULL;
-
-char property_path[128];
-sem_t property_sem;
-
-RECEIVER *receiver[MAX_RECEIVERS];
-RECEIVER *active_receiver;
-TRANSMITTER *transmitter;
-
-int buffer_size=1024; // 64, 128, 256, 512, 1024
-int fft_size=2048; // 1024, 2048, 4096, 8192, 16384
-
-int atlas_penelope=0;
-int atlas_clock_source_10mhz=0;
-int atlas_clock_source_128mhz=0;
-int atlas_config=0;
-int atlas_mic_source=0;
-
-int classE=0;
-
-int tx_out_of_band=0;
-
-int tx_cfir=0;
-int tx_leveler=0;
-int alc=TXA_ALC_AV;
-
-double tone_level=0.2;
-
-int filter_board=ALEX;
-//int pa=PA_ENABLED;
-//int apollo_tuner=0;
-
-int updates_per_second=10;
-
-int panadapter_high=-40;
-int panadapter_low=-140;
-
-int display_filled=1;
-int display_detector_mode=DETECTOR_MODE_AVERAGE;
-int display_average_mode=AVERAGE_MODE_LOG_RECURSIVE;
-double display_average_time=120.0;
-
-
-int waterfall_high=-100;
-int waterfall_low=-150;
-
-int display_sliders=1;
-
-//double volume=0.2;
-double mic_gain=0.0;
-int binaural=0;
-
-int mic_linein=0;
-int linein_gain=16; // 0..31
-int mic_boost=0;
-int mic_bias_enabled=0;
-int mic_ptt_enabled=0;
-int mic_ptt_tip_bias_ring=0;
-
-//double tune_drive=10;
-//double drive=50;
-
-//int drive_level=0;
-//int tune_drive_level=0;
-
-int receivers=RECEIVERS;
-
-int locked=0;
-
-long long step=100;
-
-//int rit=0;
-int rit_increment=10;
-
-int lt2208Dither = 0;
-int lt2208Random = 0;
-int attenuation = 0; // 0dB
-//unsigned long alex_rx_antenna=0;
-//unsigned long alex_tx_antenna=0;
-//unsigned long alex_attenuation=0;
-
-int cw_keys_reversed=0; // 0=disabled 1=enabled
-int cw_keyer_speed=12; // 1-60 WPM
-int cw_keyer_mode=KEYER_STRAIGHT;
-int cw_keyer_weight=30; // 0-100
-int cw_keyer_spacing=0; // 0=on 1=off
-int cw_keyer_internal=1; // 0=external 1=internal
-int cw_keyer_sidetone_volume=127; // 0-127
-int cw_keyer_ptt_delay=20; // 0-255ms
-int cw_keyer_hang_time=300; // ms
-int cw_keyer_sidetone_frequency=400; // Hz
-int cw_breakin=1; // 0=disabled 1=enabled
-int cw_active_level=1; // 0=active_low 1=active_high
-
-int vfo_encoder_divisor=15;
-
-int protocol;
-int device;
-int ozy_software_version;
-int mercury_software_version;
-int penelope_software_version;
-int ptt;
-int dot;
-int dash;
-int adc_overload;
-int pll_locked;
-unsigned int exciter_power;
-unsigned int alex_forward_power;
-unsigned int alex_reverse_power;
-unsigned int AIN3;
-unsigned int AIN4;
-unsigned int AIN6;
-unsigned int IO1;
-unsigned int IO2;
-unsigned int IO3;
-int supply_volts;
-int mox;
-int tune;
-int memory_tune=0;
-int full_tune=0;
-
-//long long displayFrequency=14250000;
-//long long ddsFrequency=14250000;
-//long long ddsOffset=0;
-
-long long frequencyB=14250000;
-int modeB=modeUSB;
-int filterB=5;
-
-int split=0;
-
-unsigned char OCtune=0;
-int OCfull_tune_time=2800; // ms
-int OCmemory_tune_time=550; // ms
-long long tune_timeout;
-
-int analog_meter=0;
-int smeter=RXA_S_AV;
-
-int local_audio=0;
-int local_microphone=0;
-
-int eer_pwm_min=100;
-int eer_pwm_max=800;
-
-int tx_filter_low=150;
-int tx_filter_high=2850;
-
-static int pre_tune_mode;
-static int pre_tune_filter_low;
-static int pre_tune_filter_high;
-
-int enable_tx_equalizer=0;
-int tx_equalizer[4]={0,0,0,0};
-
-int enable_rx_equalizer=0;
-int rx_equalizer[4]={0,0,0,0};
-
-int pre_emphasize=0;
-
-int vox_setting=0;
-int vox_enabled=0;
-double vox_threshold=0.001;
-double vox_gain=10.0;
-double vox_hang=250.0;
-int vox=0;
-
-int diversity_enabled=0;
-double i_rotate[2]={1.0,1.0};
-double q_rotate[2]={0.0,0.0};
-
-double meter_calibration=0.0;
-double display_calibration=0.0;
-
-void reconfigure_radio() {
-  int i;
-  int y;
-//fprintf(stderr,"reconfigure_radio: receivers=%d\n",receivers);
-  int rx_height=display_height-VFO_HEIGHT-TOOLBAR_HEIGHT;
-  if(display_sliders) {
-    rx_height-=SLIDERS_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_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);
-  } else {
-    if(sliders!=NULL) {
-      gtk_container_remove(GTK_CONTAINER(fixed),sliders); 
-      sliders=NULL;
-    }
-  }
-
-  reconfigure_transmitter(transmitter,rx_height);
-
-}
-
-static gboolean save_cb(gpointer data) {
-    radioSaveState();
-    return TRUE;
-}
-
-static gboolean minimize_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-  gtk_window_iconify(GTK_WINDOW(top_window));
-  return TRUE;
-}
-
-static gboolean menu_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-  new_menu(top_window);
-  return TRUE;
-}
-
-void start_radio() {
-  int i;
-  int x;
-  int y;
-//fprintf(stderr,"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));
-
-  int rc;
-  rc=sem_init(&property_sem, 0, 0);
-  if(rc!=0) {
-    fprintf(stderr,"start_radio: sem_init failed for property_sem: %d\n", rc);
-    exit(-1);
-  }
-  sem_post(&property_sem);
-
-  char text[256];
-  //for(i=0;i<devices;i++) {
-    switch(radio->protocol) {
-      case ORIGINAL_PROTOCOL:
-      case NEW_PROTOCOL:
-#ifdef USBOZY
-        if(radio->device==DEVICE_OZY) {
-          sprintf(text,"%s (%s) on USB /dev/ozy\n", radio->name, radio->protocol==ORIGINAL_PROTOCOL?"Protocol 1":"Protocol 2");
-        } else {
-#endif
-          sprintf(text,"Starting %s (%s v%d.%d)",
-                        radio->name,
-                        radio->protocol==ORIGINAL_PROTOCOL?"Protocol 1":"Protocol 2",
-                        radio->software_version/10,
-                        radio->software_version%10);
-        break;
-    }
-  //}
-
-
-
-  status_text(text);
-
-  sprintf(text,"piHPSDR: %s (%s v%d.%d) %s (%02X:%02X:%02X:%02X:%02X:%02X) on %s",
-                          radio->name,
-                          radio->protocol==ORIGINAL_PROTOCOL?"Protocol 1":"Protocol 2",
-                          radio->software_version/10,
-                          radio->software_version%10,
-                          inet_ntoa(radio->info.network.address.sin_addr),
-                          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],
-                          radio->info.network.interface_name);
-
-fprintf(stderr,"title: length=%d\n", (int)strlen(text));
-
-  gtk_window_set_title (GTK_WINDOW (top_window), text);
-
-  protocol=radio->protocol;
-  device=radio->device;
-
-  switch(radio->protocol) {
-    case ORIGINAL_PROTOCOL:
-    case NEW_PROTOCOL:
-      switch(radio->device) {
-#ifdef USBOZY
-        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;
-#ifdef LIMESDR
-    case LIMESDR_PROTOCOL:
-      sprintf(property_path,"limesdr.props");
-      break;
-#endif
-#ifdef RADIOBERRY
-    case RADIOBERRY_PROTOCOL:
-      sprintf(property_path,"radioberry.props");
-      break;
-#endif
-  }
-
-  switch(radio->protocol) {
-    case ORIGINAL_PROTOCOL:
-      switch(radio->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(radio->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;
-  }
-
-  adc_attenuation[0]=0;
-  adc_attenuation[1]=0;
-
-//fprintf(stderr,"meter_calibration=%f display_calibration=%f\n", meter_calibration, display_calibration);
-  radioRestoreState();
-
-  radio_change_region(region);
-
-  y=0;
-
-  fixed=gtk_fixed_new();
-  gtk_container_remove(GTK_CONTAINER(top_window),grid);
-  gtk_container_add(GTK_CONTAINER(top_window), fixed);
-
-//fprintf(stderr,"radio: vfo_init\n");
-  vfo_panel = vfo_init(VFO_WIDTH,VFO_HEIGHT,top_window);
-  gtk_fixed_put(GTK_FIXED(fixed),vfo_panel,0,y);
-
-//fprintf(stderr,"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("FreeMono Bold 10"));
-  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("FreeMono Bold 10"));
-  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;
-
-
-  int rx_height=display_height-VFO_HEIGHT-TOOLBAR_HEIGHT;
-  if(display_sliders) {
-    rx_height-=SLIDERS_HEIGHT;
-  }
-  int tx_height=rx_height;
-  rx_height=rx_height/receivers;
-
-
-fprintf(stderr,"Create %d receivers: height=%d\n",receivers,rx_height);
-  for(i=0;i<RECEIVERS;i++) {
-    receiver[i]=create_receiver(i, buffer_size, fft_size, display_width, updates_per_second, display_width, rx_height);
-    setSquelch(receiver[i]);
-    if(i<receivers) {
-      receiver[i]->x=0;
-      receiver[i]->y=y;
-      gtk_fixed_put(GTK_FIXED(fixed),receiver[i]->panel,0,y);
-      g_object_ref((gpointer)receiver[i]->panel);
-      set_displaying(receiver[i],1);
-      y+=rx_height;
-    } else {
-      set_displaying(receiver[i],0);
-    }
-  }
-
-  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];
-
-  fprintf(stderr,"Create transmitter\n");
-  transmitter=create_transmitter(CHANNEL_TX, buffer_size, fft_size, updates_per_second, display_width, tx_height);
-  transmitter->x=0;
-  transmitter->y=VFO_HEIGHT;
-  //gtk_fixed_put(GTK_FIXED(fixed),transmitter->panel,0,VFO_HEIGHT);
-
-#ifdef PURESIGNAL
-  tx_set_ps_sample_rate(transmitter,protocol==NEW_PROTOCOL?192000:active_receiver->sample_rate);
-  if(((protocol==ORIGINAL_PROTOCOL) && (device!=DEVICE_METIS)) || ((protocol==NEW_PROTOCOL) && (device!=NEW_DEVICE_ATLAS))) {
-    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);
-  }
-#endif
-
-#ifdef AUDIO_WATERFALL
-  audio_waterfall=audio_waterfall_init(200,100);
-  gtk_fixed_put(GTK_FIXED(fixed),audio_waterfall,0,VFO_HEIGHT+20);
-#endif
-  
-#ifdef GPIO
-  if(gpio_init()<0) {
-    fprintf(stderr,"GPIO failed to initialize\n");
-  }
-#endif
-<<<<<<< HEAD
-#ifdef LOCALCW
-  // init local keyer if enabled
-  if (cw_keyer_internal == 0) {
-       fprintf(stderr,"Initialize keyer.....\n");
-    keyer_update();
-  }
-#endif
-=======
->>>>>>> upstream/master
-  
-  switch(radio->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 LIMESDR
-    case LIMESDR_PROTOCOL:
-      lime_protocol_init(0,display_width,receiver[0]->sample_rate);
-      break;
-#endif
-#ifdef RADIOBERRY
-       case RADIOBERRY_PROTOCOL:
-               radioberry_protocol_init(0,display_width);
-               break;
-#endif
-  }
-
-
-
-//#ifdef I2C
-//  i2c_init();
-//#endif
-
-  if(display_sliders) {
-fprintf(stderr,"create sliders\n");
-    sliders = sliders_init(display_width,SLIDERS_HEIGHT);
-    gtk_fixed_put(GTK_FIXED(fixed),sliders,0,y);
-    y+=SLIDERS_HEIGHT;
-  }
-
-
-  toolbar = toolbar_init(display_width,TOOLBAR_HEIGHT,top_window);
-  gtk_fixed_put(GTK_FIXED(fixed),toolbar,0,y);
-  y+=TOOLBAR_HEIGHT;
-
-  gtk_widget_show_all (fixed);
-//#ifdef FREEDV
-//  if(!active_receiver->freedv) {
-//    gtk_widget_hide(audio_waterfall);
-//  }
-//#endif
-
-  
-
-  // save every 30 seconds
-  save_timer_id=gdk_threads_add_timeout(30000, save_cb, NULL);
-
-#ifdef PSK
-  if(vfo[active_receiver->id].mode==modePSK) {
-    show_psk();
-  } else {
-    show_waterfall();
-  }
-#endif
-
-  if(rigctl_enable) {
-    launch_rigctl();
-  }
-
-  calcDriveLevel();
-
-#ifdef PURESIGNAL
-  if(transmitter->puresignal) {
-    tx_set_ps(transmitter,transmitter->puresignal);
-  }
-#endif
-
-  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));
-
-}
-
-void disable_rigctl() {
-   fprintf(stderr,"RIGCTL: disable_rigctl()\n");
-   close_rigctl_ports();
-}
-
-void radio_change_receivers(int r) {
-  fprintf(stderr,"radio_change_receivers: from %d to %d\n",receivers,r);
-  switch(r) {
-    case 1:
-      if(receivers==2) {
-        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];
-  if(protocol==NEW_PROTOCOL) {
-    schedule_high_priority();
-  }
-}
-
-void radio_change_sample_rate(int rate) {
-  int i;
-  switch(protocol) {
-    case ORIGINAL_PROTOCOL:
-      old_protocol_stop();
-      for(i=0;i<receivers;i++) {
-        receiver_change_sample_rate(receiver[i],rate);
-      }
-      old_protocol_set_mic_sample_rate(rate);
-      old_protocol_run();
-#ifdef PURESIGNAL
-      tx_set_ps_sample_rate(transmitter,rate);
-#endif
-      break;
-#ifdef LIMESDR
-    case LIMESDR_PROTOCOL:
-      lime_protocol_change_sample_rate(rate);
-      break;
-#endif
-  }
-}
-
-static void rxtx(int state) {
-  int i;
-
-  if(state) {
-    // switch to tx
-#ifdef FREEDV
-    if(active_receiver->freedv) {
-      freedv_reset_tx_text_index();
-    }
-#endif
-#ifdef PURESIGNAL
-    RECEIVER *rx_feedback=receiver[PS_RX_FEEDBACK];
-    RECEIVER *tx_feedback=receiver[PS_TX_FEEDBACK];
-
-    rx_feedback->samples=0;
-    tx_feedback->samples=0;
-#endif
-
-    for(i=0;i<receivers;i++) {
-      SetChannelState(receiver[i]->id,0,i==(receivers-1));
-      set_displaying(receiver[i],0);
-      if(protocol==NEW_PROTOCOL) {
-        schedule_high_priority();
-        schedule_receive_specific();
-      }
-      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);
-    }
-//#ifdef FREEDV
-//    if(active_receiver->freedv) {
-//      gtk_widget_show(audio_waterfall);
-//    }
-//#endif
-    gtk_fixed_put(GTK_FIXED(fixed),transmitter->panel,transmitter->x,transmitter->y);
-    SetChannelState(transmitter->id,1,0);
-    tx_set_displaying(transmitter,1);
-  } else {
-    SetChannelState(transmitter->id,0,1);
-    if(protocol==NEW_PROTOCOL) {
-      schedule_high_priority();
-      schedule_receive_specific();
-    }
-    tx_set_displaying(transmitter,0);
-    g_object_ref((gpointer)transmitter->panel);
-    g_object_ref((gpointer)transmitter->panadapter);
-    gtk_container_remove(GTK_CONTAINER(fixed),transmitter->panel);
-//#ifdef FREEDV
-//    if(active_receiver->freedv) {
-//      gtk_widget_hide(audio_waterfall);
-//    }
-//#endif
-    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 FREEDV
-//    if(active_receiver->freedv) {
-//      gtk_widget_show(audio_waterfall);
-//    }
-//#endif
-  }
-
-#ifdef PURESIGNAL
-  if(transmitter->puresignal) {
-    SetPSMox(transmitter->id,state);
-  }
-#endif
-}
-
-void setMox(int state) {
-  if(mox!=state) {
-    mox=state;
-    if(vox_enabled && vox) {
-      vox_cancel();
-    } else {
-      rxtx(state);
-    }
-  }
-}
-
-int getMox() {
-    return mox;
-}
-
-void setVox(int state) {
-  if(vox!=state && !tune) {
-    vox=state;
-    rxtx(state);
-  }
-  g_idle_add(ext_vfo_update,(gpointer)NULL);
-}
-
-void vox_changed(int state) {
-  setVox(state);
-}
-
-
-void setTune(int state) {
-  int i;
-
-  if(tune!=state) {
-    tune=state;
-    if(vox_enabled && vox) {
-      vox_cancel();
-    }
-    if(tune) {
-      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(tune) {
-      for(i=0;i<receivers;i++) {
-        SetChannelState(receiver[i]->id,0,i==(receivers-1));
-        set_displaying(receiver[i],0);
-        if(protocol==NEW_PROTOCOL) {
-          schedule_high_priority();
-        }
-      }
-
-      int mode=vfo[VFO_A].mode;
-      if(split) {
-        mode=vfo[VFO_B].mode;
-      }
-      pre_tune_mode=mode;
-
-      switch(mode) {
-        case modeLSB:
-        case modeCWL:
-        case modeDIGL:
-          SetTXAPostGenToneFreq(transmitter->id,-(double)cw_keyer_sidetone_frequency);
-          break;
-        default:
-          SetTXAPostGenToneFreq(transmitter->id,(double)cw_keyer_sidetone_frequency);
-          break;
-      }
-
-      SetTXAPostGenToneMag(transmitter->id,0.99999);
-      SetTXAPostGenMode(transmitter->id,0);
-      SetTXAPostGenRun(transmitter->id,1);
-
-      switch(mode) {
-        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(tune);
-    } else {
-      rxtx(tune);
-      SetTXAPostGenRun(transmitter->id,0);
-      switch(pre_tune_mode) {
-        case modeCWL:
-        case modeCWU:
-          tx_set_mode(transmitter,pre_tune_mode);
-          cw_keyer_internal=1;
-          break;
-      }
-
-    }
-  }
-}
-
-int getTune() {
-  return tune;
-}
-
-void radio_cw_setup() {
-  int mode=vfo[VFO_A].mode;;
-  if(split) {
-    mode=vfo[VFO_B].mode;
-  }
-
-  double freq=(double)cw_keyer_sidetone_frequency;
-  switch(mode) {
-    case modeCWU:
-      SetTXAPostGenToneFreq(transmitter->id,(double)cw_keyer_sidetone_frequency);
-      break;
-    case modeLSB:
-      SetTXAPostGenToneFreq(transmitter->id,-(double)cw_keyer_sidetone_frequency);
-      break;
-  }
-  SetTXAPostGenMode(transmitter->id,0);
-  SetTXAPostGenToneMag(transmitter->id,0.99999);
-}
-
-void radio_cw_key(int state) {
-  SetTXAPostGenRun(transmitter->id,state);
-}
-
-int isTransmitting() {
-  return ptt | mox | vox | tune;
-}
-
-void setFrequency(long long f) {
-  BAND *band=band_get_current_band();
-  BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
-  int v=active_receiver->id;
-
-  switch(protocol) {
-    case NEW_PROTOCOL:
-    case ORIGINAL_PROTOCOL:
-#ifdef RADIOBERRY
-       case RADIOBERRY_PROTOCOL:
-#endif
-      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].offset=f-vfo[v].frequency;
-        set_offset(active_receiver,vfo[v].offset);
-        return;
-      } else {
-        //entry->frequency=f;
-        vfo[v].frequency=f;
-      }
-      break;
-#ifdef LIMESDR
-    case LIMESDR_PROTOCOL:
-      {
-fprintf(stderr,"setFrequency: %lld\n",f);
-      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].offset=f-vfo[v].frequency;
-      set_offset(active_receiver,vfo[v].offset);
-      return;
-      }
-      break;
-#endif
-  }
-
-  switch(protocol) {
-    case NEW_PROTOCOL:
-      schedule_high_priority();
-      break;
-    case ORIGINAL_PROTOCOL:
-#ifdef RADIOBERRY
-       case RADIOBERRY_PROTOCOL:
-#endif
-      break;
-#ifdef LIMESDR
-    case LIMESDR_PROTOCOL:
-      lime_protocol_set_frequency(f);
-      vfo[v].offset=0;
-      set_offset(active_receiver,vfo[v].offset);
-      break;
-#endif
-  }
-}
-
-long long getFrequency() {
-    return vfo[active_receiver->id].frequency;
-}
-
-double getDrive() {
-    return transmitter->drive;
-}
-
-static int calcLevel(double d) {
-  int level=0;
-  int v=VFO_A;
-  if(split) v=VFO_B;
-
-  BAND *band=band_get_band(vfo[v].band);
-  double target_dbm = 10.0 * log10(d * 1000.0);
-  double gbb=band->pa_calibration;
-  target_dbm-=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);
-
-  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);
-
-//fprintf(stderr,"calcLevel: %f calib=%f level=%d\n",d, gbb, level);
-  return level;
-}
-
-void calcDriveLevel() {
-    transmitter->drive_level=calcLevel(transmitter->drive);
-    if(mox && protocol==NEW_PROTOCOL) {
-      schedule_high_priority();
-    }
-//fprintf(stderr,"calcDriveLevel: drive=%d drive_level=%d\n",transmitter->drive,transmitter->drive_level);
-}
-
-void setDrive(double value) {
-    transmitter->drive=value;
-    calcDriveLevel();
-}
-
-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 fm_sq=pow(10.0, -2.0*rx->squelch/100.0);
-  SetRXAFMSQThreshold(rx->id, fm_sq);
-  SetRXAFMSQRun(rx->id, rx->squelch_enable);
-}
-
-void set_attenuation(int value) {
-    switch(protocol) {
-      case NEW_PROTOCOL:
-        schedule_high_priority();
-        break;
-#ifdef LIMESDR
-      case LIMESDR_PROTOCOL:
-        lime_protocol_set_attenuation(value);
-        break;
-#endif
-    }
-}
-
-void set_alex_rx_antenna(int v) {
-    if(active_receiver->id==0) {
-      active_receiver->alex_antenna=v;
-      if(protocol==NEW_PROTOCOL) {
-          schedule_high_priority();
-      }
-    }
-#ifdef LIMESDR
-    if(protocol==LIMESDR_PROTOCOL) {
-        lime_protocol_set_antenna(v);;
-    }
-#endif
-}
-
-void set_alex_tx_antenna(int v) {
-    transmitter->alex_antenna=v;
-    if(protocol==NEW_PROTOCOL) {
-        schedule_high_priority();
-    }
-}
-
-void set_alex_attenuation(int v) {
-    if(active_receiver->id==0) {
-      active_receiver->alex_attenuation=v;
-      if(protocol==NEW_PROTOCOL) {
-          schedule_high_priority();
-      }
-    }
-}
-
-void radioRestoreState() {
-    char *value;
-
-fprintf(stderr,"radioRestoreState: %s\n",property_path);
-    sem_wait(&property_sem);
-    loadProperties(property_path);
-
-    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("apollo_tuner");
-    if(value) apollo_tuner=atoi(value);
-    value=getProperty("pa");
-    if(value) pa=atoi(value);
-*/
-    value=getProperty("updates_per_second");
-    if(value) updates_per_second=atoi(value);
-    value=getProperty("display_filled");
-    if(value) display_filled=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("display_sliders");
-    if(value) display_sliders=atoi(value);
-/*
-    value=getProperty("display_toolbar");
-    if(value) display_toolbar=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_keys_reversed");
-    if(value) cw_keys_reversed=atoi(value);
-    value=getProperty("cw_keyer_speed");
-    if(value) cw_keyer_speed=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);
-#endif
-    value=getProperty("cw_active_level");
-    if(value) cw_active_level=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);
-#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("frequencyB");
-    if(value) frequencyB=atol(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);
-
-#ifdef GPIO
-    value=getProperty("e1_encoder_action");
-    if(value) e1_encoder_action=atoi(value);
-    value=getProperty("e2_encoder_action");
-    if(value) e2_encoder_action=atoi(value);
-    value=getProperty("e3_encoder_action");
-    if(value) e3_encoder_action=atoi(value);
-#endif
-
-    value=getProperty("receivers");
-    if(value) receivers=atoi(value);
-
-    filterRestoreState();
-    bandRestoreState();
-    memRestoreState();
-    vfo_restore_state();
-#ifdef FREEDV
-    freedv_restore_state();
-#endif
-    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);
-
-    sem_post(&property_sem);
-}
-
-void radioSaveState() {
-    int i;
-    char value[80];
-
-    sem_wait(&property_sem);
-    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_filled);
-    setProperty("display_filled",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",display_sliders);
-    setProperty("display_sliders",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,"%lld",step);
-    setProperty("step",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_active_level);
-    setProperty("cw_active_level",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);
-#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",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);
-
-#ifdef GPIO
-    sprintf(value,"%d",e1_encoder_action);
-    setProperty("e1_encoder_action",value);
-    sprintf(value,"%d",e2_encoder_action);
-    setProperty("e2_encoder_action",value);
-    sprintf(value,"%d",e3_encoder_action);
-    setProperty("e3_encoder_action",value);
-#endif
-
-    sprintf(value,"%d",adc_attenuation[0]);
-    setProperty("adc_0_attenuation",value);
-    sprintf(value,"%d",adc_attenuation[1]);
-    setProperty("adc_1_attenuation",value);
-
-    vfo_save_state();
-    sprintf(value,"%d",receivers);
-    setProperty("receivers",value);
-    for(i=0;i<receivers;i++) {
-      receiver_save_state(receiver[i]);
-    }
-    transmitter_save_state(transmitter);
-#ifdef FREEDV
-    freedv_save_state();
-#endif
-
-    filterSaveState();
-    bandSaveState();
-    memSaveState();
-
-    sprintf(value,"%d",rigctl_enable);
-    setProperty("rigctl_enable",value);
-    sprintf(value,"%d",rigctl_port_base);
-    setProperty("rigctl_port_base",value);
-
-    saveProperties(property_path);
-    sem_post(&property_sem);
-}
-
-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)min(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;
-
-  fprintf(stderr,"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;
-
-  fprintf(stderr,"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);
-}
-
-#ifdef FREEDV
-void set_freedv(int state) {
-fprintf(stderr,"set_freedv: rx=%p state=%d\n",active_receiver,state);
-  g_mutex_lock(&active_receiver->freedv_mutex);
-  active_receiver->freedv=state;
-  if(active_receiver->freedv) {
-    SetRXAPanelRun(active_receiver->id, 0);
-    init_freedv(active_receiver);
-    transmitter->freedv_samples=0;
-  } else {
-    SetRXAPanelRun(active_receiver->id, 1);
-    close_freedv(active_receiver);
-  }
-  g_mutex_unlock(&active_receiver->freedv_mutex);
-  g_idle_add(ext_vfo_update,NULL);
-}
-#endif
-
-void radio_change_region(int r) {
-  region=r;
-  if(region==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;
-  } else {
-    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;
-  }
-}
index 4f4be8144e877572c04f9143339b549f550332ab..48a33806203dab79262a49665183d523d0975228 100644 (file)
@@ -1211,6 +1211,9 @@ void receiver_frequency_changed(RECEIVER *rx) {
 
   if(vfo[id].ctun) {
     vfo[id].offset=vfo[id].ctun_frequency-vfo[id].frequency;
+    if(vfo[id].rit_enabled) {
+       vfo[id].offset+=vfo[id].rit;
+    }
     set_offset(rx,vfo[id].offset);
   } else {
     switch(protocol) {
diff --git a/rx_menu.c.orig b/rx_menu.c.orig
deleted file mode 100644 (file)
index 4606dd6..0000000
+++ /dev/null
@@ -1,415 +0,0 @@
-/* Copyright (C)
-* 2015 - John Melton, G0ORX/N6LYT
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*
-*/
-
-#include <gtk/gtk.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-
-#include "audio.h"
-#include "new_menu.h"
-#include "rx_menu.h"
-#include "band.h"
-#include "discovered.h"
-#include "filter.h"
-#include "radio.h"
-#include "receiver.h"
-#include "sliders.h"
-
-static GtkWidget *parent_window=NULL;
-
-static GtkWidget *menu_b=NULL;
-
-static GtkWidget *dialog=NULL;
-
-static void cleanup() {
-  if(dialog!=NULL) {
-    gtk_widget_destroy(dialog);
-    dialog=NULL;
-    sub_menu=NULL;
-  }
-}
-
-static gboolean close_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
-  cleanup();
-  return TRUE;
-}
-
-static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) {
-  cleanup();
-  return FALSE;
-}
-
-static void dither_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->dither=active_receiver->dither==1?0:1;
-  update_att_preamp();
-}
-
-static void random_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->random=active_receiver->random==1?0:1;
-}
-
-static void preamp_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->preamp=active_receiver->preamp==1?0:1;
-  update_att_preamp();
-}
-
-static void alex_att_cb(GtkWidget *widget, gpointer data) {
-  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-    set_alex_attenuation((intptr_t) data);
-    update_att_preamp();
-  }
-}
-
-static void sample_rate_cb(GtkWidget *widget, gpointer data) {
-  receiver_change_sample_rate(active_receiver,(uintptr_t)data);
-}
-
-static void adc_cb(GtkWidget *widget, gpointer data) {
-  receiver_change_adc(active_receiver,(uintptr_t)data);
-}
-
-static void local_audio_cb(GtkWidget *widget, gpointer data) {
-fprintf(stderr,"local_audio_cb: rx=%d\n",active_receiver->id);
-  if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
-    if(audio_open_output(active_receiver)==0) {
-      active_receiver->local_audio=1;
-    } else {
-fprintf(stderr,"local_audio_cb: audio_open_output failed\n");
-      active_receiver->local_audio=0;
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
-    }
-  } else {
-    if(active_receiver->local_audio) {
-      active_receiver->local_audio=0;
-      audio_close_output(active_receiver);
-    }
-  }
-fprintf(stderr,"local_audio_cb: local_audio=%d\n",active_receiver->local_audio);
-}
-
-static void mute_audio_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->mute_when_not_active=gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
-}
-
-static void mute_radio_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->mute_radio=gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
-}
-
-static void local_output_changed_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->audio_device=(int)(long)data;
-fprintf(stderr,"local_output_changed rx=%d to %d\n",active_receiver->id,active_receiver->audio_device);
-  if(active_receiver->local_audio) {
-    audio_close_output(active_receiver);
-    if(audio_open_output(active_receiver)==0) {
-      active_receiver->local_audio=1;
-    } else {
-      active_receiver->local_audio=0;
-    }
-fprintf(stderr,"local_output_changed rx=%d local_audio=%d\n",active_receiver->id,active_receiver->local_audio);
-  }
-}
-
-static void audio_channel_cb(GtkWidget *widget, gpointer data) {
-  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-    active_receiver->audio_channel=(uintptr_t)data;
-  }
-}
-
-void rx_menu(GtkWidget *parent) {
-  char label[32];
-  GtkWidget *adc_b;
-  int i;
-  parent_window=parent;
-
-  dialog=gtk_dialog_new();
-  gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(parent_window));
-  //gtk_window_set_decorated(GTK_WINDOW(dialog),FALSE);
-  char title[64];
-  sprintf(title,"piHPSDR - Receive (RX %d VFO %s)",active_receiver->id,active_receiver->id==0?"A":"B");
-  gtk_window_set_title(GTK_WINDOW(dialog),title);
-  g_signal_connect (dialog, "delete_event", G_CALLBACK (delete_event), NULL);
-
-  GdkRGBA color;
-  color.red = 1.0;
-  color.green = 1.0;
-  color.blue = 1.0;
-  color.alpha = 1.0;
-  gtk_widget_override_background_color(dialog,GTK_STATE_FLAG_NORMAL,&color);
-
-  GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
-
-  GtkWidget *grid=gtk_grid_new();
-  gtk_grid_set_column_spacing (GTK_GRID(grid),10);
-  //gtk_grid_set_row_spacing (GTK_GRID(grid),10);
-  //gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
-  //gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
-
-  GtkWidget *close_b=gtk_button_new_with_label("Close");
-  g_signal_connect (close_b, "button_press_event", G_CALLBACK(close_cb), NULL);
-  gtk_grid_attach(GTK_GRID(grid),close_b,0,0,1,1);
-
-  int x=0;
-
-  switch(protocol) {
-    case NEW_PROTOCOL:
-      {
-      GtkWidget *sample_rate_label=gtk_label_new("Sample Rate");
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_label,x,1,1,1);
-
-      GtkWidget *sample_rate_48=gtk_radio_button_new_with_label(NULL,"48000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_48), active_receiver->sample_rate==48000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_48,x,2,1,1);
-      g_signal_connect(sample_rate_48,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)48000);
-
-      GtkWidget *sample_rate_96=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_48),"96000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_96), active_receiver->sample_rate==96000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_96,x,3,1,1);
-      g_signal_connect(sample_rate_96,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)96000);
-  
-      GtkWidget *sample_rate_192=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_96),"192000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_192), active_receiver->sample_rate==192000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_192,x,4,1,1);
-      g_signal_connect(sample_rate_192,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)192000);
-
-      GtkWidget *sample_rate_384=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_192),"384000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_384), active_receiver->sample_rate==384000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_384,x,5,1,1);
-      g_signal_connect(sample_rate_384,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)384000);
-
-#ifndef raspberrypi
-      GtkWidget *sample_rate_768=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_384),"768000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_768), active_receiver->sample_rate==768000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_768,x,6,1,1);
-      g_signal_connect(sample_rate_768,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)768000);
-
-      GtkWidget *sample_rate_1536=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_768),"1536000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_1536), active_receiver->sample_rate==1536000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_1536,x,7,1,1);
-      g_signal_connect(sample_rate_1536,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)1536000);
-#endif
-      }
-      x++;
-      break;
-
-#ifdef LIMESDR
-    case LIMESDR_PROTOCOL:
-      {
-      GtkWidget *sample_rate_label=gtk_label_new("Sample Rate");
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_label,x,1,1,1);
-
-      GtkWidget *sample_rate_1M=gtk_radio_button_new_with_label(NULL,"1000000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_1M), active_receiver->sample_rate==1000000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_1M,x,2,1,1);
-      g_signal_connect(sample_rate_1M,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)1000000);
-
-      GtkWidget *sample_rate_2M=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_1M),"2000000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_2M), active_receiver->sample_rate==2000000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_2M,x,3,1,1);
-      g_signal_connect(sample_rate_2M,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)2000000);
-      }
-      x++;
-      break;
-#endif
-  }
-
-<<<<<<< HEAD
-  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);
-
-      if((protocol==ORIGINAL_PROTOCOL && device==DEVICE_METIS) ||
-=======
-  // The CHARLY25 board (with RedPitaya) has no support for dither or random,
-  // so those are left out. PreAmps and Alex Attenuator are controlled via sliders.
-  if (filter_board != CHARLY25) {
-    switch(protocol) {
-#ifdef RADIOBERRY
-      case RADIOBERRY_PROTOCOL:
-#endif
-      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);
-
-          if((protocol==ORIGINAL_PROTOCOL && device==DEVICE_METIS) ||
->>>>>>> upstream/master
-#ifdef USBOZY
-              (protocol==ORIGINAL_PROTOCOL && device==DEVICE_OZY) ||
-#endif
-              (protocol==NEW_PROTOCOL && device==NEW_DEVICE_ATLAS)) {
-
-            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 (int 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;
-    }
-  }
-
-  int n_adc=1;
-  switch(protocol) {
-    case ORIGINAL_PROTOCOL:
-      switch(device) {
-        case DEVICE_METIS:
-          n_adc=1;  // FIX for multiple Mercury cards
-          break;
-        case DEVICE_HERMES:
-        case DEVICE_HERMES_LITE:
-          n_adc=1;
-          break;
-        default: 
-          n_adc=2;
-          break;
-      }
-      break;
-    case NEW_PROTOCOL:
-      switch(device) {
-        case NEW_DEVICE_ATLAS:
-          n_adc=1; // FIX for multiple Mercury cards
-          break;
-        case NEW_DEVICE_HERMES:
-        case NEW_DEVICE_HERMES2:
-        case NEW_DEVICE_HERMES_LITE:
-          n_adc=1;
-          break;
-        default:
-          n_adc=2;
-          break;
-      }
-      break;
-    default:
-      break;
-  }
-
-  if(n_adc>1) {
-    for(i=0;i<n_adc;i++) {
-      sprintf(label,"ADC-%d",i);
-      if(i==0) {
-        adc_b=gtk_radio_button_new_with_label(NULL,label);
-      } else {
-        adc_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(adc_b),label);
-      }
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (adc_b), active_receiver->adc==i);
-      gtk_grid_attach(GTK_GRID(grid),adc_b,x,2+i,1,1);
-      g_signal_connect(adc_b,"pressed",G_CALLBACK(adc_cb),(gpointer)(long)i);
-    }
-    x++;
-  }
-
-
-  int row=0;
-  if(n_output_devices>0) {
-    GtkWidget *local_audio_b=gtk_check_button_new_with_label("Local Audio Output");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (local_audio_b), active_receiver->local_audio);
-    gtk_widget_show(local_audio_b);
-    gtk_grid_attach(GTK_GRID(grid),local_audio_b,x,++row,1,1);
-    g_signal_connect(local_audio_b,"toggled",G_CALLBACK(local_audio_cb),NULL);
-
-    if(active_receiver->audio_device==-1) active_receiver->audio_device=0;
-
-    GtkWidget *output=NULL;
-    for(i=0;i<n_output_devices;i++) {
-      output=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(output),output_devices[i]);
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (output), active_receiver->audio_device==i);
-      gtk_widget_show(output);
-      gtk_grid_attach(GTK_GRID(grid),output,x,++row,1,1);
-      g_signal_connect(output,"pressed",G_CALLBACK(local_output_changed_cb),(gpointer)(long)i);
-    }
-
-    row=0;
-    x++;
-
-    GtkWidget *stereo_b=gtk_radio_button_new_with_label(NULL,"Stereo");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (stereo_b), active_receiver->audio_channel==STEREO);
-    gtk_widget_show(stereo_b);
-    gtk_grid_attach(GTK_GRID(grid),stereo_b,x,++row,1,1);
-    g_signal_connect(stereo_b,"toggled",G_CALLBACK(audio_channel_cb),(gpointer)STEREO);
-
-    GtkWidget *left_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(stereo_b),"Left");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (left_b), active_receiver->audio_channel==LEFT);
-    gtk_widget_show(left_b);
-    gtk_grid_attach(GTK_GRID(grid),left_b,x,++row,1,1);
-    g_signal_connect(left_b,"toggled",G_CALLBACK(audio_channel_cb),(gpointer)LEFT);
-
-    GtkWidget *right_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(left_b),"Right");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (right_b), active_receiver->audio_channel==RIGHT);
-    gtk_widget_show(right_b);
-    gtk_grid_attach(GTK_GRID(grid),right_b,x,++row,1,1);
-    g_signal_connect(right_b,"toggled",G_CALLBACK(audio_channel_cb),(gpointer)RIGHT);
-  }
-
-  GtkWidget *mute_audio_b=gtk_check_button_new_with_label("Mute when not active");
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mute_audio_b), active_receiver->mute_when_not_active);
-  gtk_widget_show(mute_audio_b);
-  gtk_grid_attach(GTK_GRID(grid),mute_audio_b,x,++row,1,1);
-  g_signal_connect(mute_audio_b,"toggled",G_CALLBACK(mute_audio_cb),NULL);
-  
-  row++;
-
-  GtkWidget *mute_radio_b=gtk_check_button_new_with_label("Mute audio to radio");
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mute_radio_b), active_receiver->mute_radio);
-  gtk_widget_show(mute_radio_b);
-  gtk_grid_attach(GTK_GRID(grid),mute_radio_b,x,++row,1,1);
-  g_signal_connect(mute_radio_b,"toggled",G_CALLBACK(mute_radio_cb),NULL);
-
-  gtk_container_add(GTK_CONTAINER(content),grid);
-
-  sub_menu=dialog;
-
-  gtk_widget_show_all(dialog);
-
-}
-
diff --git a/toolbar.c.orig b/toolbar.c.orig
deleted file mode 100644 (file)
index 9343408..0000000
+++ /dev/null
@@ -1,883 +0,0 @@
-/* Copyright (C)
-* 2015 - John Melton, G0ORX/N6LYT
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*
-*/
-
-#include <gtk/gtk.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <string.h>
-#ifdef GPIO
-#include "gpio.h"
-#endif
-#include "toolbar.h"
-#include "mode.h"
-#include "filter.h"
-#include "frequency.h"
-#include "bandstack.h"
-#include "band.h"
-#include "discovered.h"
-#include "new_protocol.h"
-#include "vfo.h"
-#include "alex.h"
-#include "agc.h"
-#include "channel.h"
-#include "wdsp.h"
-#include "radio.h"
-#include "receiver.h"
-#include "property.h"
-#include "new_menu.h"
-<<<<<<< HEAD
-#ifdef RADIOBERRY
-#include "radioberry.h"        
-#endif
-=======
-#include "button_text.h"
->>>>>>> upstream/master
-
-#define MAX_FUNCTION 3
-int function=0;
-
-static int width;
-static int height;
-
-static GtkWidget *parent_window;
-static GtkWidget *toolbar;
-
-static GtkWidget *last_dialog;
-
-static GtkWidget *sim_mox;
-static GtkWidget *sim_s1;
-static GtkWidget *sim_s2;
-static GtkWidget *sim_s3;
-static GtkWidget *sim_s4;
-static GtkWidget *sim_s5;
-static GtkWidget *sim_s6;
-static GtkWidget *sim_function;
-
-
-static GtkWidget *last_band;
-static GtkWidget *last_bandstack;
-static GtkWidget *last_mode;
-static GtkWidget *last_filter;
-
-static GdkRGBA white;
-static GdkRGBA gray;
-
-static gint rit_timer;
-
-static gboolean rit_timer_cb(gpointer data) {
-  int i=(int)data;
-  vfo[active_receiver->id].rit+=(i*rit_increment);
-  if(vfo[active_receiver->id].rit>1000) vfo[active_receiver->id].rit=1000;
-  if(vfo[active_receiver->id].rit<-1000) vfo[active_receiver->id].rit=-1000;
-  vfo_update(NULL);
-  return TRUE;
-}
-
-void update_toolbar_labels() {
-  switch(function) {
-    case 0:
-      gtk_button_set_label(GTK_BUTTON(sim_mox),"Mox");
-      gtk_button_set_label(GTK_BUTTON(sim_s1),"Band");
-      gtk_button_set_label(GTK_BUTTON(sim_s2),"BStack");
-      gtk_button_set_label(GTK_BUTTON(sim_s3),"Mode");
-      gtk_button_set_label(GTK_BUTTON(sim_s4),"Filter");
-      gtk_button_set_label(GTK_BUTTON(sim_s5),"Noise");
-      gtk_button_set_label(GTK_BUTTON(sim_s6),"AGC");
-      set_button_text_color(sim_s1,"black");
-      set_button_text_color(sim_s2,"black");
-      break;
-
-    case 1:
-      gtk_button_set_label(GTK_BUTTON(sim_mox),"Mox");
-      gtk_button_set_label(GTK_BUTTON(sim_s1),"Lock");
-      gtk_button_set_label(GTK_BUTTON(sim_s2),"CTUN");
-      gtk_button_set_label(GTK_BUTTON(sim_s3),"A>B");
-      gtk_button_set_label(GTK_BUTTON(sim_s4),"A<B");
-      gtk_button_set_label(GTK_BUTTON(sim_s5),"A<>B");
-      gtk_button_set_label(GTK_BUTTON(sim_s6),"Split");
-      break;
-    case 2:
-      gtk_button_set_label(GTK_BUTTON(sim_mox),"Mox");
-      gtk_button_set_label(GTK_BUTTON(sim_s1),"Freq");
-      gtk_button_set_label(GTK_BUTTON(sim_s2),"Mem");
-      gtk_button_set_label(GTK_BUTTON(sim_s3),"Vox");
-      gtk_button_set_label(GTK_BUTTON(sim_s4),"RIT+");
-      gtk_button_set_label(GTK_BUTTON(sim_s5),"RIT-");
-      gtk_button_set_label(GTK_BUTTON(sim_s6),"");
-      if(full_tune) {
-        set_button_text_color(sim_s1,"red");
-      }
-      if(memory_tune) {
-        set_button_text_color(sim_s2,"red");
-      }
-      break;
-    case 3:
-      gtk_button_set_label(GTK_BUTTON(sim_mox),"Tune");
-      if(OCtune!=0 && OCfull_tune_time!=0) {
-        gtk_button_set_label(GTK_BUTTON(sim_s1),"Full");
-      } else {
-        gtk_button_set_label(GTK_BUTTON(sim_s1),"");
-      }
-      if(OCtune!=0 && OCmemory_tune_time!=0) {
-        gtk_button_set_label(GTK_BUTTON(sim_s2),"Memory");
-      } else {
-        gtk_button_set_label(GTK_BUTTON(sim_s2),"");
-      }
-      gtk_button_set_label(GTK_BUTTON(sim_s3),"");
-      gtk_button_set_label(GTK_BUTTON(sim_s4),"");
-      gtk_button_set_label(GTK_BUTTON(sim_s5),"");
-      gtk_button_set_label(GTK_BUTTON(sim_s6),"");
-      if(full_tune) {
-        set_button_text_color(sim_s1,"red");
-      }
-      if(memory_tune) {
-        set_button_text_color(sim_s2,"red");
-      }
-      break;
-  }
-}
-
-static void close_cb(GtkWidget *widget, gpointer data) {
-  gtk_widget_destroy(last_dialog);
-  last_dialog=NULL;
-}
-
-void band_cb(GtkWidget *widget, gpointer data) {
-  start_band();
-}
-
-void bandstack_cb(GtkWidget *widget, gpointer data) {
-  start_bandstack();
-}
-
-void mode_cb(GtkWidget *widget, gpointer data) {
-  start_mode();
-}
-
-void filter_cb(GtkWidget *widget, gpointer data) {
-  start_filter();
-}
-
-void agc_cb(GtkWidget *widget, gpointer data) {
-  start_agc();
-}
-
-void noise_cb(GtkWidget *widget, gpointer data) {
-  start_noise();
-}
-
-void ctun_cb (GtkWidget *widget, gpointer data) {
-  int id=active_receiver->id;
-  vfo[id].ctun=vfo[id].ctun==1?0:1;
-  if(!vfo[id].ctun) {
-    vfo[id].offset=0;
-  }
-  vfo[id].ctun_frequency=vfo[id].frequency;
-  set_offset(active_receiver,vfo[id].offset);
-  vfo_update(NULL);
-}
-
-static void atob_cb (GtkWidget *widget, gpointer data) {
-  vfo_a_to_b();
-}
-
-static void btoa_cb (GtkWidget *widget, gpointer data) {
-  vfo_b_to_a();
-}
-
-static void aswapb_cb (GtkWidget *widget, gpointer data) {
-  vfo_a_swap_b();
-}
-
-static void split_cb (GtkWidget *widget, gpointer data) {
-  split=split==1?0:1;
-  if(split) {
-    tx_set_mode(transmitter,vfo[VFO_B].mode);
-  } else {
-    tx_set_mode(transmitter,vfo[VFO_A].mode);
-  }
-  vfo_update(NULL);
-}
-
-static void rit_cb(GtkWidget *widget, gpointer data) {
-  int i=(int)data;
-  vfo[active_receiver->id].rit+=i*rit_increment;
-  if(vfo[active_receiver->id].rit>1000) vfo[active_receiver->id].rit=1000;
-  if(vfo[active_receiver->id].rit<-1000) vfo[active_receiver->id].rit=-1000;
-  vfo_update(NULL);
-  rit_timer=g_timeout_add(200,rit_timer_cb,(void *)i);
-}
-
-static void freq_cb(GtkWidget *widget, gpointer data) {
-  start_vfo();
-}
-
-static void mem_cb(GtkWidget *widget, gpointer data) {
-  start_store();
-}
-
-static void vox_cb(GtkWidget *widget, gpointer data) {
-  vox=vox==1?0:1;
-  vfo_update(NULL);
-}
-
-static void stop() {
-#ifdef RADIOBERRY
-       if(protocol==RADIOBERRY_PROTOCOL) {
-               radioberry_protocol_stop();
-       }
-#endif
-  if(protocol==ORIGINAL_PROTOCOL) {
-    old_protocol_stop();
-  } else {
-    new_protocol_stop();
-  }
-#ifdef GPIO
-  gpio_close();
-#endif
-}
-
-static void yes_cb(GtkWidget *widget, gpointer data) {
-  stop();
-  _exit(0);
-}
-
-static void halt_cb(GtkWidget *widget, gpointer data) {
-  stop();
-  system("shutdown -h -P now");
-  _exit(0);
-}
-
-static void exit_cb(GtkWidget *widget, gpointer data) {
-
-  radioSaveState();
-
-  GtkWidget *dialog=gtk_dialog_new_with_buttons("Exit",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
-
-  GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
-  GtkWidget *grid=gtk_grid_new();
-
-  gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
-  gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
-
-  GtkWidget *label=gtk_label_new("Exit?");
-  //gtk_widget_override_font(label, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show(label);
-  gtk_grid_attach(GTK_GRID(grid),label,1,0,1,1);
-
-  GtkWidget *b_yes=gtk_button_new_with_label("Yes");
-  //gtk_widget_override_font(b_yes, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show(b_yes);
-  gtk_grid_attach(GTK_GRID(grid),b_yes,0,1,1,1);
-  g_signal_connect(b_yes,"pressed",G_CALLBACK(yes_cb),NULL);
-
-  GtkWidget *b_halt=gtk_button_new_with_label("Halt System");
-  //gtk_widget_override_font(b_halt, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show(b_halt);
-  gtk_grid_attach(GTK_GRID(grid),b_halt,2,1,1,1);
-  g_signal_connect(b_halt,"pressed",G_CALLBACK(halt_cb),NULL);
-
-  gtk_container_add(GTK_CONTAINER(content),grid);
-  GtkWidget *close_button=gtk_dialog_add_button(GTK_DIALOG(dialog),"Cancel",GTK_RESPONSE_OK);
-  //gtk_widget_override_font(close_button, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show_all(dialog);
-
-  g_signal_connect_swapped (dialog,
-                           "response",
-                           G_CALLBACK (gtk_widget_destroy),
-                           dialog);
-
-  int result=gtk_dialog_run(GTK_DIALOG(dialog));
-
-}
-
-static void cw_keyer_internal_cb(GtkWidget *widget, gpointer data) {
-  cw_keyer_internal=cw_keyer_internal==1?0:1;
-  cw_changed();
-}
-
-static void cw_keyer_speed_value_changed_cb(GtkWidget *widget, gpointer data) {
-  cw_keyer_speed=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
-  cw_changed();
-}
-
-static void cw_breakin_cb(GtkWidget *widget, gpointer data) {
-  cw_breakin=cw_breakin==1?0:1;
-  cw_changed();
-}
-
-static void cw_keyer_hang_time_value_changed_cb(GtkWidget *widget, gpointer data) {
-  cw_keyer_hang_time=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();
-}
-
-static void cw_keyer_mode_cb(GtkWidget *widget, gpointer data) {
-  cw_keyer_mode=(int)data;
-  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));
-}
-
-static void panadapter_high_value_changed_cb(GtkWidget *widget, gpointer data) {
-  panadapter_high=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
-}
-
-static void panadapter_low_value_changed_cb(GtkWidget *widget, gpointer data) {
-  panadapter_low=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
-}
-
-static void waterfall_high_value_changed_cb(GtkWidget *widget, gpointer data) {
-  waterfall_high=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
-}
-
-static void waterfall_low_value_changed_cb(GtkWidget *widget, gpointer data) {
-  waterfall_low=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
-}
-
-static void waterfall_automatic_cb(GtkWidget *widget, gpointer data) {
-  waterfall_automatic=waterfall_automatic==1?0:1;
-}
-
-static void config_cb(GtkWidget *widget, gpointer data) {
-  GtkWidget *dialog=gtk_dialog_new_with_buttons("Audio",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
-  GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
-  GtkWidget *grid=gtk_grid_new();
-  gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
-  gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
-
-  GtkWidget *display_label=gtk_label_new("Display: ");
-  //gtk_widget_override_font(display_label, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show(display_label);
-  gtk_grid_attach(GTK_GRID(grid),display_label,0,0,1,1);
-
-  GtkWidget *panadapter_high_label=gtk_label_new("Panadapter High: ");
-  //gtk_widget_override_font(panadapter_high_label, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show(panadapter_high_label);
-  gtk_grid_attach(GTK_GRID(grid),panadapter_high_label,0,1,1,1);
-
-  GtkWidget *panadapter_high_r=gtk_spin_button_new_with_range(-220.0,100.0,1.0);
-  //gtk_widget_override_font(panadapter_high_r, pango_font_description_from_string("Arial 18"));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(panadapter_high_r),(double)panadapter_high);
-  gtk_widget_show(panadapter_high_r);
-  gtk_grid_attach(GTK_GRID(grid),panadapter_high_r,1,1,1,1);
-  g_signal_connect(panadapter_high_r,"value_changed",G_CALLBACK(panadapter_high_value_changed_cb),NULL);
-
-  GtkWidget *panadapter_low_label=gtk_label_new("Panadapter Low: ");
-  //gtk_widget_override_font(panadapter_low_label, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show(panadapter_low_label);
-  gtk_grid_attach(GTK_GRID(grid),panadapter_low_label,0,2,1,1);
-
-  GtkWidget *panadapter_low_r=gtk_spin_button_new_with_range(-220.0,100.0,1.0);
-  //gtk_widget_override_font(panadapter_low_r, pango_font_description_from_string("Arial 18"));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(panadapter_low_r),(double)panadapter_low);
-  gtk_widget_show(panadapter_low_r);
-  gtk_grid_attach(GTK_GRID(grid),panadapter_low_r,1,2,1,1);
-  g_signal_connect(panadapter_low_r,"value_changed",G_CALLBACK(panadapter_low_value_changed_cb),NULL);
-
-  GtkWidget *waterfall_automatic_label=gtk_label_new("Waterfall Automatic: ");
-  //gtk_widget_override_font(waterfall_automatic_label, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show(waterfall_automatic_label);
-  gtk_grid_attach(GTK_GRID(grid),waterfall_automatic_label,0,3,1,1);
-
-  GtkWidget *waterfall_automatic_b=gtk_check_button_new();
-  ////gtk_widget_override_font(waterfall_automatic_b, pango_font_description_from_string("Arial 18"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (waterfall_automatic_b), waterfall_automatic);
-  gtk_widget_show(waterfall_automatic_b);
-  gtk_grid_attach(GTK_GRID(grid),waterfall_automatic_b,1,3,1,1);
-  g_signal_connect(waterfall_automatic_b,"toggled",G_CALLBACK(waterfall_automatic_cb),NULL);
-
-  GtkWidget *waterfall_high_label=gtk_label_new("Waterfall High: ");
-  //gtk_widget_override_font(waterfall_high_label, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show(waterfall_high_label);
-  gtk_grid_attach(GTK_GRID(grid),waterfall_high_label,0,4,1,1);
-
-  GtkWidget *waterfall_high_r=gtk_spin_button_new_with_range(-220.0,100.0,1.0);
-  //gtk_widget_override_font(waterfall_high_r, pango_font_description_from_string("Arial 18"));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(waterfall_high_r),(double)waterfall_high);
-  gtk_widget_show(waterfall_high_r);
-  gtk_grid_attach(GTK_GRID(grid),waterfall_high_r,1,4,1,1);
-  g_signal_connect(waterfall_high_r,"value_changed",G_CALLBACK(waterfall_high_value_changed_cb),NULL);
-
-  GtkWidget *waterfall_low_label=gtk_label_new("Waterfall Low: ");
-  //gtk_widget_override_font(waterfall_low_label, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show(waterfall_low_label);
-  gtk_grid_attach(GTK_GRID(grid),waterfall_low_label,0,5,1,1);
-
-  GtkWidget *waterfall_low_r=gtk_spin_button_new_with_range(-220.0,100.0,1.0);
-  //gtk_widget_override_font(waterfall_low_r, pango_font_description_from_string("Arial 18"));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(waterfall_low_r),(double)waterfall_low);
-  gtk_widget_show(waterfall_low_r);
-  gtk_grid_attach(GTK_GRID(grid),waterfall_low_r,1,5,1,1);
-  g_signal_connect(waterfall_low_r,"value_changed",G_CALLBACK(waterfall_low_value_changed_cb),NULL);
-
-
-  GtkWidget *vfo_encoder_label=gtk_label_new("VFO Encoder: ");
-  //gtk_widget_override_font(vfo_encoder_label, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show(vfo_encoder_label);
-  gtk_grid_attach(GTK_GRID(grid),vfo_encoder_label,0,6,1,1);
-
-  GtkWidget *vfo_divisor_label=gtk_label_new("Divisor: ");
-  //gtk_widget_override_font(vfo_divisor_label, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show(vfo_divisor_label);
-  gtk_grid_attach(GTK_GRID(grid),vfo_divisor_label,0,7,1,1);
-
-  GtkWidget *vfo_divisor=gtk_spin_button_new_with_range(1.0,60.0,1.0);
-  //gtk_widget_override_font(vfo_divisor, pango_font_description_from_string("Arial 18"));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(vfo_divisor),(double)vfo_encoder_divisor);
-  gtk_widget_show(vfo_divisor);
-  gtk_grid_attach(GTK_GRID(grid),vfo_divisor,1,7,1,1);
-  g_signal_connect(vfo_divisor,"value_changed",G_CALLBACK(vfo_divisor_value_changed_cb),NULL);
-
-  gtk_container_add(GTK_CONTAINER(content),grid);
-  GtkWidget *close_button=gtk_dialog_add_button(GTK_DIALOG(dialog),"Close",GTK_RESPONSE_OK);
-  //gtk_widget_override_font(close_button, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show_all(dialog);
-
-  g_signal_connect_swapped (dialog,
-                           "response",
-                           G_CALLBACK (gtk_widget_destroy),
-                           dialog);
-
-  int result=gtk_dialog_run(GTK_DIALOG(dialog));
-}
-
-static void cw_cb(GtkWidget *widget, gpointer data) {
-  GtkWidget *dialog=gtk_dialog_new_with_buttons("CW",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
-  GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
-  GtkWidget *grid=gtk_grid_new();
-  //gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
-  gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
-
-
-  GtkWidget *cw_keyer_internal_b=gtk_check_button_new_with_label("CW Internal - Speed (WPM)");
-  //gtk_widget_override_font(cw_keyer_internal_b, pango_font_description_from_string("Arial 18"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_keyer_internal_b), cw_keyer_internal);
-  gtk_widget_show(cw_keyer_internal_b);
-  gtk_grid_attach(GTK_GRID(grid),cw_keyer_internal_b,0,0,1,1);
-  g_signal_connect(cw_keyer_internal_b,"toggled",G_CALLBACK(cw_keyer_internal_cb),NULL);
-
-  GtkWidget *cw_keyer_speed_b=gtk_spin_button_new_with_range(1.0,60.0,1.0);
-  //gtk_widget_override_font(cw_keyer_speed_b, pango_font_description_from_string("Arial 18"));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(cw_keyer_speed_b),(double)cw_keyer_speed);
-  gtk_widget_show(cw_keyer_speed_b);
-  gtk_grid_attach(GTK_GRID(grid),cw_keyer_speed_b,1,0,1,1);
-  g_signal_connect(cw_keyer_speed_b,"value_changed",G_CALLBACK(cw_keyer_speed_value_changed_cb),NULL);
-
-  GtkWidget *cw_breakin_b=gtk_check_button_new_with_label("CW Break In - Delay (ms)");
-  //gtk_widget_override_font(cw_breakin_b, pango_font_description_from_string("Arial 18"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_breakin_b), cw_breakin);
-  gtk_widget_show(cw_breakin_b);
-  gtk_grid_attach(GTK_GRID(grid),cw_breakin_b,0,1,1,1);
-  g_signal_connect(cw_breakin_b,"toggled",G_CALLBACK(cw_breakin_cb),NULL);
-
-  GtkWidget *cw_keyer_hang_time_b=gtk_spin_button_new_with_range(0.0,1000.0,1.0);
-  //gtk_widget_override_font(cw_keyer_hang_time_b, pango_font_description_from_string("Arial 18"));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(cw_keyer_hang_time_b),(double)cw_keyer_hang_time);
-  gtk_widget_show(cw_keyer_hang_time_b);
-  gtk_grid_attach(GTK_GRID(grid),cw_keyer_hang_time_b,1,1,1,1);
-  g_signal_connect(cw_keyer_hang_time_b,"value_changed",G_CALLBACK(cw_keyer_hang_time_value_changed_cb),NULL);
-  
-  GtkWidget *cw_keyer_straight=gtk_radio_button_new_with_label(NULL,"CW KEYER STRAIGHT");
-  //gtk_widget_override_font(cw_keyer_straight, pango_font_description_from_string("Arial 18"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_keyer_straight), cw_keyer_mode==KEYER_STRAIGHT);
-  gtk_widget_show(cw_keyer_straight);
-  gtk_grid_attach(GTK_GRID(grid),cw_keyer_straight,0,2,1,1);
-  g_signal_connect(cw_keyer_straight,"pressed",G_CALLBACK(cw_keyer_mode_cb),(gpointer *)KEYER_STRAIGHT);
-
-  GtkWidget *cw_keyer_mode_a=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(cw_keyer_straight),"CW KEYER MODE A");
-  //gtk_widget_override_font(cw_keyer_mode_a, pango_font_description_from_string("Arial 18"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_keyer_mode_a), cw_keyer_mode==KEYER_MODE_A);
-  gtk_widget_show(cw_keyer_mode_a);
-  gtk_grid_attach(GTK_GRID(grid),cw_keyer_mode_a,0,3,1,1);
-  g_signal_connect(cw_keyer_mode_a,"pressed",G_CALLBACK(cw_keyer_mode_cb),(gpointer *)KEYER_MODE_A);
-
-  GtkWidget *cw_keyer_mode_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(cw_keyer_mode_a),"CW KEYER MODE B");
-  //gtk_widget_override_font(cw_keyer_mode_b, pango_font_description_from_string("Arial 18"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_keyer_mode_b), cw_keyer_mode==KEYER_MODE_B);
-  gtk_widget_show(cw_keyer_mode_b);
-  gtk_grid_attach(GTK_GRID(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);
-
-  gtk_container_add(GTK_CONTAINER(content),grid);
-  GtkWidget *close_button=gtk_dialog_add_button(GTK_DIALOG(dialog),"Close",GTK_RESPONSE_OK);
-  //gtk_widget_override_font(close_button, pango_font_description_from_string("Arial 18"));
-  gtk_widget_show_all(dialog);
-
-  g_signal_connect_swapped (dialog,
-                           "response",
-                           G_CALLBACK (gtk_widget_destroy),
-                           dialog);
-
-  int result=gtk_dialog_run(GTK_DIALOG(dialog));
-}
-
-void lock_cb(GtkWidget *widget, gpointer data) {
-  locked=locked==1?0:1;
-  vfo_update(NULL);
-}
-
-void mox_cb(GtkWidget *widget, gpointer data) {
-  if(getTune()==1) {
-    setTune(0);
-  }
-  if(getMox()==1) {
-    setMox(0);
-    if(ptt) {
-      ptt=0;
-    }
-  } else if(canTransmit() || tx_out_of_band) {
-    setMox(1);
-  }
-  g_idle_add(vfo_update,NULL);
-}
-
-int mox_update(void *data) {
-  if(getTune()==1) {
-    setTune(0);
-  }
-  setMox((int)data);
-  return 0;
-}
-
-int ptt_update(void *data) {
-  int mode;
-  if(split) {
-    mode=vfo[1].mode;
-  } else {
-    mode=vfo[0].mode;
-  }
-  if(protocol==NEW_PROTOCOL || (mode!=modeCWU && mode!=modeCWL)) {
-    mox_cb(NULL,NULL);
-  }
-  return 0;
-}
-
-void tune_cb(GtkWidget *widget, gpointer data) {
-  if(getMox()==1) {
-    setMox(0);
-  }
-  if(getTune()==1) {
-    setTune(0);
-  } else if(canTransmit() || tx_out_of_band) {
-    setTune(1);
-  }
-  vfo_update(NULL);
-}
-
-void sim_s1_pressed_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-      band_cb(widget,data);
-      break;
-    case 1:
-      lock_cb(widget,data);
-      break;
-    case 2:
-      freq_cb(widget,data);
-      break;
-    case 3:
-      full_tune=full_tune==1?0:1;
-      if(full_tune) {
-        set_button_text_color(sim_s2,"black");
-        set_button_text_color(sim_s1,"red");
-      } else {
-        set_button_text_color(sim_s1,"black");
-      }
-      break;
-  }
-}
-
-void sim_s1_released_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-      break;
-    case 1:
-      break;
-    case 2:
-      break;
-    case 3:
-      break;
-  }
-}
-
-void sim_s2_pressed_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-      bandstack_cb(widget,data);
-      break;
-    case 1:
-      ctun_cb(widget,data);
-      break;
-    case 2:
-      mem_cb(widget,data);
-      break;
-    case 3:
-      memory_tune=memory_tune==1?0:1;
-      if(memory_tune) {
-        set_button_text_color(sim_s1,"black");
-        set_button_text_color(sim_s2,"red");
-      } else {
-        set_button_text_color(sim_s2,"black");
-      }
-      break;
-  }
-}
-
-void sim_s2_released_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-      break;
-    case 1:
-      break;
-    case 2:
-      break;
-    case 3:
-      break;
-  }
-}
-
-
-void sim_s3_pressed_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-      mode_cb(widget,data);
-      break;
-    case 1:
-      // A>B
-      atob_cb(widget,data);
-      break;
-    case 2:
-      vox_cb(widget,data);
-      break;
-    case 3:
-      break;
-  }
-}
-
-void sim_s3_released_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-      break;
-    case 1:
-      break;
-    case 2:
-      break;
-    case 3:
-      break;
-  }
-}
-
-void sim_s4_pressed_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-      filter_cb(widget,data);
-      break;
-    case 1:
-      // A<B
-      btoa_cb(widget,data);
-      break;
-    case 2:
-      rit_cb(widget,(void *)1);
-      break;
-    case 3:
-      break;
-  }
-}
-
-void sim_s4_released_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-      break;
-    case 1:
-      break;
-    case 2:
-      g_source_remove(rit_timer);
-      break;
-    case 3:
-      break;
-  }
-}
-
-void sim_s5_pressed_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-      noise_cb(widget,data);
-      break;
-    case 1:
-      // A<>B
-      aswapb_cb(widget,data);
-      break;
-    case 2:
-      rit_cb(widget,(void *)-1);
-      break;
-    case 3:
-      break;
-  }
-}
-
-void sim_s5_released_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-      break;
-    case 1:
-      break;
-    case 2:
-      g_source_remove(rit_timer);
-      break;
-    case 3:
-      break;
-  }
-}
-
-void sim_s6_pressed_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-      agc_cb(widget,data);
-      break;
-    case 1:
-      split_cb(widget,data);
-      break;
-    case 2:
-      break;
-    case 3:
-      break;
-  }
-}
-
-void sim_s6_released_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-      break;
-    case 1:
-      break;
-    case 2:
-      break;
-    case 3:
-      break;
-  }
-}
-
-void sim_mox_cb(GtkWidget *widget, gpointer data) {
-  switch(function) {
-    case 0:
-    case 1:
-    case 2:
-      mox_cb((GtkWidget *)NULL, (gpointer)NULL);
-      break;
-    case 3:
-      tune_cb((GtkWidget *)NULL, (gpointer)NULL);
-      break;
-  }
-}
-
-void sim_function_cb(GtkWidget *widget, gpointer data) {
-  function++;
-  if(function>MAX_FUNCTION) {
-    function=0;
-  }
-  update_toolbar_labels();
-  vfo_update(NULL);
-}
-
-GtkWidget *toolbar_init(int my_width, int my_height, GtkWidget* parent) {
-    width=my_width;
-    height=my_height;
-    parent_window=parent;
-
-    int button_width=width/8;
-
-    fprintf(stderr,"toolbar_init: width=%d height=%d button_width=%d\n", width,height,button_width);
-
-    white.red=1.0;
-    white.green=1.0;
-    white.blue=1.0;
-    white.alpha=0.0;
-
-    gray.red=0.25;
-    gray.green=0.25;
-    gray.blue=0.25;
-    gray.alpha=0.0;
-
-    toolbar=gtk_grid_new();
-    gtk_widget_set_size_request (toolbar, width, height);
-    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"));
-    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"));
-    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"));
-    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"));
-    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"));
-    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"));
-    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"));
-    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"));
-    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);
-
-    //update_toolbar_labels();
-
-    last_dialog=NULL;
-
-    gtk_widget_show_all(toolbar);
-
-  return toolbar;
-}
diff --git a/transmitter.c.orig b/transmitter.c.orig
deleted file mode 100644 (file)
index 1adc8d6..0000000
+++ /dev/null
@@ -1,1013 +0,0 @@
-/* Copyright (C)
-* 2017 - John Melton, G0ORX/N6LYT
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*
-*/
-
-#include <gtk/gtk.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <wdsp.h>
-
-#include "alex.h"
-#include "band.h"
-#include "bandstack.h"
-#include "channel.h"
-#include "main.h"
-#include "receiver.h"
-#include "meter.h"
-#include "mode.h"
-#include "property.h"
-#include "radio.h"
-#include "vfo.h"
-#include "vox.h"
-#include "meter.h"
-#include "toolbar.h"
-#include "tx_panadapter.h"
-#include "waterfall.h"
-#include "receiver.h"
-#include "transmitter.h"
-#include "new_protocol.h"
-#include "old_protocol.h"
-#ifdef FREEDV
-#include "freedv.h"
-#endif
-#include "audio_waterfall.h"
-#include "ext.h"
-<<<<<<< HEAD
-
-double getNextSideToneSample();
-=======
->>>>>>> upstream/master
-
-#define min(x,y) (x<y?x:y)
-#define max(x,y) (x<y?y:x)
-
-static int filterLow;
-static int filterHigh;
-
-static int waterfall_samples=0;
-static int waterfall_resample=8;
-
-<<<<<<< HEAD
-int key = 0;
-
-=======
->>>>>>> upstream/master
-static gint update_out_of_band(gpointer data) {
-  TRANSMITTER *tx=(TRANSMITTER *)data;
-  tx->out_of_band=0;
-  vfo_update();
-  return FALSE;
-}
-
-void transmitter_set_out_of_band(TRANSMITTER *tx) {
-  tx->out_of_band=1;
-  tx->out_of_band_timer_id=gdk_threads_add_timeout_full(G_PRIORITY_HIGH_IDLE,1000,update_out_of_band, tx, NULL);
-}
-
-void transmitter_set_deviation(TRANSMITTER *tx) {
-  SetTXAFMDeviation(tx->id, (double)tx->deviation);
-}
-
-void transmitter_set_am_carrier_level(TRANSMITTER *tx) {
-  SetTXAAMCarrierLevel(tx->id, tx->am_carrier_level);
-}
-
-void transmitter_set_ctcss(TRANSMITTER *tx,int run,double frequency) {
-  tx->ctcss=run;
-  tx->ctcss_frequency=frequency;
-fprintf(stderr,"transmitter_set_ctcss: ctcss_frequency=%f run=%d\n",tx->ctcss_frequency,tx->ctcss);
-  SetTXACTCSSFreq(tx->id, tx->ctcss_frequency);
-  SetTXACTCSSRun(tx->id, tx->ctcss);
-}
-
-void transmitter_set_compressor_level(TRANSMITTER *tx,double level) {
-  tx->compressor_level=level;
-  SetTXACompressorGain(tx->id, tx->compressor_level);
-}
-
-void transmitter_set_compressor(TRANSMITTER *tx,int state) {
-  tx->compressor=state;
-  SetTXACompressorRun(tx->id, tx->compressor);
-}
-
-void reconfigure_transmitter(TRANSMITTER *tx,int height) {
-  gtk_widget_set_size_request(tx->panadapter, tx->width, height);
-}
-
-void transmitter_save_state(TRANSMITTER *tx) {
-  char name[128];
-  char value[128];
-
-  sprintf(name,"transmitter.%d.fps",tx->id);
-  sprintf(value,"%d",tx->fps);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.filter_low",tx->id);
-  sprintf(value,"%d",tx->filter_low);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.filter_high",tx->id);
-  sprintf(value,"%d",tx->filter_high);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.alex_antenna",tx->id);
-  sprintf(value,"%d",tx->alex_antenna);
-  setProperty(name,value);
-
-  sprintf(name,"transmitter.%d.panadapter_low",tx->id);
-  sprintf(value,"%d",tx->panadapter_low);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.panadapter_high",tx->id);
-  sprintf(value,"%d",tx->panadapter_high);
-  setProperty(name,value);
-
-  sprintf(name,"transmitter.%d.local_microphone",tx->id);
-  sprintf(value,"%d",tx->local_microphone);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.input_device",tx->id);
-  sprintf(value,"%d",tx->input_device);
-  setProperty(name,value);
-
-  sprintf(name,"transmitter.%d.low_latency",tx->id);
-  sprintf(value,"%d",tx->low_latency);
-  setProperty(name,value);
-#ifdef PURESIGNAL
-  sprintf(name,"transmitter.%d.puresignal",tx->id);
-  sprintf(value,"%d",tx->puresignal);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.auto_on",tx->id);
-  sprintf(value,"%d",tx->auto_on);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.single_on",tx->id);
-  sprintf(value,"%d",tx->single_on);
-  setProperty(name,value);
-#endif
-  sprintf(name,"transmitter.%d.ctcss",tx->id);
-  sprintf(value,"%d",tx->ctcss);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.ctcss_frequency",tx->id);
-  sprintf(value,"%f",tx->ctcss_frequency);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.deviation",tx->id);
-  sprintf(value,"%d",tx->deviation);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.am_carrier_level",tx->id);
-  sprintf(value,"%f",tx->am_carrier_level);
-  setProperty(name,value);
-#ifdef FREEDV
-  if(strlen(tx->freedv_text_data)>0) {
-    sprintf(name,"transmitter.%d.freedv_text_data",tx->id);
-    sprintf(value,"%s",tx->freedv_text_data);
-    setProperty(name,value);
-  }
-#endif
-  sprintf(name,"transmitter.%d.drive",tx->id);
-  sprintf(value,"%d",tx->drive);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.tune_percent",tx->id);
-  sprintf(value,"%d",tx->tune_percent);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.tune_use_drive",tx->id);
-  sprintf(value,"%d",tx->tune_use_drive);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.drive_level",tx->id);
-  sprintf(value,"%d",tx->drive_level);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.compressor",tx->id);
-  sprintf(value,"%d",tx->compressor);
-  setProperty(name,value);
-  sprintf(name,"transmitter.%d.compressor_level",tx->id);
-  sprintf(value,"%f",tx->compressor_level);
-  setProperty(name,value);
-}
-
-void transmitter_restore_state(TRANSMITTER *tx) {
-  char name[128];
-  char *value;
-
-  sprintf(name,"transmitter.%d.fps",tx->id);
-  value=getProperty(name);
-  if(value) tx->fps=atoi(value);
-  sprintf(name,"transmitter.%d.filter_low",tx->id);
-  value=getProperty(name);
-  if(value) tx->filter_low=atoi(value);
-  sprintf(name,"transmitter.%d.filter_high",tx->id);
-  value=getProperty(name);
-  if(value) tx->filter_high=atoi(value);
-  sprintf(name,"transmitter.%d.alex_antenna",tx->id);
-  value=getProperty(name);
-  if(value) tx->alex_antenna=atoi(value);
-
-  sprintf(name,"transmitter.%d.panadapter_low",tx->id);
-  value=getProperty(name);
-  if(value) tx->panadapter_low=atoi(value);
-  sprintf(name,"transmitter.%d.panadapter_high",tx->id);
-  value=getProperty(name);
-  if(value) tx->panadapter_high=atoi(value);
-
-  sprintf(name,"transmitter.%d.local_microphone",tx->id);
-  value=getProperty(name);
-  if(value) tx->local_microphone=atoi(value);
-  sprintf(name,"transmitter.%d.input_device",tx->id);
-  value=getProperty(name);
-  if(value) tx->input_device=atoi(value);
-  sprintf(name,"transmitter.%d.low_latency",tx->id);
-  value=getProperty(name);
-  if(value) tx->low_latency=atoi(value);
-#ifdef PURESIGNAL
-  sprintf(name,"transmitter.%d.puresignal",tx->id);
-  value=getProperty(name);
-  if(value) tx->puresignal=atoi(value);
-  sprintf(name,"transmitter.%d.auto_on",tx->id);
-  value=getProperty(name);
-  if(value) tx->auto_on=atoi(value);
-  sprintf(name,"transmitter.%d.single_on",tx->id);
-  value=getProperty(name);
-  if(value) tx->single_on=atoi(value);
-#endif
-  sprintf(name,"transmitter.%d.ctcss",tx->id);
-  value=getProperty(name);
-  if(value) tx->ctcss=atoi(value);
-  sprintf(name,"transmitter.%d.ctcss_frequency",tx->id);
-  value=getProperty(name);
-  if(value) tx->ctcss_frequency=atof(value);
-  sprintf(name,"transmitter.%d.deviation",tx->id);
-  value=getProperty(name);
-  if(value) tx->deviation=atoi(value);
-  sprintf(name,"transmitter.%d.am_carrier_level",tx->id);
-  value=getProperty(name);
-  if(value) tx->am_carrier_level=atof(value);
-#ifdef FREEDV
-  sprintf(name,"transmitter.%d.freedv_text_data",tx->id);
-  value=getProperty(name);
-  if(value) strcpy(tx->freedv_text_data,value);
-#endif
-  sprintf(name,"transmitter.%d.drive",tx->id);
-  value=getProperty(name);
-  if(value) tx->drive=atoi(value);
-  sprintf(name,"transmitter.%d.tune_percent",tx->id);
-  value=getProperty(name);
-  if(value) tx->tune_percent=atoi(value);
-  sprintf(name,"transmitter.%d.tune_use_drive",tx->id);
-  value=getProperty(name);
-  if(value) tx->tune_use_drive=atoi(value);
-  sprintf(name,"transmitter.%d.drive_level",tx->id);
-  value=getProperty(name);
-  if(value) tx->drive_level=atoi(value);
-  sprintf(name,"transmitter.%d.compressor",tx->id);
-  value=getProperty(name);
-  if(value) tx->compressor=atoi(value);
-  sprintf(name,"transmitter.%d.compressor_level",tx->id);
-  value=getProperty(name);
-  if(value) tx->compressor_level=atof(value);
-}
-
-static gboolean update_display(gpointer data) {
-  TRANSMITTER *tx=(TRANSMITTER *)data;
-  int rc;
-
-  int i;
-
-//fprintf(stderr,"update_display: tx id=%d\n",tx->id);
-  if(tx->displaying) {
-#ifdef AUDIO_SAMPLES
-    if(audio_samples!=NULL) {
-      GetPixels(CHANNEL_AUDIO,0,audio_samples,&rc);
-      if(rc) {
-        audio_waterfall_update();
-      }
-    }
-#endif
-#ifdef PURESIGNAL
-    if(tx->puresignal && tx->feedback) {
-      RECEIVER *tx_feedback=receiver[PS_TX_FEEDBACK];
-      GetPixels(tx_feedback->id,0,tx_feedback->pixel_samples,&rc);
-      memcpy(tx->pixel_samples,tx_feedback->pixel_samples,sizeof(float)*tx->pixels);
-    } else {
-#endif
-      GetPixels(tx->id,0,tx->pixel_samples,&rc);
-#ifdef PURESIGNAL
-    }
-#endif
-    if(rc) {
-      tx_panadapter_update(tx);
-    }
-
-    transmitter->alc=GetTXAMeter(tx->id, alc);
-    double constant1=3.3;
-    double constant2=0.095;
-
-#ifdef RADIOBERRY
-       if(protocol==ORIGINAL_PROTOCOL || protocol==RADIOBERRY_PROTOCOL) {
-#else
-       if(protocol==ORIGINAL_PROTOCOL) {
-#endif
-      switch(device) {
-        case DEVICE_METIS:
-          constant1=3.3;
-          constant2=0.09;
-          break;
-        case DEVICE_HERMES:
-          constant1=3.3;
-          constant2=0.095;
-          break;
-        case DEVICE_ANGELIA:
-          constant1=3.3;
-          constant2=0.095;
-          break;
-        case DEVICE_ORION:
-          constant1=5.0;
-          constant2=0.108;
-          break;
-        case DEVICE_ORION2:
-          constant1=5.0;
-          constant2=0.108;
-          break;
-        case DEVICE_HERMES_LITE:
-          break;
-#ifdef RADIOBERRY
-               case RADIOBERRY_SPI_DEVICE:
-                       break;
-#endif
-      }
-
-      int power=alex_forward_power;
-      if(power==0) {
-        power=exciter_power;
-      }
-      double v1;
-      v1=((double)power/4095.0)*constant1;
-      transmitter->fwd=(v1*v1)/constant2;
-
-      power=exciter_power;
-      v1=((double)power/4095.0)*constant1;
-      transmitter->exciter=(v1*v1)/constant2;
-
-      transmitter->rev=0.0;
-      if(alex_forward_power!=0) {
-        power=alex_reverse_power;
-        v1=((double)power/4095.0)*constant1;
-        transmitter->rev=(v1*v1)/constant2;
-      }
-    } else {
-      switch(device) {
-        case NEW_DEVICE_ATLAS:
-          constant1=3.3;
-          constant2=0.09;
-          break;
-        case NEW_DEVICE_HERMES:
-          constant1=3.3;
-          constant2=0.09;
-          break;
-        case NEW_DEVICE_HERMES2:
-          constant1=3.3;
-          constant2=0.095;
-          break;
-        case NEW_DEVICE_ANGELIA:
-          constant1=3.3;
-          constant2=0.095;
-          break;
-        case NEW_DEVICE_ORION:
-          constant1=5.0;
-          constant2=0.108;
-          break;
-        case NEW_DEVICE_ORION2:
-          constant1=5.0;
-          constant2=0.108;
-          break;
-        case NEW_DEVICE_HERMES_LITE:
-          constant1=3.3;
-          constant2=0.09;
-          break;
-#ifdef RADIOBERRY
-               case RADIOBERRY_SPI_DEVICE:
-                       constant1=3.3;
-                       constant2=0.09;
-                       break;
-#endif
-      }
-
-      int power=alex_forward_power;
-      if(power==0) {
-        power=exciter_power;
-      }
-      double v1;
-      v1=((double)power/4095.0)*constant1;
-      transmitter->fwd=(v1*v1)/constant2;
-
-      power=exciter_power;
-      v1=((double)power/4095.0)*constant1;
-      transmitter->exciter=(v1*v1)/constant2;
-
-      transmitter->rev=0.0;
-      if(alex_forward_power!=0) {
-        power=alex_reverse_power;
-        v1=((double)power/4095.0)*constant1;
-        transmitter->rev=(v1*v1)/constant2;
-      }
-    } 
-
-    meter_update(active_receiver,POWER,transmitter->fwd,transmitter->rev,transmitter->exciter,transmitter->alc);
-
-    return TRUE; // keep going
-  }
-  return FALSE; // no more timer events
-}
-
-
-static void init_analyzer(TRANSMITTER *tx) {
-    int flp[] = {0};
-    double keep_time = 0.1;
-    int n_pixout=1;
-    int spur_elimination_ffts = 1;
-    int data_type = 1;
-    int fft_size = 8192;
-    int window_type = 4;
-    double kaiser_pi = 14.0;
-    int overlap = 2048;
-    int clip = 0;
-    int span_clip_l = 0;
-    int span_clip_h = 0;
-    int pixels=tx->pixels;
-    int stitches = 1;
-    int avm = 0;
-    double tau = 0.001 * 120.0;
-    int calibration_data_set = 0;
-    double span_min_freq = 0.0;
-    double span_max_freq = 0.0;
-
-    int max_w = fft_size + (int) min(keep_time * (double) tx->fps, keep_time * (double) fft_size * (double) tx->fps);
-
-    overlap = (int)max(0.0, ceil(fft_size - (double)tx->mic_sample_rate / (double)tx->fps));
-
-    fprintf(stderr,"SetAnalyzer id=%d buffer_size=%d overlap=%d\n",tx->id,tx->output_samples,overlap);
-
-
-    SetAnalyzer(tx->id,
-            n_pixout,
-            spur_elimination_ffts, //number of LO frequencies = number of ffts used in elimination
-            data_type, //0 for real input data (I only); 1 for complex input data (I & Q)
-            flp, //vector with one elt for each LO frequency, 1 if high-side LO, 0 otherwise
-            fft_size, //size of the fft, i.e., number of input samples
-            tx->output_samples, //number of samples transferred for each OpenBuffer()/CloseBuffer()
-            window_type, //integer specifying which window function to use
-            kaiser_pi, //PiAlpha parameter for Kaiser window
-            overlap, //number of samples each fft (other than the first) is to re-use from the previous
-            clip, //number of fft output bins to be clipped from EACH side of each sub-span
-            span_clip_l, //number of bins to clip from low end of entire span
-            span_clip_h, //number of bins to clip from high end of entire span
-            pixels, //number of pixel values to return.  may be either <= or > number of bins
-            stitches, //number of sub-spans to concatenate to form a complete span
-            calibration_data_set, //identifier of which set of calibration data to use
-            span_min_freq, //frequency at first pixel value8192
-            span_max_freq, //frequency at last pixel value
-            max_w //max samples to hold in input ring buffers
-    );
-
-}
-
-static void create_visual(TRANSMITTER *tx) {
-  fprintf(stderr,"transmitter: create_visual: id=%d\n",tx->id);
-
-  tx->panel=gtk_fixed_new();
-  gtk_widget_set_size_request (tx->panel, tx->width, tx->height);
-
-  if(tx->display_panadapter) {
-    tx_panadapter_init(tx,tx->width,tx->height);
-    gtk_fixed_put(GTK_FIXED(tx->panel),tx->panadapter,0,0);
-  }
-
-  gtk_widget_show_all(tx->panel);
-
-}
-
-TRANSMITTER *create_transmitter(int id, int buffer_size, int fft_size, int fps, int width, int height) {
-  int rc;
-
-  TRANSMITTER *tx=malloc(sizeof(TRANSMITTER));
-  tx->id=id;
-  tx->buffer_size=buffer_size;
-  tx->fft_size=fft_size;
-  tx->fps=fps;
-
-#ifdef RADIOBERRY
-       if(protocol==ORIGINAL_PROTOCOL || protocol==RADIOBERRY_PROTOCOL) {
-#else
-       if(protocol==ORIGINAL_PROTOCOL) {
-#endif
-    tx->mic_sample_rate=48000;
-    tx->mic_dsp_rate=48000;
-    tx->iq_output_rate=48000;
-    tx->output_samples=tx->buffer_size;
-    tx->pixels=width; // to allow 48k to 24k conversion
-  } else {
-    tx->mic_sample_rate=48000;
-    tx->mic_dsp_rate=96000;
-    tx->iq_output_rate=192000;
-    tx->output_samples=tx->buffer_size*4;
-    tx->pixels=width*4; // to allow 192k to 24k conversion
-  }
-
-  tx->width=width;
-  tx->height=height;
-  tx->display_panadapter=1;
-  tx->display_waterfall=0;
-
-  tx->panadapter_high=0;
-  tx->panadapter_low=-60;
-
-  tx->displaying=0;
-  
-  tx->alex_antenna=ALEX_TX_ANTENNA_1;
-
-fprintf(stderr,"create_transmitter: id=%d buffer_size=%d mic_sample_rate=%d mic_dsp_rate=%d iq_output_rate=%d output_samples=%d fps=%d\n",tx->id, tx->buffer_size, tx->mic_sample_rate, tx->mic_dsp_rate, tx->iq_output_rate, tx->output_samples,tx->fps);
-
-  tx->filter_low=tx_filter_low;
-  tx->filter_high=tx_filter_high;
-
-  tx->out_of_band=0;
-
-  tx->low_latency=0;
-
-#ifdef PURESIGNAL
-  tx->puresignal=0;
-  tx->feedback=0;
-  tx->twotone=0;
-  tx->auto_on=0;
-  tx->single_on=0;
-#endif
-
-  tx->ctcss=0;
-  tx->ctcss_frequency=100.0;
-
-  tx->deviation=2500;
-  tx->am_carrier_level=0.5;
-
-#ifdef FREEDV
-  strcpy(tx->freedv_text_data,"Call, Name and Location");
-  tx->freedv_samples=0;
-#endif
-
-  tx->drive=50;
-  tx->tune_percent=10;
-  tx->tune_use_drive=0;
-
-  tx->compressor=0;
-  tx->compressor_level=0.0;
-
-  tx->local_microphone=0;
-
-  transmitter_restore_state(tx);
-
-
-  // allocate buffers
-fprintf(stderr,"transmitter: allocate buffers: mic_input_buffer=%d iq_output_buffer=%d pixels=%d\n",tx->buffer_size,tx->output_samples,tx->pixels);
-  tx->mic_input_buffer=malloc(sizeof(double)*2*tx->buffer_size);
-  tx->iq_output_buffer=malloc(sizeof(double)*2*tx->output_samples);
-  tx->samples=0;
-  tx->pixel_samples=malloc(sizeof(float)*tx->pixels);
-fprintf(stderr,"transmitter: allocate buffers: mic_input_buffer=%p iq_output_buffer=%p pixels=%p\n",tx->mic_input_buffer,tx->iq_output_buffer,tx->pixel_samples);
-
-  fprintf(stderr,"create_transmitter: OpenChannel id=%d buffer_size=%d fft_size=%d sample_rate=%d dspRate=%d outputRate=%d\n",
-              tx->id,
-              tx->buffer_size,
-              2048, // tx->fft_size,
-              tx->mic_sample_rate,
-              tx->mic_dsp_rate,
-              tx->iq_output_rate);
-
-  OpenChannel(tx->id,
-              tx->buffer_size,
-              2048, // tx->fft_size,
-              tx->mic_sample_rate,
-              tx->mic_dsp_rate,
-              tx->iq_output_rate,
-              1, // transmit
-              0, // run
-              0.010, 0.025, 0.0, 0.010, 0);
-
-  TXASetNC(tx->id, tx->fft_size);
-  TXASetMP(tx->id, tx->low_latency);
-
-
-  int mode=vfo[VFO_A].mode;
-  if(split) {
-    mode=vfo[VFO_B].mode;
-  }
-
-  SetTXABandpassWindow(tx->id, 1);
-  SetTXABandpassRun(tx->id, 1);
-
-  SetTXAFMEmphPosition(tx->id,pre_emphasize);
-
-  SetTXACFIRRun(tx->id, protocol==NEW_PROTOCOL?1:0); // turned on if new protocol
-  if(enable_tx_equalizer) {
-    SetTXAGrphEQ(tx->id, tx_equalizer);
-    SetTXAEQRun(tx->id, 1);
-  } else {
-    SetTXAEQRun(tx->id, 0);
-  }
-
-  transmitter_set_ctcss(tx,tx->ctcss,tx->ctcss_frequency);
-  SetTXAAMSQRun(tx->id, 0);
-  SetTXAosctrlRun(tx->id, 0);
-
-  SetTXAALCAttack(tx->id, 1);
-  SetTXAALCDecay(tx->id, 10);
-  SetTXAALCSt(tx->id, 1); // turn it on (always on)
-
-  SetTXALevelerAttack(tx->id, 1);
-  SetTXALevelerDecay(tx->id, 500);
-  SetTXALevelerTop(tx->id, 5.0);
-  SetTXALevelerSt(tx->id, tx_leveler);
-
-  SetTXAPreGenMode(tx->id, 0);
-  SetTXAPreGenToneMag(tx->id, 0.0);
-  SetTXAPreGenToneFreq(tx->id, 0.0);
-  SetTXAPreGenRun(tx->id, 0);
-
-  SetTXAPostGenMode(tx->id, 0);
-  SetTXAPostGenToneMag(tx->id, tone_level);
-  SetTXAPostGenTTMag(tx->id, tone_level,tone_level);
-  SetTXAPostGenToneFreq(tx->id, 0.0);
-  SetTXAPostGenRun(tx->id, 0);
-
-  double gain=pow(10.0, mic_gain / 20.0);
-  SetTXAPanelGain1(tx->id,gain);
-  SetTXAPanelRun(tx->id, 1);
-
-  SetTXAFMDeviation(tx->id, (double)tx->deviation);
-  SetTXAAMCarrierLevel(tx->id, tx->am_carrier_level);
-
-  SetTXACompressorGain(tx->id, tx->compressor_level);
-  SetTXACompressorRun(tx->id, tx->compressor);
-
-  tx_set_mode(tx,mode);
-
-  XCreateAnalyzer(tx->id, &rc, 262144, 1, 1, "");
-  if (rc != 0) {
-    fprintf(stderr, "XCreateAnalyzer id=%d failed: %d\n",tx->id,rc);
-  } else {
-    init_analyzer(tx);
-  }
-
-  create_visual(tx);
-
-  return tx;
-}
-
-void tx_set_mode(TRANSMITTER* tx,int mode) {
-  if(tx!=NULL) {
-    tx->mode=mode;
-    SetTXAMode(tx->id, tx->mode);
-    tx_set_filter(tx,tx_filter_low,tx_filter_high);
-  }
-}
-
-void tx_set_filter(TRANSMITTER *tx,int low,int high) {
-  int mode;
-  if(split) {
-    mode=vfo[1].mode;
-  } else {
-    mode=vfo[0].mode;
-  }
-//fprintf(stderr,"tx_set_filter: tx=%p mode=%d low=%d high=%d\n",tx,mode,low,high);
-  switch(mode) {
-    case modeLSB:
-    case modeCWL:
-    case modeDIGL:
-      tx->filter_low=-high;
-      tx->filter_high=-low;
-      break;
-    case modeUSB:
-    case modeCWU:
-    case modeDIGU:
-      tx->filter_low=low;
-      tx->filter_high=high;
-      break;
-    case modeDSB:
-    case modeAM:
-    case modeSAM:
-      tx->filter_low=-high;
-      tx->filter_high=high;
-      break;
-    case modeFMN:
-      if(tx->deviation==2500) {
-        tx->filter_low=-4000;
-        tx->filter_high=4000;
-      } else {
-        tx->filter_low=-8000;
-        tx->filter_high=8000;
-      }
-      break;
-    case modeDRM:
-      tx->filter_low=7000;
-      tx->filter_high=17000;
-      break;
-  }
-
-  double fl=tx->filter_low;
-  double fh=tx->filter_high;
-
-  if(split) {
-    fl+=vfo[VFO_B].offset;
-    fh+=vfo[VFO_B].offset;
-  } else {
-    fl+=vfo[VFO_A].offset;
-    fh+=vfo[VFO_A].offset;
-  }
-  SetTXABandpassFreqs(tx->id, fl,fh);
-}
-
-void tx_set_pre_emphasize(TRANSMITTER *tx,int state) {
-  SetTXAFMEmphPosition(tx->id,state);
-}
-
-static void full_tx_buffer(TRANSMITTER *tx) {
-  long isample;
-  long qsample;
-  double gain;
-  int j;
-  int error;
-  int mode;
-
-  switch(protocol) {
-#ifdef RADIOBERRY
-    case RADIOBERRY_PROTOCOL:
-#endif
-    case ORIGINAL_PROTOCOL:
-      gain=32767.0;  // 16 bit
-      break;
-    case NEW_PROTOCOL:
-      gain=8388607.0; // 24 bit
-      break;
-  }
-
-  update_vox(tx);
-
-  fexchange0(tx->id, tx->mic_input_buffer, tx->iq_output_buffer, &error);
-  if(error!=0) {
-    fprintf(stderr,"full_tx_buffer: id=%d fexchange0: error=%d\n",tx->id,error);
-  }
-
-#ifdef PURESIGNAL
-  if(tx->displaying && !(tx->puresignal && tx->feedback)) {
-#else
-  if(tx->displaying) {
-#endif
-    Spectrum0(1, tx->id, 0, 0, tx->iq_output_buffer);
-  }
-
-  if(isTransmitting()) {
-
-    if(radio->device==NEW_DEVICE_ATLAS && atlas_penelope) {
-      if(tune && !transmitter->tune_use_drive) {
-        gain=gain*((double)transmitter->drive_level*100.0/(double)transmitter->tune_percent);
-      } else {
-        gain=gain*(double)transmitter->drive_level;
-      }
-    }
-
-    for(j=0;j<tx->output_samples;j++) {
-      double is=tx->iq_output_buffer[j*2];
-      double qs=tx->iq_output_buffer[(j*2)+1];
-      isample=is>=0.0?(long)floor(is*gain+0.5):(long)ceil(is*gain-0.5);
-      qsample=qs>=0.0?(long)floor(qs*gain+0.5):(long)ceil(qs*gain-0.5);
-      switch(protocol) {
-        case ORIGINAL_PROTOCOL:
-          old_protocol_iq_samples(isample,qsample);
-          break;
-        case NEW_PROTOCOL:
-          new_protocol_iq_samples(isample,qsample);
-          break;
-#ifdef RADIOBERRY
-        case RADIOBERRY_PROTOCOL:
-          radioberry_protocol_iq_samples(isample,qsample);
-          break;
-#endif
-      }
-    }
-  }
-
-}
-
-void add_mic_sample(TRANSMITTER *tx,short mic_sample) {
-  int mode;
-  double sample;
-  double mic_sample_double;
-  int i,s;
-
-  if(split) {
-    mode=vfo[1].mode;
-  } else {
-    mode=vfo[0].mode;
-  }
-
-<<<<<<< HEAD
-       if (tune) {
-                 mic_sample_double=0.0;
-       }
-    else if(mode==modeCWL || mode==modeCWU) {
-               if (isTransmitting()) {
-                       if (key == 1) {
-                               mic_sample_double = getNextSideToneSample();
-                               cw_audio_write(mic_sample_double * cw_keyer_sidetone_volume/ 127.0);
-                               mic_sample_double = mic_sample_double * 200000; //* amplitude 
-                       } else mic_sample_double=0.0;
-               }
-      } else {
-=======
-  if(mode==modeCWL || mode==modeCWU || tune) {
-    mic_sample_double=0.0;
-  } else {
-    //long sam=mic_sample<<16;
-    //sample=(double)sam;
-    //mic_sample_double=(1.0 / 2147483648.0) * sample;
->>>>>>> upstream/master
-    mic_sample_double=(double)mic_sample/32768.0;
-  }
-  tx->mic_input_buffer[tx->samples*2]=mic_sample_double;
-  tx->mic_input_buffer[(tx->samples*2)+1]=0.0; //mic_sample_double;
-  tx->samples++;
-  if(tx->samples==tx->buffer_size) {
-    full_tx_buffer(tx);
-    tx->samples=0;
-  }
-  
-#ifdef AUDIO_WATERFALL
-  if(audio_samples!=NULL && isTransmitting()) {
-    if(waterfall_samples==0) {
-       audio_samples[audio_samples_index]=(float)mic_sample;
-       audio_samples_index++;
-       if(audio_samples_index>=AUDIO_WATERFALL_SAMPLES) {
-         //Spectrum(CHANNEL_AUDIO,0,0,audio_samples,audio_samples);
-         audio_samples_index=0;
-     }
-     }
-     waterfall_samples++;
-     if(waterfall_samples==waterfall_resample) {
-       waterfall_samples=0;
-     }
-   }
-#endif
-}
-
-#ifdef PURESIGNAL
-void add_ps_iq_samples(TRANSMITTER *tx, double i_sample_tx,double q_sample_tx, double i_sample_rx, double q_sample_rx) {
-  RECEIVER *tx_feedback=receiver[PS_TX_FEEDBACK];
-  RECEIVER *rx_feedback=receiver[PS_RX_FEEDBACK];
-
-//fprintf(stderr,"add_ps_iq_samples: samples=%d i_rx=%f q_rx=%f i_tx=%f q_tx=%f\n",rx_feedback->samples, i_sample_rx,q_sample_rx,i_sample_tx,q_sample_tx);
-
-  tx_feedback->iq_input_buffer[tx_feedback->samples*2]=i_sample_tx;
-  tx_feedback->iq_input_buffer[(tx_feedback->samples*2)+1]=q_sample_tx;
-  rx_feedback->iq_input_buffer[rx_feedback->samples*2]=i_sample_rx;
-  rx_feedback->iq_input_buffer[(rx_feedback->samples*2)+1]=q_sample_rx;
-
-  tx_feedback->samples=tx_feedback->samples+1;
-  rx_feedback->samples=rx_feedback->samples+1;
-
-  if(rx_feedback->samples>=rx_feedback->buffer_size) {
-    if(isTransmitting()) {
-      pscc(transmitter->id, rx_feedback->buffer_size, tx_feedback->iq_input_buffer, rx_feedback->iq_input_buffer);
-      if(transmitter->displaying) {
-        if(transmitter->feedback) {
-          Spectrum0(1, tx_feedback->id, 0, 0, tx_feedback->iq_input_buffer);
-        //} else {
-        //  Spectrum0(1, rx_feedback->id, 0, 0, rx_feedback->iq_input_buffer);
-        }
-      }
-    }
-    rx_feedback->samples=0;
-    tx_feedback->samples=0;
-  }
-}
-#endif
-
-#ifdef FREEDV
-void add_freedv_mic_sample(TRANSMITTER *tx, short mic_sample) {
-  int i,s;
-
-  //if(active_receiver->freedv && isTransmitting() && !tune) {
-  if(!tune) {
-    if(tx->freedv_samples==0) {
-      //int modem_samples=mod_sample_freedv(mic_sample);
-      short vs=(short)((double)mic_sample*pow(10.0, mic_gain / 20.0));
-      int modem_samples=mod_sample_freedv(vs);
-      if(modem_samples!=0) {
-        for(s=0;s<modem_samples;s++) {
-          for(i=0;i<freedv_resample;i++) { // 8K to 48K
-            add_mic_sample(tx,mod_out[s]);
-          }
-        }
-      }
-    }
-    tx->freedv_samples++;
-    if(tx->freedv_samples>=freedv_resample) {
-      tx->freedv_samples=0;
-    }
-  }
-}
-#endif
-
-void tx_set_displaying(TRANSMITTER *tx,int state) {
-  tx->displaying=state;
-  if(state) {
-    tx->update_timer_id=gdk_threads_add_timeout_full(G_PRIORITY_HIGH_IDLE,1000/tx->fps, update_display, (gpointer)tx, NULL);
-<<<<<<< HEAD
-  }
-}
-
-#ifdef PURESIGNAL
-void tx_set_ps(TRANSMITTER *tx,int state) {
-  tx->puresignal=state;
-  if(state) {
-    SetPSControl(tx->id, 0, 0, 1, 0);
-  } else {
-    SetPSControl(tx->id, 1, 0, 0, 0);
-  }
-  vfo_update();
-}
-
-void tx_set_twotone(TRANSMITTER *tx,int state) {
-  transmitter->twotone=state;
-  if(state) {
-    SetTXAPostGenMode(transmitter->id, 1);
-    SetTXAPostGenRun(transmitter->id, 1);
-  } else {
-    SetTXAPostGenRun(transmitter->id, 0);
-=======
->>>>>>> upstream/master
-  }
-  g_idle_add(ext_mox_update,(gpointer)(long)state);
-}
-
-void tx_set_ps_sample_rate(TRANSMITTER *tx,int rate) {
-  SetPSFeedbackRate (tx->id,rate);
-}
-#endif
-
-void cw_sidetone_mute(int mute){
-       key = mute;
-}
-
-<<<<<<< HEAD
-int asteps = 0;
-double timebase = 0.0;
-#define TIMESTEP (1.0 / 48000)
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-double getNextSideToneSample() {
-       double angle = cw_keyer_sidetone_frequency * 2 * M_PI * timebase;
-       timebase += TIMESTEP;
-       asteps++;
-       if (asteps == 48000) {
-               timebase = 0.0;
-               asteps = 0;
-       }
-       return sin(angle);
-}
-=======
-#ifdef PURESIGNAL
-void tx_set_ps(TRANSMITTER *tx,int state) {
-  tx->puresignal=state;
-  if(state) {
-    SetPSControl(tx->id, 0, 0, 1, 0);
-  } else {
-    SetPSControl(tx->id, 1, 0, 0, 0);
-  }
-  vfo_update();
-}
-
-void tx_set_twotone(TRANSMITTER *tx,int state) {
-  transmitter->twotone=state;
-  if(state) {
-    SetTXAPostGenMode(transmitter->id, 1);
-    SetTXAPostGenRun(transmitter->id, 1);
-  } else {
-    SetTXAPostGenRun(transmitter->id, 0);
-  }
-  g_idle_add(ext_mox_update,(gpointer)(long)state);
-}
-
-void tx_set_ps_sample_rate(TRANSMITTER *tx,int rate) {
-  SetPSFeedbackRate (tx->id,rate);
-}
-#endif
->>>>>>> upstream/master
diff --git a/transmitter.h.orig b/transmitter.h.orig
deleted file mode 100644 (file)
index fa7ee57..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/* Copyright (C)
-* 2017 - John Melton, G0ORX/N6LYT
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*
-*/
-
-#ifndef _TRANSMITTER_H
-#define _TRANSMITTER_H
-
-#include <gtk/gtk.h>
-
-#define AUDIO_BUFFER_SIZE 260
-
-typedef struct _transmitter {
-  int id;
-  int fps;
-  int displaying;
-  int mic_sample_rate;
-  int mic_dsp_rate;
-  int iq_output_rate;
-  int buffer_size;
-  int fft_size;
-  int pixels;
-  int samples;
-  int output_samples;
-  double *mic_input_buffer;
-  double *iq_output_buffer;
-
-  float *pixel_samples;
-  int display_panadapter;
-  int display_waterfall;
-  gint update_timer_id;
-
-  int mode;
-  int filter_low;
-  int filter_high;
-
-/*
-  long long frequency;
-  long long display_frequency;
-  long long dds_frequency;
-  long long dds_offset;
-*/
-  int alex_antenna;
-
-  int width;
-  int height;
-
-  GtkWidget *panel;
-  GtkWidget *panadapter;
-
-  int panadapter_low;
-  int panadapter_high;
-
-  cairo_surface_t *panadapter_surface;
-
-  int local_microphone;
-  int input_device;
-
-  int out_of_band;
-  gint out_of_band_timer_id;
-
-  int low_latency;
-
-#ifdef PURESIGNAL
-  int puresignal;
-  int twotone;
-  int feedback;
-  int auto_on;
-  int single_on;
-#endif
-
-  double ctcss_frequency;
-  int ctcss;
-
-  int deviation;
-
-  double am_carrier_level;
-
-  int attenuation;
-
-  int drive;
-  int tune_use_drive;
-  int tune_percent;
-
-  int drive_level;
-#ifdef FREEDV
-  char freedv_text_data[64];
-  int freedv_text_index;
-  int freedv_samples;
-#endif
-
-  int compressor;
-  double compressor_level;
-
-  double fwd;
-  double exciter;
-  double rev;
-  double alc;
-
-  int x;
-  int y;
-
-} TRANSMITTER;
-
-extern TRANSMITTER *create_transmitter(int id, int buffer_size, int fft_size, int fps, int width, int height);
-
-void reconfigure_transmitter(TRANSMITTER *tx,int height);
-
-
-extern void tx_set_mode(TRANSMITTER* tx,int m);
-extern void tx_set_filter(TRANSMITTER *tx,int low,int high);
-extern void transmitter_set_deviation(TRANSMITTER *tx);
-extern void transmitter_set_am_carrier_level(TRANSMITTER *tx);
-extern void tx_set_pre_emphasize(TRANSMITTER *tx,int state);
-extern void transmitter_set_ctcss(TRANSMITTER *tx,int run,double frequency);
-
-extern void add_mic_sample(TRANSMITTER *tx,short mic_sample);
-extern void add_freedv_mic_sample(TRANSMITTER *tx,short mic_sample);
-
-extern void transmitter_save_state(TRANSMITTER *tx);
-extern void transmitter_set_out_of_band(TRANSMITTER *tx);
-extern void tx_set_displaying(TRANSMITTER *tx,int state);
-
-extern void tx_set_ps(TRANSMITTER *tx,int state);
-extern void tx_set_twotone(TRANSMITTER *tx,int state);
-
-extern void transmitter_set_compressor_level(TRANSMITTER *tx,double level);
-extern void transmitter_set_compressor(TRANSMITTER *tx,int state);
-
-extern void tx_set_ps_sample_rate(TRANSMITTER *tx,int rate);
-extern void add_ps_iq_samples(TRANSMITTER *tx, double i_sample_0,double q_sample_0, double i_sample_1, double q_sample_1);
-<<<<<<< HEAD
-
-extern void cw_sidetone_mute(int mute);
-=======
->>>>>>> upstream/master
-#endif
-
-
diff --git a/vfo.c b/vfo.c
index 9097885a29f5aa268b2eeaae650f9656785a754b..97b4c5192f9d219dad35548187d20cb9ee2affda 100644 (file)
--- a/vfo.c
+++ b/vfo.c
@@ -647,7 +647,7 @@ g_print("vfo_move_to: vfo=%d ctun_frequency=%lld diff=%lld\n",id,vfo[id].ctun_fr
       } else if(vfo[id].mode==modeCWU) {
         vfo[id].frequency-=cw_keyer_sidetone_frequency;
       }
-g_print("vfo_move_to: vfo=%d frequency=%lld diff==%%ld\n",id,vfo[id].frequency,diff);
+g_print("vfo_move_to: vfo=%d frequency=%lld diff==%lld\n",id,vfo[id].frequency,diff);
     }
 
     int sid=id==0?1:0;
@@ -874,12 +874,13 @@ void vfo_update() {
               cairo_set_source_rgb(cr, 0.0, 0.65, 0.0);
             }
         }
-        cairo_move_to(cr, 270, 38);  
+        cairo_move_to(cr, 300, 38);  
         cairo_show_text(cr, temp_text);
 
 #ifdef PURESIGNAL
         if(can_transmit) {
-          cairo_move_to(cr, 180, 15);
+          //cairo_move_to(cr, 180, 15);
+          cairo_move_to(cr, 55, 50);
           if(transmitter->puresignal) {
             cairo_set_source_rgb(cr, 1.0, 1.0, 0.0);
           } else {
@@ -897,7 +898,8 @@ void vfo_update() {
             cairo_set_source_rgb(cr, 0.0, 1.0, 0.0);
         }
         sprintf(temp_text,"RIT: %lldHz",vfo[id].rit);
-        cairo_move_to(cr, 210, 15);
+        //cairo_move_to(cr, 210, 15);
+        cairo_move_to(cr, 170, 15);
         cairo_set_font_size(cr, 12);
         cairo_show_text(cr, temp_text);
 
@@ -1058,7 +1060,8 @@ void vfo_update() {
         }
         cairo_show_text(cr, "Locked");
 
-        cairo_move_to(cr, 55, 50);
+        //cairo_move_to(cr, 55, 50);
+        cairo_move_to(cr, 260, 15);
         if(split) {
           cairo_set_source_rgb(cr, 1.0, 0.0, 0.0);
         } else {
@@ -1066,7 +1069,8 @@ void vfo_update() {
         }
         cairo_show_text(cr, "Split");
 
-        cairo_move_to(cr, 95, 50);
+        //cairo_move_to(cr, 95, 50);
+        cairo_move_to(cr, 260, 25);
         if(sat_mode!=SAT_NONE) {
           cairo_set_source_rgb(cr, 1.0, 0.0, 0.0);
         } else {
@@ -1085,7 +1089,8 @@ void vfo_update() {
             cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
         }
         sprintf(temp_text,"DUP");
-        cairo_move_to(cr, 130, 50);
+        //cairo_move_to(cr, 130, 50);
+        cairo_move_to(cr, 260, 35);
         cairo_set_font_size(cr, 12);
         cairo_show_text(cr, temp_text);
 
diff --git a/vfo.c.orig b/vfo.c.orig
deleted file mode 100644 (file)
index 152fb1f..0000000
+++ /dev/null
@@ -1,854 +0,0 @@
-/* Copyright (C)
-* 2015 - John Melton, G0ORX/N6LYT
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*
-*/
-
-#include <gtk/gtk.h>
-#include <gdk/gdk.h>
-#include <math.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <net/if_arp.h>
-#include <net/if.h>
-#include <ifaddrs.h>
-
-#include "discovered.h"
-#include "main.h"
-#include "agc.h"
-#include "mode.h"
-#include "filter.h"
-#include "bandstack.h"
-#include "band.h"
-#include "frequency.h"
-#include "new_protocol.h"
-#include "property.h"
-#include "radio.h"
-#include "receiver.h"
-#include "vfo.h"
-#include "channel.h"
-#include "toolbar.h"
-#include "wdsp.h"
-#include "new_menu.h"
-#include "rigctl.h"
-
-static GtkWidget *parent_window;
-static int my_width;
-static int my_height;
-
-static GtkWidget *vfo_panel;
-static cairo_surface_t *vfo_surface = NULL;
-
-int steps[]={1,10,25,50,100,250,500,1000,2500,5000,6250,9000,10000,12500,15000,20000,25000,30000,50000,100000,0};
-char *step_labels[]={"1Hz","10Hz","25Hz","50Hz","100Hz","250Hz","500Hz","1kHz","2.5kHz","5kHz","6.25kHz","9kHz","10kHz","12.5kHz","15kHz","20kHz","25kHz","30kHz","50kHz","100kHz",0};
-
-static GtkWidget* menu=NULL;
-static GtkWidget* band_menu=NULL;
-
-
-static void vfo_save_bandstack() {
-  BANDSTACK *bandstack=bandstack_get_bandstack(vfo[0].band);
-  BANDSTACK_ENTRY *entry=&bandstack->entry[vfo[0].bandstack];
-  entry->frequency=vfo[0].frequency;
-  entry->mode=vfo[0].mode;
-  entry->filter=vfo[0].filter;
-}
-
-void vfo_save_state() {
-  int i;
-  char name[80];
-  char value[80];
-
-  vfo_save_bandstack();
-
-  for(i=0;i<MAX_VFOS;i++) {
-    sprintf(name,"vfo.%d.band",i);
-    sprintf(value,"%d",vfo[i].band);
-    setProperty(name,value);
-    sprintf(name,"vfo.%d.frequency",i);
-    sprintf(value,"%lld",vfo[i].frequency);
-    setProperty(name,value);
-    sprintf(name,"vfo.%d.ctun",i);
-    sprintf(value,"%d",vfo[i].ctun);
-    setProperty(name,value);
-    sprintf(name,"vfo.%d.rit",i);
-    sprintf(value,"%lld",vfo[i].rit);
-    setProperty(name,value);
-    sprintf(name,"vfo.%d.lo",i);
-    sprintf(value,"%lld",vfo[i].lo);
-    setProperty(name,value);
-    sprintf(name,"vfo.%d.ctun_frequency",i);
-    sprintf(value,"%lld",vfo[i].ctun_frequency);
-    setProperty(name,value);
-    sprintf(name,"vfo.%d.offset",i);
-    sprintf(value,"%lld",vfo[i].offset);
-    setProperty(name,value);
-    sprintf(name,"vfo.%d.mode",i);
-    sprintf(value,"%d",vfo[i].mode);
-    setProperty(name,value);
-    sprintf(name,"vfo.%d.filter",i);
-    sprintf(value,"%d",vfo[i].filter);
-    setProperty(name,value);
-  }
-}
-
-void vfo_restore_state() {
-  int i;
-  char name[80];
-  char *value;
-
-  for(i=0;i<MAX_VFOS;i++) {
-
-    vfo[i].band=band20;
-    vfo[i].bandstack=0;
-    vfo[i].frequency=14010000;
-    vfo[i].mode=modeCWU;
-    vfo[i].filter=6;
-    vfo[i].lo=0;
-    vfo[i].offset=0;
-    vfo[i].rit=0;
-    vfo[i].ctun=0;
-
-    sprintf(name,"vfo.%d.band",i);
-    value=getProperty(name);
-    if(value) vfo[i].band=atoi(value);
-    sprintf(name,"vfo.%d.frequency",i);
-    value=getProperty(name);
-    if(value) vfo[i].frequency=atoll(value);
-    sprintf(name,"vfo.%d.ctun",i);
-    value=getProperty(name);
-    if(value) vfo[i].ctun=atoi(value);
-    sprintf(name,"vfo.%d.ctun_frequency",i);
-    value=getProperty(name);
-    if(value) vfo[i].ctun_frequency=atoll(value);
-    sprintf(name,"vfo.%d.rit",i);
-    value=getProperty(name);
-    if(value) vfo[i].rit=atoll(value);
-    sprintf(name,"vfo.%d.lo",i);
-    value=getProperty(name);
-    if(value) vfo[i].lo=atoll(value);
-    sprintf(name,"vfo.%d.offset",i);
-    value=getProperty(name);
-    if(value) vfo[i].offset=atoll(value);
-    sprintf(name,"vfo.%d.mode",i);
-    value=getProperty(name);
-    if(value) vfo[i].mode=atoi(value);
-    sprintf(name,"vfo.%d.filter",i);
-    value=getProperty(name);
-    if(value) vfo[i].filter=atoi(value);
-
-  }
-}
-
-void vfo_band_changed(int b) {
-  BANDSTACK *bandstack;
-
-  int id=active_receiver->id;
-
-  if(id==0) {
-    vfo_save_bandstack();
-  }
-  if(b==vfo[id].band) {
-    // same band selected - step to the next band stack
-    bandstack=bandstack_get_bandstack(b);
-    vfo[id].bandstack++;
-    if(vfo[id].bandstack>=bandstack->entries) {
-      vfo[id].bandstack=0;
-    }
-  } else {
-    // new band - get band stack entry
-    bandstack=bandstack_get_bandstack(b);
-    vfo[id].bandstack=bandstack->current_entry;
-  }
-
-  BAND *band=band_get_band(b);
-  BANDSTACK_ENTRY *entry=&bandstack->entry[vfo[id].bandstack];
-  vfo[id].band=b;
-  vfo[id].frequency=entry->frequency;
-  vfo[id].mode=entry->mode;
-  vfo[id].filter=entry->filter;
-  vfo[id].lo=band->frequencyLO;
-
-  switch(id) {
-    case 0:
-      bandstack->current_entry=vfo[id].bandstack;
-      receiver_vfo_changed(receiver[id]);
-      BAND *band=band_get_band(vfo[id].band);
-      set_alex_rx_antenna(band->alexRxAntenna);
-      set_alex_tx_antenna(band->alexTxAntenna);
-      set_alex_attenuation(band->alexAttenuation);
-      receiver_vfo_changed(receiver[0]);
-      break;
-   case 1:
-      if(receivers==2) {
-        receiver_vfo_changed(receiver[1]);
-      }
-      break;
-  }
-
-  if(split) {
-    tx_set_mode(transmitter,vfo[VFO_B].mode);
-  } else {
-    tx_set_mode(transmitter,vfo[VFO_A].mode);
-  }
-  calcDriveLevel();
-  calcTuneDriveLevel();
-  vfo_update(NULL);
-}
-
-void vfo_bandstack_changed(int b) {
-  int id=active_receiver->id;
-  if(id==0) {
-    vfo_save_bandstack();
-  }
-  vfo[id].bandstack=b;
-
-  BANDSTACK *bandstack=bandstack_get_bandstack(vfo[id].band);
-  BANDSTACK_ENTRY *entry=&bandstack->entry[vfo[id].bandstack];
-  vfo[id].frequency=entry->frequency;
-  vfo[id].mode=entry->mode;
-  vfo[id].filter=entry->filter;
-
-  switch(id) {
-    case 0:
-      bandstack->current_entry=vfo[id].bandstack;
-      receiver_vfo_changed(receiver[id]);
-      BAND *band=band_get_band(vfo[id].band);
-      set_alex_rx_antenna(band->alexRxAntenna);
-      set_alex_tx_antenna(band->alexTxAntenna);
-      set_alex_attenuation(band->alexAttenuation);
-      receiver_vfo_changed(receiver[0]);
-      break;
-   case 1:
-      if(receivers==2) {
-        receiver_vfo_changed(receiver[1]);
-      }
-      break;
-  }
-
-  if(split) {
-    tx_set_mode(transmitter,vfo[VFO_B].mode);
-  } else {
-    tx_set_mode(transmitter,vfo[VFO_A].mode);
-  }
-  calcDriveLevel();
-  calcTuneDriveLevel();
-  vfo_update(NULL);
-
-}
-
-void vfo_mode_changed(int m) {
-  int id=active_receiver->id;
-  vfo[id].mode=m;
-  switch(id) {
-    case 0:
-      receiver_mode_changed(receiver[0]);
-      receiver_filter_changed(receiver[0]);
-      break;
-    case 1:
-      if(receivers==2) {
-        receiver_mode_changed(receiver[1]);
-        receiver_filter_changed(receiver[1]);
-      }
-      break;
-  }
-  if(split) {
-    tx_set_mode(transmitter,vfo[VFO_B].mode);
-  } else {
-    tx_set_mode(transmitter,vfo[VFO_A].mode);
-  }
-
-  vfo_update(NULL);
-}
-
-void vfo_filter_changed(int f) {
-  int id=active_receiver->id;
-  vfo[id].filter=f;
-  switch(id) {
-    case 0:
-      receiver_filter_changed(receiver[0]);
-      break;
-    case 1:
-      if(receivers==2) {
-        receiver_filter_changed(receiver[1]);
-      }
-      break;
-  }
-
-  vfo_update(NULL);
-}
-
-void vfo_a_to_b() {
-  vfo[VFO_B].band=vfo[VFO_A].band;
-  vfo[VFO_B].bandstack=vfo[VFO_A].bandstack;
-  vfo[VFO_B].frequency=vfo[VFO_A].frequency;
-  vfo[VFO_B].mode=vfo[VFO_A].mode;
-  vfo[VFO_B].filter=vfo[VFO_A].filter;
-  vfo[VFO_B].filter=vfo[VFO_A].filter;
-  vfo[VFO_B].lo=vfo[VFO_A].lo;
-  vfo[VFO_B].offset=vfo[VFO_A].offset;
-  vfo[VFO_B].rit=vfo[VFO_A].rit;
-
-  if(receivers==2) {
-    receiver_vfo_changed(receiver[1]);
-  }
-  if(split) {
-    tx_set_mode(transmitter,vfo[VFO_B].mode);
-  }
-  vfo_update(NULL);
-}
-
-void vfo_b_to_a() {
-  vfo[VFO_A].band=vfo[VFO_B].band;
-  vfo[VFO_A].bandstack=vfo[VFO_B].bandstack;
-  vfo[VFO_A].frequency=vfo[VFO_B].frequency;
-  vfo[VFO_A].mode=vfo[VFO_B].mode;
-  vfo[VFO_A].filter=vfo[VFO_B].filter;
-  vfo[VFO_A].lo=vfo[VFO_B].lo;
-  vfo[VFO_A].offset=vfo[VFO_B].offset;
-  vfo[VFO_A].rit=vfo[VFO_B].rit;
-  receiver_vfo_changed(receiver[0]);
-  if(!split) {
-    tx_set_mode(transmitter,vfo[VFO_B].mode);
-  }
-  vfo_update(NULL);
-}
-
-void vfo_a_swap_b() {
-  int temp_band;
-  int temp_bandstack;
-  long long temp_frequency;
-  int temp_mode;
-  int temp_filter;
-  int temp_lo;
-  int temp_offset;
-  int temp_rit;
-
-  temp_band=vfo[VFO_A].band;
-  temp_bandstack=vfo[VFO_A].bandstack;
-  temp_frequency=vfo[VFO_A].frequency;
-  temp_mode=vfo[VFO_A].mode;
-  temp_filter=vfo[VFO_A].filter;
-  temp_lo=vfo[VFO_A].lo;
-  temp_offset=vfo[VFO_A].offset;
-  temp_rit=vfo[VFO_A].rit;
-
-  vfo[VFO_A].band=vfo[VFO_B].band;
-  vfo[VFO_A].bandstack=vfo[VFO_B].bandstack;
-  vfo[VFO_A].frequency=vfo[VFO_B].frequency;
-  vfo[VFO_A].mode=vfo[VFO_B].mode;
-  vfo[VFO_A].filter=vfo[VFO_B].filter;
-  vfo[VFO_A].lo=vfo[VFO_B].lo;
-  vfo[VFO_A].offset=vfo[VFO_B].offset;
-  vfo[VFO_A].rit=vfo[VFO_B].rit;
-
-  vfo[VFO_B].band=temp_band;
-  vfo[VFO_B].bandstack=temp_bandstack;
-  vfo[VFO_B].frequency=temp_frequency;
-  vfo[VFO_B].mode=temp_mode;
-  vfo[VFO_B].filter=temp_filter;
-  vfo[VFO_B].lo=temp_lo;
-  vfo[VFO_B].offset=temp_offset;
-  vfo[VFO_B].rit=temp_rit;
-
-  receiver_vfo_changed(receiver[0]);
-  if(receivers==2) {
-    receiver_vfo_changed(receiver[1]);
-  }
-  if(split) {
-    tx_set_mode(transmitter,vfo[VFO_B].mode);
-  } else {
-    tx_set_mode(transmitter,vfo[VFO_A].mode);
-  }
-  vfo_update(NULL);
-}
-
-void vfo_step(int steps) {
-  int id=active_receiver->id;
-  if(!locked) {
-    if(vfo[id].ctun) {
-      vfo[id].ctun_frequency=vfo[id].ctun_frequency+(steps*step);
-    } else {
-      vfo[id].frequency=vfo[id].frequency+(steps*step);
-    }
-    receiver_frequency_changed(active_receiver);
-#ifdef INCLUDED
-    BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
-    setFrequency(active_receiver->frequency+(steps*step));
-#endif
-    vfo_update(NULL);
-  }
-}
-
-void vfo_move(long long hz) {
-  int id=active_receiver->id;
-  if(!locked) {
-    switch(protocol) {
-#ifdef LIMESDR
-      case LIMESDR_PROTOCOL:
-        break;
-#endif
-      default:
-        if(vfo[id].ctun) {
-          vfo[id].ctun_frequency=((vfo[id].ctun_frequency-hz)/step)*step;
-        } else {
-          vfo[id].frequency=((vfo[id].frequency+hz)/step)*step;
-        }
-        break;
-    }
-    receiver_frequency_changed(active_receiver);
-    vfo_update(NULL);
-  }
-}
-
-void vfo_move_to(long long hz) {
-  int id=active_receiver->id;
-  if(!locked) {
-    switch(protocol) {
-#ifdef LIMESDR
-      case LIMESDR_PROTOCOL:
-        break;
-#endif
-      default:
-        if(vfo[id].ctun) {
-          vfo[id].ctun_frequency=(vfo[id].frequency+hz)/step*step;
-          if(vfo[id].mode==modeCWL) {
-            vfo[id].ctun_frequency+=cw_keyer_sidetone_frequency;
-          } else if(vfo[id].mode==modeCWU) {
-            vfo[id].ctun_frequency-=cw_keyer_sidetone_frequency;
-          }
-        } else {
-          vfo[id].frequency=(vfo[id].frequency+hz)/step*step;
-          if(vfo[id].mode==modeCWL) {
-            vfo[id].frequency+=cw_keyer_sidetone_frequency;
-          } else if(vfo[id].mode==modeCWU) {
-            vfo[id].frequency-=cw_keyer_sidetone_frequency;
-          }
-        }
-        break;
-    }
-    receiver_vfo_changed(active_receiver);
-
-#ifdef INCLUDED
-
-    BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
-
-#ifdef LIMESDR
-    if(protocol==LIMESDR_PROTOCOL) {
-      setFrequency((entry->frequency+active_receiver->dds_offset-hz)/step*step);
-    } else {
-#endif
-      if(vfo[id].ctun) {
-        setFrequency((active_receiver->frequency+hz)/step*step);
-      } else {
-        long long f=(active_receiver->frequency+active_receiver->dds_offset+hz)/step*step;
-        if(vfo[active_receiver->id].mode==modeCWL) {
-          f+=cw_keyer_sidetone_frequency;
-        } else if(vfo[active_receiver->id].mode==modeCWU) {
-          f-=cw_keyer_sidetone_frequency;
-        }
-        setFrequency(f);
-      }
-#ifdef LIMESDR
-    }
-#endif
-#endif
-    vfo_update(NULL);
-  }
-}
-
-static gboolean
-vfo_scroll_event_cb (GtkWidget      *widget,
-               GdkEventScroll *event,
-               gpointer        data)
-{
-  int i;
-  if(event->direction==GDK_SCROLL_UP) {
-    vfo_move(step);
-  } else {
-    vfo_move(-step);
-  }
-}
-
-
-static gboolean vfo_configure_event_cb (GtkWidget         *widget,
-            GdkEventConfigure *event,
-            gpointer           data)
-{
-  if (vfo_surface)
-    cairo_surface_destroy (vfo_surface);
-
-  vfo_surface = gdk_window_create_similar_surface (gtk_widget_get_window (widget),
-                                       CAIRO_CONTENT_COLOR,
-                                       gtk_widget_get_allocated_width (widget),
-                                       gtk_widget_get_allocated_height (widget));
-
-  /* Initialize the surface to black */
-  cairo_t *cr;
-  cr = cairo_create (vfo_surface);
-  cairo_set_source_rgb (cr, 0, 0, 0);
-  cairo_paint (cr);
-  cairo_destroy(cr);
-  g_idle_add(vfo_update,NULL);
-  return TRUE;
-}
-
-static gboolean vfo_draw_cb (GtkWidget *widget,
- cairo_t   *cr,
- gpointer   data)
-{
-  cairo_set_source_surface (cr, vfo_surface, 0, 0);
-  cairo_paint (cr);
-  return TRUE;
-}
-
-int vfo_update(void *data) {
-    
-    int id=active_receiver->id;
-    FILTER* band_filters=filters[vfo[id].mode];
-    FILTER* band_filter=&band_filters[vfo[id].filter];
-    if(vfo_surface) {
-        char temp_text[32];
-        cairo_t *cr;
-        cr = cairo_create (vfo_surface);
-        cairo_set_source_rgb (cr, 0, 0, 0);
-        cairo_paint (cr);
-
-        cairo_select_font_face(cr, "FreeMono",
-            CAIRO_FONT_SLANT_NORMAL,
-            CAIRO_FONT_WEIGHT_BOLD);
-
-        char version[16];
-        char text[128];
-<<<<<<< HEAD
-               
-               switch(radio->protocol) {
-                       case ORIGINAL_PROTOCOL:
-#ifdef RADIOBERRY
-                       case RADIOBERRY_PROTOCOL:
-#endif
-                       sprintf(version,"%d.%d",
-                                       radio->software_version/10,
-                                       radio->software_version%10);
-                         break;
-                       case NEW_PROTOCOL:
-#ifdef LIMESDR
-                       case LIMESDR_PROTOCOL:
-#endif
-                       sprintf(version,"%d.%d.%d",
-                radio->software_version/100,
-                (radio->software_version%100)/10,
-                radio->software_version%10);
-                       break;
-               }               
-       
-=======
-        if(radio->protocol==ORIGINAL_PROTOCOL) {
-          switch(radio->device) {
-#ifdef USBOZY
-            case DEVICE_OZY:
-              strcpy(version,"");
-              break;
-#endif
-            default:
-              sprintf(version,"%d.%d",
-                  radio->software_version/10,
-                  radio->software_version%10);
-              break;
-          }
-        } else {
-            sprintf(version,"%d.%d",
-                radio->software_version/10,
-                radio->software_version%10);
-        }
-
->>>>>>> upstream/master
-        switch(radio->protocol) {
-            case ORIGINAL_PROTOCOL:
-              switch(radio->device) {
-#ifdef USBOZY
-                case DEVICE_OZY:
-                  sprintf(text,"%s", radio->name);
-                  break;
-#endif
-                default:
-                  sprintf(text,"%s %s %s",
-                    radio->name,
-                    version,
-                    inet_ntoa(radio->info.network.address.sin_addr));
-                  break;
-              }
-              break;
-            case NEW_PROTOCOL:
-              sprintf(text,"%s %s %s",
-                    radio->name,
-                    version,
-                    inet_ntoa(radio->info.network.address.sin_addr));
-              break;
-#ifdef LIMESDR
-            case LIMESDR_PROTOCOL:
-              sprintf(text,"%s", radio->name);
-              break;
-#endif
-#ifdef RADIOBERRY
-                       case RADIOBERRY_PROTOCOL:
-                               sprintf(text,"%s\n", radio->name);
-                       break;
-#endif
-        }
-        cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-        cairo_set_font_size(cr, 12);
-        cairo_move_to(cr, 5, 15);  
-        cairo_show_text(cr, text);
-
-        //long long af=active_receiver->frequency+active_receiver->dds_offset;
-        long long af=vfo[0].frequency+vfo[0].offset;
-        sprintf(temp_text,"VFO A: %0lld.%06lld",af/(long long)1000000,af%(long long)1000000);
-        if(isTransmitting() && !split) {
-            cairo_set_source_rgb(cr, 1, 0, 0);
-        } else {
-            if(active_receiver->id==0) {
-              cairo_set_source_rgb(cr, 0, 1, 0);
-            } else {
-              cairo_set_source_rgb(cr, 0, 0.65, 0);
-            }
-        }
-        cairo_move_to(cr, 5, 38);  
-        cairo_set_font_size(cr, 22); 
-        cairo_show_text(cr, temp_text);
-
-        //long long bf=frequencyB;
-        long long bf=vfo[1].frequency+vfo[1].offset;
-        sprintf(temp_text,"VFO B: %0lld.%06lld",bf/(long long)1000000,bf%(long long)1000000);
-        if(isTransmitting() && split) {
-            cairo_set_source_rgb(cr, 1, 0, 0);
-        } else {
-            if(active_receiver->id==1) {
-              cairo_set_source_rgb(cr, 0, 1, 0);
-            } else {
-              cairo_set_source_rgb(cr, 0, 0.65, 0);
-            }
-        }
-        cairo_move_to(cr, 260, 38);  
-        cairo_show_text(cr, temp_text);
-
-        cairo_set_font_size(cr, 12);
-
-        if(vfo[id].rit==0) {
-            cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-        } else {
-            cairo_set_source_rgb(cr, 1, 1, 0);
-        }
-        sprintf(temp_text,"RIT: %d Hz",vfo[id].rit);
-        cairo_move_to(cr, 5, 50);  
-        cairo_set_font_size(cr, 12);
-        cairo_show_text(cr, temp_text);
-
-        cairo_move_to(cr, 210, 15);  
-        if(locked) {
-          cairo_set_source_rgb(cr, 1, 0, 0);
-        } else {
-          cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-        }
-        cairo_show_text(cr, "Locked");
-        
-        cairo_set_source_rgb(cr, 1, 1, 0);
-        cairo_move_to(cr, 100, 50);  
-        if(vfo[id].mode==modeFMN) {
-          if(deviation==2500) {
-            sprintf(temp_text,"%s 8k",mode_string[vfo[id].mode]); 
-          } else {
-            sprintf(temp_text,"%s 16k",mode_string[vfo[id].mode]); 
-          }
-        } else {
-          sprintf(temp_text,"%s %s",mode_string[vfo[id].mode],band_filter->title); 
-        }
-        cairo_show_text(cr, temp_text);
-
-        cairo_move_to(cr, 170, 50);  
-        if(active_receiver->nr) {
-          cairo_set_source_rgb(cr, 1.0, 1.0, 0.0);
-        } else {
-          cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-        }
-        cairo_show_text(cr, "NR");
-
-        cairo_move_to(cr, 200, 50);  
-        if(active_receiver->nr2) {
-          cairo_set_source_rgb(cr, 1.0, 1.0, 0.0);
-        } else {
-          cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-        }
-        cairo_show_text(cr, "NR2");
-
-        cairo_move_to(cr, 230, 50);  
-        if(active_receiver->anf) {
-          cairo_set_source_rgb(cr, 1.0, 1.0, 0.0);
-        } else {
-          cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-        }
-        cairo_show_text(cr, "ANF");
-
-        cairo_move_to(cr, 260, 50);  
-        if(active_receiver->snb) {
-          cairo_set_source_rgb(cr, 1.0, 1.0, 0.0);
-        } else {
-          cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-        }
-        cairo_show_text(cr, "SNB");
-
-        cairo_move_to(cr, 290, 50);  
-        switch(active_receiver->agc) {
-          case AGC_OFF:
-            cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-            cairo_show_text(cr, "AGC OFF");
-            break;
-          case AGC_LONG:
-            cairo_set_source_rgb(cr, 1, 1, 0);
-            cairo_show_text(cr, "AGC LONG");
-            break;
-          case AGC_SLOW:
-            cairo_set_source_rgb(cr, 1, 1, 0);
-            cairo_show_text(cr, "AGC SLOW");
-            break;
-          case AGC_MEDIUM:
-            cairo_set_source_rgb(cr, 1, 1, 0);
-            cairo_show_text(cr, "AGC MEDIUM");
-            break;
-          case AGC_FAST:
-            cairo_set_source_rgb(cr, 1, 1, 0);
-            cairo_show_text(cr, "AGC FAST");
-            break;
-        }
-
-        int s=0;
-        while(steps[s]!=step && steps[s]!=0) {
-          s++;
-        }
-        sprintf(temp_text,"Step %s",step_labels[s]);
-        cairo_move_to(cr, 375, 50);
-        cairo_set_source_rgb(cr, 1, 1, 0);
-        cairo_show_text(cr, temp_text);
-
-        char *info=getFrequencyInfo(af);
-/*
-        cairo_move_to(cr, (my_width/4)*3, 50);
-        cairo_show_text(cr, getFrequencyInfo(af));
-*/
-         
-        cairo_move_to(cr, 460, 50);  
-        if(vfo[id].ctun) {
-          cairo_set_source_rgb(cr, 1, 1, 0);
-        } else {
-          cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-        }
-        cairo_show_text(cr, "CTUN");
-
-        cairo_move_to(cr, 500, 50);  
-        if(cat_control>0) {
-          cairo_set_source_rgb(cr, 1, 1, 0);
-        } else {
-          cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-        }
-        cairo_show_text(cr, "CAT");
-
-        cairo_move_to(cr, 270, 15);
-        if(split) {
-          cairo_set_source_rgb(cr, 1, 0, 0);
-        } else {
-          cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-        }
-        cairo_show_text(cr, "Split");
-       
-        cairo_move_to(cr, 310, 15);
-        if(vfo[id].mode==modeCWL || vfo[id].mode==modeCWU) {
-          cairo_set_source_rgb(cr, 1, 1, 0);
-        } else {
-          cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
-        }
-        sprintf(temp_text,"CW %d wpm, sidetone %d Hz",cw_keyer_speed,cw_keyer_sidetone_frequency);
-        cairo_show_text(cr, temp_text);
-
-        cairo_destroy (cr);
-        gtk_widget_queue_draw (vfo_panel);
-    } else {
-fprintf(stderr,"vfo_update: no surface!\n");
-    }
-    return 0;
-}
-
-/*
-static gboolean
-vfo_step_select_cb (GtkWidget *widget,
-               gpointer        data)
-{
-  step=steps[(int)data];
-  vfo_update(NULL);
-}
-*/
-
-static gboolean
-vfo_press_event_cb (GtkWidget *widget,
-               GdkEventButton *event,
-               gpointer        data)
-{
-/*
-  if((int)event->x < (my_width/4)) {
-    //lock_cb(NULL,NULL);
-  } else if((int)event->x < (my_width/2) && (int)event->x > (my_width/4)) {
-    start_freqent();
-  } else {
-    start_step();
-  }
-*/
-  start_vfo();
-  return TRUE;
-}
-
-GtkWidget* vfo_init(int width,int height,GtkWidget *parent) {
-  int i;
-
-fprintf(stderr,"vfo_init: width=%d height=%d\n", width, height);
-
-  parent_window=parent;
-  my_width=width;
-  my_height=height;
-
-  vfo_panel = gtk_drawing_area_new ();
-  gtk_widget_set_size_request (vfo_panel, width, height);
-
-  g_signal_connect (vfo_panel,"configure-event",
-            G_CALLBACK (vfo_configure_event_cb), NULL);
-  g_signal_connect (vfo_panel, "draw",
-            G_CALLBACK (vfo_draw_cb), NULL);
-
-  /* Event signals */
-  g_signal_connect (vfo_panel, "button-press-event",
-            G_CALLBACK (vfo_press_event_cb), NULL);
-  g_signal_connect(vfo_panel,"scroll_event",
-            G_CALLBACK(vfo_scroll_event_cb),NULL);
-  gtk_widget_set_events (vfo_panel, gtk_widget_get_events (vfo_panel)
-                     | GDK_BUTTON_PRESS_MASK
-                     | GDK_SCROLL_MASK);
-
-  return vfo_panel;
-}