From 8c2d4a897e83a46b4d8daf52327fff9f41bfc622 Mon Sep 17 00:00:00 2001 From: duvanan13 <114225490+duvanan13@users.noreply.github.com> Date: Wed, 12 Jun 2024 16:15:02 +0700 Subject: [PATCH] dlt-receive: rework reconnect option for PR620 (#640) * dlt-receive: add reconnect option with milli seconds as value * dlt-receive: rework reconnect option for PR620 + Correct the waiting loop + Replace poll(NULL) with sleep() + Correct mispelling Signed-off-by: andv --------- Signed-off-by: andv Co-authored-by: Maiananthan <46962558+maiananthan@users.noreply.github.com> Co-authored-by: andv --- src/console/dlt-receive.c | 44 ++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/src/console/dlt-receive.c b/src/console/dlt-receive.c index 93215c0f0..5c40f9944 100644 --- a/src/console/dlt-receive.c +++ b/src/console/dlt-receive.c @@ -91,6 +91,7 @@ #define DLT_RECEIVE_ECU_ID "RECV" DltClient dltclient; +static bool sig_close_recv = false; void signal_handler(int signal) { @@ -100,6 +101,7 @@ void signal_handler(int signal) case SIGINT: case SIGQUIT: /* stop main loop */ + sig_close_recv = true; shutdown(dltclient.receiver.fd, SHUT_RD); break; default: @@ -120,12 +122,14 @@ typedef struct { int vflag; int yflag; int uflag; + int rflag; char *ovalue; char *ovaluebase; /* ovalue without ".dlt" */ char *fvalue; /* filename for space separated filter file ( ) */ char *jvalue; /* filename for json filter file */ char *evalue; int bvalue; + int rvalue; int sendSerialHeaderFlag; int resyncSerialHeaderFlag; int64_t climit; @@ -163,6 +167,7 @@ void usage() printf(" -R Enable resync serial header\n"); printf(" -y Serial device mode\n"); printf(" -u UDP multicast mode\n"); + printf(" -r msecs Reconnect to server with milli seconds specified\n"); printf(" -i addr Host interface address\n"); printf(" -b baudrate Serial device baudrate (Default: 115200)\n"); printf(" -e ecuid Set ECU ID (Default: RECV)\n"); @@ -345,7 +350,7 @@ int main(int argc, char *argv[]) /* Fetch command line arguments */ opterr = 0; - while ((c = getopt (argc, argv, "vashSRyuxmf:j:o:e:b:c:p:i:")) != -1) + while ((c = getopt(argc, argv, "vashSRyuxmf:j:o:e:b:c:p:i:r:")) != -1) switch (c) { case 'v': { @@ -418,6 +423,11 @@ int main(int argc, char *argv[]) return -1; #endif } + case 'r': { + dltdata.rflag = 1; + dltdata.rvalue = atoi(optarg); + break; + } case 'o': { dltdata.ovalue = optarg; @@ -612,17 +622,27 @@ int main(int argc, char *argv[]) if (dltdata.evalue) dlt_set_id(dltdata.ecuid, dltdata.evalue); - else - dlt_set_id(dltdata.ecuid, DLT_RECEIVE_ECU_ID); - - /* Connect to TCP socket or open serial device */ - if (dlt_client_connect(&dltclient, dltdata.vflag) != DLT_RETURN_ERROR) { - - /* Dlt Client Main Loop */ - dlt_client_main_loop(&dltclient, &dltdata, dltdata.vflag); - - /* Dlt Client Cleanup */ - dlt_client_cleanup(&dltclient, dltdata.vflag); + else{ + dlt_set_id(dltdata.ecuid, DLT_RECEIVE_ECU_ID);} + + while (true) { + /* Attempt to connect to TCP socket or open serial device */ + if (dlt_client_connect(&dltclient, dltdata.vflag) != DLT_RETURN_ERROR) { + + /* Dlt Client Main Loop */ + dlt_client_main_loop(&dltclient, &dltdata, dltdata.vflag); + + if (dltdata.rflag == 1 && sig_close_recv == false) { + dlt_vlog(LOG_INFO, "Reconnect to server with %d milli seconds specified\n", dltdata.rvalue); + sleep(dltdata.rvalue / 1000); + } else { + /* Dlt Client Cleanup */ + dlt_client_cleanup(&dltclient, dltdata.vflag); + break; + } + } else { + break; + } } /* dlt-receive cleanup */