From e81492c20d0ec2e8848834d2e1873999d60d66b0 Mon Sep 17 00:00:00 2001 From: Emanuele Ruffaldi Date: Wed, 18 Oct 2017 18:23:04 +0200 Subject: [PATCH 1/2] added led control via ONI_DEVICE_PROPERTY_PLAYBACK_SPEED --- OpenNI2-FreenectDriver/src/DeviceDriver.cpp | 26 ++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/OpenNI2-FreenectDriver/src/DeviceDriver.cpp b/OpenNI2-FreenectDriver/src/DeviceDriver.cpp index f52586a5..a3db83e5 100644 --- a/OpenNI2-FreenectDriver/src/DeviceDriver.cpp +++ b/OpenNI2-FreenectDriver/src/DeviceDriver.cpp @@ -120,7 +120,6 @@ namespace FreenectDriver case ONI_DEVICE_PROPERTY_SERIAL_NUMBER: // string case ONI_DEVICE_PROPERTY_ERROR_STATE: // ? // files - case ONI_DEVICE_PROPERTY_PLAYBACK_SPEED: // float case ONI_DEVICE_PROPERTY_PLAYBACK_REPEAT_ENABLED: // OniBool // xn case XN_MODULE_PROPERTY_USB_INTERFACE: // XnSensorUsbInterface @@ -139,6 +138,14 @@ namespace FreenectDriver } *(static_cast(data)) = depth->getImageRegistrationMode(); return ONI_STATUS_OK; + case ONI_DEVICE_PROPERTY_PLAYBACK_SPEED: + if (*pDataSize != sizeof(float)) + { + LogError("Unexpected size of ONI_DEVICE_PROPERTY_PLAYBACK_SPEED"); + return ONI_STATUS_ERROR; + } + *(static_cast(data)) = 1; + break; } } @@ -153,7 +160,6 @@ namespace FreenectDriver case ONI_DEVICE_PROPERTY_SERIAL_NUMBER: // string case ONI_DEVICE_PROPERTY_ERROR_STATE: // ? // files - case ONI_DEVICE_PROPERTY_PLAYBACK_SPEED: // float case ONI_DEVICE_PROPERTY_PLAYBACK_REPEAT_ENABLED: // OniBool // xn case XN_MODULE_PROPERTY_USB_INTERFACE: // XnSensorUsbInterface @@ -178,7 +184,21 @@ namespace FreenectDriver return ONI_STATUS_ERROR; } return depth->setImageRegistrationMode(*(static_cast(data))); - } + case ONI_DEVICE_PROPERTY_PLAYBACK_SPEED: + if (dataSize != sizeof(float)) + { + LogError("Unexpected size for setting ONI_DEVICE_PROPERTY_PLAYBACK_SPEED"); + return ONI_STATUS_ERROR; + try { + setLed((freenect_led_options)*(static_cast(data))); + return ONI_STATUS_OK; + } + catch(...) + { + return ONI_STATUS_ERROR; +} + }} + } OniBool isCommandSupported(int commandId) From 054907bad64ef5eaa365386e9fb48a444e057011 Mon Sep 17 00:00:00 2001 From: andreaskargakos Date: Wed, 8 Nov 2017 12:28:29 +0100 Subject: [PATCH 2/2] patch fix --- OpenNI2-FreenectDriver/CMakeLists.txt | 5 +--- OpenNI2-FreenectDriver/src/DeviceDriver.cpp | 27 ++++++++++++++++----- examples/tiltdemo.c | 4 +-- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/OpenNI2-FreenectDriver/CMakeLists.txt b/OpenNI2-FreenectDriver/CMakeLists.txt index 483c3529..9131c2c2 100644 --- a/OpenNI2-FreenectDriver/CMakeLists.txt +++ b/OpenNI2-FreenectDriver/CMakeLists.txt @@ -2,8 +2,6 @@ # OpenNI2-FreenectDriver ###################################################################################### -cmake_minimum_required(VERSION 3.1.0) - file(GLOB HEADERS src/*.hpp src/*.h) file(GLOB SOURCES src/*.cpp) add_library(FreenectDriver SHARED ${HEADERS} ${SOURCES}) @@ -17,12 +15,11 @@ set_target_properties(FreenectDriver PROPERTIES OUTPUT_NAME FreenectDriver) add_definitions(-DPROJECT_VER="${PROJECT_VER}") - +add_definitions(--std=c++11) include_directories(extern/OpenNI-Linux-x64-2.2.0.33/Include) include_directories(${PROJECT_SOURCE_DIR}/src) include_directories(${PROJECT_SOURCE_DIR}/wrappers/cpp) -target_compile_features(FreenectDriver PUBLIC cxx_constexpr) target_link_libraries(FreenectDriver freenectstatic ${MATH_LIB}) diff --git a/OpenNI2-FreenectDriver/src/DeviceDriver.cpp b/OpenNI2-FreenectDriver/src/DeviceDriver.cpp index a3db83e5..6bdd272e 100644 --- a/OpenNI2-FreenectDriver/src/DeviceDriver.cpp +++ b/OpenNI2-FreenectDriver/src/DeviceDriver.cpp @@ -30,12 +30,18 @@ namespace FreenectDriver private: ColorStream* color; DepthStream* depth; + bool ledchanged = false; + freenect_led_options nextled ; - // for Freenect::FreenectDevice - void DepthCallback(void* data, uint32_t timestamp) { + void DepthCallback(void* data, uint32_t timestamp) { depth->buildFrame(data, timestamp); } void VideoCallback(void* data, uint32_t timestamp) { + if(ledchanged) + { + printf("LED change in VideoCallback %d\n",(int)nextled); + ledchanged = false; + } color->buildFrame(data, timestamp); } @@ -185,19 +191,28 @@ namespace FreenectDriver } return depth->setImageRegistrationMode(*(static_cast(data))); case ONI_DEVICE_PROPERTY_PLAYBACK_SPEED: +printf("ONI_DEVICE_PROPERTY_PLAYBACK_SPEED hack led \n"); if (dataSize != sizeof(float)) { - LogError("Unexpected size for setting ONI_DEVICE_PROPERTY_PLAYBACK_SPEED"); + + LogError("Unexpected size for setting ONI_DEVICE_PROPERTY_PLAYBACK_SPEED as led "); return ONI_STATUS_ERROR; + } try { - setLed((freenect_led_options)*(static_cast(data))); + nextled = (freenect_led_options)*(static_cast(data)); + //ledchanged = true; + setLed(nextled); + updateState(); + + printf("ONI_DEVICE_PROPERTY_PLAYBACK_SPEED hack led value %d\n",(int)nextled); return ONI_STATUS_OK; } catch(...) { + LogError("ONI_DEVICE_PROPERTY_PLAYBACK_SPEED aka LED error"); return ONI_STATUS_ERROR; } - }} + } } @@ -252,7 +267,7 @@ namespace FreenectDriver WriteMessage("Using libfreenect v" + to_string(PROJECT_VER)); freenect_set_log_level(m_ctx, FREENECT_LOG_DEBUG); - freenect_select_subdevices(m_ctx, FREENECT_DEVICE_CAMERA); // OpenNI2 doesn't use MOTOR or AUDIO + freenect_select_subdevices(m_ctx, (freenect_device_flags)(FREENECT_DEVICE_MOTOR | FREENECT_DEVICE_CAMERA)); // OpenNI2 doesn't use MOTOR or AUDIO DriverServices = &getServices(); } ~Driver() { shutdown(); } diff --git a/examples/tiltdemo.c b/examples/tiltdemo.c index 9848a448..ef0a730e 100644 --- a/examples/tiltdemo.c +++ b/examples/tiltdemo.c @@ -93,7 +93,7 @@ int main(int argc, char *argv[]) while (1) { // Pick a random tilt and a random LED state - freenect_led_options led = (freenect_led_options) (rand() % 6); // explicit cast + freenect_led_options led = (freenect_led_options) (argc == 1 ? 0: 1); // explicit cast int tilt = (rand() % 30)-15; freenect_raw_tilt_state *state = 0; double dx, dy, dz; @@ -112,7 +112,7 @@ int main(int argc, char *argv[]) printf("led[%d] tilt[%d] accel[%lf,%lf,%lf]\n", led, tilt, dx,dy,dz); - sleep(3); + break; } }