diff --git a/bin/mbus-serial-request-data.c b/bin/mbus-serial-request-data.c index 20e3fa6..95559eb 100755 --- a/bin/mbus-serial-request-data.c +++ b/bin/mbus-serial-request-data.c @@ -56,6 +56,7 @@ main(int argc, char **argv) char *device, *addr_str, *xml_result; int address; + char fcb; long baudrate = 9600; memset((void *)&reply, 0, sizeof(mbus_frame)); @@ -159,14 +160,16 @@ main(int argc, char **argv) // else MBUS_PROBE_SINGLE address = MBUS_ADDRESS_NETWORK_LAYER; + fcb = 0; } else { // primary addressing address = atoi(addr_str); + fcb = 1; } - if (mbus_send_request_frame(handle, address) == -1) + if (mbus_send_request_frame(handle, address, fcb) == -1) { fprintf(stderr, "Failed to send M-Bus request frame.\n"); mbus_disconnect(handle); diff --git a/bin/mbus-serial-select-secondary.c b/bin/mbus-serial-select-secondary.c index 4c1066b..9fbeec0 100755 --- a/bin/mbus-serial-select-secondary.c +++ b/bin/mbus-serial-select-secondary.c @@ -96,7 +96,7 @@ main(int argc, char **argv) if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK) { - if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER) == -1) + if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 0) == -1) { fprintf(stderr,"Failed to send request to selected secondary device: %s\n", mbus_error_str()); return 1; diff --git a/bin/mbus-tcp-request-data.c b/bin/mbus-tcp-request-data.c index 91ff0c0..e4dc7f9 100755 --- a/bin/mbus-tcp-request-data.c +++ b/bin/mbus-tcp-request-data.c @@ -102,7 +102,7 @@ main(int argc, char **argv) } // else MBUS_PROBE_SINGLE - if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER) == -1) + if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 0) == -1) { fprintf(stderr, "Failed to send M-Bus request frame.\n"); return 1; @@ -113,7 +113,7 @@ main(int argc, char **argv) // primary addressing address = atoi(addr_str); - if (mbus_send_request_frame(handle, address) == -1) + if (mbus_send_request_frame(handle, address, 1) == -1) { fprintf(stderr, "Failed to send M-Bus request frame.\n"); return 1; diff --git a/bin/mbus-tcp-select-secondary.c b/bin/mbus-tcp-select-secondary.c index 92605c6..42a6058 100755 --- a/bin/mbus-tcp-select-secondary.c +++ b/bin/mbus-tcp-select-secondary.c @@ -87,7 +87,7 @@ main(int argc, char **argv) if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK) { - if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER) == -1) + if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 0) == -1) { fprintf(stderr,"Failed to send request to selected secondary device: %s\n", mbus_error_str()); return 1; diff --git a/mbus/mbus-protocol-aux.c b/mbus/mbus-protocol-aux.c index 4e7f24c..3f303ca 100755 --- a/mbus/mbus-protocol-aux.c +++ b/mbus/mbus-protocol-aux.c @@ -1872,7 +1872,7 @@ mbus_send_application_reset_frame(mbus_handle * handle, int address, int subcode // send a request packet to from master to slave //------------------------------------------------------------------------------ int -mbus_send_request_frame(mbus_handle * handle, int address) +mbus_send_request_frame(mbus_handle * handle, int address, char frame_count_bit) { int retval = 0; mbus_frame *frame; @@ -1894,6 +1894,11 @@ mbus_send_request_frame(mbus_handle * handle, int address) frame->control = MBUS_CONTROL_MASK_REQ_UD2 | MBUS_CONTROL_MASK_DIR_M2S; frame->address = address; + if (frame_count_bit) + { + frame->control |= MBUS_CONTROL_MASK_FCB; + } + if (mbus_send_frame(handle, frame) == -1) { MBUS_ERROR("%s: failed to send mbus frame.\n", __PRETTY_FUNCTION__); @@ -2241,7 +2246,7 @@ mbus_probe_secondary_address(mbus_handle *handle, const char *mask, char *matchi if (ret == MBUS_PROBE_SINGLE) { /* send a data request command to find out the full address */ - if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER) == -1) + if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 0) == -1) { MBUS_ERROR("%s: Failed to send request to selected secondary device [mask %s]: %s.\n", __PRETTY_FUNCTION__, @@ -2320,7 +2325,7 @@ int mbus_read_slave(mbus_handle * handle, mbus_address *address, mbus_frame * re if (address->is_primary) { - if (mbus_send_request_frame(handle, address->primary) == -1) + if (mbus_send_request_frame(handle, address->primary, 1) == -1) { MBUS_ERROR("%s: Failed to send M-Bus request frame.\n", __PRETTY_FUNCTION__); @@ -2364,7 +2369,7 @@ int mbus_read_slave(mbus_handle * handle, mbus_address *address, mbus_frame * re } /* else MBUS_PROBE_SINGLE */ - if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER) == -1) + if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 0) == -1) { MBUS_ERROR("%s: Failed to send M-Bus request frame.\n", __PRETTY_FUNCTION__); diff --git a/mbus/mbus-protocol-aux.h b/mbus/mbus-protocol-aux.h index 52cfc54..67d16f3 100755 --- a/mbus/mbus-protocol-aux.h +++ b/mbus/mbus-protocol-aux.h @@ -288,12 +288,13 @@ int mbus_send_switch_baudrate_frame(mbus_handle * handle, int address, long baud /** * Sends request frame (REQ_UD2) to given slave using "unified" handle * - * @param handle Initialized handle - * @param address Address (0-255) + * @param handle Initialized handle + * @param address Address (0-255) + * @param frame_count_bit Frame Count Bit (0-1) * * @return Zero when successful. */ -int mbus_send_request_frame(mbus_handle * handle, int address); +int mbus_send_request_frame(mbus_handle * handle, int address, char frame_count_bit); /** * Sends user data frame (SND_UD) to given slave using "unified" handle