• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mavlink / MAVSDK / 6568658631

19 Oct 2023 01:31AM UTC coverage: 31.23% (+0.02%) from 31.215%
6568658631

push

github

web-flow
Merge pull request #2155 from mavlink/pr-static-fixes

Threading fixes, MAVLink sequence number cleanup

1386 of 1386 new or added lines in 46 files covered. (100.0%)

7906 of 25315 relevant lines covered (31.23%)

23.54 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/mavsdk/plugins/rtk/rtk_impl.cpp
1
#include "rtk_impl.h"
2
#include "unused.h"
3

4
namespace mavsdk {
5

6
RtkImpl::RtkImpl(System& system) : PluginImplBase(system)
×
7
{
8
    _system_impl->register_plugin(this);
×
9
}
×
10

11
RtkImpl::RtkImpl(std::shared_ptr<System> system) : PluginImplBase(std::move(system))
×
12
{
13
    _system_impl->register_plugin(this);
×
14
}
×
15

16
RtkImpl::~RtkImpl()
×
17
{
18
    _system_impl->unregister_plugin(this);
×
19
}
×
20

21
void RtkImpl::init() {}
×
22

23
void RtkImpl::deinit() {}
×
24

25
void RtkImpl::enable() {}
×
26

27
void RtkImpl::disable() {}
×
28

29
Rtk::Result RtkImpl::send_rtcm_data(Rtk::RtcmData rtcm_data)
×
30
{
31
    constexpr size_t field_len = MAVLINK_MSG_GPS_RTCM_DATA_FIELD_DATA_LEN;
×
32

33
    const size_t num_packets_required =
34
        rtcm_data.data.size() / field_len + (rtcm_data.data.size() % field_len == 0 ? 0 : 1);
×
35

36
    // The maximum is 4 times the 180 bytes because we only have two bits to
37
    // denote the fragment ID.
38
    if (num_packets_required > 4) {
×
39
        return Rtk::Result::TooLong;
×
40
    }
41

42
    // Copy length before we change it.
43
    size_t bytes_to_send = rtcm_data.data.size();
×
44

45
    // The mavlink helpers memcpy, so we need to make sure we're not
46
    // copying from where we shouldn't.
47
    rtcm_data.data.resize(num_packets_required * field_len);
×
48

49
    for (size_t i = 0; i < num_packets_required; ++i) {
×
50
        const uint8_t flags =
×
51
            (num_packets_required > 1 ? 0x1 : 0x0) | ((i & 0x3) << 1) | ((_sequence & 0x1F) << 3);
×
52

53
        if (!_system_impl->queue_message([&](MavlinkAddress mavlink_address, uint8_t channel) {
×
54
                mavlink_message_t message;
55
                mavlink_msg_gps_rtcm_data_pack_chan(
×
56
                    mavlink_address.system_id,
×
57
                    mavlink_address.component_id,
×
58
                    channel,
59
                    &message,
60
                    flags,
×
61
                    static_cast<uint8_t>(std::min(field_len, bytes_to_send)),
×
62
                    reinterpret_cast<const uint8_t*>(rtcm_data.data.c_str() + (i * field_len)));
×
63
                return message;
×
64
            })) {
65
            ++_sequence;
×
66
            return Rtk::Result::ConnectionError;
×
67
        }
68

69
        bytes_to_send -= field_len;
×
70
    }
71

72
    ++_sequence;
×
73
    return Rtk::Result::Success;
×
74
}
75

76
} // namespace mavsdk
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc