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