+# 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))
+
UNAME_N=raspberrypi
#UNAME_N=odroid
#UNAME_N=up
-#UNAME_N=other
+#UNAME_N=pine64
+#UNAME_N=x86
CC=gcc
LINK=gcc
gpio.o
endif
-OPTIONS=-g -D $(UNAME_N) $(LIMESDR_OPTIONS) $(FREEDV_OPTIONS) -O3
+OPTIONS=-g -D $(UNAME_N) $(LIMESDR_OPTIONS) $(FREEDV_OPTIONS) -D GIT_DATE='"$(GIT_DATE)"' -D GIT_VERSION='"$(GIT_VERSION)"' -O3
+
GTKINCLUDES=`pkg-config --cflags gtk+-3.0`
GTKLIBS=`pkg-config --libs gtk+-3.0`
}
static void start_cb(GtkWidget *widget, gpointer data) {
-fprintf(stderr,"start_cb\n");
selected_device=(int)data;
+fprintf(stderr,"start_cb: %d\n",selected_device);
start=1;
gtk_widget_destroy(discovery_dialog);
}
{
gtk_init (&argc, &argv);
- fprintf(stderr,"Build: %s %s\n",build_date,build_time);
+ fprintf(stderr,"Build: %s %s\n",build_date,build_version);
uname(&unameData);
fprintf(stderr,"sysname: %s\n",unameData.sysname);
#include "audio.h"
#include "band.h"
+#include "bandstack.h"
#include "channel.h"
#include "discovered.h"
+#include "filter.h"
+#include "mode.h"
#include "new_protocol.h"
#include "radio.h"
#include "toolbar.h"
static void cw_keyer_sidetone_frequency_value_changed_cb(GtkWidget *widget, gpointer data) {
cw_keyer_sidetone_frequency=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
+ if(mode==modeCWL || mode==modeCWU) {
+ BANDSTACK_ENTRY *entry=bandstack_entry_get_current();
+ FILTER* band_filters=filters[entry->mode];
+ FILTER* band_filter=&band_filters[entry->filter];
+ setFilter(band_filter->low,band_filter->high);
+ }
cw_changed();
}
filter_board_changed();
}
}
-
+/*
static void apollo_tuner_cb(GtkWidget *widget, gpointer data) {
apollo_tuner=apollo_tuner==1?0:1;
if(protocol==NEW_PROTOCOL) {
pa_changed();
}
}
+*/
static void rx_dither_cb(GtkWidget *widget, gpointer data) {
rx_dither=rx_dither==1?0: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);
+/*
GtkWidget *apollo_tuner_b=gtk_check_button_new_with_label("Auto Tuner");
//gtk_widget_override_font(apollo_tuner_b, pango_font_description_from_string("Arial 18"));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (apollo_tuner_b), apollo_tuner);
gtk_widget_show(pa_b);
gtk_grid_attach(GTK_GRID(general_grid),pa_b,2,5,1,1);
g_signal_connect(pa_b,"toggled",G_CALLBACK(pa_cb),NULL);
-
+ */
}
GtkWidget *sample_rate_label=gtk_label_new("Sample Rate:");
#include "meter.h"
#include "wdsp.h"
#include "radio.h"
+#include "version.h"
#ifdef FREEDV
#include "mode.h"
#include "freedv.h"
void meter_update(int meter_type,double value,double reverse,double exciter,double alc) {
+ char text[128];
char sf[32];
int text_location;
double offset;
cairo_set_source_rgb (cr, 0, 0, 0);
cairo_paint (cr);
+
+ sprintf(text,"Version: %s %s", build_date, build_version);
+ cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
+ cairo_set_font_size(cr, 12);
+ cairo_move_to(cr, 5, 15);
+ cairo_show_text(cr, text);
+
if(last_meter_type!=meter_type) {
last_meter_type=meter_type;
max_count=0;
cairo_set_line_width(cr, 1.0);
cairo_set_source_rgb(cr, 1, 1, 1);
for(i=0;i<54;i++) {
- cairo_move_to(cr,offset+(double)(i*db),(double)meter_height-20);
+ cairo_move_to(cr,offset+(double)(i*db),(double)meter_height-10);
if(i%18==0) {
- cairo_line_to(cr,offset+(double)(i*db),(double)(meter_height-30));
+ cairo_line_to(cr,offset+(double)(i*db),(double)(meter_height-20));
} else if(i%6==0) {
- cairo_line_to(cr,offset+(double)(i*db),(double)(meter_height-25));
+ cairo_line_to(cr,offset+(double)(i*db),(double)(meter_height-15));
}
}
cairo_stroke(cr);
cairo_show_text(cr, "6");
cairo_set_source_rgb(cr, 1, 0, 0);
- cairo_move_to(cr,offset+(double)(54*db),(double)meter_height-20);
- cairo_line_to(cr,offset+(double)(54*db),(double)(meter_height-30));
- cairo_move_to(cr,offset+(double)(74*db),(double)meter_height-20);
- cairo_line_to(cr,offset+(double)(74*db),(double)(meter_height-30));
- cairo_move_to(cr,offset+(double)(94*db),(double)meter_height-20);
- cairo_line_to(cr,offset+(double)(94*db),(double)(meter_height-30));
- cairo_move_to(cr,offset+(double)(114*db),(double)meter_height-20);
- cairo_line_to(cr,offset+(double)(114*db),(double)(meter_height-30));
+ cairo_move_to(cr,offset+(double)(54*db),(double)meter_height-10);
+ cairo_line_to(cr,offset+(double)(54*db),(double)(meter_height-20));
+ cairo_move_to(cr,offset+(double)(74*db),(double)meter_height-10);
+ cairo_line_to(cr,offset+(double)(74*db),(double)(meter_height-20));
+ cairo_move_to(cr,offset+(double)(94*db),(double)meter_height-10);
+ cairo_line_to(cr,offset+(double)(94*db),(double)(meter_height-20));
+ cairo_move_to(cr,offset+(double)(114*db),(double)meter_height-10);
+ cairo_line_to(cr,offset+(double)(114*db),(double)(meter_height-20));
cairo_stroke(cr);
cairo_move_to(cr, offset+(double)(54*db)-3.0, (double)meter_height);
cairo_show_text(cr, "+60");
cairo_set_source_rgb(cr, 0, 1, 0);
- cairo_rectangle(cr, offset+0.0, (double)(meter_height-50), (double)((level+127.0)*db), 20.0);
+ cairo_rectangle(cr, offset+0.0, (double)(meter_height-40), (double)((level+127.0)*db), 20.0);
cairo_fill(cr);
if(level>max_level || max_count==10) {
if(max_level!=0) {
cairo_set_source_rgb(cr, 1, 1, 0);
- cairo_move_to(cr,offset+(double)((max_level+127.0)*db),(double)meter_height-30);
- cairo_line_to(cr,offset+(double)((max_level+127.0)*db),(double)(meter_height-50));
+ cairo_move_to(cr,offset+(double)((max_level+127.0)*db),(double)meter_height-20);
+ cairo_line_to(cr,offset+(double)((max_level+127.0)*db),(double)(meter_height-40));
}
max_count++;
sprintf(sf,"FWD: %d W",(int)max_level);
- cairo_move_to(cr, 10, 25);
+ cairo_move_to(cr, 10, 35);
cairo_show_text(cr, sf);
double swr=(value+reverse)/(value-reverse);
cairo_set_font_size(cr, 18);
sprintf(sf,"SWR: %1.1f:1",swr);
- cairo_move_to(cr, 10, 45);
+ cairo_move_to(cr, 10, 55);
cairo_show_text(cr, sf);
sprintf(sf,"ALC: %2.1f dB",alc);
- cairo_move_to(cr, meter_width/2, 45);
+ cairo_move_to(cr, meter_width/2, 35);
cairo_show_text(cr, sf);
/*
schedule_general();
}
+/*
void pa_changed() {
schedule_general();
}
void tuner_changed() {
schedule_general();
}
+*/
void cw_changed() {
}
// use defaults apart from
buffer[37]=0x08; // phase word (not frequency)
- buffer[58]=pa; // enable PA 0x01
- if((filter_board==APOLLO) && tune && apollo_tuner) {
+ //buffer[58]=pa; // enable PA 0x01
+ buffer[58]=0x01; // enable PA 0x01
+ if((filter_board==APOLLO) && tune) {
buffer[58]|=0x02;
}
dash=(control_in[0]&0x02)==0x02;
dot=(control_in[0]&0x04)==0x04;
+if(last_ptt!=ptt) {
+ fprintf(stderr,"ptt=%d\n",ptt);
+}
+if(last_dot!=dot) {
+ fprintf(stderr,"dot=%d\n",dot);
+}
+if(last_dash!=dash) {
+ fprintf(stderr,"dash=%d\n",dash);
+}
if(last_ptt!=ptt) {
g_idle_add(ptt_update,(gpointer)ptt);
}
}
}
break;
- case 1: // rx frequency
- output_buffer[C0]=0x04;
- output_buffer[C1]=ddsFrequency>>24;
- output_buffer[C2]=ddsFrequency>>16;
- output_buffer[C3]=ddsFrequency>>8;
- output_buffer[C4]=ddsFrequency;
- break;
- case 2: // tx frequency
+ case 1: // tx frequency
output_buffer[C0]=0x02;
- long txFrequency=ddsFrequency;
+ long long txFrequency=ddsFrequency;
+/*
if(mode==modeCWU) {
- txFrequency+=cw_keyer_sidetone_frequency;
+ txFrequency=ddsFrequency+(long long)cw_keyer_sidetone_frequency;
} else if(mode==modeCWL) {
- txFrequency-=cw_keyer_sidetone_frequency;
+ txFrequency=ddsFrequency-(long long)cw_keyer_sidetone_frequency;
}
+*/
output_buffer[C1]=txFrequency>>24;
output_buffer[C2]=txFrequency>>16;
output_buffer[C3]=txFrequency>>8;
output_buffer[C4]=txFrequency;
break;
+ case 2: // rx frequency
+ output_buffer[C0]=0x04;
+ output_buffer[C1]=ddsFrequency>>24;
+ output_buffer[C2]=ddsFrequency>>16;
+ output_buffer[C3]=ddsFrequency>>8;
+ output_buffer[C4]=ddsFrequency;
+ break;
case 3:
{
float d=(float)drive;
output_buffer[C2]|=0x02;
}
if(filter_board==APOLLO) {
- output_buffer[C2]|=0x2C; // board, filter ,tuner
+ output_buffer[C2]|=0x2C;
}
- if((filter_board==APOLLO) && tune && apollo_tuner) {
+ if((filter_board==APOLLO) && tune) {
output_buffer[C2]|=0x10;
}
output_buffer[C3]=0x00;
cairo_stroke(cr);
// plot frequency markers
- long divisor=20000;
long f;
+ long divisor=20000;
long half=(long)getSampleRate()/2L;
+ long frequency=getFrequency();
+/*
+ if(mode==modeCWU) {
+ frequency=frequency+cw_keyer_sidetone_frequency;
+ } else if(mode==modeCWL) {
+ frequency=frequency-cw_keyer_sidetone_frequency;
+ }
+*/
switch(sample_rate) {
case 48000:
divisor=5000L;
break;
}
for(i=0;i<display_width;i++) {
- f = getFrequency() - half + (long) (hz_per_pixel * i);
+ f = frequency - half + (long) (hz_per_pixel * i);
if (f > 0) {
if ((f % divisor) < (long) hz_per_pixel) {
cairo_set_source_rgb (cr, 0, 1, 1);
cairo_stroke(cr);
// band edges
- long min_display=getFrequency()-half;
- long max_display=getFrequency()+half;
+ long min_display=frequency-half;
+ long max_display=frequency+half;
BAND_LIMITS* bandLimits=getBandLimits(min_display,max_display);
if(bandLimits!=NULL) {
cairo_set_source_rgb (cr, 1, 0, 0);
int sample_rate=48000;
int filter_board=ALEX;
-int pa=PA_ENABLED;
-int apollo_tuner=0;
+//int pa=PA_ENABLED;
+//int apollo_tuner=0;
int updates_per_second=10;
if(value) sample_rate=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_panadapter");
setProperty("sample_rate",value);
sprintf(value,"%d",filter_board);
setProperty("filter_board",value);
+/*
sprintf(value,"%d",apollo_tuner);
setProperty("apollo_tuner",value);
sprintf(value,"%d",pa);
setProperty("pa",value);
+*/
sprintf(value,"%d",updates_per_second);
setProperty("updates_per_second",value);
sprintf(value,"%d",display_panadapter);
#define ALEX 1
#define APOLLO 2
+/*
#define PA_DISABLED 0
#define PA_ENABLED 1
#define APOLLO_TUNER 1
-
+*/
#define KEYER_STRAIGHT 0
#define KEYER_MODE_A 1
#define KEYER_MODE_B 2
G_CALLBACK (splash_configure_event_cb), NULL);
char build[64];
- sprintf(build,"build: %s %s",build_date, build_time);
+ sprintf(build,"build: %s %s",build_date, build_version);
GtkWidget *pi_label=gtk_label_new("pihpsdr by John Melton g0orx/n6lyt");
gtk_label_set_justify(GTK_LABEL(pi_label),GTK_JUSTIFY_LEFT);
}
int ptt_update(void *data) {
-fprintf(stderr,"ptt_update\n");
int ptt=(int)data;
if((mode==modeCWL || mode==modeCWU) && cw_keyer_internal==1) {
// just ignore it
*
*/
-char build_date[]=__DATE__;
-char build_time[]=__TIME__;
+char build_date[]=GIT_DATE;
+char build_version[]=GIT_VERSION;
*
*/
+extern char build_version[];
extern char build_date[];
-extern char build_time[];
#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 "main.h"
#include "agc.h"
#include "toolbar.h"
#include "wdsp.h"
#include "wdsp_init.h"
-#ifdef LIMESDR
#include "discovered.h"
-#endif
static GtkWidget *parent_window;
static int my_width;
}
int vfo_update(void *data) {
+ DISCOVERED *d=&discovered[selected_device];
BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
FILTER* band_filters=filters[entry->mode];
FILTER* band_filter=&band_filters[entry->filter];
cairo_select_font_face(cr, "Arial",
CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);
- //cairo_set_font_size(cr, 36);
- cairo_set_font_size(cr, 28);
+ char text[128];
+ switch(d->protocol) {
+ case ORIGINAL_PROTOCOL:
+ case NEW_PROTOCOL:
+ sprintf(text,"%s (%s %d.%d) %s",
+ d->name,
+ d->protocol==ORIGINAL_PROTOCOL?"old":"new",
+ d->software_version/10,
+ d->software_version%10,
+ inet_ntoa(d->info.network.address.sin_addr));
+ break;
+#ifdef LIMESDR
+ case LIMESDR_PROTOCOL:
+ sprintf(text,"%s\n",
+ d->name);
+ break;
+#endif
+ }
+ cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
+ cairo_set_font_size(cr, 12);
+ cairo_move_to(cr, 5, 15);
+ cairo_show_text(cr, text);
+
+ cairo_set_font_size(cr, 28);
if(isTransmitting()) {
cairo_set_source_rgb(cr, 1, 0, 0);
} else {
}
long long f=entry->frequencyA+ddsOffset;
-
char sf[32];
//sprintf(sf,"%0lld.%06lld MHz",entry->frequencyA/(long long)1000000,entry->frequencyA%(long long)1000000);
sprintf(sf,"%0lld.%06lld MHz",f/(long long)1000000,f%(long long)1000000);
- cairo_move_to(cr, 5, 30);
+ cairo_move_to(cr, 5, 38);
cairo_show_text(cr, sf);
+ cairo_set_source_rgb(cr, 0, 1, 0);
cairo_set_font_size(cr, 12);
cairo_move_to(cr, (my_width/2)+40, 30);