/* * ResolverSerialPortAdapter.hpp * * Created on: 30 ÿíâ. 2020 ã. * Author: user */ #ifndef UMLIBRARY_DRIVER_RESOLVERSERIALPORTADAPTER_HPP_ #define UMLIBRARY_DRIVER_RESOLVERSERIALPORTADAPTER_HPP_ #include "SpiPortReader.hpp" #include "IResolver.hh" #include namespace driver { template class ResolverSerialPortAdapter : public IResolver { public: float getSinChannel() const override { return sin_channel; } float getCosChannel() const override { return cos_channel; } void process() { typename Packager::Data data_time_regs = Packager::decode( reader.get() ); sin_channel = data_time_regs.data[sin_channel_offset]; cos_channel = data_time_regs.data[cos_channel_offset]; } ResolverSerialPortAdapter( peripheral::ISerialPort & port, std::size_t frame_size, typename Packager::Frame request_frame, unsigned short sin_channel_offset, unsigned short cos_channel_offset ) : reader(port, frame_size, request_frame), sin_channel(NAN), cos_channel(NAN), sin_channel_offset(sin_channel_offset), cos_channel_offset(cos_channel_offset) {} virtual ~ResolverSerialPortAdapter() = default; private: float sin_channel; float cos_channel; const unsigned short sin_channel_offset; const unsigned short cos_channel_offset; driver::SpiPortReader reader; }; } #endif /* UMLIBRARY_DRIVER_RESOLVERSERIALPORTADAPTER_HPP_ */