From 1116da0cf67cf6d41bf407260936174e09ce631c Mon Sep 17 00:00:00 2001 From: John Melton G0ORX Date: Fri, 8 Nov 2019 11:43:02 +0000 Subject: [PATCH] Added new functions to midi. Fixed RIT bug when in CTUN mode. Moved some indicators on VFO. --- Makefile.orig | 426 ------------ discovery.c.orig | 283 -------- ext.c | 19 +- ext.h | 1 + general_menu.c.orig | 350 ---------- gpio.c | 8 +- gpio.c.orig | 1570 ------------------------------------------- main.c.orig | 885 ------------------------ midi.h | 24 +- midi2.c | 6 + midi3.c | 62 +- radio.c.orig | 1541 ------------------------------------------ receiver.c | 3 + rx_menu.c.orig | 415 ------------ toolbar.c.orig | 883 ------------------------ transmitter.c.orig | 1013 ---------------------------- transmitter.h.orig | 154 ----- vfo.c | 19 +- vfo.c.orig | 854 ----------------------- 19 files changed, 114 insertions(+), 8402 deletions(-) delete mode 100644 Makefile.orig delete mode 100644 discovery.c.orig delete mode 100644 general_menu.c.orig delete mode 100644 gpio.c.orig delete mode 100644 main.c.orig delete mode 100644 radio.c.orig delete mode 100644 rx_menu.c.orig delete mode 100644 toolbar.c.orig delete mode 100644 transmitter.c.orig delete mode 100644 transmitter.h.orig delete mode 100644 vfo.c.orig diff --git a/Makefile.orig b/Makefile.orig deleted file mode 100644 index 6e35039..0000000 --- a/Makefile.orig +++ /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 index 908fa3a..0000000 --- a/discovery.c.orig +++ /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 -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#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;iprotocol,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 155f4e5..20e72d3 100644 --- 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 115d05e..f533aca 100644 --- 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 index 6bbc78e..0000000 --- a/general_menu.c.orig +++ /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 -#include -#include -#include - -#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 e9e18dc..70ce4e8 100644 --- 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 index 72ecd23..0000000 --- a/gpio.c.orig +++ /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 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#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 -#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 && posid].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 index 9d6c988..0000000 --- a/main.c.orig +++ /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 -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#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;iprotocol,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 1f68f0c..2104e43 100644 --- a/midi.h +++ b/midi.h @@ -48,32 +48,36 @@ // 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 9b950e2..f862bde 100644 --- 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 2a2fd05..08bbcd2 100644 --- 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 index d7b94ed..0000000 --- a/radio.c.orig +++ /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 -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#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) (xpanel,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;iprotocol) { - 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;ix=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;ifreedv) { - 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;iid,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;ipanel,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;iid,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(fmaxf) 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(fmaxf) 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;ifps * 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;ilow_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;ifft_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; - } -} diff --git a/receiver.c b/receiver.c index 4f4be81..48a3380 100644 --- a/receiver.c +++ b/receiver.c @@ -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 index 4606dd6..0000000 --- a/rx_menu.c.orig +++ /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 -#include -#include -#include -#include - -#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;iadc==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;iaudio_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 index 9343408..0000000 --- a/toolbar.c.orig +++ /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 -#include -#include -#include -#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),"AB"); - 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: - // AB - 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 index 1adc8d6..0000000 --- a/transmitter.c.orig +++ /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 -#include -#include -#include - -#include - -#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>>>>>> 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;joutput_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;sfreedv_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 index fa7ee57..0000000 --- a/transmitter.h.orig +++ /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 - -#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 9097885..97b4c51 100644 --- 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 index 152fb1f..0000000 --- a/vfo.c.orig +++ /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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#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;iid; - - 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; -} -- 2.45.2