diff --git a/src/opensuperclone/clone_gui.c b/src/opensuperclone/clone_gui.c
index a7a9aa4..2d6efb7 100644
--- a/src/opensuperclone/clone_gui.c
+++ b/src/opensuperclone/clone_gui.c
@@ -3923,6 +3923,8 @@ void open_primary_relay_dialog_ccc(void)
primary_relay_settings_info_label_ccc = GTK_WIDGET(gtk_builder_get_object(builder, "primary_relay_settings_info_label"));
label_current_primary_relay_board_ccc = GTK_WIDGET(gtk_builder_get_object(builder, "label_current_primary_relay_board"));
data_current_relay_board_a_ccc = GTK_WIDGET(gtk_builder_get_object(builder, "data_current_relay_board_a"));
+ asclepius_relay_source_label_ccc = GTK_WIDGET(gtk_builder_get_object(builder, "asclepius_relay_source_label"));
+ asclepius_relay_source_combobox_ccc = GTK_WIDGET(gtk_builder_get_object(builder, "asclepius_relay_source_combobox"));
primary_relay_board_settings_label_ccc = GTK_WIDGET(gtk_builder_get_object(builder, "primary_relay_board_settings_label"));
primary_relay_activation_label_ccc = GTK_WIDGET(gtk_builder_get_object(builder, "primary_relay_activation_label"));
activate_primary_relay1_checkbutton_ccc = GTK_WIDGET(gtk_builder_get_object(builder, "activate_primary_relay1_checkbutton"));
@@ -3958,6 +3960,12 @@ void open_primary_relay_dialog_ccc(void)
gtk_label_set_text(GTK_LABEL(primary_relay_settings_label_ccc), "");
gtk_label_set_text(GTK_LABEL(primary_relay_settings_info_label_ccc), _("Primary relay board settings"));
gtk_label_set_text(GTK_LABEL(label_current_primary_relay_board_ccc), _("Current relay board"));
+ gtk_label_set_text(GTK_LABEL(asclepius_relay_source_label_ccc), _("Asclepius Relay Source"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(asclepius_relay_source_combobox_ccc), _("12V"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(asclepius_relay_source_combobox_ccc), _("5V"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(asclepius_relay_source_combobox_ccc), _("USB"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(asclepius_relay_source_combobox_ccc), _("MOLEX"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(asclepius_relay_source_combobox_ccc), _("All"));
gtk_label_set_text(GTK_LABEL(primary_relay_board_settings_label_ccc), _("Relay board settings"));
gtk_label_set_text(GTK_LABEL(primary_relay_activation_label_ccc), _("Activation condition"));
gtk_button_set_label(GTK_BUTTON(activate_primary_relay1_checkbutton_ccc), _("Energize relay 1"));
@@ -4024,6 +4032,29 @@ void update_primary_relay_settings_from_buttons_ccc(void)
primary_relay_settings_ccc.deactivate_primary_relay8 = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(deactivate_primary_relay8_checkbutton_ccc));
primary_relay_settings_ccc.primary_relay_activation_time = gtk_spin_button_get_value(GTK_SPIN_BUTTON(primary_relay_energize_time_spinbutton_ccc));
primary_relay_settings_ccc.primary_relay_delay_time = gtk_spin_button_get_value(GTK_SPIN_BUTTON(primary_relay_delay_time_spinbutton_ccc));
+ if (asclepius_relay_source_combobox_ccc)
+ {
+ int relay_source = gtk_combo_box_get_active(GTK_COMBO_BOX(asclepius_relay_source_combobox_ccc));
+ switch (relay_source)
+ {
+ case 0:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_MAIN12V;
+ break;
+ case 1:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_MAIN5V;
+ break;
+ case 2:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_USB5V;
+ break;
+ case 3:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_MOLEX;
+ break;
+ case 4:
+ default:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_ALL;
+ break;
+ }
+ }
// = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON());
// = gtk_spin_button_get_value(GTK_SPIN_BUTTON());
@@ -4136,9 +4167,15 @@ void do_test_primary_relay_ccc(void)
int cycle_primary_relay_ccc(void)
{
+ int asclepius_relay_source = primary_relay_settings_ccc.asclepius_relay_source;
+ if (asclepius_relay_source < ASCLEPIUS_MAIN12V || asclepius_relay_source > ASCLEPIUS_ALL)
+ {
+ asclepius_relay_source = ASCLEPIUS_ALL;
+ }
+
if(asclepius_get_connection_status())
{
- asclepius_disable_channel(ASCLEPIUS_ALL);
+ asclepius_disable_channel(asclepius_relay_source);
// wait to deactivate
unsigned int i;
@@ -4148,7 +4185,7 @@ int cycle_primary_relay_ccc(void)
do_nanosleep_ccc(1000000000);
}
- asclepius_enable_channel(ASCLEPIUS_ALL);
+ asclepius_enable_channel(asclepius_relay_source);
// wait for delay time
for (i = primary_relay_delay_time_ccc; i > 0; i--)
@@ -4784,6 +4821,31 @@ void update_primary_relay_button_settings_ccc(void)
gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(primary_relay_delay_time_spinbutton_ccc), gtk_adjustment_ccc);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(primary_relay_delay_time_spinbutton_ccc), primary_relay_settings_ccc.primary_relay_delay_time);
+ int relay_source_index;
+ switch (primary_relay_settings_ccc.asclepius_relay_source)
+ {
+ case ASCLEPIUS_MAIN12V:
+ relay_source_index = 0;
+ break;
+ case ASCLEPIUS_MAIN5V:
+ relay_source_index = 1;
+ break;
+ case ASCLEPIUS_USB5V:
+ relay_source_index = 2;
+ break;
+ case ASCLEPIUS_MOLEX:
+ relay_source_index = 3;
+ break;
+ case ASCLEPIUS_ALL:
+ default:
+ relay_source_index = 4;
+ break;
+ }
+ if (asclepius_relay_source_combobox_ccc)
+ {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(asclepius_relay_source_combobox_ccc), relay_source_index);
+ }
+
// gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON (), primary_relay_settings_ccc. );
// gtk_adjustment_ccc = (GtkAdjustment *) gtk_adjustment_new (0, 1, 1, 1, 1, 0);
@@ -5232,9 +5294,39 @@ void clear_usbr1_ccc(void)
void do_activate_primary_relay_ccc(void)
{
+ if (asclepius_relay_source_combobox_ccc)
+ {
+ int relay_source = gtk_combo_box_get_active(GTK_COMBO_BOX(asclepius_relay_source_combobox_ccc));
+ switch (relay_source)
+ {
+ case 0:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_MAIN12V;
+ break;
+ case 1:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_MAIN5V;
+ break;
+ case 2:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_USB5V;
+ break;
+ case 3:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_MOLEX;
+ break;
+ case 4:
+ default:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_ALL;
+ break;
+ }
+ }
+
+ int asclepius_relay_source = primary_relay_settings_ccc.asclepius_relay_source;
+ if (asclepius_relay_source < ASCLEPIUS_MAIN12V || asclepius_relay_source > ASCLEPIUS_ALL)
+ {
+ asclepius_relay_source = ASCLEPIUS_ALL;
+ }
+
if(asclepius_get_connection_status())
{
- asclepius_disable_channel(ASCLEPIUS_ALL);
+ asclepius_disable_channel(asclepius_relay_source);
return;
}
@@ -5301,9 +5393,39 @@ void do_activate_primary_relay_ccc(void)
void do_deactivate_primary_relay_ccc(void)
{
+ if (asclepius_relay_source_combobox_ccc)
+ {
+ int relay_source = gtk_combo_box_get_active(GTK_COMBO_BOX(asclepius_relay_source_combobox_ccc));
+ switch (relay_source)
+ {
+ case 0:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_MAIN12V;
+ break;
+ case 1:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_MAIN5V;
+ break;
+ case 2:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_USB5V;
+ break;
+ case 3:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_MOLEX;
+ break;
+ case 4:
+ default:
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_ALL;
+ break;
+ }
+ }
+
+ int asclepius_relay_source = primary_relay_settings_ccc.asclepius_relay_source;
+ if (asclepius_relay_source < ASCLEPIUS_MAIN12V || asclepius_relay_source > ASCLEPIUS_ALL)
+ {
+ asclepius_relay_source = ASCLEPIUS_ALL;
+ }
+
if(asclepius_get_connection_status())
{
- asclepius_enable_channel(ASCLEPIUS_ALL);
+ asclepius_enable_channel(asclepius_relay_source);
return;
}
@@ -5370,9 +5492,15 @@ void do_deactivate_primary_relay_ccc(void)
void do_activate_primary_relay_main_ccc(void)
{
+ int asclepius_relay_source = primary_relay_settings_ccc.asclepius_relay_source;
+ if (asclepius_relay_source < ASCLEPIUS_MAIN12V || asclepius_relay_source > ASCLEPIUS_ALL)
+ {
+ asclepius_relay_source = ASCLEPIUS_ALL;
+ }
+
if(asclepius_get_connection_status())
{
- asclepius_disable_channel(ASCLEPIUS_ALL);
+ asclepius_disable_channel(asclepius_relay_source);
return;
}
@@ -5397,9 +5525,15 @@ void do_activate_primary_relay_main_ccc(void)
void do_deactivate_primary_relay_main_ccc(void)
{
+ int asclepius_relay_source = primary_relay_settings_ccc.asclepius_relay_source;
+ if (asclepius_relay_source < ASCLEPIUS_MAIN12V || asclepius_relay_source > ASCLEPIUS_ALL)
+ {
+ asclepius_relay_source = ASCLEPIUS_ALL;
+ }
+
if(asclepius_get_connection_status())
{
- asclepius_enable_channel(ASCLEPIUS_ALL);
+ asclepius_enable_channel(asclepius_relay_source);
return;
}
@@ -6157,7 +6291,17 @@ void read_config_file_with_name_ccc(char* filename)
if (setting != NULL)
{
primary_relay_settings_ccc.primary_relay_delay_time = config_setting_get_int64(setting);
- }
+ }
+
+ setting = config_setting_get_member(group, "asclepius_relay_source");
+ if (setting != NULL)
+ {
+ primary_relay_settings_ccc.asclepius_relay_source = config_setting_get_int(setting);
+ if (primary_relay_settings_ccc.asclepius_relay_source < ASCLEPIUS_MAIN12V || primary_relay_settings_ccc.asclepius_relay_source > ASCLEPIUS_ALL)
+ {
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_ALL;
+ }
+ }
// setting = config_setting_get_member(group, "primary_relay_name");;
// if (setting != NULL)
@@ -6553,6 +6697,9 @@ void write_config_file_with_name_ccc(char* filename)
setting = config_setting_add(group, "primary_relay_delay_time", CONFIG_TYPE_INT64);
config_setting_set_int64(setting, primary_relay_settings_ccc.primary_relay_delay_time);
+ setting = config_setting_add(group, "asclepius_relay_source", CONFIG_TYPE_INT);
+ config_setting_set_int(setting, primary_relay_settings_ccc.asclepius_relay_source);
+
// setting = config_setting_add(group, "primary_relay_name", CONFIG_TYPE_STRING);
// config_setting_set_string(setting, primary_relay_settings_ccc.primary_relay_name);
diff --git a/src/opensuperclone/clone_gui.h b/src/opensuperclone/clone_gui.h
index be5e8d0..4c28ab6 100644
--- a/src/opensuperclone/clone_gui.h
+++ b/src/opensuperclone/clone_gui.h
@@ -357,6 +357,8 @@ GtkWidget *primary_relay_settings_label_ccc;
GtkWidget *primary_relay_settings_info_label_ccc;
GtkWidget *label_current_primary_relay_board_ccc;
GtkWidget *data_current_relay_board_a_ccc;
+GtkWidget *asclepius_relay_source_label_ccc;
+GtkWidget *asclepius_relay_source_combobox_ccc;
GtkWidget *primary_relay_board_settings_label_ccc;
GtkWidget *primary_relay_activation_label_ccc;
GtkWidget *activate_primary_relay1_checkbutton_ccc;
diff --git a/src/opensuperclone/clone_gui_common.h b/src/opensuperclone/clone_gui_common.h
index 757684c..aca7856 100644
--- a/src/opensuperclone/clone_gui_common.h
+++ b/src/opensuperclone/clone_gui_common.h
@@ -270,6 +270,7 @@ struct
bool deactivate_primary_relay8;
unsigned long long primary_relay_activation_time;
unsigned long long primary_relay_delay_time;
+ int asclepius_relay_source;
char primary_relay_name[MAX_RELAY_NAME_LENGTH];
} primary_relay_settings_ccc;
diff --git a/src/opensuperclone/opensuperclone.glade b/src/opensuperclone/opensuperclone.glade
index 0b11510..98caa34 100644
--- a/src/opensuperclone/opensuperclone.glade
+++ b/src/opensuperclone/opensuperclone.glade
@@ -7866,6 +7866,40 @@ no data
3
+
+
+
+ False
+ True
+ 4
+
+
True
@@ -7947,7 +7981,7 @@ no data
True
True
- 4
+ 5
diff --git a/src/opensuperclone/usbrelay.c b/src/opensuperclone/usbrelay.c
index 33d7ce3..a2b71c6 100644
--- a/src/opensuperclone/usbrelay.c
+++ b/src/opensuperclone/usbrelay.c
@@ -6,6 +6,7 @@
#include "common.h"
#include "usbrelay.h"
#include "clone_gui_common.h"
+#include "asclepius.h"
int find_all_usb_devices_ccc(void)
{
@@ -1239,6 +1240,7 @@ void load_primary_relay_settings_ccc(void)
primary_relay_settings_ccc.deactivate_primary_relay8 = deactivate_primary_relay8_ccc;
primary_relay_settings_ccc.primary_relay_activation_time = primary_relay_activation_time_ccc;
primary_relay_settings_ccc.primary_relay_delay_time = primary_relay_delay_time_ccc;
+ primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_ALL;
strcpy(primary_relay_settings_ccc.primary_relay_name, primary_relay_name_ccc);
}