diff --git a/CMakeLists.txt b/CMakeLists.txt index 59716af..bf0e723 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,7 +33,7 @@ option( ament_vendor(openeb_vendor VCS_URL https://github.com/prophesee-ai/openeb.git - VCS_VERSION 4.6.2 + VCS_VERSION 5.0.0 GLOBAL_HOOK PATCHES patches CMAKE_ARGS diff --git a/README.md b/README.md index 4e41c6d..a5b43c2 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,10 @@ Wrapper package to build the [Prophesee OpenEB](https://github.com/prophesee-ai/openeb) library (Metavision SDK) on the ROS2 build farm. +This package also contains a patch to build the [SilkyEVCam +plugin](https://centuryarks.com/en/download/) from source. + + ## License This software is issued under the Apache License Version 2.0. diff --git a/patches/0001-add-silkyev_cam-plugin.patch b/patches/0001-add-silkyev_cam-plugin.patch index 818377d..bc91e48 100644 --- a/patches/0001-add-silkyev_cam-plugin.patch +++ b/patches/0001-add-silkyev_cam-plugin.patch @@ -1,47 +1,20 @@ -From e682f64bdba192ee9931d93c7191d3095d74f314 Mon Sep 17 00:00:00 2001 -From: Bernd Pfrommer -Date: Thu, 10 Oct 2024 13:55:46 -0400 -Subject: [PATCH] add silkyev_cam plugin - ---- - .../metavision_platform_info/CMakeLists.txt | 5 ++ - .../metavision_platform_info.cpp | 4 +- - hal_psee_plugins/lib/CMakeLists.txt | 55 ++++++++-------- - .../boards/treuzell/tz_libusb_board_command.h | 3 + - .../psee_hw_layer/boards/utils/psee_libusb.h | 3 + - .../resources/rules/ca_device.rules | 1 + - .../CMakeLists.txt | 4 +- - .../boards/treuzell/tz_hw_identification.cpp | 64 +++++++++++++++++-- - .../treuzell/tz_libusb_board_command.cpp | 19 ++++++ - .../src/boards/utils/psee_libusb.cpp | 36 +++++++++++ - .../src/boards/v4l2/CMakeLists.txt | 6 +- - .../src/devices/imx636/imx636_tz_device.cpp | 14 ++++ - .../src/devices/imx646/imx646_tz_device.cpp | 14 ++++ - .../src/devices/others/CMakeLists.txt | 4 +- - hal_psee_plugins/src/plugin/CMakeLists.txt | 7 +- - hal_psee_plugins/src/plugin/silky_common.cpp | 46 +++++++++++++ - 16 files changed, 243 insertions(+), 42 deletions(-) - create mode 100644 hal_psee_plugins/resources/rules/ca_device.rules - create mode 100644 hal_psee_plugins/src/plugin/silky_common.cpp - diff --git a/hal/cpp/samples/metavision_platform_info/CMakeLists.txt b/hal/cpp/samples/metavision_platform_info/CMakeLists.txt -index d774f3b..38e5b69 100644 +index cf568af..78a4102 100644 --- a/hal/cpp/samples/metavision_platform_info/CMakeLists.txt +++ b/hal/cpp/samples/metavision_platform_info/CMakeLists.txt -@@ -10,6 +10,11 @@ +@@ -10,6 +10,10 @@ add_executable(metavision_platform_info metavision_platform_info.cpp) - target_link_libraries(metavision_platform_info PRIVATE MetavisionSDK::base metavision_hal metavision_hal_discovery Boost::program_options Boost::filesystem) + target_link_libraries(metavision_platform_info PRIVATE MetavisionSDK::base metavision_hal metavision_hal_discovery Boost::program_options) -+# 2023-10-06 Edited by CenturyArks add for SilkyEvCam ++# 2024-10-01 Edited by CenturyArks add for SilkyEvCam +add_executable(silkyevcam_platform_info metavision_platform_info.cpp) -+target_link_libraries(silkyevcam_platform_info PRIVATE MetavisionSDK::base metavision_hal metavision_hal_discovery Boost::program_options Boost::filesystem) -+ ++target_link_libraries(silkyevcam_platform_info PRIVATE MetavisionSDK::base metavision_hal metavision_hal_discovery Boost::program_options) + install(TARGETS metavision_platform_info RUNTIME DESTINATION bin COMPONENT metavision-hal-bin diff --git a/hal/cpp/samples/metavision_platform_info/metavision_platform_info.cpp b/hal/cpp/samples/metavision_platform_info/metavision_platform_info.cpp -index 0e0b911..82a870a 100644 +index bf6b5ca..d72ecdc 100644 --- a/hal/cpp/samples/metavision_platform_info/metavision_platform_info.cpp +++ b/hal/cpp/samples/metavision_platform_info/metavision_platform_info.cpp @@ -315,7 +315,9 @@ void do_systems_diagnosis() { @@ -56,7 +29,7 @@ index 0e0b911..82a870a 100644 bool usb2_found = false; int nr_usb_port_found = 0; diff --git a/hal_psee_plugins/lib/CMakeLists.txt b/hal_psee_plugins/lib/CMakeLists.txt -index b94ae2b..c865d22 100644 +index f2c8035..e89f81e 100644 --- a/hal_psee_plugins/lib/CMakeLists.txt +++ b/hal_psee_plugins/lib/CMakeLists.txt @@ -38,27 +38,27 @@ target_include_directories(metavision_psee_hw_layer_obj @@ -92,7 +65,7 @@ index b94ae2b..c865d22 100644 EXPORT MetavisionPSEEHWLayerTargets RUNTIME DESTINATION "${HAL_INSTALL_PLUGIN_RELATIVE_PATH}" -@@ -71,14 +71,14 @@ install(TARGETS metavision_psee_hw_layer +@@ -71,17 +71,17 @@ install(TARGETS metavision_psee_hw_layer COMPONENT metavision-hal-prophesee-hw-layer-lib ) @@ -102,16 +75,21 @@ index b94ae2b..c865d22 100644 - COMMAND ${CMAKE_COMMAND} -E copy "$" "${HAL_BUILD_PLUGIN_PATH}") + COMMAND ${CMAKE_COMMAND} -E copy "$" "${HAL_BUILD_PLUGIN_PATH}") - if(HAL_SENSORLIB_SUPPORT) + if(BUILD_INTERNAL_PLUGINS) +- add_custom_command(TARGET metavision_psee_hw_layer POST_BUILD ++ add_custom_command(TARGET metavision_silky_hw_layer POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory "${HAL_BUILD_PLUGIN_PATH}/universal_internal" +- COMMAND ${CMAKE_COMMAND} -E copy "$" "${HAL_BUILD_PLUGIN_PATH}/universal_internal") - add_custom_command(TARGET metavision_psee_hw_layer POST_BUILD ++ COMMAND ${CMAKE_COMMAND} -E copy "$" "${HAL_BUILD_PLUGIN_PATH}/universal_internal") + add_custom_command(TARGET metavision_silky_hw_layer POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${HAL_BUILD_PLUGIN_PATH}/sensorlib" - COMMAND ${CMAKE_COMMAND} -E copy "$" "${HAL_BUILD_PLUGIN_PATH}/sensorlib") + COMMAND ${CMAKE_COMMAND} -E copy "$" "${HAL_BUILD_PLUGIN_PATH}/sensorlib") - endif(HAL_SENSORLIB_SUPPORT) + endif(BUILD_INTERNAL_PLUGINS) # Install public headers -@@ -89,9 +89,9 @@ install(DIRECTORY ${metavision_psee_hw_layer_include_dir}/metavision +@@ -92,9 +92,9 @@ install(DIRECTORY ${metavision_psee_hw_layer_include_dir}/metavision set(METAVISION_PSEEHWLayer_EXPORT_FILE_NAME MetavisionPSEEHWLayerTargets.cmake) set(metavision_psee_hw_layer_config_files_output_dir "${GENERATE_FILES_DIRECTORY}/share/cmake/MetavisionPSEEHWLayerCMakePackagesFilesDir") @@ -123,7 +101,7 @@ index b94ae2b..c865d22 100644 PROPERTIES EXPORT_NAME PSEEHWLayer ) -@@ -135,7 +135,7 @@ foreach(lib_obj ${lib_obj_list}) +@@ -144,7 +144,7 @@ foreach(lib_obj ${lib_obj_list}) PUBLIC metavision_hal libusb-1.0 @@ -132,7 +110,7 @@ index b94ae2b..c865d22 100644 ) target_include_directories(${lib_obj} PUBLIC -@@ -154,12 +154,13 @@ endforeach() +@@ -170,12 +170,13 @@ endforeach() # Custom target for all plugins (useful to use as a dependency) add_custom_target(hal_plugins) @@ -147,8 +125,8 @@ index b94ae2b..c865d22 100644 + silky_common_plugin ) - if(POLICY CMP0095) -@@ -179,7 +180,7 @@ foreach(plugin ${plugin_list}) + if(BUILD_INTERNAL_PLUGINS) +@@ -203,7 +204,7 @@ foreach(plugin ${plugin_list}) target_link_libraries(${plugin} PRIVATE @@ -157,7 +135,7 @@ index b94ae2b..c865d22 100644 metavision_hal_psee_plugin_obj PUBLIC metavision_hal -@@ -194,7 +195,7 @@ foreach(plugin ${plugin_list}) +@@ -218,7 +219,7 @@ foreach(plugin ${plugin_list}) target_link_options(${plugin} PRIVATE "LINKER:-z,defs") endif() @@ -166,7 +144,7 @@ index b94ae2b..c865d22 100644 get_target_property(plugin_rpath ${plugin} "INSTALL_RPATH") if(APPLE) -@@ -226,18 +227,18 @@ foreach(plugin ${plugin_list}) +@@ -258,18 +259,19 @@ foreach(plugin ${plugin_list}) endforeach() @@ -176,33 +154,34 @@ index b94ae2b..c865d22 100644 - PRIVATE - $ - ) -+# 2024-05-20 Edited by CenturyArks for silky_common_plugin ++# 2024-10-01 Edited by CenturyArks for silky_common_plugin +target_sources(silky_common_plugin + PRIVATE + $ + $ +) ++ ++target_link_libraries(silky_common_plugin ++ PRIVATE ++ metavision_hal_psee_plugin_obj ++ metavision_psee_hw_layer_obj ++) - target_link_libraries(hal_plugin_prophesee - PRIVATE - ${object} - ) -endforeach() -+target_link_libraries(silky_common_plugin -+ PRIVATE -+ metavision_hal_psee_plugin_obj -+ metavision_psee_hw_layer_obj -+) - if(EXISTS "${PROJECT_SOURCE_DIR}/licensing/LICENSE_METAVISION_SDK") - install(FILES ${PROJECT_SOURCE_DIR}/licensing/LICENSE_METAVISION_SDK + # Linkage with generic hal plugin object + if(BUILD_INTERNAL_PLUGINS) diff --git a/hal_psee_plugins/psee_hw_layer_headers/include/metavision/psee_hw_layer/boards/treuzell/tz_libusb_board_command.h b/hal_psee_plugins/psee_hw_layer_headers/include/metavision/psee_hw_layer/boards/treuzell/tz_libusb_board_command.h -index b67c023..c60de7b 100644 +index 77db6d8..6d00a57 100644 --- a/hal_psee_plugins/psee_hw_layer_headers/include/metavision/psee_hw_layer/boards/treuzell/tz_libusb_board_command.h +++ b/hal_psee_plugins/psee_hw_layer_headers/include/metavision/psee_hw_layer/boards/treuzell/tz_libusb_board_command.h -@@ -71,6 +71,9 @@ public: +@@ -68,6 +68,9 @@ public: // @brief Create a new DataTransfer object to stream the currently opened device - std::unique_ptr build_data_transfer(uint32_t raw_event_size_bytes) override; + std::unique_ptr build_raw_data_producer(uint32_t raw_event_size_bytes) override; + // 2023-10-06 Edited by CenturyArks for pixel mask control + bool read_pixel_mask_data(int num, int* x, int* y); @@ -232,22 +211,20 @@ index 0000000..fb0cdcd @@ -0,0 +1 @@ +KERNEL=="*", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ACTION=="add", ATTR{idVendor}=="31f7", MODE="666", TAG="causb_dev" diff --git a/hal_psee_plugins/samples/metavision_imx636_facility_casting_sample/CMakeLists.txt b/hal_psee_plugins/samples/metavision_imx636_facility_casting_sample/CMakeLists.txt -index 02f2db2..01b1b19 100644 +index 02f2db2..f7cadcd 100644 --- a/hal_psee_plugins/samples/metavision_imx636_facility_casting_sample/CMakeLists.txt +++ b/hal_psee_plugins/samples/metavision_imx636_facility_casting_sample/CMakeLists.txt -@@ -12,7 +12,9 @@ target_link_libraries(metavision_imx636_facility_casting_sample +@@ -12,7 +12,7 @@ target_link_libraries(metavision_imx636_facility_casting_sample PRIVATE metavision_hal metavision_hal_discovery - metavision_psee_hw_layer -+ # 2023-10-06 Edited by CenturyArks -+ # metavision_psee_hw_layer + metavision_silky_hw_layer Boost::program_options ) diff --git a/hal_psee_plugins/src/boards/treuzell/tz_hw_identification.cpp b/hal_psee_plugins/src/boards/treuzell/tz_hw_identification.cpp -index 940e20a..2a99fd8 100644 +index afc5e0b..9e4ad68 100644 --- a/hal_psee_plugins/src/boards/treuzell/tz_hw_identification.cpp +++ b/hal_psee_plugins/src/boards/treuzell/tz_hw_identification.cpp @@ -26,6 +26,15 @@ @@ -266,7 +243,7 @@ index 940e20a..2a99fd8 100644 namespace Metavision { TzHWIdentification::TzHWIdentification(const std::shared_ptr &plugin_sw_info, -@@ -79,22 +88,67 @@ std::string TzHWIdentification::get_integrator() const { +@@ -71,22 +80,79 @@ std::string TzHWIdentification::get_integrator() const { I_HW_Identification::SystemInfo TzHWIdentification::get_system_info() const { auto infos = I_HW_Identification::get_system_info(); @@ -279,11 +256,21 @@ index 940e20a..2a99fd8 100644 +// infos.insert({icmd_->get_name() + " Release Version", version}); + + bool silkyevcam_flag = false; ++ // 2024-10-01 Edited for vanish SystemId's function ++ int silkyevcam_kind = 0; // 1:VGA, 2:HD, 3:HD Lite + std::string name1 = icmd_->get_name(); -+ if(name1.size() > 10) { ++ if(name1.size() > 17) { + std::transform(name1.begin(), name1.end(), name1.begin(), tolower); + if(strcmp(name1.substr(0, 10).c_str(), "silkyevcam") == 0) { + silkyevcam_flag = true; ++ std::string name2 = name1.substr(11, 6); ++ if(strcmp(name2.c_str(), "gen3.1") == 0) { ++ silkyevcam_kind = 1; ++ } else if(strcmp(name2.c_str(), "hd v03") == 0) { ++ silkyevcam_kind = 2; ++ } else if(strcmp(name2.c_str(), "hd lit") == 0) { ++ silkyevcam_kind = 3; ++ } + } + } + @@ -316,11 +303,10 @@ index 940e20a..2a99fd8 100644 + for (auto dev : devices_) + dev->get_device_info(infos, "device"); + } - -- for (auto dev : devices_) -- dev->get_device_info(infos, "device"); ++ + // 2023-10-06 Append for Gen31 FPGA version -+ if(this->get_system_id() == 40) { ++ // 2024-10-01 Edited for vanish SystemId's function ++ if(silkyevcam_kind == 1) { + uint32_t v1 = 0; + for (auto dev : devices_) { + if(auto fpga_dev = dynamic_cast(dev.get())) { @@ -335,12 +321,15 @@ index 940e20a..2a99fd8 100644 + infos.insert({"System Version", fpga_version}); + } + } + +- for (auto dev : devices_) +- dev->get_device_info(infos, "device"); +// 2023-10-06 Edited by CenturyArks for SilkyEvCam's own output end return infos; } diff --git a/hal_psee_plugins/src/boards/treuzell/tz_libusb_board_command.cpp b/hal_psee_plugins/src/boards/treuzell/tz_libusb_board_command.cpp -index 6a6cba3..add3d53 100644 +index 257cce5..0589fe1 100644 --- a/hal_psee_plugins/src/boards/treuzell/tz_libusb_board_command.cpp +++ b/hal_psee_plugins/src/boards/treuzell/tz_libusb_board_command.cpp @@ -30,6 +30,9 @@ @@ -353,10 +342,10 @@ index 6a6cba3..add3d53 100644 #ifdef USE_JAVA_BINDINGS #include "is_usb_java.h" #endif -@@ -369,5 +372,21 @@ void TzLibUSBBoardCommand::select_early_quirks(libusb_device_descriptor &desc) { - quirks.do_not_set_config = true; +@@ -371,4 +374,21 @@ void TzLibUSBBoardCommand::select_early_quirks(libusb_device_descriptor &desc) { } } + +// 2023-10-06 Edited by CenturyArks for for pixel_mask +bool TzLibUSBBoardCommand::read_pixel_mask_data(int num, int* x, int* y) { + uint32_t data; @@ -373,25 +362,24 @@ index 6a6cba3..add3d53 100644 + } + return ret; +} - ++ } // namespace Metavision diff --git a/hal_psee_plugins/src/boards/utils/psee_libusb.cpp b/hal_psee_plugins/src/boards/utils/psee_libusb.cpp -index edcc012..23d36b5 100644 +index edcc012..ed9e7ed 100644 --- a/hal_psee_plugins/src/boards/utils/psee_libusb.cpp +++ b/hal_psee_plugins/src/boards/utils/psee_libusb.cpp -@@ -12,6 +12,11 @@ - #include "metavision/hal/utils/hal_connection_exception.h" - #include "metavision/psee_hw_layer/boards/utils/psee_libusb.h" +@@ -9,6 +9,10 @@ + * See the License for the specific language governing permissions and limitations under the License. * + **********************************************************************************************************************/ +// 2023-10-06 Edited by CenturyArks for EEPROM Access +#include -+ +#include "devices/others/i2c_eeprom.h" + - namespace Metavision { + #include "metavision/hal/utils/hal_connection_exception.h" + #include "metavision/psee_hw_layer/boards/utils/psee_libusb.h" - const std::error_category &libusb_error_category() { -@@ -140,4 +145,35 @@ void LibUSBDevice::interrupt_transfer(unsigned char endpoint, unsigned char *dat +@@ -140,4 +144,35 @@ void LibUSBDevice::interrupt_transfer(unsigned char endpoint, unsigned char *dat } } @@ -428,7 +416,7 @@ index edcc012..23d36b5 100644 + } // namespace Metavision diff --git a/hal_psee_plugins/src/boards/v4l2/CMakeLists.txt b/hal_psee_plugins/src/boards/v4l2/CMakeLists.txt -index 592ff95..18baa42 100644 +index 8e29b39..1f92a24 100644 --- a/hal_psee_plugins/src/boards/v4l2/CMakeLists.txt +++ b/hal_psee_plugins/src/boards/v4l2/CMakeLists.txt @@ -13,9 +13,9 @@ endif() @@ -445,10 +433,10 @@ index 592ff95..18baa42 100644 target_sources(metavision_psee_hw_layer_obj PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/v4l2_camera_discovery.cpp diff --git a/hal_psee_plugins/src/devices/imx636/imx636_tz_device.cpp b/hal_psee_plugins/src/devices/imx636/imx636_tz_device.cpp -index 9309124..101a7d9 100644 +index f214d7c..ad8f317 100644 --- a/hal_psee_plugins/src/devices/imx636/imx636_tz_device.cpp +++ b/hal_psee_plugins/src/devices/imx636/imx636_tz_device.cpp -@@ -54,6 +54,20 @@ TzImx636::TzImx636(std::shared_ptr cmd, uint32 +@@ -53,6 +53,20 @@ TzImx636::TzImx636(std::shared_ptr cmd, uint32 iph_mirror_control(true); std::this_thread::sleep_for(std::chrono::milliseconds(1)); lifo_control(true, true, true); @@ -526,10 +514,10 @@ index b1b5677..bf9e997 100644 -endif(HAS_V4L2) diff --git a/hal_psee_plugins/src/plugin/silky_common.cpp b/hal_psee_plugins/src/plugin/silky_common.cpp new file mode 100644 -index 0000000..c443c90 +index 0000000..eae5ca2 --- /dev/null +++ b/hal_psee_plugins/src/plugin/silky_common.cpp -@@ -0,0 +1,46 @@ +@@ -0,0 +1,62 @@ +/********************************************************************************************************************** + * Copyright (c) Prophesee S.A. * + * Copyright (c) 2024 CenturyArks Co.,Ltd. * @@ -541,29 +529,34 @@ index 0000000..c443c90 + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and limitations under the License. * + **********************************************************************************************************************/ -+#if !defined(__ANDROID__) || defined(ANDROID_USES_LIBUSB) -+#include "boards/treuzell/tz_camera_discovery.h" -+#include "metavision/psee_hw_layer/boards/treuzell/tz_libusb_board_command.h" -+#endif -+#include "boards/rawfile/psee_file_discovery.h" -+#include "devices/utils/device_system_id.h" ++#include ++ +#include "metavision/hal/plugin/plugin.h" +#include "metavision/hal/plugin/plugin_entrypoint.h" -+#include "metavision/hal/utils/hal_software_info.h" +#include "plugin/psee_plugin.h" + -+void initialize_plugin(void *plugin_ptr) { -+ using namespace Metavision; ++using namespace Metavision; + -+ Plugin &plugin = plugin_cast(plugin_ptr); -+ // 2023-12-13 Edited by CenturyArks for SilkyEvCam -+ initialize_psee_plugin(plugin, "CenturyArks"); ++struct PluginDiscovery { ++ static std::vector> plugin_discovery; ++ PluginDiscovery(std::function f) { ++ plugin_discovery.push_back(f); ++ } + ++ static void discover(Plugin &plugin) { ++ for (const auto &f : plugin_discovery) { ++ f(plugin); ++ } ++ } ++}; ++std::vector> PluginDiscovery::plugin_discovery; + +#if !defined(__ANDROID__) || defined(ANDROID_USES_LIBUSB) ++#include "boards/fx3/fx3_camera_discovery.h" ++#include "boards/treuzell/tz_camera_discovery.h" ++PluginDiscovery register_treuzell([](Plugin &plugin) { + auto tz_cam_discovery = std::make_unique(); + // Register the known USB vendor ID, with the subclass used for Treuzell -+ + // 2023-12-13 Edited by CenturyArks for SilkyEvCam + tz_cam_discovery->add_usb_id(0x31f7, 0x0002, 0x19); + tz_cam_discovery->add_usb_id(0x31f7, 0x0003, 0x19); @@ -571,11 +564,19 @@ index 0000000..c443c90 + + // Register live camera discoveries + auto &tz_disc = plugin.add_camera_discovery(std::move(tz_cam_discovery)); ++}); ++#endif // !defined(__ANDROID__) || defined(ANDROID_USES_LIBUSB) + -+#endif // !defined(__ANDROID__) + ++#include "boards/rawfile/psee_file_discovery.h" ++PluginDiscovery register_psee_file([](Plugin &plugin) { + auto &file_disc = plugin.add_file_discovery(std::make_unique()); ++}); ++ ++void initialize_plugin(void *plugin_ptr) { ++ Plugin &plugin = plugin_cast(plugin_ptr); ++ // 2023-12-13 Edited by CenturyArks for SilkyEvCam ++ // initialize_psee_plugin(plugin); ++ initialize_psee_plugin(plugin, "CenturyArks"); ++ PluginDiscovery::discover(plugin); +} --- -2.34.1 -