diff --git a/CMakeLists.txt b/CMakeLists.txt index 72f48018..d3d0d704 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,3 +36,4 @@ configure_file(config/hyperion.schema.json ${LIBRARY_OUTPUT_PATH} @ONLY) add_subdirectory(dependencies) add_subdirectory(libsrc) add_subdirectory(src) +add_subdirectory(test) diff --git a/cmake/FindBCM.cmake b/cmake/FindBCM.cmake new file mode 100644 index 00000000..116dfbca --- /dev/null +++ b/cmake/FindBCM.cmake @@ -0,0 +1,23 @@ +# - Find the native BCM includes and library +# + +# This module defines +# BCM_INCLUDE_DIR, where to find png.h, etc. +# BCM_LIBRARIES, the libraries to link against to use PNG. +# BCM_FOUND, If false, do not try to use PNG. +# + +FIND_PATH(BCM_INCLUDE_DIR + bcm_host.h + /usr/include + /usr/local/include + /opt/vc/include) + +SET(BCM_INCLUDE_DIRS + ${BCM_INCLUDE_DIR} + ${BCM_INCLUDE_DIR}/interface/vcos/pthreads + ${BCM_INCLUDE_DIR}/interface/vmcs_host/linux) + +FIND_LIBRARY(BCM_LIBS + NAMES bcm_host + PATHS /usr/lib /usr/local/lib /opt/vc/lib) diff --git a/cmake/FindPNG.cmake b/cmake/FindPNG.cmake index 614b4c04..dd00fa5e 100644 --- a/cmake/FindPNG.cmake +++ b/cmake/FindPNG.cmake @@ -11,9 +11,6 @@ # None of the above will be defined unles zlib can be found. # PNG depends on Zlib # -# Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. -# See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. - INCLUDE(FindZLIB) diff --git a/libsrc/hyperion/CMakeLists.txt b/libsrc/hyperion/CMakeLists.txt index 29b8da41..7ab851b4 100644 --- a/libsrc/hyperion/CMakeLists.txt +++ b/libsrc/hyperion/CMakeLists.txt @@ -15,3 +15,6 @@ add_library(hyperion ${CURRENT_SOURCE_DIR}/Hyperion.cpp ${CURRENT_SOURCE_DIR}/ImageToLedsMap.cpp ) + +target_link_libraries(hyperion + hyperion-utils) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 784a2361..255b1a7b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,48 +1,7 @@ -# Find the libPNG -find_package(PNG REQUIRED QUIET) - -# Add additional includes dirs -include_directories(${PNG_INCLUDE_DIR}) - -# Add the simple test executable 'TestSpi' -add_executable(TestSpi - TestSpi.cpp) - -target_link_libraries(TestSpi - hyperion - hyperion-utils) - -add_executable(TestHyperionPng - TestHyperionPng.cpp) - -target_link_libraries(TestHyperionPng - hyperion-png) - add_executable(WriteConfig WriteConfig.cpp) -add_executable(TestConfigFile - TestConfigFile.cpp) - -target_link_libraries(TestConfigFile - hyperion-utils - hyperion) - -add_executable(ViewPng - ViewPng.cpp) - -target_link_libraries(ViewPng - hyperion - hyperion-utils - ${PNG_LIBRARIES}) - -add_executable(Test2BobLight - Test2BobLight.cpp) - -target_link_libraries(Test2BobLight - bob2hyperion) - add_executable(boblight-dispmanx boblight-dispmanx.cpp flagmanager.h @@ -58,31 +17,36 @@ add_executable(boblight-dispmanx timeutils.h timeutils.cpp) -FIND_PATH(VC_INCLUDE_DIR - bcm_host.h - /usr/include - /usr/local/include - /opt/vc/include) -SET(VC_INCLUDE_DIRS - ${VC_INCLUDE_DIR} - ${VC_INCLUDE_DIR}/interface/vcos/pthreads - ${VC_INCLUDE_DIR}/interface/vmcs_host/linux) -FIND_LIBRARY(VC_LIBS - NAMES bcm_host - PATHS /usr/lib /usr/local/lib /opt/vc/lib) -message("{VC_LIBS} = ${VC_LIBS}") +# Find the BCM-package (VC control) +find_package(BCM REQUIRED) -#SET(VC_LIBS -# /home/pi/.xbmc-current/xbmc-bin/lib/xbmc/system/libbcm_host.so) -# /home/pi/.xbmc-current/xbmc-bin/lib/xbmc/system/libGLESv2.so -# /home/pi/.xbmc-current/xbmc-bin/lib/xbmc/system/libEGL.so -# /home/pi/.xbmc-current/xbmc-bin/lib/xbmc/system/libopenmaxil.so -# /home/pi/.xbmc-current/xbmc-bin/lib/xbmc/system/libvcos.so -# /home/pi/.xbmc-current/xbmc-bin/lib/xbmc/system/libvchiq_arm.so) - -include_directories(${VC_INCLUDE_DIRS}) +include_directories(${BCM_INCLUDE_DIRS}) target_link_libraries(boblight-dispmanx # hyperion-png bob2hyperion - ${VC_LIBS}) + ${BCM_LIBS}) + +add_executable(HyperionDispmanX + HyperionDispmanX.cpp) + +target_link_libraries(HyperionDispmanX + hyperion + ${BCM_LIBS}) + + +# Find the libPNG +find_package(PNG QUIET) + +if(PNG_FOUND) + # Add additional includes dirs + include_directories(${PNG_INCLUDE_DIR}) + + add_executable(ViewPng + ViewPng.cpp) + + target_link_libraries(ViewPng + hyperion + hyperion-utils + ${PNG_LIBRARIES}) +endif(PNG_FOUND) diff --git a/src/HyperionDispmanX.cpp b/src/HyperionDispmanX.cpp new file mode 100644 index 00000000..1d64cca1 --- /dev/null +++ b/src/HyperionDispmanX.cpp @@ -0,0 +1,75 @@ + +// VC includes +#include + +// Hyperion includes +#include + +#include +#include + +int main(int /*argc*/, char** /*argv*/) +{ + const char* homeDir = getenv("RASPILIGHT_HOME"); + if (!homeDir) + { + homeDir = "/etc"; + } + std::cout << "RASPILIGHT HOME DIR: " << homeDir << std::endl; + + const std::string schemaFile = std::string(homeDir) + "/hyperion.schema.json"; + const std::string configFile = std::string(homeDir) + "/hyperion.config.json"; + + Json::Value raspiConfig; + if (JsonFactory::load(schemaFile, configFile, raspiConfig) < 0) + { + std::cerr << "UNABLE TO LOAD CONFIGURATION" << std::endl; + return -1; + } + Hyperion hyperion(raspiConfig); + + const unsigned width = 64; + const unsigned height = 64; + + hyperion.setInputSize(width, height); + + volatile bool running = true; + + // Open the connection to the displaydisplay + DISPMANX_DISPLAY_HANDLE_T display = vc_dispmanx_display_open(0); + DISPMANX_MODEINFO_T info; + int ret = vc_dispmanx_display_get_info(display, &info); + assert(ret == 0); + + // Create the resources for capturing image + uint32_t vc_image_ptr; + DISPMANX_RESOURCE_HANDLE_T resource = vc_dispmanx_resource_create( + VC_IMAGE_RGB888, + width, + height, + &vc_image_ptr); + assert(resource); + + VC_RECT_T rectangle; + vc_dispmanx_rect_set(&rectangle, 0, 0, width, height); + + RgbImage* image_ptr = &(hyperion.image()); + void* image_vp = reinterpret_cast(image_ptr); + const unsigned imageSize_bytes = width*height*3; + + timespec updateInterval; + updateInterval.tv_sec = 0; + updateInterval.tv_nsec = 100000000000; + + while(running) + { + vc_dispmanx_snapshot(display, resource, VC_IMAGE_ROT0); + vc_dispmanx_resource_read_data(resource, &rectangle, image_vp, imageSize_bytes); + + hyperion.commit(); + + nanosleep(&updateInterval, NULL); + } + + return 0; +} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 00000000..97b317d1 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,37 @@ + +# Add the simple test executable 'TestSpi' +add_executable(TestSpi + TestSpi.cpp) + +target_link_libraries(TestSpi + hyperion + hyperion-utils) + +add_executable(TestConfigFile + TestConfigFile.cpp) + +target_link_libraries(TestConfigFile + hyperion-utils + hyperion) + +add_executable(Test2BobLight + Test2BobLight.cpp) + +target_link_libraries(Test2BobLight + bob2hyperion) + + +# Find the libPNG +find_package(PNG REQUIRED QUIET) + +# Add additional includes dirs +include_directories(${PNG_INCLUDE_DIR}) + +if(PNG_FOUND) + + add_executable(TestHyperionPng + TestHyperionPng.cpp) + + target_link_libraries(TestHyperionPng + hyperion-png) +endif(PNG_FOUND) diff --git a/src/Test2BobLight.cpp b/test/Test2BobLight.cpp similarity index 100% rename from src/Test2BobLight.cpp rename to test/Test2BobLight.cpp diff --git a/src/TestBoblightOrig.cpp b/test/TestBoblightOrig.cpp similarity index 100% rename from src/TestBoblightOrig.cpp rename to test/TestBoblightOrig.cpp diff --git a/src/TestConfigFile.cpp b/test/TestConfigFile.cpp similarity index 100% rename from src/TestConfigFile.cpp rename to test/TestConfigFile.cpp diff --git a/src/TestHyperionPng.cpp b/test/TestHyperionPng.cpp similarity index 100% rename from src/TestHyperionPng.cpp rename to test/TestHyperionPng.cpp diff --git a/src/TestSpi.cpp b/test/TestSpi.cpp similarity index 100% rename from src/TestSpi.cpp rename to test/TestSpi.cpp