Skip to content
This repository has been archived by the owner on Sep 1, 2022. It is now read-only.

map based database #296

Merged
merged 46 commits into from
Jun 6, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
a36322b
starting point for class that will manage static data in the new data…
jadamcrain Jun 1, 2019
de41e55
start unit testing StaticDataMap
jadamcrain Jun 1, 2019
f7932ae
StaticDataMap can now properly iterate over selected values
jadamcrain Jun 3, 2019
f8cd163
formatting
jadamcrain Jun 3, 2019
19625e2
complete the first pass implementation and tests fro StaticDataMap
jadamcrain Jun 4, 2019
0b68be1
starting point for class that will manage static data in the new data…
jadamcrain Jun 1, 2019
b243bfe
start unit testing StaticDataMap
jadamcrain Jun 1, 2019
bdd178f
StaticDataMap can now properly iterate over selected values
jadamcrain Jun 3, 2019
925f1e7
formatting
jadamcrain Jun 3, 2019
4faee42
complete the first pass implementation and tests fro StaticDataMap
jadamcrain Jun 4, 2019
6b9af9d
initialize the StaticDataMap using configuration map
jadamcrain Jun 4, 2019
f907708
more partial progress on the map database impl
jadamcrain Jun 4, 2019
ed5c515
resolve conflicts
jadamcrain Jun 4, 2019
4bb2f4c
tweaks to compile on GCC/clang
jadamcrain Jun 4, 2019
11b3c66
Merge branch '3.0.0' into feature/map-based-database
jadamcrain Jun 4, 2019
fa37cee
StaticDataMaps implements IStaticSelector
jadamcrain Jun 4, 2019
0845eb1
implement the Class 0 exclusions
jadamcrain Jun 4, 2019
1ed4e26
remove unncessary class
jadamcrain Jun 4, 2019
1941507
implement IClassAssigner on StaticDataMaps
jadamcrain Jun 4, 2019
0db3278
unit tests now compiling
jadamcrain Jun 5, 2019
4ca310e
Remove old DatabaseConfig and view class that's no longer needed
jadamcrain Jun 5, 2019
d90d8e7
rename DatabaseConfigNew to just DatabaseConfig
jadamcrain Jun 5, 2019
4b29664
make Cell.h private
jadamcrain Jun 5, 2019
879ed84
Make MeasurementTypeSpecs.h private
jadamcrain Jun 5, 2019
d7e056b
rename Cell to StaticDataCell
jadamcrain Jun 5, 2019
29b86d8
merge conflicts from 3.0.0
jadamcrain Jun 5, 2019
f59b554
remove dead class and fix unit test compilation issues
jadamcrain Jun 5, 2019
c74a7de
Move DatabaseHelpers to the dnp3mocks library
jadamcrain Jun 5, 2019
5ce2ddb
fix integration test compilation
jadamcrain Jun 5, 2019
97463a2
change examples to use new database API
jadamcrain Jun 5, 2019
771df7a
rename StaticDataMaps to Database and delete the old Database
jadamcrain Jun 5, 2019
9adb7dd
integrated EventMode and IEventReceiver into StaticDataMap<T>
jadamcrain Jun 5, 2019
824dd76
change the function signature for the StaticWriter and begin to imple…
jadamcrain Jun 6, 2019
86e7fb3
fix bug in LoadWithBitfieldIterator
jadamcrain Jun 6, 2019
c2ef158
enable static writing for most types, just a handful of tests to fix now
jadamcrain Jun 6, 2019
076d202
extend code generator to provide info about static variation enums
jadamcrain Jun 6, 2019
4e63268
first pass at new octet string writing
jadamcrain Jun 6, 2019
576d0df
initialize octet string buffer to zero
jadamcrain Jun 6, 2019
361cc1b
fix selection bug
jadamcrain Jun 6, 2019
6378653
fixed the g1v1 to g1v2 promotion
jadamcrain Jun 6, 2019
4732346
fix broken test
jadamcrain Jun 6, 2019
dd08dea
fix broken test
jadamcrain Jun 6, 2019
22a2021
all unit tests passing
jadamcrain Jun 6, 2019
a25c025
fix for GCC/Clang
jadamcrain Jun 6, 2019
594cb00
fix fuzz build
jadamcrain Jun 6, 2019
b8f309d
add cmake option to build everything
jadamcrain Jun 6, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 8 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,14 @@ option(DNP3_TLS "Build TLS client/server support (requires OpenSSL)" OFF)
option(DNP3_TESTS "Build unit and integration tests" OFF)
option(DNP3_EXAMPLES "Build example applications" OFF)
option(DNP3_FUZZING "Build Google OSS-Fuzz targets" OFF)
option(DNP3_EVERYTHING "Build all optional targets" OFF)

