lime_discovery();
#endif
+ status_text("Discovery");
if(devices==0) {
gdk_window_set_cursor(gtk_widget_get_window(top_window),gdk_cursor_new(GDK_ARROW));
//long long rxFrequency=ddsFrequency;
//rxFrequency=receiver[r]->dds_frequency;
int v=receiver[r]->id;
- rxFrequency=vfo[v].frequency-vfo[v].lo+vfo[v].rit;
-
+ rxFrequency=vfo[v].frequency-vfo[v].lo;
+ if(vfo[v].rit_enabled) {
+ rxFrequency+=vfo[v].rit;
+ }
if(vfo[v].mode==modeCWU) {
rxFrequency-=cw_keyer_sidetone_frequency;
} else if(vfo[v].mode==modeCWL) {
if(current_rx<receivers) {
output_buffer[C0]=0x04+(current_rx*2);
int v=receiver[current_rx]->id;
- long long rxFrequency=vfo[v].frequency+vfo[v].rit;
+ long long rxFrequency=vfo[v].frequency-vfo[v].lo;
+ if(vfo[v].rit_enabled) {
+ rxFrequency+=vfo[v].rit;
+ }
if(vfo[active_receiver->id].mode==modeCWU) {
rxFrequency-=(long long)cw_keyer_sidetone_frequency;
} else if(vfo[active_receiver->id].mode==modeCWL) {
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_s3),"Vox");
+ gtk_button_set_label(GTK_BUTTON(sim_s3),vfo[active_receiver->id].rit_enabled==0?"RIT On":"RIT Off");
+
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),"");
+ gtk_button_set_label(GTK_BUTTON(sim_s6),"RIT CL");
if(full_tune) {
set_button_text_color(sim_s1,"red");
}
vfo_update(NULL);
}
+static void rit_enable_cb(GtkWidget *widget, gpointer data) {
+ vfo[active_receiver->id].rit_enabled=vfo[active_receiver->id].rit_enabled==1?0:1;
+ gtk_button_set_label(GTK_BUTTON(widget),vfo[active_receiver->id].rit_enabled==0?"RIT On":"RIT Off");
+ vfo_update(NULL);
+}
+
static void rit_cb(GtkWidget *widget, gpointer data) {
int i=(int)data;
vfo[active_receiver->id].rit+=i*rit_increment;
rit_timer=g_timeout_add(200,rit_timer_cb,(void *)i);
}
+static void rit_clear_cb(GtkWidget *widget, gpointer data) {
+ vfo[active_receiver->id].rit=0;
+ vfo_update(NULL);
+}
+
static void freq_cb(GtkWidget *widget, gpointer data) {
start_vfo();
}
atob_cb(widget,data);
break;
case 2:
- vox_cb(widget,data);
+ //vox_cb(widget,data);
+ rit_enable_cb(widget,data);
break;
case 3:
break;
split_cb(widget,data);
break;
case 2:
+ rit_clear_cb(widget,NULL);
break;
case 3:
break;
int display_width=gtk_widget_get_allocated_width (tx->panadapter);
int display_height=gtk_widget_get_allocated_height (tx->panadapter);
+ int id=0;
+ if(split) {
+ id=1;
+ }
samples=tx->pixel_samples;
//hz_per_pixel=(double)tx->output_rate/(double)display_width;
hz_per_pixel=48000.0/(double)display_width;
long long divisor=20000;
long long half=24000LL; //(long long)(tx->output_rate/2);
long long frequency;
- if(split) {
- frequency=vfo[VFO_B].frequency+vfo[VFO_B].offset;
- } else {
- frequency=vfo[VFO_A].frequency+vfo[VFO_A].offset;
- }
+ frequency=vfo[id].frequency+vfo[VFO_B].offset;
divisor=5000LL;
-/*
- switch(tx->output_rate) {
- case 48000:
- divisor=5000L;
- break;
- case 96000:
- case 100000:
- divisor=10000L;
- break;
- case 192000:
- divisor=20000L;
- break;
- case 384000:
- divisor=25000L;
- break;
- case 768000:
- divisor=50000L;
- break;
- case 1048576:
- case 1536000:
- case 2097152:
- divisor=100000L;
- break;
- }
-*/
-//fprintf(stderr,"tx_panadapter_update: frequency=%lld divisor=%lld split=%d\n",frequency,divisor,split);
for(i=0;i<display_width;i++) {
f = frequency - half + (long) (hz_per_pixel * i);
if (f > 0) {
cairo_set_source_rgb (cr, 1, 0, 0);
cairo_set_line_width(cr, 1.0);
//fprintf(stderr,"cursor: x=%f\n",(double)(display_width/2.0)+(vfo[tx->id].offset/hz_per_pixel));
- cairo_move_to(cr,(double)(display_width/2.0)+(vfo[tx->id].offset/hz_per_pixel),0.0);
- cairo_line_to(cr,(double)(display_width/2.0)+(vfo[tx->id].offset/hz_per_pixel),(double)display_height);
+ cairo_move_to(cr,(double)(display_width/2.0)+(vfo[id].offset/hz_per_pixel),0.0);
+ cairo_line_to(cr,(double)(display_width/2.0)+(vfo[id].offset/hz_per_pixel),(double)display_height);
cairo_stroke(cr);
// signal
sprintf(name,"vfo.%d.ctun",i);
sprintf(value,"%d",vfo[i].ctun);
setProperty(name,value);
+ sprintf(name,"vfo.%d.rit_enabled",i);
+ sprintf(value,"%d",vfo[i].rit_enabled);
+ setProperty(name,value);
sprintf(name,"vfo.%d.rit",i);
sprintf(value,"%lld",vfo[i].rit);
setProperty(name,value);
vfo[i].filter=6;
vfo[i].lo=0;
vfo[i].offset=0;
+ vfo[i].rit_enabled=0;
vfo[i].rit=0;
vfo[i].ctun=0;
sprintf(name,"vfo.%d.rit",i);
value=getProperty(name);
if(value) vfo[i].rit=atoll(value);
+ sprintf(name,"vfo.%d.rit_enabled",i);
+ value=getProperty(name);
+ if(value) vfo[i].rit_enabled=atoi(value);
sprintf(name,"vfo.%d.lo",i);
value=getProperty(name);
if(value) vfo[i].lo=atoll(value);
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_enabled=vfo[VFO_A].rit_enabled;
vfo[VFO_B].rit=vfo[VFO_A].rit;
if(receivers==2) {
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_enabled=vfo[VFO_B].rit_enabled;
vfo[VFO_A].rit=vfo[VFO_B].rit;
receiver_vfo_changed(receiver[0]);
if(!split) {
int temp_filter;
int temp_lo;
int temp_offset;
+ int temp_rit_enabled;
int temp_rit;
temp_band=vfo[VFO_A].band;
temp_filter=vfo[VFO_A].filter;
temp_lo=vfo[VFO_A].lo;
temp_offset=vfo[VFO_A].offset;
+ temp_rit_enabled=vfo[VFO_A].rit_enabled;
temp_rit=vfo[VFO_A].rit;
vfo[VFO_A].band=vfo[VFO_B].band;
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_enabled=vfo[VFO_B].rit_enabled;
vfo[VFO_A].rit=vfo[VFO_B].rit;
vfo[VFO_B].band=temp_band;
vfo[VFO_B].filter=temp_filter;
vfo[VFO_B].lo=temp_lo;
vfo[VFO_B].offset=temp_offset;
+ vfo[VFO_B].rit_enabled=temp_rit_enabled;
vfo[VFO_B].rit=temp_rit;
receiver_vfo_changed(receiver[0]);
cairo_set_font_size(cr, 12);
- if(vfo[id].rit==0) {
+ if(vfo[id].rit_enabled==0) {
cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
} else {
cairo_set_source_rgb(cr, 1, 1, 0);
int ctun;
long long ctun_frequency;
+ int rit_enabled;
long long rit;
long long lo;
static double peak=0.0;
static int vox_timeout_cb(gpointer data) {
-fprintf(stderr,"vox timeout\n");
setVox(0);
g_idle_add(vfo_update,NULL);
return FALSE;
if(vox_enabled) {
-fprintf(stderr,"update_vox: id=%d peak=%f threshold=%f enabled=%d\n",tx->id,peak,vox_threshold,vox_enabled);
if(peak>vox_threshold) {
if(previous_vox) {
g_source_remove(vox_timeout);
static int level_update(void *data) {
char title[16];
-fprintf(stderr,"vox peak=%f threshold=%f\n",peak,vox_threshold);
- gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(level),peak);
-
- if(peak>vox_threshold) {
- // red indicator
- led_set_color(1.0,0.0,0.0); // red
- if(hold==0) {
- hold=1;
+ if(run_level) {
+ gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(level),peak);
+
+ if(peak>vox_threshold) {
+ // red indicator
+ led_set_color(1.0,0.0,0.0); // red
+ if(hold==0) {
+ hold=1;
+ } else {
+ g_source_remove(vox_timeout);
+ }
+ vox_timeout=g_timeout_add((int)vox_hang,vox_timeout_cb,NULL);
} else {
- g_source_remove(vox_timeout);
- }
- vox_timeout=g_timeout_add((int)vox_hang,vox_timeout_cb,NULL);
- } else {
- // green indicator
- if(hold==0) {
- led_set_color(0.0,1.0,0.0); // green
+ // green indicator
+ if(hold==0) {
+ led_set_color(0.0,1.0,0.0); // green
+ }
}
}
return 0;
return TRUE;
}
+static gboolean enable_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
+ vox_enabled=vox_enabled==1?0:1;
+ gtk_button_set_label(GTK_BUTTON(widget),vox_enabled==0?"VOX On":"VOX Off");
+ vfo_update(NULL);
+ return TRUE;
+}
+
static void start_level_thread() {
int rc;
run_level=1;
led=create_led(10,10);
gtk_grid_attach(GTK_GRID(grid),led,2,0,1,1);
+ GtkWidget *enable_b=gtk_button_new_with_label(vox_enabled==0?"VOX On":"VOX Off");
+ g_signal_connect (enable_b, "pressed", G_CALLBACK(enable_cb), NULL);
+ gtk_grid_attach(GTK_GRID(grid),enable_b,3,0,1,1);
+
GtkWidget *level_label=gtk_label_new("Mic Level:");
gtk_misc_set_alignment (GTK_MISC(level_label), 0, 0);
gtk_widget_show(level_label);