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