Corrected signed value decoding for signed16 and signed8.

This commit is contained in:
skarg
2007-06-06 15:54:24 +00:00
parent 8d557718d2
commit cddb5b7dd3
3 changed files with 15 additions and 11 deletions
+9 -6
View File
@@ -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);
-5
View File
@@ -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);
+6
View File
@@ -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);