Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F376143
Testbench.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Size
4 KB
Referenced Files
None
Subscribers
None
Testbench.cpp
View Options
#include
"Testbench.h"
#include
"printError.h"
#include
<stdio.h>
#define MAXNUMOF_REGISTEREDCAGENTS 1000
#define MAXNUMOF_REGISTEREDCHANNELS 1000
#define MAXNUMOF_REGISTEREDSENSORS 1000
using
namespace
std
;
void
Testbench
::
init_testbench
()
{
maxNumOf_registeredAgents
=
MAXNUMOF_REGISTEREDCAGENTS
;
maxNumOf_registeredChannels
=
MAXNUMOF_REGISTEREDCHANNELS
;
maxNumOf_registeredSensors
=
MAXNUMOF_REGISTEREDSENSORS
;
}
Testbench
::
Testbench
()
{
set_name
(
NO_NAME
);
}
Testbench
::
Testbench
(
const
char
*
name
)
{
set_name
(
name
);
}
bool
Testbench
::
register_agent
(
Agent
*
agent
)
{
AgentSlotOfTestbench
*
agentSlot
=
new
AgentSlotOfTestbench
();
if
(
agentSlot
!=
NULL
)
{
if
(
agentSlot
->
set_agent
(
agent
))
{
try
{
if
(
vector_registeredAgents
.
size
()
<
maxNumOf_registeredAgents
)
{
vector_registeredAgents
.
push_back
(
agentSlot
);
}
else
{
printError
(
"Max number of registered agents is already reached!"
);
return
false
;
}
}
catch
(
bad_alloc
&
error
)
{
printError
(
"bad_alloc caught: "
,
error
.
what
());
return
false
;
}
return
true
;
}
else
{
printError
(
"Agent is not set!"
);
vector_registeredAgents
.
pop_back
();
// TODO: check if it is right?!?!
return
false
;
}
}
else
{
printError
(
"Couldn't create AgentSlot!"
);
return
false
;
}
}
bool
Testbench
::
register_sensor
(
Sensor
*
sensor
)
{
SensorSlotOfTestbench
*
sensorSlot
=
new
SensorSlotOfTestbench
();
if
(
sensorSlot
!=
NULL
)
{
if
(
sensorSlot
->
set_sensor
(
sensor
))
{
try
{
if
(
vector_registeredSensors
.
size
()
<
maxNumOf_registeredSensors
)
{
vector_registeredSensors
.
push_back
(
sensorSlot
);
}
else
{
printError
(
"Max number of registered sensors is already reached!"
);
return
false
;
}
}
catch
(
bad_alloc
&
error
)
{
printError
(
"bad_alloc caught: "
,
error
.
what
());
return
false
;
}
return
true
;
}
else
{
printError
(
"Input port is no set!"
);
vector_registeredSensors
.
pop_back
();
// TODO: check if it is right?!?!
return
false
;
}
}
else
{
printError
(
"Couldn't create SensorSlot!"
);
return
false
;
}
}
SensorSlotOfTestbench
*
Testbench
::
get_sensorSlotAddressOfTestbench
(
Sensor
*
sensor
)
{
for
(
auto
&
sensorSlot
:
vector_registeredSensors
)
{
if
(
sensorSlot
->
get_sensor
()
==
sensor
)
{
return
sensorSlot
;
}
}
return
NULL
;
}
bool
Testbench
::
register_channel
(
Channel
*
channel
)
{
ChannelSlotOfTestbench
*
channelSlot
=
new
ChannelSlotOfTestbench
();
if
(
channelSlot
!=
NULL
)
{
if
(
channelSlot
->
set_channel
(
channel
))
{
try
{
if
(
vector_registeredChannels
.
size
()
<
maxNumOf_registeredChannels
)
{
vector_registeredChannels
.
push_back
(
channelSlot
);
}
else
{
printError
(
"Max number of registered channels is already reached!"
);
return
false
;
}
}
catch
(
bad_alloc
&
error
)
{
printError
(
"bad_alloc caught: "
,
error
.
what
());
return
false
;
}
return
true
;
}
else
{
printError
(
"Channel is not set!"
);
vector_registeredChannels
.
pop_back
();
// TODO: check if it is right?!?!
return
false
;
}
}
else
{
printError
(
"Couldn't create ChannelSlot!"
);
return
false
;
}
}
void
Testbench
::
simulate
(
unsigned
int
rounds
)
{
for
(
unsigned
int
sec
=
1
;
sec
<=
rounds
;
sec
++
)
{
printf
(
"cycle %u
\n
"
,
sec
);
// update sensor values
for
(
auto
&
sensorSlot
:
vector_registeredSensors
)
{
Sensor
*
sensor
=
sensorSlot
->
get_sensor
();
if
(
sensor
!=
NULL
)
{
CSVreaderModule
*
csvReader
=
sensorSlot
->
get_csvReaderModule
();
if
(
csvReader
!=
NULL
)
{
float
inputValue
;
if
(
csvReader
->
get_next_value
(
&
inputValue
))
{
sensor
->
set_sensorValue
(
inputValue
);
}
}
}
}
// trigger sensors
for
(
auto
&
sensorSlot
:
vector_registeredSensors
)
{
Sensor
*
sensor
=
sensorSlot
->
get_sensor
();
if
(
sensor
!=
NULL
)
{
sensor
->
trigger
();
}
}
// trigger channels
for
(
auto
&
channelSlot
:
vector_registeredChannels
)
{
Channel
*
channel
=
channelSlot
->
get_channel
();
if
(
channel
!=
NULL
)
{
channel
->
trigger
();
}
}
// trigger agents
for
(
auto
&
agentSlot
:
vector_registeredAgents
)
{
Agent
*
agent
=
agentSlot
->
get_agent
();
if
(
agent
!=
NULL
)
{
agent
->
trigger
();
}
}
getchar
();
}
}
File Metadata
Details
Attached
Mime Type
text/x-c++
Expires
Sun, Jun 8, 7:38 PM (1 d, 6 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
150391
Default Alt Text
Testbench.cpp (4 KB)
Attached To
Mode
R20 SoC_Rosa_repo
Attached
Detach File
Event Timeline
Log In to Comment