Skip to content

Commit

Permalink
Merge pull request #1955 from mavlink/pr-without-curl-builds
Browse files Browse the repository at this point in the history
Add option to build without cURL
  • Loading branch information
julianoes authored Dec 17, 2023
2 parents e36b7bd + 18165e9 commit 6bc7d69
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 41 deletions.
31 changes: 24 additions & 7 deletions src/mavsdk/core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,12 @@ target_sources(mavsdk
call_every_handler.cpp
connection.cpp
connection_result.cpp
curl_wrapper.cpp
crc32.cpp
system.cpp
system_impl.cpp
flight_mode.cpp
mavsdk.cpp
mavsdk_impl.cpp
http_loader.cpp
mavlink_channels.cpp
mavlink_command_receiver.cpp
mavlink_command_sender.cpp
Expand Down Expand Up @@ -62,11 +60,33 @@ target_sources(mavsdk
cmake_policy(SET CMP0079 NEW)
target_link_libraries(mavsdk
PRIVATE
MAVLink::mavlink
CURL::libcurl
Threads::Threads
)

if (NOT BUILD_WITHOUT_CURL)
target_sources(mavsdk
PRIVATE
curl_wrapper.cpp
http_loader.cpp
)

target_link_libraries(mavsdk
PRIVATE
CURL::libcurl
)

list(APPEND UNIT_TEST_SOURCES
# TODO: add this again
${PROJECT_SOURCE_DIR}/mavsdk/core/curl_test.cpp
#${PROJECT_SOURCE_DIR}/mavsdk/core/http_loader_test.cpp
)
else()
target_compile_definitions(mavsdk
PRIVATE
BUILD_WITHOUT_CURL=1
)
endif()

set_target_properties(mavsdk PROPERTIES
VERSION ${MAVSDK_VERSION_STRING}
SOVERSION ${MAVSDK_SOVERSION_STRING}
Expand Down Expand Up @@ -151,11 +171,8 @@ list(APPEND UNIT_TEST_SOURCES
${PROJECT_SOURCE_DIR}/mavsdk/core/callback_list_test.cpp
${PROJECT_SOURCE_DIR}/mavsdk/core/call_every_handler_test.cpp
${PROJECT_SOURCE_DIR}/mavsdk/core/cli_arg_test.cpp
${PROJECT_SOURCE_DIR}/mavsdk/core/curl_test.cpp
${PROJECT_SOURCE_DIR}/mavsdk/core/locked_queue_test.cpp
${PROJECT_SOURCE_DIR}/mavsdk/core/geometry_test.cpp
# TODO: add this again
#${PROJECT_SOURCE_DIR}/mavsdk/core/http_loader_test.cpp
${PROJECT_SOURCE_DIR}/mavsdk/core/mavsdk_math_test.cpp
${PROJECT_SOURCE_DIR}/mavsdk/core/mavsdk_test.cpp
${PROJECT_SOURCE_DIR}/mavsdk/core/mavsdk_time_test.cpp
Expand Down
63 changes: 37 additions & 26 deletions src/mavsdk/plugins/camera/camera_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,12 +163,8 @@ void CameraImpl::prepare_async(const Camera::ResultCallback& callback)
_system_impl->call_user_callback(
[temp_callback]() { temp_callback(Camera::Result::Success); });
} else {
_camera_definition_callback = [this, temp_callback](bool has_succeeded) {
if (has_succeeded) {
temp_callback(Camera::Result::Success);
} else {
temp_callback(Camera::Result::Error);
}
_camera_definition_callback = [this, temp_callback](Camera::Result result) {
temp_callback(result);
_camera_definition_callback = nullptr;
};

Expand Down Expand Up @@ -1162,19 +1158,28 @@ void CameraImpl::process_camera_information(const mavlink_message_t& message)

std::thread([this, camera_information]() {
std::string content{};
const auto has_succeeded = fetch_camera_definition(camera_information, content);
const auto result = fetch_camera_definition(camera_information, content);

if (has_succeeded) {
if (result == Camera::Result::Success) {
LogDebug() << "Successfully loaded camera definition";

if (_camera_definition_callback) {
_system_impl->call_user_callback(
[this]() { _camera_definition_callback(true); });
[this, result]() { _camera_definition_callback(result); });
}

_camera_definition.reset(new CameraDefinition());
_camera_definition->load_string(content);
refresh_params();

} else if (result == Camera::Result::ProtocolUnsupported) {
LogWarn() << "Protocol for " << camera_information.cam_definition_uri
<< " not supported";
if (_camera_definition_callback) {
_system_impl->call_user_callback(
[this, result]() { _camera_definition_callback(result); });
}

} else {
LogDebug() << "Failed to fetch camera definition!";

Expand All @@ -1186,7 +1191,7 @@ void CameraImpl::process_camera_information(const mavlink_message_t& message)

if (_camera_definition_callback) {
_system_impl->call_user_callback(
[this]() { _camera_definition_callback(false); });
[this, result]() { _camera_definition_callback(result); });
}
}
}
Expand All @@ -1203,33 +1208,39 @@ bool CameraImpl::should_fetch_camera_definition(const std::string& uri) const
!_has_camera_definition_timed_out;
}

bool CameraImpl::fetch_camera_definition(
Camera::Result CameraImpl::fetch_camera_definition(
const mavlink_camera_information_t& camera_information, std::string& camera_definition_out)
{
auto download_succeeded =
auto result =
download_definition_file(camera_information.cam_definition_uri, camera_definition_out);

if (download_succeeded) {
return true;
if (result == Camera::Result::Success) {
return result;
}

return load_stored_definition(camera_information, camera_definition_out);
}

bool CameraImpl::download_definition_file(
const std::string& uri, std::string& camera_definition_out)
Camera::Result
CameraImpl::download_definition_file(const std::string& uri, std::string& camera_definition_out)
{
#if BUILD_WITHOUT_CURL == 1
UNUSED(uri);
UNUSED(camera_definition_out);
return Camera::Result::ProtocolUnsupported;
#else
HttpLoader http_loader;
LogInfo() << "Downloading camera definition from: " << uri;
if (!http_loader.download_text_sync(uri, camera_definition_out)) {
LogErr() << "Failed to download camera definition.";
return false;
return Camera::Result::Error;
}
#endif

return true;
return Camera::Result::Success;
}

bool CameraImpl::load_stored_definition(
Camera::Result CameraImpl::load_stored_definition(
const mavlink_camera_information_t& camera_information, std::string& camera_definition_out)
{
// TODO: we might also try to support the correct version of the xml files.
Expand All @@ -1246,33 +1257,33 @@ bool CameraImpl::load_stored_definition(
if (model_name == "E90") {
LogInfo() << "Using cached file for Yuneec E90.";
camera_definition_out = e90xml;
return true;
return Camera::Result::Success;
} else if (model_name == "E50") {
LogInfo() << "Using cached file for Yuneec E50.";
camera_definition_out = e50xml;
return true;
return Camera::Result::Success;
} else if (model_name == "CGOET") {
LogInfo() << "Using cached file for Yuneec ET.";
camera_definition_out = cgoetxml;
return true;
return Camera::Result::Success;
} else if (model_name == "E10T") {
LogInfo() << "Using cached file for Yuneec E10T.";
camera_definition_out = e10txml;
return true;
return Camera::Result::Success;
} else if (model_name == "E30Z") {
LogInfo() << "Using cached file for Yuneec E30Z.";
camera_definition_out = e30zxml;
return true;
return Camera::Result::Success;
}
} else if (vendor_name == "Sony") {
if (model_name == "ILCE-7RM4") {
LogInfo() << "Using cached file for Sony ILCE-7RM4.";
camera_definition_out = ILCE7RM4xml;
return true;
return Camera::Result::Success;
}
}

return false;
return Camera::Result::Error;
}

void CameraImpl::process_video_information(const mavlink_message_t& message)
Expand Down
9 changes: 5 additions & 4 deletions src/mavsdk/plugins/camera/camera_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -158,10 +158,11 @@ class CameraImpl : public PluginImplBase {
void check_status();

bool should_fetch_camera_definition(const std::string& uri) const;
bool fetch_camera_definition(
Camera::Result fetch_camera_definition(
const mavlink_camera_information_t& camera_information, std::string& camera_definition_out);
bool download_definition_file(const std::string& uri, std::string& camera_definition_out);
bool
Camera::Result
download_definition_file(const std::string& uri, std::string& camera_definition_out);
Camera::Result
load_stored_definition(const mavlink_camera_information_t&, std::string& camera_definition_out);

void refresh_params();
Expand Down Expand Up @@ -209,7 +210,7 @@ class CameraImpl : public PluginImplBase {
bool _is_fetching_camera_definition{false};
bool _has_camera_definition_timed_out{false};
size_t _camera_definition_fetch_count{0};
using CameraDefinitionCallback = std::function<void(bool)>;
using CameraDefinitionCallback = std::function<void(Camera::Result)>;
CameraDefinitionCallback _camera_definition_callback{};

std::atomic<size_t> _camera_id{0};
Expand Down
9 changes: 5 additions & 4 deletions third_party/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,13 @@ if (SUPERBUILD)
build_target(jsoncpp)
build_target(tinyxml2)

if(NOT IOS)
build_target(zlib)
if(NOT BUILD_WITHOUT_CURL)
if(NOT IOS)
build_target(zlib)
endif()
build_target(curl)
endif()

build_target(curl)

if(BUILD_MAVSDK_SERVER)
build_target(openssl)
build_target(cares)
Expand Down

0 comments on commit 6bc7d69

Please sign in to comment.