Johannes Kutning 0d1b73e3e0 Initial commit
2023-10-31 07:47:27 +01:00

80 lines
3.5 KiB
C++

#include "Hardware.h"
#include "../../software/signal_processing_bsp/system.h"
#include "../../software/signal_processing/system/task_sine.h"
#include "../../software/signal_processing/system/task_rand.h"
#include "../../software/signal_processing/system/task_add.h"
#include "../../software/signal_processing/system/task_fft.h"
#include "../../software/signal_processing/system/task_crc.h"
Hardware * Hardware::instance = nullptr;
Hardware * Hardware::getInstance() {
if ( Hardware::instance == nullptr ) {
Hardware::instance = new Hardware();
}
return Hardware::instance;
}
Hardware::~Hardware() {
for ( uint32_t i = 0; i < 7; ++i ) {
delete dataChannel[ i ];
}
}
void Hardware::write( uint32_t base, uint32_t offset, uint32_t value ) {
switch ( base ) {
case DATA_CHANNEL_0_BASE: dataChannel[ 0 ]->write( offset, value ); break;
case DATA_CHANNEL_1_BASE: dataChannel[ 1 ]->write( offset, value ); break;
case DATA_CHANNEL_2_BASE: dataChannel[ 2 ]->write( offset, value ); break;
case DATA_CHANNEL_3_BASE: dataChannel[ 3 ]->write( offset, value ); break;
case DATA_CHANNEL_4_BASE: dataChannel[ 4 ]->write( offset, value ); break;
case DATA_CHANNEL_5_BASE: dataChannel[ 5 ]->write( offset, value ); break;
case DATA_CHANNEL_6_BASE: dataChannel[ 6 ]->write( offset, value ); break;
case HARDWARE_TASK_0_BASE: task[ 0 ]->write( offset, value ); break;
case HARDWARE_TASK_1_BASE: task[ 1 ]->write( offset, value ); break;
case HARDWARE_TASK_2_BASE: task[ 2 ]->write( offset, value ); break;
case HARDWARE_TASK_3_BASE: task[ 3 ]->write( offset, value ); break;
case HARDWARE_TASK_4_BASE: task[ 4 ]->write( offset, value ); break;
case HARDWARE_TASK_5_BASE: task[ 5 ]->write( offset, value ); break;
case HARDWARE_TASK_6_BASE: task[ 6 ]->write( offset, value ); break;
};
}
uint32_t Hardware::read( uint32_t base, uint32_t offset ) {
switch ( base ) {
case DATA_CHANNEL_0_BASE: return dataChannel[ 0 ]->read( offset );
case DATA_CHANNEL_1_BASE: return dataChannel[ 1 ]->read( offset );
case DATA_CHANNEL_2_BASE: return dataChannel[ 2 ]->read( offset );
case DATA_CHANNEL_3_BASE: return dataChannel[ 3 ]->read( offset );
case DATA_CHANNEL_4_BASE: return dataChannel[ 4 ]->read( offset );
case DATA_CHANNEL_5_BASE: return dataChannel[ 5 ]->read( offset );
case DATA_CHANNEL_6_BASE: return dataChannel[ 6 ]->read( offset );
case HARDWARE_TASK_0_BASE: return task[ 0 ]->read( offset );
case HARDWARE_TASK_1_BASE: return task[ 1 ]->read( offset );
case HARDWARE_TASK_2_BASE: return task[ 2 ]->read( offset );
case HARDWARE_TASK_3_BASE: return task[ 3 ]->read( offset );
case HARDWARE_TASK_4_BASE: return task[ 4 ]->read( offset );
case HARDWARE_TASK_5_BASE: return task[ 5 ]->read( offset );
case HARDWARE_TASK_6_BASE: return task[ 6 ]->read( offset );
default: return -1;
};
}
Hardware::Hardware() {
task.push_back( new HardwareTaskSimulation( task_sine_run ) );
task.push_back( new HardwareTaskSimulation( task_sine_run ) );
task.push_back( new HardwareTaskSimulation( task_rand_run ) );
task.push_back( new HardwareTaskSimulation( task_add_run ) );
task.push_back( new HardwareTaskSimulation( task_add_run ) );
task.push_back( new HardwareTaskSimulation( task_fft_run ) );
task.push_back( new HardwareTaskSimulation( task_crc_run ) );
for ( uint32_t i = 0; i < 7; ++i ) {
dataChannel.push_back( new DataChannelSimulation() );
}
}