From 243fa169c16e9f250b98839543fb5c7385b12793 Mon Sep 17 00:00:00 2001 From: Gretta Hohl Date: Wed, 7 Dec 2016 12:22:18 +0100 Subject: [PATCH] Fix Connection timeout from issue #367 --- src/modbus-rtu.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ src/modbus-rtu.h | 3 +++ 2 files changed, 54 insertions(+) diff --git a/src/modbus-rtu.c b/src/modbus-rtu.c index 81edccd04..5e82307c1 100644 --- a/src/modbus-rtu.c +++ b/src/modbus-rtu.c @@ -1104,6 +1104,57 @@ int modbus_rtu_set_rts_delay(modbus_t *ctx, int us) } } + +int modbus_rtu_get_onebyte_timey(modbus_t *ctx) +{ + if (ctx == NULL) { + errno = EINVAL; + return -1; + } + + if (ctx->backend->backend_type == _MODBUS_BACKEND_TYPE_RTU) { +#if HAVE_DECL_TIOCM_RTS + modbus_rtu_t *ctx_rtu; + ctx_rtu = (modbus_rtu_t *)ctx->backend_data; + return ctx_rtu->onebyte_time; +#else + if (ctx->debug) { + fprintf(stderr, "This function isn't supported on your platform\n"); + } + errno = ENOTSUP; + return -1; +#endif + } else { + errno = EINVAL; + return -1; + } +} + +int modbus_rtu_set_onebyte_time(modbus_t *ctx, int us){ + if (ctx == NULL || us < 0) { + errno = EINVAL; + return -1; + } + + if (ctx->backend->backend_type == _MODBUS_BACKEND_TYPE_RTU) { +#if HAVE_DECL_TIOCM_RTS + modbus_rtu_t *ctx_rtu; + ctx_rtu = (modbus_rtu_t *)ctx->backend_data; + ctx_rtu->onebyte_time = us; + return 0; +#else + if (ctx->debug) { + fprintf(stderr, "This function isn't supported on your platform\n"); + } + errno = ENOTSUP; + return -1; +#endif + } else { + errno = EINVAL; + return -1; + } +} + static void _modbus_rtu_close(modbus_t *ctx) { /* Restore line settings and close file descriptor in RTU mode */ diff --git a/src/modbus-rtu.h b/src/modbus-rtu.h index 214a888b7..e782b2dd4 100644 --- a/src/modbus-rtu.h +++ b/src/modbus-rtu.h @@ -37,6 +37,9 @@ MODBUS_API int modbus_rtu_set_custom_rts(modbus_t *ctx, void (*set_rts) (modbus_ MODBUS_API int modbus_rtu_set_rts_delay(modbus_t *ctx, int us); MODBUS_API int modbus_rtu_get_rts_delay(modbus_t *ctx); +MODBUS_API int modbus_rtu_set_onebyte_time(modbus_t *ctx, int us); +MODBUS_API int modbus_rtu_get_onebyte_time(modbus_t *ctx); + MODBUS_END_DECLS #endif /* MODBUS_RTU_H */