/* * SerialPacketReader.cpp * * Created on: 17 δεκ. 2021 γ. * Author: titov */ #include "SerialPacketReader.hh" #include #include #include #include "../communication/format/BinaryHelpers.hh" driver::SerialPacketReader::SerialPacketReader( peripheral::ISerialPort & serial_port, communication::IBinaryDataSubscriber & binary_data, std::pmr::memory_resource * memory_resource, std::size_t bitsize, bool data_invers ) : serial_port(serial_port), binary_data(binary_data), bitsize(bitsize), data_frame(memory_resource), data_invers(data_invers) { data_frame.resize( communication::format::bits::bytes_on_bits(bitsize) ); } void driver::SerialPacketReader::process() { switch(phase) { case response: { if (serial_port.receive(&data_frame.front())) { if( data_invers ) std::reverse(data_frame.begin(), data_frame.end()); binary_data.read( &data_frame.front(), data_frame.size() ); if( not serial_port.transmite(nullptr, bitsize) ) phase = request; } } break; case request: { if( serial_port.transmite(nullptr, bitsize) ) phase = response; } break; default: {} break; } }