Skip to content

Commit 053304c

Browse files
committed
Added code for tutorial27.
1 parent 8278ba3 commit 053304c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+5201
-0
lines changed

tutorials/tutorial27/CMakeLists.txt

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
get_filename_component(name ${CMAKE_CURRENT_SOURCE_DIR} NAME)
2+
3+
set (schema_files
4+
${CMAKE_CURRENT_SOURCE_DIR}/dsl/schema.xml
5+
)
6+
7+
set (server_src
8+
src/ServerSession.cpp
9+
)
10+
11+
set (client_src
12+
src/ClientSession.cpp
13+
)
14+
15+
dsl_tutorial_parse(${name} SCHEMAS ${schema_files})
16+
17+
bin_tutorial_server(${name} ${server_src})
18+
bin_tutorial_client(${name} ${client_src})
19+

tutorials/tutorial27/README.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Tutorial 27
2+
Sub-protocols
3+
4+
## Summary
5+
6+
[Read Previous Tutorial](../tutorial26) <-----------------------

tutorials/tutorial27/dsl/schema.xml

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<schema name="tutorial27" endian="big" nonUniqueMsgIdAllowed="true">
3+
<fields>
4+
<string name="Msg1Name" defaultValue="Message 1" />
5+
<string name="Msg2Name" defaultValue="Message 2" />
6+
<string name="Msg3Name" defaultValue="Message 3" />
7+
<string name="Msg4Name" defaultValue="Message 4" />
8+
<string name="Msg5Name" defaultValue="Message 5" />
9+
<string name="Msg6Name" defaultValue="Message 6" />
10+
</fields>
11+
12+
<ns name="sub1">
13+
<fields>
14+
<enum name="MsgId" type="uint8" semanticType="messageId">
15+
<validValue name="M0" val="0" displayName="^Msg1Name" />
16+
</enum>
17+
</fields>
18+
19+
<frame name="Frame">
20+
<size name="Size">
21+
<int name="SizeField" type="uint16" />
22+
</size>
23+
<id name="Id">
24+
<int name="IdField" type="uint8" pseudo="true" />
25+
</id>
26+
<payload name="Data" />
27+
</frame>
28+
29+
<message name="Msg1" id="sub1.MsgId.M0" order="0" displayName="^Msg1Name" />
30+
<message name="Msg2" id="sub1.MsgId.M0" order="1" displayName="^Msg2Name" />
31+
<message name="Msg3" id="sub1.MsgId.M0" order="2" displayName="^Msg3Name" />
32+
</ns>
33+
34+
<ns name="sub2">
35+
<fields>
36+
<enum name="MsgId" type="uint8" semanticType="messageId">
37+
<validValue name="M4" val="1" displayName="^Msg1Name" />
38+
<validValue name="M5" val="2" displayName="^Msg2Name" />
39+
<validValue name="M6" val="3" displayName="^Msg3Name" />
40+
</enum>
41+
</fields>
42+
43+
<frame name="Frame">
44+
<size name="Size">
45+
<int name="SizeField" type="uint16" />
46+
</size>
47+
<id name="Id" field="sub2.MsgId" />
48+
<payload name="Data" />
49+
</frame>
50+
51+
<message name="Msg4" id="sub2.MsgId.M4" displayName="^Msg4Name" />
52+
<message name="Msg5" id="sub2.MsgId.M5" displayName="^Msg5Name" />
53+
<message name="Msg6" id="sub2.MsgId.M6" displayName="^Msg6Name" />
54+
</ns>
55+
</schema>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Generated by commsdsl2comms v7.1.0
2+
3+
/// @file
4+
/// @brief Contains definition of <b>"Message"</b> interface class.
5+
6+
#pragma once
7+
8+
#include "comms/Message.h"
9+
#include "comms/options.h"
10+
#include "tutorial27/MsgId.h"
11+
12+
namespace tutorial27
13+
{
14+
15+
/// @brief Definition of <b>"Message"</b> common interface class.
16+
/// @tparam TOpt Interface definition options
17+
/// @headerfile tutorial27/Message.h
18+
template <typename... TOpt>
19+
using Message =
20+
comms::Message<
21+
TOpt...,
22+
comms::option::def::BigEndian,
23+
comms::option::def::MsgIdType<tutorial27::MsgId>
24+
>;
25+
26+
} // namespace tutorial27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Generated by commsdsl2comms v7.1.0
2+
3+
/// @file
4+
/// @brief Contains definition of message ids enumeration.
5+
6+
#pragma once
7+
8+
#include <cstdint>
9+
#include "tutorial27/Version.h"
10+
11+
namespace tutorial27
12+
{
13+
14+
/// @brief Message ids enumeration.
15+
enum MsgId : unsigned
16+
{
17+
MsgId_sub1_Msg1 = 0U,
18+
MsgId_sub1_Msg2 = 0U,
19+
MsgId_sub1_Msg3 = 0U,
20+
MsgId_sub2_Msg4 = 1U,
21+
MsgId_sub2_Msg5 = 2U,
22+
MsgId_sub2_Msg6 = 3U
23+
};
24+
25+
} // namespace tutorial27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Generated by commsdsl2comms v7.1.0
2+
3+
/// @file
4+
/// @brief Contains protocol version definition.
5+
6+
#pragma once
7+
8+
#include "comms/version.h"
9+
10+
/// @brief Version of the protocol specification.
11+
#define TUTORIAL27_SPEC_VERSION (0U)
12+
13+
namespace tutorial27
14+
{
15+
16+
/// @brief Version of the protocol specification.
17+
inline constexpr unsigned specVersion()
18+
{
19+
return TUTORIAL27_SPEC_VERSION;
20+
}
21+
22+
} // namespace tutorial27
23+
24+
// Generated compile time check for minimal supported version of the COMMS library
25+
static_assert(COMMS_MAKE_VERSION(5, 4, 0) <= comms::version(),
26+
"The version of COMMS library is too old");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Generated by commsdsl2comms v7.1.0
2+
3+
/// @file
4+
/// @brief Contains definition of base class of all the fields.
5+
6+
#pragma once
7+
8+
#include "comms/Field.h"
9+
#include "comms/options.h"
10+
#include "tutorial27/Version.h"
11+
12+
namespace tutorial27
13+
{
14+
15+
namespace field
16+
{
17+
18+
/// @brief Common base class for all the fields.
19+
/// @tparam TOpt Extra options.
20+
template <typename... TOpt>
21+
using FieldBase =
22+
comms::Field<
23+
TOpt...,
24+
comms::option::def::BigEndian
25+
>;
26+
27+
} // namespace field
28+
29+
} // namespace tutorial27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// Generated by commsdsl2comms v7.1.0
2+
3+
/// @file
4+
/// @brief Contains definition of protocol all messages dynamic memory allocation message factory options.
5+
6+
#pragma once
7+
8+
#include "tutorial27/options/DefaultOptions.h"
9+
#include "tutorial27/sub1/factory/AllMessagesDynMemMsgFactory.h"
10+
#include "tutorial27/sub2/factory/AllMessagesDynMemMsgFactory.h"
11+
12+
namespace tutorial27
13+
{
14+
15+
namespace options
16+
{
17+
18+
/// @brief Provided all messages dynamic memory allocation message factory options of the protocol.
19+
/// @details Must be used as the outermost wrapper of the protocol options.
20+
template <typename TBase = tutorial27::options::DefaultOptions>
21+
struct AllMessagesDynMemMsgFactoryDefaultOptionsT : public TBase
22+
{
23+
/// @brief Alias to actual message factory class.
24+
/// @details Exposes the same template parameters as @b comms::MsgFactory.
25+
template <typename TInterface, typename TAllMessages, typename... TOptions>
26+
using sub1_MsgFactory =
27+
tutorial27::sub1::factory::AllMessagesDynMemMsgFactory<TInterface, AllMessagesDynMemMsgFactoryDefaultOptionsT<TBase> >;
28+
29+
/// @brief Alias to actual message factory class.
30+
/// @details Exposes the same template parameters as @b comms::MsgFactory.
31+
template <typename TInterface, typename TAllMessages, typename... TOptions>
32+
using sub2_MsgFactory =
33+
tutorial27::sub2::factory::AllMessagesDynMemMsgFactory<TInterface, AllMessagesDynMemMsgFactoryDefaultOptionsT<TBase> >;
34+
35+
/// @brief Extra options for namespace.
36+
struct sub1: public TBase::sub1
37+
{
38+
/// @brief Extra options for frames.
39+
struct frame : public TBase::sub1::frame
40+
{
41+
/// @brief Extra options for layers of
42+
/// @ref tutorial27::sub1::frame::Frame frame.
43+
struct FrameLayers : public TBase::sub1::frame::FrameLayers
44+
{
45+
/// @brief Extra options for @ref
46+
/// tutorial27::sub1::frame::FrameLayers::Id
47+
/// layer.
48+
using Id =
49+
std::tuple<
50+
comms::option::app::MsgFactoryTempl<sub1_MsgFactory>,
51+
typename TBase::sub1::frame::FrameLayers::Id
52+
>;
53+
}; // struct FrameLayers
54+
}; // struct frame
55+
}; // struct sub1
56+
57+
/// @brief Extra options for namespace.
58+
struct sub2: public TBase::sub2
59+
{
60+
/// @brief Extra options for frames.
61+
struct frame : public TBase::sub2::frame
62+
{
63+
/// @brief Extra options for layers of
64+
/// @ref tutorial27::sub2::frame::Frame frame.
65+
struct FrameLayers : public TBase::sub2::frame::FrameLayers
66+
{
67+
/// @brief Extra options for @ref
68+
/// tutorial27::sub2::frame::FrameLayers::Id
69+
/// layer.
70+
using Id =
71+
std::tuple<
72+
comms::option::app::MsgFactoryTempl<sub2_MsgFactory>,
73+
typename TBase::sub2::frame::FrameLayers::Id
74+
>;
75+
}; // struct FrameLayers
76+
}; // struct frame
77+
}; // struct sub2
78+
};
79+
80+
/// @brief Alias to @ref AllMessagesDynMemMsgFactoryDefaultOptionsT with default template parameter.
81+
using AllMessagesDynMemMsgFactoryDefaultOptions = AllMessagesDynMemMsgFactoryDefaultOptionsT<>;
82+
83+
} // namespace options
84+
85+
} // namespace tutorial27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
// Generated by commsdsl2comms v7.1.0
2+
3+
/// @file
4+
/// @brief Contains definition of protocol bare metal default options.
5+
6+
#pragma once
7+
8+
#include "tutorial27/options/DefaultOptions.h"
9+
10+
#ifndef DEFAULT_SEQ_FIXED_STORAGE_SIZE
11+
/// @brief Define default fixed size for various sequence fields
12+
/// @details May be defined during compile time to change the default value.
13+
#define DEFAULT_SEQ_FIXED_STORAGE_SIZE 32
14+
#endif
15+
16+
namespace tutorial27
17+
{
18+
19+
namespace options
20+
{
21+
22+
/// @brief Default bare metal options of the protocol.
23+
template <typename TBase = tutorial27::options::DefaultOptions>
24+
struct BareMetalDefaultOptionsT : public TBase
25+
{
26+
/// @brief Extra options for namespace.
27+
struct sub1: public TBase::sub1
28+
{
29+
/// @brief Extra options for frames.
30+
struct frame : public TBase::sub1::frame
31+
{
32+
/// @brief Extra options for layers of
33+
/// @ref tutorial27::sub1::frame::Frame frame.
34+
struct FrameLayers : public TBase::sub1::frame::FrameLayers
35+
{
36+
/// @brief Extra options for @ref
37+
/// tutorial27::sub1::frame::FrameLayers::DataMembers::Field field.
38+
struct DataMembers : public TBase::sub1::frame::FrameLayers::DataMembers
39+
{
40+
using Field =
41+
std::tuple<
42+
comms::option::app::FixedSizeStorage<DEFAULT_SEQ_FIXED_STORAGE_SIZE * 8>,
43+
typename TBase::sub1::frame::FrameLayers::DataMembers::Field
44+
>;
45+
}; // struct DataMembers
46+
47+
/// @brief Extra options for @ref
48+
/// tutorial27::sub1::frame::FrameLayers::Id
49+
/// layer.
50+
using Id =
51+
std::tuple<
52+
comms::option::app::InPlaceAllocation,
53+
typename TBase::sub1::frame::FrameLayers::Id
54+
>;
55+
}; // struct FrameLayers
56+
}; // struct frame
57+
}; // struct sub1
58+
59+
/// @brief Extra options for namespace.
60+
struct sub2: public TBase::sub2
61+
{
62+
/// @brief Extra options for frames.
63+
struct frame : public TBase::sub2::frame
64+
{
65+
/// @brief Extra options for layers of
66+
/// @ref tutorial27::sub2::frame::Frame frame.
67+
struct FrameLayers : public TBase::sub2::frame::FrameLayers
68+
{
69+
/// @brief Extra options for @ref
70+
/// tutorial27::sub2::frame::FrameLayers::DataMembers::Field field.
71+
struct DataMembers : public TBase::sub2::frame::FrameLayers::DataMembers
72+
{
73+
using Field =
74+
std::tuple<
75+
comms::option::app::FixedSizeStorage<DEFAULT_SEQ_FIXED_STORAGE_SIZE * 8>,
76+
typename TBase::sub2::frame::FrameLayers::DataMembers::Field
77+
>;
78+
}; // struct DataMembers
79+
80+
/// @brief Extra options for @ref
81+
/// tutorial27::sub2::frame::FrameLayers::Id
82+
/// layer.
83+
using Id =
84+
std::tuple<
85+
comms::option::app::InPlaceAllocation,
86+
typename TBase::sub2::frame::FrameLayers::Id
87+
>;
88+
}; // struct FrameLayers
89+
}; // struct frame
90+
}; // struct sub2
91+
};
92+
93+
/// @brief Alias to @ref BareMetalDefaultOptionsT with default template parameter.
94+
using BareMetalDefaultOptions = BareMetalDefaultOptionsT<>;
95+
96+
} // namespace options
97+
98+
} // namespace tutorial27

0 commit comments

Comments
 (0)