From 3e3298496a1e9c79a41b104a89a526ca025911c6 Mon Sep 17 00:00:00 2001 From: skarg Date: Wed, 11 Jul 2012 19:13:09 +0000 Subject: [PATCH] Added ability to send Local Broadcast UnconfirmedPrivateTransfer using 'dnet=n' argument in place of device-instance argument. --- bacnet-stack/demo/uptransfer/main.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/bacnet-stack/demo/uptransfer/main.c b/bacnet-stack/demo/uptransfer/main.c index 9fed9718..7acd1ed8 100644 --- a/bacnet-stack/demo/uptransfer/main.c +++ b/bacnet-stack/demo/uptransfer/main.c @@ -59,6 +59,7 @@ static uint8_t Rx_Buf[MAX_MPDU] = { 0 }; /* converted command line arguments */ static bool Target_Broadcast; +static uint16_t Target_DNET; static uint32_t Target_Device_Object_Instance = BACNET_MAX_INSTANCE; static uint16_t Target_Vendor_Identifier = 260; static uint32_t Target_Service_Number = 0; @@ -151,7 +152,7 @@ int main( 0 }; /* address where message came from */ uint16_t pdu_len = 0; - unsigned timeout = 100; /* milliseconds */ + unsigned timeout = 10; /* milliseconds */ unsigned max_apdu = 0; time_t elapsed_seconds = 0; time_t last_seconds = 0; @@ -171,8 +172,8 @@ int main( if (argc < 6) { filename = filename_remove_path(argv[0]); - printf("Usage: %s device-instance vendor-id service-number " - "tag value [tag value...]\r\n", filename); + printf("Usage: %s vendor-id" + " service-number tag value [tag value...]\r\n", filename); if ((argc > 1) && (strcmp(argv[1], "--help") == 0)) { printf("device-instance:\r\n" "BACnet Device Object Instance number that you are\r\n" @@ -180,7 +181,8 @@ int main( "to try and bind with the device using Who-Is and\r\n" "I-Am services. For example, if you were transferring to\r\n" "Device Object 123, the device-instance would be 123.\r\n" - "For Broadcast, use the word broadcast.\r\n" + "For Global Broadcast, use the word 'broadcast'.\r\n" + "For Local Broadcast to a particular DNET n, use 'dnet=n'.\r\n" "\r\n" "vendor_id:\r\n" "the unique vendor identification code for the type of\r\n" "vendor proprietary service to be performed.\r\n" "\r\n" @@ -210,6 +212,10 @@ int main( /* decode the command line parameters */ if (strcmp(argv[1], "broadcast") == 0) { Target_Broadcast = true; + Target_DNET = BACNET_BROADCAST_NETWORK; + } else if (strncmp(argv[1],"dnet=",5) == 0) { + Target_Broadcast = true; + Target_DNET = strtol(&argv[1][5], NULL, 0); } else { Target_Device_Object_Instance = strtol(argv[1], NULL, 0); } @@ -281,6 +287,7 @@ int main( last_seconds = time(NULL); if (Target_Broadcast) { datalink_get_broadcast_address(&Target_Address); + Target_Address.net = Target_DNET; found = true; timeout_seconds = 0; } else { @@ -324,8 +331,13 @@ int main( private_data.serviceNumber = Target_Service_Number; Send_UnconfirmedPrivateTransfer(&Target_Address, &private_data); - printf("Sent PrivateTransfer. Waiting %u seconds.\r\n", - (unsigned) (timeout_seconds - elapsed_seconds)); + printf("Sent PrivateTransfer."); + if (timeout_seconds) { + printf(" Waiting %u seconds.\r\n", + (unsigned) (timeout_seconds - elapsed_seconds)); + } else { + printf("\r\n"); + } sent_message = true; } else { if (elapsed_seconds > timeout_seconds) {