diff --git a/lib/fl2.cc b/lib/fl2.cc index 98d2ab21..b4c1ff8c 100644 --- a/lib/fl2.cc +++ b/lib/fl2.cc @@ -25,7 +25,15 @@ static void upgradeFluxFile(FluxFileProto& proto) proto.set_version(FluxFileVersion::VERSION_2); } - if (proto.version() > FluxFileVersion::VERSION_2) + + if (proto.version() == FluxFileVersion::VERSION_2) + { + proto.mutable_drive()->set_rotational_period_ms( + proto.rotational_period_ms()); + proto.set_version(FluxFileVersion::VERSION_3); + } + + if (proto.version() > FluxFileVersion::VERSION_3) error( "this is a version {} flux file, but this build of the client can " "only handle up to version {} --- please upgrade", @@ -57,7 +65,7 @@ FluxFileProto loadFl2File(const std::string filename) void saveFl2File(const std::string filename, FluxFileProto& proto) { proto.set_magic(FluxMagic::MAGIC); - proto.set_version(FluxFileVersion::VERSION_2); + proto.set_version(FluxFileVersion::VERSION_3); std::ofstream of(filename, std::ios::out | std::ios::binary); if (!proto.SerializeToOstream(&of)) diff --git a/lib/fl2.proto b/lib/fl2.proto index 104b0f54..190246ab 100644 --- a/lib/fl2.proto +++ b/lib/fl2.proto @@ -1,5 +1,7 @@ syntax = "proto2"; +import "lib/drive.proto"; + enum FluxMagic { MAGIC = 0x466c7578; } @@ -7,6 +9,7 @@ enum FluxMagic { enum FluxFileVersion { VERSION_1 = 1; VERSION_2 = 2; + VERSION_3 = 3; } message TrackFluxProto { @@ -19,6 +22,7 @@ message FluxFileProto { optional int32 magic = 1; optional FluxFileVersion version = 2; repeated TrackFluxProto track = 3; - optional double rotational_period_ms = 4; + optional double rotational_period_ms = 4 [ deprecated=true ]; + optional DriveProto drive = 5; } diff --git a/lib/fluxsink/fl2fluxsink.cc b/lib/fluxsink/fl2fluxsink.cc index a01948d7..2abff8e4 100644 --- a/lib/fluxsink/fl2fluxsink.cc +++ b/lib/fluxsink/fl2fluxsink.cc @@ -43,6 +43,7 @@ public: track->add_flux(fluxBytes); } + proto.mutable_drive()->MergeFrom(config.drive()); saveFl2File(_filename, proto); } diff --git a/lib/fluxsource/fl2fluxsource.cc b/lib/fluxsource/fl2fluxsource.cc index f6f48267..73d8fa90 100644 --- a/lib/fluxsource/fl2fluxsource.cc +++ b/lib/fluxsource/fl2fluxsource.cc @@ -36,6 +36,10 @@ public: Fl2FluxSource(const Fl2FluxSourceProto& config): _config(config) { _proto = loadFl2File(_config.filename()); + + if (::config.has_drive()) + warning("FLUX: overriding drive configuration with flux file contents"); + ::config.mutable_drive()->MergeFrom(_proto.drive()); } public: diff --git a/lib/globals.cc b/lib/globals.cc index b49fbc2e..0b3a6e5e 100644 --- a/lib/globals.cc +++ b/lib/globals.cc @@ -1,4 +1,5 @@ -#include "globals.h" +#include "lib/globals.h" +#include "lib/logger.h" #include #include @@ -8,4 +9,11 @@ double getCurrentTime(void) gettimeofday(&tv, NULL); return double(tv.tv_sec) + tv.tv_usec / 1000000.0; -} \ No newline at end of file +} + +void warning(const std::string msg) +{ + log(msg); + fmt::print("Warning: {}\n", msg); +} + diff --git a/lib/globals.h b/lib/globals.h index 19305b96..c3ad39d4 100644 --- a/lib/globals.h +++ b/lib/globals.h @@ -49,6 +49,14 @@ inline void error(fmt::string_view fstr, const Args&... args) throw ErrorException { fmt::format(fstr, args...) }; } +extern void warning(const std::string msg); + +template +inline void warning(fmt::string_view fstr, const Args&... args) +{ + warning(fmt::format(fstr, args...)); +} + template struct overloaded : Ts... { using Ts::operator()...; }; template overloaded(Ts...) -> overloaded;