Add option '--output-line-delay-char cr|lf'

This commit is contained in:
yabu76 2025-10-05 15:25:47 +09:00
parent 9e51d2e4ee
commit e62a23f320
4 changed files with 38 additions and 1 deletions

View file

@ -171,6 +171,13 @@ static void config_parse_keys(GKeyFile *key_file, char *group)
config_get_integer(key_file, group, "output-delay", &option.output_delay, 0, INT_MAX); config_get_integer(key_file, group, "output-delay", &option.output_delay, 0, INT_MAX);
config_get_integer(key_file, group, "output-line-delay", &option.output_line_delay, 0, INT_MAX); config_get_integer(key_file, group, "output-line-delay", &option.output_line_delay, 0, INT_MAX);
config_get_string(key_file, group, "output-line-delay-char", &string, NULL);
if (string != NULL)
{
option_parse_output_line_delay_char(string);
g_free((void *)string);
string = NULL;
}
config_get_string(key_file, group, "line-pulse-duration", &string, NULL); config_get_string(key_file, group, "line-pulse-duration", &string, NULL);
if (string != NULL) if (string != NULL)
{ {

View file

@ -44,6 +44,7 @@ enum opt_t
OPT_LOG_DIRECTORY, OPT_LOG_DIRECTORY,
OPT_LOG_STRIP, OPT_LOG_STRIP,
OPT_LOG_APPEND, OPT_LOG_APPEND,
OPT_OUTPUT_LINE_DELAY_CHAR,
OPT_LINE_PULSE_DURATION, OPT_LINE_PULSE_DURATION,
OPT_RS485, OPT_RS485,
OPT_RS485_CONFIG, OPT_RS485_CONFIG,
@ -73,6 +74,7 @@ struct option_t option =
.parity = PARITY_NONE, .parity = PARITY_NONE,
.output_delay = 0, .output_delay = 0,
.output_line_delay = 0, .output_line_delay = 0,
.output_line_delay_char = '\n',
.dtr_pulse_duration = 100, .dtr_pulse_duration = 100,
.rts_pulse_duration = 100, .rts_pulse_duration = 100,
.cts_pulse_duration = 100, .cts_pulse_duration = 100,
@ -144,6 +146,7 @@ void option_print_help(char *argv[])
printf(" -p, --parity odd|even|none|mark|space Parity (default: none)\n"); printf(" -p, --parity odd|even|none|mark|space Parity (default: none)\n");
printf(" -o, --output-delay <ms> Output character delay (default: 0)\n"); printf(" -o, --output-delay <ms> Output character delay (default: 0)\n");
printf(" -O, --output-line-delay <ms> Output line delay (default: 0)\n"); printf(" -O, --output-line-delay <ms> Output line delay (default: 0)\n");
printf(" --output-line-delay-char cr|lf Output line delay character(default: lf)\n");
printf(" --line-pulse-duration <duration> Set line pulse duration\n"); printf(" --line-pulse-duration <duration> Set line pulse duration\n");
printf(" -a, --auto-connect new|latest|direct Automatic connect strategy (default: direct)\n"); printf(" -a, --auto-connect new|latest|direct Automatic connect strategy (default: direct)\n");
printf(" --exclude-devices <pattern> Exclude devices by pattern\n"); printf(" --exclude-devices <pattern> Exclude devices by pattern\n");
@ -504,6 +507,25 @@ void option_parse_auto_connect(const char *arg, auto_connect_t *auto_connect)
} }
} }
void option_parse_output_line_delay_char(const char *arg)
{
assert(arg != NULL);
if (strcmp("cr", arg) == 0)
{
option.output_line_delay_char = '\r';
}
else if (strcmp("lf", arg) == 0)
{
option.output_line_delay_char = '\n';
}
else
{
tio_error_print("Invalid char '%s'", arg);
exit(EXIT_FAILURE);
}
}
void option_parse_line_pulse_duration(const char *arg) void option_parse_line_pulse_duration(const char *arg)
{ {
bool token_found = true; bool token_found = true;
@ -833,6 +855,7 @@ void options_print()
tio_printf(" Timestamp timeout: %u", option.timestamp_timeout); tio_printf(" Timestamp timeout: %u", option.timestamp_timeout);
tio_printf(" Output delay: %d", option.output_delay); tio_printf(" Output delay: %d", option.output_delay);
tio_printf(" Output line delay: %d", option.output_line_delay); tio_printf(" Output line delay: %d", option.output_line_delay);
tio_printf(" Output line delay char: %s", option.output_line_delay_char == '\r' ? "cr" : "lf");
tio_printf(" Automatic connect strategy: %s", option_auto_connect_state_to_string(option.auto_connect)); tio_printf(" Automatic connect strategy: %s", option_auto_connect_state_to_string(option.auto_connect));
tio_printf(" Automatic reconnect: %s", option.no_reconnect ? "true" : "false"); tio_printf(" Automatic reconnect: %s", option.no_reconnect ? "true" : "false");
// clang-format off // clang-format off
@ -903,6 +926,7 @@ void options_parse(int argc, char *argv[])
{"parity", required_argument, 0, 'p' }, {"parity", required_argument, 0, 'p' },
{"output-delay", required_argument, 0, 'o' }, {"output-delay", required_argument, 0, 'o' },
{"output-line-delay" , required_argument, 0, 'O' }, {"output-line-delay" , required_argument, 0, 'O' },
{"output-line-delay-char", required_argument, 0, OPT_OUTPUT_LINE_DELAY_CHAR},
{"line-pulse-duration", required_argument, 0, OPT_LINE_PULSE_DURATION }, {"line-pulse-duration", required_argument, 0, OPT_LINE_PULSE_DURATION },
{"auto-connect", required_argument, 0, 'a' }, {"auto-connect", required_argument, 0, 'a' },
{"exclude-devices", required_argument, 0, OPT_EXCLUDE_DEVICES }, {"exclude-devices", required_argument, 0, OPT_EXCLUDE_DEVICES },
@ -989,6 +1013,10 @@ void options_parse(int argc, char *argv[])
option_string_to_integer(optarg, &option.output_line_delay, "output line delay", 0, INT_MAX); option_string_to_integer(optarg, &option.output_line_delay, "output line delay", 0, INT_MAX);
break; break;
case OPT_OUTPUT_LINE_DELAY_CHAR:
option_parse_output_line_delay_char(optarg);
break;
case OPT_LINE_PULSE_DURATION: case OPT_LINE_PULSE_DURATION:
option_parse_line_pulse_duration(optarg); option_parse_line_pulse_duration(optarg);
break; break;

View file

@ -54,6 +54,7 @@ struct option_t
parity_t parity; parity_t parity;
int output_delay; int output_delay;
int output_line_delay; int output_line_delay;
char output_line_delay_char;
int dtr_pulse_duration; int dtr_pulse_duration;
int rts_pulse_duration; int rts_pulse_duration;
int cts_pulse_duration; int cts_pulse_duration;
@ -122,6 +123,7 @@ void option_parse_parity(const char *arg, parity_t *parity);
void option_parse_output_mode(const char *arg, output_mode_t *mode); void option_parse_output_mode(const char *arg, output_mode_t *mode);
void option_parse_input_mode(const char *arg, input_mode_t *mode); void option_parse_input_mode(const char *arg, input_mode_t *mode);
void option_parse_output_line_delay_char(const char *arg);
void option_parse_line_pulse_duration(const char *arg); void option_parse_line_pulse_duration(const char *arg);
void option_parse_script_run(const char *arg, script_run_t *script_run); void option_parse_script_run(const char *arg, script_run_t *script_run);
void option_parse_alert(const char *arg, alert_t *alert); void option_parse_alert(const char *arg, alert_t *alert);

View file

@ -287,7 +287,7 @@ ssize_t tty_write(int fd, const void *buffer, size_t count)
fsync(fd); fsync(fd);
tcdrain(fd); tcdrain(fd);
if (option.output_line_delay && cbuf[i] == '\n') if (option.output_line_delay && cbuf[i] == option.output_line_delay_char)
{ {
delay(option.output_line_delay); delay(option.output_line_delay);
} }