From cddb5b7dd398d4dc709111af33991a3b52b4a7be Mon Sep 17 00:00:00 2001 From: skarg Date: Wed, 6 Jun 2007 15:54:24 +0000 Subject: [PATCH] Corrected signed value decoding for signed16 and signed8. --- bacnet-stack/awf.c | 15 +++++++++------ bacnet-stack/bacdcode.c | 5 ----- bacnet-stack/demo/handler/h_awf.c | 6 ++++++ 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/bacnet-stack/awf.c b/bacnet-stack/awf.c index 2422210b..7ab8ef9b 100644 --- a/bacnet-stack/awf.c +++ b/bacnet-stack/awf.c @@ -90,6 +90,8 @@ int awf_decode_service_request(uint8_t * apdu, int tag_len = 0; uint8_t tag_number = 0; uint32_t len_value_type = 0; + int32_t signed_value = 0; + uint32_t unsigned_value = 0; int type = 0; /* for decoding */ /* check for value pointers */ @@ -111,8 +113,8 @@ int awf_decode_service_request(uint8_t * apdu, len += tag_len; if (tag_number != BACNET_APPLICATION_TAG_SIGNED_INT) return -1; - len += decode_signed(&apdu[len], - len_value_type, &data->type.stream.fileStartPosition); + len += decode_signed(&apdu[len], len_value_type, &signed_value); + data->type.stream.fileStartPosition = signed_value; /* fileData */ tag_len = decode_tag_number_and_value(&apdu[len], &tag_number, &len_value_type); @@ -135,16 +137,17 @@ int awf_decode_service_request(uint8_t * apdu, len += tag_len; if (tag_number != BACNET_APPLICATION_TAG_SIGNED_INT) return -1; - len += decode_signed(&apdu[len], - len_value_type, &data->type.record.fileStartRecord); + len += decode_signed(&apdu[len], len_value_type, &signed_value); + data->type.record.fileStartRecord = signed_value; /* returnedRecordCount */ tag_len = decode_tag_number_and_value(&apdu[len], &tag_number, &len_value_type); len += tag_len; if (tag_number != BACNET_APPLICATION_TAG_UNSIGNED_INT) return -1; - len += decode_unsigned(&apdu[len], - len_value_type, &data->type.record.returnedRecordCount); + len += decode_unsigned(&apdu[len], len_value_type, + &unsigned_value); + data->type.record.returnedRecordCount = unsigned_value; /* fileData */ tag_len = decode_tag_number_and_value(&apdu[len], &tag_number, &len_value_type); diff --git a/bacnet-stack/bacdcode.c b/bacnet-stack/bacdcode.c index 85f3ad89..080afc1b 100644 --- a/bacnet-stack/bacdcode.c +++ b/bacnet-stack/bacdcode.c @@ -1371,18 +1371,13 @@ int encode_context_enumerated(uint8_t * apdu, int tag_number, int value) /* returns the number of apdu bytes consumed */ int decode_signed(uint8_t * apdu, uint32_t len_value, int32_t * value) { - int8_t signed8_value = 0; - int16_t signed16_value = 0; - if (value) { switch (len_value) { case 1: decode_signed8(&apdu[0], value); - *value = signed8_value; break; case 2: decode_signed16(&apdu[0], value); - *value = signed16_value; break; case 3: decode_signed24(&apdu[0], value); diff --git a/bacnet-stack/demo/handler/h_awf.c b/bacnet-stack/demo/handler/h_awf.c index 22f829f9..2124b3d4 100644 --- a/bacnet-stack/demo/handler/h_awf.c +++ b/bacnet-stack/demo/handler/h_awf.c @@ -30,6 +30,7 @@ #include "config.h" #include "txbuf.h" #include "bacdef.h" +#include "bacstr.h" #include "bacerror.h" #include "bacdcode.h" #include "apdu.h" @@ -111,6 +112,11 @@ void handler_atomic_write_file(uint8_t * service_request, error = true; } else if (data.access == FILE_STREAM_ACCESS) { if (bacfile_write_stream_data(&data)) { +#if PRINT_ENABLED + fprintf(stderr, "AWF: Stream offset %d, %d bytes\n", + data.type.stream.fileStartPosition, + octetstring_length(&data.fileData)); +#endif len = awf_ack_encode_apdu(&Handler_Transmit_Buffer [pdu_len], service_data->invoke_id, &data);