diff --git a/mbus/mbus-protocol-aux.c b/mbus/mbus-protocol-aux.c index d78e187..5ee565d 100755 --- a/mbus/mbus-protocol-aux.c +++ b/mbus/mbus-protocol-aux.c @@ -1373,6 +1373,8 @@ mbus_data_variable_xml_normalized(mbus_data_variable *data) if (buff == NULL) return NULL; + len += snprintf(&buff[len], buff_size - len, MBUS_XML_PROCESSING_INSTRUCTION); + len += snprintf(&buff[len], buff_size - len, "\n\n"); len += snprintf(&buff[len], buff_size - len, "%s", mbus_data_variable_header_xml(&(data->header))); diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index 8bd5e06..423e3b0 100755 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -3779,6 +3779,8 @@ mbus_data_variable_xml(mbus_data_variable *data) if (buff == NULL) return NULL; + len += snprintf(&buff[len], buff_size - len, MBUS_XML_PROCESSING_INSTRUCTION); + len += snprintf(&buff[len], buff_size - len, "\n\n"); len += snprintf(&buff[len], buff_size - len, "%s", @@ -3829,6 +3831,8 @@ mbus_data_fixed_xml(mbus_data_fixed *data) if (buff == NULL) return NULL; + len += snprintf(&buff[len], buff_size - len, MBUS_XML_PROCESSING_INSTRUCTION); + len += snprintf(&buff[len], buff_size - len, "\n\n"); len += snprintf(&buff[len], buff_size - len, " \n"); @@ -3902,6 +3906,7 @@ mbus_data_error_xml(int error) if (buff == NULL) return NULL; + len += snprintf(&buff[len], buff_size - len, MBUS_XML_PROCESSING_INSTRUCTION); len += snprintf(&buff[len], buff_size - len, "\n\n"); len += snprintf(&buff[len], buff_size - len, " \n"); @@ -4003,6 +4008,8 @@ mbus_frame_xml(mbus_frame *frame) // is available (frame_cnt = -1 => not included in output) frame_cnt = (frame->next == NULL) ? -1 : 0; + len += snprintf(&buff[len], buff_size - len, MBUS_XML_PROCESSING_INSTRUCTION); + len += snprintf(&buff[len], buff_size - len, "\n\n"); // only print the header info for the first frame (should be diff --git a/mbus/mbus-protocol.h b/mbus/mbus-protocol.h index 3fb39f0..0c4d7d1 100755 --- a/mbus/mbus-protocol.h +++ b/mbus/mbus-protocol.h @@ -498,6 +498,10 @@ typedef struct _mbus_data_secondary_address { // unsigned int mbus_manufacturer_id(char *manufacturer); +// Since libmbus writes some special characters (ASCII > 0x7F) into the XML output (e.g. °C for centigrade == ASCII 0xB0) +// it is useful to attach the appropriate code page for postprocessing. +#define MBUS_XML_PROCESSING_INSTRUCTION "\n" + // // Event callback functions //