if(DNP3_EVERYTHING)
set(DNP3_TLS ON)
set(DNP3_TESTS ON)
set(DNP3_EXAMPLES ON)
set(DNP3_FUZZING ON)
endif()

# External dependencies
include(./deps/asio.cmake)
Expand Down
21 changes: 10 additions & 11 deletions cpp/examples/outstation/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,15 @@
using namespace std;
using namespace opendnp3;

void ConfigureDatabase(DatabaseConfig& config)
DatabaseConfig ConfigureDatabase()
{
// example of configuring analog index 0 for Class2 with floating point variations by default
config.analog[0].clazz = PointClass::Class2;
config.analog[0].svariation = StaticAnalogVariation::Group30Var5;
config.analog[0].evariation = EventAnalogVariation::Group32Var7;
DatabaseConfig config(10); // 10 of each type

config.analog_input[0].clazz = PointClass::Class2;
config.analog_input[0].svariation = StaticAnalogVariation::Group30Var5;
config.analog_input[0].evariation = EventAnalogVariation::Group32Var7;

return config;
}

struct State
Expand Down Expand Up @@ -69,7 +72,7 @@ int main(int argc, char* argv[])

// The main object for a outstation. The defaults are useable,
// but understanding the options are important.
OutstationStackConfig config(DatabaseSizes::AllTypes(10));
OutstationStackConfig config(ConfigureDatabase());

// Specify the maximum size of the event buffers
config.outstation.eventBufferConfig = EventBufferConfig::AllTypes(10);
Expand All @@ -83,11 +86,7 @@ int main(int argc, char* argv[])
// in this example we've changed the default link layer addressing
config.link.LocalAddr = 10;
config.link.RemoteAddr = 1;

config.link.KeepAliveTimeout = TimeDuration::Max();

// You can optionally change the default reporting variations or class assignment prior to enabling the outstation
ConfigureDatabase(config.dbConfig);
config.link.KeepAliveTimeout = TimeDuration::Max();

// Create a new outstation with a log level, command handler, and
// config info this returns a thread-safe interface used for
Expand Down
20 changes: 10 additions & 10 deletions cpp/examples/tls/outstation/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,15 @@
using namespace std;
using namespace opendnp3;

void ConfigureDatabase(DatabaseConfig& config)
DatabaseConfig ConfigureDatabase()
{
// example of configuring analog index 0 for Class2 with floating point variations by default
config.analog[0].clazz = PointClass::Class2;
config.analog[0].svariation = StaticAnalogVariation::Group30Var5;
config.analog[0].evariation = EventAnalogVariation::Group32Var7;
DatabaseConfig config(10); // 10 of each type

config.analog_input[0].clazz = PointClass::Class2;
config.analog_input[0].svariation = StaticAnalogVariation::Group30Var5;
config.analog_input[0].evariation = EventAnalogVariation::Group32Var7;

return config;
}

struct State
Expand Down Expand Up @@ -88,7 +91,7 @@ int main(int argc, char* argv[])

// The main object for a outstation. The defaults are useable,
// but understanding the options are important.
OutstationStackConfig stackConfig(DatabaseSizes::AllTypes(10));
OutstationStackConfig stackConfig(ConfigureDatabase());

// specify the maximum size of the event buffers
stackConfig.outstation.eventBufferConfig = EventBufferConfig::AllTypes(10);
Expand All @@ -101,10 +104,7 @@ int main(int argc, char* argv[])
// You can override the default link layer settings here
// in this example we've changed the default link layer addressing
stackConfig.link.LocalAddr = 10;
stackConfig.link.RemoteAddr = 1;

// You can optionally change the default reporting variations or class assignment prior to enabling the outstation
ConfigureDatabase(stackConfig.dbConfig);
stackConfig.link.RemoteAddr = 1;

