From 037de71d9b7627491f55c7dbd8013f0444f5069c Mon Sep 17 00:00:00 2001 From: Valerio De Benedetto Date: Sun, 26 Jun 2022 11:08:16 +0200 Subject: [PATCH] Returning NMBS_ERROR_INVALID_UNIT_ID in case of invalid unit ID in response --- nanomodbus.c | 5 +++-- nanomodbus.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/nanomodbus.c b/nanomodbus.c index cc0aef0..dcce3d5 100644 --- a/nanomodbus.c +++ b/nanomodbus.c @@ -338,6 +338,7 @@ static nmbs_error recv_req_header(nmbs_t* nmbs, bool* first_byte_received) { static nmbs_error recv_res_header(nmbs_t* nmbs) { uint16_t req_transaction_id = nmbs->msg.transaction_id; + uint8_t req_unit_id = nmbs->msg.unit_id; uint8_t req_fc = nmbs->msg.fc; nmbs_error err = recv_msg_header(nmbs, NULL); @@ -349,8 +350,8 @@ static nmbs_error recv_res_header(nmbs_t* nmbs) { return NMBS_ERROR_INVALID_RESPONSE; } - if (nmbs->msg.ignored) - return NMBS_ERROR_INVALID_RESPONSE; + if (nmbs->msg.unit_id != req_unit_id) + return NMBS_ERROR_INVALID_UNIT_ID; if (nmbs->msg.fc != req_fc) { if (nmbs->msg.fc - 0x80 == req_fc) { diff --git a/nanomodbus.h b/nanomodbus.h index a400cde..fcad779 100644 --- a/nanomodbus.h +++ b/nanomodbus.h @@ -54,6 +54,7 @@ extern "C" { */ typedef enum nmbs_error { // Library errors + NMBS_ERROR_INVALID_UNIT_ID = -7, /**< Received invalid unit ID in response from server */ NMBS_ERROR_INVALID_TCP_MBAP = -6, /**< Received invalid TCP MBAP */ NMBS_ERROR_CRC = -5, /**< Received invalid CRC */ NMBS_ERROR_TRANSPORT = -4, /**< Transport error */