#required for FREEDV (uncomment lines below)
-#FREEDV_INCLUDE=FREEDV
+FREEDV_INCLUDE=FREEDV
ifeq ($(FREEDV_INCLUDE),FREEDV)
FREEDV_OPTIONS=-D FREEDV
freedv.o
endif
+#required for MRAA GPIO
+#MRAA_INCLUDE=MRAA
+
+ifeq ($(MRAA_INCLUDE),MRAA)
+ GPIO_LIBS=-lmraa
+ GPIO_SOURCES= \
+ gpio_mraa.c
+ GPIO_HEADERS= \
+ gpio.h
+ GPIO_OBJS= \
+ gpio_mraa.o
+else
+ ifeq ($(UNAME_N),raspberrypi)
+ GPIO_LIBS=-lwiringPi -lpigpio
+ endif
+ ifeq ($(UNAME_N),odroid)
+ GPIO_LIBS=-lwiringPi
+ endif
+ GPIO_SOURCES= \
+ gpio.c
+ GPIO_HEADERS= \
+ gpio.h
+ GPIO_OBJS= \
+ gpio.o
+endif
+
OPTIONS=-g -D $(UNAME_N) $(LIMESDR_OPTIONS) $(FREEDV_OPTIONS) -O3
GTKINCLUDES=`pkg-config --cflags gtk+-3.0`
GTKLIBS=`pkg-config --libs gtk+-3.0`
-
-ifeq ($(UNAME_N),raspberrypi)
-GPIOLIBS=-lwiringPi -lpigpio
-endif
-ifeq ($(UNAME_N),odroid)
-GPIOLIBS=-lwiringPi
-endif
-LIBS=-lrt -lm -lwdsp -lpthread $(GTKLIBS) $(GPIOLIBS) $(SOAPYSDRLIBS) $(FREEDVLIBS)
+LIBS=-lrt -lm -lwdsp -lpthread $(GTKLIBS) $(GPIO_LIBS) $(SOAPYSDRLIBS) $(FREEDVLIBS)
INCLUDES=$(GTKINCLUDES)
COMPILE=$(CC) $(OPTIONS) $(INCLUDES)
SOURCES= \
band.c \
+configure.c \
frequency.c \
discovered.c \
filter.c \
panadapter.c \
property.c \
radio.c \
-gpio.c \
splash.c \
toolbar.c \
sliders.c \
agc.h \
alex.h \
band.h \
+configure.h \
frequency.h \
bandstack.h \
channel.h \
panadapter.h \
property.h \
radio.h \
-gpio.h \
splash.h \
toolbar.h \
sliders.h \
OBJS= \
band.o \
+configure.o \
frequency.o \
discovered.o \
filter.o \
panadapter.o \
property.o \
radio.o \
-gpio.o \
splash.o \
toolbar.o \
sliders.o \
waterfall.o \
wdsp_init.o
-all: prebuild $(PROGRAM) $(HEADERS) $(LIMESDR_HEADERS) $(SOURCES) $(LIMESDR_SOURCES) $(FREEDV_SOURCES)
+all: prebuild $(PROGRAM) $(HEADERS) $(LIMESDR_HEADERS) $(FREEDV_HEADERS) $(GPIO_HEADERS) $(SOURCES) $(LIMESDR_SOURCES) $(FREEDV_SOURCES) $(GPIO_SOURCES)
prebuild:
rm -f version.o
-$(PROGRAM): $(OBJS) $(LIMESDR_OBJS) $(FREEDV_OBJS)
- $(LINK) -o $(PROGRAM) $(OBJS) $(LIMESDR_OBJS) $(FREEDV_OBJS) $(LIBS)
+$(PROGRAM): $(OBJS) $(LIMESDR_OBJS) $(FREEDV_OBJS) $(GPIO_OBJS)
+ $(LINK) -o $(PROGRAM) $(OBJS) $(GPIO_OBJS) $(LIMESDR_OBJS) $(FREEDV_OBJS) $(LIBS)
.c.o:
$(COMPILE) -c -o $@ $<
--- /dev/null
+/* Copyright (C)
+* 2015 - John Melton, G0ORX/N6LYT
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*
+*/
+
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+#include <math.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <semaphore.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include "main.h"
+#include "channel.h"
+#include "discovered.h"
+#include "radio.h"
+#include "gpio.h"
+
+#ifdef raspberrypi
+#define INCLUDE_GPIO
+#endif
+#ifdef odroid
+#define INCLUDE_GPIO
+#endif
+#ifdef up
+#define INCLUDE_GPIO
+#endif
+
+static void sample_rate_cb(GtkWidget *widget, gpointer data) {
+ sample_rate=(int)data;
+}
+
+static void display_panadapter_cb(GtkWidget *widget, gpointer data) {
+ display_panadapter=display_panadapter==1?0:1;
+}
+
+static void display_waterfall_cb(GtkWidget *widget, gpointer data) {
+ display_waterfall=display_waterfall==1?0:1;
+}
+
+static void display_sliders_cb(GtkWidget *widget, gpointer data) {
+ display_sliders=display_sliders==1?0:1;
+}
+
+static void display_toolbar_cb(GtkWidget *widget, gpointer data) {
+ display_toolbar=display_toolbar==1?0:1;
+}
+
+static void toolbar_simulate_buttons_cb(GtkWidget *widget, gpointer data) {
+ toolbar_simulate_buttons=toolbar_simulate_buttons==1?0:1;
+}
+
+#ifdef INCLUDE_GPIO
+void configure_gpio(GtkWidget *parent) {
+ gpio_restore_state();
+
+ GtkWidget *dialog=gtk_dialog_new_with_buttons("Configure GPIO",GTK_WINDOW(parent),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 *b_enable_vfo_encoder=gtk_check_button_new_with_label("Enable VFO");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_vfo_encoder), ENABLE_VFO_ENCODER);
+ gtk_widget_show(b_enable_vfo_encoder);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_vfo_encoder,0,0,1,1);
+
+ GtkWidget *vfo_a_label=gtk_label_new("GPIO A:");
+ gtk_widget_show(vfo_a_label);
+ gtk_grid_attach(GTK_GRID(grid),vfo_a_label,1,0,1,1);
+
+ GtkWidget *vfo_a=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(vfo_a),VFO_ENCODER_A);
+ gtk_widget_show(vfo_a);
+ gtk_grid_attach(GTK_GRID(grid),vfo_a,2,0,1,1);
+
+ GtkWidget *vfo_b_label=gtk_label_new("GPIO B:");
+ gtk_widget_show(vfo_b_label);
+ gtk_grid_attach(GTK_GRID(grid),vfo_b_label,3,0,1,1);
+
+ GtkWidget *vfo_b=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(vfo_b),VFO_ENCODER_B);
+ gtk_widget_show(vfo_b);
+ gtk_grid_attach(GTK_GRID(grid),vfo_b,4,0,1,1);
+
+ GtkWidget *b_enable_vfo_pullup=gtk_check_button_new_with_label("Enable Pull-up");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_vfo_pullup), ENABLE_VFO_PULLUP);
+ gtk_widget_show(b_enable_vfo_pullup);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_vfo_pullup,5,0,1,1);
+
+
+
+ GtkWidget *b_enable_af_encoder=gtk_check_button_new_with_label("Enable AF");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_af_encoder), ENABLE_AF_ENCODER);
+ gtk_widget_show(b_enable_af_encoder);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_af_encoder,0,1,1,1);
+
+ GtkWidget *af_a_label=gtk_label_new("GPIO A:");
+ gtk_widget_show(af_a_label);
+ gtk_grid_attach(GTK_GRID(grid),af_a_label,1,1,1,1);
+
+ GtkWidget *af_a=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(af_a),AF_ENCODER_A);
+ gtk_widget_show(af_a);
+ gtk_grid_attach(GTK_GRID(grid),af_a,2,1,1,1);
+
+ GtkWidget *af_b_label=gtk_label_new("GPIO B:");
+ gtk_widget_show(af_b_label);
+ gtk_grid_attach(GTK_GRID(grid),af_b_label,3,1,1,1);
+
+ GtkWidget *af_b=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(af_b),AF_ENCODER_B);
+ gtk_widget_show(af_b);
+ gtk_grid_attach(GTK_GRID(grid),af_b,4,1,1,1);
+
+ GtkWidget *b_enable_af_pullup=gtk_check_button_new_with_label("Enable Pull-up");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_af_pullup), ENABLE_AF_PULLUP);
+ gtk_widget_show(b_enable_af_pullup);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_af_pullup,5,1,1,1);
+
+
+
+ GtkWidget *b_enable_rf_encoder=gtk_check_button_new_with_label("Enable RF");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_rf_encoder), ENABLE_RF_ENCODER);
+ gtk_widget_show(b_enable_rf_encoder);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_rf_encoder,0,2,1,1);
+
+ GtkWidget *rf_a_label=gtk_label_new("GPIO A:");
+ gtk_widget_show(rf_a_label);
+ gtk_grid_attach(GTK_GRID(grid),rf_a_label,1,2,1,1);
+
+ GtkWidget *rf_a=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(rf_a),RF_ENCODER_A);
+ gtk_widget_show(rf_a);
+ gtk_grid_attach(GTK_GRID(grid),rf_a,2,2,1,1);
+
+ GtkWidget *rf_b_label=gtk_label_new("GPIO B:");
+ gtk_widget_show(rf_b_label);
+ gtk_grid_attach(GTK_GRID(grid),rf_b_label,3,2,1,1);
+
+ GtkWidget *rf_b=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(rf_b),RF_ENCODER_B);
+ gtk_widget_show(rf_b);
+ gtk_grid_attach(GTK_GRID(grid),rf_b,4,2,1,1);
+
+ GtkWidget *b_enable_rf_pullup=gtk_check_button_new_with_label("Enable Pull-up");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_rf_pullup), ENABLE_RF_PULLUP);
+ gtk_widget_show(b_enable_rf_pullup);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_rf_pullup,5,2,1,1);
+
+
+
+ GtkWidget *b_enable_agc_encoder=gtk_check_button_new_with_label("Enable AGC");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_agc_encoder), ENABLE_AGC_ENCODER);
+ gtk_widget_show(b_enable_agc_encoder);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_agc_encoder,0,3,1,1);
+
+ GtkWidget *agc_a_label=gtk_label_new("GPIO A:");
+ gtk_widget_show(agc_a_label);
+ gtk_grid_attach(GTK_GRID(grid),agc_a_label,1,3,1,1);
+
+ GtkWidget *agc_a=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(agc_a),AGC_ENCODER_A);
+ gtk_widget_show(agc_a);
+ gtk_grid_attach(GTK_GRID(grid),agc_a,2,3,1,1);
+
+ GtkWidget *agc_b_label=gtk_label_new("GPIO B:");
+ gtk_widget_show(agc_b_label);
+ gtk_grid_attach(GTK_GRID(grid),agc_b_label,3,3,1,1);
+
+ GtkWidget *agc_b=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(agc_b),AGC_ENCODER_B);
+ gtk_widget_show(agc_b);
+ gtk_grid_attach(GTK_GRID(grid),agc_b,4,3,1,1);
+
+ GtkWidget *b_enable_agc_pullup=gtk_check_button_new_with_label("Enable Pull-up");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_agc_pullup), ENABLE_AGC_PULLUP);
+ gtk_widget_show(b_enable_agc_pullup);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_agc_pullup,5,3,1,1);
+
+
+
+ GtkWidget *b_enable_band=gtk_check_button_new_with_label("Enable Band");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_band), ENABLE_BAND_BUTTON);
+ gtk_widget_show(b_enable_band);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_band,0,4,1,1);
+
+ GtkWidget *band_label=gtk_label_new("GPIO:");
+ gtk_widget_show(band_label);
+ gtk_grid_attach(GTK_GRID(grid),band_label,1,4,1,1);
+
+ GtkWidget *band=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(band),BAND_BUTTON);
+ gtk_widget_show(band);
+ gtk_grid_attach(GTK_GRID(grid),band,2,4,1,1);
+
+
+ GtkWidget *b_enable_mode=gtk_check_button_new_with_label("Enable Mode");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_mode), ENABLE_MODE_BUTTON);
+ gtk_widget_show(b_enable_mode);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_mode,0,5,1,1);
+
+ GtkWidget *mode_label=gtk_label_new("GPIO:");
+ gtk_widget_show(mode_label);
+ gtk_grid_attach(GTK_GRID(grid),mode_label,1,5,1,1);
+
+ GtkWidget *mode=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(mode),MODE_BUTTON);
+ gtk_widget_show(mode);
+ gtk_grid_attach(GTK_GRID(grid),mode,2,5,1,1);
+
+
+ GtkWidget *b_enable_filter=gtk_check_button_new_with_label("Enable Filter");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_filter), ENABLE_FILTER_BUTTON);
+ gtk_widget_show(b_enable_filter);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_filter,0,6,1,1);
+
+ GtkWidget *filter_label=gtk_label_new("GPIO:");
+ gtk_widget_show(filter_label);
+ gtk_grid_attach(GTK_GRID(grid),filter_label,1,6,1,1);
+
+ GtkWidget *filter=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(filter),FILTER_BUTTON);
+ gtk_widget_show(filter);
+ gtk_grid_attach(GTK_GRID(grid),filter,2,6,1,1);
+
+
+ GtkWidget *b_enable_noise=gtk_check_button_new_with_label("Enable Noise");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_noise), ENABLE_NOISE_BUTTON);
+ gtk_widget_show(b_enable_noise);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_noise,0,7,1,1);
+
+ GtkWidget *noise_label=gtk_label_new("GPIO:");
+ gtk_widget_show(noise_label);
+ gtk_grid_attach(GTK_GRID(grid),noise_label,1,7,1,1);
+
+ GtkWidget *noise=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(noise),NOISE_BUTTON);
+ gtk_widget_show(noise);
+ gtk_grid_attach(GTK_GRID(grid),noise,2,7,1,1);
+
+
+ GtkWidget *b_enable_agc=gtk_check_button_new_with_label("Enable AGC");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_agc), ENABLE_AGC_BUTTON);
+ gtk_widget_show(b_enable_agc);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_agc,0,8,1,1);
+
+ GtkWidget *agc_label=gtk_label_new("GPIO:");
+ gtk_widget_show(agc_label);
+ gtk_grid_attach(GTK_GRID(grid),agc_label,1,8,1,1);
+
+ GtkWidget *agc=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(agc),AGC_BUTTON);
+ gtk_widget_show(agc);
+ gtk_grid_attach(GTK_GRID(grid),agc,2,8,1,1);
+
+
+ GtkWidget *b_enable_mox=gtk_check_button_new_with_label("Enable MOX");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_mox), ENABLE_MOX_BUTTON);
+ gtk_widget_show(b_enable_mox);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_mox,0,9,1,1);
+
+ GtkWidget *mox_label=gtk_label_new("GPIO:");
+ gtk_widget_show(mox_label);
+ gtk_grid_attach(GTK_GRID(grid),mox_label,1,9,1,1);
+
+ GtkWidget *mox=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(mox),MOX_BUTTON);
+ gtk_widget_show(mox);
+ gtk_grid_attach(GTK_GRID(grid),mox,2,9,1,1);
+
+
+ GtkWidget *b_enable_function=gtk_check_button_new_with_label("Enable Function");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_function), ENABLE_FUNCTION_BUTTON);
+ gtk_widget_show(b_enable_function);
+ gtk_grid_attach(GTK_GRID(grid),b_enable_function,0,10,1,1);
+
+ GtkWidget *function_label=gtk_label_new("GPIO:");
+ gtk_widget_show(function_label);
+ gtk_grid_attach(GTK_GRID(grid),function_label,1,10,1,1);
+
+ GtkWidget *function=gtk_spin_button_new_with_range (0.0,100.0,1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(function),FUNCTION_BUTTON);
+ gtk_widget_show(function);
+ gtk_grid_attach(GTK_GRID(grid),function,2,10,1,1);
+
+
+
+ gtk_container_add(GTK_CONTAINER(content),grid);
+
+ 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 20"));
+ gtk_widget_show_all(dialog);
+
+ int result=gtk_dialog_run(GTK_DIALOG(dialog));
+
+ ENABLE_VFO_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_vfo_encoder))?1:0;
+ VFO_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(vfo_a));
+ VFO_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(vfo_b));
+ ENABLE_VFO_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_vfo_pullup))?1:0;
+ ENABLE_AF_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_af_encoder))?1:0;
+ AF_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(af_a));
+ AF_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(af_b));
+ ENABLE_AF_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_af_pullup))?1:0;
+ ENABLE_RF_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_rf_encoder))?1:0;
+ RF_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(rf_a));
+ RF_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(rf_b));
+ ENABLE_RF_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_rf_pullup))?1:0;
+ ENABLE_AGC_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_agc_encoder))?1:0;
+ AGC_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(agc_a));
+ AGC_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(agc_b));
+ ENABLE_AGC_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_agc_pullup))?1:0;
+ ENABLE_BAND_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_band))?1:0;
+ BAND_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(band));
+ ENABLE_MODE_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_mode))?1:0;
+ MODE_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(mode));
+ ENABLE_FILTER_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_filter))?1:0;
+ FILTER_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(filter));
+ ENABLE_NOISE_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_noise))?1:0;
+ NOISE_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(noise));
+ ENABLE_AGC_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_agc))?1:0;
+ AGC_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(agc));
+ ENABLE_MOX_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_mox))?1:0;
+ MOX_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(mox));
+ ENABLE_FUNCTION_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_function))?1:0;
+ FUNCTION_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(function));
+
+ gtk_widget_destroy(dialog);
+
+ gpio_save_state();
+}
+#endif
+
+void configure(DISCOVERED* d,GtkWidget *parent) {
+
+ GtkWidget *dialog=gtk_dialog_new_with_buttons("Configure",GTK_WINDOW(parent),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),FALSE);
+ gtk_grid_set_row_homogeneous(GTK_GRID(grid),FALSE);
+
+ GtkWidget *sample_rate_label=gtk_label_new("Sample Rate:");
+ //gtk_widget_override_font(sample_rate_label, pango_font_description_from_string("Arial 18"));
+ gtk_widget_show(sample_rate_label);
+ gtk_grid_attach(GTK_GRID(grid),sample_rate_label,0,0,1,1);
+
+ GtkWidget *sample_rate_48=gtk_radio_button_new_with_label(NULL,"48000");
+ //gtk_widget_override_font(sample_rate_48, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_48), sample_rate==48000);
+ gtk_widget_show(sample_rate_48);
+ gtk_grid_attach(GTK_GRID(grid),sample_rate_48,0,1,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_widget_override_font(sample_rate_96, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_96), sample_rate==96000);
+ gtk_widget_show(sample_rate_96);
+ gtk_grid_attach(GTK_GRID(grid),sample_rate_96,0,2,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_widget_override_font(sample_rate_192, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_192), sample_rate==192000);
+ gtk_widget_show(sample_rate_192);
+ gtk_grid_attach(GTK_GRID(grid),sample_rate_192,0,3,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_widget_override_font(sample_rate_384, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_384), sample_rate==384000);
+ gtk_widget_show(sample_rate_384);
+ gtk_grid_attach(GTK_GRID(grid),sample_rate_384,0,4,1,1);
+ g_signal_connect(sample_rate_384,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)384000);
+
+ if(d->protocol==NEW_PROTOCOL
+#ifdef LIMESDR
+ || d->protocol==LIMESDR_PROTOCOL
+#endif
+ ) {
+ GtkWidget *sample_rate_768=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_384),"768000");
+ //gtk_widget_override_font(sample_rate_768, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_768), sample_rate==768000);
+ gtk_widget_show(sample_rate_768);
+ gtk_grid_attach(GTK_GRID(grid),sample_rate_768,0,5,1,1);
+ g_signal_connect(sample_rate_768,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)768000);
+
+ GtkWidget *sample_rate_921=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_768),"921180");
+ //gtk_widget_override_font(sample_rate_921, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_921), sample_rate==921180);
+ gtk_widget_show(sample_rate_921);
+ gtk_grid_attach(GTK_GRID(grid),sample_rate_921,0,6,1,1);
+ g_signal_connect(sample_rate_921,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)921180);
+
+ GtkWidget *sample_rate_1536=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_921),"1536000");
+ //gtk_widget_override_font(sample_rate_1536, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_1536), sample_rate==1536000);
+ gtk_widget_show(sample_rate_1536);
+ 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 LIMESDR
+ if(d->protocol==LIMESDR_PROTOCOL) {
+ GtkWidget *sample_rate_1M=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_1536),"1048576");
+ //gtk_widget_override_font(sample_rate_1M, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_1M), sample_rate==1048576);
+ gtk_widget_show(sample_rate_1M);
+ gtk_grid_attach(GTK_GRID(grid),sample_rate_1M,0,8,1,1);
+ g_signal_connect(sample_rate_1M,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)1048576);
+
+ GtkWidget *sample_rate_2M=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_1M),"2097152");
+ //gtk_widget_override_font(sample_rate_2M, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_2M), sample_rate==2097152);
+ gtk_widget_show(sample_rate_2M);
+ gtk_grid_attach(GTK_GRID(grid),sample_rate_2M,0,9,1,1);
+ g_signal_connect(sample_rate_2M,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)2097152);
+ }
+#endif
+ }
+
+
+ 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,9,1,1);
+
+ GtkWidget *b_display_panadapter=gtk_check_button_new_with_label("Display Panadapter");
+ //gtk_widget_override_font(b_display_panadapter, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_display_panadapter), display_panadapter);
+ gtk_widget_show(b_display_panadapter);
+ gtk_grid_attach(GTK_GRID(grid),b_display_panadapter,0,10,1,1);
+ g_signal_connect(b_display_panadapter,"toggled",G_CALLBACK(display_panadapter_cb),(gpointer *)NULL);
+
+ GtkWidget *b_display_waterfall=gtk_check_button_new_with_label("Display Waterfall");
+ //gtk_widget_override_font(b_display_waterfall, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_display_waterfall), display_waterfall);
+ gtk_widget_show(b_display_waterfall);
+ gtk_grid_attach(GTK_GRID(grid),b_display_waterfall,0,11,1,1);
+ g_signal_connect(b_display_waterfall,"toggled",G_CALLBACK(display_waterfall_cb),(gpointer *)NULL);
+
+ GtkWidget *b_display_sliders=gtk_check_button_new_with_label("Display Sliders");
+ //gtk_widget_override_font(b_display_sliders, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_display_sliders), display_sliders);
+ gtk_widget_show(b_display_sliders);
+ gtk_grid_attach(GTK_GRID(grid),b_display_sliders,0,12,1,1);
+ g_signal_connect(b_display_sliders,"toggled",G_CALLBACK(display_sliders_cb),(gpointer *)NULL);
+
+ GtkWidget *b_display_toolbar=gtk_check_button_new_with_label("Display Toolbar");
+ //gtk_widget_override_font(b_display_toolbar, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_display_toolbar), display_toolbar);
+ gtk_widget_show(b_display_toolbar);
+ gtk_grid_attach(GTK_GRID(grid),b_display_toolbar,0,13,1,1);
+ g_signal_connect(b_display_toolbar,"toggled",G_CALLBACK(display_toolbar_cb),(gpointer *)NULL);
+
+ GtkWidget *b_toolbar_simulate_buttons=gtk_check_button_new_with_label("Toolbar Simulate Buttons");
+ //gtk_widget_override_font(b_toolbar_simulate_buttons, pango_font_description_from_string("Arial 18"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_toolbar_simulate_buttons), toolbar_simulate_buttons);
+ gtk_widget_show(b_toolbar_simulate_buttons);
+ gtk_grid_attach(GTK_GRID(grid),b_toolbar_simulate_buttons,0,14,1,1);
+ g_signal_connect(b_toolbar_simulate_buttons,"toggled",G_CALLBACK(toolbar_simulate_buttons_cb),(gpointer *)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 20"));
+ 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));
+
+ radioSaveState();
+
+}
--- /dev/null
+/* 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.
+*
+*/
+
+
+#ifdef INCLUDE_GPIO
+void configure_gpio(GtkWidget *parent);
+#endif
+void configure(DISCOVERED *d,GtkWidget *parent);
int freedv_rx_text_data_index=0;
static void my_put_next_rx_char(void *callback_state, char c) {
+ int i;
fprintf(stderr, "freedv: my_put_next_rx_char: %c sync=%d\n", c, freedv_sync);
if(freedv_sync) {
if(c==0x0D) {
- freedv_rx_text_data_index=0;
- } else {
- freedv_rx_text_data[freedv_rx_text_data_index++]=c;
- freedv_rx_text_data[freedv_rx_text_data_index]=0;
- if(freedv_rx_text_data_index>=62) {
- freedv_rx_text_data_index=0;
- }
+ c='|';
}
+ for(i=0;i<62;i++) {
+ freedv_rx_text_data[i]=freedv_rx_text_data[i+1];
+ }
+ freedv_rx_text_data[62]=c;
}
}
}
void init_freedv() {
+ int i;
fprintf(stderr,"init_freedv\n");
+
modem=freedv_open(FREEDV_MODE_1600);
if(modem==NULL) {
fprintf(stderr,"freedv_open: modem is null\n");
int rate=freedv_get_modem_sample_rate(modem);
fprintf(stderr,"freedv modem sample rate=%d\n",rate);
- strcpy(freedv_rx_text_data,"");
+ for(i=0;i<63;i++) {
+ freedv_rx_text_data[i]=' ';
+ }
+ freedv_rx_text_data[63]=0;
}
void close_freedv() {
int ENABLE_VFO_ENCODER=1;
int ENABLE_VFO_PULLUP=1;
-#ifdef raspberrypi
int VFO_ENCODER_A=17;
int VFO_ENCODER_B=18;
-#endif
#ifdef odroid
-int VFO_ENCODER_A=88;
-int VFO_ENCODER_B=87;
int VFO_ENCODER_A_PIN=0;
int VFO_ENCODER_B_PIN=1;
#endif
-int ENABLE_AF_ENCODER=88;
+int ENABLE_AF_ENCODER=1;
int ENABLE_AF_PULLUP=0;
int AF_ENCODER_A=20;
int AF_ENCODER_B=26;
int ENABLE_LOCK_BUTTON=1;
int LOCK_BUTTON=25;
-
-
-/*
-#define PI_VFO_ENCODER_A 17
-#define PI_VFO_ENCODER_B 18
-
-#define ODROID_VFO_ENCODER_A 88
-#define ODROID_VFO_ENCODER_B 87
-#define ODROID_VFO_ENCODER_A_PIN 0
-#define ODROID_VFO_ENCODER_B_PIN 1
-
-#define AF_ENCODER_A 20
-#define AF_ENCODER_B 26
-#define AF_FUNCTION 21
-
-#define RF_ENCODER_A 16
-#define RF_ENCODER_B 19
-#define RF_FUNCTION 13
-
-#define FUNCTION_BUTTON 22
-#define BAND_BUTTON 13
-#define BANDSTACK_BUTTON 12
-#define MODE_BUTTON 6
-#define FILTER_BUTTON 5
-#define NOISE_BUTTON 24
-#define AGC_BUTTON 23
-#define MOX_BUTTON 27
-
-static int VFO_ENCODER_A=17;
-static int VFO_ENCODER_B=18;
-
-static int VFO_ENCODER_A_PIN=0;
-static int VFO_ENCODER_B_PIN=0;
-*/
-
static volatile int vfoEncoderPos;
static volatile int afEncoderPos;
static volatile int afFunction;
int gpio_init() {
fprintf(stderr,"encoder_init\n");
+
+#ifdef odroid
+ VFO_ENCODER_A=88;
+ VFO_ENCODER_B=87;
+#endif
+
gpio_restore_state();
- //if(strcmp(unameData.nodename,"raspberrypi")==0) {
#ifdef raspberrypi
fprintf(stderr,"encoder_init: VFO_ENCODER_A=%d VFO_ENCODER_B=%d\n",VFO_ENCODER_A,VFO_ENCODER_B);
}
#endif
-// } else if(strcmp(unameData.nodename,"odroid")==0) {
+
#ifdef odroid
//VFO_ENCODER_A=ODROID_VFO_ENCODER_A;
return 1;
}
#endif
-// } else {
-// fprintf(stderr,"Unknown nodename: %s. Rotary Encoder not enabled.\n",unameData.nodename);
-// return 1;
-// }
int rc=pthread_create(&rotary_encoder_thread_id, NULL, rotary_encoder_thread, NULL);
if(rc<0) {
*
*/
-#ifdef raspberrypi
-#define INCLUDE_GPIO
-#endif
-#ifdef odroid
-#define INCLUDE_GPIO
-#endif
-
-#ifdef INCLUDE_GPIO
extern int ENABLE_VFO_ENCODER;
extern int ENABLE_VFO_PULLUP;
extern int VFO_ENCODER_A;
int filter_get_state();
int noise_get_state();
int mox_get_state();
-
-#endif
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <poll.h>
+#include <sched.h>
+#include <pthread.h>
+#include <mraa.h>
+
+#include "band.h"
+#include "channel.h"
+#include "discovered.h"
+#include "mode.h"
+#include "filter.h"
+#include "bandstack.h"
+#include "toolbar.h"
+#include "gpio.h"
+#include "radio.h"
+#include "toolbar.h"
+#include "main.h"
+#include "property.h"
+#include "wdsp.h"
+
+
+int ENABLE_VFO_ENCODER=1;
+int ENABLE_VFO_PULLUP=1;
+int VFO_ENCODER_A=11;
+int VFO_ENCODER_B=12;
+int ENABLE_AF_ENCODER=1;
+int ENABLE_AF_PULLUP=0;
+int AF_ENCODER_A=38;
+int AF_ENCODER_B=37;
+int ENABLE_RF_ENCODER=1;
+int ENABLE_RF_PULLUP=0;
+int RF_ENCODER_A=36;
+int RF_ENCODER_B=35;
+int ENABLE_AGC_ENCODER=1;
+int ENABLE_AGC_PULLUP=0;
+int AGC_ENCODER_A=7;
+int AGC_ENCODER_B=40;
+int ENABLE_BAND_BUTTON=1;
+int BAND_BUTTON=33;
+int ENABLE_BANDSTACK_BUTTON=1;
+int BANDSTACK_BUTTON=32;
+int ENABLE_MODE_BUTTON=1;
+int MODE_BUTTON=31;
+int ENABLE_FILTER_BUTTON=1;
+int FILTER_BUTTON=29;
+int ENABLE_NOISE_BUTTON=1;
+int NOISE_BUTTON=18;
+int ENABLE_AGC_BUTTON=1;
+int AGC_BUTTON=16;
+int ENABLE_MOX_BUTTON=1;
+int MOX_BUTTON=13;
+int ENABLE_FUNCTION_BUTTON=1;
+int FUNCTION_BUTTON=15;
+int ENABLE_LOCK_BUTTON=1;
+int LOCK_BUTTON=22;
+int SPARE_RF_BUTTON=24;
+int SPARE_AGC_BUTTON=26;
+
+static mraa_gpio_context vfo_a_context;
+static mraa_gpio_context vfo_b_context;
+static mraa_gpio_context af_a_context;
+static mraa_gpio_context af_b_context;
+static mraa_gpio_context rf_a_context;
+static mraa_gpio_context rf_b_context;
+static mraa_gpio_context agc_a_context;
+static mraa_gpio_context agc_b_context;
+static mraa_gpio_context band_context;
+static mraa_gpio_context bandstack_context;
+static mraa_gpio_context mode_context;
+static mraa_gpio_context filter_context;
+static mraa_gpio_context noise_context;
+static mraa_gpio_context agc_context;
+static mraa_gpio_context mox_context;
+static mraa_gpio_context function_context;
+static mraa_gpio_context lock_context;
+static mraa_gpio_context rf_sw_context;
+static mraa_gpio_context agc_sw_context;
+
+static volatile int vfoEncoderPos;
+static volatile int afEncoderPos;
+static volatile int rfEncoderPos;
+static volatile int agcEncoderPos;
+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 void* rotary_encoder_thread(void *arg);
+static pthread_t rotary_encoder_thread_id;
+static int previous_function_button=0;
+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 lock_button=0;
+static int previous_lock_button=0;
+
+
+static void function_interrupt(void *args) {
+ function_state=(mraa_gpio_read(function_context)==0);
+}
+
+static void band_interrupt(void *args) {
+ band_state=(mraa_gpio_read(band_context)==0);
+}
+
+static void bandstack_interrupt(void *args) {
+ bandstack_state=(mraa_gpio_read(bandstack_context)==0);
+}
+
+static void mode_interrupt(void *args) {
+ mode_state=(mraa_gpio_read(mode_context)==0);
+}
+
+static void filter_interrupt(void *args) {
+ filter_state=(mraa_gpio_read(filter_context)==0);
+}
+
+static void noise_interrupt(void *args) {
+ noise_state=(mraa_gpio_read(noise_context)==0);
+}
+
+static void agc_interrupt(void *args) {
+ agc_state=(mraa_gpio_read(agc_context)==0);
+}
+
+static void mox_interrupt(void *args) {
+ mox_state=(mraa_gpio_read(mox_context)==0);
+}
+
+static void lock_interrupt(void *args) {
+ lock_state=(mraa_gpio_read(lock_context)==0);
+}
+
+static void vfo_interrupt(void *args) {
+fprintf(stderr,"vfo_interrupt\n");
+ if(mraa_gpio_read(vfo_a_context)) {
+ if(mraa_gpio_read(vfo_b_context)) {
+ ++vfoEncoderPos;
+ } else {
+ --vfoEncoderPos;
+ }
+ fprintf(stderr,"vfo pos=%d\n",vfoEncoderPos);
+ }
+}
+
+static void af_interrupt(void *args) {
+fprintf(stderr,"af_interrupt\n");
+ if(mraa_gpio_read(af_a_context)) {
+ if(mraa_gpio_read(af_b_context)) {
+ ++afEncoderPos;
+ } else {
+ --afEncoderPos;
+ }
+ fprintf(stderr,"af pos=%d\n",afEncoderPos);
+ }
+}
+
+static void rf_interrupt(void *args) {
+fprintf(stderr,"rf_interrupt\n");
+ if(mraa_gpio_read(rf_a_context)) {
+ if(mraa_gpio_read(rf_b_context)) {
+ ++rfEncoderPos;
+ } else {
+ --rfEncoderPos;
+ }
+ fprintf(stderr,"rf pos=%d\n",rfEncoderPos);
+ }
+}
+
+static void agc_encoder_interrupt(void *args) {
+fprintf(stderr,"agc_interrupt\n");
+ if(mraa_gpio_read(agc_a_context)) {
+ if(mraa_gpio_read(agc_b_context)) {
+ ++agcEncoderPos;
+ } else {
+ --agcEncoderPos;
+ }
+ fprintf(stderr,"agc pos=%d\n",agcEncoderPos);
+ }
+}
+
+
+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_AF_ENCODER");
+ if(value) ENABLE_AF_ENCODER=atoi(value);
+ value=getProperty("ENABLE_AF_PULLUP");
+ if(value) ENABLE_AF_PULLUP=atoi(value);
+ value=getProperty("AF_ENCODER_A");
+ if(value) AF_ENCODER_A=atoi(value);
+ value=getProperty("AF_ENCODER_B");
+ if(value) AF_ENCODER_B=atoi(value);
+ value=getProperty("ENABLE_RF_ENCODER");
+ if(value) ENABLE_RF_ENCODER=atoi(value);
+ value=getProperty("ENABLE_RF_PULLUP");
+ if(value) ENABLE_RF_PULLUP=atoi(value);
+ value=getProperty("RF_ENCODER_A");
+ if(value) RF_ENCODER_A=atoi(value);
+ value=getProperty("RF_ENCODER_B");
+ if(value) RF_ENCODER_B=atoi(value);
+ value=getProperty("ENABLE_AGC_ENCODER");
+ if(value) ENABLE_AGC_ENCODER=atoi(value);
+ value=getProperty("ENABLE_AGC_PULLUP");
+ if(value) ENABLE_AGC_PULLUP=atoi(value);
+ value=getProperty("AGC_ENCODER_A");
+ if(value) AGC_ENCODER_A=atoi(value);
+ value=getProperty("AGC_ENCODER_B");
+ if(value) AGC_ENCODER_B=atoi(value);
+ value=getProperty("ENABLE_BAND_BUTTON");
+ if(value) ENABLE_BAND_BUTTON=atoi(value);
+ value=getProperty("BAND_BUTTON");
+ if(value) BAND_BUTTON=atoi(value);
+ value=getProperty("ENABLE_BANDSTACK_BUTTON");
+ if(value) ENABLE_BANDSTACK_BUTTON=atoi(value);
+ value=getProperty("BANDSTACK_BUTTON");
+ if(value) BANDSTACK_BUTTON=atoi(value);
+ value=getProperty("ENABLE_MODE_BUTTON");
+ if(value) ENABLE_MODE_BUTTON=atoi(value);
+ value=getProperty("MODE_BUTTON");
+ if(value) MODE_BUTTON=atoi(value);
+ value=getProperty("ENABLE_FILTER_BUTTON");
+ if(value) ENABLE_FILTER_BUTTON=atoi(value);
+ value=getProperty("FILTER_BUTTON");
+ if(value) FILTER_BUTTON=atoi(value);
+ value=getProperty("ENABLE_NOISE_BUTTON");
+ if(value) ENABLE_NOISE_BUTTON=atoi(value);
+ value=getProperty("NOISE_BUTTON");
+ if(value) NOISE_BUTTON=atoi(value);
+ value=getProperty("ENABLE_AGC_BUTTON");
+ if(value) ENABLE_AGC_BUTTON=atoi(value);
+ value=getProperty("AGC_BUTTON");
+ if(value) AGC_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);
+ value=getProperty("ENABLE_LOCK_BUTTON");
+ if(value) ENABLE_LOCK_BUTTON=atoi(value);
+ value=getProperty("LOCK_BUTTON");
+ if(value) LOCK_BUTTON=atoi(value);
+}
+
+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_AF_ENCODER);
+ setProperty("ENABLE_AF_ENCODER",value);
+ sprintf(value,"%d",ENABLE_AF_PULLUP);
+ setProperty("ENABLE_AF_PULLUP",value);
+ sprintf(value,"%d",AF_ENCODER_A);
+ setProperty("AF_ENCODER_A",value);
+ sprintf(value,"%d",AF_ENCODER_B);
+ setProperty("AF_ENCODER_B",value);
+ sprintf(value,"%d",ENABLE_RF_ENCODER);
+ setProperty("ENABLE_RF_ENCODER",value);
+ sprintf(value,"%d",ENABLE_RF_PULLUP);
+ setProperty("ENABLE_RF_PULLUP",value);
+ sprintf(value,"%d",RF_ENCODER_A);
+ setProperty("RF_ENCODER_A",value);
+ sprintf(value,"%d",RF_ENCODER_B);
+ setProperty("RF_ENCODER_B",value);
+ sprintf(value,"%d",ENABLE_AGC_ENCODER);
+ setProperty("ENABLE_AGC_ENCODER",value);
+ sprintf(value,"%d",ENABLE_AGC_PULLUP);
+ setProperty("ENABLE_AGC_PULLUP",value);
+ sprintf(value,"%d",AGC_ENCODER_A);
+ setProperty("AGC_ENCODER_A",value);
+ sprintf(value,"%d",AGC_ENCODER_B);
+ setProperty("AGC_ENCODER_B",value);
+ sprintf(value,"%d",ENABLE_BAND_BUTTON);
+ setProperty("ENABLE_BAND_BUTTON",value);
+ sprintf(value,"%d",BAND_BUTTON);
+ setProperty("BAND_BUTTON",value);
+ sprintf(value,"%d",ENABLE_BANDSTACK_BUTTON);
+ setProperty("ENABLE_BANDSTACK_BUTTON",value);
+ sprintf(value,"%d",BANDSTACK_BUTTON);
+ setProperty("BANDSTACK_BUTTON",value);
+ sprintf(value,"%d",ENABLE_MODE_BUTTON);
+ setProperty("ENABLE_MODE_BUTTON",value);
+ sprintf(value,"%d",MODE_BUTTON);
+ setProperty("MODE_BUTTON",value);
+ sprintf(value,"%d",ENABLE_FILTER_BUTTON);
+ setProperty("ENABLE_FILTER_BUTTON",value);
+ sprintf(value,"%d",FILTER_BUTTON);
+ setProperty("FILTER_BUTTON",value);
+ sprintf(value,"%d",ENABLE_NOISE_BUTTON);
+ setProperty("ENABLE_NOISE_BUTTON",value);
+ sprintf(value,"%d",NOISE_BUTTON);
+ setProperty("NOISE_BUTTON",value);
+ sprintf(value,"%d",ENABLE_AGC_BUTTON);
+ setProperty("ENABLE_AGC_BUTTON",value);
+ sprintf(value,"%d",AGC_BUTTON);
+ setProperty("AGC_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);
+ sprintf(value,"%d",ENABLE_LOCK_BUTTON);
+ setProperty("ENABLE_LOCK_BUTTON",value);
+ sprintf(value,"%d",LOCK_BUTTON);
+ setProperty("LOCK_BUTTON",value);
+
+ saveProperties("gpio.props");
+}
+
+
+int gpio_init() {
+ mraa_result_t res;
+fprintf(stderr,"MRAA: gpio_init\n");
+
+ gpio_restore_state();
+
+ mraa_init();
+
+ vfo_a_context=mraa_gpio_init(VFO_ENCODER_A);
+ if(vfo_a_context!=NULL) {
+ res=mraa_gpio_dir(vfo_a_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(VFO_ENCODER_A,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ if(ENABLE_VFO_PULLUP) {
+ res=mraa_gpio_mode(vfo_a_context,MRAA_GPIO_PULLUP);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_mode(VFO_ENCODER_A,MRAA_GPIO_PULLUP) returned %d\n",res);
+ }
+ }
+ res=mraa_gpio_isr(vfo_a_context,MRAA_GPIO_EDGE_RISING,vfo_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(VFO_ENCODER_A,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",VFO_ENCODER_A);
+ }
+
+ vfo_b_context=mraa_gpio_init(VFO_ENCODER_B);
+ if(vfo_b_context!=NULL) {
+ res=mraa_gpio_dir(vfo_b_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(VFO_ENCODER_B,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ if(ENABLE_VFO_PULLUP) {
+ res=mraa_gpio_mode(vfo_b_context,MRAA_GPIO_PULLUP);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_mode(VFO_ENCODER_B,MRAA_GPIO_PULLUP) returned %d\n",res);
+ }
+ }
+ res=mraa_gpio_isr(vfo_b_context,MRAA_GPIO_EDGE_RISING,vfo_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(VFO_ENCODER_B,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",VFO_ENCODER_B);
+ }
+
+ af_a_context=mraa_gpio_init(AF_ENCODER_A);
+ if(af_a_context!=NULL) {
+ res=mraa_gpio_dir(af_a_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(AF_ENCODER_A,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ if(ENABLE_AF_PULLUP) {
+ res=mraa_gpio_mode(af_a_context,MRAA_GPIO_PULLUP);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_mode(AF_ENCODER_A,MRAA_GPIO_PULLUP) returned %d\n",res);
+ }
+ }
+ res=mraa_gpio_isr(af_a_context,MRAA_GPIO_EDGE_RISING,af_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(AF_ENCODER_A,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",AF_ENCODER_A);
+ }
+
+ af_b_context=mraa_gpio_init(AF_ENCODER_B);
+ if(af_b_context!=NULL) {
+ res=mraa_gpio_dir(af_b_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(AF_ENCODER_B,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ if(ENABLE_AF_PULLUP) {
+ res=mraa_gpio_mode(af_b_context,MRAA_GPIO_PULLUP);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_mode(AF_ENCODER_B,MRAA_GPIO_PULLUP) returned %d\n",res);
+ }
+ }
+ res=mraa_gpio_isr(af_b_context,MRAA_GPIO_EDGE_RISING,af_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(AF_ENCODER_B,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",AF_ENCODER_B);
+ }
+
+ rf_a_context=mraa_gpio_init(RF_ENCODER_A);
+ if(rf_a_context!=NULL) {
+ res=mraa_gpio_dir(rf_a_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(RF_ENCODER_A,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ if(ENABLE_RF_PULLUP) {
+ res=mraa_gpio_mode(rf_a_context,MRAA_GPIO_PULLUP);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_mode(RF_ENCODER_A,MRAA_GPIO_PULLUP) returned %d\n",res);
+ }
+ }
+ res=mraa_gpio_isr(rf_a_context,MRAA_GPIO_EDGE_RISING,rf_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(RF_ENCODER_A,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",RF_ENCODER_A);
+ }
+
+ rf_b_context=mraa_gpio_init(RF_ENCODER_B);
+ if(rf_b_context!=NULL) {
+ res=mraa_gpio_dir(rf_b_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(RF_ENCODER_B,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ if(ENABLE_RF_PULLUP) {
+ res=mraa_gpio_mode(rf_b_context,MRAA_GPIO_PULLUP);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_mode(RF_ENCODER_B,MRAA_GPIO_PULLUP) returned %d\n",res);
+ }
+ }
+ res=mraa_gpio_isr(rf_b_context,MRAA_GPIO_EDGE_RISING,rf_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(RF_ENCODER_B,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",RF_ENCODER_B);
+ }
+
+ agc_a_context=mraa_gpio_init(AGC_ENCODER_A);
+ if(agc_a_context!=NULL) {
+ res=mraa_gpio_dir(agc_a_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(AGC_ENCODER_A,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ if(ENABLE_AGC_PULLUP) {
+ res=mraa_gpio_mode(agc_a_context,MRAA_GPIO_PULLUP);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_mode(AGC_ENCODER_A,MRAA_GPIO_PULLUP) returned %d\n",res);
+ }
+ }
+ res=mraa_gpio_isr(agc_a_context,MRAA_GPIO_EDGE_RISING,agc_encoder_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(AGC_ENCODER_A,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",AGC_ENCODER_A);
+ }
+
+ agc_b_context=mraa_gpio_init(AGC_ENCODER_B);
+ if(agc_b_context!=NULL) {
+ res=mraa_gpio_dir(agc_b_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(AGC_ENCODER_B,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ if(ENABLE_AGC_PULLUP) {
+ res=mraa_gpio_mode(agc_b_context,MRAA_GPIO_PULLUP);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_mode(AGC_ENCODER_B,MRAA_GPIO_PULLUP) returned %d\n",res);
+ }
+ }
+ res=mraa_gpio_isr(agc_b_context,MRAA_GPIO_EDGE_RISING,agc_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(AGC_ENCODER_B,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",AGC_ENCODER_B);
+ }
+
+ function_context=mraa_gpio_init(FUNCTION_BUTTON);
+ if(function_context!=NULL) {
+ res=mraa_gpio_dir(function_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(FUNCTION_BUTTON,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ res=mraa_gpio_isr(function_context,MRAA_GPIO_EDGE_RISING,function_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(FUNCTION_BUTTON,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",FUNCTION_BUTTON);
+ }
+
+ band_context=mraa_gpio_init(BAND_BUTTON);
+ if(band_context!=NULL) {
+ res=mraa_gpio_dir(band_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(BAND_BUTTON,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ res=mraa_gpio_isr(band_context,MRAA_GPIO_EDGE_RISING,function_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(BAND_BUTTON,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",BAND_BUTTON);
+ }
+
+ bandstack_context=mraa_gpio_init(BANDSTACK_BUTTON);
+ if(bandstack_context!=NULL) {
+ res=mraa_gpio_dir(bandstack_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(BANDSTACK_BUTTON,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ res=mraa_gpio_isr(bandstack_context,MRAA_GPIO_EDGE_RISING,function_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(BANDSTACK_BUTTON,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",BANDSTACK_BUTTON);
+ }
+
+ mode_context=mraa_gpio_init(MODE_BUTTON);
+ if(mode_context!=NULL) {
+ res=mraa_gpio_dir(mode_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(MODE_BUTTON,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ res=mraa_gpio_isr(mode_context,MRAA_GPIO_EDGE_RISING,function_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(MODE_BUTTON,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",MODE_BUTTON);
+ }
+
+ int rc=pthread_create(&rotary_encoder_thread_id, NULL, rotary_encoder_thread, NULL);
+ if(rc<0) {
+ fprintf(stderr,"pthread_create for rotary_encoder_thread failed %d\n",rc);
+ }
+
+ filter_context=mraa_gpio_init(FILTER_BUTTON);
+ if(filter_context!=NULL) {
+ res=mraa_gpio_dir(filter_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(FILTER_BUTTON,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ res=mraa_gpio_isr(filter_context,MRAA_GPIO_EDGE_RISING,function_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(FILTER_BUTTON,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",FILTER_BUTTON);
+ }
+
+ noise_context=mraa_gpio_init(NOISE_BUTTON);
+ if(noise_context!=NULL) {
+ res=mraa_gpio_dir(noise_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(NOISE_BUTTON,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ res=mraa_gpio_isr(noise_context,MRAA_GPIO_EDGE_RISING,function_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(NOISE_BUTTON,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",NOISE_BUTTON);
+ }
+
+ agc_context=mraa_gpio_init(AGC_BUTTON);
+ if(agc_context!=NULL) {
+ res=mraa_gpio_dir(agc_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(AGC_BUTTON,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ res=mraa_gpio_isr(agc_context,MRAA_GPIO_EDGE_RISING,function_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(AGC_BUTTON,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",AGC_BUTTON);
+ }
+
+ mox_context=mraa_gpio_init(MOX_BUTTON);
+ if(mox_context!=NULL) {
+ res=mraa_gpio_dir(mox_context,MRAA_GPIO_IN);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_dir(MOX_BUTTON,MRAA_GPIO_IN) returned %d\n",res);
+ }
+ res=mraa_gpio_isr(mox_context,MRAA_GPIO_EDGE_RISING,function_interrupt,NULL);
+ if(res!=MRAA_SUCCESS) {
+ fprintf(stderr,"mra_gpio_isr(MOX_BUTTON,MRAA_GPIO_EDGE_BOTH) returned %d\n", res);
+ }
+ } else {
+ fprintf(stderr,"mraa_gpio_init(%d) returned NULL\n",MOX_BUTTON);
+ }
+
+ return 0;
+}
+
+void gpio_close() {
+ mraa_result_t res;
+
+ res=mraa_gpio_close(function_context);
+ res=mraa_gpio_close(band_context);
+ res=mraa_gpio_close(bandstack_context);
+ res=mraa_gpio_close(mode_context);
+ res=mraa_gpio_close(filter_context);
+ res=mraa_gpio_close(noise_context);
+ res=mraa_gpio_close(agc_context);
+ res=mraa_gpio_close(mox_context);
+ res=mraa_gpio_close(agc_b_context);
+ res=mraa_gpio_close(agc_a_context);
+ res=mraa_gpio_close(rf_b_context);
+ res=mraa_gpio_close(rf_a_context);
+ res=mraa_gpio_close(af_b_context);
+ res=mraa_gpio_close(af_a_context);
+ res=mraa_gpio_close(vfo_b_context);
+ res=mraa_gpio_close(vfo_a_context);
+}
+
+int vfo_encoder_get_pos() {
+ int pos=vfoEncoderPos;
+
+ if(vfo_encoder_divisor>1) {
+ if(pos<0 && pos>-vfo_encoder_divisor) {
+ pos=0;
+ } else if(pos>0 && pos<vfo_encoder_divisor) {
+ pos=0;
+ }
+ pos=pos/vfo_encoder_divisor;
+ vfoEncoderPos=vfoEncoderPos-(pos*vfo_encoder_divisor);
+ } else {
+ vfoEncoderPos=0;
+ }
+ return pos;
+}
+
+int af_encoder_get_pos() {
+ int pos=afEncoderPos;
+ afEncoderPos=0;
+ return pos;
+}
+
+//int af_function_get_state() {
+// return afFunction;
+//}
+
+int rf_encoder_get_pos() {
+ int pos=rfEncoderPos;
+ rfEncoderPos=0;
+ return pos;
+}
+
+int agc_encoder_get_pos() {
+ int pos=agcEncoderPos;
+ agcEncoderPos=0;
+ return pos;
+}
+
+//int rf_function_get_state() {
+// return rfFunction;
+//}
+
+int function_get_state() {
+ return function_state;
+}
+
+int band_get_state() {
+ return band_state;
+}
+
+int bandstack_get_state() {
+ return bandstack_state;
+}
+
+int mode_get_state() {
+ return mode_state;
+}
+
+int filter_get_state() {
+ return filter_state;
+}
+
+int noise_get_state() {
+ return noise_state;
+}
+
+int agc_get_state() {
+ return agc_state;
+}
+
+int mox_get_state() {
+ return mox_state;
+}
+
+int lock_get_state() {
+ return lock_state;
+}
+
+
+static int vfo_encoder_changed(void *data) {
+ if(!locked) {
+ int pos=*(int*)data;
+ BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
+ //entry->frequencyA=entry->frequencyA+(pos*step);
+ //setFrequency(entry->frequencyA);
+ setFrequency(entry->frequencyA+ddsOffset+(pos*step));
+ vfo_update(NULL);
+ }
+ free(data);
+ return 0;
+}
+
+static int af_encoder_changed(void *data) {
+ int pos=*(int*)data;
+ if(pos!=0) {
+ if(function || isTransmitting()) {
+ // mic gain
+ double gain=mic_gain;
+ gain+=(double)pos/100.0;
+ if(gain<0.0) {
+ gain=0.0;
+ } else if(gain>4.0) {
+ gain=4.0;
+ }
+ set_mic_gain(gain);
+ } else {
+ // af gain
+ double gain=volume;
+ gain+=(double)pos/100.0;
+ if(gain<0.0) {
+ gain=0.0;
+ } else if(gain>1.0) {
+ gain=1.0;
+ }
+ set_af_gain(gain);
+ }
+ }
+ free(data);
+ return 0;
+}
+
+static int rf_encoder_changed(void *data) {
+ int pos=*(int*)data;
+ if(pos!=0) {
+ if(function || tune) {
+ // tune drive
+ double d=getTuneDrive();
+ d+=(double)pos/100.0;
+ if(d<0.0) {
+ d=0.0;
+ } else if(d>1.0) {
+ d=1.0;
+ }
+ set_tune(d);
+ } else {
+ // drive
+ double d=getDrive();
+ d+=(double)pos/100.0;
+ if(d<0.0) {
+ d=0.0;
+ } else if(d>1.0) {
+ d=1.0;
+ }
+ set_drive(d);
+ }
+ }
+ free(data);
+ return 0;
+}
+
+static int agc_encoder_changed(void *data) {
+ int pos=*(int*)data;
+ if(pos!=0) {
+ if(function) {
+ int att=attenuation;
+ att+=pos;
+ if(att<0) {
+ att=0;
+ } else if (att>31) {
+ att=31;
+ }
+ set_attenuation_value((double)att);
+ } else {
+ double gain=agc_gain;
+ gain+=(double)pos;
+ if(gain<-20.0) {
+ gain=-20.0;
+ } else if(gain>120.0) {
+ gain=120.0;
+ }
+ set_agc_gain(gain);
+ }
+ }
+ return 0;
+}
+
+static int band_pressed(void *data) {
+ BAND* band;
+ BANDSTACK_ENTRY *entry;
+fprintf(stderr,"band_pressed\n");
+ int b=band_get_current();
+ if(function) {
+ b--;
+ if(b<0) {
+ b=BANDS-1;
+ }
+#ifdef LIMESDR
+ if(protocol!=LIMESDR_PROTOCOL) {
+ if(b==band3400) {
+ b=band6;
+ }
+ }
+#endif
+ } else {
+ b++;
+ if(b>=BANDS) {
+ b=0;
+ }
+#ifdef LIMESDR
+ if(protocol!=LIMESDR_PROTOCOL) {
+ if(b==band70) {
+ b=bandGen;
+ }
+ }
+#endif
+ }
+ band=band_set_current(b);
+ entry=bandstack_entry_get_current();
+
+ setFrequency(entry->frequencyA);
+ setMode(entry->mode);
+ FILTER* band_filters=filters[entry->mode];
+ FILTER* band_filter=&band_filters[entry->filter];
+ setFilter(band_filter->low,band_filter->high);
+
+ band=band_get_current_band();
+ set_alex_rx_antenna(band->alexRxAntenna);
+ set_alex_tx_antenna(band->alexTxAntenna);
+ set_alex_attenuation(band->alexAttenuation);
+ vfo_update(NULL);
+
+ return 0;
+}
+
+static int bandstack_pressed(void *data) {
+ BANDSTACK_ENTRY *entry;
+ fprintf(stderr,"bandstack_pressed\n");
+ if(function) {
+ entry=bandstack_entry_previous();
+ } else {
+ entry=bandstack_entry_next();
+ }
+ setFrequency(entry->frequencyA);
+ setMode(entry->mode);
+ FILTER* band_filters=filters[entry->mode];
+ FILTER* band_filter=&band_filters[entry->filter];
+ setFilter(band_filter->low,band_filter->high);
+ vfo_update(NULL);
+ return 0;
+}
+
+static int function_pressed(void *data) {
+fprintf(stderr,"function_pressed\n");
+ function=function==1?0:1;
+ if(display_toolbar && toolbar_simulate_buttons) {
+ update_toolbar();
+ }
+ vfo_update(NULL);
+ return 0;
+}
+
+static int mox_pressed(void *data) {
+fprintf(stderr,"mox_pressed\n");
+ if(function) {
+ tune_cb((GtkWidget *)NULL, (gpointer)NULL);
+ } else {
+ mox_cb((GtkWidget *)NULL, (gpointer)NULL);
+ }
+ return 0;
+}
+
+static int lock_pressed(void *data) {
+fprintf(stderr,"lock_pressed\n");
+ lock_cb((GtkWidget *)NULL, (gpointer)NULL);
+ return 0;
+}
+
+static int mode_pressed(void *data) {
+ BAND* band;
+ BANDSTACK_ENTRY *entry;
+
+fprintf(stderr,"mode_pressed\n");
+ band=band_get_current_band();
+ entry=bandstack_entry_get_current();
+ if(function) {
+ entry->mode--;
+ if(entry->mode<0) {
+ entry->mode=MODES-1;
+ }
+ } else {
+ entry->mode++;
+ if(entry->mode>=MODES) {
+ entry->mode=0;
+ }
+ }
+ setMode(entry->mode);
+
+ FILTER* band_filters=filters[entry->mode];
+ FILTER* band_filter=&band_filters[entry->filter];
+ setFilter(band_filter->low,band_filter->high);
+
+ vfo_update(NULL);
+
+ return 0;
+}
+
+static int filter_pressed(void *data) {
+ BAND* band;
+ BANDSTACK_ENTRY *entry;
+
+fprintf(stderr,"filter_pressed\n");
+ band=band_get_current_band();
+ entry=bandstack_entry_get_current();
+ // note order of filter reversed (largest first)
+ if(function) {
+ entry->filter++;
+ if(entry->filter>=FILTERS) {
+ entry->filter=0;
+ }
+ } else {
+ entry->filter--;
+ if(entry->filter<0) {
+ entry->filter=FILTERS-1;
+ }
+ }
+
+ FILTER* band_filters=filters[entry->mode];
+ FILTER* band_filter=&band_filters[entry->filter];
+ setFilter(band_filter->low,band_filter->high);
+
+ vfo_update(NULL);
+
+ return 0;
+}
+
+static int noise_pressed(void *data) {
+fprintf(stderr,"noise_pressed\n");
+ if(function) {
+ if(nr) {
+ nr=0;
+ } else if(nr2) {
+ nr2=0;
+ nr=1;
+ } else if(anf) {
+ anf=0;
+ nr2=1;
+ } else if(snb) {
+ snb=0;
+ anf=1;
+ } else {
+ snb=1;
+ }
+ } else {
+ if(nr) {
+ nr=0;
+ nr2=1;
+ } else if(nr2) {
+ nr2=0;
+ anf=1;
+ } else if(anf) {
+ anf=0;
+ snb=1;
+ } else if(snb) {
+ snb=0;
+ } else {
+ nr=1;
+ }
+ }
+ SetRXAANRRun(CHANNEL_RX0, nr);
+ SetRXAEMNRRun(CHANNEL_RX0, nr2);
+ SetRXAANFRun(CHANNEL_RX0, anf);
+ SetRXASNBARun(CHANNEL_RX0, snb);
+ vfo_update(NULL);
+ return 0;
+}
+
+static int agc_pressed(void *data) {
+fprintf(stderr,"agc_pressed\n");
+ if(function) {
+ agc--;
+ if(agc<0) {
+ agc=3;
+ }
+ } else {
+ agc++;
+ if(agc>=4) {
+ agc=0;
+ }
+ }
+ SetRXAAGCMode(CHANNEL_RX0, agc);
+ vfo_update(NULL);
+ return 0;
+}
+
+static void* rotary_encoder_thread(void *arg) {
+ int pos;
+ while(1) {
+
+ int function_button=function_get_state();
+ if(function_button!=previous_function_button) {
+ previous_function_button=function_button;
+ if(function_button) {
+ g_idle_add(function_pressed,(gpointer)NULL);
+ }
+ }
+
+ pos=vfo_encoder_get_pos();
+ if(pos!=0) {
+ int *p=malloc(sizeof(int));
+ *p=pos;
+ g_idle_add(vfo_encoder_changed,(gpointer)p);
+ }
+
+/*
+ af_function=af_function_get_state();
+ if(af_function!=previous_af_function) {
+ previous_af_function=af_function;
+ }
+*/
+ pos=af_encoder_get_pos();
+ if(pos!=0) {
+ int *p=malloc(sizeof(int));
+ *p=pos;
+ g_idle_add(af_encoder_changed,(gpointer)p);
+ }
+
+/*
+ rf_function=rf_function_get_state();
+ if(rf_function!=previous_rf_function) {
+ previous_rf_function=rf_function;
+ }
+*/
+ pos=rf_encoder_get_pos();
+ if(pos!=0) {
+ int *p=malloc(sizeof(int));
+ *p=pos;
+ g_idle_add(rf_encoder_changed,(gpointer)p);
+ }
+
+ pos=agc_encoder_get_pos();
+ if(pos!=0) {
+ int *p=malloc(sizeof(int));
+ *p=pos;
+ g_idle_add(agc_encoder_changed,(gpointer)p);
+ }
+
+
+ int band_button=band_get_state();
+ if(band_button!=previous_band_button) {
+ previous_band_button=band_button;
+ if(band_button) {
+ g_idle_add(band_pressed,(gpointer)NULL);
+ }
+ }
+
+ int bandstack_button=bandstack_get_state();
+ if(bandstack_button!=previous_bandstack_button) {
+ previous_bandstack_button=bandstack_button;
+ if(bandstack_button) {
+ g_idle_add(bandstack_pressed,(gpointer)NULL);
+ }
+ }
+
+ int mode_button=mode_get_state();
+ if(mode_button!=previous_mode_button) {
+ previous_mode_button=mode_button;
+ if(mode_button) {
+ g_idle_add(mode_pressed,(gpointer)NULL);
+ }
+ }
+
+ int filter_button=filter_get_state();
+ if(filter_button!=previous_filter_button) {
+ previous_filter_button=filter_button;
+ if(filter_button) {
+ g_idle_add(filter_pressed,(gpointer)NULL);
+ }
+ }
+
+ int noise_button=noise_get_state();
+ if(noise_button!=previous_noise_button) {
+ previous_noise_button=noise_button;
+ if(noise_button) {
+ g_idle_add(noise_pressed,(gpointer)NULL);
+ }
+ }
+
+ int agc_button=agc_get_state();
+ if(agc_button!=previous_agc_button) {
+ previous_agc_button=agc_button;
+ if(agc_button) {
+ g_idle_add(agc_pressed,(gpointer)NULL);
+ }
+ }
+
+ int mox_button=mox_get_state();
+ if(mox_button!=previous_mox_button) {
+ previous_mox_button=mox_button;
+ if(mox_button) {
+ g_idle_add(mox_pressed,(gpointer)NULL);
+ }
+ }
+
+ int lock_button=lock_get_state();
+ if(lock_button!=previous_lock_button) {
+ previous_lock_button=lock_button;
+ if(lock_button) {
+ g_idle_add(lock_pressed,(gpointer)NULL);
+ }
+ }
+
+ usleep(100000);
+ }
+}
#include "main.h"
#include "channel.h"
#include "discovered.h"
+#include "configure.h"
#include "gpio.h"
#include "old_discovery.h"
#include "new_discovery.h"
#ifdef odroid
#define INCLUDE_GPIO
#endif
+#ifdef up
+#define INCLUDE_GPIO
+#endif
#define VFO_HEIGHT ((display_height/32)*4)
#define VFO_WIDTH ((display_width/32)*16)
gtk_widget_destroy(discovery_dialog);
}
-static void sample_rate_cb(GtkWidget *widget, gpointer data) {
- sample_rate=(int)data;
-}
-
-static void display_panadapter_cb(GtkWidget *widget, gpointer data) {
- display_panadapter=display_panadapter==1?0:1;
-}
-
-static void display_waterfall_cb(GtkWidget *widget, gpointer data) {
- display_waterfall=display_waterfall==1?0:1;
-}
-
-static void display_sliders_cb(GtkWidget *widget, gpointer data) {
- display_sliders=display_sliders==1?0:1;
-}
-
-static void display_toolbar_cb(GtkWidget *widget, gpointer data) {
- display_toolbar=display_toolbar==1?0:1;
-}
-
-static void toolbar_simulate_buttons_cb(GtkWidget *widget, gpointer data) {
- toolbar_simulate_buttons=toolbar_simulate_buttons==1?0:1;
-}
-
-#ifdef INCLUDE_GPIO
-static void configure_gpio() {
- gpio_restore_state();
-
- GtkWidget *dialog=gtk_dialog_new_with_buttons("Configure GPIO",GTK_WINDOW(splash_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 *b_enable_vfo_encoder=gtk_check_button_new_with_label("Enable VFO");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_vfo_encoder), ENABLE_VFO_ENCODER);
- gtk_widget_show(b_enable_vfo_encoder);
- gtk_grid_attach(GTK_GRID(grid),b_enable_vfo_encoder,0,0,1,1);
-
- GtkWidget *vfo_a_label=gtk_label_new("GPIO A:");
- gtk_widget_show(vfo_a_label);
- gtk_grid_attach(GTK_GRID(grid),vfo_a_label,1,0,1,1);
-
- GtkWidget *vfo_a=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(vfo_a),VFO_ENCODER_A);
- gtk_widget_show(vfo_a);
- gtk_grid_attach(GTK_GRID(grid),vfo_a,2,0,1,1);
-
- GtkWidget *vfo_b_label=gtk_label_new("GPIO B:");
- gtk_widget_show(vfo_b_label);
- gtk_grid_attach(GTK_GRID(grid),vfo_b_label,3,0,1,1);
-
- GtkWidget *vfo_b=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(vfo_b),VFO_ENCODER_B);
- gtk_widget_show(vfo_b);
- gtk_grid_attach(GTK_GRID(grid),vfo_b,4,0,1,1);
-
- GtkWidget *b_enable_vfo_pullup=gtk_check_button_new_with_label("Enable Pull-up");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_vfo_pullup), ENABLE_VFO_PULLUP);
- gtk_widget_show(b_enable_vfo_pullup);
- gtk_grid_attach(GTK_GRID(grid),b_enable_vfo_pullup,5,0,1,1);
-
-
-
- GtkWidget *b_enable_af_encoder=gtk_check_button_new_with_label("Enable AF");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_af_encoder), ENABLE_AF_ENCODER);
- gtk_widget_show(b_enable_af_encoder);
- gtk_grid_attach(GTK_GRID(grid),b_enable_af_encoder,0,1,1,1);
-
- GtkWidget *af_a_label=gtk_label_new("GPIO A:");
- gtk_widget_show(af_a_label);
- gtk_grid_attach(GTK_GRID(grid),af_a_label,1,1,1,1);
-
- GtkWidget *af_a=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(af_a),AF_ENCODER_A);
- gtk_widget_show(af_a);
- gtk_grid_attach(GTK_GRID(grid),af_a,2,1,1,1);
-
- GtkWidget *af_b_label=gtk_label_new("GPIO B:");
- gtk_widget_show(af_b_label);
- gtk_grid_attach(GTK_GRID(grid),af_b_label,3,1,1,1);
-
- GtkWidget *af_b=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(af_b),AF_ENCODER_B);
- gtk_widget_show(af_b);
- gtk_grid_attach(GTK_GRID(grid),af_b,4,1,1,1);
-
- GtkWidget *b_enable_af_pullup=gtk_check_button_new_with_label("Enable Pull-up");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_af_pullup), ENABLE_AF_PULLUP);
- gtk_widget_show(b_enable_af_pullup);
- gtk_grid_attach(GTK_GRID(grid),b_enable_af_pullup,5,1,1,1);
-
-
-
- GtkWidget *b_enable_rf_encoder=gtk_check_button_new_with_label("Enable RF");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_rf_encoder), ENABLE_RF_ENCODER);
- gtk_widget_show(b_enable_rf_encoder);
- gtk_grid_attach(GTK_GRID(grid),b_enable_rf_encoder,0,2,1,1);
-
- GtkWidget *rf_a_label=gtk_label_new("GPIO A:");
- gtk_widget_show(rf_a_label);
- gtk_grid_attach(GTK_GRID(grid),rf_a_label,1,2,1,1);
-
- GtkWidget *rf_a=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(rf_a),RF_ENCODER_A);
- gtk_widget_show(rf_a);
- gtk_grid_attach(GTK_GRID(grid),rf_a,2,2,1,1);
-
- GtkWidget *rf_b_label=gtk_label_new("GPIO B:");
- gtk_widget_show(rf_b_label);
- gtk_grid_attach(GTK_GRID(grid),rf_b_label,3,2,1,1);
-
- GtkWidget *rf_b=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(rf_b),RF_ENCODER_B);
- gtk_widget_show(rf_b);
- gtk_grid_attach(GTK_GRID(grid),rf_b,4,2,1,1);
-
- GtkWidget *b_enable_rf_pullup=gtk_check_button_new_with_label("Enable Pull-up");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_rf_pullup), ENABLE_RF_PULLUP);
- gtk_widget_show(b_enable_rf_pullup);
- gtk_grid_attach(GTK_GRID(grid),b_enable_rf_pullup,5,2,1,1);
-
-
-
- GtkWidget *b_enable_agc_encoder=gtk_check_button_new_with_label("Enable AGC");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_agc_encoder), ENABLE_AGC_ENCODER);
- gtk_widget_show(b_enable_agc_encoder);
- gtk_grid_attach(GTK_GRID(grid),b_enable_agc_encoder,0,3,1,1);
-
- GtkWidget *agc_a_label=gtk_label_new("GPIO A:");
- gtk_widget_show(agc_a_label);
- gtk_grid_attach(GTK_GRID(grid),agc_a_label,1,3,1,1);
-
- GtkWidget *agc_a=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(agc_a),AGC_ENCODER_A);
- gtk_widget_show(agc_a);
- gtk_grid_attach(GTK_GRID(grid),agc_a,2,3,1,1);
-
- GtkWidget *agc_b_label=gtk_label_new("GPIO B:");
- gtk_widget_show(agc_b_label);
- gtk_grid_attach(GTK_GRID(grid),agc_b_label,3,3,1,1);
-
- GtkWidget *agc_b=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(agc_b),AGC_ENCODER_B);
- gtk_widget_show(agc_b);
- gtk_grid_attach(GTK_GRID(grid),agc_b,4,3,1,1);
-
- GtkWidget *b_enable_agc_pullup=gtk_check_button_new_with_label("Enable Pull-up");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_agc_pullup), ENABLE_AGC_PULLUP);
- gtk_widget_show(b_enable_agc_pullup);
- gtk_grid_attach(GTK_GRID(grid),b_enable_agc_pullup,5,3,1,1);
-
-
-
- GtkWidget *b_enable_band=gtk_check_button_new_with_label("Enable Band");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_band), ENABLE_BAND_BUTTON);
- gtk_widget_show(b_enable_band);
- gtk_grid_attach(GTK_GRID(grid),b_enable_band,0,4,1,1);
-
- GtkWidget *band_label=gtk_label_new("GPIO:");
- gtk_widget_show(band_label);
- gtk_grid_attach(GTK_GRID(grid),band_label,1,4,1,1);
-
- GtkWidget *band=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(band),BAND_BUTTON);
- gtk_widget_show(band);
- gtk_grid_attach(GTK_GRID(grid),band,2,4,1,1);
-
-
- GtkWidget *b_enable_mode=gtk_check_button_new_with_label("Enable Mode");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_mode), ENABLE_MODE_BUTTON);
- gtk_widget_show(b_enable_mode);
- gtk_grid_attach(GTK_GRID(grid),b_enable_mode,0,5,1,1);
-
- GtkWidget *mode_label=gtk_label_new("GPIO:");
- gtk_widget_show(mode_label);
- gtk_grid_attach(GTK_GRID(grid),mode_label,1,5,1,1);
-
- GtkWidget *mode=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(mode),MODE_BUTTON);
- gtk_widget_show(mode);
- gtk_grid_attach(GTK_GRID(grid),mode,2,5,1,1);
-
-
- GtkWidget *b_enable_filter=gtk_check_button_new_with_label("Enable Filter");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_filter), ENABLE_FILTER_BUTTON);
- gtk_widget_show(b_enable_filter);
- gtk_grid_attach(GTK_GRID(grid),b_enable_filter,0,6,1,1);
-
- GtkWidget *filter_label=gtk_label_new("GPIO:");
- gtk_widget_show(filter_label);
- gtk_grid_attach(GTK_GRID(grid),filter_label,1,6,1,1);
-
- GtkWidget *filter=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(filter),FILTER_BUTTON);
- gtk_widget_show(filter);
- gtk_grid_attach(GTK_GRID(grid),filter,2,6,1,1);
-
-
- GtkWidget *b_enable_noise=gtk_check_button_new_with_label("Enable Noise");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_noise), ENABLE_NOISE_BUTTON);
- gtk_widget_show(b_enable_noise);
- gtk_grid_attach(GTK_GRID(grid),b_enable_noise,0,7,1,1);
-
- GtkWidget *noise_label=gtk_label_new("GPIO:");
- gtk_widget_show(noise_label);
- gtk_grid_attach(GTK_GRID(grid),noise_label,1,7,1,1);
-
- GtkWidget *noise=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(noise),NOISE_BUTTON);
- gtk_widget_show(noise);
- gtk_grid_attach(GTK_GRID(grid),noise,2,7,1,1);
-
-
- GtkWidget *b_enable_agc=gtk_check_button_new_with_label("Enable AGC");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_agc), ENABLE_AGC_BUTTON);
- gtk_widget_show(b_enable_agc);
- gtk_grid_attach(GTK_GRID(grid),b_enable_agc,0,8,1,1);
-
- GtkWidget *agc_label=gtk_label_new("GPIO:");
- gtk_widget_show(agc_label);
- gtk_grid_attach(GTK_GRID(grid),agc_label,1,8,1,1);
-
- GtkWidget *agc=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(agc),AGC_BUTTON);
- gtk_widget_show(agc);
- gtk_grid_attach(GTK_GRID(grid),agc,2,8,1,1);
-
-
- GtkWidget *b_enable_mox=gtk_check_button_new_with_label("Enable MOX");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_mox), ENABLE_MOX_BUTTON);
- gtk_widget_show(b_enable_mox);
- gtk_grid_attach(GTK_GRID(grid),b_enable_mox,0,9,1,1);
-
- GtkWidget *mox_label=gtk_label_new("GPIO:");
- gtk_widget_show(mox_label);
- gtk_grid_attach(GTK_GRID(grid),mox_label,1,9,1,1);
-
- GtkWidget *mox=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(mox),MOX_BUTTON);
- gtk_widget_show(mox);
- gtk_grid_attach(GTK_GRID(grid),mox,2,9,1,1);
-
-
- GtkWidget *b_enable_function=gtk_check_button_new_with_label("Enable Function");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_enable_function), ENABLE_FUNCTION_BUTTON);
- gtk_widget_show(b_enable_function);
- gtk_grid_attach(GTK_GRID(grid),b_enable_function,0,10,1,1);
-
- GtkWidget *function_label=gtk_label_new("GPIO:");
- gtk_widget_show(function_label);
- gtk_grid_attach(GTK_GRID(grid),function_label,1,10,1,1);
-
- GtkWidget *function=gtk_spin_button_new_with_range (0.0,100.0,1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(function),FUNCTION_BUTTON);
- gtk_widget_show(function);
- gtk_grid_attach(GTK_GRID(grid),function,2,10,1,1);
-
-
-
- gtk_container_add(GTK_CONTAINER(content),grid);
-
- 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 20"));
- gtk_widget_show_all(dialog);
-
- int result=gtk_dialog_run(GTK_DIALOG(dialog));
-
- ENABLE_VFO_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_vfo_encoder))?1:0;
- VFO_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(vfo_a));
- VFO_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(vfo_b));
- ENABLE_VFO_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_vfo_pullup))?1:0;
- ENABLE_AF_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_af_encoder))?1:0;
- AF_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(af_a));
- AF_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(af_b));
- ENABLE_AF_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_af_pullup))?1:0;
- ENABLE_RF_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_rf_encoder))?1:0;
- RF_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(rf_a));
- RF_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(rf_b));
- ENABLE_RF_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_rf_pullup))?1:0;
- ENABLE_AGC_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_agc_encoder))?1:0;
- AGC_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(agc_a));
- AGC_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(agc_b));
- ENABLE_AGC_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_agc_pullup))?1:0;
- ENABLE_BAND_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_band))?1:0;
- BAND_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(band));
- ENABLE_MODE_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_mode))?1:0;
- MODE_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(mode));
- ENABLE_FILTER_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_filter))?1:0;
- FILTER_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(filter));
- ENABLE_NOISE_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_noise))?1:0;
- NOISE_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(noise));
- ENABLE_AGC_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_agc))?1:0;
- AGC_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(agc));
- ENABLE_MOX_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_mox))?1:0;
- MOX_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(mox));
- ENABLE_FUNCTION_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_function))?1:0;
- FUNCTION_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(function));
-
- gtk_widget_destroy(dialog);
-
- gpio_save_state();
-}
-#endif
-
static void configure_cb(GtkWidget *widget, gpointer data) {
DISCOVERED* d;
d=&discovered[(int)data];
}
radioRestoreState();
- GtkWidget *dialog=gtk_dialog_new_with_buttons("Configure",GTK_WINDOW(splash_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),FALSE);
- gtk_grid_set_row_homogeneous(GTK_GRID(grid),FALSE);
-
- GtkWidget *sample_rate_label=gtk_label_new("Sample Rate:");
- //gtk_widget_override_font(sample_rate_label, pango_font_description_from_string("Arial 18"));
- gtk_widget_show(sample_rate_label);
- gtk_grid_attach(GTK_GRID(grid),sample_rate_label,0,0,1,1);
-
- GtkWidget *sample_rate_48=gtk_radio_button_new_with_label(NULL,"48000");
- //gtk_widget_override_font(sample_rate_48, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_48), sample_rate==48000);
- gtk_widget_show(sample_rate_48);
- gtk_grid_attach(GTK_GRID(grid),sample_rate_48,0,1,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_widget_override_font(sample_rate_96, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_96), sample_rate==96000);
- gtk_widget_show(sample_rate_96);
- gtk_grid_attach(GTK_GRID(grid),sample_rate_96,0,2,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_widget_override_font(sample_rate_192, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_192), sample_rate==192000);
- gtk_widget_show(sample_rate_192);
- gtk_grid_attach(GTK_GRID(grid),sample_rate_192,0,3,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_widget_override_font(sample_rate_384, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_384), sample_rate==384000);
- gtk_widget_show(sample_rate_384);
- gtk_grid_attach(GTK_GRID(grid),sample_rate_384,0,4,1,1);
- g_signal_connect(sample_rate_384,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)384000);
-
- if(d->protocol==NEW_PROTOCOL
-#ifdef LIMESDR
- || d->protocol==LIMESDR_PROTOCOL
-#endif
- ) {
- GtkWidget *sample_rate_768=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_384),"768000");
- //gtk_widget_override_font(sample_rate_768, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_768), sample_rate==768000);
- gtk_widget_show(sample_rate_768);
- gtk_grid_attach(GTK_GRID(grid),sample_rate_768,0,5,1,1);
- g_signal_connect(sample_rate_768,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)768000);
-
- GtkWidget *sample_rate_921=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_768),"921180");
- //gtk_widget_override_font(sample_rate_921, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_921), sample_rate==921180);
- gtk_widget_show(sample_rate_921);
- gtk_grid_attach(GTK_GRID(grid),sample_rate_921,0,6,1,1);
- g_signal_connect(sample_rate_921,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)921180);
-
- GtkWidget *sample_rate_1536=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_921),"1536000");
- //gtk_widget_override_font(sample_rate_1536, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_1536), sample_rate==1536000);
- gtk_widget_show(sample_rate_1536);
- 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 LIMESDR
- if(d->protocol==LIMESDR_PROTOCOL) {
- GtkWidget *sample_rate_1M=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_1536),"1048576");
- //gtk_widget_override_font(sample_rate_1M, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_1M), sample_rate==1048576);
- gtk_widget_show(sample_rate_1M);
- gtk_grid_attach(GTK_GRID(grid),sample_rate_1M,0,8,1,1);
- g_signal_connect(sample_rate_1M,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)1048576);
-
- GtkWidget *sample_rate_2M=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_1M),"2097152");
- //gtk_widget_override_font(sample_rate_2M, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_2M), sample_rate==2097152);
- gtk_widget_show(sample_rate_2M);
- gtk_grid_attach(GTK_GRID(grid),sample_rate_2M,0,9,1,1);
- g_signal_connect(sample_rate_2M,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)2097152);
- }
-#endif
- }
-
-
- 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,9,1,1);
-
- GtkWidget *b_display_panadapter=gtk_check_button_new_with_label("Display Panadapter");
- //gtk_widget_override_font(b_display_panadapter, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_display_panadapter), display_panadapter);
- gtk_widget_show(b_display_panadapter);
- gtk_grid_attach(GTK_GRID(grid),b_display_panadapter,0,10,1,1);
- g_signal_connect(b_display_panadapter,"toggled",G_CALLBACK(display_panadapter_cb),(gpointer *)NULL);
-
- GtkWidget *b_display_waterfall=gtk_check_button_new_with_label("Display Waterfall");
- //gtk_widget_override_font(b_display_waterfall, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_display_waterfall), display_waterfall);
- gtk_widget_show(b_display_waterfall);
- gtk_grid_attach(GTK_GRID(grid),b_display_waterfall,0,11,1,1);
- g_signal_connect(b_display_waterfall,"toggled",G_CALLBACK(display_waterfall_cb),(gpointer *)NULL);
-
- GtkWidget *b_display_sliders=gtk_check_button_new_with_label("Display Sliders");
- //gtk_widget_override_font(b_display_sliders, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_display_sliders), display_sliders);
- gtk_widget_show(b_display_sliders);
- gtk_grid_attach(GTK_GRID(grid),b_display_sliders,0,12,1,1);
- g_signal_connect(b_display_sliders,"toggled",G_CALLBACK(display_sliders_cb),(gpointer *)NULL);
-
- GtkWidget *b_display_toolbar=gtk_check_button_new_with_label("Display Toolbar");
- //gtk_widget_override_font(b_display_toolbar, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_display_toolbar), display_toolbar);
- gtk_widget_show(b_display_toolbar);
- gtk_grid_attach(GTK_GRID(grid),b_display_toolbar,0,13,1,1);
- g_signal_connect(b_display_toolbar,"toggled",G_CALLBACK(display_toolbar_cb),(gpointer *)NULL);
-
- GtkWidget *b_toolbar_simulate_buttons=gtk_check_button_new_with_label("Toolbar Simulate Buttons");
- //gtk_widget_override_font(b_toolbar_simulate_buttons, pango_font_description_from_string("Arial 18"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_toolbar_simulate_buttons), toolbar_simulate_buttons);
- gtk_widget_show(b_toolbar_simulate_buttons);
- gtk_grid_attach(GTK_GRID(grid),b_toolbar_simulate_buttons,0,14,1,1);
- g_signal_connect(b_toolbar_simulate_buttons,"toggled",G_CALLBACK(toolbar_simulate_buttons_cb),(gpointer *)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 20"));
- 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));
-
- radioSaveState();
+ configure(d,splash_window);
}
gtk_widget_destroy(discovery_dialog);
#ifdef INCLUDE_GPIO
if(result==GTK_RESPONSE_YES) {
- configure_gpio();
+ configure_gpio(splash_window);
}
#endif
}
GtkWidget *cw_grid=gtk_grid_new();
gtk_grid_set_row_homogeneous(GTK_GRID(cw_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(cw_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_speed_label=gtk_label_new("CW Speed (WPM)");
+ //gtk_widget_override_font(cw_speed_label, pango_font_description_from_string("Arial 18"));
+ gtk_widget_show(cw_speed_label);
+ gtk_grid_attach(GTK_GRID(cw_grid),cw_speed_label,0,0,1,1);
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"));
ptt=buffer[4]&0x01;
dot=(buffer[4]>>1)&0x01;
dash=(buffer[4]>>2)&0x01;
+
+if(ptt!=previous_ptt) {
+ fprintf(stderr,"ptt=%d\n",ptt);
+}
+if(dot!=previous_dot) {
+ fprintf(stderr,"dot=%d\n",dot);
+}
+if(dash!=previous_dash) {
+ fprintf(stderr,"dash=%d\n",dash);
+}
pll_locked=(buffer[4]>>3)&0x01;
adc_overload=buffer[5]&0x01;
exciter_power=((buffer[6]&0xFF)<<8)|(buffer[7]&0xFF);
int error;
double gain;
if(tune) {
- double tunefrequency = (double)((filterHigh - filterLow) / 2);
+ double tunefrequency = (double)(filterLow+((filterHigh - filterLow) / 2));
phase=sineWave(micinputbuffer, BUFFER_SIZE, phase, (float)tunefrequency);
}
+
// process the output
fexchange0(CHANNEL_TX, micinputbuffer, micoutputbuffer, &error);
if(error!=0) {
// output_buffer[C1]|=0x00;
} else {
if((tune==1) || (mox==1) || (cw_keyer_internal==0)) {
- // output_buffer[C1]|=0x00;
+ output_buffer[C1]|=0x00;
} else {
output_buffer[C1]|=0x01;
}
break;
case 8:
output_buffer[C0]=0x20;
- output_buffer[C1]=cw_keyer_hang_time;
- output_buffer[C2]=cw_keyer_hang_time>>8;
- output_buffer[C3]=cw_keyer_sidetone_frequency;
- output_buffer[C4]=cw_keyer_sidetone_frequency>>8;
+ output_buffer[C1]=(cw_keyer_hang_time>>2) & 0xFF;
+ output_buffer[C2]=cw_keyer_hang_time & 0x03;
+ output_buffer[C3]=(cw_keyer_sidetone_frequency>>4) & 0xFF;
+ output_buffer[C4]=cw_keyer_sidetone_frequency & 0x0F;
break;
}
if(cw_keyer_internal==0) {
output_buffer[C0]|=0x01;
}
+ } else {
+ output_buffer[C0]|=0x01;
}
}
float saved_max;
float saved_min;
gfloat saved_hz_per_pixel;
+ cairo_text_extents_t extents;
samples=data;
//if(result==1) {
long divisor=20000;
long f;
long half=(long)getSampleRate()/2L;
- cairo_text_extents_t extents;
switch(sample_rate) {
case 48000:
divisor=5000L;
#ifdef FREEDV
if(mode==modeFREEDV) {
- cairo_set_source_rgb(cr, 0, 0, 0);
- cairo_rectangle(cr, (double)display_width/2.0+2.0, (double)panadapter_height-20.0, (double)display_width, (double)panadapter_height);
- cairo_fill(cr);
+// cairo_set_source_rgb(cr, 0, 0, 0);
+// cairo_rectangle(cr, (double)display_width/2.0+2.0, (double)panadapter_height-20.0, (double)display_width, (double)panadapter_height);
+// cairo_fill(cr);
cairo_set_source_rgb(cr, 0, 1, 0);
cairo_set_font_size(cr, 16);
- cairo_move_to(cr,(double)display_width/2.0+5.0,(double)panadapter_height-2.0);
+ cairo_text_extents(cr, freedv_rx_text_data, &extents);
+ cairo_move_to(cr, (double)display_width/2.0-(extents.width/2.0),(double)panadapter_height-2.0);
cairo_show_text(cr, freedv_rx_text_data);
}
#endif
}
int isTransmitting() {
+ BANDSTACK_ENTRY *entry;
+ entry=bandstack_entry_get_current();
+ if((entry->mode==modeCWL || entry->mode==modeCWU) && cw_keyer_internal==1 && !tune) {
+ return 0;
+ }
return ptt!=0 || mox!=0 || tune!=0;
}
}
void mox_cb(GtkWidget *widget, gpointer data) {
+fprintf(stderr,"mox_cb\n");
if(getTune()==1) {
setTune(0);
}
- if(canTransmit() || tx_out_of_band) {
- setMox(getMox()==0?1:0);
- vfo_update(NULL);
+ if(getMox()==1) {
+ setMox(0);
+ } else if(canTransmit() || tx_out_of_band) {
+ setMox(1);
}
+ vfo_update(NULL);
}
int ptt_update(void *data) {
- BANDSTACK_ENTRY *entry;
- entry=bandstack_entry_get_current();
+fprintf(stderr,"ptt_update\n");
int ptt=(int)data;
- if((entry->mode==modeCWL || entry->mode==modeCWU) && cw_keyer_internal==1) {
- //if(ptt!=getMox()) {
- // mox_cb(NULL,NULL);
- //}
+ if((mode==modeCWL || mode==modeCWU) && cw_keyer_internal==1) {
+ // just ignore it
} else {
mox_cb(NULL,NULL);
}
}
void tune_cb(GtkWidget *widget, gpointer data) {
+fprintf(stderr,"tune_cb\n");
if(getMox()==1) {
setMox(0);
}
- if(canTransmit() || tx_out_of_band) {
- setTune(getTune()==0?1:0);
- vfo_update(NULL);
+ if(getTune()==1) {
+ setTune(0);
+ } else if(canTransmit() || tx_out_of_band) {
+ setTune(1);
}
+ vfo_update(NULL);
}
void sim_band_cb(GtkWidget *widget, gpointer data) {
gtk_button_set_label(GTK_BUTTON(sim_bandstack),"BStack v");
gtk_button_set_label(GTK_BUTTON(sim_mode),"Mode v");
gtk_button_set_label(GTK_BUTTON(sim_filter),"Filter v");
- gtk_button_set_label(GTK_BUTTON(sim_agc),"AGC v");
gtk_button_set_label(GTK_BUTTON(sim_noise),"Noise v");
+ gtk_button_set_label(GTK_BUTTON(sim_agc),"AGC v");
gtk_button_set_label(GTK_BUTTON(sim_mox),"Tune");
} else {
gtk_button_set_label(GTK_BUTTON(sim_band),"Band ^");
gtk_button_set_label(GTK_BUTTON(sim_bandstack),"BStack ^");
gtk_button_set_label(GTK_BUTTON(sim_mode),"Mode ^");
gtk_button_set_label(GTK_BUTTON(sim_filter),"Filter ^");
- gtk_button_set_label(GTK_BUTTON(sim_agc),"AGC ^");
gtk_button_set_label(GTK_BUTTON(sim_noise),"Noise ^");
+ gtk_button_set_label(GTK_BUTTON(sim_agc),"AGC ^");
gtk_button_set_label(GTK_BUTTON(sim_mox),"Mox");
}
}
gtk_grid_set_column_homogeneous(GTK_GRID(toolbar),TRUE);
if(toolbar_simulate_buttons) {
+ 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_band=gtk_button_new_with_label("Band ^");
gtk_widget_set_size_request (sim_band, button_width, 0);
//gtk_widget_override_font(sim_band, pango_font_description_from_string("Arial 16"));
g_signal_connect(G_OBJECT(sim_band),"clicked",G_CALLBACK(sim_band_cb),NULL);
- gtk_grid_attach(GTK_GRID(toolbar),sim_band,0,0,4,1);
+ gtk_grid_attach(GTK_GRID(toolbar),sim_band,4,0,4,1);
sim_bandstack=gtk_button_new_with_label("BStack ^");
gtk_widget_set_size_request (sim_bandstack, button_width, 0);
//gtk_widget_override_font(sim_bandstack, pango_font_description_from_string("Arial 16"));
g_signal_connect(G_OBJECT(sim_bandstack),"clicked",G_CALLBACK(sim_bandstack_cb),NULL);
- gtk_grid_attach(GTK_GRID(toolbar),sim_bandstack,4,0,4,1);
+ gtk_grid_attach(GTK_GRID(toolbar),sim_bandstack,8,0,4,1);
sim_mode=gtk_button_new_with_label("Mode ^");
//gtk_widget_override_font(sim_mode, pango_font_description_from_string("Arial 16"));
g_signal_connect(G_OBJECT(sim_mode),"clicked",G_CALLBACK(sim_mode_cb),NULL);
- gtk_grid_attach(GTK_GRID(toolbar),sim_mode,8,0,4,1);
+ gtk_grid_attach(GTK_GRID(toolbar),sim_mode,12,0,4,1);
sim_filter=gtk_button_new_with_label("Filter ^");
//gtk_widget_override_font(sim_filter, pango_font_description_from_string("Arial 16"));
g_signal_connect(G_OBJECT(sim_filter),"clicked",G_CALLBACK(sim_filter_cb),NULL);
- gtk_grid_attach(GTK_GRID(toolbar),sim_filter,12,0,4,1);
-
- sim_agc=gtk_button_new_with_label("AGC ^");
- //gtk_widget_override_font(sim_agc, pango_font_description_from_string("Arial 16"));
- g_signal_connect(G_OBJECT(sim_agc),"clicked",G_CALLBACK(sim_agc_cb),NULL);
- gtk_grid_attach(GTK_GRID(toolbar),sim_agc,16,0,4,1);
+ gtk_grid_attach(GTK_GRID(toolbar),sim_filter,16,0,4,1);
sim_noise=gtk_button_new_with_label("Noise ^");
//gtk_widget_override_font(sim_noise, pango_font_description_from_string("Arial 16"));
g_signal_connect(G_OBJECT(sim_noise),"clicked",G_CALLBACK(sim_noise_cb),NULL);
gtk_grid_attach(GTK_GRID(toolbar),sim_noise,20,0,4,1);
+ sim_agc=gtk_button_new_with_label("AGC ^");
+ //gtk_widget_override_font(sim_agc, pango_font_description_from_string("Arial 16"));
+ g_signal_connect(G_OBJECT(sim_agc),"clicked",G_CALLBACK(sim_agc_cb),NULL);
+ gtk_grid_attach(GTK_GRID(toolbar),sim_agc,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,24,0,4,1);
-
- 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,28,0,4,1);
+ gtk_grid_attach(GTK_GRID(toolbar),sim_function,28,0,4,1);
} else {
GtkWidget *band=gtk_button_new_with_label("Band");