From b1063db3bcd0ad3e178098dd46dc6b6c18b41132 Mon Sep 17 00:00:00 2001 From: Stefan Wahren Date: Sat, 2 Mar 2013 18:03:31 +0100 Subject: [PATCH] replace magic numbers with defines fix MBUS_MAX_PRIMARY_SLAVES to 250 --- bin/mbus-serial-scan.c | 2 +- bin/mbus-tcp-scan.c | 2 +- mbus/mbus-protocol-aux.c | 15 ++++++++------- mbus/mbus-protocol.c | 26 ++++++++++++++------------ mbus/mbus-protocol.h | 11 ++++++++--- 5 files changed, 32 insertions(+), 24 deletions(-) diff --git a/bin/mbus-serial-scan.c b/bin/mbus-serial-scan.c index f4bae6b..29eaa2b 100755 --- a/bin/mbus-serial-scan.c +++ b/bin/mbus-serial-scan.c @@ -79,7 +79,7 @@ main(int argc, char **argv) if (debug) printf("Scanning primary addresses:\n"); - for (address = 0; address <= 250; address++) + for (address = 0; address <= MBUS_MAX_PRIMARY_SLAVES; address++) { mbus_frame reply; diff --git a/bin/mbus-tcp-scan.c b/bin/mbus-tcp-scan.c index 44c7959..31d4341 100755 --- a/bin/mbus-tcp-scan.c +++ b/bin/mbus-tcp-scan.c @@ -62,7 +62,7 @@ main(int argc, char **argv) if (debug) printf("Scanning primary addresses:\n"); - for (address = 0; address <= 250; address++) + for (address = 0; address <= MBUS_MAX_PRIMARY_SLAVES; address++) { mbus_frame reply; diff --git a/mbus/mbus-protocol-aux.c b/mbus/mbus-protocol-aux.c index 8340cbf..0480930 100755 --- a/mbus/mbus-protocol-aux.c +++ b/mbus/mbus-protocol-aux.c @@ -787,8 +787,8 @@ int mbus_variable_value_decode(mbus_data_record *record, double *value_out_real, MBUS_DEBUG("coding = 0x%02X \n", record->drh.dib.dif); // ignore extension bit - vif = (record->drh.vib.vif & 0x7F); - vife = (record->drh.vib.vife[0] & 0x7F); + vif = (record->drh.vib.vif & MBUS_DIB_VIF_WITHOUT_EXTENSION); + vife = (record->drh.vib.vife[0] & MBUS_DIB_VIF_WITHOUT_EXTENSION); switch (record->drh.dib.dif & 0x0F) { @@ -1004,7 +1004,7 @@ mbus_vib_unit_normalize(mbus_value_information_block *vib, double value, char ** return -1; } - int code = ((vib->vife[0]) & 0x7f) | 0x100; + int code = ((vib->vife[0]) & MBUS_DIB_VIF_WITHOUT_EXTENSION) | 0x100; if (mbus_vif_unit_normalize(code, value, unit_out, value_out, quantity_out) != 0) { MBUS_ERROR("%s: Error mbus_vif_unit_normalize\n", __PRETTY_FUNCTION__); @@ -1019,7 +1019,7 @@ mbus_vib_unit_normalize(mbus_value_information_block *vib, double value, char ** return -1; } - int code = ((vib->vife[0]) & 0x7f) | 0x200; + int code = ((vib->vife[0]) & MBUS_DIB_VIF_WITHOUT_EXTENSION) | 0x200; if (0 != mbus_vif_unit_normalize(code, value, unit_out, value_out, quantity_out)) { MBUS_ERROR("%s: Error mbus_vif_unit_normalize\n", __PRETTY_FUNCTION__); @@ -1036,7 +1036,7 @@ mbus_vib_unit_normalize(mbus_value_information_block *vib, double value, char ** } else { - int code = (vib->vif) & 0x7f; + int code = (vib->vif) & MBUS_DIB_VIF_WITHOUT_EXTENSION; if (0 != mbus_vif_unit_normalize(code, value, unit_out, value_out, quantity_out)) { MBUS_ERROR("%s: Error mbus_vif_unit_normalize\n", __PRETTY_FUNCTION__); @@ -1191,9 +1191,10 @@ mbus_parse_variable_record(mbus_data_record *data) return NULL; } - if (data->drh.dib.dif == 0x0F || data->drh.dib.dif == 0x1F) /* MBUS_DIB_DIF_VENDOR_SPECIFIC */ + if ((data->drh.dib.dif == MBUS_DIB_DIF_MANUFACTURER_SPECIFIC) || + (data->drh.dib.dif == MBUS_DIB_DIF_MORE_RECORDS_FOLLOW)) /* MBUS_DIB_DIF_VENDOR_SPECIFIC */ { - if (data->drh.dib.dif == 0x1F) + if (data->drh.dib.dif == MBUS_DIB_DIF_MORE_RECORDS_FOLLOW) { record->function_medium = strdup("More records follow"); } diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index 106c217..69917ca 100755 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -1619,7 +1619,7 @@ mbus_vif_unit_lookup(u_char vif) static char buff[256]; int n; - switch (vif & 0x7F) // ignore the extension bit in this selection + switch (vif & MBUS_DIB_VIF_WITHOUT_EXTENSION) // ignore the extension bit in this selection { // E000 0nnn Energy 10(nnn-3) W case 0x00: @@ -2175,8 +2175,8 @@ mbus_data_record_decode(mbus_data_record *record) u_char vif, vife; // ignore extension bit - vif = (record->drh.vib.vif & 0x7F); - vife = (record->drh.vib.vife[0] & 0x7F); + vif = (record->drh.vib.vif & MBUS_DIB_VIF_WITHOUT_EXTENSION); + vife = (record->drh.vib.vife[0] & MBUS_DIB_VIF_WITHOUT_EXTENSION); if (record) { @@ -2691,9 +2691,10 @@ mbus_data_variable_parse(mbus_frame *frame, mbus_data_variable *data) // DIF record->drh.dib.dif = frame->data[i]; - if (record->drh.dib.dif == 0x0F || record->drh.dib.dif == 0x1F) + if ((record->drh.dib.dif == MBUS_DIB_DIF_MANUFACTURER_SPECIFIC) || + (record->drh.dib.dif == MBUS_DIB_DIF_MORE_RECORDS_FOLLOW)) { - if ((record->drh.dib.dif & 0xFF) == 0x1F) + if ((record->drh.dib.dif & 0xFF) == MBUS_DIB_DIF_MORE_RECORDS_FOLLOW) { data->more_records_follow = 1; } @@ -2733,7 +2734,7 @@ mbus_data_variable_parse(mbus_frame *frame, mbus_data_variable *data) // VIF record->drh.vib.vif = frame->data[i++]; - if ((record->drh.vib.vif & 0x7F) == 0x7C) + if ((record->drh.vib.vif & MBUS_DIB_VIF_WITHOUT_EXTENSION) == 0x7C) { // variable length VIF in ASCII format int var_vif_len; @@ -3214,7 +3215,8 @@ mbus_data_variable_print(mbus_data_variable *data) printf("DIF.Data = %.2X\n", record->drh.dib.dif & 0x0F); // VENDOR SPECIFIC - if (record->drh.dib.dif == 0x0F || record->drh.dib.dif == 0x1F) //MBUS_DIB_DIF_VENDOR_SPECIFIC) + if ((record->drh.dib.dif == MBUS_DIB_DIF_MANUFACTURER_SPECIFIC) || + (record->drh.dib.dif == MBUS_DIB_DIF_MORE_RECORDS_FOLLOW)) //MBUS_DIB_DIF_VENDOR_SPECIFIC { printf("%s: VENDOR DATA [size=%zd] = ", __PRETTY_FUNCTION__, record->data_len); for (j = 0; j < record->data_len; j++) @@ -3223,7 +3225,7 @@ mbus_data_variable_print(mbus_data_variable *data) } printf("\n"); - if (record->drh.dib.dif == 0x1F) + if (record->drh.dib.dif == MBUS_DIB_DIF_MORE_RECORDS_FOLLOW) { printf("%s: More records follow in next telegram\n", __PRETTY_FUNCTION__); } @@ -3247,7 +3249,7 @@ mbus_data_variable_print(mbus_data_variable *data) // VIF printf("VIF = %.2X\n", record->drh.vib.vif); printf("VIF.Extension = %s\n", (record->drh.vib.vif & MBUS_DIB_VIF_EXTENSION_BIT) ? "Yes":"No"); - printf("VIF.Value = %.2X\n", record->drh.vib.vif & 0x7F); + printf("VIF.Value = %.2X\n", record->drh.vib.vif & MBUS_DIB_VIF_WITHOUT_EXTENSION); // VIFE for (j = 0; j < record->drh.vib.nvife; j++) @@ -3256,7 +3258,7 @@ mbus_data_variable_print(mbus_data_variable *data) printf("VIFE[%zd] = %.2X\n", j, vife); printf("VIFE[%zd].Extension = %s\n", j, (vife & MBUS_DIB_VIF_EXTENSION_BIT) ? "Yes" : "No"); - printf("VIFE[%zd].Value = %.2X\n", j, vife & 0x7F); + printf("VIFE[%zd].Value = %.2X\n", j, vife & MBUS_DIB_VIF_WITHOUT_EXTENSION); } printf("\n"); @@ -3468,12 +3470,12 @@ mbus_data_variable_record_xml(mbus_data_record *record, int record_cnt, int fram " \n", record_cnt); } - if (record->drh.dib.dif == 0x0F) // MBUS_DIB_DIF_VENDOR_SPECIFIC + if (record->drh.dib.dif == MBUS_DIB_DIF_MANUFACTURER_SPECIFIC) // MBUS_DIB_DIF_VENDOR_SPECIFIC { len += snprintf(&buff[len], sizeof(buff) - len, " Manufacturer specific\n"); } - else if (record->drh.dib.dif == 0x1F) + else if (record->drh.dib.dif == MBUS_DIB_DIF_MORE_RECORDS_FOLLOW) { len += snprintf(&buff[len], sizeof(buff) - len, " More records follow\n"); diff --git a/mbus/mbus-protocol.h b/mbus/mbus-protocol.h index 7eb8ecf..ac5069b 100755 --- a/mbus/mbus-protocol.h +++ b/mbus/mbus-protocol.h @@ -123,8 +123,13 @@ typedef struct _mbus_slave_data { // // DATA RECORDS -#define MBUS_DIB_DIF_EXTENSION_BIT 0x80 -#define MBUS_DIB_VIF_EXTENSION_BIT 0x80 +#define MBUS_DIB_DIF_WITHOUT_EXTENSION 0x7F +#define MBUS_DIB_DIF_EXTENSION_BIT 0x80 +#define MBUS_DIB_VIF_WITHOUT_EXTENSION 0x7F +#define MBUS_DIB_VIF_EXTENSION_BIT 0x80 +#define MBUS_DIB_DIF_MANUFACTURER_SPECIFIC 0x0F +#define MBUS_DIB_DIF_MORE_RECORDS_FOLLOW 0x1F + typedef struct _mbus_data_information_block { @@ -313,7 +318,7 @@ typedef struct _mbus_data_secondary_address { // // // -#define MBUS_MAX_PRIMARY_SLAVES 256 +#define MBUS_MAX_PRIMARY_SLAVES 250 // // Control field