MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/configuration/hardware/DeviceInfo.cpp
2024-06-07 11:12:56 +03:00

131 lines
3.6 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* DeviceInfo.cpp
*
* Created on: 16 апр. 2019 г.
* Author: titov
*/
#include "DeviceInfo.hh"
using configuration::hardware::DeviceInfo;
std::size_t DeviceInfo::num_records = 0;
configuration::hardware::DeviceInfo::Record * configuration::hardware::DeviceInfo::table = nullptr;
std::size_t configuration::hardware::DeviceInfo::size = 0;
bool DeviceInfo::notice(TypeId type_id,
PeripheralId peripheral_id,
CpuId cpu_id ) {
bool result;
if( result = num_records < size )
table[num_records++] = Record( type_id, peripheral_id, cpu_id );
return result;
}
bool DeviceInfo::search(TypeId type_id,
PeripheralId peripheral_id,
CpuId cpu_id ) {
for( std::size_t i = 0; i < size; ++i )
if( table[i].peripheral_id == peripheral_id
and table[i].type_id == type_id
and table[i].cpu_id == cpu_id )
return true;
return false;
}
DeviceInfo::Peripherals::PeripheralIterator::PeripheralIterator(
CpuId cpu_id, std::size_t pos ) : position(pos), cpu_id(cpu_id) {}
DeviceInfo::Peripherals::PeripheralIterator & DeviceInfo::Peripherals::PeripheralIterator::operator++() {
position = search_from( position + 1, cpu_id );
return *this;
}
DeviceInfo::Peripherals::PeripheralIterator DeviceInfo::Peripherals::PeripheralIterator::operator++(int) {
DeviceInfo::Peripherals::PeripheralIterator temp = *this;
++(*this);
return temp;
}
bool DeviceInfo::Peripherals::PeripheralIterator::operator==(
PeripheralIterator other ) const {
return position == other.position;
}
bool DeviceInfo::Peripherals::PeripheralIterator::operator!=(
PeripheralIterator other ) const {
return position != other.position;
}
DeviceInfo::Peripherals::PeripheralInfo DeviceInfo::Peripherals::PeripheralIterator::operator*() const {
return std::make_pair( table[position].type_id, table[position].peripheral_id );
}
std::size_t DeviceInfo::search_from( std::size_t i, CpuId cpu_id ) {
if( i != size ) while ( not( table[i].cpu_id == cpu_id )
and ++i < size );
return i;
}
DeviceInfo::Peripherals::PeripheralIterator DeviceInfo::Peripherals::begin() {
return DeviceInfo::Peripherals::PeripheralIterator( cpu_id, search_from( 0, cpu_id ) );
}
DeviceInfo::Peripherals::PeripheralIterator DeviceInfo::Peripherals::end() {
return DeviceInfo::Peripherals::PeripheralIterator( cpu_id, size );
}
DeviceInfo::Peripherals DeviceInfo::getPeripherals( CpuId cpu_id ) {
return DeviceInfo::Peripherals( cpu_id );
}
configuration::hardware::DeviceInfo::Record::Record(TypeId type_id,
PeripheralId peripheral_id,
CpuId cpu_id ) :
type_id(type_id),
peripheral_id(peripheral_id),
cpu_id(cpu_id),
unknow_param( 0xFEEDu ) {}
configuration::hardware::DeviceInfo::Peripherals::Peripherals(CpuId cpu_id) :
cpu_id(cpu_id) {}
void configuration::hardware::DeviceInfo::reset( CpuId incorrect_cpu_id ) {
for( unsigned i = 0; i < size; i++ )
table[i].cpu_id = incorrect_cpu_id;
}
void configuration::hardware::DeviceInfo::initialize( Record * p_table,
std::size_t quantity) {
table = p_table;
size = quantity;
}