MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/driver/MemoryAccessSplitter.cpp

85 lines
2.2 KiB
C++

/*
* MemoryAccessSplitter.cpp
*
* Created on: 28 èþë. 2020 ã.
* Author: LeonidTitov
*/
#include "MemoryAccessSplitter.hh"
peripheral::IMemoryAccess & driver::MemoryAccessSplitter::piece() {
return first_part;
}
peripheral::IMemoryAccess & driver::MemoryAccessSplitter::remainder() {
return second_part;
}
driver::MemoryAccessSplitter::MemoryAccessSplitter(
peripheral::IMemoryAccess & memory, std::size_t piece_size ) :
first_part( memory, piece_size, 0 ),
second_part( memory, memory.getCapacity() - piece_size, piece_size ) {}
bool driver::MemoryAccessSplitter::MemoryPiece::read(char * data,
std::size_t r_begin,
std::size_t r_size ) {
if( r_begin + r_size > size )
read_query = false;
else
read_query = memory.read( data, r_begin + offset, r_size );
if( read_query )
read_complite = false;
return read_query;
}
bool driver::MemoryAccessSplitter::MemoryPiece::write(const char * data,
std::size_t w_begin,
std::size_t w_size ) {
if( w_begin + w_size > size )
write_query = false;
else
write_query = memory.write( data, w_begin + offset, w_size );
if( write_query )
write_complite = false;
return write_query;
}
bool driver::MemoryAccessSplitter::MemoryPiece::isReadComplete() const {
if( read_query and memory.isReadComplete() )
read_complite = true;
return read_query and read_complite;
}
bool driver::MemoryAccessSplitter::MemoryPiece::isWriteComplete() const {
if( write_query and memory.isWriteComplete() )
write_complite = true;
return write_query and write_complite;
}
std::size_t driver::MemoryAccessSplitter::MemoryPiece::getCapacity() const {
return size;
}
driver::MemoryAccessSplitter::MemoryPiece::MemoryPiece(
peripheral::IMemoryAccess & memory, std::size_t size, std::size_t offset ) : memory(memory), size(size), offset(offset) {}