diff options
author | Michael Veksler <Mihails.Vekslers@zabbix.com> | 2020-09-14 15:09:48 +0300 |
---|---|---|
committer | Michael Veksler <Mihails.Vekslers@zabbix.com> | 2020-09-18 11:38:36 +0300 |
commit | b460fd759f93b287a3e2941a9768641127caa74f (patch) | |
tree | f9db38c24b874cb939b9fc91b7cca41100868a41 /include/modbtype.h | |
parent | e4641c6498e62a06154f7a9a51945aabee86c6a1 (diff) |
...G...... [ZBXNEXT-6093] fixed compilation of agent2
Diffstat (limited to 'include/modbtype.h')
-rw-r--r-- | include/modbtype.h | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/include/modbtype.h b/include/modbtype.h new file mode 100644 index 00000000000..fb5277762fa --- /dev/null +++ b/include/modbtype.h @@ -0,0 +1,129 @@ +/* +** Zabbix +** Copyright (C) 2001-2020 Zabbix SIA +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +**/ + +#ifndef ZABBIX_SYSINFO_COMMON_MODBTYPE_H +#define ZABBIX_SYSINFO_COMMON_MODBTYPE_H + +#include "sysinfo.h" + +extern int CONFIG_TIMEOUT; + +#define ZBX_MODBUS_TCP_PORT_DEFAULT 502 + +#define ZBX_MODBUS_FUNCTION_EMPTY 0 +#define ZBX_MODBUS_FUNCTION_COIL 1 +#define ZBX_MODBUS_FUNCTION_DISCRETE_INPUT 2 +#define ZBX_MODBUS_FUNCTION_HOLDING_REGISTERS 3 +#define ZBX_MODBUS_FUNCTION_INPUT_REGISTERS 4 + +#define ZBX_MODBUS_SERIAL_PARAMS_PARITY_NONE 'N' +#define ZBX_MODBUS_SERIAL_PARAMS_PARITY_EVEN 'E' +#define ZBX_MODBUS_SERIAL_PARAMS_PARITY_ODD 'O' + +#define ZBX_MODBUS_BYTE_SWAP_16(t_int16) (((t_int16 >> 8) & 0xFF) | ((t_int16 & 0xFF) << 8)) + +#define ZBX_MODBUS_32BE(t_int16) \ + (((uint32_t)t_int16[0]) << 16) | t_int16[1] +#define ZBX_MODBUS_32MLE(t_int16) \ + (((uint32_t)t_int16[1]) << 16) | t_int16[0] +#define ZBX_MODBUS_32MBE(t_int16) \ + (((uint32_t)ZBX_MODBUS_BYTE_SWAP_16(t_int16[0])) << 16) | \ + ZBX_MODBUS_BYTE_SWAP_16(t_int16[1]) +#define ZBX_MODBUS_32LE(t_int16) \ + (((uint32_t)ZBX_MODBUS_BYTE_SWAP_16(t_int16[1])) << 16) | \ + ZBX_MODBUS_BYTE_SWAP_16(t_int16[0]) +#define ZBX_MODBUS_64BE(t_int16) \ + (((uint64_t)t_int16[0]) << 48) | \ + (((uint64_t)t_int16[1]) << 32) | \ + (((uint64_t)t_int16[2]) << 16) | t_int16[3] +#define ZBX_MODBUS_64MLE(t_int16) \ + (((uint64_t)t_int16[3]) << 48) | \ + (((uint64_t)t_int16[2]) << 32) | \ + (((uint64_t)t_int16[1]) << 16) | t_int16[0] +#define ZBX_MODBUS_64MBE(t_int16) \ + (((uint64_t)ZBX_MODBUS_BYTE_SWAP_16(t_int16[0])) << 48) | \ + (((uint64_t)ZBX_MODBUS_BYTE_SWAP_16(t_int16[1])) << 32) | \ + (((uint64_t)ZBX_MODBUS_BYTE_SWAP_16(t_int16[2])) << 16) | \ + ZBX_MODBUS_BYTE_SWAP_16(t_int16[3]) +#define ZBX_MODBUS_64LE(t_int16) \ + (((uint64_t)ZBX_MODBUS_BYTE_SWAP_16(t_int16[3])) << 48) | \ + (((uint64_t)ZBX_MODBUS_BYTE_SWAP_16(t_int16[2])) << 32) | \ + (((uint64_t)ZBX_MODBUS_BYTE_SWAP_16(t_int16[1])) << 16) | \ + ZBX_MODBUS_BYTE_SWAP_16(t_int16[0]) + +typedef enum +{ + ZBX_MODBUS_PROTOCOL_TCP, + ZBX_MODBUS_PROTOCOL_RTU +} modbus_protocol_t; + +typedef struct +{ + char *ip; + char *port; +} +zbx_modbus_connection_tcp; + +typedef struct +{ + char *port; + int baudrate; + unsigned char data_bits; + unsigned char parity; + unsigned char stop_bits; +} +zbx_modbus_connection_serial; + +typedef struct +{ + modbus_protocol_t protocol; + union + { + zbx_modbus_connection_tcp tcp; + zbx_modbus_connection_serial serial; + } conn_info; +} +zbx_modbus_endpoint_t; + +typedef enum +{ + ZBX_MODBUS_DATATYPE_BIT, + ZBX_MODBUS_DATATYPE_INT8, + ZBX_MODBUS_DATATYPE_UINT8, + ZBX_MODBUS_DATATYPE_INT16, + ZBX_MODBUS_DATATYPE_UINT16, + ZBX_MODBUS_DATATYPE_INT32, + ZBX_MODBUS_DATATYPE_UINT32, + ZBX_MODBUS_DATATYPE_FLOAT, + ZBX_MODBUS_DATATYPE_UINT64, + ZBX_MODBUS_DATATYPE_DOUBLE +} modbus_datatype_t; + +typedef enum +{ + ZBX_MODBUS_ENDIANNESS_BE, + ZBX_MODBUS_ENDIANNESS_LE, + ZBX_MODBUS_ENDIANNESS_MBE, + ZBX_MODBUS_ENDIANNESS_MLE +} modbus_endianness_t; + +int MODBUS_GET(AGENT_REQUEST *request, AGENT_RESULT *result); +int zbx_init_modbus(char **error); + +#endif /* ZABBIX_SYSINFO_COMMON_MODBTYPE_H */ |