From fa1d2b4fdcc9179065a930d67401ea606b316e7a Mon Sep 17 00:00:00 2001 From: skarg Date: Fri, 5 Dec 2008 20:18:03 +0000 Subject: [PATCH] Moved ucov_notify_send to handler/s_ucov.c file, and refactored PDU encoding. --- bacnet-stack/demo/handler/s_cov.c | 77 +++++++++++++++++++++++++++++++ bacnet-stack/demo/ucov/main.c | 2 +- bacnet-stack/include/client.h | 10 ++++ bacnet-stack/lib/Makefile | 1 + bacnet-stack/lib/bacnet.cbp | 3 ++ bacnet-stack/lib/makefile.b32 | 1 + bacnet-stack/src/cov.c | 24 ---------- 7 files changed, 93 insertions(+), 25 deletions(-) create mode 100644 bacnet-stack/demo/handler/s_cov.c diff --git a/bacnet-stack/demo/handler/s_cov.c b/bacnet-stack/demo/handler/s_cov.c new file mode 100644 index 00000000..afa4a3fb --- /dev/null +++ b/bacnet-stack/demo/handler/s_cov.c @@ -0,0 +1,77 @@ +/************************************************************************** +* +* Copyright (C) 2008 Steve Karg +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be included +* in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +* +*********************************************************************/ +#include +#include +#include +#include +#include "config.h" +#include "bacdef.h" +#include "bacdcode.h" +#include "address.h" +#include "tsm.h" +#include "dcc.h" +#include "npdu.h" +#include "apdu.h" +#include "device.h" +#include "datalink.h" +#include "cov.h" +/* some demo stuff needed */ +#include "handlers.h" + +int ucov_notify_encode_pdu( + uint8_t * buffer, + BACNET_ADDRESS * dest, + BACNET_NPDU_DATA * npdu_data, + BACNET_COV_DATA * cov_data) +{ + int len = 0; + int pdu_len = 0; + + /* unconfirmed is a broadcast */ + datalink_get_broadcast_address(dest); + /* encode the NPDU portion of the packet */ + npdu_encode_npdu_data(npdu_data, false, MESSAGE_PRIORITY_NORMAL); + pdu_len = npdu_encode_pdu(&buffer[0], dest, NULL, npdu_data); + /* encode the APDU portion of the packet */ + len = ucov_notify_encode_apdu(&buffer[pdu_len], cov_data); + pdu_len += len; + + return pdu_len; +} + +int Send_UCOV_Notify( + uint8_t * buffer, + BACNET_COV_DATA * cov_data) +{ + int pdu_len = 0; + BACNET_ADDRESS dest; + int bytes_sent = 0; + BACNET_NPDU_DATA npdu_data; + + pdu_len = ucov_notify_encode_pdu(buffer, &dest, &npdu_data, cov_data); + bytes_sent = datalink_send_pdu(&dest, &npdu_data, &buffer[0], pdu_len); + + return bytes_sent; +} diff --git a/bacnet-stack/demo/ucov/main.c b/bacnet-stack/demo/ucov/main.c index 3bf3b5ba..c80c5032 100644 --- a/bacnet-stack/demo/ucov/main.c +++ b/bacnet-stack/demo/ucov/main.c @@ -274,7 +274,7 @@ int main(int argc, char *argv[]) { Device_Set_Object_Instance_Number(BACNET_MAX_INSTANCE); Init_Service_Handlers(); Init_DataLink(); - ucov_notify_send(&Handler_Transmit_Buffer[0], &cov_data); + Send_UCOV_Notify(&Handler_Transmit_Buffer[0], &cov_data); return 0; } diff --git a/bacnet-stack/include/client.h b/bacnet-stack/include/client.h index 1b539531..87c107fd 100644 --- a/bacnet-stack/include/client.h +++ b/bacnet-stack/include/client.h @@ -34,6 +34,7 @@ #include "bacapp.h" #include "bacenum.h" #include "rpm.h" +#include "cov.h" #ifdef __cplusplus extern "C" { @@ -68,6 +69,15 @@ extern "C" { uint32_t object_instance, char *object_name); + int Send_UCOV_Notify( + uint8_t * buffer, + BACNET_COV_DATA * cov_data); + int ucov_notify_encode_pdu( + uint8_t * buffer, + BACNET_ADDRESS * dest, + BACNET_NPDU_DATA * npdu_data, + BACNET_COV_DATA * cov_data); + /* returns the invoke ID for confirmed request, or 0 if failed */ uint8_t Send_Read_Property_Request( uint32_t device_id, /* destination device */ diff --git a/bacnet-stack/lib/Makefile b/bacnet-stack/lib/Makefile index 944d7a94..76f5fb2d 100644 --- a/bacnet-stack/lib/Makefile +++ b/bacnet-stack/lib/Makefile @@ -98,6 +98,7 @@ HANDLER_SRC = \ $(BACNET_HANDLER)/s_dcc.c \ $(BACNET_HANDLER)/s_ihave.c \ $(BACNET_HANDLER)/s_iam.c \ + $(BACNET_HANDLER)/s_cov.c \ $(BACNET_HANDLER)/s_rd.c \ $(BACNET_HANDLER)/s_rp.c \ $(BACNET_HANDLER)/s_rpm.c \ diff --git a/bacnet-stack/lib/bacnet.cbp b/bacnet-stack/lib/bacnet.cbp index a2f2763e..9a22cf67 100644 --- a/bacnet-stack/lib/bacnet.cbp +++ b/bacnet-stack/lib/bacnet.cbp @@ -115,6 +115,9 @@ + + diff --git a/bacnet-stack/lib/makefile.b32 b/bacnet-stack/lib/makefile.b32 index 7d733ee6..41adc65a 100644 --- a/bacnet-stack/lib/makefile.b32 +++ b/bacnet-stack/lib/makefile.b32 @@ -96,6 +96,7 @@ HANDLER_SRC = $(BACNET_HANDLER)\txbuf.c \ $(BACNET_HANDLER)\s_dcc.c \ $(BACNET_HANDLER)\s_ihave.c \ $(BACNET_HANDLER)\s_iam.c \ + $(BACNET_HANDLER)\s_cov.c \ $(BACNET_HANDLER)\s_rd.c \ $(BACNET_HANDLER)\s_rp.c \ $(BACNET_HANDLER)\s_rpm.c \ diff --git a/bacnet-stack/src/cov.c b/bacnet-stack/src/cov.c index b61831cf..9591d89f 100644 --- a/bacnet-stack/src/cov.c +++ b/bacnet-stack/src/cov.c @@ -606,30 +606,6 @@ int cov_subscribe_property_decode_service_request( return len; } -int ucov_notify_send( - uint8_t * buffer, - BACNET_COV_DATA * data) -{ - int len = 0; - int pdu_len = 0; - BACNET_ADDRESS dest; - int bytes_sent = 0; - BACNET_NPDU_DATA npdu_data; - - /* unconfirmed is a broadcast */ - datalink_get_broadcast_address(&dest); - /* encode the NPDU portion of the packet */ - npdu_encode_npdu_data(&npdu_data, false, MESSAGE_PRIORITY_NORMAL); - pdu_len = npdu_encode_pdu(&buffer[0], &dest, NULL, &npdu_data); - /* encode the APDU portion of the packet */ - len = ucov_notify_encode_apdu(&buffer[pdu_len], data); - pdu_len += len; - /* send the data */ - bytes_sent = datalink_send_pdu(&dest, &npdu_data, &buffer[0], pdu_len); - - return bytes_sent; -} - #ifdef TEST #include #include