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

168 lines
5.8 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
*/
#ifndef MAPPINGENVIRONMENT_HEADER
#define MAPPINGENVIRONMENT_HEADER
#include "a_util/result.h"
namespace mapping
{
namespace rt
{
/// Signal listener interface class
class ISignalListener
{
public:
/// DTOR
virtual ~ISignalListener();
/**
* \c onSampleReceived is to be called by the mapping environment
* upon receiving a sample on a registered source signal.
*
* @param [in] data The data contained in the sample
* @param [in] size The size of the data
* @returns Standard result
*/
virtual a_util::result::Result onSampleReceived(const void* data, size_t size) = 0;
};
/// Timer interface class
class IPeriodicListener
{
public:
/// DTOR
virtual ~IPeriodicListener();
/**
* \c onTimer is to be called by the mapping environment periodically.
*
* @param [in] now The current time
* @returns Nothing
*/
virtual void onTimer(timestamp_t now) = 0;
};
/// Mapping environment interface class
/// This in combination with ISignalListener forms the functionality that
/// the environment using the mapping package must provide.
class IMappingEnvironment
{
public:
/// DTOR
virtual ~IMappingEnvironment();
/**
* Method to register a source signal. \c registerSource is called for all
* source signals inside a mapped target signal.
*
* @param [in] source_name The name of the source signal
* @param [in] type_name The type of the source signal
* @param [in] listener The signal listener instance
* @param [in] handle The output parameter for the source handle
* @retval a_util::result::SUCCESS Everything went fine
*/
virtual a_util::result::Result registerSource(const char* source_name,
const char* type_name, ISignalListener* listener, handle_t& handle) = 0;
/**
* Method to unregister a source signal. Used to unregister any source
* signals upon unmapping of a target signal.
*
* @param [in] handle The handle of the source signal
* @retval a_util::result::SUCCESS Everything went fine
*/
virtual a_util::result::Result unregisterSource(handle_t handle) = 0;
/**
* Method to send a target signal. It is called upon
*
* @param [in] target The target handle
* @param [in] data The pointer referencing the target buffer
* @param [in] size The size of the target buffer
* @param [in] time_stamp The timestamp of the target
* @retval a_util::result::SUCCESS Everything went fine
*/
virtual a_util::result::Result sendTarget(handle_t target, const void* data,
size_t size, timestamp_t time_stamp) = 0;
/**
* \c targetMapped is invoked by the mapping engine upon the creation of a mapping.
* The callback is supposed to give the mapping environment a chance to preallocate
* any sample buffers to be used during runtime.
*
* @param [in] target_name The target name
* @param [in] target_type The target type
* @param [in] target The handle under which the target is refered to in \c sendTarget
* @param [in] target_size The target type size (size of a sample in bytes)
* @retval a_util::result::SUCCESS Everything went fine
*/
virtual a_util::result::Result targetMapped(const char* target_name, const char* target_type,
handle_t target, size_t target_size) = 0;
/**
* \c targetUnmapped is invoked by the mapping engine upon the destruction of a mapping.
* The callback is supposed to give the mapping environment a chance to cleanup
* any sample buffers associated with that target.
*
* @param [in] target_name The target name
* @param [in] target The target handle
* @retval a_util::result::SUCCESS Everything went fine
*/
virtual a_util::result::Result targetUnmapped(const char* target_name, handle_t target) = 0;
/**
* Method to get the ddl description for a type
* @param [in] type_name The name of the type to be resolved
* @param [out] type_description Output paramter for the description for the type
* @retval a_util::result::SUCCESS Everything went fine
*/
virtual a_util::result::Result resolveType(const char* type_name, const char*& type_description) = 0;
/**
* \c getTime is used by the mapping engine to get the current time. Since only the
* application of mapping can now what time domain should be used, this method has to be
* implementied by the environment.
* @returns The current timestamp in microseconds
*/
virtual timestamp_t getTime() const = 0;
/**
* \c registerPeriodicTimer is used by the mapping engine to register periodic timers
* @param [in] period_us The period
* @param [in] listener The listener to be called periodically
* @returns Standard result
*/
virtual a_util::result::Result registerPeriodicTimer(timestamp_t period_us, IPeriodicListener* listener) = 0;
/**
* \c registerPeriodicTimer is used by the mapping engine to unregister periodic timers
* @param [in] period_us The period
* @param [in] listener The listener
* @returns Standard result
*/
virtual a_util::result::Result unregisterPeriodicTimer(timestamp_t period_us, IPeriodicListener* listener) = 0;
};
} // namespace rt
} // namespace mapping
#endif //MAPPINGENVIRONMENT_HEADER