Added first quick and dirty implementation of own server (HyperionDispmanX.cpp).

This commit is contained in:
T. van der Zwan 2013-08-01 17:08:58 +02:00
parent a65305dbdb
commit f6672499f5
12 changed files with 167 additions and 67 deletions

View File

@ -36,3 +36,4 @@ configure_file(config/hyperion.schema.json ${LIBRARY_OUTPUT_PATH} @ONLY)
add_subdirectory(dependencies) add_subdirectory(dependencies)
add_subdirectory(libsrc) add_subdirectory(libsrc)
add_subdirectory(src) add_subdirectory(src)
add_subdirectory(test)

23
cmake/FindBCM.cmake Normal file
View File

@ -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)

View File

@ -11,9 +11,6 @@
# None of the above will be defined unles zlib can be found. # None of the above will be defined unles zlib can be found.
# PNG depends on Zlib # 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) INCLUDE(FindZLIB)

View File

@ -15,3 +15,6 @@ add_library(hyperion
${CURRENT_SOURCE_DIR}/Hyperion.cpp ${CURRENT_SOURCE_DIR}/Hyperion.cpp
${CURRENT_SOURCE_DIR}/ImageToLedsMap.cpp ${CURRENT_SOURCE_DIR}/ImageToLedsMap.cpp
) )
target_link_libraries(hyperion
hyperion-utils)

View File

@ -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 add_executable(WriteConfig
WriteConfig.cpp) 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 add_executable(boblight-dispmanx
boblight-dispmanx.cpp boblight-dispmanx.cpp
flagmanager.h flagmanager.h
@ -58,31 +17,36 @@ add_executable(boblight-dispmanx
timeutils.h timeutils.h
timeutils.cpp) timeutils.cpp)
FIND_PATH(VC_INCLUDE_DIR # Find the BCM-package (VC control)
bcm_host.h find_package(BCM REQUIRED)
/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}")
#SET(VC_LIBS include_directories(${BCM_INCLUDE_DIRS})
# /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})
target_link_libraries(boblight-dispmanx target_link_libraries(boblight-dispmanx
# hyperion-png # hyperion-png
bob2hyperion 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)

75
src/HyperionDispmanX.cpp Normal file
View File

@ -0,0 +1,75 @@
// VC includes
#include <bcm_host.h>
// Hyperion includes
#include <hyperion/Hyperion.h>
#include <json/json.h>
#include <utils/jsonschema/JsonFactory.h>
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<void*>(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;
}

37
test/CMakeLists.txt Normal file
View File

@ -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)