Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F1497297
configuration.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Size
2 KB
Referenced Files
None
Subscribers
None
configuration.h
View Options
#ifndef CONFIGURATION_H
#define CONFIGURATION_H
// clang-tidy off
// clang-format off
#include
"nlohmann/json.hpp"
// clang-format on
// clang-tidy on
#include
"rosa/config/version.h"
#include
"rosa/app/Application.hpp"
#include
<fstream>
using
namespace
rosa
;
using
nlohmann
::
json
;
enum
DataInterfaceTypes
{
CSV
,
MQTT
};
struct
SignalConfiguration
{
std
::
string
Name
;
std
::
string
InputPath
;
std
::
string
MQTTTopic
;
DataInterfaceTypes
DataInterfaceType
;
bool
Output
;
float
InnerBound
;
float
OuterBound
;
float
InnerBoundDrift
;
float
OuterBoundDrift
;
// SAVE CHANGES
uint32_t
DriftLookbackRange
;
// - SAVE CHANGES
uint32_t
SampleHistorySize
;
uint32_t
DABSize
;
uint32_t
DABHistorySize
;
std
::
string
DistanceMetric
;
};
struct
AppConfiguration
{
std
::
string
OutputFilePath
;
uint32_t
BrokenCounter
;
uint32_t
NumberOfSimulationCycles
;
uint32_t
DownsamplingRate
;
std
::
vector
<
SignalConfiguration
>
SignalConfigurations
;
};
void
from_json
(
const
json
&
J
,
SignalConfiguration
&
SC
)
{
J
.
at
(
"Name"
).
get_to
(
SC
.
Name
);
if
(
J
.
contains
(
"InputPath"
))
{
J
.
at
(
"InputPath"
).
get_to
(
SC
.
InputPath
);
SC
.
DataInterfaceType
=
DataInterfaceTypes
::
CSV
;
}
else
if
(
J
.
contains
(
"MQTTTopic"
))
{
J
.
at
(
"MQTTTopic"
).
get_to
(
SC
.
MQTTTopic
);
SC
.
DataInterfaceType
=
DataInterfaceTypes
::
MQTT
;
}
J
.
at
(
"Output"
).
get_to
(
SC
.
Output
);
J
.
at
(
"InnerBound"
).
get_to
(
SC
.
InnerBound
);
J
.
at
(
"OuterBound"
).
get_to
(
SC
.
OuterBound
);
J
.
at
(
"InnerBoundDrift"
).
get_to
(
SC
.
InnerBoundDrift
);
J
.
at
(
"OuterBoundDrift"
).
get_to
(
SC
.
OuterBoundDrift
);
if
(
J
.
contains
(
"DriftLookbackRange"
))
{
J
.
at
(
"DriftLookbackRange"
).
get_to
(
SC
.
DriftLookbackRange
);
}
else
{
// TODO: is 1 the best?
SC
.
DriftLookbackRange
=
1
;
}
J
.
at
(
"SampleHistorySize"
).
get_to
(
SC
.
SampleHistorySize
);
J
.
at
(
"DABSize"
).
get_to
(
SC
.
DABSize
);
J
.
at
(
"DABHistorySize"
).
get_to
(
SC
.
DABHistorySize
);
SC
.
DistanceMetric
=
J
.
value
(
"DistanceMetric"
,
"relative"
);
}
void
from_json
(
const
json
&
J
,
AppConfiguration
&
AC
)
{
J
.
at
(
"OutputFilePath"
).
get_to
(
AC
.
OutputFilePath
);
J
.
at
(
"BrokenCounter"
).
get_to
(
AC
.
BrokenCounter
);
J
.
at
(
"NumberOfSimulationCycles"
).
get_to
(
AC
.
NumberOfSimulationCycles
);
J
.
at
(
"DownsamplingRate"
).
get_to
(
AC
.
DownsamplingRate
);
J
.
at
(
"SignalConfigurations"
).
get_to
(
AC
.
SignalConfigurations
);
}
AppConfiguration
AppConfig
;
bool
readConfigFile
(
std
::
string
ConfigPath
)
{
LOG_INFO
(
"READING CONFIG FILE"
);
LOG_INFO_STREAM
<<
"Looking for config file at
\"
"
<<
ConfigPath
<<
"
\"\n
"
;
std
::
ifstream
ConfigFile
;
ConfigFile
.
open
(
ConfigPath
);
if
(
!
ConfigFile
)
{
LOG_ERROR
(
"Unable to open config file"
);
return
false
;
}
json
ConfigObj
;
ConfigFile
>>
ConfigObj
;
LOG_INFO_STREAM
<<
"Read JSON file as
\"
"
<<
ConfigObj
<<
"
\"\n
"
;
try
{
ConfigObj
.
get_to
(
AppConfig
);
}
catch
(
nlohmann
::
detail
::
type_error
ex
)
{
LOG_ERROR
(
"Misformatted Config File"
);
return
false
;
}
return
true
;
}
#endif
// CONFIGURATION_H
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Sun, Mar 1, 9:31 PM (1 d, 1 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
288221
Default Alt Text
configuration.h (2 KB)
Attached To
Mode
R20 SoC_Rosa_repo
Attached
Detach File
Event Timeline
Log In to Comment