From 6c491976b55e60312b1ba54a8f64b5ef8b005cea Mon Sep 17 00:00:00 2001 From: cfif Date: Mon, 29 Sep 2025 11:21:52 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9?= =?UTF-8?q?=D1=81=D1=8B=20=D0=B8=20=D0=B4=D1=80=D0=B0=D0=B9=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/SerialPort.h | 18 ++++++++++++++++++ Src/SerialPort.c | 43 +++++++++++++++++++++++++++++++++++++++++++ modular.json | 22 ++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 Inc/SerialPort.h create mode 100644 Src/SerialPort.c create mode 100644 modular.json diff --git a/Inc/SerialPort.h b/Inc/SerialPort.h new file mode 100644 index 0000000..303939c --- /dev/null +++ b/Inc/SerialPort.h @@ -0,0 +1,18 @@ +// +// Created by xemon on 01.09.22. +// + +#ifndef SERIALPORT_SERIALPORT_H +#define SERIALPORT_SERIALPORT_H + +#include "SerialPortIO.h" + +uint16_t SerialPortReceive(tSerialPortIO *io, uint8_t *data, uint16_t size, uint32_t timeout); + +uint16_t SerialPortReceiveTo(tSerialPortIO *io, uint8_t *data, uint16_t size, uint8_t symbol, uint32_t timeout); + +uint16_t SerialPortTransmit(tSerialPortIO *io, uint8_t *data, uint16_t size, uint32_t timeout); + +void SerialPortClearRxBuffer(tSerialPortIO *io); + +#endif //SERIALPORT_SERIALPORT_H diff --git a/Src/SerialPort.c b/Src/SerialPort.c new file mode 100644 index 0000000..f920821 --- /dev/null +++ b/Src/SerialPort.c @@ -0,0 +1,43 @@ +// +// Created by xemon on 01.09.22. +// + +#include "SerialPort.h" +#include "SystemDelayInterface.h" + +uint16_t SerialPortReceive(tSerialPortIO *io, uint8_t *data, uint16_t size, uint32_t timeout) { + return io->receive(io->env, data, size, timeout); +} + +void SerialPortClearRxBuffer(tSerialPortIO *io) { + uint8_t byte; + uint32_t antiSpamTimeout = SystemGetMs() + 10; + while ((antiSpamTimeout > SystemGetMs()) && io->receive(io->env, &byte, 1, 0)); +} + +uint16_t SerialPortReceiveTo(tSerialPortIO *io, uint8_t *data, uint16_t size, uint8_t symbol, uint32_t timeout) { + + uint8_t dataToSymbol; + int i = 0; + + uint32_t endMs = SystemGetMs() + timeout; + uint32_t leftMs; + + while (size && ((timeout == SystemWaitForever) || (endMs > SystemGetMs()))) { + + leftMs = (timeout == SystemWaitForever) ? SystemWaitForever : endMs - SystemGetMs(); + if (SerialPortReceive(io, &dataToSymbol, 1, leftMs)) { + size--; + data[i] = dataToSymbol; + i++; + if (dataToSymbol == symbol) { + break; + } + } + } + return i; +} + +uint16_t SerialPortTransmit(tSerialPortIO *io, uint8_t *data, uint16_t size, uint32_t timeout) { + return io->transmit(io->env, data, size, timeout); +} \ No newline at end of file diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..5ef90ae --- /dev/null +++ b/modular.json @@ -0,0 +1,22 @@ +{ + "dep": [ + { + "type": "git", + "provider": "HVAC_M7", + "repo": "SerialPortInterface" + }, + { + "type": "git", + "provider": "HVAC_M7", + "repo": "SystemDelayInterface" + } + ], + "cmake": { + "inc_dirs": [ + "Inc" + ], + "srcs": [ + "Src/**.c" + ] + } +} \ No newline at end of file