#define ALEX 1
#define APOLLO 2
+#define CHARLY25 3
#define REGION_OTHER 0
#define REGION_UK 1
#include "filter.h"
#include "radio.h"
#include "receiver.h"
+#include "sliders.h"
#include "new_protocol.h"
#include "old_protocol.h"
#include "gpio.h"
set_alex_attenuation(band->alexAttenuation);
}
}
+ att_type_changed();
}
static void none_cb(GtkWidget *widget, gpointer data) {
static void apollo_cb(GtkWidget *widget, gpointer data) {
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
filter_board = APOLLO;
- load_filters;
+ load_filters();
+ }
+}
+
+static void charly25_cb(GtkWidget *widget, gpointer data) {
+ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
+ filter_board = CHARLY25;
+ load_filters();
}
}
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(apollo_b), filter_board == APOLLO);
gtk_grid_attach(GTK_GRID(grid), apollo_b, x, 3, 1, 1);
+ GtkWidget *charly25_b = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(none_b), "CHARLY25");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(charly25_b), filter_board == CHARLY25);
+ gtk_grid_attach(GTK_GRID(grid), charly25_b, x, 4, 1, 1);
+
g_signal_connect(none_b, "toggled", G_CALLBACK(none_cb), NULL);
g_signal_connect(alex_b, "toggled", G_CALLBACK(alex_cb), NULL);
g_signal_connect(apollo_b, "toggled", G_CALLBACK(apollo_cb), NULL);
+ g_signal_connect(charly25_b, "toggled", G_CALLBACK(charly25_cb), NULL);
x++;
}
#include "filter.h"
#include "radio.h"
#include "receiver.h"
+#include "sliders.h"
static GtkWidget *parent_window=NULL;
static void dither_cb(GtkWidget *widget, gpointer data) {
active_receiver->dither=active_receiver->dither==1?0:1;
+ update_att_preamp();
}
static void random_cb(GtkWidget *widget, gpointer data) {
static void preamp_cb(GtkWidget *widget, gpointer data) {
active_receiver->preamp=active_receiver->preamp==1?0:1;
+ update_att_preamp();
}
static void alex_att_cb(GtkWidget *widget, gpointer data) {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
set_alex_attenuation((intptr_t) data);
+ update_att_preamp();
}
}
#endif
}
- switch(protocol) {
+ // The CHARLY25 board (with RedPitaya) has no support for dither or random,
+ // so those are left out. PreAmps and Alex Attenuator are controlled via sliders.
+ if (filter_board != CHARLY25) {
+ switch(protocol) {
#ifdef RADIOBERRY
- case RADIOBERRY_PROTOCOL:
+ case RADIOBERRY_PROTOCOL:
#endif
- case ORIGINAL_PROTOCOL:
- case NEW_PROTOCOL:
- {
- GtkWidget *dither_b=gtk_check_button_new_with_label("Dither");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dither_b), active_receiver->dither);
- gtk_grid_attach(GTK_GRID(grid),dither_b,x,2,1,1);
- g_signal_connect(dither_b,"toggled",G_CALLBACK(dither_cb),NULL);
-
- GtkWidget *random_b=gtk_check_button_new_with_label("Random");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (random_b), active_receiver->random);
- gtk_grid_attach(GTK_GRID(grid),random_b,x,3,1,1);
- g_signal_connect(random_b,"toggled",G_CALLBACK(random_cb),NULL);
-
- if((protocol==ORIGINAL_PROTOCOL && device==DEVICE_METIS) ||
+ case ORIGINAL_PROTOCOL:
+ case NEW_PROTOCOL:
+ {
+ GtkWidget *dither_b=gtk_check_button_new_with_label("Dither");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dither_b), active_receiver->dither);
+ gtk_grid_attach(GTK_GRID(grid),dither_b,x,2,1,1);
+ g_signal_connect(dither_b,"toggled",G_CALLBACK(dither_cb),NULL);
+
+ GtkWidget *random_b=gtk_check_button_new_with_label("Random");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (random_b), active_receiver->random);
+ gtk_grid_attach(GTK_GRID(grid),random_b,x,3,1,1);
+ g_signal_connect(random_b,"toggled",G_CALLBACK(random_cb),NULL);
+
+ if((protocol==ORIGINAL_PROTOCOL && device==DEVICE_METIS) ||
#ifdef USBOZY
- (protocol==ORIGINAL_PROTOCOL && device==DEVICE_OZY) ||
+ (protocol==ORIGINAL_PROTOCOL && device==DEVICE_OZY) ||
#endif
- (protocol==NEW_PROTOCOL && device==NEW_DEVICE_ATLAS)) {
-
- GtkWidget *preamp_b=gtk_check_button_new_with_label("Preamp");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preamp_b), active_receiver->preamp);
- gtk_grid_attach(GTK_GRID(grid),preamp_b,x,4,1,1);
- g_signal_connect(preamp_b,"toggled",G_CALLBACK(preamp_cb),NULL);
- }
- GtkWidget *alex_att_label=gtk_label_new("Alex Attenuator");
- gtk_grid_attach(GTK_GRID(grid), alex_att_label, x, 5, 1, 1);
- GtkWidget *last_alex_att_b = NULL;
- for (int i = 0; i <= 3; i++) {
- gchar button_text[] = "xx dB";
- sprintf(button_text, "%d dB", i*10);
- GtkWidget *alex_att_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(last_alex_att_b), button_text);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(alex_att_b), active_receiver->alex_attenuation == i);
- gtk_grid_attach(GTK_GRID(grid), alex_att_b, x, 6 + i, 1, 1);
- g_signal_connect(alex_att_b, "toggled", G_CALLBACK(alex_att_cb), (gpointer) (long) i);
- last_alex_att_b = alex_att_b;
- }
- }
- x++;
- break;
- default:
- break;
+ (protocol==NEW_PROTOCOL && device==NEW_DEVICE_ATLAS)) {
+
+ GtkWidget *preamp_b=gtk_check_button_new_with_label("Preamp");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preamp_b), active_receiver->preamp);
+ gtk_grid_attach(GTK_GRID(grid),preamp_b,x,4,1,1);
+ g_signal_connect(preamp_b,"toggled",G_CALLBACK(preamp_cb),NULL);
+ }
+ GtkWidget *alex_att_label=gtk_label_new("Alex Attenuator");
+ gtk_grid_attach(GTK_GRID(grid), alex_att_label, x, 5, 1, 1);
+ GtkWidget *last_alex_att_b = NULL;
+ for (int i = 0; i <= 3; i++) {
+ gchar button_text[] = "xx dB";
+ sprintf(button_text, "%d dB", i*10);
+ GtkWidget *alex_att_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(last_alex_att_b), button_text);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(alex_att_b), active_receiver->alex_attenuation == i);
+ gtk_grid_attach(GTK_GRID(grid), alex_att_b, x, 6 + i, 1, 1);
+ g_signal_connect(alex_att_b, "toggled", G_CALLBACK(alex_att_cb), (gpointer) (long) i);
+ last_alex_att_b = alex_att_b;
+ }
+ }
+ x++;
+ break;
+ default:
+ break;
+ }
}
int n_adc=1;
static GtkWidget *agc_scale;
static GtkWidget *attenuation_label;
static GtkWidget *attenuation_scale;
+static GtkWidget *c25_att_preamp_label;
+static GtkWidget *c25_att_combobox;
+static GtkWidget *c25_preamp_combobox;
static GtkWidget *mic_gain_label;
static GtkWidget *mic_gain_scale;
static GtkWidget *drive_label;
set_attenuation(adc_attenuation[active_receiver->adc]);
}
+void update_att_preamp(void) {
+ if (filter_board == CHARLY25) {
+ char id[] = "x";
+ sprintf(id, "%d", active_receiver->alex_attenuation);
+ gtk_combo_box_set_active_id(GTK_COMBO_BOX(c25_att_combobox), id);
+ sprintf(id, "%d", active_receiver->preamp + active_receiver->dither);
+ gtk_combo_box_set_active_id(GTK_COMBO_BOX(c25_preamp_combobox), id);
+ }
+}
+
+void att_type_changed(void) {
+ if (filter_board == CHARLY25) {
+ gtk_widget_hide(attenuation_label);
+ gtk_widget_hide(attenuation_scale);
+ gtk_widget_show(c25_att_preamp_label);
+ gtk_widget_show(c25_att_combobox);
+ gtk_widget_show(c25_preamp_combobox);
+ update_att_preamp();
+ } else {
+ gtk_widget_hide(c25_att_preamp_label);
+ gtk_widget_hide(c25_att_combobox);
+ gtk_widget_hide(c25_preamp_combobox);
+ gtk_widget_show(attenuation_label);
+ gtk_widget_show(attenuation_scale);
+ }
+}
+
+static gboolean load_att_type_cb(gpointer data) {
+ att_type_changed();
+ return G_SOURCE_REMOVE;
+}
+
+static void c25_att_combobox_changed(GtkWidget *widget, gpointer data) {
+ int id = atoi(gtk_combo_box_get_active_id(GTK_COMBO_BOX(widget)));
+ set_alex_attenuation(id);
+}
+
+static void c25_preamp_combobox_changed(GtkWidget *widget, gpointer data) {
+ int id = atoi(gtk_combo_box_get_active_id(GTK_COMBO_BOX(widget)));
+ active_receiver->dither = id >= 2;
+ active_receiver->preamp = id >= 1;
+}
+
static void agcgain_value_changed_cb(GtkWidget *widget, gpointer data) {
active_receiver->agc_gain=gtk_range_get_value(GTK_RANGE(agc_scale));
SetRXAAGCTop(active_receiver->id, active_receiver->agc_gain);
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);
+ c25_att_preamp_label = gtk_label_new("Att/PreAmp");
+ gtk_grid_attach(GTK_GRID(sliders), c25_att_preamp_label, 6, 0, 1, 1);
+
+ c25_att_combobox = gtk_combo_box_text_new();
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_att_combobox), "0", "0 dB");
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_att_combobox), "1", "-12 dB");
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_att_combobox), "2", "-24 dB");
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_att_combobox), "3", "-36 dB");
+ gtk_grid_attach(GTK_GRID(sliders), c25_att_combobox, 7, 0, 1, 1);
+ g_signal_connect(G_OBJECT(c25_att_combobox), "changed", G_CALLBACK(c25_att_combobox_changed), NULL);
+
+ c25_preamp_combobox = gtk_combo_box_text_new();
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_preamp_combobox), "0", "0 dB");
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_preamp_combobox), "1", "18 dB");
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c25_preamp_combobox), "2", "36 dB");
+ gtk_grid_attach(GTK_GRID(sliders), c25_preamp_combobox, 8, 0, 1, 1);
+ g_signal_connect(G_OBJECT(c25_preamp_combobox), "changed", G_CALLBACK(c25_preamp_combobox_changed), NULL);
+ g_idle_add(load_att_type_cb, NULL);
+
mic_gain_label=gtk_label_new(mic_linein?"Linein:":"Mic (dB):");
gtk_grid_attach(GTK_GRID(sliders),mic_gain_label,0,1,1,1);
#ifndef _SLIDERS_H
#define _SLIDERS_H
+extern void att_type_changed(void);
+extern void update_att_preamp(void);
+
extern int sliders_active_receiver_changed(void *data);
extern void update_agc_gain(double gain);
extern void update_af_gain();