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 + + + True + False + 0 + in + + + True + False + 12 + + + True + True + + + + + + + True + False + asclepius relay source + True + + + + + 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); }