From b884081eff9a1de9c827ade5728e4b98ab1d2463 Mon Sep 17 00:00:00 2001 From: Arne Hoch Date: Tue, 11 Jul 2023 13:47:44 +0200 Subject: [PATCH] FIX incorrect calculation of payload bytes --- nanomodbus.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nanomodbus.c b/nanomodbus.c index e30e5f9..e5f0ad6 100644 --- a/nanomodbus.c +++ b/nanomodbus.c @@ -755,7 +755,7 @@ static nmbs_error handle_read_discrete(nmbs_t* nmbs, } if (!nmbs->msg.broadcast) { - uint8_t discrete_bytes = (quantity / 8) + 1; + uint8_t discrete_bytes = (quantity + 7) / 8; put_res_header(nmbs, 1 + discrete_bytes); put_1(nmbs, discrete_bytes); @@ -1019,7 +1019,7 @@ static nmbs_error handle_write_multiple_coils(nmbs_t* nmbs) { if (coils_bytes == 0) return send_exception_msg(nmbs, NMBS_EXCEPTION_ILLEGAL_DATA_VALUE); - if ((quantity / 8) + 1 != coils_bytes) + if ((quantity + 7) / 8 != coils_bytes) return send_exception_msg(nmbs, NMBS_EXCEPTION_ILLEGAL_DATA_VALUE); if (nmbs->callbacks.write_multiple_coils) { @@ -1577,7 +1577,7 @@ nmbs_error nmbs_write_multiple_coils(nmbs_t* nmbs, uint16_t address, uint16_t qu if ((uint32_t) address + (uint32_t) quantity > ((uint32_t) 0xFFFF) + 1) return NMBS_ERROR_INVALID_ARGUMENT; - uint8_t coils_bytes = (quantity / 8) + 1; + uint8_t coils_bytes = (quantity + 7) / 8; msg_state_req(nmbs, 15); put_req_header(nmbs, 5 + coils_bytes);