Commit ce0bdfbb9e9b9106b3d38298f0381596199f23ae
Committed by
Stéphane Raimbault
1 parent
a66b1c1f
Add EXPORT to exported functions.
Fix EXXX values defined in Microsoft C Runtime 10
Showing
5 changed files
with
82 additions
and
56 deletions
src/modbus-data.c
| @@ -25,6 +25,8 @@ | @@ -25,6 +25,8 @@ | ||
| 25 | #include <string.h> | 25 | #include <string.h> |
| 26 | #include <assert.h> | 26 | #include <assert.h> |
| 27 | 27 | ||
| 28 | +#include "modbus.h" | ||
| 29 | + | ||
| 28 | /* Sets many bits from a single byte value (all 8 bits of the byte value are | 30 | /* Sets many bits from a single byte value (all 8 bits of the byte value are |
| 29 | set) */ | 31 | set) */ |
| 30 | void modbus_set_bits_from_byte(uint8_t *dest, int index, const uint8_t value) | 32 | void modbus_set_bits_from_byte(uint8_t *dest, int index, const uint8_t value) |
src/modbus-rtu-private.h
| @@ -42,7 +42,9 @@ | @@ -42,7 +42,9 @@ | ||
| 42 | #define _MODBUS_RTU_TIME_BETWEEN_RTS_SWITCH 10000 | 42 | #define _MODBUS_RTU_TIME_BETWEEN_RTS_SWITCH 10000 |
| 43 | 43 | ||
| 44 | #if defined(_WIN32) | 44 | #if defined(_WIN32) |
| 45 | +#if !defined(ENOTSUP) | ||
| 45 | #define ENOTSUP WSAEOPNOTSUPP | 46 | #define ENOTSUP WSAEOPNOTSUPP |
| 47 | +#endif | ||
| 46 | 48 | ||
| 47 | /* WIN32: struct containing serial handle and a receive buffer */ | 49 | /* WIN32: struct containing serial handle and a receive buffer */ |
| 48 | #define PY_BUF_SIZE 512 | 50 | #define PY_BUF_SIZE 512 |
src/modbus-rtu.h
| @@ -28,21 +28,21 @@ MODBUS_BEGIN_DECLS | @@ -28,21 +28,21 @@ MODBUS_BEGIN_DECLS | ||
| 28 | */ | 28 | */ |
| 29 | #define MODBUS_RTU_MAX_ADU_LENGTH 256 | 29 | #define MODBUS_RTU_MAX_ADU_LENGTH 256 |
| 30 | 30 | ||
| 31 | -modbus_t* modbus_new_rtu(const char *device, int baud, char parity, | ||
| 32 | - int data_bit, int stop_bit); | 31 | +EXPORT modbus_t* modbus_new_rtu(const char *device, int baud, char parity, |
| 32 | + int data_bit, int stop_bit); | ||
| 33 | 33 | ||
| 34 | #define MODBUS_RTU_RS232 0 | 34 | #define MODBUS_RTU_RS232 0 |
| 35 | #define MODBUS_RTU_RS485 1 | 35 | #define MODBUS_RTU_RS485 1 |
| 36 | 36 | ||
| 37 | -int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode); | ||
| 38 | -int modbus_rtu_get_serial_mode(modbus_t *ctx); | 37 | +EXPORT int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode); |
| 38 | +EXPORT int modbus_rtu_get_serial_mode(modbus_t *ctx); | ||
| 39 | 39 | ||
| 40 | #define MODBUS_RTU_RTS_NONE 0 | 40 | #define MODBUS_RTU_RTS_NONE 0 |
| 41 | #define MODBUS_RTU_RTS_UP 1 | 41 | #define MODBUS_RTU_RTS_UP 1 |
| 42 | #define MODBUS_RTU_RTS_DOWN 2 | 42 | #define MODBUS_RTU_RTS_DOWN 2 |
| 43 | 43 | ||
| 44 | -int modbus_rtu_set_rts(modbus_t *ctx, int mode); | ||
| 45 | -int modbus_rtu_get_rts(modbus_t *ctx); | 44 | +EXPORT int modbus_rtu_set_rts(modbus_t *ctx, int mode); |
| 45 | +EXPORT int modbus_rtu_get_rts(modbus_t *ctx); | ||
| 46 | 46 | ||
| 47 | MODBUS_END_DECLS | 47 | MODBUS_END_DECLS |
| 48 | 48 |
src/modbus-tcp.h
| @@ -26,11 +26,22 @@ MODBUS_BEGIN_DECLS | @@ -26,11 +26,22 @@ MODBUS_BEGIN_DECLS | ||
| 26 | #if defined(_WIN32) && !defined(__CYGWIN__) | 26 | #if defined(_WIN32) && !defined(__CYGWIN__) |
| 27 | /* Win32 with MinGW, supplement to <errno.h> */ | 27 | /* Win32 with MinGW, supplement to <errno.h> */ |
| 28 | #include <winsock2.h> | 28 | #include <winsock2.h> |
| 29 | +#if !defined(ECONNRESET) | ||
| 29 | #define ECONNRESET WSAECONNRESET | 30 | #define ECONNRESET WSAECONNRESET |
| 31 | +#endif | ||
| 32 | +#if !defined(ECONNREFUSED) | ||
| 30 | #define ECONNREFUSED WSAECONNREFUSED | 33 | #define ECONNREFUSED WSAECONNREFUSED |
| 34 | +#endif | ||
| 35 | +#if !defined(ETIMEDOUT) | ||
| 31 | #define ETIMEDOUT WSAETIMEDOUT | 36 | #define ETIMEDOUT WSAETIMEDOUT |
| 37 | +#endif | ||
| 38 | +#if !defined(ENOPROTOOPT) | ||
| 32 | #define ENOPROTOOPT WSAENOPROTOOPT | 39 | #define ENOPROTOOPT WSAENOPROTOOPT |
| 33 | #endif | 40 | #endif |
| 41 | +#if !defined(EINPROGRESS) | ||
| 42 | +#define EINPROGRESS WSAEINPROGRESS | ||
| 43 | +#endif | ||
| 44 | +#endif | ||
| 34 | 45 | ||
| 35 | #define MODBUS_TCP_DEFAULT_PORT 502 | 46 | #define MODBUS_TCP_DEFAULT_PORT 502 |
| 36 | #define MODBUS_TCP_SLAVE 0xFF | 47 | #define MODBUS_TCP_SLAVE 0xFF |
| @@ -40,13 +51,13 @@ MODBUS_BEGIN_DECLS | @@ -40,13 +51,13 @@ MODBUS_BEGIN_DECLS | ||
| 40 | */ | 51 | */ |
| 41 | #define MODBUS_TCP_MAX_ADU_LENGTH 260 | 52 | #define MODBUS_TCP_MAX_ADU_LENGTH 260 |
| 42 | 53 | ||
| 43 | -modbus_t* modbus_new_tcp(const char *ip_address, int port); | ||
| 44 | -int modbus_tcp_listen(modbus_t *ctx, int nb_connection); | ||
| 45 | -int modbus_tcp_accept(modbus_t *ctx, int *socket); | 54 | +EXPORT modbus_t* modbus_new_tcp(const char *ip_address, int port); |
| 55 | +EXPORT int modbus_tcp_listen(modbus_t *ctx, int nb_connection); | ||
| 56 | +EXPORT int modbus_tcp_accept(modbus_t *ctx, int *socket); | ||
| 46 | 57 | ||
| 47 | -modbus_t* modbus_new_tcp_pi(const char *node, const char *service); | ||
| 48 | -int modbus_tcp_pi_listen(modbus_t *ctx, int nb_connection); | ||
| 49 | -int modbus_tcp_pi_accept(modbus_t *ctx, int *socket); | 58 | +EXPORT modbus_t* modbus_new_tcp_pi(const char *node, const char *service); |
| 59 | +EXPORT int modbus_tcp_pi_listen(modbus_t *ctx, int nb_connection); | ||
| 60 | +EXPORT int modbus_tcp_pi_accept(modbus_t *ctx, int *socket); | ||
| 50 | 61 | ||
| 51 | MODBUS_END_DECLS | 62 | MODBUS_END_DECLS |
| 52 | 63 |
src/modbus.h
| @@ -34,6 +34,17 @@ | @@ -34,6 +34,17 @@ | ||
| 34 | 34 | ||
| 35 | #include "modbus-version.h" | 35 | #include "modbus-version.h" |
| 36 | 36 | ||
| 37 | +#if defined(_WIN32) | ||
| 38 | +# if defined(DLLBUILD) | ||
| 39 | +/* define DLLBUILD when building the DLL */ | ||
| 40 | +# define EXPORT __declspec(dllexport) | ||
| 41 | +# else | ||
| 42 | +# define EXPORT __declspec(dllimport) | ||
| 43 | +# endif | ||
| 44 | +#else | ||
| 45 | +# define EXPORT | ||
| 46 | +#endif | ||
| 47 | + | ||
| 37 | #ifdef __cplusplus | 48 | #ifdef __cplusplus |
| 38 | # define MODBUS_BEGIN_DECLS extern "C" { | 49 | # define MODBUS_BEGIN_DECLS extern "C" { |
| 39 | # define MODBUS_END_DECLS } | 50 | # define MODBUS_END_DECLS } |
| @@ -143,57 +154,57 @@ typedef enum | @@ -143,57 +154,57 @@ typedef enum | ||
| 143 | MODBUS_ERROR_RECOVERY_PROTOCOL = (1<<2), | 154 | MODBUS_ERROR_RECOVERY_PROTOCOL = (1<<2), |
| 144 | } modbus_error_recovery_mode; | 155 | } modbus_error_recovery_mode; |
| 145 | 156 | ||
| 146 | -int modbus_set_slave(modbus_t* ctx, int slave); | ||
| 147 | -int modbus_set_error_recovery(modbus_t *ctx, modbus_error_recovery_mode error_recovery); | ||
| 148 | -void modbus_set_socket(modbus_t *ctx, int socket); | ||
| 149 | -int modbus_get_socket(modbus_t *ctx); | 157 | +EXPORT int modbus_set_slave(modbus_t* ctx, int slave); |
| 158 | +EXPORT int modbus_set_error_recovery(modbus_t *ctx, modbus_error_recovery_mode error_recovery); | ||
| 159 | +EXPORT void modbus_set_socket(modbus_t *ctx, int socket); | ||
| 160 | +EXPORT int modbus_get_socket(modbus_t *ctx); | ||
| 150 | 161 | ||
| 151 | -void modbus_get_response_timeout(modbus_t *ctx, struct timeval *timeout); | ||
| 152 | -void modbus_set_response_timeout(modbus_t *ctx, const struct timeval *timeout); | 162 | +EXPORT void modbus_get_response_timeout(modbus_t *ctx, struct timeval *timeout); |
| 163 | +EXPORT void modbus_set_response_timeout(modbus_t *ctx, const struct timeval *timeout); | ||
| 153 | 164 | ||
| 154 | -void modbus_get_byte_timeout(modbus_t *ctx, struct timeval *timeout); | ||
| 155 | -void modbus_set_byte_timeout(modbus_t *ctx, const struct timeval *timeout); | 165 | +EXPORT void modbus_get_byte_timeout(modbus_t *ctx, struct timeval *timeout); |
| 166 | +EXPORT void modbus_set_byte_timeout(modbus_t *ctx, const struct timeval *timeout); | ||
| 156 | 167 | ||
| 157 | -int modbus_get_header_length(modbus_t *ctx); | 168 | +EXPORT int modbus_get_header_length(modbus_t *ctx); |
| 158 | 169 | ||
| 159 | -int modbus_connect(modbus_t *ctx); | ||
| 160 | -void modbus_close(modbus_t *ctx); | 170 | +EXPORT int modbus_connect(modbus_t *ctx); |
| 171 | +EXPORT void modbus_close(modbus_t *ctx); | ||
| 161 | 172 | ||
| 162 | -void modbus_free(modbus_t *ctx); | 173 | +EXPORT void modbus_free(modbus_t *ctx); |
| 163 | 174 | ||
| 164 | -int modbus_flush(modbus_t *ctx); | ||
| 165 | -void modbus_set_debug(modbus_t *ctx, int boolean); | 175 | +EXPORT int modbus_flush(modbus_t *ctx); |
| 176 | +EXPORT void modbus_set_debug(modbus_t *ctx, int boolean); | ||
| 166 | 177 | ||
| 167 | -const char *modbus_strerror(int errnum); | 178 | +EXPORT const char *modbus_strerror(int errnum); |
| 168 | 179 | ||
| 169 | -int modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); | ||
| 170 | -int modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); | ||
| 171 | -int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); | ||
| 172 | -int modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); | ||
| 173 | -int modbus_write_bit(modbus_t *ctx, int coil_addr, int status); | ||
| 174 | -int modbus_write_register(modbus_t *ctx, int reg_addr, int value); | ||
| 175 | -int modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *data); | ||
| 176 | -int modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *data); | ||
| 177 | -int modbus_write_and_read_registers(modbus_t *ctx, int write_addr, int write_nb, | ||
| 178 | - const uint16_t *src, int read_addr, int read_nb, | ||
| 179 | - uint16_t *dest); | ||
| 180 | -int modbus_report_slave_id(modbus_t *ctx, uint8_t *dest); | 180 | +EXPORT int modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); |
| 181 | +EXPORT int modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); | ||
| 182 | +EXPORT int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); | ||
| 183 | +EXPORT int modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); | ||
| 184 | +EXPORT int modbus_write_bit(modbus_t *ctx, int coil_addr, int status); | ||
| 185 | +EXPORT int modbus_write_register(modbus_t *ctx, int reg_addr, int value); | ||
| 186 | +EXPORT int modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *data); | ||
| 187 | +EXPORT int modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *data); | ||
| 188 | +EXPORT int modbus_write_and_read_registers(modbus_t *ctx, int write_addr, int write_nb, | ||
| 189 | + const uint16_t *src, int read_addr, int read_nb, | ||
| 190 | + uint16_t *dest); | ||
| 191 | +EXPORT int modbus_report_slave_id(modbus_t *ctx, uint8_t *dest); | ||
| 181 | 192 | ||
| 182 | -modbus_mapping_t* modbus_mapping_new(int nb_coil_status, int nb_input_status, | ||
| 183 | - int nb_holding_registers, int nb_input_registers); | ||
| 184 | -void modbus_mapping_free(modbus_mapping_t *mb_mapping); | 193 | +EXPORT modbus_mapping_t* modbus_mapping_new(int nb_coil_status, int nb_input_status, |
| 194 | + int nb_holding_registers, int nb_input_registers); | ||
| 195 | +EXPORT void modbus_mapping_free(modbus_mapping_t *mb_mapping); | ||
| 185 | 196 | ||
| 186 | -int modbus_send_raw_request(modbus_t *ctx, uint8_t *raw_req, int raw_req_length); | 197 | +EXPORT int modbus_send_raw_request(modbus_t *ctx, uint8_t *raw_req, int raw_req_length); |
| 187 | 198 | ||
| 188 | -int modbus_receive(modbus_t *ctx, uint8_t *req); | ||
| 189 | -int modbus_receive_from(modbus_t *ctx, int sockfd, uint8_t *req); | 199 | +EXPORT int modbus_receive(modbus_t *ctx, uint8_t *req); |
| 200 | +EXPORT int modbus_receive_from(modbus_t *ctx, int sockfd, uint8_t *req); | ||
| 190 | 201 | ||
| 191 | -int modbus_receive_confirmation(modbus_t *ctx, uint8_t *rsp); | 202 | +EXPORT int modbus_receive_confirmation(modbus_t *ctx, uint8_t *rsp); |
| 192 | 203 | ||
| 193 | -int modbus_reply(modbus_t *ctx, const uint8_t *req, | ||
| 194 | - int req_length, modbus_mapping_t *mb_mapping); | ||
| 195 | -int modbus_reply_exception(modbus_t *ctx, const uint8_t *req, | ||
| 196 | - unsigned int exception_code); | 204 | +EXPORT int modbus_reply(modbus_t *ctx, const uint8_t *req, |
| 205 | + int req_length, modbus_mapping_t *mb_mapping); | ||
| 206 | +EXPORT int modbus_reply_exception(modbus_t *ctx, const uint8_t *req, | ||
| 207 | + unsigned int exception_code); | ||
| 197 | 208 | ||
| 198 | /** | 209 | /** |
| 199 | * UTILS FUNCTIONS | 210 | * UTILS FUNCTIONS |
| @@ -209,12 +220,12 @@ int modbus_reply_exception(modbus_t *ctx, const uint8_t *req, | @@ -209,12 +220,12 @@ int modbus_reply_exception(modbus_t *ctx, const uint8_t *req, | ||
| 209 | tab_int8[(index) + 1] = (value) & 0xFF; \ | 220 | tab_int8[(index) + 1] = (value) & 0xFF; \ |
| 210 | } while (0) | 221 | } while (0) |
| 211 | 222 | ||
| 212 | -void modbus_set_bits_from_byte(uint8_t *dest, int index, const uint8_t value); | ||
| 213 | -void modbus_set_bits_from_bytes(uint8_t *dest, int index, unsigned int nb_bits, | ||
| 214 | - const uint8_t *tab_byte); | ||
| 215 | -uint8_t modbus_get_byte_from_bits(const uint8_t *src, int index, unsigned int nb_bits); | ||
| 216 | -float modbus_get_float(const uint16_t *src); | ||
| 217 | -void modbus_set_float(float f, uint16_t *dest); | 223 | +EXPORT void modbus_set_bits_from_byte(uint8_t *dest, int index, const uint8_t value); |
| 224 | +EXPORT void modbus_set_bits_from_bytes(uint8_t *dest, int index, unsigned int nb_bits, | ||
| 225 | + const uint8_t *tab_byte); | ||
| 226 | +EXPORT uint8_t modbus_get_byte_from_bits(const uint8_t *src, int index, unsigned int nb_bits); | ||
| 227 | +EXPORT float modbus_get_float(const uint16_t *src); | ||
| 228 | +EXPORT void modbus_set_float(float f, uint16_t *dest); | ||
| 218 | 229 | ||
| 219 | #include "modbus-tcp.h" | 230 | #include "modbus-tcp.h" |
| 220 | #include "modbus-rtu.h" | 231 | #include "modbus-rtu.h" |