From 7bb2149ea0de8d20b7e1ab0fcd2b1a6aeb11fa80 Mon Sep 17 00:00:00 2001 From: skarg Date: Thu, 7 Apr 2011 17:21:09 +0000 Subject: [PATCH] Refactored the example BACnet File object and file handler. Corrected bacfile_name compiler error. --- bacnet-stack/demo/handler/h_arf_a.c | 20 +------------------ bacnet-stack/demo/object/bacfile.c | 30 +++++++++++++++++++++++++++++ bacnet-stack/demo/object/bacfile.h | 5 ++++- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/bacnet-stack/demo/handler/h_arf_a.c b/bacnet-stack/demo/handler/h_arf_a.c index 07983a9b..2ef8ce4d 100644 --- a/bacnet-stack/demo/handler/h_arf_a.c +++ b/bacnet-stack/demo/handler/h_arf_a.c @@ -56,8 +56,6 @@ void handler_atomic_read_file_ack( { int len = 0; BACNET_ATOMIC_READ_FILE_DATA data; - FILE *pFile = NULL; - char *pFilename = NULL; uint32_t instance = 0; (void) src; @@ -70,23 +68,7 @@ void handler_atomic_read_file_ack( if ((len > 0) && (instance <= BACNET_MAX_INSTANCE)) { /* write the data received to the file specified */ if (data.access == FILE_STREAM_ACCESS) { - pFilename = bacfile_name(instance); - if (pFilename) { - pFile = fopen(pFilename, "rb"); - if (pFile) { - (void) fseek(pFile, data.type.stream.fileStartPosition, - SEEK_SET); - if (fwrite(octetstring_value(&data.fileData), - octetstring_length(&data.fileData), 1, - pFile) != 1) { -#if PRINT_ENABLED - fprintf(stderr, "Failed to write to %s (%lu)!\n", - pFilename, (unsigned long) instance); -#endif - } - fclose(pFile); - } - } + bacfile_read_ack_stream_data(instance, &data); } else if (data.access == FILE_RECORD_ACCESS) { /* FIXME: add handling for Record Access */ } diff --git a/bacnet-stack/demo/object/bacfile.c b/bacnet-stack/demo/object/bacfile.c index bd15980f..48509b59 100644 --- a/bacnet-stack/demo/object/bacfile.c +++ b/bacnet-stack/demo/object/bacfile.c @@ -478,6 +478,36 @@ bool bacfile_write_stream_data( return found; } +bool bacfile_read_ack_stream_data( + uint32_t instance, + BACNET_ATOMIC_READ_FILE_DATA * data) +{ + bool found = false; + FILE *pFile = NULL; + char *pFilename = NULL; + + pFilename = bacfile_name(instance); + if (pFilename) { + found = true; + pFile = fopen(pFilename, "rb"); + if (pFile) { + (void) fseek(pFile, data->type.stream.fileStartPosition, + SEEK_SET); + if (fwrite(octetstring_value(&data->fileData), + octetstring_length(&data->fileData), 1, + pFile) != 1) { + #if PRINT_ENABLED + fprintf(stderr, "Failed to write to %s (%lu)!\n", + pFilename, (unsigned long) instance); + #endif + } + fclose(pFile); + } + } + + return found; +} + void bacfile_init( void) { diff --git a/bacnet-stack/demo/object/bacfile.h b/bacnet-stack/demo/object/bacfile.h index 53a02595..70b675db 100644 --- a/bacnet-stack/demo/object/bacfile.h +++ b/bacnet-stack/demo/object/bacfile.h @@ -76,6 +76,9 @@ extern "C" { /* handler ACK helper */ bool bacfile_read_data( BACNET_ATOMIC_READ_FILE_DATA * data); + bool bacfile_read_ack_stream_data( + uint32_t instance, + BACNET_ATOMIC_READ_FILE_DATA * data); bool bacfile_write_stream_data( BACNET_ATOMIC_WRITE_FILE_DATA * data); @@ -97,6 +100,6 @@ extern "C" { #endif /* __cplusplus */ #define FILE_OBJ_FUNCTIONS \ OBJECT_FILE, bacfile_init, bacfile_count, bacfile_index_to_instance, \ - bacfile_valid_instance, bacfile_name, bacfile_read_property, \ + bacfile_valid_instance, bacfile_object_name, bacfile_read_property, \ bacfile_write_property, BACfile_Property_Lists, NULL #endif