168 lines
5.8 KiB
C
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
|