--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mb_layer1_prototypes.h Sun Mar 05 00:05:46 2017 +0000
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2002,2016 Mario de Sousa (msousa@fe.up.pt)
+ *
+ * This file is part of the Modbus library for Beremiz and matiec.
+ *
+ * This Modbus library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 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 Lesser
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this Modbus library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * This code is made available on the understanding that it will not be
+ * used in safety-critical situations without a full and competent review.
+ */
+
+
+
+
+ /* write a modbus frame */
+ /* WARNING: when calling this function, the *frame_data buffer
+ * must be allocated with an extra *extra_bytes
+ * beyond those required for the frame_length.
+ * This is because the extra bytes will be used
+ * to store the crc before sending the frame.
+ *
+ * The *extra_bytes value will be returned by the
+ * modbus_init() function call.
+ */
+ /* NOTE: calling this function will flush the input stream,
+ * which means any frames that may have arrived
+ * but have not yet been read using modbus_read()
+ * will be permanently lost...
+ */
+int modbus_write(int nd,
+ u8 *frame_data,
+ size_t frame_length,
+ u16 transaction_id,
+ const struct timespec *transmit_timeout
+ );
+
+ /* read a modbus frame */
+/*
+ * The frame is read from:
+ * - the node descriptor nd, if nd >= 0
+ * - any valid and initialised node descriptor, if nd = -1
+ * In this case, the node where the data is eventually read from
+ * is returned in *nd.
+ * NOTE: (only avaliable if using TCP)
+ */
+ /* NOTE: calling modbus_write() will flush the input stream,
+ * which means any frames that may have arrived
+ * but have not yet been read using modbus_read()
+ * will be permanently lost...
+ *
+ * NOTE: Ususal select semantics for (a: recv_timeout == NULL) and
+ * (b: *recv_timeout == 0) also apply.
+ * (a) Indefinite timeout
+ * (b) Try once, and and quit if no data available.
+ */
+ /* NOTE: send_data and send_length is used to pass to the modbus_read() function
+ * the frame that was previously sent over the same connection (node).
+ * This data is then allows the modbus_read() function to ignore any
+ * data that is read but identical to the previously sent data. This
+ * is used when using serial ports that echoes back all the data that is
+ * sent out over the same serial port. When using some RS232 to RS485
+ * converters, this functionality is essential as not all these converters
+ * are capable of not echoing back the sent data.
+ * These parameters are ignored when using TCP!
+ */
+
+ /* RETURNS: number of bytes read
+ * -1 on read from file/node error
+ * -2 on timeout
+ */
+int modbus_read(int *nd, /* node descriptor */
+ u8 **recv_data_ptr,
+ u16 *transaction_id,
+ const u8 *send_data,
+ int send_length,
+ const struct timespec *recv_timeout);
+
+
+ /* init the library */
+int modbus_init(int nd_count, /* maximum number of nodes... */
+ optimization_t opt,
+ int *extra_bytes);
+
+ /* shutdown the library...*/
+int modbus_done(void);
+
+
+/* Open a node for master / slave operation.
+ * Returns the node descriptor, or -1 on error.
+ */
+int modbus_connect(node_addr_t node_addr);
+int modbus_listen(node_addr_t node_addr);
+
+/* Close a node, needs a node descriptor as argument... */
+int modbus_close(int nd);
+
+/* Tell the library that the user will probably not be communicating
+ * for some time...
+ * This will allow the library to release any resources it will not
+ * be needing during the silence.
+ * NOTE: This is onlyused by the TCP version to close down tcp connections
+ * when the silence will going to be longer than second.
+ */
+int modbus_silence_init(void);
+
+ /* determine the minmum acceptable timeout... */
+ /* NOTE: timeout values passed to modbus_read() lower than the value returned
+ * by this function may result in frames being aborted midway, since they
+ * take at least modbus_get_min_timeout() seconds to transmit.
+ */
+double modbus_get_min_timeout(int baud,
+ int parity,
+ int data_bits,
+ int stop_bits);
+
+
+
+
+
+
+
+
+
+