From ce0bdfbb9e9b9106b3d38298f0381596199f23ae Mon Sep 17 00:00:00 2001 From: oldfaber Date: Tue, 12 Jun 2012 18:41:22 +0200 Subject: [PATCH] Add EXPORT to exported functions. Fix EXXX values defined in Microsoft C Runtime 10 --- src/modbus-data.c | 2 ++ src/modbus-rtu-private.h | 2 ++ src/modbus-rtu.h | 12 ++++++------ src/modbus-tcp.h | 23 +++++++++++++++++------ src/modbus.h | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------- 5 files changed, 82 insertions(+), 56 deletions(-) diff --git a/src/modbus-data.c b/src/modbus-data.c index 01008a9..ae53757 100644 --- a/src/modbus-data.c +++ b/src/modbus-data.c @@ -25,6 +25,8 @@ #include #include +#include "modbus.h" + /* Sets many bits from a single byte value (all 8 bits of the byte value are set) */ void modbus_set_bits_from_byte(uint8_t *dest, int index, const uint8_t value) diff --git a/src/modbus-rtu-private.h b/src/modbus-rtu-private.h index 072195e..c8fdeab 100644 --- a/src/modbus-rtu-private.h +++ b/src/modbus-rtu-private.h @@ -42,7 +42,9 @@ #define _MODBUS_RTU_TIME_BETWEEN_RTS_SWITCH 10000 #if defined(_WIN32) +#if !defined(ENOTSUP) #define ENOTSUP WSAEOPNOTSUPP +#endif /* WIN32: struct containing serial handle and a receive buffer */ #define PY_BUF_SIZE 512 diff --git a/src/modbus-rtu.h b/src/modbus-rtu.h index 67c740e..71a8481 100644 --- a/src/modbus-rtu.h +++ b/src/modbus-rtu.h @@ -28,21 +28,21 @@ MODBUS_BEGIN_DECLS */ #define MODBUS_RTU_MAX_ADU_LENGTH 256 -modbus_t* modbus_new_rtu(const char *device, int baud, char parity, - int data_bit, int stop_bit); +EXPORT modbus_t* modbus_new_rtu(const char *device, int baud, char parity, + int data_bit, int stop_bit); #define MODBUS_RTU_RS232 0 #define MODBUS_RTU_RS485 1 -int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode); -int modbus_rtu_get_serial_mode(modbus_t *ctx); +EXPORT int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode); +EXPORT int modbus_rtu_get_serial_mode(modbus_t *ctx); #define MODBUS_RTU_RTS_NONE 0 #define MODBUS_RTU_RTS_UP 1 #define MODBUS_RTU_RTS_DOWN 2 -int modbus_rtu_set_rts(modbus_t *ctx, int mode); -int modbus_rtu_get_rts(modbus_t *ctx); +EXPORT int modbus_rtu_set_rts(modbus_t *ctx, int mode); +EXPORT int modbus_rtu_get_rts(modbus_t *ctx); MODBUS_END_DECLS diff --git a/src/modbus-tcp.h b/src/modbus-tcp.h index e4f9a83..d672b8b 100644 --- a/src/modbus-tcp.h +++ b/src/modbus-tcp.h @@ -26,11 +26,22 @@ MODBUS_BEGIN_DECLS #if defined(_WIN32) && !defined(__CYGWIN__) /* Win32 with MinGW, supplement to */ #include +#if !defined(ECONNRESET) #define ECONNRESET WSAECONNRESET +#endif +#if !defined(ECONNREFUSED) #define ECONNREFUSED WSAECONNREFUSED +#endif +#if !defined(ETIMEDOUT) #define ETIMEDOUT WSAETIMEDOUT +#endif +#if !defined(ENOPROTOOPT) #define ENOPROTOOPT WSAENOPROTOOPT #endif +#if !defined(EINPROGRESS) +#define EINPROGRESS WSAEINPROGRESS +#endif +#endif #define MODBUS_TCP_DEFAULT_PORT 502 #define MODBUS_TCP_SLAVE 0xFF @@ -40,13 +51,13 @@ MODBUS_BEGIN_DECLS */ #define MODBUS_TCP_MAX_ADU_LENGTH 260 -modbus_t* modbus_new_tcp(const char *ip_address, int port); -int modbus_tcp_listen(modbus_t *ctx, int nb_connection); -int modbus_tcp_accept(modbus_t *ctx, int *socket); +EXPORT modbus_t* modbus_new_tcp(const char *ip_address, int port); +EXPORT int modbus_tcp_listen(modbus_t *ctx, int nb_connection); +EXPORT int modbus_tcp_accept(modbus_t *ctx, int *socket); -modbus_t* modbus_new_tcp_pi(const char *node, const char *service); -int modbus_tcp_pi_listen(modbus_t *ctx, int nb_connection); -int modbus_tcp_pi_accept(modbus_t *ctx, int *socket); +EXPORT modbus_t* modbus_new_tcp_pi(const char *node, const char *service); +EXPORT int modbus_tcp_pi_listen(modbus_t *ctx, int nb_connection); +EXPORT int modbus_tcp_pi_accept(modbus_t *ctx, int *socket); MODBUS_END_DECLS diff --git a/src/modbus.h b/src/modbus.h index f729ac7..399c41b 100644 --- a/src/modbus.h +++ b/src/modbus.h @@ -34,6 +34,17 @@ #include "modbus-version.h" +#if defined(_WIN32) +# if defined(DLLBUILD) +/* define DLLBUILD when building the DLL */ +# define EXPORT __declspec(dllexport) +# else +# define EXPORT __declspec(dllimport) +# endif +#else +# define EXPORT +#endif + #ifdef __cplusplus # define MODBUS_BEGIN_DECLS extern "C" { # define MODBUS_END_DECLS } @@ -143,57 +154,57 @@ typedef enum MODBUS_ERROR_RECOVERY_PROTOCOL = (1<<2), } modbus_error_recovery_mode; -int modbus_set_slave(modbus_t* ctx, int slave); -int modbus_set_error_recovery(modbus_t *ctx, modbus_error_recovery_mode error_recovery); -void modbus_set_socket(modbus_t *ctx, int socket); -int modbus_get_socket(modbus_t *ctx); +EXPORT int modbus_set_slave(modbus_t* ctx, int slave); +EXPORT int modbus_set_error_recovery(modbus_t *ctx, modbus_error_recovery_mode error_recovery); +EXPORT void modbus_set_socket(modbus_t *ctx, int socket); +EXPORT int modbus_get_socket(modbus_t *ctx); -void modbus_get_response_timeout(modbus_t *ctx, struct timeval *timeout); -void modbus_set_response_timeout(modbus_t *ctx, const struct timeval *timeout); +EXPORT void modbus_get_response_timeout(modbus_t *ctx, struct timeval *timeout); +EXPORT void modbus_set_response_timeout(modbus_t *ctx, const struct timeval *timeout); -void modbus_get_byte_timeout(modbus_t *ctx, struct timeval *timeout); -void modbus_set_byte_timeout(modbus_t *ctx, const struct timeval *timeout); +EXPORT void modbus_get_byte_timeout(modbus_t *ctx, struct timeval *timeout); +EXPORT void modbus_set_byte_timeout(modbus_t *ctx, const struct timeval *timeout); -int modbus_get_header_length(modbus_t *ctx); +EXPORT int modbus_get_header_length(modbus_t *ctx); -int modbus_connect(modbus_t *ctx); -void modbus_close(modbus_t *ctx); +EXPORT int modbus_connect(modbus_t *ctx); +EXPORT void modbus_close(modbus_t *ctx); -void modbus_free(modbus_t *ctx); +EXPORT void modbus_free(modbus_t *ctx); -int modbus_flush(modbus_t *ctx); -void modbus_set_debug(modbus_t *ctx, int boolean); +EXPORT int modbus_flush(modbus_t *ctx); +EXPORT void modbus_set_debug(modbus_t *ctx, int boolean); -const char *modbus_strerror(int errnum); +EXPORT const char *modbus_strerror(int errnum); -int modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); -int modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); -int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); -int modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); -int modbus_write_bit(modbus_t *ctx, int coil_addr, int status); -int modbus_write_register(modbus_t *ctx, int reg_addr, int value); -int modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *data); -int modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *data); -int modbus_write_and_read_registers(modbus_t *ctx, int write_addr, int write_nb, - const uint16_t *src, int read_addr, int read_nb, - uint16_t *dest); -int modbus_report_slave_id(modbus_t *ctx, uint8_t *dest); +EXPORT int modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); +EXPORT int modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); +EXPORT int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); +EXPORT int modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); +EXPORT int modbus_write_bit(modbus_t *ctx, int coil_addr, int status); +EXPORT int modbus_write_register(modbus_t *ctx, int reg_addr, int value); +EXPORT int modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *data); +EXPORT int modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *data); +EXPORT int modbus_write_and_read_registers(modbus_t *ctx, int write_addr, int write_nb, + const uint16_t *src, int read_addr, int read_nb, + uint16_t *dest); +EXPORT int modbus_report_slave_id(modbus_t *ctx, uint8_t *dest); -modbus_mapping_t* modbus_mapping_new(int nb_coil_status, int nb_input_status, - int nb_holding_registers, int nb_input_registers); -void modbus_mapping_free(modbus_mapping_t *mb_mapping); +EXPORT modbus_mapping_t* modbus_mapping_new(int nb_coil_status, int nb_input_status, + int nb_holding_registers, int nb_input_registers); +EXPORT void modbus_mapping_free(modbus_mapping_t *mb_mapping); -int modbus_send_raw_request(modbus_t *ctx, uint8_t *raw_req, int raw_req_length); +EXPORT int modbus_send_raw_request(modbus_t *ctx, uint8_t *raw_req, int raw_req_length); -int modbus_receive(modbus_t *ctx, uint8_t *req); -int modbus_receive_from(modbus_t *ctx, int sockfd, uint8_t *req); +EXPORT int modbus_receive(modbus_t *ctx, uint8_t *req); +EXPORT int modbus_receive_from(modbus_t *ctx, int sockfd, uint8_t *req); -int modbus_receive_confirmation(modbus_t *ctx, uint8_t *rsp); +EXPORT int modbus_receive_confirmation(modbus_t *ctx, uint8_t *rsp); -int modbus_reply(modbus_t *ctx, const uint8_t *req, - int req_length, modbus_mapping_t *mb_mapping); -int modbus_reply_exception(modbus_t *ctx, const uint8_t *req, - unsigned int exception_code); +EXPORT int modbus_reply(modbus_t *ctx, const uint8_t *req, + int req_length, modbus_mapping_t *mb_mapping); +EXPORT int modbus_reply_exception(modbus_t *ctx, const uint8_t *req, + unsigned int exception_code); /** * UTILS FUNCTIONS @@ -209,12 +220,12 @@ int modbus_reply_exception(modbus_t *ctx, const uint8_t *req, tab_int8[(index) + 1] = (value) & 0xFF; \ } while (0) -void modbus_set_bits_from_byte(uint8_t *dest, int index, const uint8_t value); -void modbus_set_bits_from_bytes(uint8_t *dest, int index, unsigned int nb_bits, - const uint8_t *tab_byte); -uint8_t modbus_get_byte_from_bits(const uint8_t *src, int index, unsigned int nb_bits); -float modbus_get_float(const uint16_t *src); -void modbus_set_float(float f, uint16_t *dest); +EXPORT void modbus_set_bits_from_byte(uint8_t *dest, int index, const uint8_t value); +EXPORT void modbus_set_bits_from_bytes(uint8_t *dest, int index, unsigned int nb_bits, + const uint8_t *tab_byte); +EXPORT uint8_t modbus_get_byte_from_bits(const uint8_t *src, int index, unsigned int nb_bits); +EXPORT float modbus_get_float(const uint16_t *src); +EXPORT void modbus_set_float(float f, uint16_t *dest); #include "modbus-tcp.h" #include "modbus-rtu.h" -- libgit2 0.21.4