diff options
Diffstat (limited to 'interface/compat/vsomeip/trace.hpp')
-rw-r--r-- | interface/compat/vsomeip/trace.hpp | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/interface/compat/vsomeip/trace.hpp b/interface/compat/vsomeip/trace.hpp new file mode 100644 index 0000000..ebdd418 --- /dev/null +++ b/interface/compat/vsomeip/trace.hpp @@ -0,0 +1,218 @@ +// Copyright (C) 2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +// 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 http://mozilla.org/MPL/2.0/. +#ifndef VSOMEIP_TRACE_HPP_ +#define VSOMEIP_TRACE_HPP_ + +#include <memory> +#include <vector> + +#include "../../compat/vsomeip/constants.hpp" +#include "../../compat/vsomeip/primitive_types.hpp" + +namespace vsomeip { +/** + * \defgroup vsomeip + * + * @{ + */ +namespace trace { + +/** + * \brief Unique identifier for trace filters. + */ +typedef uint32_t filter_id_t; + +/** + * \brief Error value. + */ +extern const filter_id_t FILTER_ID_ERROR; + +/** + * \brief The default channel id "TC". + */ +extern const char *VSOMEIP_TC_DEFAULT_CHANNEL_ID; + +/** + * \brief Filters contain at least one match that specified + * which messages are filtered. + */ +typedef std::tuple<service_t, instance_t, method_t> match_t; + +/** + * \brief Representation of a DLT trace channel. + * + * A trace channel contains one or more filters that specify the + * messages that are forwarded to the trace. + */ +class channel { +public: + virtual ~channel() {}; + + /** + * \brief Get the identifier of the channel. + * + * \return Channel identifier. + */ + virtual std::string get_id() const = 0; + + /** + * \brief Get the name of the channel. + * + * \return Channel name. + */ + virtual std::string get_name() const = 0; + + /** + * \brief Add a filter to the channel. + * + * Add a simple filter containing a single match. + * + * Note: The match is allowed to contain wildcards + * (ANY_INSTANCE, ANY_SERVICE, ANY_METHOD). + * + * \param _match The tuple specifying the matching messages. + * \param _is_positive True for positive filters, + * false for negative filters. Default value is true. + * + * \return Filter identifier of the added filter or + * FILTER_ID_ERROR if adding failed. + */ + virtual filter_id_t add_filter( + const match_t &_match, + bool _is_positive = true) = 0; + + /** + * \brief Add a filter to the channel. + * + * Add a filter containing a list of matches to the + * channel. The filter matches if at least on of the + * matches corresponds to a message. + * + * Note: The matches are allowed to contain wildcards + * (ANY_INSTANCE, ANY_SERVICE, ANY_METHOD). + * + * \param _matches List of tuples specifying the matching messages. + * \param _is_positive True for positive filters, + * false for negative filters. Default value is true. + * + * \return Filter identifier of the added filter or + * FILTER_ID_ERROR if adding failed. + */ + virtual filter_id_t add_filter( + const std::vector<match_t> &_matches, + bool _is_positive = true) = 0; + + /** + * \brief Add a filter to the channel. + * + * Add a filter containing a matches range to the + * channel. The filter matches if the message identifiers + * lie within the range specified by from and to. Thus, + * the messages service identifier is greater equal than + * the service identifier specified in from and less equal + * than the service identifier specified in to. + * + * Note: from and to must not contain wildcards + * (ANY_INSTANCE, ANY_SERVICE, ANY_METHOD). + * + * \param _from Tuples specifying the matching message with + * the smallest identifiers. + * \param _from Tuples specifying the matching message with + * the greatest identifiers. + * \param _is_positive True for positive filters, + * false for negative filters. Default value is true. + * + * \return Filter identifier of the added filter or + * FILTER_ID_ERROR if adding failed. + */ + virtual filter_id_t add_filter( + const match_t &_from, const match_t &_to, + bool _is_positive = true) = 0; + + /** + * \brief Remove a filter from the channel. + * + * Remove the filter with the given filter identifier + * from the channel. + * + * \param _id Filter identifier of the filter that shall + * be removed. + */ + virtual void remove_filter( + filter_id_t _id) = 0; +}; + +/** + * \brief Singleton class to connect to the DLT tracing. + * + * The main configuration class of the DLT tracing. It holds + * the trace channels which determine the messages that are + * forwarded to the trace. + */ +class connector { +public: + /** + * \brief Get access to the connector. + * + * \return Shared pointer to the singleton object. + */ + static std::shared_ptr<connector> get(); + + virtual ~connector() {}; + + /** + * \brief Add a trace channel to the connector. + * + * Creates a trace channel with the given identifier and name + * and adds it to the connector. + * + * \param _id Id of the trace channel. + * \param _name Name of the trace channel + * + * \return Shared pointer to the created trace channel or + * nullptr if the trace channel could not be created because + * another trace channel with the given identifier does + * already exist. + */ + virtual std::shared_ptr<channel> add_channel( + const std::string &_id, + const std::string &_name) = 0; + + /** + * \brief Remove a trace channel from the connector. + * + * Removes the trace channel with the given identifier from + * the connector. + * + * \param _id Identifier of a trace channel. + * + * \return True of the trace channel was removed, False if + * it could not be removed, because it is the default trace + * channel. + */ + virtual bool remove_channel( + const std::string &_id) = 0; + + /** + * \brief Get a trace channel from the connector. + * + * \param _id Identifier of the trace channel to be returned. + * Optional argument that is predefined with the identifier + * of the default trace channel. + * + * \return Shared pointer to the created trace channel or + * nullptr if the trace channel does not exist. + */ + virtual std::shared_ptr<channel> get_channel( + const std::string &_id = VSOMEIP_TC_DEFAULT_CHANNEL_ID) const = 0; +}; + +} // namespace trace + +/** @} */ + +} // namespace vsomeip + +#endif // VSOMEIP_CONSTANTS_HPP |