45 lines
1.4 KiB
C++
45 lines
1.4 KiB
C++
/*
|
||
* SerialPacketReader.hh
|
||
*
|
||
* Created on: 17 дек. 2021 г.
|
||
* Author: titov
|
||
*/
|
||
|
||
#ifndef UMLIBRARY_DRIVER_SERIALPACKETREADER_HH_
|
||
#define UMLIBRARY_DRIVER_SERIALPACKETREADER_HH_
|
||
|
||
#include "../systemic/IProcess.hh"
|
||
|
||
#include "../peripheral/ISerialPort.hh"
|
||
#include "../communication/format/BinaryDataPublisher.hh"
|
||
|
||
namespace driver {
|
||
|
||
class SerialPacketReader : public systemic::IProcess {
|
||
public:
|
||
SerialPacketReader( peripheral::ISerialPort & serial_port, communication::IBinaryDataSubscriber & binary_data,
|
||
std::pmr::memory_resource * memory_resource, std::size_t bitsize, bool data_invers = false );
|
||
|
||
//!Основной фоновый метод, отвечающий за прием и чтение и разбор фрейма данных.
|
||
void process();
|
||
|
||
private:
|
||
std::vector< char, std::pmr::polymorphic_allocator<char> > data_frame;
|
||
peripheral::ISerialPort & serial_port; //!<Интерфейс последовательного порта, по которому будет производится получение пакета данных.
|
||
communication::IBinaryDataSubscriber & binary_data; //!<
|
||
|
||
const std::size_t bitsize; //!<Фиксированный размер посылки.
|
||
|
||
enum Phase {
|
||
request,
|
||
response
|
||
} phase = request;
|
||
|
||
bool data_invers;
|
||
|
||
};
|
||
|
||
}
|
||
|
||
#endif /* UMLIBRARY_DRIVER_SERIALPACKETREADER_HH_ */
|