diff --git a/bacnet-stack/lib/Makefile b/bacnet-stack/lib/Makefile index fd0be706..b33d32cc 100644 --- a/bacnet-stack/lib/Makefile +++ b/bacnet-stack/lib/Makefile @@ -48,8 +48,7 @@ CORE_SRC = \ $(BACNET_CORE)/iam/iam_send.c \ $(BACNET_CORE)/ihave.c \ $(BACNET_CORE)/rd.c \ - $(BACNET_CORE)/readprop/rp_server.c \ - $(BACNET_CORE)/readprop/rp_client.c \ + $(BACNET_CORE)/rp.c \ $(BACNET_CORE)/rpm.c \ $(BACNET_CORE)/timesync.c \ $(BACNET_CORE)/whohas.c \ diff --git a/bacnet-stack/lib/makefile.b32 b/bacnet-stack/lib/makefile.b32 index 58df6d3f..959da277 100644 --- a/bacnet-stack/lib/makefile.b32 +++ b/bacnet-stack/lib/makefile.b32 @@ -67,8 +67,7 @@ CORE2_SRC = $(BACNET_CORE)\arf.c \ $(BACNET_CORE)\iam\iam_send.c \ $(BACNET_CORE)\ihave.c \ $(BACNET_CORE)\rd.c \ - $(BACNET_CORE)\readprop\rp_server.c \ - $(BACNET_CORE)\readprop\rp_client.c \ + $(BACNET_CORE)\rp.c \ $(BACNET_CORE)\rpm.c \ $(BACNET_CORE)\timesync.c \ $(BACNET_CORE)\whohas.c \ diff --git a/bacnet-stack/ports/at91sam7s/makefile b/bacnet-stack/ports/at91sam7s/makefile index 558ec51d..dffbd869 100644 --- a/bacnet-stack/ports/at91sam7s/makefile +++ b/bacnet-stack/ports/at91sam7s/makefile @@ -77,7 +77,7 @@ CORESRC = $(BACNET_CORE)/npdu.c \ $(BACNET_CORE)/reject.c \ $(BACNET_CORE)/bacapp.c \ $(BACNET_CORE)/datetime.c \ - $(BACNET_CORE)/readprop/rp_server.c \ + $(BACNET_CORE)/rp.c \ $(BACNET_CORE)/wp.c \ $(BACNET_CORE)/dcc.c \ $(BACNET_CORE)/rd.c \ diff --git a/bacnet-stack/ports/atmega168/Makefile b/bacnet-stack/ports/atmega168/Makefile index 44f2bbb8..fc2010cf 100644 --- a/bacnet-stack/ports/atmega168/Makefile +++ b/bacnet-stack/ports/atmega168/Makefile @@ -44,7 +44,7 @@ CORESRC = \ $(BACNET_CORE)/bacdcode/characterstring.c \ $(BACNET_CORE)/iam/iam_server.c \ $(BACNET_CORE)/iam/iam_send.c \ - $(BACNET_CORE)/readprop/rp_server.c \ + $(BACNET_CORE)/rp.c \ $(BACNET_CORE)/whois.c \ $(BACNET_CORE)/bacaddr.c \ $(BACNET_CORE)/abort.c \ diff --git a/bacnet-stack/src/readprop/Makefile b/bacnet-stack/src/readprop/Makefile deleted file mode 100644 index 0388656e..00000000 --- a/bacnet-stack/src/readprop/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -#Makefile to build test case -CC = gcc -BASEDIR = . -#CFLAGS = -Wall -I. -# -g for debugging with gdb -#CFLAGS = -Wall -I. -g -CFLAGS = -Wall -I. -Itest -DTEST -DBIG_ENDIAN=0 -DTEST_READ_PROPERTY -g - -SRCS = bacdcode.c \ - bacint.c \ - bacstr.c \ - bigend.c \ - rp.c \ - test/ctest.c - -OBJS = ${SRCS:.c=.o} - -TARGET = readproperty - -all: ${TARGET} - -${TARGET}: ${OBJS} - ${CC} -o $@ ${OBJS} - -.c.o: - ${CC} -c ${CFLAGS} $*.c -o $@ - -depend: - rm -f .depend - ${CC} -MM ${CFLAGS} *.c >> .depend - -clean: - rm -rf core ${TARGET} $(OBJS) *.bak *.1 *.ini - -include: .depend diff --git a/bacnet-stack/src/readprop/main.c b/bacnet-stack/src/readprop/main.c deleted file mode 100644 index 634092a2..00000000 --- a/bacnet-stack/src/readprop/main.c +++ /dev/null @@ -1,58 +0,0 @@ -/*####COPYRIGHTBEGIN#### - ------------------------------------------- - Copyright (C) 2005 Steve Karg - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to: - The Free Software Foundation, Inc. - 59 Temple Place - Suite 330 - Boston, MA 02111-1307, USA. - - As a special exception, if other files instantiate templates or - use macros or inline functions from this file, or you compile - this file and link it with other works to produce a work based - on this file, this file does not by itself cause the resulting - work to be covered by the GNU General Public License. However - the source code for this file must still be made available in - accordance with section (3) of the GNU General Public License. - - This exception does not invalidate any other reasons why a work - based on this file might be covered by the GNU General Public - License. - ------------------------------------------- -####COPYRIGHTEND####*/ -#include -#include "bacenum.h" -#include "bacdcode.h" -#include "bacdef.h" -#include "rp.h" - -int main(void) -{ - Test *pTest; - bool rc; - - pTest = ct_create("BACnet ReadProperty", NULL); - /* individual tests */ - rc = ct_addTestFunction(pTest, testReadProperty); - assert(rc); - rc = ct_addTestFunction(pTest, testReadPropertyAck); - assert(rc); - - ct_setStream(pTest, stdout); - ct_run(pTest); - (void) ct_report(pTest); - ct_destroy(pTest); - - return 0; -} diff --git a/bacnet-stack/src/readprop/rp_server.c b/bacnet-stack/src/readprop/rp_server.c deleted file mode 100644 index ceb84a07..00000000 --- a/bacnet-stack/src/readprop/rp_server.c +++ /dev/null @@ -1,112 +0,0 @@ -/*####COPYRIGHTBEGIN#### - ------------------------------------------- - Copyright (C) 2005 Steve Karg - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to: - The Free Software Foundation, Inc. - 59 Temple Place - Suite 330 - Boston, MA 02111-1307, USA. - - As a special exception, if other files instantiate templates or - use macros or inline functions from this file, or you compile - this file and link it with other works to produce a work based - on this file, this file does not by itself cause the resulting - work to be covered by the GNU General Public License. However - the source code for this file must still be made available in - accordance with section (3) of the GNU General Public License. - - This exception does not invalidate any other reasons why a work - based on this file might be covered by the GNU General Public - License. - ------------------------------------------- -####COPYRIGHTEND####*/ -#include -#include "bacenum.h" -#include "bacdcode.h" -#include "bacdef.h" -#include "rp.h" - -/* decode the service request only */ -int rp_decode_service_request(uint8_t * apdu, - unsigned apdu_len, BACNET_READ_PROPERTY_DATA * data) -{ - unsigned len = 0; - uint8_t tag_number = 0; - uint32_t len_value_type = 0; - int type = 0; /* for decoding */ - int property = 0; /* for decoding */ - uint32_t array_value = 0; /* for decoding */ - - /* check for value pointers */ - if (apdu_len && data) { - /* Tag 0: Object ID */ - if (!decode_is_context_tag(&apdu[len++], 0)) - return -1; - len += decode_object_id(&apdu[len], &type, &data->object_instance); - data->object_type = (BACNET_OBJECT_TYPE)type; - /* Tag 1: Property ID */ - len += decode_tag_number_and_value(&apdu[len], - &tag_number, &len_value_type); - if (tag_number != 1) - return -1; - len += decode_enumerated(&apdu[len], len_value_type, &property); - data->object_property = (BACNET_PROPERTY_ID)property; - /* Tag 2: Optional Array Index */ - if (len < apdu_len) { - len += decode_tag_number_and_value(&apdu[len], &tag_number, - &len_value_type); - if (tag_number == 2) { - len += decode_unsigned(&apdu[len], len_value_type, - &array_value); - data->array_index = array_value; - } else - data->array_index = BACNET_ARRAY_ALL; - } else - data->array_index = BACNET_ARRAY_ALL; - } - - return (int) len; -} - -int rp_ack_encode_apdu(uint8_t * apdu, - uint8_t invoke_id, BACNET_READ_PROPERTY_DATA * data) -{ - int len = 0; /* length of each encoding */ - int apdu_len = 0; /* total length of the apdu, return value */ - - if (apdu) { - apdu[0] = PDU_TYPE_COMPLEX_ACK; /* complex ACK service */ - apdu[1] = invoke_id; /* original invoke id from request */ - apdu[2] = SERVICE_CONFIRMED_READ_PROPERTY; /* service choice */ - apdu_len = 3; - /* service ack follows */ - apdu_len += encode_context_object_id(&apdu[apdu_len], 0, - data->object_type, data->object_instance); - apdu_len += encode_context_enumerated(&apdu[apdu_len], 1, - data->object_property); - /* context 2 array index is optional */ - if (data->array_index != BACNET_ARRAY_ALL) { - apdu_len += encode_context_unsigned(&apdu[apdu_len], 2, - data->array_index); - } - /* propertyValue */ - apdu_len += encode_opening_tag(&apdu[apdu_len], 3); - for (len = 0; len < data->application_data_len; len++) { - apdu[apdu_len++] = data->application_data[len]; - } - apdu_len += encode_closing_tag(&apdu[apdu_len], 3); - } - - return apdu_len; -} diff --git a/bacnet-stack/src/readprop/rp_test.c b/bacnet-stack/src/readprop/rp_test.c deleted file mode 100644 index cc48a32c..00000000 --- a/bacnet-stack/src/readprop/rp_test.c +++ /dev/null @@ -1,166 +0,0 @@ -/*####COPYRIGHTBEGIN#### - ------------------------------------------- - Copyright (C) 2005 Steve Karg - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to: - The Free Software Foundation, Inc. - 59 Temple Place - Suite 330 - Boston, MA 02111-1307, USA. - - As a special exception, if other files instantiate templates or - use macros or inline functions from this file, or you compile - this file and link it with other works to produce a work based - on this file, this file does not by itself cause the resulting - work to be covered by the GNU General Public License. However - the source code for this file must still be made available in - accordance with section (3) of the GNU General Public License. - - This exception does not invalidate any other reasons why a work - based on this file might be covered by the GNU General Public - License. - ------------------------------------------- -####COPYRIGHTEND####*/ -#include -#include "bacenum.h" -#include "bacdcode.h" -#include "bacdef.h" -#include "rp.h" -#include -#include -#include "ctest.h" - -int rp_decode_apdu(uint8_t * apdu, - unsigned apdu_len, - uint8_t * invoke_id, BACNET_READ_PROPERTY_DATA * data) -{ - int len = 0; - unsigned offset = 0; - - if (!apdu) - return -1; - /* optional checking - most likely was already done prior to this call */ - if (apdu[0] != PDU_TYPE_CONFIRMED_SERVICE_REQUEST) - return -1; - /* apdu[1] = encode_max_segs_max_apdu(0, Device_Max_APDU_Length_Accepted()); */ - *invoke_id = apdu[2]; /* invoke id - filled in by net layer */ - if (apdu[3] != SERVICE_CONFIRMED_READ_PROPERTY) - return -1; - offset = 4; - - if (apdu_len > offset) { - len = rp_decode_service_request(&apdu[offset], - apdu_len - offset, data); - } - - return len; -} - -int rp_ack_decode_apdu(uint8_t * apdu, int apdu_len, /* total length of the apdu */ - uint8_t * invoke_id, BACNET_READ_PROPERTY_DATA * data) -{ - int len = 0; - int offset = 0; - - if (!apdu) - return -1; - /* optional checking - most likely was already done prior to this call */ - if (apdu[0] != PDU_TYPE_COMPLEX_ACK) - return -1; - *invoke_id = apdu[1]; - if (apdu[2] != SERVICE_CONFIRMED_READ_PROPERTY) - return -1; - offset = 3; - if (apdu_len > offset) { - len = rp_ack_decode_service_request(&apdu[offset], - apdu_len - offset, data); - } - - return len; -} - -void testReadPropertyAck(Test * pTest) -{ - uint8_t apdu[480] = { 0 }; - uint8_t apdu2[480] = { 0 }; - int len = 0; - int apdu_len = 0; - uint8_t invoke_id = 1; - uint8_t test_invoke_id = 0; - BACNET_READ_PROPERTY_DATA data; - BACNET_READ_PROPERTY_DATA test_data; - BACNET_OBJECT_TYPE object_type = OBJECT_DEVICE; - uint32_t object_instance = 0; - int object = 0; - - data.object_type = OBJECT_DEVICE; - data.object_instance = 1; - data.object_property = PROP_OBJECT_IDENTIFIER; - data.array_index = BACNET_ARRAY_ALL; - - data.application_data_len = encode_bacnet_object_id(&apdu2[0], - data.object_type, data.object_instance); - data.application_data = &apdu2[0]; - - len = rp_ack_encode_apdu(&apdu[0], invoke_id, &data); - ct_test(pTest, len != 0); - ct_test(pTest, len != -1); - apdu_len = len; - len = rp_ack_decode_apdu(&apdu[0], apdu_len, /* total length of the apdu */ - &test_invoke_id, &test_data); - ct_test(pTest, len != -1); - ct_test(pTest, test_invoke_id == invoke_id); - - ct_test(pTest, test_data.object_type == data.object_type); - ct_test(pTest, test_data.object_instance == data.object_instance); - ct_test(pTest, test_data.object_property == data.object_property); - ct_test(pTest, test_data.array_index == data.array_index); - ct_test(pTest, - test_data.application_data_len == data.application_data_len); - - /* since object property == object_id, decode the application data using - the appropriate decode function */ - len = decode_object_id(test_data.application_data, - &object, &object_instance); - object_type = object; - ct_test(pTest, object_type == data.object_type); - ct_test(pTest, object_instance == data.object_instance); -} - -void testReadProperty(Test * pTest) -{ - uint8_t apdu[480] = { 0 }; - int len = 0; - int apdu_len = 0; - uint8_t invoke_id = 128; - uint8_t test_invoke_id = 0; - BACNET_READ_PROPERTY_DATA data; - BACNET_READ_PROPERTY_DATA test_data; - - data.object_type = OBJECT_DEVICE; - data.object_instance = 1; - data.object_property = PROP_OBJECT_IDENTIFIER; - data.array_index = BACNET_ARRAY_ALL; - len = rp_encode_apdu(&apdu[0], invoke_id, &data); - ct_test(pTest, len != 0); - apdu_len = len; - - len = rp_decode_apdu(&apdu[0], apdu_len, &test_invoke_id, &test_data); - ct_test(pTest, len != -1); - ct_test(pTest, test_data.object_type == data.object_type); - ct_test(pTest, test_data.object_instance == data.object_instance); - ct_test(pTest, test_data.object_property == data.object_property); - ct_test(pTest, test_data.array_index == data.array_index); - - return; -} diff --git a/bacnet-stack/src/readprop/rp.c b/bacnet-stack/src/rp.c similarity index 100% rename from bacnet-stack/src/readprop/rp.c rename to bacnet-stack/src/rp.c diff --git a/bacnet-stack/src/readprop/rp.mak b/bacnet-stack/test/rp.mak similarity index 100% rename from bacnet-stack/src/readprop/rp.mak rename to bacnet-stack/test/rp.mak