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 f52586a5..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); } @@ -120,7 +126,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 +144,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 +166,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 +190,30 @@ namespace FreenectDriver return ONI_STATUS_ERROR; } 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 as led "); + return ONI_STATUS_ERROR; + } + try { + 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; +} } + } OniBool isCommandSupported(int commandId) @@ -232,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; } }