diff --git a/.cproject b/.cproject
index eb88b8f..319a899 100644
--- a/.cproject
+++ b/.cproject
@@ -24,8 +24,8 @@
-
-
+
+
@@ -79,7 +79,7 @@
-
+
@@ -102,6 +102,7 @@
+
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index 2b28901..efa6ee5 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/Debug/makefile b/Debug/makefile
index 6772d6e..196f017 100644
--- a/Debug/makefile
+++ b/Debug/makefile
@@ -12,6 +12,7 @@ RM := rm -rf
-include system/src/umb_master/subdir.mk
-include system/src/stm32f1-stdperiph/subdir.mk
-include system/src/newlib/subdir.mk
+-include system/src/modbus_rtu/subdir.mk
-include system/src/drivers/subdir.mk
-include system/src/diag/subdir.mk
-include system/src/davis_vantage/subdir.mk
diff --git a/Debug/sources.mk b/Debug/sources.mk
index 6b970d2..12b80cc 100644
--- a/Debug/sources.mk
+++ b/Debug/sources.mk
@@ -34,6 +34,7 @@ system/src/cortexm \
system/src/davis_vantage \
system/src/diag \
system/src/drivers \
+system/src/modbus_rtu \
system/src/newlib \
system/src/stm32f1-stdperiph \
system/src/umb_master \
diff --git a/doc/instrukcja_obslugi_instalacji_i_napraw.pdf b/doc/instrukcja_obslugi_instalacji_i_napraw.pdf
index 566294e..b5b161f 100644
Binary files a/doc/instrukcja_obslugi_instalacji_i_napraw.pdf and b/doc/instrukcja_obslugi_instalacji_i_napraw.pdf differ
diff --git a/system/include/modbus_rtu/rtu_coil_data_t.h b/system/include/modbus_rtu/rtu_coil_data_t.h
new file mode 100644
index 0000000..b8f2478
--- /dev/null
+++ b/system/include/modbus_rtu/rtu_coil_data_t.h
@@ -0,0 +1,17 @@
+/*
+ * rtu_coil_data_t.h
+ *
+ * Created on: 28.08.2020
+ * Author: mateusz
+ */
+
+#ifndef INCLUDE_MODBUS_RTU_RTU_COIL_DATA_T_H_
+#define INCLUDE_MODBUS_RTU_RTU_COIL_DATA_T_H_
+
+typedef struct rtu_coil_data_t {
+
+ uint8_t number_of_coils;
+
+}rtu_coil_data_t;
+
+#endif /* INCLUDE_MODBUS_RTU_RTU_COIL_DATA_T_H_ */
diff --git a/system/include/modbus_rtu/rtu_parser.h b/system/include/modbus_rtu/rtu_parser.h
index a770489..0912d56 100644
--- a/system/include/modbus_rtu/rtu_parser.h
+++ b/system/include/modbus_rtu/rtu_parser.h
@@ -10,6 +10,18 @@
#include
-uint16_t rtu_parser_stream_crc(uint16_t previous_crc, uint8_t current_data);
+inline uint16_t rtu_parser_stream_crc(uint16_t previous_crc, uint8_t current_data) {
+ int i;
+
+ previous_crc ^= (uint16_t)current_data;
+ for (i = 0; i < 8; ++i) {
+ if (previous_crc & 1)
+ previous_crc = (previous_crc) ^ 0xA001;
+ else
+ previous_crc = (previous_crc >> 1);
+ }
+
+ return previous_crc;
+}
#endif /* INCLUDE_MODBUS_RTU_RTU_PARSER_H_ */
diff --git a/system/include/modbus_rtu/rtu_serial_io.h b/system/include/modbus_rtu/rtu_serial_io.h
index 6082393..7a14aaa 100644
--- a/system/include/modbus_rtu/rtu_serial_io.h
+++ b/system/include/modbus_rtu/rtu_serial_io.h
@@ -8,6 +8,14 @@
#ifndef INCLUDE_MODBUS_RTU_RTU_SERIAL_IO_H_
#define INCLUDE_MODBUS_RTU_RTU_SERIAL_IO_H_
+#include
+extern uint16_t rtu_serial_previous_crc;
+
+uint8_t rtu_serial_callback(uint8_t current_data, const uint8_t * const rx_buffer, uint16_t rx_bytes_counter);
+
+inline void rtu_serial_reset_crc(void) {
+ rtu_serial_previous_crc = 0xFFFF;
+}
#endif /* INCLUDE_MODBUS_RTU_RTU_SERIAL_IO_H_ */
diff --git a/system/src/modbus_rtu/rtu_parser.c b/system/src/modbus_rtu/rtu_parser.c
index a8149d7..92e85f4 100644
--- a/system/src/modbus_rtu/rtu_parser.c
+++ b/system/src/modbus_rtu/rtu_parser.c
@@ -7,16 +7,4 @@
#include "./modbus_rtu/rtu_parser.h"
-uint16_t rtu_parser_stream_crc(uint16_t previous_crc, uint8_t current_data) {
- int i;
- previous_crc ^= (uint16_t)current_data;
- for (i = 0; i < 8; ++i) {
- if (previous_crc & 1)
- previous_crc = (previous_crc) ^ 0xA001;
- else
- previous_crc = (previous_crc >> 1);
- }
-
- return previous_crc;
-}
diff --git a/system/src/modbus_rtu/rtu_serial_io.c b/system/src/modbus_rtu/rtu_serial_io.c
index 404a760..a637607 100644
--- a/system/src/modbus_rtu/rtu_serial_io.c
+++ b/system/src/modbus_rtu/rtu_serial_io.c
@@ -5,4 +5,40 @@
* Author: mateusz
*/
+#include "modbus_rtu/rtu_serial_io.h"
+#include "modbus_rtu/rtu_parser.h"
+
+#include "drivers/serial.h"
+
+
+/**
+ * CRC value after the last call to rtu_serial_callback
+ */
+uint16_t rtu_serial_previous_crc = 0;
+
+/**
+ * A callback for stream CRC calculation
+ */
+uint8_t rtu_serial_callback(uint8_t current_data, const uint8_t * const rx_buffer, uint16_t rx_bytes_counter) {
+
+ uint8_t retval = 0;
+
+ uint16_t new_crc = 0;
+
+ // calculate new crc
+ new_crc = rtu_parser_stream_crc(rtu_serial_previous_crc, current_data);
+
+ // if the new CRC value equals 0x0000 it means that this was MSB
+ // of CRC from correctly received Modbus-RTU frame
+ if (new_crc == 0) {
+ // return '1' to terminate the transmission
+ retval = 1;
+ }
+ else {
+ rtu_serial_previous_crc = new_crc;
+ }
+
+ return retval;
+}
+