From 8fd56355854fea9d2721098d3467bfb6e418ce55 Mon Sep 17 00:00:00 2001 From: strongly-typed Date: Fri, 13 May 2016 20:13:01 +0200 Subject: [PATCH 1/3] Print name of frame type instead of number. --- mbus/mbus-protocol.c | 39 ++++++++++++++++++++++++++++++++++++++- mbus/mbus-protocol.h | 1 + 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index 546541f9..20437a56 100755 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -3511,7 +3511,7 @@ mbus_frame_print(mbus_frame *frame) return -2; } - printf("%s: Dumping M-Bus frame [type %d, %d bytes]: ", __PRETTY_FUNCTION__, iter->type, len); + printf("%s: Dumping M-Bus frame [type %s, %d bytes]: ", __PRETTY_FUNCTION__, mbus_frame_type_print(iter->type), len); for (i = 0; i < len; i++) { printf("%.2X ", data_buff[i]); @@ -3522,6 +3522,43 @@ mbus_frame_print(mbus_frame *frame) return 0; } +//------------------------------------------------------------------------------ +/// Return a string containing the frame type +//------------------------------------------------------------------------------ +const char * +mbus_frame_type_print(const int type) +{ + static char buff[128]; + + switch (type) + { + case MBUS_FRAME_TYPE_ANY: + snprintf(buff, sizeof(buff), "Any"); + break; + + case MBUS_FRAME_TYPE_ACK: + snprintf(buff, sizeof(buff), "Ack"); + break; + + case MBUS_FRAME_TYPE_SHORT: + snprintf(buff, sizeof(buff), "Short"); + break; + + case MBUS_FRAME_TYPE_CONTROL: + snprintf(buff, sizeof(buff), "Control"); + break; + + case MBUS_FRAME_TYPE_LONG: + snprintf(buff, sizeof(buff), "Long"); + break; + + default: + snprintf(buff, sizeof(buff), "unknown"); + } + + return buff; +} + //------------------------------------------------------------------------------ /// /// Print the data part of a frame. diff --git a/mbus/mbus-protocol.h b/mbus/mbus-protocol.h index 60b7424b..323e5c58 100755 --- a/mbus/mbus-protocol.h +++ b/mbus/mbus-protocol.h @@ -584,6 +584,7 @@ char *mbus_frame_xml(mbus_frame *frame); // Debug/dump // int mbus_frame_print(mbus_frame *frame); +const char * mbus_frame_type_print(const int type); int mbus_frame_data_print(mbus_frame_data *data); int mbus_data_fixed_print(mbus_data_fixed *data); int mbus_data_error_print(int error); From 36bf5277fec950fbde1097bf1e0fdc59e1cb0ca1 Mon Sep 17 00:00:00 2001 From: strongly-typed Date: Fri, 13 May 2016 22:47:25 +0200 Subject: [PATCH 2/3] Return zero when print function was successful. --- mbus/mbus-protocol.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index 20437a56..0d96b40c 100755 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -3686,6 +3686,8 @@ mbus_data_variable_print(mbus_data_variable *data) printf("\n"); } + + return 0; } return -1; @@ -3726,6 +3728,8 @@ mbus_data_fixed_print(mbus_data_fixed *data) mbus_data_int_decode(data->cnt2_val, 4, &val); printf("%s: Counter2 = %d\n", __PRETTY_FUNCTION__, val); } + + return 0; } return -1; @@ -3761,7 +3765,7 @@ mbus_data_error_print(int error) { printf("%s: Error = %d\n", __PRETTY_FUNCTION__, error); - return -1; + return 0; } //------------------------------------------------------------------------------ From f53e3770f3eab339fcd2fb044345f0a2cd2f4536 Mon Sep 17 00:00:00 2001 From: strongly-typed Date: Fri, 13 May 2016 22:48:49 +0200 Subject: [PATCH 3/3] Set error_str for errors in mbus_frame_pack. --- mbus/mbus-protocol.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index 0d96b40c..e1415801 100755 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -3279,11 +3279,15 @@ mbus_frame_pack(mbus_frame *frame, unsigned char *data, size_t data_size) { if (mbus_frame_calc_length(frame) == -1) { + snprintf(error_str, sizeof(error_str), "Length calculation of frame failed"); + return -2; } if (mbus_frame_calc_checksum(frame) == -1) { + snprintf(error_str, sizeof(error_str), "Checksum calculation of frame failed"); + return -3; } @@ -3293,6 +3297,8 @@ mbus_frame_pack(mbus_frame *frame, unsigned char *data, size_t data_size) if (data_size < MBUS_FRAME_ACK_BASE_SIZE) { + snprintf(error_str, sizeof(error_str), "data_size (%d) < MBUS_FRAME_ACK_BASE_SIZE (%d)", data_size, MBUS_FRAME_ACK_BASE_SIZE); + return -4; } @@ -3304,6 +3310,8 @@ mbus_frame_pack(mbus_frame *frame, unsigned char *data, size_t data_size) if (data_size < MBUS_FRAME_SHORT_BASE_SIZE) { + snprintf(error_str, sizeof(error_str), "data_size (%d) < MBUS_FRAME_SHORT_BASE_SIZE (%d)", data_size, MBUS_FRAME_SHORT_BASE_SIZE); + return -4; } @@ -3319,6 +3327,8 @@ mbus_frame_pack(mbus_frame *frame, unsigned char *data, size_t data_size) if (data_size < MBUS_FRAME_CONTROL_BASE_SIZE) { + snprintf(error_str, sizeof(error_str), "data_size (%d) < MBUS_FRAME_CONTROL_BASE_SIZE (%d)", data_size, MBUS_FRAME_CONTROL_BASE_SIZE); + return -4; } @@ -3340,6 +3350,8 @@ mbus_frame_pack(mbus_frame *frame, unsigned char *data, size_t data_size) if (data_size < frame->data_size + MBUS_FRAME_LONG_BASE_SIZE) { + snprintf(error_str, sizeof(error_str), "data_size (%d) < frame->data_size + MBUS_FRAME_LONG_BASE_SIZE (%d + %d = %d)", data_size, frame->data_size, MBUS_FRAME_LONG_BASE_SIZE, frame->data_size + MBUS_FRAME_LONG_BASE_SIZE); + return -4; } @@ -3363,6 +3375,8 @@ mbus_frame_pack(mbus_frame *frame, unsigned char *data, size_t data_size) return offset; default: + snprintf(error_str, sizeof(error_str), "frame->type (%d) in unknown.", frame->type); + return -5; } }