91
91
#define DLT_RECEIVE_ECU_ID "RECV"
92
92
93
93
DltClient dltclient ;
94
+ static bool sig_close_recv = false;
94
95
95
96
void signal_handler (int signal )
96
97
{
@@ -100,6 +101,7 @@ void signal_handler(int signal)
100
101
case SIGINT :
101
102
case SIGQUIT :
102
103
/* stop main loop */
104
+ sig_close_recv = true;
103
105
shutdown (dltclient .receiver .fd , SHUT_RD );
104
106
break ;
105
107
default :
@@ -120,12 +122,14 @@ typedef struct {
120
122
int vflag ;
121
123
int yflag ;
122
124
int uflag ;
125
+ int rflag ;
123
126
char * ovalue ;
124
127
char * ovaluebase ; /* ovalue without ".dlt" */
125
128
char * fvalue ; /* filename for space separated filter file (<AppID> <ContextID>) */
126
129
char * jvalue ; /* filename for json filter file */
127
130
char * evalue ;
128
131
int bvalue ;
132
+ int rvalue ;
129
133
int sendSerialHeaderFlag ;
130
134
int resyncSerialHeaderFlag ;
131
135
int64_t climit ;
@@ -163,6 +167,7 @@ void usage()
163
167
printf (" -R Enable resync serial header\n" );
164
168
printf (" -y Serial device mode\n" );
165
169
printf (" -u UDP multicast mode\n" );
170
+ printf (" -r msecs Reconnect to server with milli seconds specified\n" );
166
171
printf (" -i addr Host interface address\n" );
167
172
printf (" -b baudrate Serial device baudrate (Default: 115200)\n" );
168
173
printf (" -e ecuid Set ECU ID (Default: RECV)\n" );
@@ -345,7 +350,7 @@ int main(int argc, char *argv[])
345
350
/* Fetch command line arguments */
346
351
opterr = 0 ;
347
352
348
- while ((c = getopt (argc , argv , "vashSRyuxmf:j:o:e:b:c:p:i:" )) != -1 )
353
+ while ((c = getopt (argc , argv , "vashSRyuxmf:j:o:e:b:c:p:i:r :" )) != -1 )
349
354
switch (c ) {
350
355
case 'v' :
351
356
{
@@ -418,6 +423,11 @@ int main(int argc, char *argv[])
418
423
return -1 ;
419
424
#endif
420
425
}
426
+ case 'r' : {
427
+ dltdata .rflag = 1 ;
428
+ dltdata .rvalue = atoi (optarg );
429
+ break ;
430
+ }
421
431
case 'o' :
422
432
{
423
433
dltdata .ovalue = optarg ;
@@ -612,17 +622,27 @@ int main(int argc, char *argv[])
612
622
613
623
if (dltdata .evalue )
614
624
dlt_set_id (dltdata .ecuid , dltdata .evalue );
615
- else
616
- dlt_set_id (dltdata .ecuid , DLT_RECEIVE_ECU_ID );
617
-
618
- /* Connect to TCP socket or open serial device */
619
- if (dlt_client_connect (& dltclient , dltdata .vflag ) != DLT_RETURN_ERROR ) {
620
-
621
- /* Dlt Client Main Loop */
622
- dlt_client_main_loop (& dltclient , & dltdata , dltdata .vflag );
623
-
624
- /* Dlt Client Cleanup */
625
- dlt_client_cleanup (& dltclient , dltdata .vflag );
625
+ else {
626
+ dlt_set_id (dltdata .ecuid , DLT_RECEIVE_ECU_ID );}
627
+
628
+ while (true) {
629
+ /* Attempt to connect to TCP socket or open serial device */
630
+ if (dlt_client_connect (& dltclient , dltdata .vflag ) != DLT_RETURN_ERROR ) {
631
+
632
+ /* Dlt Client Main Loop */
633
+ dlt_client_main_loop (& dltclient , & dltdata , dltdata .vflag );
634
+
635
+ if (dltdata .rflag == 1 && sig_close_recv == false) {
636
+ dlt_vlog (LOG_INFO , "Reconnect to server with %d milli seconds specified\n" , dltdata .rvalue );
637
+ sleep (dltdata .rvalue / 1000 );
638
+ } else {
639
+ /* Dlt Client Cleanup */
640
+ dlt_client_cleanup (& dltclient , dltdata .vflag );
641
+ break ;
642
+ }
643
+ } else {
644
+ break ;
645
+ }
626
646
}
627
647
628
648
/* dlt-receive cleanup */
0 commit comments