]> sigrok.org Git - libsigrok.git/blobdiff - src/modbus/modbus_serial_rtu.c
scpi-pps: Add a missing "break" in config_get().
[libsigrok.git] / src / modbus / modbus_serial_rtu.c
index 437d187a7b8745fcd9b27fbfb7270961c59ddecd..065c25f67a355f23316bb5a186aad1300ec2be42 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "libsigrok.h"
-#include "libsigrok-internal.h"
-
+#include <config.h>
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
+#include <libsigrok/libsigrok.h>
+#include "libsigrok-internal.h"
 
 #define LOG_PREFIX "modbus_serial"
 
@@ -39,7 +39,7 @@ static int modbus_serial_rtu_dev_inst_new(void *priv, const char *resource,
 {
        struct modbus_serial_rtu *modbus = priv;
 
-       (void) params;
+       (void)params;
 
        modbus->serial = sr_serial_dev_inst_new(resource, serialcomm);
        modbus->slave_addr = modbusaddr;
@@ -96,6 +96,7 @@ static uint16_t modbus_serial_rtu_crc(uint16_t crc,
                                crc ^= 0xA001;
                }
        }
+
        return crc;
 }
 
@@ -108,20 +109,20 @@ static int modbus_serial_rtu_send(void *priv,
        uint8_t slave_addr = modbus->slave_addr;
        uint16_t crc;
 
-       result = serial_write_nonblocking(serial, &slave_addr, sizeof(slave_addr));
+       result = serial_write_blocking(serial, &slave_addr, sizeof(slave_addr), 0);
        if (result < 0)
-               return result;
+               return SR_ERR;
 
-       result = serial_write_nonblocking(serial, buffer, buffer_size);
+       result = serial_write_blocking(serial, buffer, buffer_size, 0);
        if (result < 0)
-               return result;
+               return SR_ERR;
 
        crc = modbus_serial_rtu_crc(0xFFFF, &slave_addr, sizeof(slave_addr));
        crc = modbus_serial_rtu_crc(crc, buffer, buffer_size);
 
-       result = serial_write_nonblocking(serial, &crc, sizeof(crc));
+       result = serial_write_blocking(serial, &crc, sizeof(crc), 0);
        if (result < 0)
-               return result;
+               return SR_ERR;
 
        return SR_OK;
 }
@@ -132,13 +133,13 @@ static int modbus_serial_rtu_read_begin(void *priv, uint8_t *function_code)
        uint8_t slave_addr;
        int ret;
 
-       ret = serial_read_blocking(modbus->serial, &slave_addr, 1, 100);
+       ret = serial_read_blocking(modbus->serial, &slave_addr, 1, 500);
        if (ret != 1 || slave_addr != modbus->slave_addr)
-               return ret;
+               return SR_ERR;
 
        ret = serial_read_blocking(modbus->serial, function_code, 1, 100);
        if (ret != 1)
-               return ret;
+               return SR_ERR;
 
        modbus->crc = modbus_serial_rtu_crc(0xFFFF, &slave_addr, sizeof(slave_addr));
        modbus->crc = modbus_serial_rtu_crc(modbus->crc, function_code, 1);
@@ -151,11 +152,11 @@ static int modbus_serial_rtu_read_data(void *priv, uint8_t *buf, int maxlen)
        struct modbus_serial_rtu *modbus = priv;
        int ret;
 
-       ret = serial_read_nonblocking(modbus->serial, buf, maxlen); 
+       ret = serial_read_nonblocking(modbus->serial, buf, maxlen);
        if (ret < 0)
                return ret;
-       modbus->crc = modbus_serial_rtu_crc(modbus->crc, buf, ret); 
-       return ret; 
+       modbus->crc = modbus_serial_rtu_crc(modbus->crc, buf, ret);
+       return ret;
 }
 
 static int modbus_serial_rtu_read_end(void *priv)
@@ -166,7 +167,7 @@ static int modbus_serial_rtu_read_end(void *priv)
 
        ret = serial_read_blocking(modbus->serial, &crc, sizeof(crc), 100);
        if (ret != 2)
-               return ret;
+               return SR_ERR;
 
        if (crc != modbus->crc) {
                sr_err("CRC error (0x%04X vs 0x%04X).", crc, modbus->crc);