gpio.o
endif
+#uncomment if build for SHORT FRAMES (MIC and Audio)
+SHORT_FRAMES="-D SHORT_FRAMES"
GTKINCLUDES=`pkg-config --cflags gtk+-3.0`
GTKLIBS=`pkg-config --libs gtk+-3.0`
AUDIO_LIBS=-lasound
-OPTIONS=-g -D $(UNAME_N) $(GPIO_OPTIONS) $(LIMESDR_OPTIONS) $(FREEDV_OPTIONS) $(PSK_OPTIONS) -D GIT_DATE='"$(GIT_DATE)"' -D GIT_VERSION='"$(GIT_VERSION)"' $(DEBUG_OPTION) -O3
+OPTIONS=-g -D $(UNAME_N) $(GPIO_OPTIONS) $(LIMESDR_OPTIONS) $(FREEDV_OPTIONS) $(PSK_OPTIONS) $(SHORT_FRAMES) -D GIT_DATE='"$(GIT_DATE)"' -D GIT_VERSION='"$(GIT_VERSION)"' $(DEBUG_OPTION) -O3
LIBS=-lrt -lm -lwdsp -lpthread $(AUDIO_LIBS) -lpulse $(PSKLIBS) $(GTKLIBS) $(GPIO_LIBS) $(SOAPYSDRLIBS) $(FREEDVLIBS)
INCLUDES=$(GTKINCLUDES)
}
if(ENABLE_VFO_ENCODER) {
- gpioSetMode(VFO_ENCODER_A, PI_INPUT);
- gpioSetMode(VFO_ENCODER_B, PI_INPUT);
+ if(gpioSetMode(VFO_ENCODER_A, PI_INPUT)!=0) {
+ fprintf(stderr,"gpioSetMode for VFO_ENCODER_A failed\n");
+ }
+ if(gpioSetMode(VFO_ENCODER_B, PI_INPUT)!=0) {
+ fprintf(stderr,"gpioSetMode for VFO_ENCODER_B failed\n");
+ }
if(ENABLE_VFO_PULLUP) {
gpioSetPullUpDown(VFO_ENCODER_A, PI_PUD_UP);
gpioSetPullUpDown(VFO_ENCODER_B, PI_PUD_UP);
gpioSetPullUpDown(VFO_ENCODER_A, PI_PUD_OFF);
gpioSetPullUpDown(VFO_ENCODER_B, PI_PUD_OFF);
}
- gpioSetAlertFunc(VFO_ENCODER_A, vfoEncoderPulse);
- gpioSetAlertFunc(VFO_ENCODER_B, vfoEncoderPulse);
+ if(gpioSetAlertFunc(VFO_ENCODER_A, vfoEncoderPulse)!=0) {
+ fprintf(stderr,"gpioSetAlertFunc for VFO_ENCODER_A failed\n");
+ }
+ if(gpioSetAlertFunc(VFO_ENCODER_B, vfoEncoderPulse)!=0) {
+ fprintf(stderr,"gpioSetAlertFunc for VFO_ENCODER_B failed\n");
+ }
vfoEncoderPos=0;
}
fprintf(stderr,"wiringPiSetup\n");
if (wiringPiSetup () < 0) {
printf ("Unable to setup wiringPi: %s\n", strerror (errno));
- return 1;
+ return -1;
}
FILE *fp;
if ( wiringPiISR (0, INT_EDGE_BOTH, &interruptB) < 0 ) {
printf ("Unable to setup ISR: %s\n", strerror (errno));
- return 1;
+ return -1;
}
if ( wiringPiISR (1, INT_EDGE_BOTH, &interruptA) < 0 ) {
printf ("Unable to setup ISR: %s\n", strerror (errno));
- return 1;
+ return -1;
}
#endif
static int agc_encoder_changed(void *data) {
int pos=*(int*)data;
if(pos!=0) {
- if(agcFunction) {
- rit-=pos;
- if(rit>1000) rit=1000;
- if(rit<-1000) rit=-1000;
- vfo_update(NULL);
+ if(function) {
+ int att=attenuation;
+ att+=pos;
+ if(att<0) {
+ att=0;
+ } else if (att>31) {
+ att=31;
+ }
+ set_attenuation_value((double)att);
} else {
- if(function) {
- int att=attenuation;
- att+=pos;
- if(att<0) {
- att=0;
- } else if (att>31) {
- att=31;
- }
- set_attenuation_value((double)att);
- } else {
- double gain=agc_gain;
- gain+=(double)pos;
- if(gain<-20.0) {
- gain=-20.0;
- } else if(gain>120.0) {
- gain=120.0;
- }
- set_agc_gain(gain);
+ double gain=agc_gain;
+ gain+=(double)pos;
+ if(gain<-20.0) {
+ gain=-20.0;
+ } else if(gain>120.0) {
+ gain=120.0;
}
+ set_agc_gain(gain);
}
}
return 0;
#define VFO_HEIGHT ((display_height/32)*4)
#define VFO_WIDTH ((display_width/32)*16)
#define MENU_HEIGHT VFO_HEIGHT
-#define MENU_WIDTH ((display_width/32)*3)
+//#define MENU_WIDTH ((display_width/32)*3)
+#define MENU_WIDTH ((display_width/32)*8)
#define METER_HEIGHT VFO_HEIGHT
-#define METER_WIDTH ((display_width/32)*13)
+//#define METER_WIDTH ((display_width/32)*13)
+#define METER_WIDTH ((display_width/32)*8)
#define PANADAPTER_HEIGHT ((display_height/32)*8)
#define SLIDERS_HEIGHT ((display_height/32)*6)
#define TOOLBAR_HEIGHT ((display_height/32)*2)
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK_CANCEL,
"No devices found! Retry Discovery?");
- gtk_widget_override_font(discovery_dialog, pango_font_description_from_string("Arial 18"));
+ gtk_widget_override_font(discovery_dialog, pango_font_description_from_string("FreeMono 18"));
gint result=gtk_dialog_run (GTK_DIALOG (discovery_dialog));
gtk_widget_destroy(discovery_dialog);
if(result==GTK_RESPONSE_CANCEL) {
GTK_RESPONSE_CLOSE,
NULL);
- gtk_widget_override_font(discovery_dialog, pango_font_description_from_string("Arial 18"));
+ gtk_widget_override_font(discovery_dialog, pango_font_description_from_string("FreeMono 18"));
GtkWidget *content;
content=gtk_dialog_get_content_area(GTK_DIALOG(discovery_dialog));
}
GtkWidget *label=gtk_label_new(text);
- gtk_widget_override_font(label, pango_font_description_from_string("Arial 12"));
+ 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("Arial 18"));
+ 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,"pressed",G_CALLBACK(start_cb),(gpointer)d);
}
//splash_status("Initializing wdsp ...");
- wdsp_init(0,display_width,d->protocol);
+ wdsp_init(0,display_width,radio->protocol);
switch(radio->protocol) {
case ORIGINAL_PROTOCOL:
splash_status("Initializing GPIO ...");
#ifdef GPIO
- gpio_init();
+ if(gpio_init()<0) {
+ }
#endif
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
static GtkWidget *parent_window;
-static GtkWidget *box;
-static GtkWidget *menu;
+static GtkWidget *h_box;
+static GtkWidget *v_box_1;
+static GtkWidget *v_box_2;
+static GtkWidget *menu_b;
+static GtkWidget *ctun_b;
+static GtkWidget *rit_b;
+static GtkWidget *rit_plus_b;
+static GtkWidget *rit_minus_b;
+static gint rit_timer;
static GtkWidget *ant_grid;
static gint ant_id=-1;
-#ifdef DEBUG
-static void scale_value_changed_cb(GtkWidget *widget, gpointer data) {
- scale=(int)gtk_range_get_value(GTK_RANGE(widget));
-}
-
-#ifdef PSK
-static void psk_scale_value_changed_cb(GtkWidget *widget, gpointer data) {
- psk_scale=(int)gtk_range_get_value(GTK_RANGE(widget));
-}
-#endif
+static gboolean rit_enabled=FALSE;
-#ifdef FREEDV
-static void freedv_scale_value_changed_cb(GtkWidget *widget, gpointer data) {
- freedv_scale=(int)gtk_range_get_value(GTK_RANGE(widget));
+static void set_button_text_color(GtkWidget *widget,char *color) {
+ GtkStyleContext *style_context;
+ GtkCssProvider *provider = gtk_css_provider_new ();
+ gchar tmp[64];
+ style_context = gtk_widget_get_style_context(widget);
+ gtk_style_context_add_provider(style_context, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ g_snprintf(tmp, sizeof tmp, "GtkButton, GtkLabel { color: %s; }", color);
+ gtk_css_provider_load_from_data(GTK_CSS_PROVIDER(provider), tmp, -1, NULL);
+ g_object_unref (provider);
}
-#endif
-
-#endif
static void agc_hang_threshold_value_changed_cb(GtkWidget *widget, gpointer data) {
agc_hang_threshold=(int)gtk_range_get_value(GTK_RANGE(widget));
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->frequencyA);
+ setMode(entry->mode);
+ FILTER* band_filters=filters[entry->mode];
+ FILTER* band_filter=&band_filters[entry->filter];
+ setFilter(band_filter->low,band_filter->high);
+ 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(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->frequencyA);
+ setMode(entry->mode);
+ FILTER* band_filters=filters[entry->mode];
+ FILTER* band_filter=&band_filters[entry->filter];
+ setFilter(band_filter->low,band_filter->high);
+ }
}
/*
static void apollo_tuner_cb(GtkWidget *widget, gpointer data) {
gtk_grid_attach(GTK_GRID(tx_grid),tx_out_of_band_b,0,7,4,1);
g_signal_connect(tx_out_of_band_b,"toggled",G_CALLBACK(tx_out_of_band_cb),NULL);
-
-#ifdef DEBUG
- int column=((i/6)*2)+2;
-
- GtkWidget *scale_label=gtk_label_new("Mic Scale:");
- gtk_widget_show(scale_label);
- gtk_grid_attach(GTK_GRID(tx_grid),scale_label,column,0,1,1);
- GtkWidget *scale_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 20.0, 0.1);
- gtk_range_set_value (GTK_RANGE(scale_scale),scale);
- gtk_widget_show(scale_scale);
- gtk_grid_attach(GTK_GRID(tx_grid),scale_scale,column+1,0,30,1);
- g_signal_connect(G_OBJECT(scale_scale),"value_changed",G_CALLBACK(scale_value_changed_cb),NULL);
-
- GtkWidget *psk_scale_label=gtk_label_new("PSK Scale:");
- gtk_widget_show(psk_scale_label);
- gtk_grid_attach(GTK_GRID(tx_grid),psk_scale_label,column,1,1,1);
- GtkWidget *psk_scale_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 20.0, 0.1);
- gtk_range_set_value (GTK_RANGE(psk_scale_scale),psk_scale);
- gtk_widget_show(psk_scale_scale);
- gtk_grid_attach(GTK_GRID(tx_grid),psk_scale_scale,column+1,1,30,1);
- g_signal_connect(G_OBJECT(psk_scale_scale),"value_changed",G_CALLBACK(psk_scale_value_changed_cb),NULL);
-
- GtkWidget *freedv_scale_label=gtk_label_new("FREEDV Scale:");
- gtk_widget_show(freedv_scale_label);
- gtk_grid_attach(GTK_GRID(tx_grid),freedv_scale_label,column,2,1,1);
- GtkWidget *freedv_scale_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 20.0, 0.1);
- gtk_range_set_value (GTK_RANGE(freedv_scale_scale),freedv_scale);
- gtk_widget_show(freedv_scale_scale);
- gtk_grid_attach(GTK_GRID(tx_grid),freedv_scale_scale,column+1,2,30,1);
- g_signal_connect(G_OBJECT(freedv_scale_scale),"value_changed",G_CALLBACK(freedv_scale_value_changed_cb),NULL);
-#endif
-
id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),tx_grid,tx_label);
}
}
+static gboolean ctun_pressed_event_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
+ ctun=ctun==1?0:1;
+
+ if(ctun) {
+ set_button_text_color(ctun_b,"red");
+ } else {
+ set_button_text_color(ctun_b,"black");
+ if(ddsOffset!=0) {
+ ddsOffset=0;
+ wdsp_set_offset(ddsOffset);
+ vfo_update(NULL);
+ }
+ }
+ return TRUE;
+}
+
+static gboolean rit_timer_cb(gpointer data) {
+ if((GtkWidget*)data==rit_plus_b) {
+ rit++;
+ } else {
+ rit--;
+ }
+ if(rit>1000) rit=1000;
+ if(rit<-1000) rit=-1000;
+ vfo_update(NULL);
+ return TRUE;
+}
+
+static gboolean rit_pressed_event_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
+ if(rit_enabled) {
+ rit_enabled=FALSE;
+ set_button_text_color(rit_b,"black");
+ rit=0;
+ gtk_widget_set_sensitive(rit_plus_b,FALSE);
+ gtk_widget_set_sensitive(rit_minus_b,FALSE);
+ } else {
+ rit_enabled=TRUE;
+ set_button_text_color(rit_b,"red");
+ gtk_widget_set_sensitive(rit_plus_b,TRUE);
+ gtk_widget_set_sensitive(rit_minus_b,TRUE);
+ }
+ vfo_update(NULL);
+}
+
+static gboolean rit_step_pressed_event_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
+ if(widget==rit_plus_b) {
+ rit++;
+ } else {
+ rit--;
+ }
+ if(rit>1000) rit=1000;
+ if(rit<-1000) rit=-1000;
+ vfo_update(NULL);
+ rit_timer=g_timeout_add(200,rit_timer_cb,widget);
+ return TRUE;
+}
+
+
+static gboolean rit_step_released_event_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
+ g_source_remove(rit_timer);
+ return TRUE;
+}
+
+
GtkWidget* menu_init(int width,int height,GtkWidget *parent) {
GdkRGBA black;
parent_window=parent;
- box=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
- gtk_widget_set_size_request (box, width, height);
- gtk_widget_override_background_color(box, GTK_STATE_NORMAL, &black);
+ h_box=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
+ gtk_widget_set_size_request (h_box, width, height);
+ gtk_widget_override_background_color(h_box, GTK_STATE_NORMAL, &black);
+
+ v_box_2=gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
+ gtk_widget_override_background_color(v_box_2, GTK_STATE_NORMAL, &black);
+
+ rit_plus_b=gtk_button_new_with_label("RIT+");
+ gtk_widget_override_font(rit_plus_b, pango_font_description_from_string("FreeMono Bold 10"));
+ g_signal_connect (rit_plus_b, "pressed", G_CALLBACK(rit_step_pressed_event_cb), NULL);
+ g_signal_connect (rit_plus_b, "released", G_CALLBACK(rit_step_released_event_cb), NULL);
+ gtk_box_pack_start (GTK_BOX(v_box_2),rit_plus_b,TRUE,TRUE,0);
+
+ rit_minus_b=gtk_button_new_with_label("RIT-");
+ gtk_widget_override_font(rit_minus_b, pango_font_description_from_string("FreeMono Bold 10"));
+ g_signal_connect (rit_minus_b, "pressed", G_CALLBACK(rit_step_pressed_event_cb), NULL);
+ g_signal_connect (rit_minus_b, "released", G_CALLBACK(rit_step_released_event_cb), NULL);
+ gtk_box_pack_start (GTK_BOX(v_box_2),rit_minus_b,TRUE,TRUE,0);
+
+ gtk_widget_set_sensitive(rit_plus_b,FALSE);
+ gtk_widget_set_sensitive(rit_minus_b,FALSE);
+
+ gtk_box_pack_start (GTK_BOX(h_box),v_box_2,TRUE,TRUE,0);
+
+ v_box_1=gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
+ gtk_widget_override_background_color(v_box_1, GTK_STATE_NORMAL, &black);
+
+ ctun_b=gtk_button_new_with_label("CTUN");
+ gtk_widget_override_font(ctun_b, pango_font_description_from_string("FreeMono Bold 10"));
+ g_signal_connect (ctun_b, "pressed", G_CALLBACK(ctun_pressed_event_cb), NULL);
+ gtk_box_pack_start (GTK_BOX(v_box_1),ctun_b,TRUE,TRUE,0);
+
+ rit_b=gtk_button_new_with_label("RIT");
+ gtk_widget_override_font(rit_b, pango_font_description_from_string("FreeMono Bold 10"));
+ g_signal_connect (rit_b, "pressed", G_CALLBACK(rit_pressed_event_cb), NULL);
+ gtk_box_pack_start (GTK_BOX(v_box_1),rit_b,TRUE,TRUE,0);
+
+ gtk_box_pack_start (GTK_BOX(h_box),v_box_1,TRUE,TRUE,0);
- menu=gtk_button_new_with_label("Menu");
- // gtk_widget_set_size_request (menu, width, height);
- g_signal_connect (menu, "pressed", G_CALLBACK(menu_pressed_event_cb), NULL);
- gtk_box_pack_start (GTK_BOX(box),menu,TRUE,TRUE,0);
+ menu_b=gtk_button_new_with_label("Menu");
+ // gtk_widget_set_size_request (menu_b, width, height);
+ gtk_widget_override_font(menu_b, pango_font_description_from_string("FreeMono Bold 10"));
+ g_signal_connect (menu_b, "pressed", G_CALLBACK(menu_pressed_event_cb), NULL);
+ gtk_box_pack_start (GTK_BOX(h_box),menu_b,TRUE,TRUE,0);
- gtk_widget_show_all(box);
+ gtk_widget_show_all(h_box);
- return box;
+ return h_box;
}
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_override_font(close_button, pango_font_description_from_string("FreeMono 18"));
gtk_widget_show_all(dialog);
g_signal_connect_swapped (dialog,
cairo_set_source_rgb (cr, 0, 0, 0);
cairo_paint (cr);
-
- sprintf(text,"Version: %s %s", build_date, build_version);
+ //sprintf(text,"Version: %s %s", build_date, build_version);
+ sprintf(text,"Version: %s", version);
+ cairo_select_font_face(cr, "FreeMono",
+ CAIRO_FONT_SLANT_NORMAL,
+ CAIRO_FONT_WEIGHT_BOLD);
cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
- cairo_set_font_size(cr, 12);
+ cairo_set_font_size(cr, 10);
cairo_move_to(cr, 5, 15);
cairo_show_text(cr, text);
// value is dBm
text_location=10;
offset=5.0;
- cairo_select_font_face(cr, "Arial",
- CAIRO_FONT_SLANT_NORMAL,
- CAIRO_FONT_WEIGHT_BOLD);
double level=value+(double)get_attenuation();
if(meter_width>=114) {
- int db=meter_width/114; // S9+60 (9*6)+60
- if(db>2) db=2;
+ //int db=meter_width/114; // S9+60 (9*6)+60
+ //if(db>2) db=2;
+ int db=1;
int i;
cairo_set_line_width(cr, 1.0);
cairo_set_source_rgb(cr, 1, 1, 1);
#endif
case POWER:
// value is Watts
- cairo_select_font_face(cr, "Arial",
+ cairo_select_font_face(cr, "FreeMono",
CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size(cr, 18);
cairo_show_text(cr, sf);
double swr=(max_level+reverse)/(max_level-reverse);
- cairo_select_font_face(cr, "Arial",
+ cairo_select_font_face(cr, "FreeMono",
CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size(cr, 18);
static int leftaudiosample;
static int rightaudiosample;
static long audiosequence;
+#ifdef SHORT_FRAMES
static unsigned char audiobuffer[260]; // was 1444
+#else
+static unsigned char audiobuffer[1444]; // was 1444
+#endif
static int audioindex;
#ifdef FREEDV
buffer[12]=phase;
// tx (no split yet)
- long txFrequency=ddsFrequency;
+ long long txFrequency=ddsFrequency;
+ if(ctun) {
+ txFrequency+=ddsOffset;
+ }
phase=(long)((4294967296.0*(double)txFrequency)/122880000.0);
buffer[329]=phase>>24;
//buffer[1442]=attenuation;
buffer[1443]=attenuation;
-//fprintf(stderr,"[4]=%02X\n", buffer[4]);
+//fprintf(stderr,"high_priority[4]=0x%02X\n", buffer[4]);
//fprintf(stderr,"filters=%04X\n", filters);
if(sendto(data_socket,buffer,sizeof(buffer),0,(struct sockaddr*)&high_priority_addr,high_priority_addr_length)<0) {
for(j=0;j<freedv_resample;j++) { // 8K to 48K
micsample=mod_out[s];
micsampledouble=(double)micsample/32767.0; // 16 bit sample 2^16-1
- micinputbuffer[micsamples*2]=micsampledouble*mic_gain;
- micinputbuffer[(micsamples*2)+1]=micsampledouble*mic_gain;
+ micinputbuffer[micsamples*2]=micsampledouble*(mic_gain*1.0);
+ micinputbuffer[(micsamples*2)+1]=micsampledouble*(mic_gain*1.0);
micsamples++;
if(micsamples==BUFFER_SIZE) {
full_tx_buffer();
micinputbuffer[micsamples*2]=0.0;
micinputbuffer[(micsamples*2)+1]=0.0;
} else {
- micinputbuffer[micsamples*2]=micsampledouble*mic_gain;
- micinputbuffer[(micsamples*2)+1]=micsampledouble*mic_gain;
+ micinputbuffer[micsamples*2]=micsampledouble*(mic_gain*1.0);
+ micinputbuffer[(micsamples*2)+1]=micsampledouble*(mic_gain*1.0);
}
micsamples++;
static void full_tx_buffer() {
long isample;
long qsample;
- double gain=8388607.0*scale;;
+ double gain=8388607.0;
int j;
int error;
#ifdef FREEDV
if(mode==modeFREEDV) {
- gain=8388607.0*freedv_scale;
+ gain=8388607.0;
}
#endif
- if(radio->device==DEVICE_METIS && atlas_penelope) {
+ if(radio->device==NEW_DEVICE_ATLAS && atlas_penelope) {
if(tune) {
- gain=8388607.0*(double)tune_drive;
+ gain=gain*tune_drive;
} else {
- gain=8388607.0*(double)drive;
+ gain=gain*(double)drive;
}
}
#define BUFFER_SIZE 1024
+#ifdef SHORT_FRAMES
#define MIC_SAMPLES 64
+#else
+#define MIC_SAMPLES 720
+#endif
extern int data_socket;
extern sem_t response_sem;
static int right_tx_sample;
static unsigned char output_buffer[OZY_BUFFER_SIZE];
-static int output_buffer_index=0;
+static int output_buffer_index=8;
static int command=0;
for(j=0;j<freedv_divisor;j++) {
mic_sample=mod_out[s];
mic_sample_double=(double)mic_sample/32767.0f; // 16 bit sample 2^16-1
- micinputbuffer[samples*2]=mic_sample_double*mic_gain;
- micinputbuffer[(samples*2)+1]=mic_sample_double*mic_gain;
+ micinputbuffer[samples*2]=mic_sample_double*(mic_gain*1);
+ micinputbuffer[(samples*2)+1]=mic_sample_double*(mic_gain*1);
iqinputbuffer[samples*2]=0.0;
iqinputbuffer[(samples*2)+1]=0.0;
samples++;
micinputbuffer[samples*2]=0.0;
micinputbuffer[(samples*2)+1]=0.0;
} else {
- micinputbuffer[samples*2]=mic_sample_double*mic_gain;
- micinputbuffer[(samples*2)+1]=mic_sample_double*mic_gain;
+ micinputbuffer[samples*2]=mic_sample_double*(mic_gain*1);
+ micinputbuffer[(samples*2)+1]=mic_sample_double*(mic_gain*1);
}
iqinputbuffer[samples*2]=0.0;
iqinputbuffer[(samples*2)+1]=0.0;
static void full_tx_buffer() {
int j;
int error;
- double gain=32767.0*scale; // 2^16-1
+ double gain=32767.0; // 2^16-1
// debug
//int min_sample=0;
fexchange0(CHANNEL_TX, micinputbuffer, iqoutputbuffer, &error);
Spectrum0(1, CHANNEL_TX, 0, 0, iqoutputbuffer);
-#ifdef FREEDV
- if(mode==modeFREEDV) {
- gain=32767.0*freedv_scale;
- }
-#endif
-
if(radio->device==DEVICE_METIS && atlas_penelope) {
if(tune) {
- gain=32767.0*tune_drive;
+ gain=gain*tune_drive;
} else {
- gain=32767.0*drive;
+ gain=gain*drive;
}
}
+fprintf(stderr,"full_tx_buffer: gain=%f\n",gain);
for(j=0;j<output_buffer_size;j++) {
left_rx_sample=0;
right_rx_sample=0;
for(j=0;j<freedv_divisor;j++) { // 8K to 48K
leftmicsample=mod_out[s];
leftmicsampledouble=(double)leftmicsample/32767.0; // 16 bit sample 2^16-1
- micinputbuffer[samples*2]=leftmicsampledouble*mic_gain;
- micinputbuffer[(samples*2)+1]=leftmicsampledouble*mic_gain;
+ micinputbuffer[samples*2]=leftmicsampledouble*(mic_gain*1);
+ micinputbuffer[(samples*2)+1]=leftmicsampledouble*(mic_gain*1);
iqinputbuffer[samples*2]=0.0;
iqinputbuffer[(samples*2)+1]=0.0;
samples++;
micinputbuffer[samples*2]=0.0;
micinputbuffer[(samples*2)+1]=0.0;
} else {
- micinputbuffer[samples*2]=leftmicsampledouble*mic_gain;
- micinputbuffer[(samples*2)+1]=leftmicsampledouble*mic_gain;
+ micinputbuffer[samples*2]=leftmicsampledouble*(mic_gain*1);
+ micinputbuffer[(samples*2)+1]=leftmicsampledouble*(mic_gain*1);
}
iqinputbuffer[samples*2]=0.0;
iqinputbuffer[(samples*2)+1]=0.0;
case 1: // tx frequency
output_buffer[C0]=0x02;
long long txFrequency=ddsFrequency;
+ if(ctun) {
+ txFrequency+=ddsOffset;
+ }
output_buffer[C1]=txFrequency>>24;
output_buffer[C2]=txFrequency>>16;
output_buffer[C3]=txFrequency>>8;
if(tune) {
d=(float)tune_drive;
}
- BAND *band=band_get_current_band();
- d=d*((float)band->pa_calibration/100.0F);
- int power=(int)(d*255.0);
-//fprintf(stderr,"power=%d\n", power);
+ int power=0;
+ if(isTransmitting()) {
+ BAND *band=band_get_current_band();
+ d=d*((float)band->pa_calibration/100.0F);
+ power=(int)(d*255.0);
+ }
output_buffer[C0]=0x12;
output_buffer[C1]=power&0xFF;
// filter
cairo_set_source_rgb (cr, 0.25, 0.25, 0.25);
- filter_left=(double)display_width/2.0+(((double)getFilterLow()+ddsOffset)/hz_per_pixel);
- filter_right=(double)display_width/2.0+(((double)getFilterHigh()+ddsOffset)/hz_per_pixel);
+ if(ctun && isTransmitting()) {
+ filter_left=(double)display_width/2.0+((double)getFilterLow()/hz_per_pixel);
+ filter_right=(double)display_width/2.0+((double)getFilterHigh()/hz_per_pixel);
+ } else {
+ filter_left=(double)display_width/2.0+(((double)getFilterLow()+ddsOffset)/hz_per_pixel);
+ filter_right=(double)display_width/2.0+(((double)getFilterHigh()+ddsOffset)/hz_per_pixel);
+ }
cairo_rectangle(cr, filter_left, 0.0, filter_right-filter_left, (double)display_height);
cairo_fill(cr);
cairo_line_to(cr,(double)display_width,(double)y);
cairo_set_source_rgb (cr, 0, 1, 1);
- cairo_select_font_face(cr, "Arial",
+ cairo_select_font_face(cr, "FreeMono",
CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size(cr, 12);
long divisor=20000;
long half=(long)getSampleRate()/2L;
long frequency=getFrequency();
+ if(ctun && isTransmitting()) {
+ frequency+=ddsOffset;
+ }
switch(sample_rate) {
case 48000:
divisor=5000L;
cairo_line_to(cr,(double)i,(double)display_height);
cairo_set_source_rgb (cr, 0, 1, 1);
- cairo_select_font_face(cr, "Arial",
+ cairo_select_font_face(cr, "FreeMono",
CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size(cr, 12);
// cursor
cairo_set_source_rgb (cr, 1, 0, 0);
cairo_set_line_width(cr, 1.0);
- cairo_move_to(cr,(double)display_width/2.0,0.0);
- cairo_line_to(cr,(double)display_width/2.0,(double)display_height);
+ cairo_move_to(cr,(double)(display_width/2.0)+(ddsOffset/hz_per_pixel),0.0);
+ cairo_line_to(cr,(double)(display_width/2.0)+(ddsOffset/hz_per_pixel),(double)display_height);
cairo_stroke(cr);
// signal
PROPERTY* property=properties;
FILE* f=fopen(filename,"w+");
char line[512];
+ char version[32];
if(!f) {
fprintf(stderr,"can't open %s\n",filename);
exit(1);
}
+
+ sprintf(version,"%0.2f", PROPERTY_VERSION);
+ setProperty("property_version",version);
while(property) {
sprintf(line,"%s=%s\n",property->name,property->value);
fwrite(line,1,strlen(line),f);
#ifndef _PROPERTY_H
#define _PROPERTY_H
+#define PROPERTY_VERSION 1.0
+
typedef struct _PROPERTY PROPERTY;
/* --------------------------------------------------------------------------*/
char property_path[128];
sem_t property_sem;
-double scale=4.6;
-#ifdef FREEDV
-double freedv_scale=4.6;
-#endif
-#ifdef PSK
-double psk_scale=8.5;
-#endif
-
int atlas_penelope=0;
int atlas_clock_source_10mhz=0;
int atlas_clock_source_128mhz=0;
static int pre_tune_mode;
+int ctun=0;
+
void init_radio() {
int rc;
rc=sem_init(&property_sem, 0, 0);
}
void setMox(int state) {
-fprintf(stderr,"setMox: protocol=%d\n", protocol);
if(mox!=state) {
mox=state;
if(protocol==NEW_PROTOCOL) {
}
void setTune(int state) {
-fprintf(stderr,"setTune: protocol=%d\n", protocol);
if(tune!=state) {
tune=state;
if(tune) {
} else {
SetTXAPostGenToneFreq(CHANNEL_TX,(double)cw_keyer_sidetone_frequency);
}
+ //SetTXAPostGenToneMag(CHANNEL_TX,0.99999);
SetTXAPostGenToneMag(CHANNEL_TX,1.0);
SetTXAPostGenRun(CHANNEL_TX,1);
SetChannelState(CHANNEL_RX0,0,1);
switch(protocol) {
case NEW_PROTOCOL:
case ORIGINAL_PROTOCOL:
- entry->frequencyA=f;
+ if(ctun) {
+ long long minf=entry->frequencyA-(long long)(sample_rate/2);
+ long long maxf=entry->frequencyA+(long long)(sample_rate/2);
+ if(f<minf) f=minf;
+ if(f>maxf) f=maxf;
+ ddsOffset=f-entry->frequencyA;
+ wdsp_set_offset(ddsOffset);
+ return;
+ } else {
+ entry->frequencyA=f;
+ }
break;
#ifdef LIMESDR
case LIMESDR_PROTOCOL:
if(f<minf) f=minf;
if(f>maxf) f=maxf;
ddsOffset=f-entry->frequencyA;
-fprintf(stderr,"radio.c: setFrequency: ddsOffset=%lld\n",ddsOffset);
wdsp_set_offset(ddsOffset);
return;
}
}
}
-//fprintf(stderr,"setFrequency: protocol=%d f=%lld\n", protocol, f);
ddsFrequency=f;
switch(protocol) {
case NEW_PROTOCOL:
extern char property_path[];
-extern double scale;
-#ifdef FREEDV
-extern double freedv_scale;
-#endif
-#ifdef PSK
-extern double psk_scale;
-#endif
-
-
#define NONE 0
#define ALEX 1
extern int tx_filter_low;
extern int tx_filter_high;
+extern int ctun;
+
extern void init_radio();
extern void setSampleRate(int rate);
extern int getSampleRate();
status=gtk_label_new("");
gtk_label_set_justify(GTK_LABEL(status),GTK_JUSTIFY_LEFT);
- gtk_widget_override_font(status, pango_font_description_from_string("Arial 18"));
+ gtk_widget_override_font(status, pango_font_description_from_string("FreeMono 18"));
gtk_widget_show(status);
//gtk_container_add(GTK_CONTAINER(splash_window), status);
gtk_grid_attach(GTK_GRID(grid), status, 1, 3, 1, 1);
char build_date[]=GIT_DATE;
char build_version[]=GIT_VERSION;
+char version[]="1.0 rc1";
extern char build_version[];
extern char build_date[];
+extern char version[];
#endif
setFrequency((entry->frequencyA+ddsOffset-hz)/step*step);
else
#endif
- setFrequency((entry->frequencyA+ddsOffset+hz)/step*step);
+ if(ctun) {
+ setFrequency((entry->frequencyA+ddsOffset-hz)/step*step);
+ } else {
+ setFrequency((entry->frequencyA+ddsOffset+hz)/step*step);
+ }
vfo_update(NULL);
}
}
void vfo_move_to(int hz) {
if(!locked) {
BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
- //entry->frequencyA=(entry->frequencyA+hz)/step*step;
- //setFrequency(entry->frequencyA);
#ifdef LIMESDR
if(protocol==LIMESDR_PROTOCOL) {
setFrequency((entry->frequencyA+ddsOffset-hz)/step*step);
} else {
#endif
- long f=(entry->frequencyA+ddsOffset+hz)/step*step;
- if(mode==modeCWL) {
- f+=cw_keyer_sidetone_frequency;
- } else if(mode==modeCWU) {
- f-=cw_keyer_sidetone_frequency;
+ if(ctun) {
+ setFrequency((entry->frequencyA+hz)/step*step);
+ } else {
+ long f=(entry->frequencyA+ddsOffset+hz)/step*step;
+ if(mode==modeCWL) {
+ f+=cw_keyer_sidetone_frequency;
+ } else if(mode==modeCWU) {
+ f-=cw_keyer_sidetone_frequency;
+ }
+ setFrequency(f);
}
- setFrequency(f);
#ifdef LIMESDR
}
#endif
cairo_set_source_rgb (cr, 0, 0, 0);
cairo_paint (cr);
- cairo_select_font_face(cr, "Arial",
+ cairo_select_font_face(cr, "FreeMono",
CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);
switch(radio->protocol) {
case ORIGINAL_PROTOCOL:
case NEW_PROTOCOL:
- sprintf(text,"%s (%s %s) %s",
+ sprintf(text,"%s %s %s",
radio->name,
- radio->protocol==ORIGINAL_PROTOCOL?"old":"new",
version,
inet_ntoa(radio->info.network.address.sin_addr));
break;
#endif
}
cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
- cairo_set_font_size(cr, 12);
+ cairo_set_font_size(cr, 10);
cairo_move_to(cr, 5, 15);
cairo_show_text(cr, text);
} else {
step_rb=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(step_rb),step_labels[i]);
}
- gtk_widget_override_font(step_rb, pango_font_description_from_string("Arial 18"));
+ gtk_widget_override_font(step_rb, pango_font_description_from_string("FreeMono 18"));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (step_rb), steps[i]==step);
gtk_widget_show(step_rb);
gtk_grid_attach(GTK_GRID(grid),step_rb,i%5,i/5,1,1);
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_override_font(close_button, pango_font_description_from_string("FreeMono 18"));
gtk_widget_show_all(dialog);
g_signal_connect_swapped (dialog,
filterHigh=high;
}
+fprintf(stderr,"setFilter: filterLow=%d filterHigh=%d\n",filterLow,filterHigh);
+
double fl=filterLow+ddsOffset;
double fh=filterHigh+ddsOffset;
receiver=rx;
spectrumWIDTH=pixels;
- fprintf(stderr,"wdsp_init: %d\n",rx);
+ fprintf(stderr,"wdsp_init: rx=%d pixels=%d protocol=%d\n",rx,pixels,protocol);
if(protocol==ORIGINAL_PROTOCOL) {
micSampleRate=sample_rate;