diff options
Diffstat (limited to 'src/ipa/raspberrypi/controller/pwl.cpp')
-rw-r--r-- | src/ipa/raspberrypi/controller/pwl.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/ipa/raspberrypi/controller/pwl.cpp b/src/ipa/raspberrypi/controller/pwl.cpp index fde0b298..c59f5fa1 100644 --- a/src/ipa/raspberrypi/controller/pwl.cpp +++ b/src/ipa/raspberrypi/controller/pwl.cpp @@ -12,16 +12,27 @@ using namespace RPiController; -int Pwl::read(boost::property_tree::ptree const ¶ms) +int Pwl::read(const libcamera::YamlObject ¶ms) { - for (auto it = params.begin(); it != params.end(); it++) { - double x = it->second.get_value<double>(); - assert(it == params.begin() || x > points_.back().x); - it++; - double y = it->second.get_value<double>(); - points_.push_back(Point(x, y)); + if (!params.size() || params.size() % 2) + return -EINVAL; + + const auto &list = params.asList(); + + for (auto it = list.begin(); it != list.end(); it++) { + auto x = it->get<double>(); + if (!x) + return -EINVAL; + if (it != list.begin() && *x <= points_.back().x) + return -EINVAL; + + auto y = (++it)->get<double>(); + if (!y) + return -EINVAL; + + points_.push_back(Point(*x, *y)); } - assert(points_.size() >= 2); + return 0; } |