ddl/mapping/engine/mapping_engine.h
2019-12-12 14:41:47 +01:00

163 lines
4.6 KiB
C++

/**
* @file
*
* @copyright
* @verbatim
Copyright @ 2017 Audi Electronics Venture GmbH. All rights reserved.
This Source Code Form is subject to the terms of the Mozilla
Public License, v. 2.0. If a copy of the MPL was not distributed
with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular file, then
You may include the notice in a location (such as a LICENSE file in a
relevant directory) where a recipient would be likely to look for such a notice.
You may add additional accurate notices of copyright ownership.
@endverbatim
*/
/*! Mapping Engine
*
* \section intro_sec Introduction
*
* This is the Mapping Engine documentation.
*/
#ifndef MAPPINGENGINE_HEADER
#define MAPPINGENGINE_HEADER
#include "mapping/configuration/map_configuration.h"
#include "mapping_environment_intf.h"
#include "element.h"
#include "source.h"
#include "target.h"
#include "trigger.h"
#include "periodic_trigger.h"
#include "data_trigger.h"
#include "signal_trigger.h"
namespace mapping
{
namespace rt
{
class MappingEngine
{
public:
/**
* CTOR
* @param[in] env - Mapping environment, used as interface
*/
MappingEngine(IMappingEnvironment& env);
/**
* DTOR
*/
~MappingEngine();
/**
* Setter for the current mapping configuration
* @param[in] config - The Configuration instance
*
* @retval a_util::result::SUCCESS Everything went fine
*/
a_util::result::Result setConfiguration(const oo::MapConfiguration& config);
/**
* Method to instanciate or expand the mapping structure for one particular target
* @param [in] target_name The target name
* @param [out] mapped_signal - Destination parameter for the signal handle
*
* @retval a_util::result::SUCCESS Everything went fine
* @retval ERR_INVALID_ARG Error target already mapped or not found in mapping configuration
* @retval ERR_FAILED Error during creation of the mapping
*/
a_util::result::Result Map(const std::string& target_name, handle_t& mapped_signal);
/**
* Method to reset target buffers
*
* @retval a_util::result::SUCCESS Everything went fine
* @retval ERR_FAILED Error during runtime
*/
a_util::result::Result reset();
/**
* Method to start mapping
*
* @retval a_util::result::SUCCESS Everything went fine
* @retval ERR_FAILED Error during runtime
*/
a_util::result::Result start();
/**
* Method to stop mapping
*
* @retval a_util::result::SUCCESS Everything went fine
*/
a_util::result::Result stop();
/**
* Method to remove a target from the existing mapping structure
* @param [in] mapped_signal - Target handle
*
* @retval a_util::result::SUCCESS Everything went fine
* @retval ERR_INVALID_ARG Error target not found in mapping structure
* @retval ERR_FAILED Error during removal
*/
a_util::result::Result unmap(handle_t mapped_signal);
/**
* Method to know if signal has triggers or not
*
* @param [in] mapped_signal The target handle
* @retval true Signal has triggers
* @retval false Signal has no triggers
*/
bool hasTriggers(handle_t mapped_signal) const;
/**
* Method to send current data
*
* @param [in] mapped_signal The target handle
* @param [in] target_buffer The pointer referencing the target buffer
* @param [in] target_buffer_size The size of the target buffer
* @retval a_util::result::SUCCESS Everything went fine
* @retval ERR_INVALID_ARG Invalid target handle or target buffer is NULL
* @retval ERR_MEMORY Target buffer not large enough
*/
a_util::result::Result getCurrentData(handle_t mapped_signal, void* target_buffer, size_t target_buffer_size) const;
/**
* Method to reinitialize the existing mapping structure
*
* @retval a_util::result::SUCCESS Everything went fine
* @retval ERR_FAILED Error during reinitialization
*/
a_util::result::Result unmapAll();
private:
/**
* Method to give an initial value to all targets
*
* @retval a_util::result::SUCCESS Everything went fine
* @retval ERR_FAILED Error during initialization
*/
a_util::result::Result initializeModel();
private:
IMappingEnvironment& _env;
bool _running;
oo::MapConfiguration _map_config;
TargetMap _targets;
SourceMap _sources;
TriggerMap _triggers;
};
} // namespace rt
} // namespace mapping
#endif //MAPPINGENGINE_HEADER