-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathSPDPAgent.h
87 lines (75 loc) · 3 KB
/
SPDPAgent.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
The MIT License
Copyright (c) 2019 Lehrstuhl Informatik 11 - RWTH Aachen University
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE
This file is part of embeddedRTPS.
Author: i11 - Embedded Software, RWTH Aachen University
*/
#ifndef RTPS_SPDP_H
#define RTPS_SPDP_H
#include "lwip/sys.h"
#include "rtps/common/types.h"
#include "rtps/config.h"
#include "rtps/discovery/BuiltInEndpoints.h"
#include "rtps/discovery/ParticipantProxyData.h"
#include "rtps/utils/Log.h"
#include "ucdr/microcdr.h"
#if SPDP_VERBOSE && RTPS_GLOBAL_VERBOSE
#include "rtps/utils/printutils.h"
#define SPDP_LOG(...) \
if (true) { \
printf("[SPDP] "); \
printf(__VA_ARGS__); \
printf("\r\n"); \
}
#else
#define SPDP_LOG(...) //
#endif
namespace rtps {
class Participant;
class Writer;
class Reader;
class ReaderCacheChange;
class SPDPAgent {
public:
void init(Participant &participant, BuiltInEndpoints &endpoints);
void start();
void stop();
SemaphoreHandle_t m_mutex;
private:
Participant *mp_participant = nullptr;
BuiltInEndpoints m_buildInEndpoints;
bool m_running = false;
std::array<uint8_t, 400> m_outputBuffer{}; // TODO check required size
std::array<uint8_t, 400> m_inputBuffer{};
ParticipantProxyData m_proxyDataBuffer{};
ucdrBuffer m_microbuffer{};
uint8_t m_cycleHB = 0;
bool initialized = false;
static void receiveCallback(void *callee,
const ReaderCacheChange &cacheChange);
void handleSPDPPackage(const ReaderCacheChange &cacheChange);
void configureEndianessAndOptions(ucdrBuffer &buffer);
void processProxyData();
bool addProxiesForBuiltInEndpoints();
void addInlineQos();
void addParticipantParameters();
void endCurrentList();
static void runBroadcast(void *args);
};
} // namespace rtps
#endif // RTPS_SPDP_H