50 lines
1.3 KiB
C++
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
|