diff options
author | 2021-01-06 18:30:03 -0500 | |
---|---|---|
committer | 2021-01-12 23:07:23 +0000 | |
commit | cd2e830c37cfbeb353355c8ae5ed3b5c7973ed37 (patch) | |
tree | 7dc0e57e2c10ca280a2337272b6d0797cffd17c4 /low-can-binding/utils | |
parent | 47b05eec0da25e783d629cd8d56900490b75aad3 (diff) |
Restore /etc/dev-mapping.conf supporticefish
Add back the ini-config and config-parser code that existed
previously, and use it in binding init to over-ride the device
mapping from the controller JSON if /etc/dev-mapping.conf exists.
This restores the documented behavior, and is needed for the
existing AGL demo platform support and soon CI.
Additionally:
- Add code to validate the active_message_set, diagnostic_bus, and
bus device mapping configuration values.
- The above required moving plugin loading before the configuration
callback in the controller configuration, but this change seems
rational in that everything required by the generated plugin code
is already initialized before then, and it makes validating the
configuration possible without adding an extra callback.
- Add logging of the used CAN bus to device mappings at info level
to ease debugging any future issues.
- Tweak the log level of the missing configuration file message to
info from error, since it is a legitimate mode of operation if
relying on the default bus values in the controller JSON.
Bug-AGL: SPEC-3755
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: I440f5e0fc85be41f7c4c1f47d824a403525a18f9
(cherry picked from commit 9e23caa4c56259044604c38f107f7c637001b846)
Diffstat (limited to 'low-can-binding/utils')
-rw-r--r-- | low-can-binding/utils/config-parser.cpp | 68 | ||||
-rw-r--r-- | low-can-binding/utils/config-parser.hpp | 44 |
2 files changed, 112 insertions, 0 deletions
diff --git a/low-can-binding/utils/config-parser.cpp b/low-can-binding/utils/config-parser.cpp new file mode 100644 index 00000000..589f0340 --- /dev/null +++ b/low-can-binding/utils/config-parser.cpp @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2015, 2016 ,2017 "IoT.bzh" + * Copyright (C) 2021 Konsulko Group + * Author "Romain Forlot" <romain.forlot@iot.bzh> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "config-parser.hpp" + +#include "../binding/low-can-hat.hpp" + +namespace utils +{ + /// @brief constructor using path to file + config_parser_t::config_parser_t(std::string conf_file) + : filepath_{conf_file}, config_content_{} + { + config_content_.read_file(conf_file); + } + + const std::string& config_parser_t::filepath() const + { + return filepath_; + } + + /// @brief read the conf_file_ and parse it into an INIReader object + /// to search into later. + bool config_parser_t::check_conf() + { + if (config_content_.size() <= 0) + { + AFB_INFO("Cannot load INI config file: %s.", filepath_.c_str()); + return false; + } + AFB_DEBUG("Configuration file parsed"); + return true; + } + + /// @brief Public method to access devices_name_ vector. If vector size equal 0 + /// then it will parses the configuration file content to fill it. It could be empty even + /// after parsing if content file just don't have a correct "canbus" directive so you + /// have to test the returned value. + /// + /// @return A const vector with string of linux CAN devices. + const std::vector<std::pair<std::string, std::string> > config_parser_t::get_devices_name() + { + std::vector<std::pair<std::string, std::string> > devices_name; + + std::map<std::string, std::string> bus_mapping = config_content_.get_keys("CANbus-mapping"); + for(const auto& busIt : bus_mapping ) + { + devices_name.push_back(std::make_pair(busIt.first, busIt.second)); + } + + return devices_name; + } +} diff --git a/low-can-binding/utils/config-parser.hpp b/low-can-binding/utils/config-parser.hpp new file mode 100644 index 00000000..3115e9bd --- /dev/null +++ b/low-can-binding/utils/config-parser.hpp @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2015, 2016 ,2017 "IoT.bzh" + * Author "Romain Forlot" <romain.forlot@iot.bzh> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include <string> +#include <vector> +#include <utility> +#include "ini-config.hpp" + +namespace utils +{ + /// @brief A configuration file parser that handle INI configuration + /// file format. + class config_parser_t + { + private: + const std::string filepath_; /*!< filepath_ - Path to the config file*/ + ini_config config_content_; /*!< config_content_ - Parsed content of INI file.*/ + + public: + config_parser_t(config_parser_t&&) = default; + config_parser_t(const config_parser_t&) = default; + explicit config_parser_t(std::string conf_file); + + const std::string& filepath() const; + bool check_conf(); + const std::vector<std::pair<std::string, std::string> > get_devices_name(); + }; +} |