// Create a new outstation with a log level, command handler, and
// config info this returns a thread-safe interface used for
Expand Down
24 changes: 9 additions & 15 deletions cpp/lib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ set(opendnp3_public_headers
./include/opendnp3/app/ITransactable.h
./include/opendnp3/app/MeasurementInfo.h
./include/opendnp3/app/MeasurementTypes.h
./include/opendnp3/app/MeasurementTypeSpecs.h
./include/opendnp3/app/OctetData.h
./include/opendnp3/app/OctetString.h
./include/opendnp3/app/QualityMasks.h
Expand Down Expand Up @@ -154,7 +153,6 @@ set(opendnp3_public_headers
./include/opendnp3/master/TaskInfo.h

./include/opendnp3/outstation/ApplicationIIN.h
./include/opendnp3/outstation/Cell.h
./include/opendnp3/outstation/DatabaseConfig.h
./include/opendnp3/outstation/DatabaseSizes.h
./include/opendnp3/outstation/EventBufferConfig.h
Expand Down Expand Up @@ -198,6 +196,7 @@ set(opendnp3_private_headers
./src/app/IINValue.h
./src/app/IVariableLength.h
./src/app/MeasurementFactory.h
./src/app/MeasurementTypeSpecs.h
./src/app/Message.h
./src/app/PrefixedWriteIterator.h
./src/app/QualityFlags.h
Expand Down Expand Up @@ -357,24 +356,21 @@ set(opendnp3_private_headers
./src/master/UserPollTask.h

./src/outstation/AssignClassHandler.h
./src/outstation/StaticDataCell.h
./src/outstation/ClassBasedRequestHandler.h
./src/outstation/CommandActionAdapter.h
./src/outstation/CommandResponseHandler.h
./src/outstation/ConstantCommandAction.h
./src/outstation/ControlState.h
./src/outstation/Database.h
./src/outstation/DatabaseBuffers.h
./src/outstation/DatabaseConfigView.h
./src/outstation/DeferredRequest.h
./src/outstation/Event.h
./src/outstation/IClassAssigner.h
./src/outstation/ICommandAction.h
./src/outstation/IDatabase.h
./src/outstation/IEventReceiver.h
./src/outstation/IEventRecorder.h
./src/outstation/IEventSelector.h
./src/outstation/IINHelpers.h
./src/outstation/IndexSearch.h
./src/outstation/IINHelpers.h
./src/outstation/IResponseLoader.h
./src/outstation/IStaticSelector.h
./src/outstation/OctetStringSerializer.h
Expand All @@ -387,8 +383,7 @@ set(opendnp3_private_headers
./src/outstation/ReadHandler.h
./src/outstation/RequestHistory.h
./src/outstation/ResponseContext.h
./src/outstation/SelectedRanges.h
./src/outstation/StaticBuffers.h
./src/outstation/StaticDataMap.h
./src/outstation/StaticWriters.h
./src/outstation/TimeSyncState.h
./src/outstation/WriteHandler.h
Expand Down Expand Up @@ -448,7 +443,8 @@ set(opendnp3_src
./src/app/GroupVariationRecord.cpp
./src/app/HeaderWriter.cpp
./src/app/IINField.cpp
./src/app/MeasurementTypes.cpp
./src/app/MeasurementInfo.cpp
./src/app/MeasurementTypes.cpp
./src/app/OctetData.cpp
./src/app/QualityFlags.cpp
./src/app/SecurityStat.cpp
Expand Down Expand Up @@ -588,8 +584,7 @@ set(opendnp3_src
./src/outstation/CommandActionAdapter.cpp
./src/outstation/CommandResponseHandler.cpp
./src/outstation/Database.cpp
./src/outstation/DatabaseBuffers.cpp
./src/outstation/DatabaseConfigView.cpp
./src/outstation/DatabaseConfig.cpp
./src/outstation/DeferredRequest.cpp
./src/outstation/EventBufferConfig.cpp
./src/outstation/IINHelpers.cpp
Expand All @@ -600,10 +595,9 @@ set(opendnp3_src
./src/outstation/OutstationStates.cpp
./src/outstation/ReadHandler.cpp
./src/outstation/RequestHistory.cpp
./src/outstation/ResponseContext.cpp
./src/outstation/SelectedRanges.cpp
./src/outstation/ResponseContext.cpp
./src/outstation/SimpleCommandHandler.cpp
./src/outstation/StaticBuffers.cpp
./src/outstation/StaticDataMap.cpp
./src/outstation/StaticWriters.cpp
./src/outstation/UpdateBuilder.cpp
./src/outstation/WriteHandler.cpp
Expand Down
75 changes: 37 additions & 38 deletions cpp/lib/include/opendnp3/app/MeasurementInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,10 @@ struct BinaryInfo : private StaticOnly
typedef EventBinaryVariation event_variation_t;
typedef StaticBinaryVariation static_variation_t;

static const EventType EventTypeEnum = EventType::Binary;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::BinaryInput;
static const event_variation_t DefaultEventVariation = EventBinaryVariation::Group2Var1;
static const static_variation_t DefaultStaticVariation = StaticBinaryVariation::Group1Var2;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct DoubleBitBinaryInfo : private StaticOnly
Expand All @@ -70,24 +70,23 @@ struct DoubleBitBinaryInfo : private StaticOnly
typedef EventDoubleBinaryVariation event_variation_t;
typedef StaticDoubleBinaryVariation static_variation_t;

static const EventType EventTypeEnum = EventType::DoubleBitBinary;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::DoubleBinaryInput;
static const event_variation_t DefaultEventVariation = EventDoubleBinaryVariation::Group4Var1;
static const static_variation_t DefaultStaticVariation = StaticDoubleBinaryVariation::Group3Var2;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

class BinaryOutputStatusInfo : private StaticOnly
struct BinaryOutputStatusInfo : private StaticOnly
{
public:
typedef BinaryOutputStatus meas_t;
typedef bool value_t;
typedef EventBinaryOutputStatusVariation event_variation_t;
typedef StaticBinaryOutputStatusVariation static_variation_t;

static const EventType EventTypeEnum = EventType::BinaryOutputStatus;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::BinaryOutputStatus;
static const event_variation_t DefaultEventVariation = EventBinaryOutputStatusVariation::Group11Var1;
static const static_variation_t DefaultStaticVariation = StaticBinaryOutputStatusVariation::Group10Var2;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct AnalogInfo : private StaticOnly
Expand All @@ -97,10 +96,10 @@ struct AnalogInfo : private StaticOnly
typedef EventAnalogVariation event_variation_t;
typedef StaticAnalogVariation static_variation_t;

static const EventType EventTypeEnum = EventType::Analog;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::AnalogInput;
static const event_variation_t DefaultEventVariation = EventAnalogVariation::Group32Var1;
static const static_variation_t DefaultStaticVariation = StaticAnalogVariation::Group30Var1;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct CounterInfo : private StaticOnly
Expand All @@ -110,10 +109,10 @@ struct CounterInfo : private StaticOnly
typedef EventCounterVariation event_variation_t;
typedef StaticCounterVariation static_variation_t;

static const EventType EventTypeEnum = EventType::Counter;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::Counter;
static const event_variation_t DefaultEventVariation = EventCounterVariation::Group22Var1;
static const static_variation_t DefaultStaticVariation = StaticCounterVariation::Group20Var1;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct FrozenCounterInfo : private StaticOnly
Expand All @@ -123,10 +122,10 @@ struct FrozenCounterInfo : private StaticOnly
typedef EventFrozenCounterVariation event_variation_t;
typedef StaticFrozenCounterVariation static_variation_t;

static const EventType EventTypeEnum = EventType::FrozenCounter;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::FrozenCounter;
static const event_variation_t DefaultEventVariation = EventFrozenCounterVariation::Group23Var1;
static const static_variation_t DefaultStaticVariation = StaticFrozenCounterVariation::Group21Var1;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct AnalogOutputStatusInfo : private StaticOnly
Expand All @@ -136,10 +135,10 @@ struct AnalogOutputStatusInfo : private StaticOnly
typedef EventAnalogOutputStatusVariation event_variation_t;
typedef StaticAnalogOutputStatusVariation static_variation_t;

static const EventType EventTypeEnum = EventType::AnalogOutputStatus;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::AnalogOutputStatus;
static const event_variation_t DefaultEventVariation = EventAnalogOutputStatusVariation::Group42Var1;
static const static_variation_t DefaultStaticVariation = StaticAnalogOutputStatusVariation::Group40Var1;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct OctetStringInfo : private StaticOnly
Expand All @@ -148,19 +147,19 @@ struct OctetStringInfo : private StaticOnly
typedef EventOctetStringVariation event_variation_t;
typedef StaticOctetStringVariation static_variation_t;

static const EventType EventTypeEnum = EventType::OctetString;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::OctetString;
static const event_variation_t DefaultEventVariation = EventOctetStringVariation::Group111Var0;
static const static_variation_t DefaultStaticVariation = StaticOctetStringVariation::Group110Var0;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct TimeAndIntervalInfo : private StaticOnly
{
typedef TimeAndInterval meas_t;
typedef StaticTimeAndIntervalVariation static_variation_t;

const static StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::TimeAndInterval;
const static StaticTimeAndIntervalVariation DefaultStaticVariation = StaticTimeAndIntervalVariation::Group50Var4;
static const StaticTypeBitmask StaticTypeEnum;
static const StaticTimeAndIntervalVariation DefaultStaticVariation;
};

struct SecurityStatInfo : private StaticOnly
Expand All @@ -170,8 +169,8 @@ struct SecurityStatInfo : private StaticOnly
typedef EventSecurityStatVariation event_variation_t;
typedef StaticSecurityStatVariation static_variation_t;

const static event_variation_t DefaultEventVariation = EventSecurityStatVariation::Group122Var1;
const static static_variation_t DefaultStaticVariation = StaticSecurityStatVariation::Group121Var1;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

} // namespace opendnp3
Expand Down