From f0f756ace0f702e9e1cdfa6c18e7b5eedaaa81a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Frohm=C3=BCller?= Date: Sat, 18 Jul 2026 17:17:46 +0200 Subject: [PATCH] Improve Asclepius error handling, serial reconnection, and TTY configuration --- res/icon_register.xcf | Bin 2922 -> 4787 bytes res/img/status_warn.png | Bin 0 -> 319 bytes src/opensuperclone/asclepius.c | 153 +++++++++++++++++++----- src/opensuperclone/asclepius.h | 10 +- src/opensuperclone/clone_gui.c | 99 +++++++++++++-- src/opensuperclone/clone_gui.h | 4 + src/opensuperclone/clone_gui_common.h | 2 + src/opensuperclone/opensuperclone.c | 1 + src/opensuperclone/opensuperclone.glade | 123 ++++++++++++++++++- src/opensuperclone/usbrelay.c | 2 + 10 files changed, 350 insertions(+), 44 deletions(-) create mode 100644 res/img/status_warn.png diff --git a/res/icon_register.xcf b/res/icon_register.xcf index 60670f6eb17ccf3df529e3b1fbba1e2bc60aba41..e6bd0a856b513b573a38d25de1d4765672283dbe 100644 GIT binary patch literal 4787 zcmds4&u<$=6kgN1uAQWAP2q&l)IgmgHujbZ70Gd=Mo?8EYLv8s9yi|E^{V@e-Er!` z!CZkeaN)!iBo38wL;?wc#GNZg{(@d2;pKa~JINSQB@#x2jP>??^WK};H#6Tp?>ep@ zu~FY<+a1Hu(7KQp37~xrxdbVdaCsJTeibGXw9AmQkgJgA3rum(Y1)}TpcfoWt@lIU z=Yc?9BWGhZ=BD5ld*q4%yM1SEojez_P}esdt~;@7k&U9iSxm%^$5|43u63=pXgmGT z3uCsJDLrG+x55}1&+=~Q5Xx|GZVQZrPiVw2p)ST z2C*Q-U9n|R%#*|o1NJ8RTMr$J?PLkjjq{*ru#*%<;rhIQiMh>n5t{+l6Jy)+*f2tf z`vFogJuU>#t#%mureIBTD8eRggH?M&iz7$Z&LgD7jYNOiG6HF`TxCdpAW$dg%@^aOsvSl64+$nttT*X747$ zuiHlG(}!dO-{FBH2F>2sl22#!bpkSgD#ZY4qiC%3tSt>MFOR$hG{F;*~xc`T#r$7N7?n$<)v{Wx7zj$f z7F@1&#@IvZsx%MKQc< z+jJhMiLYmJhRJLFLx~jq7rxfNIK&52{ab0z`1&!JH8a`g>&#}P?EcMJ^S}C2QLyWq z+~a-vxMOQ(@{mqhmO1$-jA6S%_7(CT@6(1MPR^r#&Ri($^cHdvQc(0NAbs7aO@5V7 hsL~qraxPh0_!?_Ufb_xC;L@JG@TGX+`^Q2v{RwTw5{m!; delta 252 zcmdn2`bunqlc+QU1A`b4vj8z85Q_rw=ZWFpRDm=MFg8J0%-Il{^(2JmD3~0_B|UjL z3;*P;Y$}YLlV@>SPZnj*ncT(7&&1R?c^11A6Vu$u`&q@9n6^&7&U$uo10OqgP-+TD zI};F3-pHoH3gRHN`f~9zv6OCxA{BI fc1Bi^4-jTW@$)lr7J=1q_JP%LF5A4E{|qAl{GmE> diff --git a/res/img/status_warn.png b/res/img/status_warn.png new file mode 100644 index 0000000000000000000000000000000000000000..f6066cd27a5d2cfba65ab5bc994d23c0131ac0a6 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!3HD?X4LuvDaPU;cPGZ1Cw1z99F}xPUq=Rp zjs4tz5?O(Kg=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-IzPGLWGgtNdSvY3HEPZ@+6E0)@q0R`DhJbhi+U$HZB%UbM^+`9)T)a>cv z7!q;#?TwARhYUm*E-IfA%Tu0y!Ju*Z2{Fx?imK5DtilG2i@wTzInjBkt|q*0=ZDE} z4zU?;c9?7S>^h68(V9cT6@SkizxIeFH7??_i16=!2OghWE62+Ggj4VNf9p%m`Q;HC z5)L-8a*OFe7~7@3%Uuk-eY?6m-X<+=;V-5e7XThfg literal 0 HcmV?d00001 diff --git a/src/opensuperclone/asclepius.c b/src/opensuperclone/asclepius.c index 7f38653..b7f0887 100644 --- a/src/opensuperclone/asclepius.c +++ b/src/opensuperclone/asclepius.c @@ -104,30 +104,14 @@ static bool asclepius_read_status_packet(void) return true; } -void asclepius_connect(void) +static int asclepius_setup_tty(void) { - if(asclepius_connected) - { - asclepius_disconnect(); - } - - asclepius_serial_port = open(ASCLEPIUS_TTY_DEVICE, O_RDWR | O_NOCTTY); - - if(asclepius_serial_port < 0) - { - printf("Error %i from open: %s\n", errno, strerror(errno)); - asclepius_connected = false; - return; - } - struct termios tty; if(tcgetattr(asclepius_serial_port, &tty) != 0) { printf("Error %i from tcgetattr: %s\n", errno, strerror(errno)); - asclepius_connected = false; - close(asclepius_serial_port); - return; + return -1; } tty.c_cflag &= ~PARENB; // No parity @@ -158,14 +142,64 @@ void asclepius_connect(void) if(tcsetattr(asclepius_serial_port, TCSANOW, &tty) != 0) { printf("Error %i from tcsetattr: %s\n", errno, strerror(errno)); - asclepius_connected = false; - close(asclepius_serial_port); - return; + return -1; } tcflush(asclepius_serial_port, TCIOFLUSH); + return 0; +} + +static bool asclepius_reconnect(void) +{ + if(asclepius_serial_port >= 0) + { + close(asclepius_serial_port); + asclepius_serial_port = -1; + } + + asclepius_serial_port = open(asclepius_tty_device_ccc, O_RDWR | O_NOCTTY); + + if(asclepius_serial_port < 0) + { + printf("Error %i from open: %s\n", errno, strerror(errno)); + return false; + } + + if(asclepius_setup_tty() != 0) + { + close(asclepius_serial_port); + asclepius_serial_port = -1; + return false; + } + + return true; +} + +int asclepius_connect(void) +{ + if(asclepius_connected) + { + asclepius_disconnect(); + } + + asclepius_serial_port = open(asclepius_tty_device_ccc, O_RDWR | O_NOCTTY); + + if(asclepius_serial_port < 0) + { + printf("Error %i from open: %s\n", errno, strerror(errno)); + asclepius_connected = false; + return -1; + } + + if(asclepius_setup_tty() != 0) + { + asclepius_connected = false; + close(asclepius_serial_port); + return -1; + } asclepius_connected = true; + return 0; } void asclepius_disconnect(void) @@ -186,37 +220,65 @@ bool asclepius_get_connection_status() return asclepius_connected; } -void asclepius_enable_channel(uint8_t channel) +int asclepius_enable_channel(uint8_t channel) { if(!asclepius_connected) { - return; + return -1; } asclepius_command.command = ASCLEPIUS_TURNON_IOCMD; asclepius_command.channel = channel; - asclepius_write_all(&asclepius_command, sizeof(asclepius_command)); + if(!asclepius_write_all(&asclepius_command, sizeof(asclepius_command))) + { + asclepius_connected = false; + if(asclepius_reconnect()) + { + asclepius_connected = true; + if(asclepius_write_all(&asclepius_command, sizeof(asclepius_command))) + { + return 0; + } + } + return -1; + } + + return 0; } -void asclepius_disable_channel(uint8_t channel) +int asclepius_disable_channel(uint8_t channel) { if(!asclepius_connected) { - return; + return -1; } asclepius_command.command = ASCLEPIUS_TURNOFF_IOCMD; asclepius_command.channel = channel; - asclepius_write_all(&asclepius_command, sizeof(asclepius_command)); + if(!asclepius_write_all(&asclepius_command, sizeof(asclepius_command))) + { + asclepius_connected = false; + if(asclepius_reconnect()) + { + asclepius_connected = true; + if(asclepius_write_all(&asclepius_command, sizeof(asclepius_command))) + { + return 0; + } + } + return -1; + } + + return 0; } -void asclepius_get_status(void) +int asclepius_get_status(void) { if(!asclepius_connected) { - return; + return -1; } asclepius_command.command = ASCLEPIUS_STATUS_IOCMD; @@ -224,8 +286,37 @@ void asclepius_get_status(void) if(!asclepius_write_all(&asclepius_command, sizeof(asclepius_command))) { - return; + asclepius_connected = false; + if(asclepius_reconnect()) + { + asclepius_connected = true; + if(asclepius_write_all(&asclepius_command, sizeof(asclepius_command))) + { + if(asclepius_read_status_packet()) + { + return 0; + } + } + } + return -1; } - asclepius_read_status_packet(); + if(!asclepius_read_status_packet()) + { + asclepius_connected = false; + if(asclepius_reconnect()) + { + asclepius_connected = true; + if(asclepius_write_all(&asclepius_command, sizeof(asclepius_command))) + { + if(asclepius_read_status_packet()) + { + return 0; + } + } + } + return -1; + } + + return 0; } diff --git a/src/opensuperclone/asclepius.h b/src/opensuperclone/asclepius.h index 401a7fb..b76afff 100644 --- a/src/opensuperclone/asclepius.h +++ b/src/opensuperclone/asclepius.h @@ -13,7 +13,7 @@ #include #include -#define ASCLEPIUS_TTY_DEVICE "/dev/ttyascl" +extern char asclepius_tty_device_ccc[256]; #define ASCLEPIUS_BAUDRATE B115200 #define ASCLEPIUS_STATUS_IOCMD 1 @@ -49,14 +49,14 @@ struct bool usb5v_enabled; } asclepius_status; -void asclepius_connect(void); +int asclepius_connect(void); void asclepius_disconnect(void); bool asclepius_get_connection_status(void); -void asclepius_enable_channel(uint8_t channel); +int asclepius_enable_channel(uint8_t channel); -void asclepius_disable_channel(uint8_t channel); +int asclepius_disable_channel(uint8_t channel); -void asclepius_get_status(void); +int asclepius_get_status(void); diff --git a/src/opensuperclone/clone_gui.c b/src/opensuperclone/clone_gui.c index 47bbfc5..a3c54b2 100644 --- a/src/opensuperclone/clone_gui.c +++ b/src/opensuperclone/clone_gui.c @@ -3925,6 +3925,9 @@ void open_primary_relay_dialog_ccc(void) 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")); + asclepius_tty_device_text_ccc = GTK_WIDGET(gtk_builder_get_object(builder, "asclepius_tty_device_text")); + asclepius_connect_button_ccc = GTK_WIDGET(gtk_builder_get_object(builder, "asclepius_connect_button")); + asclepius_disconnect_button_ccc = GTK_WIDGET(gtk_builder_get_object(builder, "asclepius_disconnect_button")); 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")); @@ -3990,13 +3993,17 @@ void open_primary_relay_dialog_ccc(void) gtk_button_set_label(GTK_BUTTON(test_primary_relay_button_ccc), _("Test relay operation")); gtk_button_set_label(GTK_BUTTON(activate_primary_relay_button_ccc), _("Activate (Power Off)")); gtk_button_set_label(GTK_BUTTON(deactivate_primary_relay_button_ccc), _("Deactivate (Power On)")); + gtk_button_set_label(GTK_BUTTON(asclepius_connect_button_ccc), _("Connect Asclepius")); + gtk_button_set_label(GTK_BUTTON(asclepius_disconnect_button_ccc), _("Disconnect Asclepius")); // gtk_entry_set_max_length (GTK_ENTRY (power_command_to_call_text_ccc), MAX_CALL_LENGTH); + gtk_entry_set_max_length(GTK_ENTRY(asclepius_tty_device_text_ccc), 255); // g_signal_connect(G_OBJECT(phase_timers_checkbutton_ccc), "toggled", G_CALLBACK(set_state_from_button_ccc), GINT_TO_POINTER(BUTTONID_PHASETIMERS)); load_primary_relay_settings_ccc(); gtk_label_set_text(GTK_LABEL(data_current_relay_board_a_ccc), primary_relay_settings_ccc.primary_relay_name); + gtk_entry_set_text(GTK_ENTRY(asclepius_tty_device_text_ccc), primary_relay_settings_ccc.asclepius_tty_device); update_primary_relay_button_settings_ccc(); gtk_window_set_title(GTK_WINDOW(dialog), _("Primary Relay Settings")); @@ -4056,6 +4063,9 @@ void update_primary_relay_settings_from_buttons_ccc(void) } } + const gchar *tty_entry_text = gtk_entry_get_text(GTK_ENTRY(asclepius_tty_device_text_ccc)); + strcpy(primary_relay_settings_ccc.asclepius_tty_device, tty_entry_text); + // = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON()); // = gtk_spin_button_get_value(GTK_SPIN_BUTTON()); } @@ -4175,7 +4185,10 @@ int cycle_primary_relay_ccc(void) if(asclepius_get_connection_status()) { - asclepius_disable_channel(asclepius_relay_source); + if (asclepius_disable_channel(asclepius_relay_source) != 0) + { + return 1; + } // wait to deactivate unsigned int i; @@ -4185,7 +4198,10 @@ int cycle_primary_relay_ccc(void) do_nanosleep_ccc(1000000000); } - asclepius_enable_channel(asclepius_relay_source); + if (asclepius_enable_channel(asclepius_relay_source) != 0) + { + return 1; + } // wait for delay time for (i = primary_relay_delay_time_ccc; i > 0; i--) @@ -4497,7 +4513,10 @@ void update_asclepius_status(void) { if (asclepius_get_connection_status()) { - asclepius_get_status(); + if (asclepius_get_status() != 0) + { + return; + } if (asclepius_status.main12v_enabled) { @@ -4507,6 +4526,10 @@ void update_asclepius_status(void) { gtk_image_set_from_file(GTK_IMAGE(asclepius_12v_icon), status_icon_off_path); } + if (asclepius_status.main12v_enabled && (asclepius_status.main12v_voltage < 10800 || asclepius_status.main12v_voltage > 13200)) + { + gtk_image_set_from_file(GTK_IMAGE(asclepius_12v_icon), status_warn_icon_path); + } if (asclepius_status.main12v_ocp) { gtk_image_set_from_file(GTK_IMAGE(asclepius_12v_icon), error_icon_on_path); @@ -4520,6 +4543,10 @@ void update_asclepius_status(void) { gtk_image_set_from_file(GTK_IMAGE(asclepius_5v_icon), status_icon_off_path); } + if (asclepius_status.main5v_enabled && (asclepius_status.main5v_voltage < 4750 || asclepius_status.main5v_voltage > 5250)) + { + gtk_image_set_from_file(GTK_IMAGE(asclepius_5v_icon), status_warn_icon_path); + } if (asclepius_status.main5v_ocp) { gtk_image_set_from_file(GTK_IMAGE(asclepius_5v_icon), error_icon_on_path); @@ -4533,6 +4560,10 @@ void update_asclepius_status(void) { gtk_image_set_from_file(GTK_IMAGE(asclepius_usb_icon), status_icon_off_path); } + if (asclepius_status.usb5v_enabled && (asclepius_status.main5v_voltage < 4750 || asclepius_status.main5v_voltage > 5250)) + { + gtk_image_set_from_file(GTK_IMAGE(asclepius_usb_icon), status_warn_icon_path); + } if (asclepius_status.usb5v_ocp) { gtk_image_set_from_file(GTK_IMAGE(asclepius_usb_icon), error_icon_on_path); @@ -4847,6 +4878,8 @@ void update_primary_relay_button_settings_ccc(void) gtk_combo_box_set_active(GTK_COMBO_BOX(asclepius_relay_source_combobox_ccc), relay_source_index); } + gtk_entry_set_text(GTK_ENTRY(asclepius_tty_device_text_ccc), primary_relay_settings_ccc.asclepius_tty_device); + // 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); @@ -5327,7 +5360,13 @@ void do_activate_primary_relay_ccc(void) if(asclepius_get_connection_status()) { - asclepius_disable_channel(asclepius_relay_source); + if (asclepius_disable_channel(asclepius_relay_source) != 0) + { + snprintf(tempmessage_ccc, TEMP_MESSAGE_SIZE, _("Error operating Asclepius relay, see console for more information")); + message_error_ccc(tempmessage_ccc); + print_gui_error_message_ccc(error_message_ccc, _("Error!"), 1); + clear_error_message_ccc(); + } return; } @@ -5426,7 +5465,13 @@ void do_deactivate_primary_relay_ccc(void) if(asclepius_get_connection_status()) { - asclepius_enable_channel(asclepius_relay_source); + if (asclepius_enable_channel(asclepius_relay_source) != 0) + { + snprintf(tempmessage_ccc, TEMP_MESSAGE_SIZE, _("Error operating Asclepius relay, see console for more information")); + message_error_ccc(tempmessage_ccc); + print_gui_error_message_ccc(error_message_ccc, _("Error!"), 1); + clear_error_message_ccc(); + } return; } @@ -5491,6 +5536,24 @@ void do_deactivate_primary_relay_ccc(void) update_primary_relay_settings_ccc(); } +void do_asclepius_connect_ccc(void) +{ + const gchar *tty_device = gtk_entry_get_text(GTK_ENTRY(asclepius_tty_device_text_ccc)); + strcpy(asclepius_tty_device_ccc, tty_device); + if (asclepius_connect() != 0) + { + snprintf(tempmessage_ccc, TEMP_MESSAGE_SIZE, _("Error connecting to Asclepius, see console for more information")); + message_error_ccc(tempmessage_ccc); + print_gui_error_message_ccc(error_message_ccc, _("Error!"), 1); + clear_error_message_ccc(); + } +} + +void do_asclepius_disconnect_ccc(void) +{ + asclepius_disconnect(); +} + void do_activate_primary_relay_main_ccc(void) { int asclepius_relay_source = primary_relay_settings_ccc.asclepius_relay_source; @@ -5501,7 +5564,13 @@ void do_activate_primary_relay_main_ccc(void) if(asclepius_get_connection_status()) { - asclepius_disable_channel(asclepius_relay_source); + if (asclepius_disable_channel(asclepius_relay_source) != 0) + { + snprintf(tempmessage_ccc, TEMP_MESSAGE_SIZE, _("Error operating Asclepius relay, see console for more information")); + message_error_ccc(tempmessage_ccc); + print_gui_error_message_ccc(error_message_ccc, _("Error!"), 1); + clear_error_message_ccc(); + } return; } @@ -5534,7 +5603,13 @@ void do_deactivate_primary_relay_main_ccc(void) if(asclepius_get_connection_status()) { - asclepius_enable_channel(asclepius_relay_source); + if (asclepius_enable_channel(asclepius_relay_source) != 0) + { + snprintf(tempmessage_ccc, TEMP_MESSAGE_SIZE, _("Error operating Asclepius relay, see console for more information")); + message_error_ccc(tempmessage_ccc); + print_gui_error_message_ccc(error_message_ccc, _("Error!"), 1); + clear_error_message_ccc(); + } return; } @@ -6304,6 +6379,13 @@ void read_config_file_with_name_ccc(char* filename) } } + setting = config_setting_get_member(group, "asclepius_tty_device"); + if (setting != NULL) + { + const char *atd = config_setting_get_string(setting); + snprintf(primary_relay_settings_ccc.asclepius_tty_device, sizeof(primary_relay_settings_ccc.asclepius_tty_device), "%s", atd); + } + // setting = config_setting_get_member(group, "primary_relay_name");; // if (setting != NULL) // { @@ -6701,6 +6783,9 @@ void write_config_file_with_name_ccc(char* filename) 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, "asclepius_tty_device", CONFIG_TYPE_STRING); + config_setting_set_string(setting, primary_relay_settings_ccc.asclepius_tty_device); + // 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 5b8a843..eb62ddb 100644 --- a/src/opensuperclone/clone_gui.h +++ b/src/opensuperclone/clone_gui.h @@ -359,6 +359,9 @@ 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 *asclepius_tty_device_text_ccc; +GtkWidget *asclepius_connect_button_ccc; +GtkWidget *asclepius_disconnect_button_ccc; GtkWidget *primary_relay_board_settings_label_ccc; GtkWidget *primary_relay_activation_label_ccc; GtkWidget *activate_primary_relay1_checkbutton_ccc; @@ -476,6 +479,7 @@ bool button_labeled_start = true; char *status_icon_off_path = OSC_RESOURCE_PATH "/img/status_off.png"; char *status_icon_on_path = OSC_RESOURCE_PATH "/img/status_on.png"; char *error_icon_on_path = OSC_RESOURCE_PATH "/img/error_on.png"; +char *status_warn_icon_path = OSC_RESOURCE_PATH "/img/status_warn.png"; char *smart_info_icon_path = OSC_RESOURCE_PATH "/img/fontawesome/circle-info.svg"; char *smart_warning_icon_path = OSC_RESOURCE_PATH "/img/fontawesome/triangle-exclamation.svg"; char *smart_error_icon_path = OSC_RESOURCE_PATH "/img/fontawesome/xmark.svg"; diff --git a/src/opensuperclone/clone_gui_common.h b/src/opensuperclone/clone_gui_common.h index 9387c6e..34a5d3c 100644 --- a/src/opensuperclone/clone_gui_common.h +++ b/src/opensuperclone/clone_gui_common.h @@ -117,6 +117,7 @@ char primary_relay_name_ccc[MAX_RELAY_NAME_LENGTH]; unsigned long long primary_relay_activation_time_ccc; unsigned long long primary_relay_delay_time_ccc; int asclepius_relay_source_ccc; +char asclepius_tty_device_ccc[256]; bool rebuild_assist_enabled_ccc; bool use_fpdma_ccc; bool wait_for_ds_bit_ccc; @@ -272,6 +273,7 @@ struct unsigned long long primary_relay_activation_time; unsigned long long primary_relay_delay_time; int asclepius_relay_source; + char asclepius_tty_device[256]; char primary_relay_name[MAX_RELAY_NAME_LENGTH]; } primary_relay_settings_ccc; diff --git a/src/opensuperclone/opensuperclone.c b/src/opensuperclone/opensuperclone.c index 2600991..9a17eee 100644 --- a/src/opensuperclone/opensuperclone.c +++ b/src/opensuperclone/opensuperclone.c @@ -205,6 +205,7 @@ int main(int argc, char **argv) primary_relay_activation_time_ccc = PRIMARY_RELAY_ACTIVATION_TIME; primary_relay_delay_time_ccc = PRIMARY_RELAY_DELAY_TIME; asclepius_relay_source_ccc = ASCLEPIUS_ALL; + strcpy(asclepius_tty_device_ccc, "/dev/ttyascl"); use_rebuild_assist_ccc = false; rebuild_assist_enabled_ccc = false; drive_port_ccc = -1; diff --git a/src/opensuperclone/opensuperclone.glade b/src/opensuperclone/opensuperclone.glade index 98caa34..17d2d9a 100644 --- a/src/opensuperclone/opensuperclone.glade +++ b/src/opensuperclone/opensuperclone.glade @@ -7900,6 +7900,127 @@ no data 4 + + + True + False + 0 + in + + + True + False + 12 + + + True + True + + False + False + + + + + + + True + False + Asclepius TTY device + True + + + + + False + True + 5 + + + + + True + False + True + + + True + False + 0 + in + + + True + False + 12 + + + connect + True + True + True + + + + + + + + True + False + True + + + + + True + True + 0 + + + + + True + False + 0 + in + + + True + False + 12 + + + disconnect + True + True + True + + + + + + + + True + False + True + + + + + True + True + 1 + + + + + False + True + 6 + + True @@ -7981,7 +8102,7 @@ no data True True - 5 + 7 diff --git a/src/opensuperclone/usbrelay.c b/src/opensuperclone/usbrelay.c index 3159f45..093ffd4 100644 --- a/src/opensuperclone/usbrelay.c +++ b/src/opensuperclone/usbrelay.c @@ -1246,6 +1246,7 @@ void load_primary_relay_settings_ccc(void) primary_relay_settings_ccc.asclepius_relay_source = ASCLEPIUS_ALL; } strcpy(primary_relay_settings_ccc.primary_relay_name, primary_relay_name_ccc); + strcpy(primary_relay_settings_ccc.asclepius_tty_device, asclepius_tty_device_ccc); } void update_primary_relay_settings_ccc(void) @@ -1278,6 +1279,7 @@ void update_primary_relay_settings_ccc(void) asclepius_relay_source_ccc = ASCLEPIUS_ALL; } strcpy(primary_relay_name_ccc, primary_relay_settings_ccc.primary_relay_name); + strcpy(asclepius_tty_device_ccc, primary_relay_settings_ccc.asclepius_tty_device); } int get_primary_relay_settings_ccc(void)