Add --retry C option for repeating Who-Is or I-Am C number of times (#199)
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
This commit is contained in:
+17
-2
@@ -128,6 +128,10 @@ static void print_help(char *filename)
|
|||||||
"Send the message repeatedly until signalled to quit.\n"
|
"Send the message repeatedly until signalled to quit.\n"
|
||||||
"Default is to not repeat, sending only a single message.\n"
|
"Default is to not repeat, sending only a single message.\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
"--retry C\n"
|
||||||
|
"Send the message C number of times\n"
|
||||||
|
"Default is retry 0, only sending one time.\n"
|
||||||
|
"\n"
|
||||||
"--delay\n"
|
"--delay\n"
|
||||||
"Delay, in milliseconds, between repeated messages.\n"
|
"Delay, in milliseconds, between repeated messages.\n"
|
||||||
"Default delay is 100ms.\n"
|
"Default delay is 100ms.\n"
|
||||||
@@ -160,6 +164,7 @@ int main(int argc, char *argv[])
|
|||||||
int argi = 0;
|
int argi = 0;
|
||||||
unsigned int target_args = 0;
|
unsigned int target_args = 0;
|
||||||
char *filename = NULL;
|
char *filename = NULL;
|
||||||
|
long retry_count = 0;
|
||||||
|
|
||||||
filename = filename_remove_path(argv[0]);
|
filename = filename_remove_path(argv[0]);
|
||||||
for (argi = 1; argi < argc; argi++) {
|
for (argi = 1; argi < argc; argi++) {
|
||||||
@@ -198,6 +203,13 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
} else if (strcmp(argv[argi], "--repeat") == 0) {
|
} else if (strcmp(argv[argi], "--repeat") == 0) {
|
||||||
repeat_forever = true;
|
repeat_forever = true;
|
||||||
|
} else if (strcmp(argv[argi], "--retry") == 0) {
|
||||||
|
if (++argi < argc) {
|
||||||
|
retry_count = strtol(argv[argi], NULL, 0);
|
||||||
|
if (retry_count < 0) {
|
||||||
|
retry_count = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (strcmp(argv[argi], "--delay") == 0) {
|
} else if (strcmp(argv[argi], "--delay") == 0) {
|
||||||
if (++argi < argc) {
|
if (++argi < argc) {
|
||||||
timeout = strtol(argv[argi], NULL, 0);
|
timeout = strtol(argv[argi], NULL, 0);
|
||||||
@@ -265,7 +277,7 @@ int main(int argc, char *argv[])
|
|||||||
do {
|
do {
|
||||||
Send_I_Am_To_Network(&dest, Target_Device_ID, Target_Max_APDU,
|
Send_I_Am_To_Network(&dest, Target_Device_ID, Target_Max_APDU,
|
||||||
Target_Segmentation, Target_Vendor_ID);
|
Target_Segmentation, Target_Vendor_ID);
|
||||||
if (repeat_forever) {
|
if (repeat_forever || retry_count) {
|
||||||
/* returns 0 bytes on timeout */
|
/* returns 0 bytes on timeout */
|
||||||
pdu_len = datalink_receive(&src, &Rx_Buf[0], MAX_MPDU, timeout);
|
pdu_len = datalink_receive(&src, &Rx_Buf[0], MAX_MPDU, timeout);
|
||||||
/* process */
|
/* process */
|
||||||
@@ -275,8 +287,11 @@ int main(int argc, char *argv[])
|
|||||||
if (Error_Detected) {
|
if (Error_Detected) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (retry_count > 0) {
|
||||||
|
retry_count--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} while (repeat_forever);
|
} while (repeat_forever || retry_count);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-1
@@ -306,6 +306,10 @@ static void print_help(char *filename)
|
|||||||
"Send the message repeatedly until signalled to quit.\n"
|
"Send the message repeatedly until signalled to quit.\n"
|
||||||
"Default is disabled, using the APDU timeout as time to quit.\n"
|
"Default is disabled, using the APDU timeout as time to quit.\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
"--retry C\n"
|
||||||
|
"Send the message C number of times\n"
|
||||||
|
"Default is retry 0, only sending one time.\n"
|
||||||
|
"\n"
|
||||||
"--delay\n"
|
"--delay\n"
|
||||||
"Delay, in milliseconds, between repeated messages.\n"
|
"Delay, in milliseconds, between repeated messages.\n"
|
||||||
"Default delay is 100ms.\n"
|
"Default delay is 100ms.\n"
|
||||||
@@ -352,6 +356,7 @@ int main(int argc, char *argv[])
|
|||||||
unsigned int target_args = 0;
|
unsigned int target_args = 0;
|
||||||
char *filename = NULL;
|
char *filename = NULL;
|
||||||
bool repeat_forever = false;
|
bool repeat_forever = false;
|
||||||
|
long retry_count = 0;
|
||||||
|
|
||||||
/* check for local environment settings */
|
/* check for local environment settings */
|
||||||
if (getenv("BACNET_DEBUG")) {
|
if (getenv("BACNET_DEBUG")) {
|
||||||
@@ -395,6 +400,13 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
} else if (strcmp(argv[argi], "--repeat") == 0) {
|
} else if (strcmp(argv[argi], "--repeat") == 0) {
|
||||||
repeat_forever = true;
|
repeat_forever = true;
|
||||||
|
} else if (strcmp(argv[argi], "--retry") == 0) {
|
||||||
|
if (++argi < argc) {
|
||||||
|
retry_count = strtol(argv[argi], NULL, 0);
|
||||||
|
if (retry_count < 0) {
|
||||||
|
retry_count = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (strcmp(argv[argi], "--delay") == 0) {
|
} else if (strcmp(argv[argi], "--delay") == 0) {
|
||||||
if (++argi < argc) {
|
if (++argi < argc) {
|
||||||
timeout = strtol(argv[argi], NULL, 0);
|
timeout = strtol(argv[argi], NULL, 0);
|
||||||
@@ -488,10 +500,13 @@ int main(int argc, char *argv[])
|
|||||||
datalink_maintenance_timer(elapsed_seconds);
|
datalink_maintenance_timer(elapsed_seconds);
|
||||||
}
|
}
|
||||||
total_seconds += elapsed_seconds;
|
total_seconds += elapsed_seconds;
|
||||||
if (repeat_forever) {
|
if (repeat_forever || retry_count) {
|
||||||
Send_WhoIs_To_Network(
|
Send_WhoIs_To_Network(
|
||||||
&dest, Target_Object_Instance_Min,
|
&dest, Target_Object_Instance_Min,
|
||||||
Target_Object_Instance_Max);
|
Target_Object_Instance_Max);
|
||||||
|
if (retry_count > 0) {
|
||||||
|
retry_count--;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (total_seconds > timeout_seconds) {
|
if (total_seconds > timeout_seconds) {
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user