// // 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 #include 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 > 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