From 5674b30a6c4cbe1b69cc84f760e431abed29a9eb Mon Sep 17 00:00:00 2001 From: Stefan Wahren Date: Thu, 6 Feb 2014 19:25:41 +0100 Subject: [PATCH 1/6] Make use of package version from autotools Signed-off-by: Stefan Wahren --- mbus/mbus.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mbus/mbus.c b/mbus/mbus.c index d2575c7..0ff0f8e 100644 --- a/mbus/mbus.c +++ b/mbus/mbus.c @@ -9,6 +9,7 @@ //------------------------------------------------------------------------------ #include "mbus-protocol.h" +#include "../config.h" // // @@ -19,4 +20,4 @@ int mbus_init() {return 0;} /// Return current version of the library /// const char* -mbus_get_current_version() {return "0.8.0";} +mbus_get_current_version() {return VERSION;} From f6dcf6e8d193f5b996461bb0eddc68576203c63a Mon Sep 17 00:00:00 2001 From: Stefan Wahren Date: Thu, 6 Feb 2014 20:15:12 +0100 Subject: [PATCH 2/6] Fixed naming in declaration Signed-off-by: Stefan Wahren --- mbus/mbus-protocol-aux.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mbus/mbus-protocol-aux.h b/mbus/mbus-protocol-aux.h index 52cfc54..703bc23 100755 --- a/mbus/mbus-protocol-aux.h +++ b/mbus/mbus-protocol-aux.h @@ -429,7 +429,7 @@ int mbus_data_fixed_normalize(int medium_unit_byte, long medium_value, char **un * * @return zero when OK */ -int mbus_data_variable_value_decode(mbus_record *record, double *value_out_real, char **value_out_str, int *value_out_str_size); +int mbus_variable_value_decode(mbus_data_record *record, double *value_out_real, char **value_out_str, int *value_out_str_size); /** * Decode units and normalize value using VIF/VIFE (used internally by mbus_vib_unit_normalize) From 3699d25b100d0c7857dcc55d83c8229475b57616 Mon Sep 17 00:00:00 2001 From: Stefan Wahren Date: Sat, 10 May 2014 15:54:17 +0200 Subject: [PATCH 3/6] Fix uninitialized strings --- mbus/mbus-protocol-aux.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mbus/mbus-protocol-aux.c b/mbus/mbus-protocol-aux.c index 4e7f24c..a4d23e3 100755 --- a/mbus/mbus-protocol-aux.c +++ b/mbus/mbus-protocol-aux.c @@ -857,6 +857,7 @@ int mbus_variable_value_decode(mbus_data_record *record, double *value_out_real, MBUS_ERROR("Unable to allocate memory"); return -1; } + *value_out_str[0] = '\0'; *value_out_str_size = 0; result = 0; break; @@ -1362,7 +1363,7 @@ mbus_data_variable_xml_normalized(mbus_data_variable *data) mbus_data_record *record; mbus_record *norm_record; char *buff = NULL, *new_buff = NULL; - char str_encoded[768]; + char str_encoded[768] = ""; size_t len = 0, buff_size = 8192; size_t i; From 0927f23ee7cf319660507d0fefe1a79562ee7aba Mon Sep 17 00:00:00 2001 From: Stefan Wahren Date: Sun, 31 Jan 2016 17:55:09 +0000 Subject: [PATCH 4/6] Let mbus_str_xml_encode return a resultcode --- mbus/mbus-protocol.c | 82 ++++++++++++++++++++++++-------------------- mbus/mbus-protocol.h | 4 +-- 2 files changed, 46 insertions(+), 40 deletions(-) diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index 3ee1461..6aa7529 100755 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -3654,7 +3654,7 @@ mbus_data_error_print(int error) /// Encode string to XML /// //------------------------------------------------------------------------------ -void +int mbus_str_xml_encode(unsigned char *dst, const unsigned char *src, size_t max_len) { size_t i, len; @@ -3663,49 +3663,55 @@ mbus_str_xml_encode(unsigned char *dst, const unsigned char *src, size_t max_len len = 0; if (dst == NULL) - return; - - if (src != NULL) { - while((len+6) < max_len) + return -1; + } + + if (src == NULL) + { + dst[len] = '\0'; + return -2; + } + + while((len+6) < max_len) + { + if (src[i] == '\0') { - if (src[i] == '\0') - { - break; - } - - if (iscntrl(src[i])) - { - // convert all control chars into spaces - dst[len++] = ' '; - } - else - { - switch (src[i]) - { - case '&': - len += snprintf(&dst[len], max_len - len, "&"); - break; - case '<': - len += snprintf(&dst[len], max_len - len, "<"); - break; - case '>': - len += snprintf(&dst[len], max_len - len, ">"); - break; - case '"': - len += snprintf(&dst[len], max_len - len, """); - break; - default: - dst[len++] = src[i]; - break; - } - } - - i++; + break; } + + if (iscntrl(src[i])) + { + // convert all control chars into spaces + dst[len++] = ' '; + } + else + { + switch (src[i]) + { + case '&': + len += snprintf(&dst[len], max_len - len, "&"); + break; + case '<': + len += snprintf(&dst[len], max_len - len, "<"); + break; + case '>': + len += snprintf(&dst[len], max_len - len, ">"); + break; + case '"': + len += snprintf(&dst[len], max_len - len, """); + break; + default: + dst[len++] = src[i]; + break; + } + } + + i++; } dst[len] = '\0'; + return 0; } //------------------------------------------------------------------------------ diff --git a/mbus/mbus-protocol.h b/mbus/mbus-protocol.h index 0c4d7d1..60b7424 100755 --- a/mbus/mbus-protocol.h +++ b/mbus/mbus-protocol.h @@ -498,7 +498,7 @@ 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) +// 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" @@ -569,7 +569,7 @@ mbus_slave_data *mbus_slave_data_get(size_t i); // // XML generating functions // -void mbus_str_xml_encode(unsigned char *dst, const unsigned char *src, size_t max_len); +int mbus_str_xml_encode(unsigned char *dst, const unsigned char *src, size_t max_len); char *mbus_data_xml(mbus_frame_data *data); char *mbus_data_variable_xml(mbus_data_variable *data); char *mbus_data_fixed_xml(mbus_data_fixed *data); From 04eae740b48cfbd84476d43dcbbb6e0528567337 Mon Sep 17 00:00:00 2001 From: Stefan Wahren Date: Sun, 31 Jan 2016 18:00:02 +0000 Subject: [PATCH 5/6] Add product strings of Carlo Gavazzi EM21,EM24,EM33 --- mbus/mbus-protocol.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index 6aa7529..b9ec096 100755 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -956,6 +956,28 @@ mbus_data_product_name(mbus_data_variable_header *header) } } } + else if (manufacturer == mbus_manufacturer_id("GAV")) + { + if (header->medium == MBUS_VARIABLE_DATA_MEDIUM_ELECTRICITY) + { + switch (header->version) + { + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + strcpy(buff,"Carlo Gavazzi EM24"); + break; + case 0x39: + case 0x3A: + strcpy(buff,"Carlo Gavazzi EM21"); + break; + case 0x40: + strcpy(buff,"Carlo Gavazzi EM33"); + break; + } + } + } else if (manufacturer == mbus_manufacturer_id("GMC")) { switch (header->version) From db40010b933e3fd16cd2da6e2b18e4585e987697 Mon Sep 17 00:00:00 2001 From: Stefan Wahren Date: Sun, 31 Jan 2016 18:09:21 +0000 Subject: [PATCH 6/6] Add product strings of Berg DCMi, BLMi and BMB-10S0 --- mbus/mbus-protocol.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index b9ec096..da3b9aa 100755 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -893,6 +893,30 @@ mbus_data_product_name(mbus_data_variable_header *header) break; } } + else if (manufacturer == mbus_manufacturer_id("BEC")) + { + if (header->medium == MBUS_VARIABLE_DATA_MEDIUM_ELECTRICITY) + { + switch (header->version) + { + case 0x00: + strcpy(buff,"Berg DCMi"); + break; + case 0x07: + strcpy(buff,"Berg BLMi"); + break; + } + } + else if (header->medium == MBUS_VARIABLE_DATA_MEDIUM_UNKNOWN) + { + switch (header->version) + { + case 0x71: + strcpy(buff, "Berg BMB-10S0"); + break; + } + } + } else if (manufacturer == mbus_manufacturer_id("EFE")) { switch (header->version)