summaryrefslogtreecommitdiff
path: root/implementation/protocol/include/protocol.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/protocol/include/protocol.hpp')
-rw-r--r--implementation/protocol/include/protocol.hpp142
1 files changed, 142 insertions, 0 deletions
diff --git a/implementation/protocol/include/protocol.hpp b/implementation/protocol/include/protocol.hpp
new file mode 100644
index 0000000..08a770b
--- /dev/null
+++ b/implementation/protocol/include/protocol.hpp
@@ -0,0 +1,142 @@
+// Copyright (C) 2021 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_V3_PROTOCOL_PROTOCOL_HPP_
+#define VSOMEIP_V3_PROTOCOL_PROTOCOL_HPP_
+
+#include <vsomeip/constants.hpp>
+#include <vsomeip/primitive_types.hpp>
+
+namespace vsomeip_v3 {
+namespace protocol {
+
+using version_t = std::uint16_t;
+using command_size_t = std::uint32_t;
+
+enum class id_e : uint8_t {
+ ASSIGN_CLIENT_ID = 0x00,
+ ASSIGN_CLIENT_ACK_ID = 0x01,
+ REGISTER_APPLICATION_ID = 0x02,
+ DEREGISTER_APPLICATION_ID = 0x03,
+ // APPLICATION_LOST_ID = 0x04,
+ ROUTING_INFO_ID = 0x05,
+ REGISTERED_ACK_ID = 0x06,
+ PING_ID = 0x07,
+ PONG_ID = 0x08,
+ OFFER_SERVICE_ID = 0x10,
+ STOP_OFFER_SERVICE_ID = 0x11,
+ SUBSCRIBE_ID = 0x12,
+ UNSUBSCRIBE_ID = 0x13,
+ REQUEST_SERVICE_ID = 0x14,
+ RELEASE_SERVICE_ID = 0x15,
+ SUBSCRIBE_NACK_ID = 0x16,
+ SUBSCRIBE_ACK_ID = 0x17,
+ SEND_ID = 0x18,
+ NOTIFY_ID = 0x19,
+ NOTIFY_ONE_ID = 0x1A,
+ REGISTER_EVENT_ID = 0x1B,
+ UNREGISTER_EVENT_ID = 0x1C,
+ ID_RESPONSE_ID = 0x1D,
+ ID_REQUEST_ID = 0x1E,
+ OFFERED_SERVICES_REQUEST_ID = 0x1F,
+ OFFERED_SERVICES_RESPONSE_ID = 0x20,
+ UNSUBSCRIBE_ACK_ID = 0x21,
+ RESEND_PROVIDED_EVENTS_ID = 0x22,
+ UPDATE_SECURITY_POLICY_ID = 0x23,
+ UPDATE_SECURITY_POLICY_RESPONSE_ID = 0x24,
+ REMOVE_SECURITY_POLICY_ID = 0x25,
+ REMOVE_SECURITY_POLICY_RESPONSE_ID = 0x26,
+ UPDATE_SECURITY_CREDENTIALS_ID = 0x27,
+ DISTRIBUTE_SECURITY_POLICIES_ID = 0x28,
+ UPDATE_SECURITY_POLICY_INT_ID = 0x29,
+ EXPIRE_ID = 0x2A,
+ SUSPEND_ID = 0x30,
+ UNKNOWN_ID = 0xFF
+};
+
+enum class error_e : uint8_t {
+ ERROR_OK = 0x00,
+ ERROR_NOT_ENOUGH_BYTES = 0x01,
+ ERROR_MAX_COMMAND_SIZE_EXCEEDED = 0x02,
+ ERROR_MISMATCH = 0x04,
+ ERROR_MALFORMED = 0x08,
+ ERROR_NOT_ALLOWED = 0x10,
+ ERROR_UNKNOWN = 0xff
+};
+
+enum class routing_info_entry_type_e : std::uint8_t {
+ RIE_ADD_CLIENT = 0x00,
+ RIE_DELETE_CLIENT = 0x01,
+ RIE_ADD_SERVICE_INSTANCE = 0x02,
+ RIE_DELETE_SERVICE_INSTANCE = 0x04,
+ RIE_UNKNOWN = 0xff
+};
+
+using pending_id_t = std::uint16_t;
+
+struct service {
+ service_t service_;
+ instance_t instance_;
+ major_version_t major_;
+ minor_version_t minor_;
+
+ service()
+ : service_(ANY_SERVICE),
+ instance_(ANY_INSTANCE),
+ major_(ANY_MAJOR),
+ minor_(ANY_MINOR) {
+ }
+
+ service(service_t _service, instance_t _instance,
+ major_version_t _major, minor_version_t _minor)
+ : service_(_service),
+ instance_(_instance),
+ major_(_major),
+ minor_(_minor) {
+ }
+
+ bool operator<(const service &_other) const {
+
+ return (service_ < _other.service_
+ || (service_ == _other.service_
+ && instance_ < _other.instance_));
+ }
+};
+
+static const version_t MAX_SUPPORTED_VERSION = 0;
+
+static const size_t TAG_SIZE = 4;
+static const size_t COMMAND_HEADER_SIZE = 9;
+static const size_t SEND_COMMAND_HEADER_SIZE = 15;
+static const size_t ROUTING_INFO_ENTRY_HEADER_SIZE = 7;
+
+static const size_t COMMAND_POSITION_ID = 0;
+static const size_t COMMAND_POSITION_VERSION = 1;
+static const size_t COMMAND_POSITION_CLIENT = 3;
+static const size_t COMMAND_POSITION_SIZE = 5;
+static const size_t COMMAND_POSITION_PAYLOAD = 9;
+
+static inline id_e get_command(byte_t _byte) {
+
+ id_e its_id(id_e::UNKNOWN_ID);
+ if (_byte <= static_cast<byte_t>(id_e::SUSPEND_ID))
+ its_id = static_cast<id_e>(_byte);
+ return (its_id);
+}
+
+static inline bool operator==(const byte_t &_lhs, const id_e &_rhs) {
+
+ return (_lhs == static_cast<byte_t>(_rhs));
+}
+
+static inline bool operator==(const id_e &_lhs, const byte_t &_rhs) {
+
+ return (_rhs == _lhs);
+}
+
+} // namespace protocol
+} // namespace vsomeip_v3
+
+#endif // VSOMEIP_V3_PROTOCOL_PROTOCOL_HPP_