MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/driver/MemoryAccessPublisher.hh

50 lines
1.3 KiB
C++

//
// Created by titov on 03.11.2021.
//
#ifndef UMLIBRARY_DEV_MEMORYACCESSPUBLISHER_HH
#define UMLIBRARY_DEV_MEMORYACCESSPUBLISHER_HH
#include "../peripheral/IMemoryAccess.hh"
#include "../systemic/IProcess.hh"
#include "../communication/format/BinaryDataPublisher.hh"
#include <memory_resource>
#include <vector>
namespace driver {
class MemoryAccessPublisher : public communication::ISubscriberRegistrator,
public systemic::IProcess {
public:
MemoryAccessPublisher( peripheral::IMemoryAccess & memory_access, std::pmr::memory_resource * memory_resource );
void addSubscriber( std::size_t bit_address, std::size_t bit_len, communication::IBinaryDataSubscriber * subscriber ) override;
//!Îñíîâíîé ôîíîâûé ìåòîä, îòâå÷àþùèé çà ïðèåì è ÷òåíèå è ðàçáîð ôðåéìà äàííûõ.
void process();
bool probe() const;
private:
communication::format::BinaryDataPublisher subscribers; //!Àáîíåíò.
std::vector< char, std::pmr::polymorphic_allocator<char> > data_frame;
std::size_t begin;
std::size_t size;
peripheral::IMemoryAccess & memory; //!Èíòåðôåéñ ïîñëåäîâàòåëüíîãî ïîðòà, ïî êîòîðîìó áóäåò ïðîèçâîäèòñÿ ïîëó÷åíèå ïàêåòà äàííûõ.
enum Phase {
request,
response,
mute
} phase = request;
};
}
#endif //UMLIBRARY_DEV_MEMORYACCESSPUBLISHER_HH