From: John Melton g0orx/n6lyt <john.d.melton@googlemail.com> Date: Fri, 15 Apr 2016 11:08:30 +0000 (+0000) Subject: fixed gpio configuration bugs, added attenuation slider, removed calculus file X-Git-Url: https://git.rkrishnan.org/pf/components/install.html?a=commitdiff_plain;h=61bba0b8b5e761c91ee1989aa3eae08f0985cb44;p=pihpsdr.git fixed gpio configuration bugs, added attenuation slider, removed calculus file --- diff --git a/band.c b/band.c index fc35dd2..7bc91c4 100644 --- a/band.c +++ b/band.c @@ -119,19 +119,19 @@ BANDSTACK bandstackGEN={3,1,bandstack_entriesGEN}; BANDSTACK bandstackWWV={5,1,bandstack_entriesWWV}; BAND bands[BANDS] = - {{"160",&bandstack160,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"80",&bandstack80,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"60",&bandstack60,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"40",&bandstack40,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"30",&bandstack30,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"20",&bandstack20,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"18",&bandstack18,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"15",&bandstack15,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"12",&bandstack12,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"10",&bandstack10,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"50",&bandstack50,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"GEN",&bandstackGEN,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,0}, - {"WWV",&bandstackWWV,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,0}}; + {{"160",&bandstack160,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {"80",&bandstack80,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {"60",&bandstack60,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {"40",&bandstack40,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {"30",&bandstack30,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {"20",&bandstack20,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {"18",&bandstack18,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {"15",&bandstack15,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {"12",&bandstack12,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {"10",&bandstack10,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {"50",&bandstack50,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {"GEN",&bandstackGEN,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,0}, + {"WWV",&bandstackWWV,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,0}}; #define NUM_BAND_LIMITS 22 diff --git a/calculus b/calculus deleted file mode 100644 index 7b51e4f..0000000 Binary files a/calculus and /dev/null differ diff --git a/gpio.c b/gpio.c index 06355af..07aae4c 100644 --- a/gpio.c +++ b/gpio.c @@ -41,7 +41,7 @@ int VFO_ENCODER_A_PIN=0; int VFO_ENCODER_B_PIN=1; #endif int ENABLE_AF_ENCODER=88; -int ENABLE_AF_PULLUP=87; +int ENABLE_AF_PULLUP=0; int AF_ENCODER_A=20; int AF_ENCODER_B=26; int AF_FUNCTION=25; @@ -815,14 +815,25 @@ static int rf_encoder_changed(void *data) { static int agc_encoder_changed(void *data) { int pos=*(int*)data; if(pos!=0) { - double gain=agc_gain; - gain+=(double)pos; - if(gain<0.0) { - gain=0.0; - } else if(gain>120.0) { - gain=120.0; + if(function) { + int att=attenuation; + att+=pos; + if(att<0) { + att=0; + } else if (att>31) { + att=31; + } + set_attenuation_value((double)att); + } else { + double gain=agc_gain; + gain+=(double)pos; + if(gain<0.0) { + gain=0.0; + } else if(gain>120.0) { + gain=120.0; + } + set_agc_gain(gain); } - set_agc_gain(gain); } return 0; } diff --git a/main.c b/main.c index 1d71259..e276d55 100644 --- a/main.c +++ b/main.c @@ -239,7 +239,7 @@ static void configure_gpio() { GtkWidget *dialog=gtk_dialog_new_with_buttons("Configure GPIO",GTK_WINDOW(splash_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog)); GtkWidget *grid=gtk_grid_new(); - gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE); + //gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE); gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE); @@ -477,27 +477,24 @@ static void configure_gpio() { //gtk_widget_override_font(close_button, pango_font_description_from_string("Arial 20")); gtk_widget_show_all(dialog); -/* - g_signal_connect_swapped (dialog, - "response", - G_CALLBACK (gtk_widget_destroy), - dialog); -*/ - int result=gtk_dialog_run(GTK_DIALOG(dialog)); ENABLE_VFO_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_vfo_encoder))?1:0; VFO_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(vfo_a)); VFO_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(vfo_b)); + ENABLE_VFO_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_vfo_pullup))?1:0; ENABLE_AF_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_af_encoder))?1:0; AF_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(af_a)); AF_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(af_b)); + ENABLE_AF_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_af_pullup))?1:0; ENABLE_RF_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_rf_encoder))?1:0; RF_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(rf_a)); RF_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(rf_b)); + ENABLE_RF_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_rf_pullup))?1:0; ENABLE_AGC_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_agc_encoder))?1:0; AGC_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(agc_a)); AGC_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(agc_b)); + ENABLE_AGC_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_agc_pullup))?1:0; ENABLE_BAND_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_band))?1:0; BAND_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(band)); ENABLE_MODE_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_mode))?1:0; @@ -860,6 +857,10 @@ fprintf(stderr,"meter_height=%d\n",METER_HEIGHT); if(!display_toolbar) { height+=TOOLBAR_HEIGHT; } + } else { + if(!display_sliders) { + height+=SLIDERS_HEIGHT/2; + } } fprintf(stderr,"panadapter_height=%d\n",height); panadapter = panadapter_init(display_width,height); @@ -877,7 +878,11 @@ fprintf(stderr,"panadapter_height=%d\n",height); height+=PANADAPTER_HEIGHT; } if(!display_sliders) { - height+=SLIDERS_HEIGHT; + if(display_panadapter) { + height+=SLIDERS_HEIGHT/2; + } else { + height+=SLIDERS_HEIGHT; + } } if(!display_toolbar) { height+=TOOLBAR_HEIGHT; diff --git a/menu.c b/menu.c index fcc96f8..6cdfec6 100644 --- a/menu.c +++ b/menu.c @@ -159,6 +159,24 @@ static void pa_cb(GtkWidget *widget, gpointer data) { } } +static void rx_dither_cb(GtkWidget *widget, gpointer data) { + rx_dither=rx_dither==1?0:1; + if(protocol==NEW_PROTOCOL) { + } +} + +static void rx_random_cb(GtkWidget *widget, gpointer data) { + rx_random=rx_random==1?0:1; + if(protocol==NEW_PROTOCOL) { + } +} + +static void rx_preamp_cb(GtkWidget *widget, gpointer data) { + rx_preamp=rx_preamp==1?0:1; + if(protocol==NEW_PROTOCOL) { + } +} + static void tx_out_of_band_cb(GtkWidget *widget, gpointer data) { tx_out_of_band=tx_out_of_band==1?0:1; @@ -206,6 +224,16 @@ static void oc_tx_cb(GtkWidget *widget, gpointer data) { } } +static void oc_tune_cb(GtkWidget *widget, gpointer data) { + int oc=((int)data)&0xF; + int mask=0x01<<oc; + if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) { + OCtune|=mask; + } else { + OCtune&=~mask; + } +} + static void detector_mode_cb(GtkWidget *widget, gpointer data) { display_detector_mode=(int)data; SetDisplayDetectorMode(CHANNEL_RX0, 0, display_detector_mode); @@ -247,6 +275,126 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, GtkWidget *notebook=gtk_notebook_new(); + GtkWidget *general_label=gtk_label_new("General"); + GtkWidget *general_grid=gtk_grid_new(); + gtk_grid_set_row_homogeneous(GTK_GRID(general_grid),TRUE); + gtk_grid_set_column_homogeneous(GTK_GRID(general_grid),TRUE); + + + GtkWidget *vfo_divisor_label=gtk_label_new("VFO Encoder 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(general_grid),vfo_divisor_label,0,0,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(general_grid),vfo_divisor,1,0,1,1); + g_signal_connect(vfo_divisor,"value_changed",G_CALLBACK(vfo_divisor_value_changed_cb),NULL); + + + 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_widget_show(rx_dither_b); + gtk_grid_attach(GTK_GRID(general_grid),rx_dither_b,0,1,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_widget_show(rx_random_b); + gtk_grid_attach(GTK_GRID(general_grid),rx_random_b,0,2,1,1); + g_signal_connect(rx_random_b,"toggled",G_CALLBACK(rx_random_cb),NULL); + +/* + GtkWidget *rx_preamp_b=gtk_check_button_new_with_label("Preamp"); + //gtk_widget_override_font(rx_preamp_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx_preamp_b), rx_preamp); + gtk_widget_show(rx_preamp_b); + gtk_grid_attach(GTK_GRID(general_grid),rx_preamp_b,0,3,1,1); + g_signal_connect(rx_preamp_b,"toggled",G_CALLBACK(rx_preamp_cb),NULL); +*/ + + GtkWidget *linein_b=gtk_check_button_new_with_label("Mic Line In"); + //gtk_widget_override_font(linein_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linein_b), mic_linein); + gtk_widget_show(linein_b); + gtk_grid_attach(GTK_GRID(general_grid),linein_b,1,1,1,1); + g_signal_connect(linein_b,"toggled",G_CALLBACK(linein_cb),NULL); + + GtkWidget *micboost_b=gtk_check_button_new_with_label("Mic Boost"); + //gtk_widget_override_font(micboost_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (micboost_b), mic_boost); + gtk_widget_show(micboost_b); + gtk_grid_attach(GTK_GRID(general_grid),micboost_b,1,2,1,1); + g_signal_connect(micboost_b,"toggled",G_CALLBACK(micboost_cb),NULL); + + + if((protocol==NEW_PROTOCOL && device==NEW_DEVICE_ORION) || (protocol==ORIGINAL_PROTOCOL && device==DEVICE_ORION)) { + + GtkWidget *ptt_ring_b=gtk_radio_button_new_with_label(NULL,"PTT On Ring, Mic and Bias on Tip"); + //gtk_widget_override_font(ptt_ring_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_ring_b), mic_ptt_tip_bias_ring==0); + gtk_widget_show(ptt_ring_b); + gtk_grid_attach(GTK_GRID(general_grid),ptt_ring_b,1,3,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_widget_override_font(ptt_tip_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_tip_b), mic_ptt_tip_bias_ring==1); + gtk_widget_show(ptt_tip_b); + gtk_grid_attach(GTK_GRID(general_grid),ptt_tip_b,1,4,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_widget_override_font(ptt_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_b), mic_ptt_enabled); + gtk_widget_show(ptt_b); + gtk_grid_attach(GTK_GRID(general_grid),ptt_b,1,5,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_widget_override_font(bias_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bias_b), mic_bias_enabled); + gtk_widget_show(bias_b); + gtk_grid_attach(GTK_GRID(general_grid),bias_b,1,6,1,1); + g_signal_connect(bias_b,"toggled",G_CALLBACK(bias_cb),NULL); + } + + + GtkWidget *alex_b=gtk_check_button_new_with_label("ALEX"); + //gtk_widget_override_font(alex_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alex_b), filter_board==ALEX); + gtk_widget_show(alex_b); + gtk_grid_attach(GTK_GRID(general_grid),alex_b,2,1,1,1); + + GtkWidget *apollo_b=gtk_check_button_new_with_label("APOLLO"); + //gtk_widget_override_font(apollo_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (apollo_b), filter_board==APOLLO); + gtk_widget_show(apollo_b); + gtk_grid_attach(GTK_GRID(general_grid),apollo_b,2,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); + + 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(apollo_tuner_b); + gtk_grid_attach(GTK_GRID(general_grid),apollo_tuner_b,2,3,1,1); + g_signal_connect(apollo_tuner_b,"toggled",G_CALLBACK(apollo_tuner_cb),NULL); + + GtkWidget *pa_b=gtk_check_button_new_with_label("PA"); + //gtk_widget_override_font(pa_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pa_b), pa); + gtk_widget_show(pa_b); + gtk_grid_attach(GTK_GRID(general_grid),pa_b,2,4,1,1); + g_signal_connect(pa_b,"toggled",G_CALLBACK(pa_cb),NULL); + + id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),general_grid,general_label); + GtkWidget *display_label=gtk_label_new("Display"); GtkWidget *display_grid=gtk_grid_new(); @@ -408,7 +556,7 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, - GtkWidget *tx_label=gtk_label_new("TX"); + GtkWidget *tx_label=gtk_label_new("PA Gain"); GtkWidget *tx_grid=gtk_grid_new(); gtk_grid_set_row_homogeneous(GTK_GRID(tx_grid),TRUE); gtk_grid_set_column_spacing (GTK_GRID(tx_grid),10); @@ -493,112 +641,6 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),cw_grid,cw_label); - - GtkWidget *encoder_label=gtk_label_new("VFO Encoder"); - GtkWidget *encoder_grid=gtk_grid_new(); - gtk_grid_set_row_homogeneous(GTK_GRID(encoder_grid),TRUE); - - 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(encoder_grid),vfo_divisor_label,0,0,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(encoder_grid),vfo_divisor,1,0,1,1); - g_signal_connect(vfo_divisor,"value_changed",G_CALLBACK(vfo_divisor_value_changed_cb),NULL); - - id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),encoder_grid,encoder_label); - - GtkWidget *microphone_label=gtk_label_new("Microphone"); - GtkWidget *microphone_grid=gtk_grid_new(); - gtk_grid_set_row_homogeneous(GTK_GRID(microphone_grid),TRUE); - - GtkWidget *linein_b=gtk_check_button_new_with_label("Line In"); - //gtk_widget_override_font(linein_b, pango_font_description_from_string("Arial 18")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linein_b), mic_linein); - gtk_widget_show(linein_b); - gtk_grid_attach(GTK_GRID(microphone_grid),linein_b,1,1,1,1); - g_signal_connect(linein_b,"toggled",G_CALLBACK(linein_cb),NULL); - - GtkWidget *micboost_b=gtk_check_button_new_with_label("Boost"); - //gtk_widget_override_font(micboost_b, pango_font_description_from_string("Arial 18")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (micboost_b), mic_boost); - gtk_widget_show(micboost_b); - gtk_grid_attach(GTK_GRID(microphone_grid),micboost_b,1,2,1,1); - g_signal_connect(micboost_b,"toggled",G_CALLBACK(micboost_cb),NULL); - - - if((protocol==NEW_PROTOCOL && device==NEW_DEVICE_ORION) || (protocol==ORIGINAL_PROTOCOL && device==DEVICE_ORION)) { - - GtkWidget *ptt_ring_b=gtk_radio_button_new_with_label(NULL,"PTT On Ring, Mic and Bias on Tip"); - //gtk_widget_override_font(ptt_ring_b, pango_font_description_from_string("Arial 18")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_ring_b), mic_ptt_tip_bias_ring==0); - gtk_widget_show(ptt_ring_b); - gtk_grid_attach(GTK_GRID(microphone_grid),ptt_ring_b,1,3,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_widget_override_font(ptt_tip_b, pango_font_description_from_string("Arial 18")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_tip_b), mic_ptt_tip_bias_ring==1); - gtk_widget_show(ptt_tip_b); - gtk_grid_attach(GTK_GRID(microphone_grid),ptt_tip_b,1,4,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_widget_override_font(ptt_b, pango_font_description_from_string("Arial 18")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_b), mic_ptt_enabled); - gtk_widget_show(ptt_b); - gtk_grid_attach(GTK_GRID(microphone_grid),ptt_b,1,5,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_widget_override_font(bias_b, pango_font_description_from_string("Arial 18")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bias_b), mic_bias_enabled); - gtk_widget_show(bias_b); - gtk_grid_attach(GTK_GRID(microphone_grid),bias_b,1,6,1,1); - g_signal_connect(bias_b,"toggled",G_CALLBACK(bias_cb),NULL); - } - - id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),microphone_grid,microphone_label); - - GtkWidget *filters_label=gtk_label_new("Filters/PA"); - GtkWidget *filters_grid=gtk_grid_new(); - gtk_grid_set_row_homogeneous(GTK_GRID(filters_grid),TRUE); - - GtkWidget *alex_b=gtk_check_button_new_with_label("ALEX"); - //gtk_widget_override_font(alex_b, pango_font_description_from_string("Arial 18")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alex_b), filter_board==ALEX); - gtk_widget_show(alex_b); - gtk_grid_attach(GTK_GRID(filters_grid),alex_b,2,1,1,1); - - GtkWidget *apollo_b=gtk_check_button_new_with_label("APOLLO"); - //gtk_widget_override_font(apollo_b, pango_font_description_from_string("Arial 18")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (apollo_b), filter_board==APOLLO); - gtk_widget_show(apollo_b); - gtk_grid_attach(GTK_GRID(filters_grid),apollo_b,2,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); - - 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(apollo_tuner_b); - gtk_grid_attach(GTK_GRID(filters_grid),apollo_tuner_b,2,3,1,1); - g_signal_connect(apollo_tuner_b,"toggled",G_CALLBACK(apollo_tuner_cb),NULL); - - GtkWidget *pa_b=gtk_check_button_new_with_label("PA"); - //gtk_widget_override_font(pa_b, pango_font_description_from_string("Arial 18")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pa_b), pa); - gtk_widget_show(pa_b); - gtk_grid_attach(GTK_GRID(filters_grid),pa_b,2,4,1,1); - g_signal_connect(pa_b,"toggled",G_CALLBACK(pa_cb),NULL); - - id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),filters_grid,filters_label); - GtkWidget *oc_label=gtk_label_new("OC"); GtkWidget *oc_grid=gtk_grid_new(); gtk_grid_set_row_homogeneous(GTK_GRID(oc_grid),TRUE); @@ -619,6 +661,11 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, gtk_widget_show(tx_title); gtk_grid_attach(GTK_GRID(oc_grid),tx_title,11,0,1,1); + GtkWidget *tune_title=gtk_label_new("Tune (ORed with TX)"); + //gtk_widget_override_font(tune_title, pango_font_description_from_string("Arial 18")); + gtk_widget_show(tune_title); + gtk_grid_attach(GTK_GRID(oc_grid),tune_title,18,0,2,1); + for(i=1;i<8;i++) { char oc_id[8]; sprintf(oc_id,"%d",i); @@ -630,6 +677,12 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, //gtk_widget_override_font(oc_tx_title, pango_font_description_from_string("Arial 18")); gtk_widget_show(oc_tx_title); gtk_grid_attach(GTK_GRID(oc_grid),oc_tx_title,i+7,1,1,1); +/* + GtkWidget *oc_tune_title=gtk_label_new(oc_id); + //gtk_widget_override_font(oc_tune_title, pango_font_description_from_string("Arial 18")); + gtk_widget_show(oc_tune_title); + gtk_grid_attach(GTK_GRID(oc_grid),oc_tune_title,i+14,1,1,1); +*/ } for(i=0;i<HAM_BANDS;i++) { @@ -656,10 +709,38 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, gtk_widget_show(oc_tx_b); gtk_grid_attach(GTK_GRID(oc_grid),oc_tx_b,j+7,i+2,1,1); g_signal_connect(oc_tx_b,"toggled",G_CALLBACK(oc_tx_cb),(gpointer)(j+(i<<4))); + +/* + GtkWidget *oc_tune_b=gtk_check_button_new(); + //gtk_widget_override_font(oc_tune_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (oc_tune_b), (band->OCtune&mask)==mask); + gtk_widget_show(oc_tune_b); + gtk_grid_attach(GTK_GRID(oc_grid),oc_tune_b,j+14,i+2,1,1); + g_signal_connect(oc_tune_b,"toggled",G_CALLBACK(oc_tune_cb),(gpointer)(j+(i<<4))); +*/ } } + int mask; + for(j=1;j<8;j++) { + char oc_id[8]; + sprintf(oc_id,"%d",j); + GtkWidget *oc_tune_title=gtk_label_new(oc_id); + //gtk_widget_override_font(oc_tune_title, pango_font_description_from_string("Arial 18")); + gtk_widget_show(oc_tune_title); + gtk_grid_attach(GTK_GRID(oc_grid),oc_tune_title,18,j+2,1,1); + + mask=0x01<<j; + GtkWidget *oc_tune_b=gtk_check_button_new(); + //gtk_widget_override_font(oc_tune_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (oc_tune_b), (OCtune&mask)==mask); + gtk_widget_show(oc_tune_b); + gtk_grid_attach(GTK_GRID(oc_grid),oc_tune_b,19,j+2,1,1); + g_signal_connect(oc_tune_b,"toggled",G_CALLBACK(oc_tune_cb),(gpointer)j); + } + + id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),oc_grid,oc_label); diff --git a/old_protocol.c b/old_protocol.c index ed4b35f..7994a1e 100644 --- a/old_protocol.c +++ b/old_protocol.c @@ -44,6 +44,15 @@ #include "radio.h" #include "toolbar.h" +#define SYNC0 0 +#define SYNC1 1 +#define SYNC2 2 +#define C0 3 +#define C1 4 +#define C2 5 +#define C3 6 +#define C4 7 + #define PI 3.1415926535897932F #define DATA_PORT 1024 @@ -84,6 +93,8 @@ #define LT2208_RANDOM_OFF 0x00 #define LT2208_RANDOM_ON 0x10 +static DISCOVERED *d; + static int buffer_size=BUFFER_SIZE; static int receiver; @@ -101,7 +112,6 @@ static int data_addr_length; static int output_buffer_size; static unsigned char control_in[5]={0x00,0x00,0x00,0x00,0x00}; -static unsigned char control_out[5]={0x00,0x00,0x00,0x00,0x00}; static double tuning_phase; static float phase=0.0f; @@ -175,39 +185,6 @@ static float sineWave(double* buf, int samples, float phase, float freq) { return phase; } -static void setSpeed(int s) { - int speed=SPEED_48K; - output_buffer_size=OUTPUT_BUFFER_SIZE; - switch(s) { - case 48000: - speed=SPEED_48K; - output_buffer_size=OUTPUT_BUFFER_SIZE; - break; - case 96000: - speed=SPEED_96K; - output_buffer_size=OUTPUT_BUFFER_SIZE/2; - break; - case 192000: - speed=SPEED_192K; - output_buffer_size=OUTPUT_BUFFER_SIZE/4; - break; - case 384000: - speed=SPEED_384K; - output_buffer_size=OUTPUT_BUFFER_SIZE/8; - break; - default: - fprintf(stderr,"Invalid sample rate: %d. Defaulting to 48K.\n",s); - break; - } - - //fprintf(stderr,"setSpeed sample_rate=%d speed=%d\n",s,speed); - - control_out[1]=control_out[1]&0xFC; - control_out[1]=control_out[1]|speed; - -} - - void old_protocol_stop() { metis_start_stop(0); running=FALSE; @@ -218,26 +195,30 @@ void old_protocol_init(int rx,int pixels) { fprintf(stderr,"old_protocol_init\n"); + d=&discovered[selected_device]; + //int result=sem_init(&frequency_changed_sem, 0, 1); receiver=rx; display_width=pixels; - - // setup defaults - control_out[0] = MOX_DISABLED; - control_out[1] = CONFIG_BOTH - | MERCURY_122_88MHZ_SOURCE - | MERCURY_10MHZ_SOURCE - | speed - | MIC_SOURCE_PENELOPE; - control_out[2] = MODE_OTHERS; - control_out[3] = ALEX_ATTENUATION_0DB - | LT2208_GAIN_OFF - | LT2208_DITHER_ON - | LT2208_RANDOM_ON; - control_out[4] = 0; - - setSpeed(sample_rate); + + switch(sample_rate) { + case 48000: + output_buffer_size=OUTPUT_BUFFER_SIZE; + break; + case 96000: + output_buffer_size=OUTPUT_BUFFER_SIZE/2; + break; + case 192000: + output_buffer_size=OUTPUT_BUFFER_SIZE/4; + break; + case 384000: + output_buffer_size=OUTPUT_BUFFER_SIZE/8; + break; + default: + fprintf(stderr,"Invalid sample rate: %d. Defaulting to 48K.\n",sample_rate); + break; + } start_receive_thread(); @@ -245,10 +226,18 @@ void old_protocol_init(int rx,int pixels) { for(i=8;i<OZY_BUFFER_SIZE;i++) { output_buffer[i]=0; } + + + // send commands twice + do { + ozy_send_buffer(); + } while (command!=0); + do { ozy_send_buffer(); } while (command!=0); + // start the data flowing metis_start_stop(1); } @@ -260,8 +249,6 @@ static void start_receive_thread() { fprintf(stderr,"old_protocol starting receive thread\n"); - DISCOVERED* d=&discovered[selected_device]; - data_socket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP); if(data_socket<0) { perror("old_protocol: create socket failed for data_socket\n"); @@ -476,7 +463,7 @@ static void process_ozy_input_buffer(char *buffer) { fprintf(stderr,"fexchange0 (CHANNEL_TX) returned error: %d\n", error); } Spectrum0(1, CHANNEL_TX, 0, 0, micoutputbuffer); - if(penelope) { + if(d->device!=DEVICE_METIS || atlas_penelope) { if(tune) { gain=65535.0*255.0/(double)tune_drive; } else { @@ -551,109 +538,80 @@ static void process_bandscope_buffer(char *buffer) { void ozy_send_buffer() { - output_buffer[0]=SYNC; - output_buffer[1]=SYNC; - output_buffer[2]=SYNC; + + output_buffer[SYNC0]=SYNC; + output_buffer[SYNC1]=SYNC; + output_buffer[SYNC2]=SYNC; switch(command) { -#ifdef EXCLUDE case 0: - //sem_wait(&frequency_changed_sem); - if(frequencyChanged) { - // send rx frequency - output_buffer[3]=control_out[0]|0x04; - output_buffer[4]=ddsFrequency>>24; - output_buffer[5]=ddsFrequency>>16; - output_buffer[6]=ddsFrequency>>8; - output_buffer[7]=ddsFrequency; - //freqcommand++; - } else { - output_buffer[3]=control_out[0]; - output_buffer[4]=control_out[1]; - output_buffer[5]=control_out[2]; - output_buffer[6]=control_out[3]; - output_buffer[7]=control_out[4]; + { + BAND *band=band_get_current_band(); + + output_buffer[C0]=0x00; + + output_buffer[C1]=0x00; + switch(sample_rate) { + case 48000: + output_buffer[C1]|=SPEED_48K; + break; + case 96000: + output_buffer[C1]|=SPEED_96K; + break; + case 192000: + output_buffer[C1]|=SPEED_192K; + break; + case 384000: + output_buffer[C1]|=SPEED_384K; + break; } - //sem_post(&frequency_changed_sem); - break; - case 1: - // send tx frequency - output_buffer[3]=control_out[0]|0x02; -/* - if(bSplit) { - if(frequencyBChanged) { - output_buffer[3]=control_out[0]|0x02; // Penelope - output_buffer[4]=ddsBFrequency>>24; - output_buffer[5]=ddsBFrequency>>16; - output_buffer[6]=ddsBFrequency>>8; - output_buffer[7]=ddsBFrequency; - } else { - output_buffer[3]=control_out[0]; - output_buffer[4]=control_out[1]; - output_buffer[5]=control_out[2]; - output_buffer[6]=control_out[3]; - output_buffer[7]=control_out[4]; + if(d->device==DEVICE_METIS) { + } + + output_buffer[C2]=0x00; + if(classE) { + output_buffer[C2]|=0x01; + } + if(isTransmitting()) { + output_buffer[C2]|=band->OCtx; + if(tune) { + output_buffer[C2]|=OCtune; } } else { -*/ - //sem_wait(&frequency_changed_sem); - if(frequencyChanged) { - output_buffer[4]=ddsFrequency>>24; - output_buffer[5]=ddsFrequency>>16; - output_buffer[6]=ddsFrequency>>8; - output_buffer[7]=ddsFrequency; - } else { - output_buffer[3]=control_out[0]; - output_buffer[4]=control_out[1]; - output_buffer[5]=control_out[2]; - output_buffer[6]=control_out[3]; - output_buffer[7]=control_out[4]; - } - frequencyChanged=0; - //sem_post(&frequency_changed_sem); -/* + output_buffer[C2]|=band->OCrx; + } + +// TODO - add Alex Attenuation and Alex Antenna + output_buffer[C3]=0x00; + if(rx_random) { + output_buffer[C3]|=LT2208_RANDOM_ON; + } + if(rx_dither) { + output_buffer[C3]|=LT2208_DITHER_ON; } -*/ /* - frequencyBChanged=0; + if(rx_preamp) { + output_buffer[C3]|=LT2208_GAIN_ON; + } */ - break; - case 2: - output_buffer[3]=control_out[0]; - output_buffer[4]=control_out[1]; - output_buffer[5]=control_out[2]; - output_buffer[6]=control_out[3]; - output_buffer[7]=control_out[4]; - break; -#endif - case 0: - { - BAND *band=band_get_current_band(); - output_buffer[3]=control_out[0]; - output_buffer[4]=control_out[1]; - if(isTransmitting()) { - output_buffer[5]=control_out[2]|band->OCtx; - } else { - output_buffer[5]=control_out[2]|band->OCrx; - } - output_buffer[6]=control_out[3]; - output_buffer[7]=control_out[4]; +// TODO - add Alex TX relay, duplex, receivers Mercury board frequency + output_buffer[C4]=0x00; } break; case 1: - output_buffer[3]=control_out[0]|0x04; - output_buffer[4]=ddsFrequency>>24; - output_buffer[5]=ddsFrequency>>16; - output_buffer[6]=ddsFrequency>>8; - output_buffer[7]=ddsFrequency; + 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: - output_buffer[3]=control_out[0]|0x02; - output_buffer[4]=ddsFrequency>>24; - output_buffer[5]=ddsFrequency>>16; - output_buffer[6]=ddsFrequency>>8; - output_buffer[7]=ddsFrequency; + output_buffer[C0]=0x02; + output_buffer[C1]=ddsFrequency>>24; + output_buffer[C2]=ddsFrequency>>16; + output_buffer[C3]=ddsFrequency>>8; + output_buffer[C4]=ddsFrequency; break; case 3: { @@ -664,95 +622,105 @@ void ozy_send_buffer() { BAND *band=band_get_current_band(); d=(d/100.0F)*(float)band->pa_calibration; - output_buffer[3]=0x12; - output_buffer[4]=(int)d; - output_buffer[5]=control_out[2]; + output_buffer[C0]=0x12; + output_buffer[C1]=(int)d; + output_buffer[C2]=0x00; if(mic_boost) { - output_buffer[5]|=0x01; + output_buffer[C2]|=0x01; } if(mic_linein) { - output_buffer[5]|=0x02; + output_buffer[C2]|=0x02; } if(filter_board==APOLLO) { - output_buffer[5]|=0x2C; // board, filter ,tuner + output_buffer[C2]|=0x2C; // board, filter ,tuner } if((filter_board==APOLLO) && tune && apollo_tuner) { - output_buffer[5]|=0x10; + output_buffer[C2]|=0x10; + } + output_buffer[C3]=0x00; + if(band_get_current()==band6) { + output_buffer[C3]=output_buffer[6]|0x40; // Alex 6M low noise amplifier } - output_buffer[6]=control_out[3]; - output_buffer[7]=control_out[4]; + output_buffer[C4]=0x00; } break; case 4: - // need to add orion tip/ring and bias configuration - output_buffer[3]=0x14; - output_buffer[4]=0x00; + output_buffer[C0]=0x14; + output_buffer[C1]=0x00; if(mic_ptt_enabled==0) { - output_buffer[4]|=0x40; + output_buffer[C1]|=0x40; } if(mic_bias_enabled) { - output_buffer[4]|=0x20; + output_buffer[C1]|=0x20; } if(mic_ptt_tip_bias_ring) { - output_buffer[4]|=0x10; + output_buffer[C1]|=0x10; + } + output_buffer[C2]=0x00; + output_buffer[C3]=0x00; + + if(d->device==DEVICE_HERMES || d->device==DEVICE_ANGELIA || d->device==DEVICE_ORION) { + output_buffer[C4]=0x20|attenuation; + } else { + output_buffer[C4]=0x00; } - output_buffer[5]=0x00; - output_buffer[6]=0x00; - output_buffer[7]=0x00; break; case 5: - // need to add rx attenuation and cw configuration - output_buffer[3]=0x16; - output_buffer[4]=0x00; - output_buffer[5]=0x00; + // need to add adc 2 and 3 attenuation + output_buffer[C0]=0x16; + output_buffer[C1]=0x00; + output_buffer[C2]=0x00; if(cw_keys_reversed!=0) { - output_buffer[5]|=0x40; + output_buffer[C2]|=0x40; } - output_buffer[6]=cw_keyer_speed | (cw_keyer_mode<<6); - output_buffer[7]=cw_keyer_weight | (cw_keyer_spacing<<7); + output_buffer[C3]=cw_keyer_speed | (cw_keyer_mode<<6); + output_buffer[C4]=cw_keyer_weight | (cw_keyer_spacing<<7); break; case 6: // need to add tx attenuation and rx ADC selection - output_buffer[3]=0x1C; - output_buffer[4]=0x00; - output_buffer[5]=0x00; - output_buffer[6]=0x00; - output_buffer[7]=0x00; + output_buffer[C0]=0x1C; + output_buffer[C1]=0x00; + output_buffer[C2]=0x00; + output_buffer[C3]=0x00; + output_buffer[C4]=0x00; break; case 7: // need to add cw configuration - output_buffer[3]=0x1E; + output_buffer[C0]=0x1E; if(cw_keyer_internal==1) { if(isTransmitting() || (mode!=modeCWU && mode!=modeCWL)) { - output_buffer[4]=0x00; + output_buffer[C1]=0x00; } else { - output_buffer[4]=0x01; + output_buffer[C1]=0x01; } } else { - output_buffer[4]=0x00; + output_buffer[C1]=0x00; } - output_buffer[5]=cw_keyer_sidetone_volume; - output_buffer[6]=cw_keyer_ptt_delay; - output_buffer[7]=0x00; + output_buffer[C2]=cw_keyer_sidetone_volume; + output_buffer[C3]=cw_keyer_ptt_delay; + output_buffer[C4]=0x00; break; case 8: // need to add cw configuration - output_buffer[3]=0x20; - output_buffer[4]=cw_keyer_hang_time; - output_buffer[5]=cw_keyer_hang_time>>8; - output_buffer[6]=cw_keyer_sidetone_frequency; - output_buffer[7]=cw_keyer_sidetone_frequency>>8; + output_buffer[C0]=0x20; + output_buffer[C1]=cw_keyer_hang_time; + output_buffer[C2]=cw_keyer_hang_time>>8; + output_buffer[C3]=cw_keyer_sidetone_frequency; + output_buffer[C4]=cw_keyer_sidetone_frequency>>8; break; } command++; - //if(command>=14) { - if(command>=8) { - command=0; - } + if(command>8) { + command=0; + } + // set mox - output_buffer[3]|=isTransmitting(); + output_buffer[C0]|=isTransmitting(); metis_write(0x02,output_buffer,OZY_BUFFER_SIZE); + + //fprintf(stderr,"C0=%02X C1=%02X C2=%02X C3=%02X C4=%02X\n", + // output_buffer[C0],output_buffer[C1],output_buffer[C2],output_buffer[C3],output_buffer[C4]); } static int metis_write(unsigned char ep,char* buffer,int length) { diff --git a/panadapter.c b/panadapter.c index 5741463..f5d4f26 100644 --- a/panadapter.c +++ b/panadapter.c @@ -284,15 +284,15 @@ void panadapter_update(float *data,int tx) { // signal double s1,s2; - samples[0]=panadapter_low-20; - samples[display_width-1]=panadapter_low-20; - s1=samples[0]-(get_attenuation()-20.0); + samples[0]=-200.0; + samples[display_width-1]=-200.0; + s1=(double)samples[0]+(double)get_attenuation()-20.0; s1 = floor((panadapter_high - s1) * (double) panadapter_height / (panadapter_high - panadapter_low)); cairo_move_to(cr, 0.0, s1); for(i=1;i<display_width;i++) { - s2=samples[i]-(get_attenuation()-20.0); + s2=(double)samples[i]+(double)get_attenuation()-20.0; s2 = floor((panadapter_high - s2) * (double) panadapter_height / (panadapter_high - panadapter_low)); diff --git a/pihpsdr b/pihpsdr index 86ce2f3..6fd6160 100755 Binary files a/pihpsdr and b/pihpsdr differ diff --git a/radio.c b/radio.c index 1783a74..34cf7c0 100644 --- a/radio.c +++ b/radio.c @@ -39,7 +39,14 @@ char property_path[128]; sem_t property_sem; -int penelope=0; +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 sample_rate=48000; @@ -70,6 +77,10 @@ int display_toolbar=1; double volume=0.2; double mic_gain=1.5; +int rx_dither=0; +int rx_random=0; +int rx_preamp=0; + int mic_linein=0; int mic_boost=0; int mic_bias_enabled=0; @@ -102,7 +113,7 @@ int byte_swap=0; int lt2208Dither = 0; int lt2208Random = 0; -int attenuation = 20; // 20dB +int attenuation = 0; // 0dB unsigned long alex_rx_antenna=0; unsigned long alex_tx_antenna=0; unsigned long alex_attenuation=0; @@ -146,6 +157,8 @@ int tune; long long ddsFrequency=14250000; +unsigned char OCtune=0; + void init_radio() { int rc; rc=sem_init(&property_sem, 0, 0); @@ -270,8 +283,8 @@ void radioRestoreState() { sem_wait(&property_sem); loadProperties(property_path); - value=getProperty("penelope"); - if(value) penelope=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("sample_rate"); @@ -366,6 +379,8 @@ void radioRestoreState() { 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); bandRestoreState(); sem_post(&property_sem); @@ -375,6 +390,8 @@ void radioSaveState() { char value[80]; sem_wait(&property_sem); + sprintf(value,"%d",atlas_penelope); + setProperty("atlas_penelope",value); sprintf(value,"%d",sample_rate); setProperty("sample_rate",value); sprintf(value,"%d",filter_board); @@ -467,6 +484,8 @@ void radioSaveState() { setProperty("cw_breakin",value); sprintf(value,"%d",vfo_encoder_divisor); setProperty("vfo_encoder_divisor",value); + sprintf(value,"%d",OCtune); + setProperty("OCtune",value); bandSaveState(); diff --git a/radio.h b/radio.h index 7cd0fb2..92f4c5f 100644 --- a/radio.h +++ b/radio.h @@ -55,7 +55,18 @@ extern char property_path[]; #define KEYER_MODE_A 1 #define KEYER_MODE_B 2 -extern int penelope; +extern int rx_dither; +extern int rx_random; +extern int rx_preamp; + +extern int atlas_penelope; +extern int atlas_clock_source_10mhz; +extern int atlas_clock_source_128mhz; +extern int atlas_config; +extern int atlas_mic_source; + +extern int classE; + extern int tx_out_of_band; extern int sample_rate; @@ -160,6 +171,8 @@ extern int supply_volts; extern long long ddsFrequency; +extern unsigned char OCtune; + extern void init_radio(); extern void setSampleRate(int rate); extern int getSampleRate(); diff --git a/release/pihpsdr.tar b/release/pihpsdr.tar index ef7fa36..34226fa 100644 Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ diff --git a/release/pihpsdr/calculus b/release/pihpsdr/calculus deleted file mode 100644 index 7b51e4f..0000000 Binary files a/release/pihpsdr/calculus and /dev/null differ diff --git a/release/pihpsdr/libwdsp.so b/release/pihpsdr/libwdsp.so index e085ec5..09179a9 100755 Binary files a/release/pihpsdr/libwdsp.so and b/release/pihpsdr/libwdsp.so differ diff --git a/release/pihpsdr/pihpsdr b/release/pihpsdr/pihpsdr index 86ce2f3..6fd6160 100755 Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ diff --git a/toolbar.c b/toolbar.c index b4d6c79..7423b3f 100644 --- a/toolbar.c +++ b/toolbar.c @@ -54,6 +54,7 @@ static GtkWidget *last_filter; #define AGC_GAIN 3 #define DRIVE 4 #define TUNE_DRIVE 5 +#define ATTENUATION 5 #define MIC_GAIN_FUDGE 25.0 @@ -64,6 +65,8 @@ static GtkWidget *af_gain_label; static GtkWidget *af_gain_scale; static GtkWidget *agc_gain_label; static GtkWidget *agc_scale; +static GtkWidget *attenuation_label; +static GtkWidget *attenuation_scale; static GtkWidget *mic_gain_label; static GtkWidget *mic_gain_scale; static GtkWidget *drive_label; @@ -253,6 +256,48 @@ fprintf(stderr,"scale_timeout_cb\n"); return FALSE; } +static void attenuation_value_changed_cb(GtkWidget *widget, gpointer data) { + attenuation=gtk_range_get_value(GTK_RANGE(attenuation_scale)); + if(protocol==NEW_PROTOCOL) { + // need to schedule something + } +} + +void set_attenuation_value(double value) { + attenuation=(int)value; + if(display_sliders) { + gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation); + } else { + if(scale_status!=ATTENUATION) { + if(scale_status!=NONE) { + g_source_remove(scale_timer); + gtk_widget_destroy(scale_dialog); + scale_status=NONE; + } + } + if(scale_status==NONE) { + scale_status=ATTENUATION; + scale_dialog=gtk_dialog_new_with_buttons("Attenuation (dB)",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); + GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); + attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.00); + gtk_widget_set_size_request (attenuation_scale, 400, 30); + gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation); + gtk_widget_show(attenuation_scale); + gtk_container_add(GTK_CONTAINER(content),attenuation_scale); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + //gtk_widget_show_all(scale_dialog); + int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); + } else { + g_source_remove(scale_timer); + gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + } + } + if(protocol==NEW_PROTOCOL) { + // need to schedule something + } +} + static void agc_select_cb(GtkWidget *widget, gpointer data) { agc=(int)data; SetRXAAGCMode(CHANNEL_RX0, agc); @@ -960,6 +1005,18 @@ GtkWidget *sliders_init(int my_width, int my_height, GtkWidget* parent) { gtk_grid_attach(GTK_GRID(sliders),agc_scale,4,0,2,1); g_signal_connect(G_OBJECT(agc_scale),"value_changed",G_CALLBACK(agcgain_value_changed_cb),NULL); + attenuation_label=gtk_label_new("ATT (dB):"); + //gtk_widget_override_font(attenuation_label, pango_font_description_from_string("Arial 16")); + gtk_widget_show(attenuation_label); + gtk_grid_attach(GTK_GRID(sliders),attenuation_label,6,0,1,1); + + attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.0); + gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation); + gtk_widget_show(attenuation_scale); + gtk_grid_attach(GTK_GRID(sliders),attenuation_scale,7,0,2,1); + g_signal_connect(G_OBJECT(attenuation_scale),"value_changed",G_CALLBACK(attenuation_value_changed_cb),NULL); + + mic_gain_label=gtk_label_new("Mic:"); //gtk_widget_override_font(mic_gain_label, pango_font_description_from_string("Arial 16")); diff --git a/toolbar.h b/toolbar.h index 99940ea..fbf2fdf 100644 --- a/toolbar.h +++ b/toolbar.h @@ -22,6 +22,7 @@ void set_af_gain(double value); void set_mic_gain(double value); void set_drive(double drive); void set_tune(double tune); +void set_attenuation_value(double attenuation); int ptt_update(void *data); void lock_cb(GtkWidget *widget, gpointer data); void mox_cb(GtkWidget *widget, gpointer data); diff --git a/vfo.c b/vfo.c index bfc2d93..3386211 100644 --- a/vfo.c +++ b/vfo.c @@ -138,9 +138,9 @@ int vfo_update(void *data) { cairo_move_to(cr, (my_width/2)+20, 30); cairo_show_text(cr, getFrequencyInfo(entry->frequencyA)); -// sprintf(sf,"Step %dHz",step); -// cairo_move_to(cr, 10, 25); -// cairo_show_text(cr, sf); + sprintf(sf,"Step %dHz",step); + cairo_move_to(cr, (my_width/2)+20, 15); + cairo_show_text(cr, sf); if(locked) { cairo_set_source_rgb(cr, 1, 0, 0);