diff --git a/ChangeLog.md b/ChangeLog.md index dda445f..c5623ea 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,3 +1,11 @@ +## Changes between libo3d3xx 0.7.6 and 0.7.7 + +* Updated cmake/packaging scripts to support the Ubuntu 18.04 toolchain +* Disabled FindXMLRPC CMake module when cross compiling. This fixes a build + failure when cross compiling for the O3D303 with CMake 3.10.2 on Ubuntu + 18.04) +* Backported PR#180 from ifm3d to handle spurious wakeups in WaitForFrame + ## Changes between libo3d3xx 0.7.5 and 0.7.6 * Makes unit tests pass for the 1.23.1522 firmware (json dumps still do not diff --git a/README.md b/README.md index c033a4e..ed07880 100644 --- a/README.md +++ b/README.md @@ -189,6 +189,12 @@ Software Compatibility Matrix O3D303 Ethernet/IP assembly size configuration and PCIC schema auto update + + 0.7.7 + 1.25.4073 + O3D303 + Support for building with Ubuntu 18.04 toolchain, bugfixes + Features @@ -257,6 +263,7 @@ validated: * g++ 4.8.x on Ubuntu Linux 14.04 LTS * g++ 5.3.x on Ubuntu Linux 16.04 LTS +* g++ 7.3.x on Ubuntu Linux 18.04 LTS Installation (from source) -------------------------- diff --git a/cmake/modules/o3d3xx_version.cmake b/cmake/modules/o3d3xx_version.cmake index d472858..d6fd5ea 100644 --- a/cmake/modules/o3d3xx_version.cmake +++ b/cmake/modules/o3d3xx_version.cmake @@ -4,6 +4,6 @@ ################################################ set(O3D3XX_VERSION_MAJOR 0) set(O3D3XX_VERSION_MINOR 7) -set(O3D3XX_VERSION_PATCH 6) +set(O3D3XX_VERSION_PATCH 7) set(O3D3XX_VERSION_STRING "${O3D3XX_VERSION_MAJOR}.${O3D3XX_VERSION_MINOR}.${O3D3XX_VERSION_PATCH}") diff --git a/modules/camera/CMakeLists.txt b/modules/camera/CMakeLists.txt index 6c67eb4..f167292 100644 --- a/modules/camera/CMakeLists.txt +++ b/modules/camera/CMakeLists.txt @@ -84,7 +84,9 @@ get_ubuntu_version(${UBUNTU_VERSION}) ################################################ ## Bring in dependent projects ################################################ -find_package(XMLRPC REQUIRED c++ client) +if (NOT CMAKE_CROSSCOMPILING) + find_package(XMLRPC REQUIRED c++ client) +endif() find_package(Boost REQUIRED COMPONENTS program_options system) ################################################ diff --git a/modules/camera/test/CMakeLists.txt b/modules/camera/test/CMakeLists.txt index 4cf369e..3ec9fb8 100644 --- a/modules/camera/test/CMakeLists.txt +++ b/modules/camera/test/CMakeLists.txt @@ -1,6 +1,6 @@ set(GTEST_CMAKE_DIR "/usr/src/gtest") enable_testing() -add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin) +add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin EXCLUDE_FROM_ALL) file(GLOB CAMERA_TEST_SOURCES *.cpp) add_executable(o3d3xx-camera-tests ${CAMERA_TEST_SOURCES}) if(BUILD_SHARED_LIBS) diff --git a/modules/camera/test/o3d3xx-camera-tests.cpp b/modules/camera/test/o3d3xx-camera-tests.cpp index da53c70..145aa33 100644 --- a/modules/camera/test/o3d3xx-camera-tests.cpp +++ b/modules/camera/test/o3d3xx-camera-tests.cpp @@ -179,7 +179,7 @@ TEST(Camera_Tests, GetDeviceConfig) // std::cout << kv.first << "=" << kv.second << std::endl; // } - EXPECT_EQ(params.size(), 38); + EXPECT_EQ(params.size(), 40); EXPECT_EQ(params.at("Name"), dev->Name()); EXPECT_EQ(params.at("Description"), dev->Description()); diff --git a/modules/framegrabber/src/libo3d3xx_framegrabber/frame_grabber.cpp b/modules/framegrabber/src/libo3d3xx_framegrabber/frame_grabber.cpp index 4b83d03..daab4da 100644 --- a/modules/framegrabber/src/libo3d3xx_framegrabber/frame_grabber.cpp +++ b/modules/framegrabber/src/libo3d3xx_framegrabber/frame_grabber.cpp @@ -180,15 +180,26 @@ o3d3xx::FrameGrabber::WaitForFrame(o3d3xx::ByteBuffer* buff, try { + // Store the current pointer backing the front buffer - this will be the + // condition checked by the condition_variable predicate (pointer should + // have changed) below + std::uint8_t* initial_buff_ptr = this->front_buffer_.data(); + auto predicate = + [this, initial_buff_ptr]() + { + return this->front_buffer_.data() != initial_buff_ptr; + }; + if (timeout_millis <= 0) { - this->front_buffer_cv_.wait(lock); + this->front_buffer_cv_.wait(lock, predicate); } else { - if (this->front_buffer_cv_.wait_for( - lock, std::chrono::milliseconds(timeout_millis)) == - std::cv_status::timeout) + if (!this->front_buffer_cv_.wait_for( + lock, + std::chrono::milliseconds(timeout_millis), + predicate)) { LOG(WARNING) << "Timeout waiting for image buffer from camera"; return false; diff --git a/modules/framegrabber/test/CMakeLists.txt b/modules/framegrabber/test/CMakeLists.txt index 74e47db..70ed6d2 100644 --- a/modules/framegrabber/test/CMakeLists.txt +++ b/modules/framegrabber/test/CMakeLists.txt @@ -1,6 +1,6 @@ set(GTEST_CMAKE_DIR "/usr/src/gtest") enable_testing() -add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin) +add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin EXCLUDE_FROM_ALL) file(GLOB FRAMEGRABBER_TEST_SOURCES *.cpp) add_executable(o3d3xx-framegrabber-tests ${FRAMEGRABBER_TEST_SOURCES}) diff --git a/modules/image/CMakeLists.txt b/modules/image/CMakeLists.txt index d02f754..aeb0fa4 100644 --- a/modules/image/CMakeLists.txt +++ b/modules/image/CMakeLists.txt @@ -240,7 +240,7 @@ if(BUILD_EXE_VIEWER) set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, libvtk6-dev, - libpcl1.7, + libpcl-dev, libopencv-highgui-dev, libopencv-contrib-dev") else() diff --git a/modules/image/test/CMakeLists.txt b/modules/image/test/CMakeLists.txt index ae2f807..67d043b 100644 --- a/modules/image/test/CMakeLists.txt +++ b/modules/image/test/CMakeLists.txt @@ -2,7 +2,7 @@ find_library(LIB_boost_system NAMES boost_system) set(GTEST_CMAKE_DIR "/usr/src/gtest") enable_testing() -add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin) +add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin EXCLUDE_FROM_ALL) file(GLOB IMAGE_TEST_SOURCES *.cpp) add_executable(o3d3xx-image-tests ${IMAGE_TEST_SOURCES}) diff --git a/modules/oem/test/CMakeLists.txt b/modules/oem/test/CMakeLists.txt index 181a8f9..9eea9c6 100644 --- a/modules/oem/test/CMakeLists.txt +++ b/modules/oem/test/CMakeLists.txt @@ -2,7 +2,7 @@ set(GTEST_CMAKE_DIR "${SYSROOT_CONTRIB}/usr/src/gtest") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${SYSROOT_CONTRIB}/usr/include") enable_testing() -add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin) +add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin EXCLUDE_FROM_ALL) file(GLOB TEST_SOURCES *.cpp) add_executable(o3d3xx-oem-tests ${TEST_SOURCES}) target_link_libraries(o3d3xx-oem-tests diff --git a/modules/pcicclient/test/CMakeLists.txt b/modules/pcicclient/test/CMakeLists.txt index 101c0a8..f6e7d2a 100644 --- a/modules/pcicclient/test/CMakeLists.txt +++ b/modules/pcicclient/test/CMakeLists.txt @@ -1,6 +1,6 @@ set(GTEST_CMAKE_DIR "/usr/src/gtest") enable_testing() -add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin) +add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin EXCLUDE_FROM_ALL) file(GLOB PCICCLIENT_TEST_SOURCES *.cpp) add_executable(o3d3xx-pcicclient-tests ${PCICCLIENT_TEST_SOURCES})