Commit dd45f19a6efc20d6032b424a067294086a315899
1 parent
d5512d9b
Add .clang-format and format code (closes #394)
Thank you @pboettch for initial proposal.
Showing
22 changed files
with
1130 additions
and
919 deletions
.clang-format
0 → 100644
| 1 | +--- | |
| 2 | +BasedOnStyle: LLVM | |
| 3 | +AlignArrayOfStructures: Left | |
| 4 | +AlignOperands: true | |
| 5 | +AlignConsecutiveAssignments: false | |
| 6 | +AlignConsecutiveMacros: true | |
| 7 | +AlignEscapedNewlines: Left | |
| 8 | +AlignTrailingComments: true | |
| 9 | +AllowShortBlocksOnASingleLine: false | |
| 10 | +AllowShortCaseLabelsOnASingleLine: false | |
| 11 | +AllowShortEnumsOnASingleLine: false | |
| 12 | +AllowShortFunctionsOnASingleLine: None | |
| 13 | +AllowShortIfStatementsOnASingleLine: Never | |
| 14 | +BreakBeforeBraces: Custom | |
| 15 | +BraceWrapping: | |
| 16 | + AfterClass: false | |
| 17 | + AfterControlStatement: false | |
| 18 | + AfterEnum: false | |
| 19 | + AfterFunction: true | |
| 20 | + AfterNamespace: true | |
| 21 | + AfterObjCDeclaration: true | |
| 22 | + AfterStruct: false | |
| 23 | + AfterUnion: false | |
| 24 | + AfterExternBlock: false | |
| 25 | + BeforeCatch: false | |
| 26 | + BeforeElse: false | |
| 27 | + IndentBraces: false | |
| 28 | + SplitEmptyFunction: true | |
| 29 | + SplitEmptyRecord: true | |
| 30 | + SplitEmptyNamespace: true | |
| 31 | +BinPackArguments: false | |
| 32 | +BinPackParameters: false | |
| 33 | +ColumnLimit: 90 | |
| 34 | +ConstructorInitializerAllOnOneLineOrOnePerLine: true | |
| 35 | +IncludeBlocks: Preserve | |
| 36 | +IndentWidth: 4 | |
| 37 | +ObjCBlockIndentWidth: 4 | |
| 38 | +PointerAlignment: Right | |
| 39 | +ReferenceAlignment: Right | |
| 40 | +SpaceAfterCStyleCast: true | |
| 41 | +SpaceAfterTemplateKeyword: true | |
| 42 | +SpaceBeforeAssignmentOperators: true | |
| 43 | +SpaceBeforeCtorInitializerColon: true | |
| 44 | +SpaceBeforeInheritanceColon: true | |
| 45 | +SpaceBeforeParens: ControlStatementsExceptForEachMacros | |
| 46 | +SpaceBeforeRangeBasedForLoopColon: true | |
| 47 | +SpaceInEmptyParentheses: false | |
| 48 | +SpacesBeforeTrailingComments: 1 | |
| 49 | +SpacesInAngles: false | |
| 50 | +SpacesInContainerLiterals: false | |
| 51 | +SpacesInCStyleCastParentheses: false | |
| 52 | +SpacesInParentheses: false | |
| 53 | +SpacesInSquareBrackets: false | |
| 54 | +SeparateDefinitionBlocks: Always | |
| 55 | +UseTab: Never | |
| 56 | +PPIndentWidth: 2 | ... | ... |
src/modbus-data.c
| ... | ... | @@ -6,6 +6,7 @@ |
| 6 | 6 | |
| 7 | 7 | #include <stdlib.h> |
| 8 | 8 | |
| 9 | +// clang-format off | |
| 9 | 10 | #ifndef _MSC_VER |
| 10 | 11 | # include <stdint.h> |
| 11 | 12 | #else |
| ... | ... | @@ -69,6 +70,7 @@ static inline uint32_t bswap_32(uint32_t x) |
| 69 | 70 | return (bswap_16(x & 0xffff) << 16) | (bswap_16(x >> 16)); |
| 70 | 71 | } |
| 71 | 72 | #endif |
| 73 | +// clang-format on | |
| 72 | 74 | |
| 73 | 75 | /* Sets many bits from a single byte value (all 8 bits of the byte value are |
| 74 | 76 | set) */ |
| ... | ... | @@ -76,14 +78,16 @@ void modbus_set_bits_from_byte(uint8_t *dest, int idx, const uint8_t value) |
| 76 | 78 | { |
| 77 | 79 | int i; |
| 78 | 80 | |
| 79 | - for (i=0; i < 8; i++) { | |
| 80 | - dest[idx+i] = (value & (1 << i)) ? 1 : 0; | |
| 81 | + for (i = 0; i < 8; i++) { | |
| 82 | + dest[idx + i] = (value & (1 << i)) ? 1 : 0; | |
| 81 | 83 | } |
| 82 | 84 | } |
| 83 | 85 | |
| 84 | 86 | /* Sets many bits from a table of bytes (only the bits between idx and |
| 85 | 87 | idx + nb_bits are set) */ |
| 86 | -void modbus_set_bits_from_bytes(uint8_t *dest, int idx, unsigned int nb_bits, | |
| 88 | +void modbus_set_bits_from_bytes(uint8_t *dest, | |
| 89 | + int idx, | |
| 90 | + unsigned int nb_bits, | |
| 87 | 91 | const uint8_t *tab_byte) |
| 88 | 92 | { |
| 89 | 93 | unsigned int i; |
| ... | ... | @@ -99,8 +103,7 @@ void modbus_set_bits_from_bytes(uint8_t *dest, int idx, unsigned int nb_bits, |
| 99 | 103 | |
| 100 | 104 | /* Gets the byte value from many bits. |
| 101 | 105 | To obtain a full byte, set nb_bits to 8. */ |
| 102 | -uint8_t modbus_get_byte_from_bits(const uint8_t *src, int idx, | |
| 103 | - unsigned int nb_bits) | |
| 106 | +uint8_t modbus_get_byte_from_bits(const uint8_t *src, int idx, unsigned int nb_bits) | |
| 104 | 107 | { |
| 105 | 108 | unsigned int i; |
| 106 | 109 | uint8_t value = 0; |
| ... | ... | @@ -111,8 +114,8 @@ uint8_t modbus_get_byte_from_bits(const uint8_t *src, int idx, |
| 111 | 114 | nb_bits = 8; |
| 112 | 115 | } |
| 113 | 116 | |
| 114 | - for (i=0; i < nb_bits; i++) { | |
| 115 | - value |= (src[idx+i] << i); | |
| 117 | + for (i = 0; i < nb_bits; i++) { | |
| 118 | + value |= (src[idx + i] << i); | |
| 116 | 119 | } |
| 117 | 120 | |
| 118 | 121 | return value; |
| ... | ... | @@ -130,10 +133,7 @@ float modbus_get_float_abcd(const uint16_t *src) |
| 130 | 133 | c = (src[1] >> 8) & 0xFF; |
| 131 | 134 | d = (src[1] >> 0) & 0xFF; |
| 132 | 135 | |
| 133 | - i = (a << 24) | | |
| 134 | - (b << 16) | | |
| 135 | - (c << 8) | | |
| 136 | - (d << 0); | |
| 136 | + i = (a << 24) | (b << 16) | (c << 8) | (d << 0); | |
| 137 | 137 | memcpy(&f, &i, 4); |
| 138 | 138 | |
| 139 | 139 | return f; |
| ... | ... | @@ -151,10 +151,7 @@ float modbus_get_float_dcba(const uint16_t *src) |
| 151 | 151 | c = (src[1] >> 8) & 0xFF; |
| 152 | 152 | d = (src[1] >> 0) & 0xFF; |
| 153 | 153 | |
| 154 | - i = (d << 24) | | |
| 155 | - (c << 16) | | |
| 156 | - (b << 8) | | |
| 157 | - (a << 0); | |
| 154 | + i = (d << 24) | (c << 16) | (b << 8) | (a << 0); | |
| 158 | 155 | memcpy(&f, &i, 4); |
| 159 | 156 | |
| 160 | 157 | return f; |
| ... | ... | @@ -172,10 +169,7 @@ float modbus_get_float_badc(const uint16_t *src) |
| 172 | 169 | c = (src[1] >> 8) & 0xFF; |
| 173 | 170 | d = (src[1] >> 0) & 0xFF; |
| 174 | 171 | |
| 175 | - i = (b << 24) | | |
| 176 | - (a << 16) | | |
| 177 | - (d << 8) | | |
| 178 | - (c << 0); | |
| 172 | + i = (b << 24) | (a << 16) | (d << 8) | (c << 0); | |
| 179 | 173 | memcpy(&f, &i, 4); |
| 180 | 174 | |
| 181 | 175 | return f; |
| ... | ... | @@ -193,10 +187,7 @@ float modbus_get_float_cdab(const uint16_t *src) |
| 193 | 187 | c = (src[1] >> 8) & 0xFF; |
| 194 | 188 | d = (src[1] >> 0) & 0xFF; |
| 195 | 189 | |
| 196 | - i = (c << 24) | | |
| 197 | - (d << 16) | | |
| 198 | - (a << 8) | | |
| 199 | - (b << 0); | |
| 190 | + i = (c << 24) | (d << 16) | (a << 8) | (b << 0); | |
| 200 | 191 | memcpy(&f, &i, 4); |
| 201 | 192 | |
| 202 | 193 | return f; |
| ... | ... | @@ -208,18 +199,17 @@ float modbus_get_float(const uint16_t *src) |
| 208 | 199 | float f; |
| 209 | 200 | uint32_t i; |
| 210 | 201 | |
| 211 | - i = (((uint32_t)src[1]) << 16) + src[0]; | |
| 202 | + i = (((uint32_t) src[1]) << 16) + src[0]; | |
| 212 | 203 | memcpy(&f, &i, sizeof(float)); |
| 213 | 204 | |
| 214 | 205 | return f; |
| 215 | - | |
| 216 | 206 | } |
| 217 | 207 | |
| 218 | 208 | /* Set a float to 4 bytes for Modbus w/o any conversion (ABCD) */ |
| 219 | 209 | void modbus_set_float_abcd(float f, uint16_t *dest) |
| 220 | 210 | { |
| 221 | 211 | uint32_t i; |
| 222 | - uint8_t *out = (uint8_t*) dest; | |
| 212 | + uint8_t *out = (uint8_t *) dest; | |
| 223 | 213 | uint8_t a, b, c, d; |
| 224 | 214 | |
| 225 | 215 | memcpy(&i, &f, sizeof(uint32_t)); |
| ... | ... | @@ -238,7 +228,7 @@ void modbus_set_float_abcd(float f, uint16_t *dest) |
| 238 | 228 | void modbus_set_float_dcba(float f, uint16_t *dest) |
| 239 | 229 | { |
| 240 | 230 | uint32_t i; |
| 241 | - uint8_t *out = (uint8_t*) dest; | |
| 231 | + uint8_t *out = (uint8_t *) dest; | |
| 242 | 232 | uint8_t a, b, c, d; |
| 243 | 233 | |
| 244 | 234 | memcpy(&i, &f, sizeof(uint32_t)); |
| ... | ... | @@ -251,14 +241,13 @@ void modbus_set_float_dcba(float f, uint16_t *dest) |
| 251 | 241 | out[1] = c; |
| 252 | 242 | out[2] = b; |
| 253 | 243 | out[3] = a; |
| 254 | - | |
| 255 | 244 | } |
| 256 | 245 | |
| 257 | 246 | /* Set a float to 4 bytes for Modbus with byte swap conversion (BADC) */ |
| 258 | 247 | void modbus_set_float_badc(float f, uint16_t *dest) |
| 259 | 248 | { |
| 260 | 249 | uint32_t i; |
| 261 | - uint8_t *out = (uint8_t*) dest; | |
| 250 | + uint8_t *out = (uint8_t *) dest; | |
| 262 | 251 | uint8_t a, b, c, d; |
| 263 | 252 | |
| 264 | 253 | memcpy(&i, &f, sizeof(uint32_t)); |
| ... | ... | @@ -277,7 +266,7 @@ void modbus_set_float_badc(float f, uint16_t *dest) |
| 277 | 266 | void modbus_set_float_cdab(float f, uint16_t *dest) |
| 278 | 267 | { |
| 279 | 268 | uint32_t i; |
| 280 | - uint8_t *out = (uint8_t*) dest; | |
| 269 | + uint8_t *out = (uint8_t *) dest; | |
| 281 | 270 | uint8_t a, b, c, d; |
| 282 | 271 | |
| 283 | 272 | memcpy(&i, &f, sizeof(uint32_t)); |
| ... | ... | @@ -298,6 +287,6 @@ void modbus_set_float(float f, uint16_t *dest) |
| 298 | 287 | uint32_t i; |
| 299 | 288 | |
| 300 | 289 | memcpy(&i, &f, sizeof(uint32_t)); |
| 301 | - dest[0] = (uint16_t)i; | |
| 302 | - dest[1] = (uint16_t)(i >> 16); | |
| 290 | + dest[0] = (uint16_t) i; | |
| 291 | + dest[1] = (uint16_t) (i >> 16); | |
| 303 | 292 | } | ... | ... |
src/modbus-private.h
| ... | ... | @@ -7,6 +7,7 @@ |
| 7 | 7 | #ifndef MODBUS_PRIVATE_H |
| 8 | 8 | #define MODBUS_PRIVATE_H |
| 9 | 9 | |
| 10 | +// clang-format off | |
| 10 | 11 | #ifndef _MSC_VER |
| 11 | 12 | # include <stdint.h> |
| 12 | 13 | # include <sys/time.h> |
| ... | ... | @@ -15,8 +16,9 @@ |
| 15 | 16 | # include <time.h> |
| 16 | 17 | typedef int ssize_t; |
| 17 | 18 | #endif |
| 18 | -#include <sys/types.h> | |
| 19 | +// clang-format on | |
| 19 | 20 | #include <config.h> |
| 21 | +#include <sys/types.h> | |
| 20 | 22 | |
| 21 | 23 | #include "modbus.h" |
| 22 | 24 | |
| ... | ... | @@ -36,11 +38,11 @@ MODBUS_BEGIN_DECLS |
| 36 | 38 | #define _MODBUS_EXCEPTION_RSP_LENGTH 5 |
| 37 | 39 | |
| 38 | 40 | /* Timeouts in microsecond (0.5 s) */ |
| 39 | -#define _RESPONSE_TIMEOUT 500000 | |
| 40 | -#define _BYTE_TIMEOUT 500000 | |
| 41 | +#define _RESPONSE_TIMEOUT 500000 | |
| 42 | +#define _BYTE_TIMEOUT 500000 | |
| 41 | 43 | |
| 42 | 44 | typedef enum { |
| 43 | - _MODBUS_BACKEND_TYPE_RTU=0, | |
| 45 | + _MODBUS_BACKEND_TYPE_RTU = 0, | |
| 44 | 46 | _MODBUS_BACKEND_TYPE_TCP |
| 45 | 47 | } modbus_backend_type_t; |
| 46 | 48 | |
| ... | ... | @@ -69,24 +71,25 @@ typedef struct _modbus_backend { |
| 69 | 71 | unsigned int header_length; |
| 70 | 72 | unsigned int checksum_length; |
| 71 | 73 | unsigned int max_adu_length; |
| 72 | - int (*set_slave) (modbus_t *ctx, int slave); | |
| 73 | - int (*build_request_basis) (modbus_t *ctx, int function, int addr, | |
| 74 | - int nb, uint8_t *req); | |
| 75 | - int (*build_response_basis) (sft_t *sft, uint8_t *rsp); | |
| 76 | - int (*prepare_response_tid) (const uint8_t *req, int *req_length); | |
| 77 | - int (*send_msg_pre) (uint8_t *req, int req_length); | |
| 78 | - ssize_t (*send) (modbus_t *ctx, const uint8_t *req, int req_length); | |
| 79 | - int (*receive) (modbus_t *ctx, uint8_t *req); | |
| 80 | - ssize_t (*recv) (modbus_t *ctx, uint8_t *rsp, int rsp_length); | |
| 81 | - int (*check_integrity) (modbus_t *ctx, uint8_t *msg, | |
| 82 | - const int msg_length); | |
| 83 | - int (*pre_check_confirmation) (modbus_t *ctx, const uint8_t *req, | |
| 84 | - const uint8_t *rsp, int rsp_length); | |
| 85 | - int (*connect) (modbus_t *ctx); | |
| 86 | - void (*close) (modbus_t *ctx); | |
| 87 | - int (*flush) (modbus_t *ctx); | |
| 88 | - int (*select) (modbus_t *ctx, fd_set *rset, struct timeval *tv, int msg_length); | |
| 89 | - void (*free) (modbus_t *ctx); | |
| 74 | + int (*set_slave)(modbus_t *ctx, int slave); | |
| 75 | + int (*build_request_basis)( | |
| 76 | + modbus_t *ctx, int function, int addr, int nb, uint8_t *req); | |
| 77 | + int (*build_response_basis)(sft_t *sft, uint8_t *rsp); | |
| 78 | + int (*prepare_response_tid)(const uint8_t *req, int *req_length); | |
| 79 | + int (*send_msg_pre)(uint8_t *req, int req_length); | |
| 80 | + ssize_t (*send)(modbus_t *ctx, const uint8_t *req, int req_length); | |
| 81 | + int (*receive)(modbus_t *ctx, uint8_t *req); | |
| 82 | + ssize_t (*recv)(modbus_t *ctx, uint8_t *rsp, int rsp_length); | |
| 83 | + int (*check_integrity)(modbus_t *ctx, uint8_t *msg, const int msg_length); | |
| 84 | + int (*pre_check_confirmation)(modbus_t *ctx, | |
| 85 | + const uint8_t *req, | |
| 86 | + const uint8_t *rsp, | |
| 87 | + int rsp_length); | |
| 88 | + int (*connect)(modbus_t *ctx); | |
| 89 | + void (*close)(modbus_t *ctx); | |
| 90 | + int (*flush)(modbus_t *ctx); | |
| 91 | + int (*select)(modbus_t *ctx, fd_set *rset, struct timeval *tv, int msg_length); | |
| 92 | + void (*free)(modbus_t *ctx); | |
| 90 | 93 | } modbus_backend_t; |
| 91 | 94 | |
| 92 | 95 | struct _modbus { |
| ... | ... | @@ -114,4 +117,4 @@ size_t strlcpy(char *dest, const char *src, size_t dest_size); |
| 114 | 117 | |
| 115 | 118 | MODBUS_END_DECLS |
| 116 | 119 | |
| 117 | -#endif /* MODBUS_PRIVATE_H */ | |
| 120 | +#endif /* MODBUS_PRIVATE_H */ | ... | ... |
src/modbus-rtu-private.h
| ... | ... | @@ -19,11 +19,11 @@ |
| 19 | 19 | #include <termios.h> |
| 20 | 20 | #endif |
| 21 | 21 | |
| 22 | -#define _MODBUS_RTU_HEADER_LENGTH 1 | |
| 23 | -#define _MODBUS_RTU_PRESET_REQ_LENGTH 6 | |
| 24 | -#define _MODBUS_RTU_PRESET_RSP_LENGTH 2 | |
| 22 | +#define _MODBUS_RTU_HEADER_LENGTH 1 | |
| 23 | +#define _MODBUS_RTU_PRESET_REQ_LENGTH 6 | |
| 24 | +#define _MODBUS_RTU_PRESET_RSP_LENGTH 2 | |
| 25 | 25 | |
| 26 | -#define _MODBUS_RTU_CHECKSUM_LENGTH 2 | |
| 26 | +#define _MODBUS_RTU_CHECKSUM_LENGTH 2 | |
| 27 | 27 | |
| 28 | 28 | #if defined(_WIN32) |
| 29 | 29 | #if !defined(ENOTSUP) |
| ... | ... | @@ -32,6 +32,7 @@ |
| 32 | 32 | |
| 33 | 33 | /* WIN32: struct containing serial handle and a receive buffer */ |
| 34 | 34 | #define PY_BUF_SIZE 512 |
| 35 | + | |
| 35 | 36 | struct win32_ser { |
| 36 | 37 | /* File handle */ |
| 37 | 38 | HANDLE fd; |
| ... | ... | @@ -67,7 +68,7 @@ typedef struct _modbus_rtu { |
| 67 | 68 | int rts; |
| 68 | 69 | int rts_delay; |
| 69 | 70 | int onebyte_time; |
| 70 | - void (*set_rts) (modbus_t *ctx, int on); | |
| 71 | + void (*set_rts)(modbus_t *ctx, int on); | |
| 71 | 72 | #endif |
| 72 | 73 | /* To handle many slaves on the same link */ |
| 73 | 74 | int confirmation_to_ignore; | ... | ... |
src/modbus-rtu.c
| ... | ... | @@ -4,10 +4,10 @@ |
| 4 | 4 | * SPDX-License-Identifier: LGPL-2.1-or-later |
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | -#include <stdio.h> | |
| 8 | -#include <stdlib.h> | |
| 9 | 7 | #include <errno.h> |
| 10 | 8 | #include <fcntl.h> |
| 9 | +#include <stdio.h> | |
| 10 | +#include <stdlib.h> | |
| 11 | 11 | #include <string.h> |
| 12 | 12 | #ifndef _MSC_VER |
| 13 | 13 | #include <unistd.h> |
| ... | ... | @@ -16,8 +16,8 @@ |
| 16 | 16 | |
| 17 | 17 | #include "modbus-private.h" |
| 18 | 18 | |
| 19 | -#include "modbus-rtu.h" | |
| 20 | 19 | #include "modbus-rtu-private.h" |
| 20 | +#include "modbus-rtu.h" | |
| 21 | 21 | |
| 22 | 22 | #if HAVE_DECL_TIOCSRS485 || HAVE_DECL_TIOCM_RTS |
| 23 | 23 | #include <sys/ioctl.h> |
| ... | ... | @@ -29,63 +29,47 @@ |
| 29 | 29 | |
| 30 | 30 | /* Table of CRC values for high-order byte */ |
| 31 | 31 | static const uint8_t table_crc_hi[] = { |
| 32 | - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, | |
| 33 | - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
| 34 | - 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, | |
| 35 | - 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, | |
| 36 | - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, | |
| 37 | - 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, | |
| 38 | - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, | |
| 39 | - 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
| 40 | - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, | |
| 41 | - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, | |
| 42 | - 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, | |
| 43 | - 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, | |
| 44 | - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, | |
| 45 | - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, | |
| 46 | - 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, | |
| 47 | - 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, | |
| 48 | - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, | |
| 49 | - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
| 50 | - 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, | |
| 51 | - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
| 52 | - 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, | |
| 53 | - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, | |
| 54 | - 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, | |
| 55 | - 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
| 56 | - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, | |
| 57 | - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 | |
| 58 | -}; | |
| 32 | + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, | |
| 33 | + 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, | |
| 34 | + 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, | |
| 35 | + 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
| 36 | + 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, | |
| 37 | + 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, | |
| 38 | + 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, | |
| 39 | + 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, | |
| 40 | + 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, | |
| 41 | + 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, | |
| 42 | + 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, | |
| 43 | + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
| 44 | + 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, | |
| 45 | + 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, | |
| 46 | + 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, | |
| 47 | + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, | |
| 48 | + 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, | |
| 49 | + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, | |
| 50 | + 0x00, 0xC1, 0x81, 0x40}; | |
| 59 | 51 | |
| 60 | 52 | /* Table of CRC values for low-order byte */ |
| 61 | 53 | static const uint8_t table_crc_lo[] = { |
| 62 | - 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, | |
| 63 | - 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, | |
| 64 | - 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, | |
| 65 | - 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, | |
| 66 | - 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, | |
| 67 | - 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, | |
| 68 | - 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, | |
| 69 | - 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, | |
| 70 | - 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, | |
| 71 | - 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, | |
| 72 | - 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, | |
| 73 | - 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, | |
| 74 | - 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, | |
| 75 | - 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, | |
| 76 | - 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, | |
| 77 | - 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, | |
| 78 | - 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, | |
| 79 | - 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, | |
| 80 | - 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, | |
| 81 | - 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, | |
| 82 | - 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, | |
| 83 | - 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, | |
| 84 | - 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, | |
| 85 | - 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, | |
| 86 | - 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, | |
| 87 | - 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 | |
| 88 | -}; | |
| 54 | + 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, | |
| 55 | + 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, | |
| 56 | + 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, | |
| 57 | + 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, | |
| 58 | + 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, | |
| 59 | + 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, | |
| 60 | + 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, | |
| 61 | + 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, | |
| 62 | + 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, | |
| 63 | + 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, | |
| 64 | + 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, | |
| 65 | + 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, | |
| 66 | + 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, | |
| 67 | + 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, | |
| 68 | + 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, | |
| 69 | + 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, | |
| 70 | + 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, | |
| 71 | + 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, | |
| 72 | + 0x41, 0x81, 0x80, 0x40}; | |
| 89 | 73 | |
| 90 | 74 | /* Define the slave ID of the remote device to talk in master mode or set the |
| 91 | 75 | * internal slave ID in slave mode */ |
| ... | ... | @@ -105,9 +89,8 @@ static int _modbus_set_slave(modbus_t *ctx, int slave) |
| 105 | 89 | } |
| 106 | 90 | |
| 107 | 91 | /* Builds a RTU request header */ |
| 108 | -static int _modbus_rtu_build_request_basis(modbus_t *ctx, int function, | |
| 109 | - int addr, int nb, | |
| 110 | - uint8_t *req) | |
| 92 | +static int _modbus_rtu_build_request_basis( | |
| 93 | + modbus_t *ctx, int function, int addr, int nb, uint8_t *req) | |
| 111 | 94 | { |
| 112 | 95 | assert(ctx->slave != -1); |
| 113 | 96 | req[0] = ctx->slave; |
| ... | ... | @@ -135,7 +118,7 @@ static uint16_t crc16(uint8_t *buffer, uint16_t buffer_length) |
| 135 | 118 | { |
| 136 | 119 | uint8_t crc_hi = 0xFF; /* high CRC byte initialized */ |
| 137 | 120 | uint8_t crc_lo = 0xFF; /* low CRC byte initialized */ |
| 138 | - unsigned int i; /* will index into CRC lookup */ | |
| 121 | + unsigned int i; /* will index into CRC lookup */ | |
| 139 | 122 | |
| 140 | 123 | /* pass through message buffer */ |
| 141 | 124 | while (buffer_length--) { |
| ... | ... | @@ -186,8 +169,7 @@ static void win32_ser_init(struct win32_ser *ws) |
| 186 | 169 | } |
| 187 | 170 | |
| 188 | 171 | /* FIXME Try to remove length_to_read -> max_len argument, only used by win32 */ |
| 189 | -static int win32_ser_select(struct win32_ser *ws, int max_len, | |
| 190 | - const struct timeval *tv) | |
| 172 | +static int win32_ser_select(struct win32_ser *ws, int max_len, const struct timeval *tv) | |
| 191 | 173 | { |
| 192 | 174 | COMMTIMEOUTS comm_to; |
| 193 | 175 | unsigned int msec = 0; |
| ... | ... | @@ -237,8 +219,7 @@ static int win32_ser_select(struct win32_ser *ws, int max_len, |
| 237 | 219 | } |
| 238 | 220 | } |
| 239 | 221 | |
| 240 | -static int win32_ser_read(struct win32_ser *ws, uint8_t *p_msg, | |
| 241 | - unsigned int max_len) | |
| 222 | +static int win32_ser_read(struct win32_ser *ws, uint8_t *p_msg, unsigned int max_len) | |
| 242 | 223 | { |
| 243 | 224 | unsigned int n = ws->n_bytes; |
| 244 | 225 | |
| ... | ... | @@ -277,7 +258,9 @@ static ssize_t _modbus_rtu_send(modbus_t *ctx, const uint8_t *req, int req_lengt |
| 277 | 258 | #if defined(_WIN32) |
| 278 | 259 | modbus_rtu_t *ctx_rtu = ctx->backend_data; |
| 279 | 260 | DWORD n_bytes = 0; |
| 280 | - return (WriteFile(ctx_rtu->w_ser.fd, req, req_length, &n_bytes, NULL)) ? (ssize_t)n_bytes : -1; | |
| 261 | + return (WriteFile(ctx_rtu->w_ser.fd, req, req_length, &n_bytes, NULL)) | |
| 262 | + ? (ssize_t) n_bytes | |
| 263 | + : -1; | |
| 281 | 264 | #else |
| 282 | 265 | #if HAVE_DECL_TIOCM_RTS |
| 283 | 266 | modbus_rtu_t *ctx_rtu = ctx->backend_data; |
| ... | ... | @@ -332,7 +315,7 @@ static int _modbus_rtu_receive(modbus_t *ctx, uint8_t *req) |
| 332 | 315 | static ssize_t _modbus_rtu_recv(modbus_t *ctx, uint8_t *rsp, int rsp_length) |
| 333 | 316 | { |
| 334 | 317 | #if defined(_WIN32) |
| 335 | - return win32_ser_read(&((modbus_rtu_t *)ctx->backend_data)->w_ser, rsp, rsp_length); | |
| 318 | + return win32_ser_read(&((modbus_rtu_t *) ctx->backend_data)->w_ser, rsp, rsp_length); | |
| 336 | 319 | #else |
| 337 | 320 | return read(ctx->s, rsp, rsp_length); |
| 338 | 321 | #endif |
| ... | ... | @@ -340,8 +323,10 @@ static ssize_t _modbus_rtu_recv(modbus_t *ctx, uint8_t *rsp, int rsp_length) |
| 340 | 323 | |
| 341 | 324 | static int _modbus_rtu_flush(modbus_t *); |
| 342 | 325 | |
| 343 | -static int _modbus_rtu_pre_check_confirmation(modbus_t *ctx, const uint8_t *req, | |
| 344 | - const uint8_t *rsp, int rsp_length) | |
| 326 | +static int _modbus_rtu_pre_check_confirmation(modbus_t *ctx, | |
| 327 | + const uint8_t *req, | |
| 328 | + const uint8_t *rsp, | |
| 329 | + int rsp_length) | |
| 345 | 330 | { |
| 346 | 331 | /* Check responding slave is the slave we requested (except for broacast |
| 347 | 332 | * request) */ |
| ... | ... | @@ -349,7 +334,8 @@ static int _modbus_rtu_pre_check_confirmation(modbus_t *ctx, const uint8_t *req, |
| 349 | 334 | if (ctx->debug) { |
| 350 | 335 | fprintf(stderr, |
| 351 | 336 | "The responding slave %d isn't the requested slave %d\n", |
| 352 | - rsp[0], req[0]); | |
| 337 | + rsp[0], | |
| 338 | + req[0]); | |
| 353 | 339 | } |
| 354 | 340 | errno = EMBBADSLAVE; |
| 355 | 341 | return -1; |
| ... | ... | @@ -361,8 +347,7 @@ static int _modbus_rtu_pre_check_confirmation(modbus_t *ctx, const uint8_t *req, |
| 361 | 347 | /* The check_crc16 function shall return 0 if the message is ignored and the |
| 362 | 348 | message length if the CRC is valid. Otherwise it shall return -1 and set |
| 363 | 349 | errno to EMBBADCRC. */ |
| 364 | -static int _modbus_rtu_check_integrity(modbus_t *ctx, uint8_t *msg, | |
| 365 | - const int msg_length) | |
| 350 | +static int _modbus_rtu_check_integrity(modbus_t *ctx, uint8_t *msg, const int msg_length) | |
| 366 | 351 | { |
| 367 | 352 | uint16_t crc_calculated; |
| 368 | 353 | uint16_t crc_received; |
| ... | ... | @@ -386,8 +371,10 @@ static int _modbus_rtu_check_integrity(modbus_t *ctx, uint8_t *msg, |
| 386 | 371 | return msg_length; |
| 387 | 372 | } else { |
| 388 | 373 | if (ctx->debug) { |
| 389 | - fprintf(stderr, "ERROR CRC received 0x%0X != CRC calculated 0x%0X\n", | |
| 390 | - crc_received, crc_calculated); | |
| 374 | + fprintf(stderr, | |
| 375 | + "ERROR CRC received 0x%0X != CRC calculated 0x%0X\n", | |
| 376 | + crc_received, | |
| 377 | + crc_calculated); | |
| 391 | 378 | } |
| 392 | 379 | |
| 393 | 380 | if (ctx->error_recovery & MODBUS_ERROR_RECOVERY_PROTOCOL) { |
| ... | ... | @@ -412,8 +399,11 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 412 | 399 | |
| 413 | 400 | if (ctx->debug) { |
| 414 | 401 | printf("Opening %s at %d bauds (%c, %d, %d)\n", |
| 415 | - ctx_rtu->device, ctx_rtu->baud, ctx_rtu->parity, | |
| 416 | - ctx_rtu->data_bit, ctx_rtu->stop_bit); | |
| 402 | + ctx_rtu->device, | |
| 403 | + ctx_rtu->baud, | |
| 404 | + ctx_rtu->parity, | |
| 405 | + ctx_rtu->data_bit, | |
| 406 | + ctx_rtu->stop_bit); | |
| 417 | 407 | } |
| 418 | 408 | |
| 419 | 409 | #if defined(_WIN32) |
| ... | ... | @@ -424,19 +414,16 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 424 | 414 | |
| 425 | 415 | /* ctx_rtu->device should contain a string like "COMxx:" xx being a decimal |
| 426 | 416 | * number */ |
| 427 | - ctx_rtu->w_ser.fd = CreateFileA(ctx_rtu->device, | |
| 428 | - GENERIC_READ | GENERIC_WRITE, | |
| 429 | - 0, | |
| 430 | - NULL, | |
| 431 | - OPEN_EXISTING, | |
| 432 | - 0, | |
| 433 | - NULL); | |
| 417 | + ctx_rtu->w_ser.fd = CreateFileA( | |
| 418 | + ctx_rtu->device, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); | |
| 434 | 419 | |
| 435 | 420 | /* Error checking */ |
| 436 | 421 | if (ctx_rtu->w_ser.fd == INVALID_HANDLE_VALUE) { |
| 437 | 422 | if (ctx->debug) { |
| 438 | - fprintf(stderr, "ERROR Can't open the device %s (LastError %d)\n", | |
| 439 | - ctx_rtu->device, (int)GetLastError()); | |
| 423 | + fprintf(stderr, | |
| 424 | + "ERROR Can't open the device %s (LastError %d)\n", | |
| 425 | + ctx_rtu->device, | |
| 426 | + (int) GetLastError()); | |
| 440 | 427 | } |
| 441 | 428 | return -1; |
| 442 | 429 | } |
| ... | ... | @@ -445,8 +432,9 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 445 | 432 | ctx_rtu->old_dcb.DCBlength = sizeof(DCB); |
| 446 | 433 | if (!GetCommState(ctx_rtu->w_ser.fd, &ctx_rtu->old_dcb)) { |
| 447 | 434 | if (ctx->debug) { |
| 448 | - fprintf(stderr, "ERROR Error getting configuration (LastError %d)\n", | |
| 449 | - (int)GetLastError()); | |
| 435 | + fprintf(stderr, | |
| 436 | + "ERROR Error getting configuration (LastError %d)\n", | |
| 437 | + (int) GetLastError()); | |
| 450 | 438 | } |
| 451 | 439 | CloseHandle(ctx_rtu->w_ser.fd); |
| 452 | 440 | ctx_rtu->w_ser.fd = INVALID_HANDLE_VALUE; |
| ... | ... | @@ -519,8 +507,10 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 519 | 507 | default: |
| 520 | 508 | dcb.BaudRate = CBR_9600; |
| 521 | 509 | if (ctx->debug) { |
| 522 | - fprintf(stderr, "WARNING Unknown baud rate %d for %s (B9600 used)\n", | |
| 523 | - ctx_rtu->baud, ctx_rtu->device); | |
| 510 | + fprintf(stderr, | |
| 511 | + "WARNING Unknown baud rate %d for %s (B9600 used)\n", | |
| 512 | + ctx_rtu->baud, | |
| 513 | + ctx_rtu->device); | |
| 524 | 514 | } |
| 525 | 515 | } |
| 526 | 516 | |
| ... | ... | @@ -576,8 +566,9 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 576 | 566 | /* Setup port */ |
| 577 | 567 | if (!SetCommState(ctx_rtu->w_ser.fd, &dcb)) { |
| 578 | 568 | if (ctx->debug) { |
| 579 | - fprintf(stderr, "ERROR Error setting new configuration (LastError %d)\n", | |
| 580 | - (int)GetLastError()); | |
| 569 | + fprintf(stderr, | |
| 570 | + "ERROR Error setting new configuration (LastError %d)\n", | |
| 571 | + (int) GetLastError()); | |
| 581 | 572 | } |
| 582 | 573 | CloseHandle(ctx_rtu->w_ser.fd); |
| 583 | 574 | ctx_rtu->w_ser.fd = INVALID_HANDLE_VALUE; |
| ... | ... | @@ -599,8 +590,10 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 599 | 590 | ctx->s = open(ctx_rtu->device, flags); |
| 600 | 591 | if (ctx->s < 0) { |
| 601 | 592 | if (ctx->debug) { |
| 602 | - fprintf(stderr, "ERROR Can't open the device %s (%s)\n", | |
| 603 | - ctx_rtu->device, strerror(errno)); | |
| 593 | + fprintf(stderr, | |
| 594 | + "ERROR Can't open the device %s (%s)\n", | |
| 595 | + ctx_rtu->device, | |
| 596 | + strerror(errno)); | |
| 604 | 597 | } |
| 605 | 598 | return -1; |
| 606 | 599 | } |
| ... | ... | @@ -682,7 +675,7 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 682 | 675 | break; |
| 683 | 676 | #endif |
| 684 | 677 | #ifdef B1152000 |
| 685 | - case 1152000: | |
| 678 | + case 1152000: | |
| 686 | 679 | speed = B1152000; |
| 687 | 680 | break; |
| 688 | 681 | #endif |
| ... | ... | @@ -716,13 +709,13 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 716 | 709 | if (ctx->debug) { |
| 717 | 710 | fprintf(stderr, |
| 718 | 711 | "WARNING Unknown baud rate %d for %s (B9600 used)\n", |
| 719 | - ctx_rtu->baud, ctx_rtu->device); | |
| 712 | + ctx_rtu->baud, | |
| 713 | + ctx_rtu->device); | |
| 720 | 714 | } |
| 721 | 715 | } |
| 722 | 716 | |
| 723 | 717 | /* Set the baud rate */ |
| 724 | - if ((cfsetispeed(&tios, speed) < 0) || | |
| 725 | - (cfsetospeed(&tios, speed) < 0)) { | |
| 718 | + if ((cfsetispeed(&tios, speed) < 0) || (cfsetospeed(&tios, speed) < 0)) { | |
| 726 | 719 | close(ctx->s); |
| 727 | 720 | ctx->s = -1; |
| 728 | 721 | return -1; |
| ... | ... | @@ -757,7 +750,7 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 757 | 750 | |
| 758 | 751 | /* Stop bit (1 or 2) */ |
| 759 | 752 | if (ctx_rtu->stop_bit == 1) |
| 760 | - tios.c_cflag &=~ CSTOPB; | |
| 753 | + tios.c_cflag &= ~CSTOPB; | |
| 761 | 754 | else /* 2 */ |
| 762 | 755 | tios.c_cflag |= CSTOPB; |
| 763 | 756 | |
| ... | ... | @@ -765,11 +758,11 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 765 | 758 | PARODD Use odd parity instead of even */ |
| 766 | 759 | if (ctx_rtu->parity == 'N') { |
| 767 | 760 | /* None */ |
| 768 | - tios.c_cflag &=~ PARENB; | |
| 761 | + tios.c_cflag &= ~PARENB; | |
| 769 | 762 | } else if (ctx_rtu->parity == 'E') { |
| 770 | 763 | /* Even */ |
| 771 | 764 | tios.c_cflag |= PARENB; |
| 772 | - tios.c_cflag &=~ PARODD; | |
| 765 | + tios.c_cflag &= ~PARODD; | |
| 773 | 766 | } else { |
| 774 | 767 | /* Odd */ |
| 775 | 768 | tios.c_cflag |= PARENB; |
| ... | ... | @@ -851,7 +844,7 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 851 | 844 | */ |
| 852 | 845 | |
| 853 | 846 | /* Raw output */ |
| 854 | - tios.c_oflag &=~ OPOST; | |
| 847 | + tios.c_oflag &= ~OPOST; | |
| 855 | 848 | |
| 856 | 849 | /* C_CC Control characters |
| 857 | 850 | VMIN Minimum number of characters to read |
| ... | ... | @@ -1044,7 +1037,7 @@ int modbus_rtu_set_rts(modbus_t *ctx, int mode) |
| 1044 | 1037 | return -1; |
| 1045 | 1038 | } |
| 1046 | 1039 | |
| 1047 | -int modbus_rtu_set_custom_rts(modbus_t *ctx, void (*set_rts) (modbus_t *ctx, int on)) | |
| 1040 | +int modbus_rtu_set_custom_rts(modbus_t *ctx, void (*set_rts)(modbus_t *ctx, int on)) | |
| 1048 | 1041 | { |
| 1049 | 1042 | if (ctx == NULL) { |
| 1050 | 1043 | errno = EINVAL; |
| ... | ... | @@ -1079,7 +1072,7 @@ int modbus_rtu_get_rts_delay(modbus_t *ctx) |
| 1079 | 1072 | if (ctx->backend->backend_type == _MODBUS_BACKEND_TYPE_RTU) { |
| 1080 | 1073 | #if HAVE_DECL_TIOCM_RTS |
| 1081 | 1074 | modbus_rtu_t *ctx_rtu; |
| 1082 | - ctx_rtu = (modbus_rtu_t *)ctx->backend_data; | |
| 1075 | + ctx_rtu = (modbus_rtu_t *) ctx->backend_data; | |
| 1083 | 1076 | return ctx_rtu->rts_delay; |
| 1084 | 1077 | #else |
| 1085 | 1078 | if (ctx->debug) { |
| ... | ... | @@ -1104,7 +1097,7 @@ int modbus_rtu_set_rts_delay(modbus_t *ctx, int us) |
| 1104 | 1097 | if (ctx->backend->backend_type == _MODBUS_BACKEND_TYPE_RTU) { |
| 1105 | 1098 | #if HAVE_DECL_TIOCM_RTS |
| 1106 | 1099 | modbus_rtu_t *ctx_rtu; |
| 1107 | - ctx_rtu = (modbus_rtu_t *)ctx->backend_data; | |
| 1100 | + ctx_rtu = (modbus_rtu_t *) ctx->backend_data; | |
| 1108 | 1101 | ctx_rtu->rts_delay = us; |
| 1109 | 1102 | return 0; |
| 1110 | 1103 | #else |
| ... | ... | @@ -1128,13 +1121,15 @@ static void _modbus_rtu_close(modbus_t *ctx) |
| 1128 | 1121 | #if defined(_WIN32) |
| 1129 | 1122 | /* Revert settings */ |
| 1130 | 1123 | if (!SetCommState(ctx_rtu->w_ser.fd, &ctx_rtu->old_dcb) && ctx->debug) { |
| 1131 | - fprintf(stderr, "ERROR Couldn't revert to configuration (LastError %d)\n", | |
| 1132 | - (int)GetLastError()); | |
| 1124 | + fprintf(stderr, | |
| 1125 | + "ERROR Couldn't revert to configuration (LastError %d)\n", | |
| 1126 | + (int) GetLastError()); | |
| 1133 | 1127 | } |
| 1134 | 1128 | |
| 1135 | 1129 | if (!CloseHandle(ctx_rtu->w_ser.fd) && ctx->debug) { |
| 1136 | - fprintf(stderr, "ERROR Error while closing handle (LastError %d)\n", | |
| 1137 | - (int)GetLastError()); | |
| 1130 | + fprintf(stderr, | |
| 1131 | + "ERROR Error while closing handle (LastError %d)\n", | |
| 1132 | + (int) GetLastError()); | |
| 1138 | 1133 | } |
| 1139 | 1134 | #else |
| 1140 | 1135 | if (ctx->s >= 0) { |
| ... | ... | @@ -1156,13 +1151,13 @@ static int _modbus_rtu_flush(modbus_t *ctx) |
| 1156 | 1151 | #endif |
| 1157 | 1152 | } |
| 1158 | 1153 | |
| 1159 | -static int _modbus_rtu_select(modbus_t *ctx, fd_set *rset, | |
| 1160 | - struct timeval *tv, int length_to_read) | |
| 1154 | +static int | |
| 1155 | +_modbus_rtu_select(modbus_t *ctx, fd_set *rset, struct timeval *tv, int length_to_read) | |
| 1161 | 1156 | { |
| 1162 | 1157 | int s_rc; |
| 1163 | 1158 | #if defined(_WIN32) |
| 1164 | - s_rc = win32_ser_select(&((modbus_rtu_t *)ctx->backend_data)->w_ser, | |
| 1165 | - length_to_read, tv); | |
| 1159 | + s_rc = win32_ser_select( | |
| 1160 | + &((modbus_rtu_t *) ctx->backend_data)->w_ser, length_to_read, tv); | |
| 1166 | 1161 | if (s_rc == 0) { |
| 1167 | 1162 | errno = ETIMEDOUT; |
| 1168 | 1163 | return -1; |
| ... | ... | @@ -1172,7 +1167,7 @@ static int _modbus_rtu_select(modbus_t *ctx, fd_set *rset, |
| 1172 | 1167 | return -1; |
| 1173 | 1168 | } |
| 1174 | 1169 | #else |
| 1175 | - while ((s_rc = select(ctx->s+1, rset, NULL, NULL, tv)) == -1) { | |
| 1170 | + while ((s_rc = select(ctx->s + 1, rset, NULL, NULL, tv)) == -1) { | |
| 1176 | 1171 | if (errno == EINTR) { |
| 1177 | 1172 | if (ctx->debug) { |
| 1178 | 1173 | fprintf(stderr, "A non blocked signal was caught\n"); |
| ... | ... | @@ -1195,15 +1190,17 @@ static int _modbus_rtu_select(modbus_t *ctx, fd_set *rset, |
| 1195 | 1190 | return s_rc; |
| 1196 | 1191 | } |
| 1197 | 1192 | |
| 1198 | -static void _modbus_rtu_free(modbus_t *ctx) { | |
| 1193 | +static void _modbus_rtu_free(modbus_t *ctx) | |
| 1194 | +{ | |
| 1199 | 1195 | if (ctx->backend_data) { |
| 1200 | - free(((modbus_rtu_t *)ctx->backend_data)->device); | |
| 1196 | + free(((modbus_rtu_t *) ctx->backend_data)->device); | |
| 1201 | 1197 | free(ctx->backend_data); |
| 1202 | 1198 | } |
| 1203 | 1199 | |
| 1204 | 1200 | free(ctx); |
| 1205 | 1201 | } |
| 1206 | 1202 | |
| 1203 | +// clang-format off | |
| 1207 | 1204 | const modbus_backend_t _modbus_rtu_backend = { |
| 1208 | 1205 | _MODBUS_BACKEND_TYPE_RTU, |
| 1209 | 1206 | _MODBUS_RTU_HEADER_LENGTH, |
| ... | ... | @@ -1226,9 +1223,10 @@ const modbus_backend_t _modbus_rtu_backend = { |
| 1226 | 1223 | _modbus_rtu_free |
| 1227 | 1224 | }; |
| 1228 | 1225 | |
| 1229 | -modbus_t* modbus_new_rtu(const char *device, | |
| 1230 | - int baud, char parity, int data_bit, | |
| 1231 | - int stop_bit) | |
| 1226 | +// clang-format on | |
| 1227 | + | |
| 1228 | +modbus_t * | |
| 1229 | +modbus_new_rtu(const char *device, int baud, char parity, int data_bit, int stop_bit) | |
| 1232 | 1230 | { |
| 1233 | 1231 | modbus_t *ctx; |
| 1234 | 1232 | modbus_rtu_t *ctx_rtu; |
| ... | ... | @@ -1247,23 +1245,23 @@ modbus_t* modbus_new_rtu(const char *device, |
| 1247 | 1245 | return NULL; |
| 1248 | 1246 | } |
| 1249 | 1247 | |
| 1250 | - ctx = (modbus_t *)malloc(sizeof(modbus_t)); | |
| 1248 | + ctx = (modbus_t *) malloc(sizeof(modbus_t)); | |
| 1251 | 1249 | if (ctx == NULL) { |
| 1252 | 1250 | return NULL; |
| 1253 | 1251 | } |
| 1254 | 1252 | |
| 1255 | 1253 | _modbus_init_common(ctx); |
| 1256 | 1254 | ctx->backend = &_modbus_rtu_backend; |
| 1257 | - ctx->backend_data = (modbus_rtu_t *)malloc(sizeof(modbus_rtu_t)); | |
| 1255 | + ctx->backend_data = (modbus_rtu_t *) malloc(sizeof(modbus_rtu_t)); | |
| 1258 | 1256 | if (ctx->backend_data == NULL) { |
| 1259 | 1257 | modbus_free(ctx); |
| 1260 | 1258 | errno = ENOMEM; |
| 1261 | 1259 | return NULL; |
| 1262 | 1260 | } |
| 1263 | - ctx_rtu = (modbus_rtu_t *)ctx->backend_data; | |
| 1261 | + ctx_rtu = (modbus_rtu_t *) ctx->backend_data; | |
| 1264 | 1262 | |
| 1265 | 1263 | /* Device name and \0 */ |
| 1266 | - ctx_rtu->device = (char *)malloc((strlen(device) + 1) * sizeof(char)); | |
| 1264 | + ctx_rtu->device = (char *) malloc((strlen(device) + 1) * sizeof(char)); | |
| 1267 | 1265 | if (ctx_rtu->device == NULL) { |
| 1268 | 1266 | modbus_free(ctx); |
| 1269 | 1267 | errno = ENOMEM; |
| ... | ... | @@ -1292,7 +1290,8 @@ modbus_t* modbus_new_rtu(const char *device, |
| 1292 | 1290 | ctx_rtu->rts = MODBUS_RTU_RTS_NONE; |
| 1293 | 1291 | |
| 1294 | 1292 | /* Calculate estimated time in micro second to send one byte */ |
| 1295 | - ctx_rtu->onebyte_time = 1000000 * (1 + data_bit + (parity == 'N' ? 0 : 1) + stop_bit) / baud; | |
| 1293 | + ctx_rtu->onebyte_time = | |
| 1294 | + 1000000 * (1 + data_bit + (parity == 'N' ? 0 : 1) + stop_bit) / baud; | |
| 1296 | 1295 | |
| 1297 | 1296 | /* The internal function is used by default to set RTS */ |
| 1298 | 1297 | ctx_rtu->set_rts = _modbus_rtu_ioctl_rts; | ... | ... |
src/modbus-rtu.h
| ... | ... | @@ -14,10 +14,10 @@ MODBUS_BEGIN_DECLS |
| 14 | 14 | /* Modbus_Application_Protocol_V1_1b.pdf Chapter 4 Section 1 Page 5 |
| 15 | 15 | * RS232 / RS485 ADU = 253 bytes + slave (1 byte) + CRC (2 bytes) = 256 bytes |
| 16 | 16 | */ |
| 17 | -#define MODBUS_RTU_MAX_ADU_LENGTH 256 | |
| 17 | +#define MODBUS_RTU_MAX_ADU_LENGTH 256 | |
| 18 | 18 | |
| 19 | -MODBUS_API modbus_t* modbus_new_rtu(const char *device, int baud, char parity, | |
| 20 | - int data_bit, int stop_bit); | |
| 19 | +MODBUS_API modbus_t * | |
| 20 | +modbus_new_rtu(const char *device, int baud, char parity, int data_bit, int stop_bit); | |
| 21 | 21 | |
| 22 | 22 | #define MODBUS_RTU_RS232 0 |
| 23 | 23 | #define MODBUS_RTU_RS485 1 |
| ... | ... | @@ -25,14 +25,15 @@ MODBUS_API modbus_t* modbus_new_rtu(const char *device, int baud, char parity, |
| 25 | 25 | MODBUS_API int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode); |
| 26 | 26 | MODBUS_API int modbus_rtu_get_serial_mode(modbus_t *ctx); |
| 27 | 27 | |
| 28 | -#define MODBUS_RTU_RTS_NONE 0 | |
| 29 | -#define MODBUS_RTU_RTS_UP 1 | |
| 30 | -#define MODBUS_RTU_RTS_DOWN 2 | |
| 28 | +#define MODBUS_RTU_RTS_NONE 0 | |
| 29 | +#define MODBUS_RTU_RTS_UP 1 | |
| 30 | +#define MODBUS_RTU_RTS_DOWN 2 | |
| 31 | 31 | |
| 32 | 32 | MODBUS_API int modbus_rtu_set_rts(modbus_t *ctx, int mode); |
| 33 | 33 | MODBUS_API int modbus_rtu_get_rts(modbus_t *ctx); |
| 34 | 34 | |
| 35 | -MODBUS_API int modbus_rtu_set_custom_rts(modbus_t *ctx, void (*set_rts) (modbus_t *ctx, int on)); | |
| 35 | +MODBUS_API int modbus_rtu_set_custom_rts(modbus_t *ctx, | |
| 36 | + void (*set_rts)(modbus_t *ctx, int on)); | |
| 36 | 37 | |
| 37 | 38 | MODBUS_API int modbus_rtu_set_rts_delay(modbus_t *ctx, int us); |
| 38 | 39 | MODBUS_API int modbus_rtu_get_rts_delay(modbus_t *ctx); | ... | ... |
src/modbus-tcp-private.h
| ... | ... | @@ -7,11 +7,11 @@ |
| 7 | 7 | #ifndef MODBUS_TCP_PRIVATE_H |
| 8 | 8 | #define MODBUS_TCP_PRIVATE_H |
| 9 | 9 | |
| 10 | -#define _MODBUS_TCP_HEADER_LENGTH 7 | |
| 10 | +#define _MODBUS_TCP_HEADER_LENGTH 7 | |
| 11 | 11 | #define _MODBUS_TCP_PRESET_REQ_LENGTH 12 |
| 12 | -#define _MODBUS_TCP_PRESET_RSP_LENGTH 8 | |
| 12 | +#define _MODBUS_TCP_PRESET_RSP_LENGTH 8 | |
| 13 | 13 | |
| 14 | -#define _MODBUS_TCP_CHECKSUM_LENGTH 0 | |
| 14 | +#define _MODBUS_TCP_CHECKSUM_LENGTH 0 | |
| 15 | 15 | |
| 16 | 16 | /* In both structures, the transaction ID must be placed on first position |
| 17 | 17 | to have a quick access not dependent of the TCP backend */ | ... | ... |
src/modbus-tcp.c
| ... | ... | @@ -4,6 +4,7 @@ |
| 4 | 4 | * SPDX-License-Identifier: LGPL-2.1-or-later |
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | +// clang-format off | |
| 7 | 8 | #if defined(_WIN32) |
| 8 | 9 | # define OS_WIN32 |
| 9 | 10 | /* ws2_32.dll has getaddrinfo and freeaddrinfo on Windows XP and later. |
| ... | ... | @@ -52,11 +53,12 @@ |
| 52 | 53 | #if defined(_AIX) && !defined(MSG_DONTWAIT) |
| 53 | 54 | #define MSG_DONTWAIT MSG_NONBLOCK |
| 54 | 55 | #endif |
| 56 | +// clang-format on | |
| 55 | 57 | |
| 56 | 58 | #include "modbus-private.h" |
| 57 | 59 | |
| 58 | -#include "modbus-tcp.h" | |
| 59 | 60 | #include "modbus-tcp-private.h" |
| 61 | +#include "modbus-tcp.h" | |
| 60 | 62 | |
| 61 | 63 | #ifdef OS_WIN32 |
| 62 | 64 | static int _modbus_tcp_init_win32(void) |
| ... | ... | @@ -65,8 +67,9 @@ static int _modbus_tcp_init_win32(void) |
| 65 | 67 | WSADATA wsaData; |
| 66 | 68 | |
| 67 | 69 | if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { |
| 68 | - fprintf(stderr, "WSAStartup() returned error code %d\n", | |
| 69 | - (unsigned int)GetLastError()); | |
| 70 | + fprintf(stderr, | |
| 71 | + "WSAStartup() returned error code %d\n", | |
| 72 | + (unsigned int) GetLastError()); | |
| 70 | 73 | errno = EIO; |
| 71 | 74 | return -1; |
| 72 | 75 | } |
| ... | ... | @@ -94,9 +97,8 @@ static int _modbus_set_slave(modbus_t *ctx, int slave) |
| 94 | 97 | } |
| 95 | 98 | |
| 96 | 99 | /* Builds a TCP request header */ |
| 97 | -static int _modbus_tcp_build_request_basis(modbus_t *ctx, int function, | |
| 98 | - int addr, int nb, | |
| 99 | - uint8_t *req) | |
| 100 | +static int _modbus_tcp_build_request_basis( | |
| 101 | + modbus_t *ctx, int function, int addr, int nb, uint8_t *req) | |
| 100 | 102 | { |
| 101 | 103 | modbus_tcp_t *ctx_tcp = ctx->backend_data; |
| 102 | 104 | |
| ... | ... | @@ -148,7 +150,6 @@ static int _modbus_tcp_build_response_basis(sft_t *sft, uint8_t *rsp) |
| 148 | 150 | return _MODBUS_TCP_PRESET_RSP_LENGTH; |
| 149 | 151 | } |
| 150 | 152 | |
| 151 | - | |
| 152 | 153 | static int _modbus_tcp_prepare_response_tid(const uint8_t *req, int *req_length) |
| 153 | 154 | { |
| 154 | 155 | return (req[0] << 8) + req[1]; |
| ... | ... | @@ -171,15 +172,17 @@ static ssize_t _modbus_tcp_send(modbus_t *ctx, const uint8_t *req, int req_lengt |
| 171 | 172 | Requests not to send SIGPIPE on errors on stream oriented |
| 172 | 173 | sockets when the other end breaks the connection. The EPIPE |
| 173 | 174 | error is still returned. */ |
| 174 | - return send(ctx->s, (const char *)req, req_length, MSG_NOSIGNAL); | |
| 175 | + return send(ctx->s, (const char *) req, req_length, MSG_NOSIGNAL); | |
| 175 | 176 | } |
| 176 | 177 | |
| 177 | -static int _modbus_tcp_receive(modbus_t *ctx, uint8_t *req) { | |
| 178 | +static int _modbus_tcp_receive(modbus_t *ctx, uint8_t *req) | |
| 179 | +{ | |
| 178 | 180 | return _modbus_receive_msg(ctx, req, MSG_INDICATION); |
| 179 | 181 | } |
| 180 | 182 | |
| 181 | -static ssize_t _modbus_tcp_recv(modbus_t *ctx, uint8_t *rsp, int rsp_length) { | |
| 182 | - return recv(ctx->s, (char *)rsp, rsp_length, 0); | |
| 183 | +static ssize_t _modbus_tcp_recv(modbus_t *ctx, uint8_t *rsp, int rsp_length) | |
| 184 | +{ | |
| 185 | + return recv(ctx->s, (char *) rsp, rsp_length, 0); | |
| 183 | 186 | } |
| 184 | 187 | |
| 185 | 188 | static int _modbus_tcp_check_integrity(modbus_t *ctx, uint8_t *msg, const int msg_length) |
| ... | ... | @@ -187,15 +190,19 @@ static int _modbus_tcp_check_integrity(modbus_t *ctx, uint8_t *msg, const int ms |
| 187 | 190 | return msg_length; |
| 188 | 191 | } |
| 189 | 192 | |
| 190 | -static int _modbus_tcp_pre_check_confirmation(modbus_t *ctx, const uint8_t *req, | |
| 191 | - const uint8_t *rsp, int rsp_length) | |
| 193 | +static int _modbus_tcp_pre_check_confirmation(modbus_t *ctx, | |
| 194 | + const uint8_t *req, | |
| 195 | + const uint8_t *rsp, | |
| 196 | + int rsp_length) | |
| 192 | 197 | { |
| 193 | 198 | unsigned int protocol_id; |
| 194 | 199 | /* Check transaction ID */ |
| 195 | 200 | if (req[0] != rsp[0] || req[1] != rsp[1]) { |
| 196 | 201 | if (ctx->debug) { |
| 197 | - fprintf(stderr, "Invalid transaction ID received 0x%X (not 0x%X)\n", | |
| 198 | - (rsp[0] << 8) + rsp[1], (req[0] << 8) + req[1]); | |
| 202 | + fprintf(stderr, | |
| 203 | + "Invalid transaction ID received 0x%X (not 0x%X)\n", | |
| 204 | + (rsp[0] << 8) + rsp[1], | |
| 205 | + (req[0] << 8) + req[1]); | |
| 199 | 206 | } |
| 200 | 207 | errno = EMBBADDATA; |
| 201 | 208 | return -1; |
| ... | ... | @@ -205,8 +212,7 @@ static int _modbus_tcp_pre_check_confirmation(modbus_t *ctx, const uint8_t *req, |
| 205 | 212 | protocol_id = (rsp[2] << 8) + rsp[3]; |
| 206 | 213 | if (protocol_id != 0x0) { |
| 207 | 214 | if (ctx->debug) { |
| 208 | - fprintf(stderr, "Invalid protocol ID received 0x%X (not 0x0)\n", | |
| 209 | - protocol_id); | |
| 215 | + fprintf(stderr, "Invalid protocol ID received 0x%X (not 0x0)\n", protocol_id); | |
| 210 | 216 | } |
| 211 | 217 | errno = EMBBADDATA; |
| 212 | 218 | return -1; |
| ... | ... | @@ -223,8 +229,7 @@ static int _modbus_tcp_set_ipv4_options(int s) |
| 223 | 229 | /* Set the TCP no delay flag */ |
| 224 | 230 | /* SOL_TCP = IPPROTO_TCP */ |
| 225 | 231 | option = 1; |
| 226 | - rc = setsockopt(s, IPPROTO_TCP, TCP_NODELAY, | |
| 227 | - (const void *)&option, sizeof(int)); | |
| 232 | + rc = setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (const void *) &option, sizeof(int)); | |
| 228 | 233 | if (rc == -1) { |
| 229 | 234 | return -1; |
| 230 | 235 | } |
| ... | ... | @@ -252,8 +257,7 @@ static int _modbus_tcp_set_ipv4_options(int s) |
| 252 | 257 | **/ |
| 253 | 258 | /* Set the IP low delay option */ |
| 254 | 259 | option = IPTOS_LOWDELAY; |
| 255 | - rc = setsockopt(s, IPPROTO_IP, IP_TOS, | |
| 256 | - (const void *)&option, sizeof(int)); | |
| 260 | + rc = setsockopt(s, IPPROTO_IP, IP_TOS, (const void *) &option, sizeof(int)); | |
| 257 | 261 | if (rc == -1) { |
| 258 | 262 | return -1; |
| 259 | 263 | } |
| ... | ... | @@ -262,7 +266,9 @@ static int _modbus_tcp_set_ipv4_options(int s) |
| 262 | 266 | return 0; |
| 263 | 267 | } |
| 264 | 268 | |
| 265 | -static int _connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen, | |
| 269 | +static int _connect(int sockfd, | |
| 270 | + const struct sockaddr *addr, | |
| 271 | + socklen_t addrlen, | |
| 266 | 272 | const struct timeval *ro_tv) |
| 267 | 273 | { |
| 268 | 274 | int rc = connect(sockfd, addr, addrlen); |
| ... | ... | @@ -292,7 +298,7 @@ static int _connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen, |
| 292 | 298 | } |
| 293 | 299 | |
| 294 | 300 | /* The connection is established if SO_ERROR and optval are set to 0 */ |
| 295 | - rc = getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (void *)&optval, &optlen); | |
| 301 | + rc = getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (void *) &optval, &optlen); | |
| 296 | 302 | if (rc == 0 && optval == 0) { |
| 297 | 303 | return 0; |
| 298 | 304 | } else { |
| ... | ... | @@ -345,7 +351,8 @@ static int _modbus_tcp_connect(modbus_t *ctx) |
| 345 | 351 | addr.sin_family = AF_INET; |
| 346 | 352 | addr.sin_port = htons(ctx_tcp->port); |
| 347 | 353 | addr.sin_addr.s_addr = inet_addr(ctx_tcp->ip); |
| 348 | - rc = _connect(ctx->s, (struct sockaddr *)&addr, sizeof(addr), &ctx->response_timeout); | |
| 354 | + rc = | |
| 355 | + _connect(ctx->s, (struct sockaddr *) &addr, sizeof(addr), &ctx->response_timeout); | |
| 349 | 356 | if (rc == -1) { |
| 350 | 357 | close(ctx->s); |
| 351 | 358 | ctx->s = -1; |
| ... | ... | @@ -381,8 +388,7 @@ static int _modbus_tcp_pi_connect(modbus_t *ctx) |
| 381 | 388 | ai_hints.ai_next = NULL; |
| 382 | 389 | |
| 383 | 390 | ai_list = NULL; |
| 384 | - rc = getaddrinfo(ctx_tcp_pi->node, ctx_tcp_pi->service, | |
| 385 | - &ai_hints, &ai_list); | |
| 391 | + rc = getaddrinfo(ctx_tcp_pi->node, ctx_tcp_pi->service, &ai_hints, &ai_list); | |
| 386 | 392 | if (rc != 0) { |
| 387 | 393 | if (ctx->debug) { |
| 388 | 394 | fprintf(stderr, "Error returned by getaddrinfo: %s\n", gai_strerror(rc)); |
| ... | ... | @@ -462,7 +468,7 @@ static int _modbus_tcp_flush(modbus_t *ctx) |
| 462 | 468 | tv.tv_usec = 0; |
| 463 | 469 | FD_ZERO(&rset); |
| 464 | 470 | FD_SET(ctx->s, &rset); |
| 465 | - rc = select(ctx->s+1, &rset, NULL, NULL, &tv); | |
| 471 | + rc = select(ctx->s + 1, &rset, NULL, NULL, &tv); | |
| 466 | 472 | if (rc == -1) { |
| 467 | 473 | return -1; |
| 468 | 474 | } |
| ... | ... | @@ -514,8 +520,8 @@ int modbus_tcp_listen(modbus_t *ctx, int nb_connection) |
| 514 | 520 | } |
| 515 | 521 | |
| 516 | 522 | enable = 1; |
| 517 | - if (setsockopt(new_s, SOL_SOCKET, SO_REUSEADDR, | |
| 518 | - (char *)&enable, sizeof(enable)) == -1) { | |
| 523 | + if (setsockopt(new_s, SOL_SOCKET, SO_REUSEADDR, (char *) &enable, sizeof(enable)) == | |
| 524 | + -1) { | |
| 519 | 525 | close(new_s); |
| 520 | 526 | return -1; |
| 521 | 527 | } |
| ... | ... | @@ -531,7 +537,7 @@ int modbus_tcp_listen(modbus_t *ctx, int nb_connection) |
| 531 | 537 | /* Listen only specified IP address */ |
| 532 | 538 | addr.sin_addr.s_addr = inet_addr(ctx_tcp->ip); |
| 533 | 539 | } |
| 534 | - if (bind(new_s, (struct sockaddr *)&addr, sizeof(addr)) == -1) { | |
| 540 | + if (bind(new_s, (struct sockaddr *) &addr, sizeof(addr)) == -1) { | |
| 535 | 541 | close(new_s); |
| 536 | 542 | return -1; |
| 537 | 543 | } |
| ... | ... | @@ -580,7 +586,7 @@ int modbus_tcp_pi_listen(modbus_t *ctx, int nb_connection) |
| 580 | 586 | service = ctx_tcp_pi->service; |
| 581 | 587 | } |
| 582 | 588 | |
| 583 | - memset(&ai_hints, 0, sizeof (ai_hints)); | |
| 589 | + memset(&ai_hints, 0, sizeof(ai_hints)); | |
| 584 | 590 | /* If node is not NULL, than the AI_PASSIVE flag is ignored. */ |
| 585 | 591 | ai_hints.ai_flags |= AI_PASSIVE; |
| 586 | 592 | #ifdef AI_ADDRCONFIG |
| ... | ... | @@ -619,8 +625,8 @@ int modbus_tcp_pi_listen(modbus_t *ctx, int nb_connection) |
| 619 | 625 | continue; |
| 620 | 626 | } else { |
| 621 | 627 | int enable = 1; |
| 622 | - rc = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, | |
| 623 | - (void *)&enable, sizeof (enable)); | |
| 628 | + rc = | |
| 629 | + setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *) &enable, sizeof(enable)); | |
| 624 | 630 | if (rc != 0) { |
| 625 | 631 | close(s); |
| 626 | 632 | if (ctx->debug) { |
| ... | ... | @@ -673,9 +679,9 @@ int modbus_tcp_accept(modbus_t *ctx, int *s) |
| 673 | 679 | addrlen = sizeof(addr); |
| 674 | 680 | #ifdef HAVE_ACCEPT4 |
| 675 | 681 | /* Inherit socket flags and use accept4 call */ |
| 676 | - ctx->s = accept4(*s, (struct sockaddr *)&addr, &addrlen, SOCK_CLOEXEC); | |
| 682 | + ctx->s = accept4(*s, (struct sockaddr *) &addr, &addrlen, SOCK_CLOEXEC); | |
| 677 | 683 | #else |
| 678 | - ctx->s = accept(*s, (struct sockaddr *)&addr, &addrlen); | |
| 684 | + ctx->s = accept(*s, (struct sockaddr *) &addr, &addrlen); | |
| 679 | 685 | #endif |
| 680 | 686 | |
| 681 | 687 | if (ctx->s < 0) { |
| ... | ... | @@ -683,8 +689,7 @@ int modbus_tcp_accept(modbus_t *ctx, int *s) |
| 683 | 689 | } |
| 684 | 690 | |
| 685 | 691 | if (ctx->debug) { |
| 686 | - printf("The client connection from %s is accepted\n", | |
| 687 | - inet_ntoa(addr.sin_addr)); | |
| 692 | + printf("The client connection from %s is accepted\n", inet_ntoa(addr.sin_addr)); | |
| 688 | 693 | } |
| 689 | 694 | |
| 690 | 695 | return ctx->s; |
| ... | ... | @@ -703,9 +708,9 @@ int modbus_tcp_pi_accept(modbus_t *ctx, int *s) |
| 703 | 708 | addrlen = sizeof(addr); |
| 704 | 709 | #ifdef HAVE_ACCEPT4 |
| 705 | 710 | /* Inherit socket flags and use accept4 call */ |
| 706 | - ctx->s = accept4(*s, (struct sockaddr *)&addr, &addrlen, SOCK_CLOEXEC); | |
| 711 | + ctx->s = accept4(*s, (struct sockaddr *) &addr, &addrlen, SOCK_CLOEXEC); | |
| 707 | 712 | #else |
| 708 | - ctx->s = accept(*s, (struct sockaddr *)&addr, &addrlen); | |
| 713 | + ctx->s = accept(*s, (struct sockaddr *) &addr, &addrlen); | |
| 709 | 714 | #endif |
| 710 | 715 | |
| 711 | 716 | if (ctx->s < 0) { |
| ... | ... | @@ -719,10 +724,11 @@ int modbus_tcp_pi_accept(modbus_t *ctx, int *s) |
| 719 | 724 | return ctx->s; |
| 720 | 725 | } |
| 721 | 726 | |
| 722 | -static int _modbus_tcp_select(modbus_t *ctx, fd_set *rset, struct timeval *tv, int length_to_read) | |
| 727 | +static int | |
| 728 | +_modbus_tcp_select(modbus_t *ctx, fd_set *rset, struct timeval *tv, int length_to_read) | |
| 723 | 729 | { |
| 724 | 730 | int s_rc; |
| 725 | - while ((s_rc = select(ctx->s+1, rset, NULL, NULL, tv)) == -1) { | |
| 731 | + while ((s_rc = select(ctx->s + 1, rset, NULL, NULL, tv)) == -1) { | |
| 726 | 732 | if (errno == EINTR) { |
| 727 | 733 | if (ctx->debug) { |
| 728 | 734 | fprintf(stderr, "A non blocked signal was caught\n"); |
| ... | ... | @@ -743,14 +749,16 @@ static int _modbus_tcp_select(modbus_t *ctx, fd_set *rset, struct timeval *tv, i |
| 743 | 749 | return s_rc; |
| 744 | 750 | } |
| 745 | 751 | |
| 746 | -static void _modbus_tcp_free(modbus_t *ctx) { | |
| 752 | +static void _modbus_tcp_free(modbus_t *ctx) | |
| 753 | +{ | |
| 747 | 754 | if (ctx->backend_data) { |
| 748 | 755 | free(ctx->backend_data); |
| 749 | 756 | } |
| 750 | 757 | free(ctx); |
| 751 | 758 | } |
| 752 | 759 | |
| 753 | -static void _modbus_tcp_pi_free(modbus_t *ctx) { | |
| 760 | +static void _modbus_tcp_pi_free(modbus_t *ctx) | |
| 761 | +{ | |
| 754 | 762 | if (ctx->backend_data) { |
| 755 | 763 | modbus_tcp_pi_t *ctx_tcp_pi = ctx->backend_data; |
| 756 | 764 | free(ctx_tcp_pi->node); |
| ... | ... | @@ -761,6 +769,7 @@ static void _modbus_tcp_pi_free(modbus_t *ctx) { |
| 761 | 769 | free(ctx); |
| 762 | 770 | } |
| 763 | 771 | |
| 772 | +// clang-format off | |
| 764 | 773 | const modbus_backend_t _modbus_tcp_backend = { |
| 765 | 774 | _MODBUS_BACKEND_TYPE_TCP, |
| 766 | 775 | _MODBUS_TCP_HEADER_LENGTH, |
| ... | ... | @@ -783,7 +792,6 @@ const modbus_backend_t _modbus_tcp_backend = { |
| 783 | 792 | _modbus_tcp_free |
| 784 | 793 | }; |
| 785 | 794 | |
| 786 | - | |
| 787 | 795 | const modbus_backend_t _modbus_tcp_pi_backend = { |
| 788 | 796 | _MODBUS_BACKEND_TYPE_TCP, |
| 789 | 797 | _MODBUS_TCP_HEADER_LENGTH, |
| ... | ... | @@ -806,7 +814,9 @@ const modbus_backend_t _modbus_tcp_pi_backend = { |
| 806 | 814 | _modbus_tcp_pi_free |
| 807 | 815 | }; |
| 808 | 816 | |
| 809 | -modbus_t* modbus_new_tcp(const char *ip, int port) | |
| 817 | +// clang-format on | |
| 818 | + | |
| 819 | +modbus_t *modbus_new_tcp(const char *ip, int port) | |
| 810 | 820 | { |
| 811 | 821 | modbus_t *ctx; |
| 812 | 822 | modbus_tcp_t *ctx_tcp; |
| ... | ... | @@ -826,7 +836,7 @@ modbus_t* modbus_new_tcp(const char *ip, int port) |
| 826 | 836 | } |
| 827 | 837 | #endif |
| 828 | 838 | |
| 829 | - ctx = (modbus_t *)malloc(sizeof(modbus_t)); | |
| 839 | + ctx = (modbus_t *) malloc(sizeof(modbus_t)); | |
| 830 | 840 | if (ctx == NULL) { |
| 831 | 841 | return NULL; |
| 832 | 842 | } |
| ... | ... | @@ -837,13 +847,13 @@ modbus_t* modbus_new_tcp(const char *ip, int port) |
| 837 | 847 | |
| 838 | 848 | ctx->backend = &_modbus_tcp_backend; |
| 839 | 849 | |
| 840 | - ctx->backend_data = (modbus_tcp_t *)malloc(sizeof(modbus_tcp_t)); | |
| 850 | + ctx->backend_data = (modbus_tcp_t *) malloc(sizeof(modbus_tcp_t)); | |
| 841 | 851 | if (ctx->backend_data == NULL) { |
| 842 | 852 | modbus_free(ctx); |
| 843 | 853 | errno = ENOMEM; |
| 844 | 854 | return NULL; |
| 845 | 855 | } |
| 846 | - ctx_tcp = (modbus_tcp_t *)ctx->backend_data; | |
| 856 | + ctx_tcp = (modbus_tcp_t *) ctx->backend_data; | |
| 847 | 857 | |
| 848 | 858 | if (ip != NULL) { |
| 849 | 859 | dest_size = sizeof(char) * 16; |
| ... | ... | @@ -870,13 +880,12 @@ modbus_t* modbus_new_tcp(const char *ip, int port) |
| 870 | 880 | return ctx; |
| 871 | 881 | } |
| 872 | 882 | |
| 873 | - | |
| 874 | -modbus_t* modbus_new_tcp_pi(const char *node, const char *service) | |
| 883 | +modbus_t *modbus_new_tcp_pi(const char *node, const char *service) | |
| 875 | 884 | { |
| 876 | 885 | modbus_t *ctx; |
| 877 | 886 | modbus_tcp_pi_t *ctx_tcp_pi; |
| 878 | 887 | |
| 879 | - ctx = (modbus_t *)malloc(sizeof(modbus_t)); | |
| 888 | + ctx = (modbus_t *) malloc(sizeof(modbus_t)); | |
| 880 | 889 | if (ctx == NULL) { |
| 881 | 890 | return NULL; |
| 882 | 891 | } |
| ... | ... | @@ -887,13 +896,13 @@ modbus_t* modbus_new_tcp_pi(const char *node, const char *service) |
| 887 | 896 | |
| 888 | 897 | ctx->backend = &_modbus_tcp_pi_backend; |
| 889 | 898 | |
| 890 | - ctx->backend_data = (modbus_tcp_pi_t *)malloc(sizeof(modbus_tcp_pi_t)); | |
| 899 | + ctx->backend_data = (modbus_tcp_pi_t *) malloc(sizeof(modbus_tcp_pi_t)); | |
| 891 | 900 | if (ctx->backend_data == NULL) { |
| 892 | 901 | modbus_free(ctx); |
| 893 | 902 | errno = ENOMEM; |
| 894 | 903 | return NULL; |
| 895 | 904 | } |
| 896 | - ctx_tcp_pi = (modbus_tcp_pi_t *)ctx->backend_data; | |
| 905 | + ctx_tcp_pi = (modbus_tcp_pi_t *) ctx->backend_data; | |
| 897 | 906 | ctx_tcp_pi->node = NULL; |
| 898 | 907 | ctx_tcp_pi->service = NULL; |
| 899 | 908 | ... | ... |
src/modbus-tcp.h
| ... | ... | @@ -15,35 +15,35 @@ MODBUS_BEGIN_DECLS |
| 15 | 15 | /* Win32 with MinGW, supplement to <errno.h> */ |
| 16 | 16 | #include <winsock2.h> |
| 17 | 17 | #if !defined(ECONNRESET) |
| 18 | -#define ECONNRESET WSAECONNRESET | |
| 18 | +#define ECONNRESET WSAECONNRESET | |
| 19 | 19 | #endif |
| 20 | 20 | #if !defined(ECONNREFUSED) |
| 21 | 21 | #define ECONNREFUSED WSAECONNREFUSED |
| 22 | 22 | #endif |
| 23 | 23 | #if !defined(ETIMEDOUT) |
| 24 | -#define ETIMEDOUT WSAETIMEDOUT | |
| 24 | +#define ETIMEDOUT WSAETIMEDOUT | |
| 25 | 25 | #endif |
| 26 | 26 | #if !defined(ENOPROTOOPT) |
| 27 | -#define ENOPROTOOPT WSAENOPROTOOPT | |
| 27 | +#define ENOPROTOOPT WSAENOPROTOOPT | |
| 28 | 28 | #endif |
| 29 | 29 | #if !defined(EINPROGRESS) |
| 30 | -#define EINPROGRESS WSAEINPROGRESS | |
| 30 | +#define EINPROGRESS WSAEINPROGRESS | |
| 31 | 31 | #endif |
| 32 | 32 | #endif |
| 33 | 33 | |
| 34 | -#define MODBUS_TCP_DEFAULT_PORT 502 | |
| 35 | -#define MODBUS_TCP_SLAVE 0xFF | |
| 34 | +#define MODBUS_TCP_DEFAULT_PORT 502 | |
| 35 | +#define MODBUS_TCP_SLAVE 0xFF | |
| 36 | 36 | |
| 37 | 37 | /* Modbus_Application_Protocol_V1_1b.pdf Chapter 4 Section 1 Page 5 |
| 38 | 38 | * TCP MODBUS ADU = 253 bytes + MBAP (7 bytes) = 260 bytes |
| 39 | 39 | */ |
| 40 | -#define MODBUS_TCP_MAX_ADU_LENGTH 260 | |
| 40 | +#define MODBUS_TCP_MAX_ADU_LENGTH 260 | |
| 41 | 41 | |
| 42 | -MODBUS_API modbus_t* modbus_new_tcp(const char *ip_address, int port); | |
| 42 | +MODBUS_API modbus_t *modbus_new_tcp(const char *ip_address, int port); | |
| 43 | 43 | MODBUS_API int modbus_tcp_listen(modbus_t *ctx, int nb_connection); |
| 44 | 44 | MODBUS_API int modbus_tcp_accept(modbus_t *ctx, int *s); |
| 45 | 45 | |
| 46 | -MODBUS_API modbus_t* modbus_new_tcp_pi(const char *node, const char *service); | |
| 46 | +MODBUS_API modbus_t *modbus_new_tcp_pi(const char *node, const char *service); | |
| 47 | 47 | MODBUS_API int modbus_tcp_pi_listen(modbus_t *ctx, int nb_connection); |
| 48 | 48 | MODBUS_API int modbus_tcp_pi_accept(modbus_t *ctx, int *s); |
| 49 | 49 | ... | ... |
src/modbus-version.h.in
| ... | ... | @@ -29,25 +29,23 @@ |
| 29 | 29 | #define LIBMODBUS_VERSION_MICRO (@LIBMODBUS_VERSION_MICRO@) |
| 30 | 30 | |
| 31 | 31 | /* The full version, like 1.2.3 */ |
| 32 | -#define LIBMODBUS_VERSION @LIBMODBUS_VERSION@ | |
| 32 | +#define LIBMODBUS_VERSION @LIBMODBUS_VERSION@ | |
| 33 | 33 | |
| 34 | 34 | /* The full version, in string form (suited for string concatenation) |
| 35 | 35 | */ |
| 36 | 36 | #define LIBMODBUS_VERSION_STRING "@LIBMODBUS_VERSION@" |
| 37 | 37 | |
| 38 | 38 | /* Numerically encoded version, eg. v1.2.3 is 0x010203 */ |
| 39 | -#define LIBMODBUS_VERSION_HEX ((LIBMODBUS_VERSION_MAJOR << 16) | \ | |
| 40 | - (LIBMODBUS_VERSION_MINOR << 8) | \ | |
| 41 | - (LIBMODBUS_VERSION_MICRO << 0)) | |
| 39 | +#define LIBMODBUS_VERSION_HEX \ | |
| 40 | + ((LIBMODBUS_VERSION_MAJOR << 16) | (LIBMODBUS_VERSION_MINOR << 8) | \ | |
| 41 | + (LIBMODBUS_VERSION_MICRO << 0)) | |
| 42 | 42 | |
| 43 | 43 | /* Evaluates to True if the version is greater than @major, @minor and @micro |
| 44 | 44 | */ |
| 45 | -#define LIBMODBUS_VERSION_CHECK(major,minor,micro) \ | |
| 46 | - (LIBMODBUS_VERSION_MAJOR > (major) || \ | |
| 47 | - (LIBMODBUS_VERSION_MAJOR == (major) && \ | |
| 48 | - LIBMODBUS_VERSION_MINOR > (minor)) || \ | |
| 49 | - (LIBMODBUS_VERSION_MAJOR == (major) && \ | |
| 50 | - LIBMODBUS_VERSION_MINOR == (minor) && \ | |
| 45 | +#define LIBMODBUS_VERSION_CHECK(major, minor, micro) \ | |
| 46 | + (LIBMODBUS_VERSION_MAJOR > (major) || \ | |
| 47 | + (LIBMODBUS_VERSION_MAJOR == (major) && LIBMODBUS_VERSION_MINOR > (minor)) || \ | |
| 48 | + (LIBMODBUS_VERSION_MAJOR == (major) && LIBMODBUS_VERSION_MINOR == (minor) && \ | |
| 51 | 49 | LIBMODBUS_VERSION_MICRO >= (micro))) |
| 52 | 50 | |
| 53 | 51 | #endif /* MODBUS_VERSION_H */ | ... | ... |
src/modbus.c
No preview for this file type
src/modbus.h
| ... | ... | @@ -7,15 +7,16 @@ |
| 7 | 7 | #ifndef MODBUS_H |
| 8 | 8 | #define MODBUS_H |
| 9 | 9 | |
| 10 | +// clang-format off | |
| 10 | 11 | /* Add this for macros that defined unix flavor */ |
| 11 | 12 | #if (defined(__unix__) || defined(unix)) && !defined(USG) |
| 12 | -#include <sys/param.h> | |
| 13 | +# include <sys/param.h> | |
| 13 | 14 | #endif |
| 14 | 15 | |
| 15 | 16 | #ifndef _MSC_VER |
| 16 | -#include <stdint.h> | |
| 17 | +# include <stdint.h> | |
| 17 | 18 | #else |
| 18 | -#include "stdint.h" | |
| 19 | +# include "stdint.h" | |
| 19 | 20 | #endif |
| 20 | 21 | |
| 21 | 22 | #include "modbus-version.h" |
| ... | ... | @@ -38,6 +39,7 @@ |
| 38 | 39 | # define MODBUS_BEGIN_DECLS |
| 39 | 40 | # define MODBUS_END_DECLS |
| 40 | 41 | #endif |
| 42 | +// clang-format on | |
| 41 | 43 | |
| 42 | 44 | MODBUS_BEGIN_DECLS |
| 43 | 45 | |
| ... | ... | @@ -58,28 +60,28 @@ MODBUS_BEGIN_DECLS |
| 58 | 60 | #endif |
| 59 | 61 | |
| 60 | 62 | /* Modbus function codes */ |
| 61 | -#define MODBUS_FC_READ_COILS 0x01 | |
| 62 | -#define MODBUS_FC_READ_DISCRETE_INPUTS 0x02 | |
| 63 | -#define MODBUS_FC_READ_HOLDING_REGISTERS 0x03 | |
| 64 | -#define MODBUS_FC_READ_INPUT_REGISTERS 0x04 | |
| 65 | -#define MODBUS_FC_WRITE_SINGLE_COIL 0x05 | |
| 66 | -#define MODBUS_FC_WRITE_SINGLE_REGISTER 0x06 | |
| 67 | -#define MODBUS_FC_READ_EXCEPTION_STATUS 0x07 | |
| 68 | -#define MODBUS_FC_WRITE_MULTIPLE_COILS 0x0F | |
| 69 | -#define MODBUS_FC_WRITE_MULTIPLE_REGISTERS 0x10 | |
| 70 | -#define MODBUS_FC_REPORT_SLAVE_ID 0x11 | |
| 71 | -#define MODBUS_FC_MASK_WRITE_REGISTER 0x16 | |
| 72 | -#define MODBUS_FC_WRITE_AND_READ_REGISTERS 0x17 | |
| 73 | - | |
| 74 | -#define MODBUS_BROADCAST_ADDRESS 0 | |
| 63 | +#define MODBUS_FC_READ_COILS 0x01 | |
| 64 | +#define MODBUS_FC_READ_DISCRETE_INPUTS 0x02 | |
| 65 | +#define MODBUS_FC_READ_HOLDING_REGISTERS 0x03 | |
| 66 | +#define MODBUS_FC_READ_INPUT_REGISTERS 0x04 | |
| 67 | +#define MODBUS_FC_WRITE_SINGLE_COIL 0x05 | |
| 68 | +#define MODBUS_FC_WRITE_SINGLE_REGISTER 0x06 | |
| 69 | +#define MODBUS_FC_READ_EXCEPTION_STATUS 0x07 | |
| 70 | +#define MODBUS_FC_WRITE_MULTIPLE_COILS 0x0F | |
| 71 | +#define MODBUS_FC_WRITE_MULTIPLE_REGISTERS 0x10 | |
| 72 | +#define MODBUS_FC_REPORT_SLAVE_ID 0x11 | |
| 73 | +#define MODBUS_FC_MASK_WRITE_REGISTER 0x16 | |
| 74 | +#define MODBUS_FC_WRITE_AND_READ_REGISTERS 0x17 | |
| 75 | + | |
| 76 | +#define MODBUS_BROADCAST_ADDRESS 0 | |
| 75 | 77 | |
| 76 | 78 | /* Modbus_Application_Protocol_V1_1b.pdf (chapter 6 section 1 page 12) |
| 77 | 79 | * Quantity of Coils to read (2 bytes): 1 to 2000 (0x7D0) |
| 78 | 80 | * (chapter 6 section 11 page 29) |
| 79 | 81 | * Quantity of Coils to write (2 bytes): 1 to 1968 (0x7B0) |
| 80 | 82 | */ |
| 81 | -#define MODBUS_MAX_READ_BITS 2000 | |
| 82 | -#define MODBUS_MAX_WRITE_BITS 1968 | |
| 83 | +#define MODBUS_MAX_READ_BITS 2000 | |
| 84 | +#define MODBUS_MAX_WRITE_BITS 1968 | |
| 83 | 85 | |
| 84 | 86 | /* Modbus_Application_Protocol_V1_1b.pdf (chapter 6 section 3 page 15) |
| 85 | 87 | * Quantity of Registers to read (2 bytes): 1 to 125 (0x7D) |
| ... | ... | @@ -88,17 +90,17 @@ MODBUS_BEGIN_DECLS |
| 88 | 90 | * (chapter 6 section 17 page 38) |
| 89 | 91 | * Quantity of Registers to write in R/W registers (2 bytes) 1 to 121 (0x79) |
| 90 | 92 | */ |
| 91 | -#define MODBUS_MAX_READ_REGISTERS 125 | |
| 92 | -#define MODBUS_MAX_WRITE_REGISTERS 123 | |
| 93 | -#define MODBUS_MAX_WR_WRITE_REGISTERS 121 | |
| 94 | -#define MODBUS_MAX_WR_READ_REGISTERS 125 | |
| 93 | +#define MODBUS_MAX_READ_REGISTERS 125 | |
| 94 | +#define MODBUS_MAX_WRITE_REGISTERS 123 | |
| 95 | +#define MODBUS_MAX_WR_WRITE_REGISTERS 121 | |
| 96 | +#define MODBUS_MAX_WR_READ_REGISTERS 125 | |
| 95 | 97 | |
| 96 | 98 | /* The size of the MODBUS PDU is limited by the size constraint inherited from |
| 97 | 99 | * the first MODBUS implementation on Serial Line network (max. RS485 ADU = 256 |
| 98 | 100 | * bytes). Therefore, MODBUS PDU for serial line communication = 256 - Server |
| 99 | 101 | * address (1 byte) - CRC (2 bytes) = 253 bytes. |
| 100 | 102 | */ |
| 101 | -#define MODBUS_MAX_PDU_LENGTH 253 | |
| 103 | +#define MODBUS_MAX_PDU_LENGTH 253 | |
| 102 | 104 | |
| 103 | 105 | /* Consequently: |
| 104 | 106 | * - RTU MODBUS ADU = 253 bytes + Server address (1 byte) + CRC (2 bytes) = 256 |
| ... | ... | @@ -108,7 +110,7 @@ MODBUS_BEGIN_DECLS |
| 108 | 110 | * an array of bytes to store responses and it will be compatible with the two |
| 109 | 111 | * backends. |
| 110 | 112 | */ |
| 111 | -#define MODBUS_MAX_ADU_LENGTH 260 | |
| 113 | +#define MODBUS_MAX_ADU_LENGTH 260 | |
| 112 | 114 | |
| 113 | 115 | /* Random number to avoid errno conflicts */ |
| 114 | 116 | #define MODBUS_ENOBASE 112345678 |
| ... | ... | @@ -141,11 +143,11 @@ enum { |
| 141 | 143 | #define EMBXGTAR (MODBUS_ENOBASE + MODBUS_EXCEPTION_GATEWAY_TARGET) |
| 142 | 144 | |
| 143 | 145 | /* Native libmodbus error codes */ |
| 144 | -#define EMBBADCRC (EMBXGTAR + 1) | |
| 145 | -#define EMBBADDATA (EMBXGTAR + 2) | |
| 146 | -#define EMBBADEXC (EMBXGTAR + 3) | |
| 147 | -#define EMBUNKEXC (EMBXGTAR + 4) | |
| 148 | -#define EMBMDATA (EMBXGTAR + 5) | |
| 146 | +#define EMBBADCRC (EMBXGTAR + 1) | |
| 147 | +#define EMBBADDATA (EMBXGTAR + 2) | |
| 148 | +#define EMBBADEXC (EMBXGTAR + 3) | |
| 149 | +#define EMBUNKEXC (EMBXGTAR + 4) | |
| 150 | +#define EMBMDATA (EMBXGTAR + 5) | |
| 149 | 151 | #define EMBBADSLAVE (EMBXGTAR + 6) |
| 150 | 152 | |
| 151 | 153 | extern const unsigned int libmodbus_version_major; |
| ... | ... | @@ -169,35 +171,39 @@ typedef struct _modbus_mapping_t { |
| 169 | 171 | uint16_t *tab_registers; |
| 170 | 172 | } modbus_mapping_t; |
| 171 | 173 | |
| 172 | -typedef enum | |
| 173 | -{ | |
| 174 | - MODBUS_ERROR_RECOVERY_NONE = 0, | |
| 175 | - MODBUS_ERROR_RECOVERY_LINK = (1<<1), | |
| 176 | - MODBUS_ERROR_RECOVERY_PROTOCOL = (1<<2) | |
| 174 | +typedef enum { | |
| 175 | + MODBUS_ERROR_RECOVERY_NONE = 0, | |
| 176 | + MODBUS_ERROR_RECOVERY_LINK = (1 << 1), | |
| 177 | + MODBUS_ERROR_RECOVERY_PROTOCOL = (1 << 2) | |
| 177 | 178 | } modbus_error_recovery_mode; |
| 178 | 179 | |
| 179 | -typedef enum | |
| 180 | -{ | |
| 181 | - MODBUS_QUIRK_NONE = 0, | |
| 182 | - MODBUS_QUIRK_MAX_SLAVE = (1<<1), | |
| 183 | - MODBUS_QUIRK_REPLY_TO_BROADCAST = (1<<2), | |
| 184 | - MODBUS_QUIRK_ALL = 0xFF | |
| 180 | +typedef enum { | |
| 181 | + MODBUS_QUIRK_NONE = 0, | |
| 182 | + MODBUS_QUIRK_MAX_SLAVE = (1 << 1), | |
| 183 | + MODBUS_QUIRK_REPLY_TO_BROADCAST = (1 << 2), | |
| 184 | + MODBUS_QUIRK_ALL = 0xFF | |
| 185 | 185 | } modbus_quirks; |
| 186 | 186 | |
| 187 | -MODBUS_API int modbus_set_slave(modbus_t* ctx, int slave); | |
| 188 | -MODBUS_API int modbus_get_slave(modbus_t* ctx); | |
| 189 | -MODBUS_API int modbus_set_error_recovery(modbus_t *ctx, modbus_error_recovery_mode error_recovery); | |
| 187 | +MODBUS_API int modbus_set_slave(modbus_t *ctx, int slave); | |
| 188 | +MODBUS_API int modbus_get_slave(modbus_t *ctx); | |
| 189 | +MODBUS_API int modbus_set_error_recovery(modbus_t *ctx, | |
| 190 | + modbus_error_recovery_mode error_recovery); | |
| 190 | 191 | MODBUS_API int modbus_set_socket(modbus_t *ctx, int s); |
| 191 | 192 | MODBUS_API int modbus_get_socket(modbus_t *ctx); |
| 192 | 193 | |
| 193 | -MODBUS_API int modbus_get_response_timeout(modbus_t *ctx, uint32_t *to_sec, uint32_t *to_usec); | |
| 194 | -MODBUS_API int modbus_set_response_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec); | |
| 194 | +MODBUS_API int | |
| 195 | +modbus_get_response_timeout(modbus_t *ctx, uint32_t *to_sec, uint32_t *to_usec); | |
| 196 | +MODBUS_API int | |
| 197 | +modbus_set_response_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec); | |
| 195 | 198 | |
| 196 | -MODBUS_API int modbus_get_byte_timeout(modbus_t *ctx, uint32_t *to_sec, uint32_t *to_usec); | |
| 199 | +MODBUS_API int | |
| 200 | +modbus_get_byte_timeout(modbus_t *ctx, uint32_t *to_sec, uint32_t *to_usec); | |
| 197 | 201 | MODBUS_API int modbus_set_byte_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec); |
| 198 | 202 | |
| 199 | -MODBUS_API int modbus_get_indication_timeout(modbus_t *ctx, uint32_t *to_sec, uint32_t *to_usec); | |
| 200 | -MODBUS_API int modbus_set_indication_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec); | |
| 203 | +MODBUS_API int | |
| 204 | +modbus_get_indication_timeout(modbus_t *ctx, uint32_t *to_sec, uint32_t *to_usec); | |
| 205 | +MODBUS_API int | |
| 206 | +modbus_set_indication_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec); | |
| 201 | 207 | |
| 202 | 208 | MODBUS_API int modbus_get_header_length(modbus_t *ctx); |
| 203 | 209 | |
| ... | ... | @@ -214,37 +220,53 @@ MODBUS_API const char *modbus_strerror(int errnum); |
| 214 | 220 | MODBUS_API int modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); |
| 215 | 221 | MODBUS_API int modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); |
| 216 | 222 | MODBUS_API int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); |
| 217 | -MODBUS_API int modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); | |
| 223 | +MODBUS_API int | |
| 224 | +modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); | |
| 218 | 225 | MODBUS_API int modbus_write_bit(modbus_t *ctx, int coil_addr, int status); |
| 219 | 226 | MODBUS_API int modbus_write_register(modbus_t *ctx, int reg_addr, const uint16_t value); |
| 220 | 227 | MODBUS_API int modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *data); |
| 221 | -MODBUS_API int modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *data); | |
| 222 | -MODBUS_API int modbus_mask_write_register(modbus_t *ctx, int addr, uint16_t and_mask, uint16_t or_mask); | |
| 223 | -MODBUS_API int modbus_write_and_read_registers(modbus_t *ctx, int write_addr, int write_nb, | |
| 224 | - const uint16_t *src, int read_addr, int read_nb, | |
| 228 | +MODBUS_API int | |
| 229 | +modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *data); | |
| 230 | +MODBUS_API int | |
| 231 | +modbus_mask_write_register(modbus_t *ctx, int addr, uint16_t and_mask, uint16_t or_mask); | |
| 232 | +MODBUS_API int modbus_write_and_read_registers(modbus_t *ctx, | |
| 233 | + int write_addr, | |
| 234 | + int write_nb, | |
| 235 | + const uint16_t *src, | |
| 236 | + int read_addr, | |
| 237 | + int read_nb, | |
| 225 | 238 | uint16_t *dest); |
| 226 | 239 | MODBUS_API int modbus_report_slave_id(modbus_t *ctx, int max_dest, uint8_t *dest); |
| 227 | 240 | |
| 228 | -MODBUS_API modbus_mapping_t* modbus_mapping_new_start_address( | |
| 229 | - unsigned int start_bits, unsigned int nb_bits, | |
| 230 | - unsigned int start_input_bits, unsigned int nb_input_bits, | |
| 231 | - unsigned int start_registers, unsigned int nb_registers, | |
| 232 | - unsigned int start_input_registers, unsigned int nb_input_registers); | |
| 233 | - | |
| 234 | -MODBUS_API modbus_mapping_t* modbus_mapping_new(int nb_bits, int nb_input_bits, | |
| 235 | - int nb_registers, int nb_input_registers); | |
| 241 | +MODBUS_API modbus_mapping_t * | |
| 242 | +modbus_mapping_new_start_address(unsigned int start_bits, | |
| 243 | + unsigned int nb_bits, | |
| 244 | + unsigned int start_input_bits, | |
| 245 | + unsigned int nb_input_bits, | |
| 246 | + unsigned int start_registers, | |
| 247 | + unsigned int nb_registers, | |
| 248 | + unsigned int start_input_registers, | |
| 249 | + unsigned int nb_input_registers); | |
| 250 | + | |
| 251 | +MODBUS_API modbus_mapping_t *modbus_mapping_new(int nb_bits, | |
| 252 | + int nb_input_bits, | |
| 253 | + int nb_registers, | |
| 254 | + int nb_input_registers); | |
| 236 | 255 | MODBUS_API void modbus_mapping_free(modbus_mapping_t *mb_mapping); |
| 237 | 256 | |
| 238 | -MODBUS_API int modbus_send_raw_request(modbus_t *ctx, const uint8_t *raw_req, int raw_req_length); | |
| 257 | +MODBUS_API int | |
| 258 | +modbus_send_raw_request(modbus_t *ctx, const uint8_t *raw_req, int raw_req_length); | |
| 239 | 259 | |
| 240 | 260 | MODBUS_API int modbus_receive(modbus_t *ctx, uint8_t *req); |
| 241 | 261 | |
| 242 | 262 | MODBUS_API int modbus_receive_confirmation(modbus_t *ctx, uint8_t *rsp); |
| 243 | 263 | |
| 244 | -MODBUS_API int modbus_reply(modbus_t *ctx, const uint8_t *req, | |
| 245 | - int req_length, modbus_mapping_t *mb_mapping); | |
| 246 | -MODBUS_API int modbus_reply_exception(modbus_t *ctx, const uint8_t *req, | |
| 247 | - unsigned int exception_code); | |
| 264 | +MODBUS_API int modbus_reply(modbus_t *ctx, | |
| 265 | + const uint8_t *req, | |
| 266 | + int req_length, | |
| 267 | + modbus_mapping_t *mb_mapping); | |
| 268 | +MODBUS_API int | |
| 269 | +modbus_reply_exception(modbus_t *ctx, const uint8_t *req, unsigned int exception_code); | |
| 248 | 270 | MODBUS_API int modbus_enable_quirks(modbus_t *ctx, unsigned int quirks_mask); |
| 249 | 271 | MODBUS_API int modbus_disable_quirks(modbus_t *ctx, unsigned int quirks_mask); |
| 250 | 272 | |
| ... | ... | @@ -253,40 +275,40 @@ MODBUS_API int modbus_disable_quirks(modbus_t *ctx, unsigned int quirks_mask); |
| 253 | 275 | **/ |
| 254 | 276 | |
| 255 | 277 | #define MODBUS_GET_HIGH_BYTE(data) (((data) >> 8) & 0xFF) |
| 256 | -#define MODBUS_GET_LOW_BYTE(data) ((data) & 0xFF) | |
| 257 | -#define MODBUS_GET_INT64_FROM_INT16(tab_int16, index) \ | |
| 258 | - (((int64_t)tab_int16[(index) ] << 48) | \ | |
| 259 | - ((int64_t)tab_int16[(index) + 1] << 32) | \ | |
| 260 | - ((int64_t)tab_int16[(index) + 2] << 16) | \ | |
| 261 | - (int64_t)tab_int16[(index) + 3]) | |
| 278 | +#define MODBUS_GET_LOW_BYTE(data) ((data) &0xFF) | |
| 279 | +#define MODBUS_GET_INT64_FROM_INT16(tab_int16, index) \ | |
| 280 | + (((int64_t) tab_int16[(index)] << 48) | ((int64_t) tab_int16[(index) + 1] << 32) | \ | |
| 281 | + ((int64_t) tab_int16[(index) + 2] << 16) | (int64_t) tab_int16[(index) + 3]) | |
| 262 | 282 | #define MODBUS_GET_INT32_FROM_INT16(tab_int16, index) \ |
| 263 | - (((int32_t)tab_int16[(index) ] << 16) | \ | |
| 264 | - (int32_t)tab_int16[(index) + 1]) | |
| 283 | + (((int32_t) tab_int16[(index)] << 16) | (int32_t) tab_int16[(index) + 1]) | |
| 265 | 284 | #define MODBUS_GET_INT16_FROM_INT8(tab_int8, index) \ |
| 266 | - (((int16_t)tab_int8[(index) ] << 8) | \ | |
| 267 | - (int16_t)tab_int8[(index) + 1]) | |
| 268 | -#define MODBUS_SET_INT16_TO_INT8(tab_int8, index, value) \ | |
| 269 | - do { \ | |
| 270 | - ((int8_t*)(tab_int8))[(index) ] = (int8_t)((value) >> 8); \ | |
| 271 | - ((int8_t*)(tab_int8))[(index) + 1] = (int8_t)(value); \ | |
| 272 | - } while (0) | |
| 273 | -#define MODBUS_SET_INT32_TO_INT16(tab_int16, index, value) \ | |
| 274 | - do { \ | |
| 275 | - ((int16_t*)(tab_int16))[(index) ] = (int16_t)((value) >> 16); \ | |
| 276 | - ((int16_t*)(tab_int16))[(index) + 1] = (int16_t)(value); \ | |
| 277 | - } while (0) | |
| 278 | -#define MODBUS_SET_INT64_TO_INT16(tab_int16, index, value) \ | |
| 279 | - do { \ | |
| 280 | - ((int16_t*)(tab_int16))[(index) ] = (int16_t)((value) >> 48); \ | |
| 281 | - ((int16_t*)(tab_int16))[(index) + 1] = (int16_t)((value) >> 32); \ | |
| 282 | - ((int16_t*)(tab_int16))[(index) + 2] = (int16_t)((value) >> 16); \ | |
| 283 | - ((int16_t*)(tab_int16))[(index) + 3] = (int16_t)(value); \ | |
| 284 | - } while (0) | |
| 285 | + (((int16_t) tab_int8[(index)] << 8) | (int16_t) tab_int8[(index) + 1]) | |
| 286 | +#define MODBUS_SET_INT16_TO_INT8(tab_int8, index, value) \ | |
| 287 | + do { \ | |
| 288 | + ((int8_t *) (tab_int8))[(index)] = (int8_t) ((value) >> 8); \ | |
| 289 | + ((int8_t *) (tab_int8))[(index) + 1] = (int8_t) (value); \ | |
| 290 | + } while (0) | |
| 291 | +#define MODBUS_SET_INT32_TO_INT16(tab_int16, index, value) \ | |
| 292 | + do { \ | |
| 293 | + ((int16_t *) (tab_int16))[(index)] = (int16_t) ((value) >> 16); \ | |
| 294 | + ((int16_t *) (tab_int16))[(index) + 1] = (int16_t) (value); \ | |
| 295 | + } while (0) | |
| 296 | +#define MODBUS_SET_INT64_TO_INT16(tab_int16, index, value) \ | |
| 297 | + do { \ | |
| 298 | + ((int16_t *) (tab_int16))[(index)] = (int16_t) ((value) >> 48); \ | |
| 299 | + ((int16_t *) (tab_int16))[(index) + 1] = (int16_t) ((value) >> 32); \ | |
| 300 | + ((int16_t *) (tab_int16))[(index) + 2] = (int16_t) ((value) >> 16); \ | |
| 301 | + ((int16_t *) (tab_int16))[(index) + 3] = (int16_t) (value); \ | |
| 302 | + } while (0) | |
| 285 | 303 | |
| 286 | 304 | MODBUS_API void modbus_set_bits_from_byte(uint8_t *dest, int idx, const uint8_t value); |
| 287 | -MODBUS_API void modbus_set_bits_from_bytes(uint8_t *dest, int idx, unsigned int nb_bits, | |
| 288 | - const uint8_t *tab_byte); | |
| 289 | -MODBUS_API uint8_t modbus_get_byte_from_bits(const uint8_t *src, int idx, unsigned int nb_bits); | |
| 305 | +MODBUS_API void modbus_set_bits_from_bytes(uint8_t *dest, | |
| 306 | + int idx, | |
| 307 | + unsigned int nb_bits, | |
| 308 | + const uint8_t *tab_byte); | |
| 309 | +MODBUS_API uint8_t modbus_get_byte_from_bits(const uint8_t *src, | |
| 310 | + int idx, | |
| 311 | + unsigned int nb_bits); | |
| 290 | 312 | MODBUS_API float modbus_get_float(const uint16_t *src); |
| 291 | 313 | MODBUS_API float modbus_get_float_abcd(const uint16_t *src); |
| 292 | 314 | MODBUS_API float modbus_get_float_dcba(const uint16_t *src); |
| ... | ... | @@ -299,9 +321,9 @@ MODBUS_API void modbus_set_float_dcba(float f, uint16_t *dest); |
| 299 | 321 | MODBUS_API void modbus_set_float_badc(float f, uint16_t *dest); |
| 300 | 322 | MODBUS_API void modbus_set_float_cdab(float f, uint16_t *dest); |
| 301 | 323 | |
| 302 | -#include "modbus-tcp.h" | |
| 303 | 324 | #include "modbus-rtu.h" |
| 325 | +#include "modbus-tcp.h" | |
| 304 | 326 | |
| 305 | 327 | MODBUS_END_DECLS |
| 306 | 328 | |
| 307 | -#endif /* MODBUS_H */ | |
| 329 | +#endif /* MODBUS_H */ | ... | ... |
src/win32/config.h.win32
tests/bandwidth-client.c
| ... | ... | @@ -6,13 +6,13 @@ |
| 6 | 6 | |
| 7 | 7 | #include <stdio.h> |
| 8 | 8 | #ifndef _MSC_VER |
| 9 | -#include <unistd.h> | |
| 10 | 9 | #include <sys/time.h> |
| 10 | +#include <unistd.h> | |
| 11 | 11 | #endif |
| 12 | -#include <string.h> | |
| 12 | +#include <errno.h> | |
| 13 | 13 | #include <stdlib.h> |
| 14 | +#include <string.h> | |
| 14 | 15 | #include <time.h> |
| 15 | -#include <errno.h> | |
| 16 | 16 | |
| 17 | 17 | #include <modbus.h> |
| 18 | 18 | |
| ... | ... | @@ -59,7 +59,8 @@ int main(int argc, char *argv[]) |
| 59 | 59 | use_backend = RTU; |
| 60 | 60 | n_loop = 100; |
| 61 | 61 | } else { |
| 62 | - printf("Usage:\n %s [tcp|rtu] - Modbus client to measure data bandwidth\n\n", argv[0]); | |
| 62 | + printf("Usage:\n %s [tcp|rtu] - Modbus client to measure data bandwidth\n\n", | |
| 63 | + argv[0]); | |
| 63 | 64 | exit(1); |
| 64 | 65 | } |
| 65 | 66 | } else { |
| ... | ... | @@ -75,8 +76,7 @@ int main(int argc, char *argv[]) |
| 75 | 76 | modbus_set_slave(ctx, 1); |
| 76 | 77 | } |
| 77 | 78 | if (modbus_connect(ctx) == -1) { |
| 78 | - fprintf(stderr, "Connection failed: %s\n", | |
| 79 | - modbus_strerror(errno)); | |
| 79 | + fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno)); | |
| 80 | 80 | modbus_free(ctx); |
| 81 | 81 | return -1; |
| 82 | 82 | } |
| ... | ... | @@ -93,7 +93,7 @@ int main(int argc, char *argv[]) |
| 93 | 93 | |
| 94 | 94 | nb_points = MODBUS_MAX_READ_BITS; |
| 95 | 95 | start = gettime_ms(); |
| 96 | - for (i=0; i<n_loop; i++) { | |
| 96 | + for (i = 0; i < n_loop; i++) { | |
| 97 | 97 | rc = modbus_read_bits(ctx, 0, nb_points, tab_bit); |
| 98 | 98 | if (rc == -1) { |
| 99 | 99 | fprintf(stderr, "%s\n", modbus_strerror(errno)); |
| ... | ... | @@ -130,7 +130,7 @@ int main(int argc, char *argv[]) |
| 130 | 130 | |
| 131 | 131 | nb_points = MODBUS_MAX_READ_REGISTERS; |
| 132 | 132 | start = gettime_ms(); |
| 133 | - for (i=0; i<n_loop; i++) { | |
| 133 | + for (i = 0; i < n_loop; i++) { | |
| 134 | 134 | rc = modbus_read_registers(ctx, 0, nb_points, tab_reg); |
| 135 | 135 | if (rc == -1) { |
| 136 | 136 | fprintf(stderr, "%s\n", modbus_strerror(errno)); |
| ... | ... | @@ -167,10 +167,9 @@ int main(int argc, char *argv[]) |
| 167 | 167 | |
| 168 | 168 | nb_points = MODBUS_MAX_WR_WRITE_REGISTERS; |
| 169 | 169 | start = gettime_ms(); |
| 170 | - for (i=0; i<n_loop; i++) { | |
| 171 | - rc = modbus_write_and_read_registers(ctx, | |
| 172 | - 0, nb_points, tab_reg, | |
| 173 | - 0, nb_points, tab_reg); | |
| 170 | + for (i = 0; i < n_loop; i++) { | |
| 171 | + rc = modbus_write_and_read_registers( | |
| 172 | + ctx, 0, nb_points, tab_reg, 0, nb_points, tab_reg); | |
| 174 | 173 | if (rc == -1) { |
| 175 | 174 | fprintf(stderr, "%s\n", modbus_strerror(errno)); |
| 176 | 175 | return -1; | ... | ... |
tests/bandwidth-server-many-up.c
| ... | ... | @@ -4,25 +4,25 @@ |
| 4 | 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | -#include <stdio.h> | |
| 8 | -#include <unistd.h> | |
| 9 | -#include <string.h> | |
| 10 | -#include <stdlib.h> | |
| 11 | 7 | #include <errno.h> |
| 12 | 8 | #include <signal.h> |
| 9 | +#include <stdio.h> | |
| 10 | +#include <stdlib.h> | |
| 11 | +#include <string.h> | |
| 12 | +#include <unistd.h> | |
| 13 | 13 | |
| 14 | 14 | #include <modbus.h> |
| 15 | 15 | |
| 16 | 16 | #if defined(_WIN32) |
| 17 | 17 | #include <ws2tcpip.h> |
| 18 | 18 | #else |
| 19 | +#include <arpa/inet.h> | |
| 20 | +#include <netinet/in.h> | |
| 19 | 21 | #include <sys/select.h> |
| 20 | 22 | #include <sys/socket.h> |
| 21 | -#include <netinet/in.h> | |
| 22 | -#include <arpa/inet.h> | |
| 23 | 23 | #endif |
| 24 | 24 | |
| 25 | -#define NB_CONNECTION 5 | |
| 25 | +#define NB_CONNECTION 5 | |
| 26 | 26 | |
| 27 | 27 | static modbus_t *ctx = NULL; |
| 28 | 28 | static modbus_mapping_t *mb_mapping; |
| ... | ... | @@ -52,11 +52,10 @@ int main(void) |
| 52 | 52 | |
| 53 | 53 | ctx = modbus_new_tcp("127.0.0.1", 1502); |
| 54 | 54 | |
| 55 | - mb_mapping = modbus_mapping_new(MODBUS_MAX_READ_BITS, 0, | |
| 56 | - MODBUS_MAX_READ_REGISTERS, 0); | |
| 55 | + mb_mapping = | |
| 56 | + modbus_mapping_new(MODBUS_MAX_READ_BITS, 0, MODBUS_MAX_READ_REGISTERS, 0); | |
| 57 | 57 | if (mb_mapping == NULL) { |
| 58 | - fprintf(stderr, "Failed to allocate the mapping: %s\n", | |
| 59 | - modbus_strerror(errno)); | |
| 58 | + fprintf(stderr, "Failed to allocate the mapping: %s\n", modbus_strerror(errno)); | |
| 60 | 59 | modbus_free(ctx); |
| 61 | 60 | return -1; |
| 62 | 61 | } |
| ... | ... | @@ -80,7 +79,7 @@ int main(void) |
| 80 | 79 | |
| 81 | 80 | for (;;) { |
| 82 | 81 | rdset = refset; |
| 83 | - if (select(fdmax+1, &rdset, NULL, NULL, NULL) == -1) { | |
| 82 | + if (select(fdmax + 1, &rdset, NULL, NULL, NULL) == -1) { | |
| 84 | 83 | perror("Server select() failure."); |
| 85 | 84 | close_sigint(1); |
| 86 | 85 | } |
| ... | ... | @@ -102,7 +101,7 @@ int main(void) |
| 102 | 101 | /* Handle new connections */ |
| 103 | 102 | addrlen = sizeof(clientaddr); |
| 104 | 103 | memset(&clientaddr, 0, sizeof(clientaddr)); |
| 105 | - newfd = accept(server_socket, (struct sockaddr *)&clientaddr, &addrlen); | |
| 104 | + newfd = accept(server_socket, (struct sockaddr *) &clientaddr, &addrlen); | |
| 106 | 105 | if (newfd == -1) { |
| 107 | 106 | perror("Server accept() error"); |
| 108 | 107 | } else { |
| ... | ... | @@ -113,7 +112,9 @@ int main(void) |
| 113 | 112 | fdmax = newfd; |
| 114 | 113 | } |
| 115 | 114 | printf("New connection from %s:%d on socket %d\n", |
| 116 | - inet_ntoa(clientaddr.sin_addr), clientaddr.sin_port, newfd); | |
| 115 | + inet_ntoa(clientaddr.sin_addr), | |
| 116 | + clientaddr.sin_port, | |
| 117 | + newfd); | |
| 117 | 118 | } |
| 118 | 119 | } else { |
| 119 | 120 | modbus_set_socket(ctx, master_socket); | ... | ... |
tests/bandwidth-server-one.c
| ... | ... | @@ -8,9 +8,9 @@ |
| 8 | 8 | #ifndef _MSC_VER |
| 9 | 9 | #include <unistd.h> |
| 10 | 10 | #endif |
| 11 | -#include <string.h> | |
| 12 | -#include <stdlib.h> | |
| 13 | 11 | #include <errno.h> |
| 12 | +#include <stdlib.h> | |
| 13 | +#include <string.h> | |
| 14 | 14 | |
| 15 | 15 | #include <modbus.h> |
| 16 | 16 | |
| ... | ... | @@ -31,14 +31,15 @@ int main(int argc, char *argv[]) |
| 31 | 31 | int rc; |
| 32 | 32 | int use_backend; |
| 33 | 33 | |
| 34 | - /* TCP */ | |
| 34 | + /* TCP */ | |
| 35 | 35 | if (argc > 1) { |
| 36 | 36 | if (strcmp(argv[1], "tcp") == 0) { |
| 37 | 37 | use_backend = TCP; |
| 38 | 38 | } else if (strcmp(argv[1], "rtu") == 0) { |
| 39 | 39 | use_backend = RTU; |
| 40 | 40 | } else { |
| 41 | - printf("Usage:\n %s [tcp|rtu] - Modbus client to measure data bandwidth\n\n", argv[0]); | |
| 41 | + printf("Usage:\n %s [tcp|rtu] - Modbus client to measure data bandwidth\n\n", | |
| 42 | + argv[0]); | |
| 42 | 43 | exit(1); |
| 43 | 44 | } |
| 44 | 45 | } else { |
| ... | ... | @@ -57,22 +58,21 @@ int main(int argc, char *argv[]) |
| 57 | 58 | modbus_connect(ctx); |
| 58 | 59 | } |
| 59 | 60 | |
| 60 | - mb_mapping = modbus_mapping_new(MODBUS_MAX_READ_BITS, 0, | |
| 61 | - MODBUS_MAX_READ_REGISTERS, 0); | |
| 61 | + mb_mapping = | |
| 62 | + modbus_mapping_new(MODBUS_MAX_READ_BITS, 0, MODBUS_MAX_READ_REGISTERS, 0); | |
| 62 | 63 | if (mb_mapping == NULL) { |
| 63 | - fprintf(stderr, "Failed to allocate the mapping: %s\n", | |
| 64 | - modbus_strerror(errno)); | |
| 64 | + fprintf(stderr, "Failed to allocate the mapping: %s\n", modbus_strerror(errno)); | |
| 65 | 65 | modbus_free(ctx); |
| 66 | 66 | return -1; |
| 67 | 67 | } |
| 68 | 68 | |
| 69 | - for(;;) { | |
| 69 | + for (;;) { | |
| 70 | 70 | uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH]; |
| 71 | 71 | |
| 72 | 72 | rc = modbus_receive(ctx, query); |
| 73 | 73 | if (rc > 0) { |
| 74 | 74 | modbus_reply(ctx, query, rc, mb_mapping); |
| 75 | - } else if (rc == -1) { | |
| 75 | + } else if (rc == -1) { | |
| 76 | 76 | /* Connection closed by the client or error */ |
| 77 | 77 | break; |
| 78 | 78 | } | ... | ... |
tests/random-test-client.c
| ... | ... | @@ -8,9 +8,9 @@ |
| 8 | 8 | #ifndef _MSC_VER |
| 9 | 9 | #include <unistd.h> |
| 10 | 10 | #endif |
| 11 | -#include <string.h> | |
| 12 | -#include <stdlib.h> | |
| 13 | 11 | #include <errno.h> |
| 12 | +#include <stdlib.h> | |
| 13 | +#include <string.h> | |
| 14 | 14 | |
| 15 | 15 | #include <modbus.h> |
| 16 | 16 | |
| ... | ... | @@ -27,10 +27,10 @@ |
| 27 | 27 | All these functions are called with random values on a address |
| 28 | 28 | range defined by the following defines. |
| 29 | 29 | */ |
| 30 | -#define LOOP 1 | |
| 31 | -#define SERVER_ID 17 | |
| 32 | -#define ADDRESS_START 0 | |
| 33 | -#define ADDRESS_END 99 | |
| 30 | +#define LOOP 1 | |
| 31 | +#define SERVER_ID 17 | |
| 32 | +#define ADDRESS_START 0 | |
| 33 | +#define ADDRESS_END 99 | |
| 34 | 34 | |
| 35 | 35 | /* At each loop, the program works in the range ADDRESS_START to |
| 36 | 36 | * ADDRESS_END then ADDRESS_START + 1 to ADDRESS_END and so on. |
| ... | ... | @@ -50,18 +50,17 @@ int main(void) |
| 50 | 50 | uint16_t *tab_rp_registers; |
| 51 | 51 | |
| 52 | 52 | /* RTU */ |
| 53 | -/* | |
| 54 | - ctx = modbus_new_rtu("/dev/ttyUSB0", 19200, 'N', 8, 1); | |
| 55 | - modbus_set_slave(ctx, SERVER_ID); | |
| 56 | -*/ | |
| 53 | + /* | |
| 54 | + ctx = modbus_new_rtu("/dev/ttyUSB0", 19200, 'N', 8, 1); | |
| 55 | + modbus_set_slave(ctx, SERVER_ID); | |
| 56 | + */ | |
| 57 | 57 | |
| 58 | 58 | /* TCP */ |
| 59 | 59 | ctx = modbus_new_tcp("127.0.0.1", 1502); |
| 60 | 60 | modbus_set_debug(ctx, TRUE); |
| 61 | 61 | |
| 62 | 62 | if (modbus_connect(ctx) == -1) { |
| 63 | - fprintf(stderr, "Connection failed: %s\n", | |
| 64 | - modbus_strerror(errno)); | |
| 63 | + fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno)); | |
| 65 | 64 | modbus_free(ctx); |
| 66 | 65 | return -1; |
| 67 | 66 | } |
| ... | ... | @@ -90,8 +89,8 @@ int main(void) |
| 90 | 89 | int i; |
| 91 | 90 | |
| 92 | 91 | /* Random numbers (short) */ |
| 93 | - for (i=0; i<nb; i++) { | |
| 94 | - tab_rq_registers[i] = (uint16_t) (65535.0*rand() / (RAND_MAX + 1.0)); | |
| 92 | + for (i = 0; i < nb; i++) { | |
| 93 | + tab_rq_registers[i] = (uint16_t) (65535.0 * rand() / (RAND_MAX + 1.0)); | |
| 95 | 94 | tab_rw_rq_registers[i] = ~tab_rq_registers[i]; |
| 96 | 95 | tab_rq_bits[i] = tab_rq_registers[i] % 2; |
| 97 | 96 | } |
| ... | ... | @@ -125,12 +124,15 @@ int main(void) |
| 125 | 124 | printf("Address = %d, nb = %d\n", addr, nb); |
| 126 | 125 | nb_fail++; |
| 127 | 126 | } else { |
| 128 | - for (i=0; i<nb; i++) { | |
| 127 | + for (i = 0; i < nb; i++) { | |
| 129 | 128 | if (tab_rp_bits[i] != tab_rq_bits[i]) { |
| 130 | 129 | printf("ERROR modbus_read_bits\n"); |
| 131 | 130 | printf("Address = %d, value %d (0x%X) != %d (0x%X)\n", |
| 132 | - addr, tab_rq_bits[i], tab_rq_bits[i], | |
| 133 | - tab_rp_bits[i], tab_rp_bits[i]); | |
| 131 | + addr, | |
| 132 | + tab_rq_bits[i], | |
| 133 | + tab_rq_bits[i], | |
| 134 | + tab_rp_bits[i], | |
| 135 | + tab_rp_bits[i]); | |
| 134 | 136 | nb_fail++; |
| 135 | 137 | } |
| 136 | 138 | } |
| ... | ... | @@ -142,7 +144,9 @@ int main(void) |
| 142 | 144 | if (rc != 1) { |
| 143 | 145 | printf("ERROR modbus_write_register (%d)\n", rc); |
| 144 | 146 | printf("Address = %d, value = %d (0x%X)\n", |
| 145 | - addr, tab_rq_registers[0], tab_rq_registers[0]); | |
| 147 | + addr, | |
| 148 | + tab_rq_registers[0], | |
| 149 | + tab_rq_registers[0]); | |
| 146 | 150 | nb_fail++; |
| 147 | 151 | } else { |
| 148 | 152 | rc = modbus_read_registers(ctx, addr, 1, tab_rp_registers); |
| ... | ... | @@ -154,8 +158,11 @@ int main(void) |
| 154 | 158 | if (tab_rq_registers[0] != tab_rp_registers[0]) { |
| 155 | 159 | printf("ERROR modbus_read_registers single\n"); |
| 156 | 160 | printf("Address = %d, value = %d (0x%X) != %d (0x%X)\n", |
| 157 | - addr, tab_rq_registers[0], tab_rq_registers[0], | |
| 158 | - tab_rp_registers[0], tab_rp_registers[0]); | |
| 161 | + addr, | |
| 162 | + tab_rq_registers[0], | |
| 163 | + tab_rq_registers[0], | |
| 164 | + tab_rp_registers[0], | |
| 165 | + tab_rp_registers[0]); | |
| 159 | 166 | nb_fail++; |
| 160 | 167 | } |
| 161 | 168 | } |
| ... | ... | @@ -174,32 +181,37 @@ int main(void) |
| 174 | 181 | printf("Address = %d, nb = %d\n", addr, nb); |
| 175 | 182 | nb_fail++; |
| 176 | 183 | } else { |
| 177 | - for (i=0; i<nb; i++) { | |
| 184 | + for (i = 0; i < nb; i++) { | |
| 178 | 185 | if (tab_rq_registers[i] != tab_rp_registers[i]) { |
| 179 | 186 | printf("ERROR modbus_read_registers\n"); |
| 180 | 187 | printf("Address = %d, value %d (0x%X) != %d (0x%X)\n", |
| 181 | - addr, tab_rq_registers[i], tab_rq_registers[i], | |
| 182 | - tab_rp_registers[i], tab_rp_registers[i]); | |
| 188 | + addr, | |
| 189 | + tab_rq_registers[i], | |
| 190 | + tab_rq_registers[i], | |
| 191 | + tab_rp_registers[i], | |
| 192 | + tab_rp_registers[i]); | |
| 183 | 193 | nb_fail++; |
| 184 | 194 | } |
| 185 | 195 | } |
| 186 | 196 | } |
| 187 | 197 | } |
| 188 | 198 | /* R/W MULTIPLE REGISTERS */ |
| 189 | - rc = modbus_write_and_read_registers(ctx, | |
| 190 | - addr, nb, tab_rw_rq_registers, | |
| 191 | - addr, nb, tab_rp_registers); | |
| 199 | + rc = modbus_write_and_read_registers( | |
| 200 | + ctx, addr, nb, tab_rw_rq_registers, addr, nb, tab_rp_registers); | |
| 192 | 201 | if (rc != nb) { |
| 193 | 202 | printf("ERROR modbus_read_and_write_registers (%d)\n", rc); |
| 194 | 203 | printf("Address = %d, nb = %d\n", addr, nb); |
| 195 | 204 | nb_fail++; |
| 196 | 205 | } else { |
| 197 | - for (i=0; i<nb; i++) { | |
| 206 | + for (i = 0; i < nb; i++) { | |
| 198 | 207 | if (tab_rp_registers[i] != tab_rw_rq_registers[i]) { |
| 199 | 208 | printf("ERROR modbus_read_and_write_registers READ\n"); |
| 200 | 209 | printf("Address = %d, value %d (0x%X) != %d (0x%X)\n", |
| 201 | - addr, tab_rp_registers[i], tab_rw_rq_registers[i], | |
| 202 | - tab_rp_registers[i], tab_rw_rq_registers[i]); | |
| 210 | + addr, | |
| 211 | + tab_rp_registers[i], | |
| 212 | + tab_rw_rq_registers[i], | |
| 213 | + tab_rp_registers[i], | |
| 214 | + tab_rw_rq_registers[i]); | |
| 203 | 215 | nb_fail++; |
| 204 | 216 | } |
| 205 | 217 | } |
| ... | ... | @@ -210,12 +222,15 @@ int main(void) |
| 210 | 222 | printf("Address = %d, nb = %d\n", addr, nb); |
| 211 | 223 | nb_fail++; |
| 212 | 224 | } else { |
| 213 | - for (i=0; i<nb; i++) { | |
| 225 | + for (i = 0; i < nb; i++) { | |
| 214 | 226 | if (tab_rw_rq_registers[i] != tab_rp_registers[i]) { |
| 215 | 227 | printf("ERROR modbus_read_and_write_registers WRITE\n"); |
| 216 | 228 | printf("Address = %d, value %d (0x%X) != %d (0x%X)\n", |
| 217 | - addr, tab_rw_rq_registers[i], tab_rw_rq_registers[i], | |
| 218 | - tab_rp_registers[i], tab_rp_registers[i]); | |
| 229 | + addr, | |
| 230 | + tab_rw_rq_registers[i], | |
| 231 | + tab_rw_rq_registers[i], | |
| 232 | + tab_rp_registers[i], | |
| 233 | + tab_rp_registers[i]); | |
| 219 | 234 | nb_fail++; |
| 220 | 235 | } |
| 221 | 236 | } | ... | ... |
tests/random-test-server.c
| ... | ... | @@ -8,8 +8,8 @@ |
| 8 | 8 | #ifndef _MSC_VER |
| 9 | 9 | #include <unistd.h> |
| 10 | 10 | #endif |
| 11 | -#include <stdlib.h> | |
| 12 | 11 | #include <errno.h> |
| 12 | +#include <stdlib.h> | |
| 13 | 13 | |
| 14 | 14 | #include <modbus.h> |
| 15 | 15 | |
| ... | ... | @@ -24,8 +24,7 @@ int main(void) |
| 24 | 24 | |
| 25 | 25 | mb_mapping = modbus_mapping_new(500, 500, 500, 500); |
| 26 | 26 | if (mb_mapping == NULL) { |
| 27 | - fprintf(stderr, "Failed to allocate the mapping: %s\n", | |
| 28 | - modbus_strerror(errno)); | |
| 27 | + fprintf(stderr, "Failed to allocate the mapping: %s\n", modbus_strerror(errno)); | |
| 29 | 28 | modbus_free(ctx); |
| 30 | 29 | return -1; |
| 31 | 30 | } | ... | ... |
tests/unit-test-client.c
| ... | ... | @@ -4,12 +4,12 @@ |
| 4 | 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | -#include <stdio.h> | |
| 8 | -#include <unistd.h> | |
| 9 | -#include <string.h> | |
| 10 | -#include <stdlib.h> | |
| 11 | 7 | #include <errno.h> |
| 12 | 8 | #include <modbus.h> |
| 9 | +#include <stdio.h> | |
| 10 | +#include <stdlib.h> | |
| 11 | +#include <string.h> | |
| 12 | +#include <unistd.h> | |
| 13 | 13 | |
| 14 | 14 | #include "unit-test.h" |
| 15 | 15 | |
| ... | ... | @@ -22,31 +22,37 @@ enum { |
| 22 | 22 | }; |
| 23 | 23 | |
| 24 | 24 | int test_server(modbus_t *ctx, int use_backend); |
| 25 | -int send_crafted_request(modbus_t *ctx, int function, | |
| 26 | - uint8_t *req, int req_size, | |
| 27 | - uint16_t max_value, uint16_t bytes, | |
| 28 | - int backend_length, int backend_offset); | |
| 25 | +int send_crafted_request(modbus_t *ctx, | |
| 26 | + int function, | |
| 27 | + uint8_t *req, | |
| 28 | + int req_size, | |
| 29 | + uint16_t max_value, | |
| 30 | + uint16_t bytes, | |
| 31 | + int backend_length, | |
| 32 | + int backend_offset); | |
| 29 | 33 | int equal_dword(uint16_t *tab_reg, const uint32_t value); |
| 30 | 34 | int is_memory_equal(const void *s1, const void *s2, size_t size); |
| 31 | 35 | |
| 32 | -#define BUG_REPORT(_cond, _format, _args ...) \ | |
| 33 | - printf("\nLine %d: assertion error for '%s': " _format "\n", __LINE__, # _cond, ## _args) | |
| 36 | +#define BUG_REPORT(_cond, _format, _args...) \ | |
| 37 | + printf("\nLine %d: assertion error for '%s': " _format "\n", __LINE__, #_cond, ##_args) | |
| 34 | 38 | |
| 35 | -#define ASSERT_TRUE(_cond, _format, __args...) { \ | |
| 36 | - if (_cond) { \ | |
| 37 | - printf("OK\n"); \ | |
| 38 | - } else { \ | |
| 39 | - BUG_REPORT(_cond, _format, ## __args); \ | |
| 40 | - goto close; \ | |
| 41 | - } \ | |
| 42 | -}; | |
| 39 | +#define ASSERT_TRUE(_cond, _format, __args...) \ | |
| 40 | + { \ | |
| 41 | + if (_cond) { \ | |
| 42 | + printf("OK\n"); \ | |
| 43 | + } else { \ | |
| 44 | + BUG_REPORT(_cond, _format, ##__args); \ | |
| 45 | + goto close; \ | |
| 46 | + } \ | |
| 47 | + }; | |
| 43 | 48 | |
| 44 | 49 | int is_memory_equal(const void *s1, const void *s2, size_t size) |
| 45 | 50 | { |
| 46 | 51 | return (memcmp(s1, s2, size) == 0); |
| 47 | 52 | } |
| 48 | 53 | |
| 49 | -int equal_dword(uint16_t *tab_reg, const uint32_t value) { | |
| 54 | +int equal_dword(uint16_t *tab_reg, const uint32_t value) | |
| 55 | +{ | |
| 50 | 56 | return ((tab_reg[0] == (value >> 16)) && (tab_reg[1] == (value & 0xFFFF))); |
| 51 | 57 | } |
| 52 | 58 | |
| ... | ... | @@ -80,7 +86,8 @@ int main(int argc, char *argv[]) |
| 80 | 86 | } else if (strcmp(argv[1], "rtu") == 0) { |
| 81 | 87 | use_backend = RTU; |
| 82 | 88 | } else { |
| 83 | - printf("Usage:\n %s [tcp|tcppi|rtu] - Modbus client for unit testing\n\n", argv[0]); | |
| 89 | + printf("Usage:\n %s [tcp|tcppi|rtu] - Modbus client for unit testing\n\n", | |
| 90 | + argv[0]); | |
| 84 | 91 | exit(1); |
| 85 | 92 | } |
| 86 | 93 | } else { |
| ... | ... | @@ -100,9 +107,8 @@ int main(int argc, char *argv[]) |
| 100 | 107 | return -1; |
| 101 | 108 | } |
| 102 | 109 | modbus_set_debug(ctx, TRUE); |
| 103 | - modbus_set_error_recovery(ctx, | |
| 104 | - MODBUS_ERROR_RECOVERY_LINK | | |
| 105 | - MODBUS_ERROR_RECOVERY_PROTOCOL); | |
| 110 | + modbus_set_error_recovery( | |
| 111 | + ctx, MODBUS_ERROR_RECOVERY_LINK | MODBUS_ERROR_RECOVERY_PROTOCOL); | |
| 106 | 112 | |
| 107 | 113 | if (use_backend == RTU) { |
| 108 | 114 | modbus_set_slave(ctx, SERVER_ID); |
| ... | ... | @@ -121,8 +127,8 @@ int main(int argc, char *argv[]) |
| 121 | 127 | memset(tab_rp_bits, 0, nb_points * sizeof(uint8_t)); |
| 122 | 128 | |
| 123 | 129 | /* Allocate and initialize the memory to store the registers */ |
| 124 | - nb_points = (UT_REGISTERS_NB > UT_INPUT_REGISTERS_NB) ? | |
| 125 | - UT_REGISTERS_NB : UT_INPUT_REGISTERS_NB; | |
| 130 | + nb_points = (UT_REGISTERS_NB > UT_INPUT_REGISTERS_NB) ? UT_REGISTERS_NB | |
| 131 | + : UT_INPUT_REGISTERS_NB; | |
| 126 | 132 | tab_rp_registers = (uint16_t *) malloc(nb_points * sizeof(uint16_t)); |
| 127 | 133 | memset(tab_rp_registers, 0, nb_points * sizeof(uint16_t)); |
| 128 | 134 | |
| ... | ... | @@ -131,7 +137,8 @@ int main(int argc, char *argv[]) |
| 131 | 137 | printf("1/1 No response timeout modification on connect: "); |
| 132 | 138 | modbus_get_response_timeout(ctx, &new_response_to_sec, &new_response_to_usec); |
| 133 | 139 | ASSERT_TRUE(old_response_to_sec == new_response_to_sec && |
| 134 | - old_response_to_usec == new_response_to_usec, ""); | |
| 140 | + old_response_to_usec == new_response_to_usec, | |
| 141 | + ""); | |
| 135 | 142 | |
| 136 | 143 | printf("\nTEST WRITE/READ:\n"); |
| 137 | 144 | |
| ... | ... | @@ -145,8 +152,7 @@ int main(int argc, char *argv[]) |
| 145 | 152 | rc = modbus_read_bits(ctx, UT_BITS_ADDRESS, 1, tab_rp_bits); |
| 146 | 153 | printf("2/2 modbus_read_bits: "); |
| 147 | 154 | ASSERT_TRUE(rc == 1, "FAILED (nb points %d)\n", rc); |
| 148 | - ASSERT_TRUE(tab_rp_bits[0] == ON, "FAILED (%0X != %0X)\n", | |
| 149 | - tab_rp_bits[0], ON); | |
| 155 | + ASSERT_TRUE(tab_rp_bits[0] == ON, "FAILED (%0X != %0X)\n", tab_rp_bits[0], ON); | |
| 150 | 156 | |
| 151 | 157 | /* End single */ |
| 152 | 158 | |
| ... | ... | @@ -169,9 +175,9 @@ int main(int argc, char *argv[]) |
| 169 | 175 | while (nb_points > 0) { |
| 170 | 176 | int nb_bits = (nb_points > 8) ? 8 : nb_points; |
| 171 | 177 | |
| 172 | - value = modbus_get_byte_from_bits(tab_rp_bits, i*8, nb_bits); | |
| 173 | - ASSERT_TRUE(value == UT_BITS_TAB[i], "FAILED (%0X != %0X)\n", | |
| 174 | - value, UT_BITS_TAB[i]); | |
| 178 | + value = modbus_get_byte_from_bits(tab_rp_bits, i * 8, nb_bits); | |
| 179 | + ASSERT_TRUE( | |
| 180 | + value == UT_BITS_TAB[i], "FAILED (%0X != %0X)\n", value, UT_BITS_TAB[i]); | |
| 175 | 181 | |
| 176 | 182 | nb_points -= nb_bits; |
| 177 | 183 | i++; |
| ... | ... | @@ -180,8 +186,8 @@ int main(int argc, char *argv[]) |
| 180 | 186 | /* End of multiple bits */ |
| 181 | 187 | |
| 182 | 188 | /** DISCRETE INPUTS **/ |
| 183 | - rc = modbus_read_input_bits(ctx, UT_INPUT_BITS_ADDRESS, | |
| 184 | - UT_INPUT_BITS_NB, tab_rp_bits); | |
| 189 | + rc = | |
| 190 | + modbus_read_input_bits(ctx, UT_INPUT_BITS_ADDRESS, UT_INPUT_BITS_NB, tab_rp_bits); | |
| 185 | 191 | printf("1/1 modbus_read_input_bits: "); |
| 186 | 192 | ASSERT_TRUE(rc == UT_INPUT_BITS_NB, "FAILED (nb points %d)\n", rc); |
| 187 | 193 | |
| ... | ... | @@ -189,9 +195,11 @@ int main(int argc, char *argv[]) |
| 189 | 195 | nb_points = UT_INPUT_BITS_NB; |
| 190 | 196 | while (nb_points > 0) { |
| 191 | 197 | int nb_bits = (nb_points > 8) ? 8 : nb_points; |
| 192 | - value = modbus_get_byte_from_bits(tab_rp_bits, i*8, nb_bits); | |
| 193 | - ASSERT_TRUE(value == UT_INPUT_BITS_TAB[i], "FAILED (%0X != %0X)\n", | |
| 194 | - value, UT_INPUT_BITS_TAB[i]); | |
| 198 | + value = modbus_get_byte_from_bits(tab_rp_bits, i * 8, nb_bits); | |
| 199 | + ASSERT_TRUE(value == UT_INPUT_BITS_TAB[i], | |
| 200 | + "FAILED (%0X != %0X)\n", | |
| 201 | + value, | |
| 202 | + UT_INPUT_BITS_TAB[i]); | |
| 195 | 203 | |
| 196 | 204 | nb_points -= nb_bits; |
| 197 | 205 | i++; |
| ... | ... | @@ -205,39 +213,39 @@ int main(int argc, char *argv[]) |
| 205 | 213 | printf("1/2 modbus_write_register: "); |
| 206 | 214 | ASSERT_TRUE(rc == 1, ""); |
| 207 | 215 | |
| 208 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, | |
| 209 | - 1, tab_rp_registers); | |
| 216 | + rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, 1, tab_rp_registers); | |
| 210 | 217 | printf("2/2 modbus_read_registers: "); |
| 211 | 218 | ASSERT_TRUE(rc == 1, "FAILED (nb points %d)\n", rc); |
| 212 | - ASSERT_TRUE(tab_rp_registers[0] == 0x1234, "FAILED (%0X != %0X)\n", | |
| 213 | - tab_rp_registers[0], 0x1234); | |
| 219 | + ASSERT_TRUE(tab_rp_registers[0] == 0x1234, | |
| 220 | + "FAILED (%0X != %0X)\n", | |
| 221 | + tab_rp_registers[0], | |
| 222 | + 0x1234); | |
| 214 | 223 | /* End of single register */ |
| 215 | 224 | |
| 216 | 225 | /* Many registers */ |
| 217 | - rc = modbus_write_registers(ctx, UT_REGISTERS_ADDRESS, | |
| 218 | - UT_REGISTERS_NB, UT_REGISTERS_TAB); | |
| 226 | + rc = modbus_write_registers( | |
| 227 | + ctx, UT_REGISTERS_ADDRESS, UT_REGISTERS_NB, UT_REGISTERS_TAB); | |
| 219 | 228 | printf("1/5 modbus_write_registers: "); |
| 220 | 229 | ASSERT_TRUE(rc == UT_REGISTERS_NB, ""); |
| 221 | 230 | |
| 222 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, | |
| 223 | - UT_REGISTERS_NB, tab_rp_registers); | |
| 231 | + rc = modbus_read_registers( | |
| 232 | + ctx, UT_REGISTERS_ADDRESS, UT_REGISTERS_NB, tab_rp_registers); | |
| 224 | 233 | printf("2/5 modbus_read_registers: "); |
| 225 | 234 | ASSERT_TRUE(rc == UT_REGISTERS_NB, "FAILED (nb points %d)\n", rc); |
| 226 | 235 | |
| 227 | - for (i=0; i < UT_REGISTERS_NB; i++) { | |
| 236 | + for (i = 0; i < UT_REGISTERS_NB; i++) { | |
| 228 | 237 | ASSERT_TRUE(tab_rp_registers[i] == UT_REGISTERS_TAB[i], |
| 229 | 238 | "FAILED (%0X != %0X)\n", |
| 230 | - tab_rp_registers[i], UT_REGISTERS_TAB[i]); | |
| 239 | + tab_rp_registers[i], | |
| 240 | + UT_REGISTERS_TAB[i]); | |
| 231 | 241 | } |
| 232 | 242 | |
| 233 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, | |
| 234 | - 0, tab_rp_registers); | |
| 243 | + rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, 0, tab_rp_registers); | |
| 235 | 244 | printf("3/5 modbus_read_registers (0): "); |
| 236 | 245 | ASSERT_TRUE(rc == -1, "FAILED (nb_points %d)\n", rc); |
| 237 | 246 | |
| 238 | - nb_points = (UT_REGISTERS_NB > | |
| 239 | - UT_INPUT_REGISTERS_NB) ? | |
| 240 | - UT_REGISTERS_NB : UT_INPUT_REGISTERS_NB; | |
| 247 | + nb_points = (UT_REGISTERS_NB > UT_INPUT_REGISTERS_NB) ? UT_REGISTERS_NB | |
| 248 | + : UT_INPUT_REGISTERS_NB; | |
| 241 | 249 | memset(tab_rp_registers, 0, nb_points * sizeof(uint16_t)); |
| 242 | 250 | |
| 243 | 251 | /* Write registers to zero from tab_rp_registers and store read registers |
| ... | ... | @@ -251,32 +259,32 @@ int main(int argc, char *argv[]) |
| 251 | 259 | UT_REGISTERS_NB, |
| 252 | 260 | tab_rp_registers); |
| 253 | 261 | printf("4/5 modbus_write_and_read_registers: "); |
| 254 | - ASSERT_TRUE(rc == UT_REGISTERS_NB, "FAILED (nb points %d != %d)\n", | |
| 255 | - rc, UT_REGISTERS_NB); | |
| 262 | + ASSERT_TRUE( | |
| 263 | + rc == UT_REGISTERS_NB, "FAILED (nb points %d != %d)\n", rc, UT_REGISTERS_NB); | |
| 256 | 264 | |
| 257 | 265 | ASSERT_TRUE(tab_rp_registers[0] == UT_REGISTERS_TAB[0], |
| 258 | 266 | "FAILED (%0X != %0X)\n", |
| 259 | - tab_rp_registers[0], UT_REGISTERS_TAB[0]); | |
| 267 | + tab_rp_registers[0], | |
| 268 | + UT_REGISTERS_TAB[0]); | |
| 260 | 269 | |
| 261 | - for (i=1; i < UT_REGISTERS_NB; i++) { | |
| 262 | - ASSERT_TRUE(tab_rp_registers[i] == 0, "FAILED (%0X != %0X)\n", | |
| 263 | - tab_rp_registers[i], 0); | |
| 270 | + for (i = 1; i < UT_REGISTERS_NB; i++) { | |
| 271 | + ASSERT_TRUE( | |
| 272 | + tab_rp_registers[i] == 0, "FAILED (%0X != %0X)\n", tab_rp_registers[i], 0); | |
| 264 | 273 | } |
| 265 | 274 | |
| 266 | 275 | /* End of many registers */ |
| 267 | 276 | |
| 268 | - | |
| 269 | 277 | /** INPUT REGISTERS **/ |
| 270 | - rc = modbus_read_input_registers(ctx, UT_INPUT_REGISTERS_ADDRESS, | |
| 271 | - UT_INPUT_REGISTERS_NB, | |
| 272 | - tab_rp_registers); | |
| 278 | + rc = modbus_read_input_registers( | |
| 279 | + ctx, UT_INPUT_REGISTERS_ADDRESS, UT_INPUT_REGISTERS_NB, tab_rp_registers); | |
| 273 | 280 | printf("1/1 modbus_read_input_registers: "); |
| 274 | 281 | ASSERT_TRUE(rc == UT_INPUT_REGISTERS_NB, "FAILED (nb points %d)\n", rc); |
| 275 | 282 | |
| 276 | - for (i=0; i < UT_INPUT_REGISTERS_NB; i++) { | |
| 283 | + for (i = 0; i < UT_INPUT_REGISTERS_NB; i++) { | |
| 277 | 284 | ASSERT_TRUE(tab_rp_registers[i] == UT_INPUT_REGISTERS_TAB[i], |
| 278 | 285 | "FAILED (%0X != %0X)\n", |
| 279 | - tab_rp_registers[i], UT_INPUT_REGISTERS_TAB[i]); | |
| 286 | + tab_rp_registers[i], | |
| 287 | + UT_INPUT_REGISTERS_TAB[i]); | |
| 280 | 288 | } |
| 281 | 289 | |
| 282 | 290 | /* MASKS */ |
| ... | ... | @@ -285,33 +293,36 @@ int main(int argc, char *argv[]) |
| 285 | 293 | rc = modbus_mask_write_register(ctx, UT_REGISTERS_ADDRESS, 0xF2, 0x25); |
| 286 | 294 | ASSERT_TRUE(rc != -1, "FAILED (%x == -1)\n", rc); |
| 287 | 295 | rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, 1, tab_rp_registers); |
| 288 | - ASSERT_TRUE(tab_rp_registers[0] == 0x17, | |
| 289 | - "FAILED (%0X != %0X)\n", | |
| 290 | - tab_rp_registers[0], 0x17); | |
| 296 | + ASSERT_TRUE( | |
| 297 | + tab_rp_registers[0] == 0x17, "FAILED (%0X != %0X)\n", tab_rp_registers[0], 0x17); | |
| 291 | 298 | |
| 292 | 299 | printf("\nTEST FLOATS\n"); |
| 293 | 300 | /** FLOAT **/ |
| 294 | 301 | printf("1/4 Set/get float ABCD: "); |
| 295 | 302 | modbus_set_float_abcd(UT_REAL, tab_rp_registers); |
| 296 | - ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_ABCD_SET, 4), "FAILED Set float ABCD"); | |
| 303 | + ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_ABCD_SET, 4), | |
| 304 | + "FAILED Set float ABCD"); | |
| 297 | 305 | real = modbus_get_float_abcd(UT_IREAL_ABCD_GET); |
| 298 | 306 | ASSERT_TRUE(real == UT_REAL, "FAILED (%f != %f)\n", real, UT_REAL); |
| 299 | 307 | |
| 300 | 308 | printf("2/4 Set/get float DCBA: "); |
| 301 | 309 | modbus_set_float_dcba(UT_REAL, tab_rp_registers); |
| 302 | - ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_DCBA_SET, 4), "FAILED Set float DCBA"); | |
| 310 | + ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_DCBA_SET, 4), | |
| 311 | + "FAILED Set float DCBA"); | |
| 303 | 312 | real = modbus_get_float_dcba(UT_IREAL_DCBA_GET); |
| 304 | 313 | ASSERT_TRUE(real == UT_REAL, "FAILED (%f != %f)\n", real, UT_REAL); |
| 305 | 314 | |
| 306 | 315 | printf("3/4 Set/get float BADC: "); |
| 307 | 316 | modbus_set_float_badc(UT_REAL, tab_rp_registers); |
| 308 | - ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_BADC_SET, 4), "FAILED Set float BADC"); | |
| 317 | + ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_BADC_SET, 4), | |
| 318 | + "FAILED Set float BADC"); | |
| 309 | 319 | real = modbus_get_float_badc(UT_IREAL_BADC_GET); |
| 310 | 320 | ASSERT_TRUE(real == UT_REAL, "FAILED (%f != %f)\n", real, UT_REAL); |
| 311 | 321 | |
| 312 | 322 | printf("4/4 Set/get float CDAB: "); |
| 313 | 323 | modbus_set_float_cdab(UT_REAL, tab_rp_registers); |
| 314 | - ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_CDAB_SET, 4), "FAILED Set float CDAB"); | |
| 324 | + ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_CDAB_SET, 4), | |
| 325 | + "FAILED Set float CDAB"); | |
| 315 | 326 | real = modbus_get_float_cdab(UT_IREAL_CDAB_GET); |
| 316 | 327 | ASSERT_TRUE(real == UT_REAL, "FAILED (%f != %f)\n", real, UT_REAL); |
| 317 | 328 | |
| ... | ... | @@ -335,8 +346,8 @@ int main(int argc, char *argv[]) |
| 335 | 346 | printf("* modbus_read_input_bits (0): "); |
| 336 | 347 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 337 | 348 | |
| 338 | - rc = modbus_read_input_bits(ctx, UT_INPUT_BITS_ADDRESS, | |
| 339 | - UT_INPUT_BITS_NB + 1, tab_rp_bits); | |
| 349 | + rc = modbus_read_input_bits( | |
| 350 | + ctx, UT_INPUT_BITS_ADDRESS, UT_INPUT_BITS_NB + 1, tab_rp_bits); | |
| 340 | 351 | printf("* modbus_read_input_bits (max): "); |
| 341 | 352 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 342 | 353 | |
| ... | ... | @@ -344,8 +355,8 @@ int main(int argc, char *argv[]) |
| 344 | 355 | printf("* modbus_read_registers (0): "); |
| 345 | 356 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 346 | 357 | |
| 347 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, | |
| 348 | - UT_REGISTERS_NB_MAX + 1, tab_rp_registers); | |
| 358 | + rc = modbus_read_registers( | |
| 359 | + ctx, UT_REGISTERS_ADDRESS, UT_REGISTERS_NB_MAX + 1, tab_rp_registers); | |
| 349 | 360 | printf("* modbus_read_registers (max): "); |
| 350 | 361 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 351 | 362 | |
| ... | ... | @@ -353,9 +364,8 @@ int main(int argc, char *argv[]) |
| 353 | 364 | printf("* modbus_read_input_registers (0): "); |
| 354 | 365 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 355 | 366 | |
| 356 | - rc = modbus_read_input_registers(ctx, UT_INPUT_REGISTERS_ADDRESS, | |
| 357 | - UT_INPUT_REGISTERS_NB + 1, | |
| 358 | - tab_rp_registers); | |
| 367 | + rc = modbus_read_input_registers( | |
| 368 | + ctx, UT_INPUT_REGISTERS_ADDRESS, UT_INPUT_REGISTERS_NB + 1, tab_rp_registers); | |
| 359 | 369 | printf("* modbus_read_input_registers (max): "); |
| 360 | 370 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 361 | 371 | |
| ... | ... | @@ -371,8 +381,7 @@ int main(int argc, char *argv[]) |
| 371 | 381 | printf("* modbus_write_coils (0): "); |
| 372 | 382 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 373 | 383 | |
| 374 | - rc = modbus_write_bits(ctx, UT_BITS_ADDRESS + UT_BITS_NB, | |
| 375 | - UT_BITS_NB, tab_rp_bits); | |
| 384 | + rc = modbus_write_bits(ctx, UT_BITS_ADDRESS + UT_BITS_NB, UT_BITS_NB, tab_rp_bits); | |
| 376 | 385 | printf("* modbus_write_coils (max): "); |
| 377 | 386 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 378 | 387 | |
| ... | ... | @@ -380,8 +389,8 @@ int main(int argc, char *argv[]) |
| 380 | 389 | printf("* modbus_write_register (0): "); |
| 381 | 390 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 382 | 391 | |
| 383 | - rc = modbus_write_register(ctx, UT_REGISTERS_ADDRESS + UT_REGISTERS_NB_MAX, | |
| 384 | - tab_rp_registers[0]); | |
| 392 | + rc = modbus_write_register( | |
| 393 | + ctx, UT_REGISTERS_ADDRESS + UT_REGISTERS_NB_MAX, tab_rp_registers[0]); | |
| 385 | 394 | printf("* modbus_write_register (max): "); |
| 386 | 395 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 387 | 396 | |
| ... | ... | @@ -389,8 +398,10 @@ int main(int argc, char *argv[]) |
| 389 | 398 | printf("* modbus_write_registers (0): "); |
| 390 | 399 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 391 | 400 | |
| 392 | - rc = modbus_write_registers(ctx, UT_REGISTERS_ADDRESS + UT_REGISTERS_NB_MAX, | |
| 393 | - UT_REGISTERS_NB, tab_rp_registers); | |
| 401 | + rc = modbus_write_registers(ctx, | |
| 402 | + UT_REGISTERS_ADDRESS + UT_REGISTERS_NB_MAX, | |
| 403 | + UT_REGISTERS_NB, | |
| 404 | + tab_rp_registers); | |
| 394 | 405 | printf("* modbus_write_registers (max): "); |
| 395 | 406 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 396 | 407 | |
| ... | ... | @@ -398,56 +409,54 @@ int main(int argc, char *argv[]) |
| 398 | 409 | printf("* modbus_mask_write_registers (0): "); |
| 399 | 410 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 400 | 411 | |
| 401 | - rc = modbus_mask_write_register(ctx, UT_REGISTERS_ADDRESS + UT_REGISTERS_NB_MAX, | |
| 402 | - 0xF2, 0x25); | |
| 412 | + rc = modbus_mask_write_register( | |
| 413 | + ctx, UT_REGISTERS_ADDRESS + UT_REGISTERS_NB_MAX, 0xF2, 0x25); | |
| 403 | 414 | printf("* modbus_mask_write_registers (max): "); |
| 404 | 415 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 405 | 416 | |
| 406 | - rc = modbus_write_and_read_registers(ctx, 0, 1, tab_rp_registers, 0, 1, tab_rp_registers); | |
| 417 | + rc = modbus_write_and_read_registers( | |
| 418 | + ctx, 0, 1, tab_rp_registers, 0, 1, tab_rp_registers); | |
| 407 | 419 | printf("* modbus_write_and_read_registers (0): "); |
| 408 | 420 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 409 | 421 | |
| 410 | 422 | rc = modbus_write_and_read_registers(ctx, |
| 411 | 423 | UT_REGISTERS_ADDRESS + UT_REGISTERS_NB_MAX, |
| 412 | - UT_REGISTERS_NB, tab_rp_registers, | |
| 424 | + UT_REGISTERS_NB, | |
| 425 | + tab_rp_registers, | |
| 413 | 426 | UT_REGISTERS_ADDRESS + UT_REGISTERS_NB_MAX, |
| 414 | - UT_REGISTERS_NB, tab_rp_registers); | |
| 427 | + UT_REGISTERS_NB, | |
| 428 | + tab_rp_registers); | |
| 415 | 429 | printf("* modbus_write_and_read_registers (max): "); |
| 416 | 430 | ASSERT_TRUE(rc == -1 && errno == EMBXILADD, ""); |
| 417 | 431 | |
| 418 | 432 | /** TOO MANY DATA **/ |
| 419 | 433 | printf("\nTEST TOO MANY DATA ERROR:\n"); |
| 420 | 434 | |
| 421 | - rc = modbus_read_bits(ctx, UT_BITS_ADDRESS, | |
| 422 | - MODBUS_MAX_READ_BITS + 1, tab_rp_bits); | |
| 435 | + rc = modbus_read_bits(ctx, UT_BITS_ADDRESS, MODBUS_MAX_READ_BITS + 1, tab_rp_bits); | |
| 423 | 436 | printf("* modbus_read_bits: "); |
| 424 | 437 | ASSERT_TRUE(rc == -1 && errno == EMBMDATA, ""); |
| 425 | 438 | |
| 426 | - rc = modbus_read_input_bits(ctx, UT_INPUT_BITS_ADDRESS, | |
| 427 | - MODBUS_MAX_READ_BITS + 1, tab_rp_bits); | |
| 439 | + rc = modbus_read_input_bits( | |
| 440 | + ctx, UT_INPUT_BITS_ADDRESS, MODBUS_MAX_READ_BITS + 1, tab_rp_bits); | |
| 428 | 441 | printf("* modbus_read_input_bits: "); |
| 429 | 442 | ASSERT_TRUE(rc == -1 && errno == EMBMDATA, ""); |
| 430 | 443 | |
| 431 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, | |
| 432 | - MODBUS_MAX_READ_REGISTERS + 1, | |
| 433 | - tab_rp_registers); | |
| 444 | + rc = modbus_read_registers( | |
| 445 | + ctx, UT_REGISTERS_ADDRESS, MODBUS_MAX_READ_REGISTERS + 1, tab_rp_registers); | |
| 434 | 446 | printf("* modbus_read_registers: "); |
| 435 | 447 | ASSERT_TRUE(rc == -1 && errno == EMBMDATA, ""); |
| 436 | 448 | |
| 437 | - rc = modbus_read_input_registers(ctx, UT_INPUT_REGISTERS_ADDRESS, | |
| 438 | - MODBUS_MAX_READ_REGISTERS + 1, | |
| 439 | - tab_rp_registers); | |
| 449 | + rc = modbus_read_input_registers( | |
| 450 | + ctx, UT_INPUT_REGISTERS_ADDRESS, MODBUS_MAX_READ_REGISTERS + 1, tab_rp_registers); | |
| 440 | 451 | printf("* modbus_read_input_registers: "); |
| 441 | 452 | ASSERT_TRUE(rc == -1 && errno == EMBMDATA, ""); |
| 442 | 453 | |
| 443 | - rc = modbus_write_bits(ctx, UT_BITS_ADDRESS, | |
| 444 | - MODBUS_MAX_WRITE_BITS + 1, tab_rp_bits); | |
| 454 | + rc = modbus_write_bits(ctx, UT_BITS_ADDRESS, MODBUS_MAX_WRITE_BITS + 1, tab_rp_bits); | |
| 445 | 455 | printf("* modbus_write_bits: "); |
| 446 | 456 | ASSERT_TRUE(rc == -1 && errno == EMBMDATA, ""); |
| 447 | 457 | |
| 448 | - rc = modbus_write_registers(ctx, UT_REGISTERS_ADDRESS, | |
| 449 | - MODBUS_MAX_WRITE_REGISTERS + 1, | |
| 450 | - tab_rp_registers); | |
| 458 | + rc = modbus_write_registers( | |
| 459 | + ctx, UT_REGISTERS_ADDRESS, MODBUS_MAX_WRITE_REGISTERS + 1, tab_rp_registers); | |
| 451 | 460 | printf("* modbus_write_registers: "); |
| 452 | 461 | ASSERT_TRUE(rc == -1 && errno == EMBMDATA, ""); |
| 453 | 462 | |
| ... | ... | @@ -473,15 +482,15 @@ int main(int argc, char *argv[]) |
| 473 | 482 | |
| 474 | 483 | printf("\nTEST SLAVE REPLY:\n"); |
| 475 | 484 | modbus_set_slave(ctx, INVALID_SERVER_ID); |
| 476 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, | |
| 477 | - UT_REGISTERS_NB, tab_rp_registers); | |
| 485 | + rc = modbus_read_registers( | |
| 486 | + ctx, UT_REGISTERS_ADDRESS, UT_REGISTERS_NB, tab_rp_registers); | |
| 478 | 487 | if (use_backend == RTU) { |
| 479 | 488 | const int RAW_REQ_LENGTH = 6; |
| 480 | - uint8_t raw_req[] = { INVALID_SERVER_ID, 0x03, 0x00, 0x01, 0x01, 0x01 }; | |
| 489 | + uint8_t raw_req[] = {INVALID_SERVER_ID, 0x03, 0x00, 0x01, 0x01, 0x01}; | |
| 481 | 490 | /* Too many points */ |
| 482 | - uint8_t raw_invalid_req[] = { INVALID_SERVER_ID, 0x03, 0x00, 0x01, 0xFF, 0xFF }; | |
| 491 | + uint8_t raw_invalid_req[] = {INVALID_SERVER_ID, 0x03, 0x00, 0x01, 0xFF, 0xFF}; | |
| 483 | 492 | const int RAW_RSP_LENGTH = 7; |
| 484 | - uint8_t raw_rsp[] = { INVALID_SERVER_ID, 0x03, 0x04, 0, 0, 0, 0 }; | |
| 493 | + uint8_t raw_rsp[] = {INVALID_SERVER_ID, 0x03, 0x04, 0, 0, 0, 0}; | |
| 485 | 494 | uint8_t rsp[MODBUS_RTU_MAX_ADU_LENGTH]; |
| 486 | 495 | |
| 487 | 496 | /* No response in RTU mode */ |
| ... | ... | @@ -491,7 +500,6 @@ int main(int argc, char *argv[]) |
| 491 | 500 | /* The slave raises a timeout on a confirmation to ignore because if an |
| 492 | 501 | * indication for another slave is received, a confirmation must follow */ |
| 493 | 502 | |
| 494 | - | |
| 495 | 503 | /* Send a pair of indication/confirmation to the slave with a different |
| 496 | 504 | * slave ID to simulate a communication on a RS485 bus. At first, the |
| 497 | 505 | * slave will see the indication message then the confirmation, and it must |
| ... | ... | @@ -515,8 +523,8 @@ int main(int argc, char *argv[]) |
| 515 | 523 | rc = modbus_set_slave(ctx, MODBUS_BROADCAST_ADDRESS); |
| 516 | 524 | ASSERT_TRUE(rc == 0, "Invalid broadcast address"); |
| 517 | 525 | |
| 518 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, | |
| 519 | - UT_REGISTERS_NB, tab_rp_registers); | |
| 526 | + rc = modbus_read_registers( | |
| 527 | + ctx, UT_REGISTERS_ADDRESS, UT_REGISTERS_NB, tab_rp_registers); | |
| 520 | 528 | printf("2/3 No reply after a broadcast query: "); |
| 521 | 529 | ASSERT_TRUE(rc == -1 && errno == ETIMEDOUT, ""); |
| 522 | 530 | } else { |
| ... | ... | @@ -527,8 +535,8 @@ int main(int argc, char *argv[]) |
| 527 | 535 | rc = modbus_set_slave(ctx, MODBUS_BROADCAST_ADDRESS); |
| 528 | 536 | ASSERT_TRUE(rc == 0, "Invalid broacast address"); |
| 529 | 537 | |
| 530 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, | |
| 531 | - UT_REGISTERS_NB, tab_rp_registers); | |
| 538 | + rc = modbus_read_registers( | |
| 539 | + ctx, UT_REGISTERS_ADDRESS, UT_REGISTERS_NB, tab_rp_registers); | |
| 532 | 540 | printf("2/3 Reply after a query with unit id == 0: "); |
| 533 | 541 | ASSERT_TRUE(rc == UT_REGISTERS_NB, ""); |
| 534 | 542 | } |
| ... | ... | @@ -537,8 +545,8 @@ int main(int argc, char *argv[]) |
| 537 | 545 | modbus_set_slave(ctx, old_slave); |
| 538 | 546 | |
| 539 | 547 | printf("3/3 Response with an invalid TID or slave: "); |
| 540 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS_INVALID_TID_OR_SLAVE, | |
| 541 | - 1, tab_rp_registers); | |
| 548 | + rc = modbus_read_registers( | |
| 549 | + ctx, UT_REGISTERS_ADDRESS_INVALID_TID_OR_SLAVE, 1, tab_rp_registers); | |
| 542 | 550 | ASSERT_TRUE(rc == -1, ""); |
| 543 | 551 | |
| 544 | 552 | printf("1/2 Report slave ID truncated: \n"); |
| ... | ... | @@ -546,10 +554,11 @@ int main(int argc, char *argv[]) |
| 546 | 554 | tab_rp_bits[NB_REPORT_SLAVE_ID - 1] = 42; |
| 547 | 555 | rc = modbus_report_slave_id(ctx, NB_REPORT_SLAVE_ID - 1, tab_rp_bits); |
| 548 | 556 | /* Return the size required (response size) but respects the defined limit */ |
| 549 | - ASSERT_TRUE(rc == NB_REPORT_SLAVE_ID && | |
| 550 | - tab_rp_bits[NB_REPORT_SLAVE_ID - 1] == 42, | |
| 557 | + ASSERT_TRUE(rc == NB_REPORT_SLAVE_ID && tab_rp_bits[NB_REPORT_SLAVE_ID - 1] == 42, | |
| 551 | 558 | "Return is rc %d (%d) and marker is %d (42)", |
| 552 | - rc, NB_REPORT_SLAVE_ID, tab_rp_bits[NB_REPORT_SLAVE_ID - 1]); | |
| 559 | + rc, | |
| 560 | + NB_REPORT_SLAVE_ID, | |
| 561 | + tab_rp_bits[NB_REPORT_SLAVE_ID - 1]); | |
| 553 | 562 | |
| 554 | 563 | printf("2/2 Report slave ID: \n"); |
| 555 | 564 | /* tab_rp_bits is used to store bytes */ |
| ... | ... | @@ -565,7 +574,7 @@ int main(int argc, char *argv[]) |
| 565 | 574 | /* Print additional data as string */ |
| 566 | 575 | if (rc > 2) { |
| 567 | 576 | printf("Additional data: "); |
| 568 | - for (i=2; i < rc; i++) { | |
| 577 | + for (i = 2; i < rc; i++) { | |
| 569 | 578 | printf("%c", tab_rp_bits[i]); |
| 570 | 579 | } |
| 571 | 580 | printf("\n"); |
| ... | ... | @@ -588,8 +597,8 @@ int main(int argc, char *argv[]) |
| 588 | 597 | ASSERT_TRUE(rc == -1 && errno == EINVAL, ""); |
| 589 | 598 | |
| 590 | 599 | modbus_set_response_timeout(ctx, 0, 1); |
| 591 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, | |
| 592 | - UT_REGISTERS_NB, tab_rp_registers); | |
| 600 | + rc = modbus_read_registers( | |
| 601 | + ctx, UT_REGISTERS_ADDRESS, UT_REGISTERS_NB, tab_rp_registers); | |
| 593 | 602 | printf("4/6 1us response timeout: "); |
| 594 | 603 | if (rc == -1 && errno == ETIMEDOUT) { |
| 595 | 604 | printf("OK\n"); |
| ... | ... | @@ -607,8 +616,8 @@ int main(int argc, char *argv[]) |
| 607 | 616 | /* Trigger a special behaviour on server to wait for 0.5 second before |
| 608 | 617 | * replying whereas allowed timeout is 0.2 second */ |
| 609 | 618 | modbus_set_response_timeout(ctx, 0, 200000); |
| 610 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS_SLEEP_500_MS, | |
| 611 | - 1, tab_rp_registers); | |
| 619 | + rc = modbus_read_registers( | |
| 620 | + ctx, UT_REGISTERS_ADDRESS_SLEEP_500_MS, 1, tab_rp_registers); | |
| 612 | 621 | printf("5/6 Too short response timeout (0.2s < 0.5s): "); |
| 613 | 622 | ASSERT_TRUE(rc == -1 && errno == ETIMEDOUT, ""); |
| 614 | 623 | |
| ... | ... | @@ -617,22 +626,21 @@ int main(int argc, char *argv[]) |
| 617 | 626 | modbus_flush(ctx); |
| 618 | 627 | |
| 619 | 628 | modbus_set_response_timeout(ctx, 0, 600000); |
| 620 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS_SLEEP_500_MS, | |
| 621 | - 1, tab_rp_registers); | |
| 629 | + rc = modbus_read_registers( | |
| 630 | + ctx, UT_REGISTERS_ADDRESS_SLEEP_500_MS, 1, tab_rp_registers); | |
| 622 | 631 | printf("6/6 Adequate response timeout (0.6s > 0.5s): "); |
| 623 | 632 | ASSERT_TRUE(rc == 1, ""); |
| 624 | 633 | |
| 625 | 634 | /* Disable the byte timeout. |
| 626 | 635 | The full response must be available in the 600ms interval */ |
| 627 | 636 | modbus_set_byte_timeout(ctx, 0, 0); |
| 628 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS_SLEEP_500_MS, | |
| 629 | - 1, tab_rp_registers); | |
| 637 | + rc = modbus_read_registers( | |
| 638 | + ctx, UT_REGISTERS_ADDRESS_SLEEP_500_MS, 1, tab_rp_registers); | |
| 630 | 639 | printf("7/7 Disable byte timeout: "); |
| 631 | 640 | ASSERT_TRUE(rc == 1, ""); |
| 632 | 641 | |
| 633 | 642 | /* Restore original response timeout */ |
| 634 | - modbus_set_response_timeout(ctx, old_response_to_sec, | |
| 635 | - old_response_to_usec); | |
| 643 | + modbus_set_response_timeout(ctx, old_response_to_sec, old_response_to_usec); | |
| 636 | 644 | |
| 637 | 645 | if (use_backend == TCP) { |
| 638 | 646 | /* The test server is only able to test byte timeouts with the TCP |
| ... | ... | @@ -640,8 +648,8 @@ int main(int argc, char *argv[]) |
| 640 | 648 | |
| 641 | 649 | /* Timeout of 3ms between bytes */ |
| 642 | 650 | modbus_set_byte_timeout(ctx, 0, 3000); |
| 643 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS_BYTE_SLEEP_5_MS, | |
| 644 | - 1, tab_rp_registers); | |
| 651 | + rc = modbus_read_registers( | |
| 652 | + ctx, UT_REGISTERS_ADDRESS_BYTE_SLEEP_5_MS, 1, tab_rp_registers); | |
| 645 | 653 | printf("1/2 Too small byte timeout (3ms < 5ms): "); |
| 646 | 654 | ASSERT_TRUE(rc == -1 && errno == ETIMEDOUT, ""); |
| 647 | 655 | |
| ... | ... | @@ -651,8 +659,8 @@ int main(int argc, char *argv[]) |
| 651 | 659 | |
| 652 | 660 | /* Timeout of 7ms between bytes */ |
| 653 | 661 | modbus_set_byte_timeout(ctx, 0, 7000); |
| 654 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS_BYTE_SLEEP_5_MS, | |
| 655 | - 1, tab_rp_registers); | |
| 662 | + rc = modbus_read_registers( | |
| 663 | + ctx, UT_REGISTERS_ADDRESS_BYTE_SLEEP_5_MS, 1, tab_rp_registers); | |
| 656 | 664 | printf("2/2 Adapted byte timeout (7ms > 5ms): "); |
| 657 | 665 | ASSERT_TRUE(rc == 1, ""); |
| 658 | 666 | } |
| ... | ... | @@ -664,19 +672,19 @@ int main(int argc, char *argv[]) |
| 664 | 672 | printf("\nTEST BAD RESPONSE ERROR:\n"); |
| 665 | 673 | |
| 666 | 674 | /* Allocate only the required space */ |
| 667 | - tab_rp_registers_bad = (uint16_t *) malloc( | |
| 668 | - UT_REGISTERS_NB_SPECIAL * sizeof(uint16_t)); | |
| 675 | + tab_rp_registers_bad = | |
| 676 | + (uint16_t *) malloc(UT_REGISTERS_NB_SPECIAL * sizeof(uint16_t)); | |
| 669 | 677 | |
| 670 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS, | |
| 671 | - UT_REGISTERS_NB_SPECIAL, tab_rp_registers_bad); | |
| 678 | + rc = modbus_read_registers( | |
| 679 | + ctx, UT_REGISTERS_ADDRESS, UT_REGISTERS_NB_SPECIAL, tab_rp_registers_bad); | |
| 672 | 680 | printf("* modbus_read_registers: "); |
| 673 | 681 | ASSERT_TRUE(rc == -1 && errno == EMBBADDATA, ""); |
| 674 | 682 | free(tab_rp_registers_bad); |
| 675 | 683 | |
| 676 | 684 | /** MANUAL EXCEPTION **/ |
| 677 | 685 | printf("\nTEST MANUAL EXCEPTION:\n"); |
| 678 | - rc = modbus_read_registers(ctx, UT_REGISTERS_ADDRESS_SPECIAL, | |
| 679 | - UT_REGISTERS_NB, tab_rp_registers); | |
| 686 | + rc = modbus_read_registers( | |
| 687 | + ctx, UT_REGISTERS_ADDRESS_SPECIAL, UT_REGISTERS_NB, tab_rp_registers); | |
| 680 | 688 | |
| 681 | 689 | printf("* modbus_read_registers at special address: "); |
| 682 | 690 | ASSERT_TRUE(rc == -1 && errno == EMBXSBUSY, ""); |
| ... | ... | @@ -722,63 +730,65 @@ int test_server(modbus_t *ctx, int use_backend) |
| 722 | 730 | /* Read requests */ |
| 723 | 731 | const int READ_RAW_REQ_LEN = 6; |
| 724 | 732 | const int slave = (use_backend == RTU) ? SERVER_ID : MODBUS_TCP_SLAVE; |
| 725 | - uint8_t read_raw_req[] = { | |
| 726 | - slave, | |
| 727 | - /* function, address, 5 values */ | |
| 728 | - MODBUS_FC_READ_HOLDING_REGISTERS, | |
| 729 | - UT_REGISTERS_ADDRESS >> 8, UT_REGISTERS_ADDRESS & 0xFF, | |
| 730 | - 0x0, 0x05 | |
| 731 | - }; | |
| 733 | + uint8_t read_raw_req[] = {slave, | |
| 734 | + /* function, address, 5 values */ | |
| 735 | + MODBUS_FC_READ_HOLDING_REGISTERS, | |
| 736 | + UT_REGISTERS_ADDRESS >> 8, | |
| 737 | + UT_REGISTERS_ADDRESS & 0xFF, | |
| 738 | + 0x0, | |
| 739 | + 0x05}; | |
| 732 | 740 | /* Write and read registers request */ |
| 733 | 741 | const int RW_RAW_REQ_LEN = 13; |
| 734 | - uint8_t rw_raw_req[] = { | |
| 735 | - slave, | |
| 736 | - /* function, addr to read, nb to read */ | |
| 737 | - MODBUS_FC_WRITE_AND_READ_REGISTERS, | |
| 738 | - /* Read */ | |
| 739 | - UT_REGISTERS_ADDRESS >> 8, UT_REGISTERS_ADDRESS & 0xFF, | |
| 740 | - (MODBUS_MAX_WR_READ_REGISTERS + 1) >> 8, | |
| 741 | - (MODBUS_MAX_WR_READ_REGISTERS + 1) & 0xFF, | |
| 742 | - /* Write */ | |
| 743 | - 0, 0, | |
| 744 | - 0, 1, | |
| 745 | - /* Write byte count */ | |
| 746 | - 1 * 2, | |
| 747 | - /* One data to write... */ | |
| 748 | - 0x12, 0x34 | |
| 749 | - }; | |
| 742 | + uint8_t rw_raw_req[] = {slave, | |
| 743 | + /* function, addr to read, nb to read */ | |
| 744 | + MODBUS_FC_WRITE_AND_READ_REGISTERS, | |
| 745 | + /* Read */ | |
| 746 | + UT_REGISTERS_ADDRESS >> 8, | |
| 747 | + UT_REGISTERS_ADDRESS & 0xFF, | |
| 748 | + (MODBUS_MAX_WR_READ_REGISTERS + 1) >> 8, | |
| 749 | + (MODBUS_MAX_WR_READ_REGISTERS + 1) & 0xFF, | |
| 750 | + /* Write */ | |
| 751 | + 0, | |
| 752 | + 0, | |
| 753 | + 0, | |
| 754 | + 1, | |
| 755 | + /* Write byte count */ | |
| 756 | + 1 * 2, | |
| 757 | + /* One data to write... */ | |
| 758 | + 0x12, | |
| 759 | + 0x34}; | |
| 750 | 760 | const int WRITE_RAW_REQ_LEN = 13; |
| 751 | - uint8_t write_raw_req[] = { | |
| 752 | - slave, | |
| 753 | - /* function will be set in the loop */ | |
| 754 | - MODBUS_FC_WRITE_MULTIPLE_REGISTERS, | |
| 755 | - /* Address */ | |
| 756 | - UT_REGISTERS_ADDRESS >> 8, UT_REGISTERS_ADDRESS & 0xFF, | |
| 757 | - /* 3 values, 6 bytes */ | |
| 758 | - 0x00, 0x03, 0x06, | |
| 759 | - /* Dummy data to write */ | |
| 760 | - 0x02, 0x2B, 0x00, 0x01, 0x00, 0x64 | |
| 761 | - }; | |
| 761 | + uint8_t write_raw_req[] = {slave, | |
| 762 | + /* function will be set in the loop */ | |
| 763 | + MODBUS_FC_WRITE_MULTIPLE_REGISTERS, | |
| 764 | + /* Address */ | |
| 765 | + UT_REGISTERS_ADDRESS >> 8, | |
| 766 | + UT_REGISTERS_ADDRESS & 0xFF, | |
| 767 | + /* 3 values, 6 bytes */ | |
| 768 | + 0x00, | |
| 769 | + 0x03, | |
| 770 | + 0x06, | |
| 771 | + /* Dummy data to write */ | |
| 772 | + 0x02, | |
| 773 | + 0x2B, | |
| 774 | + 0x00, | |
| 775 | + 0x01, | |
| 776 | + 0x00, | |
| 777 | + 0x64}; | |
| 762 | 778 | const int INVALID_FC = 0x42; |
| 763 | 779 | const int INVALID_FC_REQ_LEN = 6; |
| 764 | - uint8_t invalid_fc_raw_req[] = { | |
| 765 | - slave, 0x42, 0x00, 0x00, 0x00, 0x00 | |
| 766 | - }; | |
| 780 | + uint8_t invalid_fc_raw_req[] = {slave, 0x42, 0x00, 0x00, 0x00, 0x00}; | |
| 767 | 781 | |
| 768 | 782 | int req_length; |
| 769 | 783 | uint8_t rsp[MODBUS_TCP_MAX_ADU_LENGTH]; |
| 770 | - int tab_read_function[] = { | |
| 771 | - MODBUS_FC_READ_COILS, | |
| 772 | - MODBUS_FC_READ_DISCRETE_INPUTS, | |
| 773 | - MODBUS_FC_READ_HOLDING_REGISTERS, | |
| 774 | - MODBUS_FC_READ_INPUT_REGISTERS | |
| 775 | - }; | |
| 776 | - int tab_read_nb_max[] = { | |
| 777 | - MODBUS_MAX_READ_BITS + 1, | |
| 778 | - MODBUS_MAX_READ_BITS + 1, | |
| 779 | - MODBUS_MAX_READ_REGISTERS + 1, | |
| 780 | - MODBUS_MAX_READ_REGISTERS + 1 | |
| 781 | - }; | |
| 784 | + int tab_read_function[] = {MODBUS_FC_READ_COILS, | |
| 785 | + MODBUS_FC_READ_DISCRETE_INPUTS, | |
| 786 | + MODBUS_FC_READ_HOLDING_REGISTERS, | |
| 787 | + MODBUS_FC_READ_INPUT_REGISTERS}; | |
| 788 | + int tab_read_nb_max[] = {MODBUS_MAX_READ_BITS + 1, | |
| 789 | + MODBUS_MAX_READ_BITS + 1, | |
| 790 | + MODBUS_MAX_READ_REGISTERS + 1, | |
| 791 | + MODBUS_MAX_READ_REGISTERS + 1}; | |
| 782 | 792 | int backend_length; |
| 783 | 793 | int backend_offset; |
| 784 | 794 | |
| ... | ... | @@ -820,58 +830,84 @@ int test_server(modbus_t *ctx, int use_backend) |
| 820 | 830 | |
| 821 | 831 | /* Try to read more values than a response could hold for all data |
| 822 | 832 | types. */ |
| 823 | - for (i=0; i<4; i++) { | |
| 824 | - rc = send_crafted_request(ctx, tab_read_function[i], | |
| 825 | - read_raw_req, READ_RAW_REQ_LEN, | |
| 826 | - tab_read_nb_max[i], 0, | |
| 827 | - backend_length, backend_offset); | |
| 833 | + for (i = 0; i < 4; i++) { | |
| 834 | + rc = send_crafted_request(ctx, | |
| 835 | + tab_read_function[i], | |
| 836 | + read_raw_req, | |
| 837 | + READ_RAW_REQ_LEN, | |
| 838 | + tab_read_nb_max[i], | |
| 839 | + 0, | |
| 840 | + backend_length, | |
| 841 | + backend_offset); | |
| 828 | 842 | if (rc == -1) |
| 829 | 843 | goto close; |
| 830 | 844 | } |
| 831 | 845 | |
| 832 | - rc = send_crafted_request(ctx, MODBUS_FC_WRITE_AND_READ_REGISTERS, | |
| 833 | - rw_raw_req, RW_RAW_REQ_LEN, | |
| 834 | - MODBUS_MAX_WR_READ_REGISTERS + 1, 0, | |
| 835 | - backend_length, backend_offset); | |
| 846 | + rc = send_crafted_request(ctx, | |
| 847 | + MODBUS_FC_WRITE_AND_READ_REGISTERS, | |
| 848 | + rw_raw_req, | |
| 849 | + RW_RAW_REQ_LEN, | |
| 850 | + MODBUS_MAX_WR_READ_REGISTERS + 1, | |
| 851 | + 0, | |
| 852 | + backend_length, | |
| 853 | + backend_offset); | |
| 836 | 854 | if (rc == -1) |
| 837 | 855 | goto close; |
| 838 | 856 | |
| 839 | - rc = send_crafted_request(ctx, MODBUS_FC_WRITE_MULTIPLE_REGISTERS, | |
| 840 | - write_raw_req, WRITE_RAW_REQ_LEN, | |
| 841 | - MODBUS_MAX_WRITE_REGISTERS + 1, 6, | |
| 842 | - backend_length, backend_offset); | |
| 857 | + rc = send_crafted_request(ctx, | |
| 858 | + MODBUS_FC_WRITE_MULTIPLE_REGISTERS, | |
| 859 | + write_raw_req, | |
| 860 | + WRITE_RAW_REQ_LEN, | |
| 861 | + MODBUS_MAX_WRITE_REGISTERS + 1, | |
| 862 | + 6, | |
| 863 | + backend_length, | |
| 864 | + backend_offset); | |
| 843 | 865 | if (rc == -1) |
| 844 | 866 | goto close; |
| 845 | 867 | |
| 846 | - rc = send_crafted_request(ctx, MODBUS_FC_WRITE_MULTIPLE_COILS, | |
| 847 | - write_raw_req, WRITE_RAW_REQ_LEN, | |
| 848 | - MODBUS_MAX_WRITE_BITS + 1, 6, | |
| 849 | - backend_length, backend_offset); | |
| 868 | + rc = send_crafted_request(ctx, | |
| 869 | + MODBUS_FC_WRITE_MULTIPLE_COILS, | |
| 870 | + write_raw_req, | |
| 871 | + WRITE_RAW_REQ_LEN, | |
| 872 | + MODBUS_MAX_WRITE_BITS + 1, | |
| 873 | + 6, | |
| 874 | + backend_length, | |
| 875 | + backend_offset); | |
| 850 | 876 | if (rc == -1) |
| 851 | 877 | goto close; |
| 852 | 878 | |
| 853 | 879 | /* Modbus write multiple registers with large number of values but a set a |
| 854 | 880 | small number of bytes in requests (not nb * 2 as usual). */ |
| 855 | - rc = send_crafted_request(ctx, MODBUS_FC_WRITE_MULTIPLE_REGISTERS, | |
| 856 | - write_raw_req, WRITE_RAW_REQ_LEN, | |
| 857 | - MODBUS_MAX_WRITE_REGISTERS, 6, | |
| 858 | - backend_length, backend_offset); | |
| 881 | + rc = send_crafted_request(ctx, | |
| 882 | + MODBUS_FC_WRITE_MULTIPLE_REGISTERS, | |
| 883 | + write_raw_req, | |
| 884 | + WRITE_RAW_REQ_LEN, | |
| 885 | + MODBUS_MAX_WRITE_REGISTERS, | |
| 886 | + 6, | |
| 887 | + backend_length, | |
| 888 | + backend_offset); | |
| 859 | 889 | if (rc == -1) |
| 860 | 890 | goto close; |
| 861 | 891 | |
| 862 | - rc = send_crafted_request(ctx, MODBUS_FC_WRITE_MULTIPLE_COILS, | |
| 863 | - write_raw_req, WRITE_RAW_REQ_LEN, | |
| 864 | - MODBUS_MAX_WRITE_BITS, 6, | |
| 865 | - backend_length, backend_offset); | |
| 892 | + rc = send_crafted_request(ctx, | |
| 893 | + MODBUS_FC_WRITE_MULTIPLE_COILS, | |
| 894 | + write_raw_req, | |
| 895 | + WRITE_RAW_REQ_LEN, | |
| 896 | + MODBUS_MAX_WRITE_BITS, | |
| 897 | + 6, | |
| 898 | + backend_length, | |
| 899 | + backend_offset); | |
| 866 | 900 | if (rc == -1) |
| 867 | 901 | goto close; |
| 868 | 902 | |
| 869 | 903 | /* Test invalid function code */ |
| 870 | - modbus_send_raw_request(ctx, invalid_fc_raw_req, INVALID_FC_REQ_LEN * sizeof(uint8_t)); | |
| 904 | + modbus_send_raw_request( | |
| 905 | + ctx, invalid_fc_raw_req, INVALID_FC_REQ_LEN * sizeof(uint8_t)); | |
| 871 | 906 | rc = modbus_receive_confirmation(ctx, rsp); |
| 872 | 907 | printf("Return an exception on unknown function code: "); |
| 873 | 908 | ASSERT_TRUE(rc == (backend_length + EXCEPTION_RC) && |
| 874 | - rsp[backend_offset] == (0x80 + INVALID_FC), "") | |
| 909 | + rsp[backend_offset] == (0x80 + INVALID_FC), | |
| 910 | + "") | |
| 875 | 911 | |
| 876 | 912 | modbus_set_response_timeout(ctx, old_response_to_sec, old_response_to_usec); |
| 877 | 913 | return 0; |
| ... | ... | @@ -880,16 +916,19 @@ close: |
| 880 | 916 | return -1; |
| 881 | 917 | } |
| 882 | 918 | |
| 883 | - | |
| 884 | -int send_crafted_request(modbus_t *ctx, int function, | |
| 885 | - uint8_t *req, int req_len, | |
| 886 | - uint16_t max_value, uint16_t bytes, | |
| 887 | - int backend_length, int backend_offset) | |
| 919 | +int send_crafted_request(modbus_t *ctx, | |
| 920 | + int function, | |
| 921 | + uint8_t *req, | |
| 922 | + int req_len, | |
| 923 | + uint16_t max_value, | |
| 924 | + uint16_t bytes, | |
| 925 | + int backend_length, | |
| 926 | + int backend_offset) | |
| 888 | 927 | { |
| 889 | 928 | uint8_t rsp[MODBUS_TCP_MAX_ADU_LENGTH]; |
| 890 | 929 | int j; |
| 891 | 930 | |
| 892 | - for (j=0; j<2; j++) { | |
| 931 | + for (j = 0; j < 2; j++) { | |
| 893 | 932 | int rc; |
| 894 | 933 | |
| 895 | 934 | req[1] = function; |
| ... | ... | @@ -913,15 +952,19 @@ int send_crafted_request(modbus_t *ctx, int function, |
| 913 | 952 | |
| 914 | 953 | modbus_send_raw_request(ctx, req, req_len * sizeof(uint8_t)); |
| 915 | 954 | if (j == 0) { |
| 916 | - printf("* try function 0x%X: %s 0 values: ", function, bytes ? "write": "read"); | |
| 955 | + printf( | |
| 956 | + "* try function 0x%X: %s 0 values: ", function, bytes ? "write" : "read"); | |
| 917 | 957 | } else { |
| 918 | - printf("* try function 0x%X: %s %d values: ", function, bytes ? "write": "read", | |
| 958 | + printf("* try function 0x%X: %s %d values: ", | |
| 959 | + function, | |
| 960 | + bytes ? "write" : "read", | |
| 919 | 961 | max_value); |
| 920 | 962 | } |
| 921 | 963 | rc = modbus_receive_confirmation(ctx, rsp); |
| 922 | 964 | ASSERT_TRUE(rc == (backend_length + EXCEPTION_RC) && |
| 923 | - rsp[backend_offset] == (0x80 + function) && | |
| 924 | - rsp[backend_offset + 1] == MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE, ""); | |
| 965 | + rsp[backend_offset] == (0x80 + function) && | |
| 966 | + rsp[backend_offset + 1] == MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE, | |
| 967 | + ""); | |
| 925 | 968 | } |
| 926 | 969 | return 0; |
| 927 | 970 | close: | ... | ... |
tests/unit-test-server.c
| ... | ... | @@ -4,12 +4,14 @@ |
| 4 | 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | -#include <stdio.h> | |
| 8 | -#include <unistd.h> | |
| 9 | -#include <string.h> | |
| 10 | -#include <stdlib.h> | |
| 11 | 7 | #include <errno.h> |
| 12 | 8 | #include <modbus.h> |
| 9 | +#include <stdio.h> | |
| 10 | +#include <stdlib.h> | |
| 11 | +#include <string.h> | |
| 12 | +#include <unistd.h> | |
| 13 | + | |
| 14 | +// clang-format off | |
| 13 | 15 | #ifdef _WIN32 |
| 14 | 16 | # include <winsock2.h> |
| 15 | 17 | #else |
| ... | ... | @@ -20,6 +22,7 @@ |
| 20 | 22 | #ifndef MSG_NOSIGNAL |
| 21 | 23 | # define MSG_NOSIGNAL 0 |
| 22 | 24 | #endif |
| 25 | +// clang-format on | |
| 23 | 26 | |
| 24 | 27 | #include "unit-test.h" |
| 25 | 28 | |
| ... | ... | @@ -29,7 +32,7 @@ enum { |
| 29 | 32 | RTU |
| 30 | 33 | }; |
| 31 | 34 | |
| 32 | -int main(int argc, char*argv[]) | |
| 35 | +int main(int argc, char *argv[]) | |
| 33 | 36 | { |
| 34 | 37 | int s = -1; |
| 35 | 38 | modbus_t *ctx; |
| ... | ... | @@ -48,7 +51,8 @@ int main(int argc, char*argv[]) |
| 48 | 51 | } else if (strcmp(argv[1], "rtu") == 0) { |
| 49 | 52 | use_backend = RTU; |
| 50 | 53 | } else { |
| 51 | - printf("Usage:\n %s [tcp|tcppi|rtu] - Modbus server for unit testing\n\n", argv[0]); | |
| 54 | + printf("Usage:\n %s [tcp|tcppi|rtu] - Modbus server for unit testing\n\n", | |
| 55 | + argv[0]); | |
| 52 | 56 | return -1; |
| 53 | 57 | } |
| 54 | 58 | } else { |
| ... | ... | @@ -71,14 +75,16 @@ int main(int argc, char*argv[]) |
| 71 | 75 | |
| 72 | 76 | modbus_set_debug(ctx, TRUE); |
| 73 | 77 | |
| 74 | - mb_mapping = modbus_mapping_new_start_address( | |
| 75 | - UT_BITS_ADDRESS, UT_BITS_NB, | |
| 76 | - UT_INPUT_BITS_ADDRESS, UT_INPUT_BITS_NB, | |
| 77 | - UT_REGISTERS_ADDRESS, UT_REGISTERS_NB_MAX, | |
| 78 | - UT_INPUT_REGISTERS_ADDRESS, UT_INPUT_REGISTERS_NB); | |
| 78 | + mb_mapping = modbus_mapping_new_start_address(UT_BITS_ADDRESS, | |
| 79 | + UT_BITS_NB, | |
| 80 | + UT_INPUT_BITS_ADDRESS, | |
| 81 | + UT_INPUT_BITS_NB, | |
| 82 | + UT_REGISTERS_ADDRESS, | |
| 83 | + UT_REGISTERS_NB_MAX, | |
| 84 | + UT_INPUT_REGISTERS_ADDRESS, | |
| 85 | + UT_INPUT_REGISTERS_NB); | |
| 79 | 86 | if (mb_mapping == NULL) { |
| 80 | - fprintf(stderr, "Failed to allocate the mapping: %s\n", | |
| 81 | - modbus_strerror(errno)); | |
| 87 | + fprintf(stderr, "Failed to allocate the mapping: %s\n", modbus_strerror(errno)); | |
| 82 | 88 | modbus_free(ctx); |
| 83 | 89 | return -1; |
| 84 | 90 | } |
| ... | ... | @@ -87,11 +93,11 @@ int main(int argc, char*argv[]) |
| 87 | 93 | Only the read-only input values are assigned. */ |
| 88 | 94 | |
| 89 | 95 | /* Initialize input values that's can be only done server side. */ |
| 90 | - modbus_set_bits_from_bytes(mb_mapping->tab_input_bits, 0, UT_INPUT_BITS_NB, | |
| 91 | - UT_INPUT_BITS_TAB); | |
| 96 | + modbus_set_bits_from_bytes( | |
| 97 | + mb_mapping->tab_input_bits, 0, UT_INPUT_BITS_NB, UT_INPUT_BITS_TAB); | |
| 92 | 98 | |
| 93 | 99 | /* Initialize values of INPUT REGISTERS */ |
| 94 | - for (i=0; i < UT_INPUT_REGISTERS_NB; i++) { | |
| 100 | + for (i = 0; i < UT_INPUT_REGISTERS_NB; i++) { | |
| 95 | 101 | mb_mapping->tab_input_registers[i] = UT_INPUT_REGISTERS_TAB[i]; |
| 96 | 102 | } |
| 97 | 103 | |
| ... | ... | @@ -127,35 +133,34 @@ int main(int argc, char*argv[]) |
| 127 | 133 | if (query[header_length] == 0x03) { |
| 128 | 134 | /* Read holding registers */ |
| 129 | 135 | |
| 130 | - if (MODBUS_GET_INT16_FROM_INT8(query, header_length + 3) | |
| 131 | - == UT_REGISTERS_NB_SPECIAL) { | |
| 136 | + if (MODBUS_GET_INT16_FROM_INT8(query, header_length + 3) == | |
| 137 | + UT_REGISTERS_NB_SPECIAL) { | |
| 132 | 138 | printf("Set an incorrect number of values\n"); |
| 133 | - MODBUS_SET_INT16_TO_INT8(query, header_length + 3, | |
| 134 | - UT_REGISTERS_NB_SPECIAL - 1); | |
| 135 | - } else if (MODBUS_GET_INT16_FROM_INT8(query, header_length + 1) | |
| 136 | - == UT_REGISTERS_ADDRESS_SPECIAL) { | |
| 139 | + MODBUS_SET_INT16_TO_INT8( | |
| 140 | + query, header_length + 3, UT_REGISTERS_NB_SPECIAL - 1); | |
| 141 | + } else if (MODBUS_GET_INT16_FROM_INT8(query, header_length + 1) == | |
| 142 | + UT_REGISTERS_ADDRESS_SPECIAL) { | |
| 137 | 143 | printf("Reply to this special register address by an exception\n"); |
| 138 | - modbus_reply_exception(ctx, query, | |
| 139 | - MODBUS_EXCEPTION_SLAVE_OR_SERVER_BUSY); | |
| 144 | + modbus_reply_exception(ctx, query, MODBUS_EXCEPTION_SLAVE_OR_SERVER_BUSY); | |
| 140 | 145 | continue; |
| 141 | - } else if (MODBUS_GET_INT16_FROM_INT8(query, header_length + 1) | |
| 142 | - == UT_REGISTERS_ADDRESS_INVALID_TID_OR_SLAVE) { | |
| 146 | + } else if (MODBUS_GET_INT16_FROM_INT8(query, header_length + 1) == | |
| 147 | + UT_REGISTERS_ADDRESS_INVALID_TID_OR_SLAVE) { | |
| 143 | 148 | const int RAW_REQ_LENGTH = 5; |
| 144 | - uint8_t raw_req[] = { | |
| 145 | - (use_backend == RTU) ? INVALID_SERVER_ID : 0xFF, | |
| 146 | - 0x03, | |
| 147 | - 0x02, 0x00, 0x00 | |
| 148 | - }; | |
| 149 | + uint8_t raw_req[] = {(use_backend == RTU) ? INVALID_SERVER_ID : 0xFF, | |
| 150 | + 0x03, | |
| 151 | + 0x02, | |
| 152 | + 0x00, | |
| 153 | + 0x00}; | |
| 149 | 154 | |
| 150 | 155 | printf("Reply with an invalid TID or slave\n"); |
| 151 | 156 | modbus_send_raw_request(ctx, raw_req, RAW_REQ_LENGTH * sizeof(uint8_t)); |
| 152 | 157 | continue; |
| 153 | - } else if (MODBUS_GET_INT16_FROM_INT8(query, header_length + 1) | |
| 154 | - == UT_REGISTERS_ADDRESS_SLEEP_500_MS) { | |
| 158 | + } else if (MODBUS_GET_INT16_FROM_INT8(query, header_length + 1) == | |
| 159 | + UT_REGISTERS_ADDRESS_SLEEP_500_MS) { | |
| 155 | 160 | printf("Sleep 0.5 s before replying\n"); |
| 156 | 161 | usleep(500000); |
| 157 | - } else if (MODBUS_GET_INT16_FROM_INT8(query, header_length + 1) | |
| 158 | - == UT_REGISTERS_ADDRESS_BYTE_SLEEP_5_MS) { | |
| 162 | + } else if (MODBUS_GET_INT16_FROM_INT8(query, header_length + 1) == | |
| 163 | + UT_REGISTERS_ADDRESS_BYTE_SLEEP_5_MS) { | |
| 159 | 164 | /* Test low level only available in TCP mode */ |
| 160 | 165 | /* Catch the reply and send reply byte a byte */ |
| 161 | 166 | uint8_t req[] = "\x00\x1C\x00\x00\x00\x05\xFF\x03\x02\x00\x00"; |
| ... | ... | @@ -168,10 +173,10 @@ int main(int argc, char*argv[]) |
| 168 | 173 | |
| 169 | 174 | /* Copy TID */ |
| 170 | 175 | req[1] = query[1]; |
| 171 | - for (i=0; i < req_length; i++) { | |
| 176 | + for (i = 0; i < req_length; i++) { | |
| 172 | 177 | printf("(%.2X)", req[i]); |
| 173 | 178 | usleep(5000); |
| 174 | - rc = send(w_s, (const char*)(req + i), 1, MSG_NOSIGNAL); | |
| 179 | + rc = send(w_s, (const char *) (req + i), 1, MSG_NOSIGNAL); | |
| 175 | 180 | if (rc == -1) { |
| 176 | 181 | break; |
| 177 | 182 | } | ... | ... |
tests/unit-test.h.in
| ... | ... | @@ -11,6 +11,7 @@ |
| 11 | 11 | #define HAVE_INTTYPES_H @HAVE_INTTYPES_H@ |
| 12 | 12 | #define HAVE_STDINT_H @HAVE_STDINT_H@ |
| 13 | 13 | |
| 14 | +// clang-format off | |
| 14 | 15 | #ifdef HAVE_INTTYPES_H |
| 15 | 16 | #include <inttypes.h> |
| 16 | 17 | #endif |
| ... | ... | @@ -21,6 +22,7 @@ |
| 21 | 22 | # include "stdint.h" |
| 22 | 23 | # endif |
| 23 | 24 | #endif |
| 25 | +// clang-format on | |
| 24 | 26 | |
| 25 | 27 | #define SERVER_ID 17 |
| 26 | 28 | #define INVALID_SERVER_ID 18 | ... | ... |
tests/version.c
| ... | ... | @@ -4,14 +4,18 @@ |
| 4 | 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | -#include <stdio.h> | |
| 8 | 7 | #include <modbus.h> |
| 8 | +#include <stdio.h> | |
| 9 | 9 | |
| 10 | 10 | int main(void) |
| 11 | 11 | { |
| 12 | - printf("Compiled with libmodbus version %s (%06X)\n", LIBMODBUS_VERSION_STRING, LIBMODBUS_VERSION_HEX); | |
| 12 | + printf("Compiled with libmodbus version %s (%06X)\n", | |
| 13 | + LIBMODBUS_VERSION_STRING, | |
| 14 | + LIBMODBUS_VERSION_HEX); | |
| 13 | 15 | printf("Linked with libmodbus version %d.%d.%d\n", |
| 14 | - libmodbus_version_major, libmodbus_version_minor, libmodbus_version_micro); | |
| 16 | + libmodbus_version_major, | |
| 17 | + libmodbus_version_minor, | |
| 18 | + libmodbus_version_micro); | |
| 15 | 19 | |
| 16 | 20 | if (LIBMODBUS_VERSION_CHECK(2, 1, 0)) { |
| 17 | 21 | printf("The functions to read/write float values are available (2.1.0).\n"); | ... | ... |