diff -Nru vdr-plugin-boblight-0.0.1+git20131209/Makefile vdr-plugin-boblight-0.0.2-4-ged814f4/Makefile --- vdr-plugin-boblight-0.0.1+git20131209/Makefile 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/Makefile 2013-12-29 17:56:05.000000000 +0000 @@ -11,7 +11,8 @@ ### The version number of this plugin (taken from the main source file): -VERSION = $(shell grep 'static const char \*VERSION *=' DVBAPI.h | awk '{ print $$6 }' | sed -e 's/[";]//g') +#VERSION = $(shell grep 'static const char \*VERSION *=' vdrboblight.h | awk '{ print $$6 }' | sed -e 's/[";]//g') +VERSION := $(shell git describe --abbrev=4 --dirty --always) ### The directory environment: @@ -78,10 +79,12 @@ endif DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"' +### Define GITVERSION used in vdrboblight.c +DEFINES += -DGITVERSION='"$(VERSION)"' ### The object files (add further files here): -OBJS = $(PLUGIN).o ambithread.o ambiservice.o boblightservice.o common.o config.o +OBJS = $(patsubst %.c,%.o,$(wildcard *.c)) ### The main target: diff -Nru vdr-plugin-boblight-0.0.1+git20131209/ambiservice.c vdr-plugin-boblight-0.0.2-4-ged814f4/ambiservice.c --- vdr-plugin-boblight-0.0.1+git20131209/ambiservice.c 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/ambiservice.c 2013-12-29 17:56:05.000000000 +0000 @@ -28,9 +28,7 @@ "atmo", "fixed color", "black", - "detached", - - 0 + "detached" }; const char* cAmbiService::toName(ViewMode vm) diff -Nru vdr-plugin-boblight-0.0.1+git20131209/ambiservice.h vdr-plugin-boblight-0.0.2-4-ged814f4/ambiservice.h --- vdr-plugin-boblight-0.0.1+git20131209/ambiservice.h 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/ambiservice.h 2013-12-29 17:56:05.000000000 +0000 @@ -47,4 +47,4 @@ static const char* viewModes[]; }; -#endif // __SEDU_SERVICE_H +#endif // __AMBI_SERVICE_H diff -Nru vdr-plugin-boblight-0.0.1+git20131209/ambithread.h vdr-plugin-boblight-0.0.2-4-ged814f4/ambithread.h --- vdr-plugin-boblight-0.0.1+git20131209/ambithread.h 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/ambithread.h 2013-12-29 17:56:05.000000000 +0000 @@ -16,7 +16,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - +#pragma once #include #include diff -Nru vdr-plugin-boblight-0.0.1+git20131209/boblightservice.c vdr-plugin-boblight-0.0.2-4-ged814f4/boblightservice.c --- vdr-plugin-boblight-0.0.1+git20131209/boblightservice.c 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/boblightservice.c 2013-12-29 17:56:05.000000000 +0000 @@ -20,7 +20,7 @@ #include #define BOBLIGHT_DLOPEN -#include "lib/boblight.h" +#include #include "boblightservice.h" cBoblight::cBoblight() diff -Nru vdr-plugin-boblight-0.0.1+git20131209/config.h vdr-plugin-boblight-0.0.2-4-ged814f4/config.h --- vdr-plugin-boblight-0.0.1+git20131209/config.h 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/config.h 2013-12-29 17:56:05.000000000 +0000 @@ -48,13 +48,14 @@ // technical - ViewMode viewMode; + int viewMode; + int startupViewMode; int fixedR; int fixedG; int fixedB; int showMainmenu; //bool - Cinebars detectCineBars; + int detectCineBars; int loglevel; diff -Nru vdr-plugin-boblight-0.0.1+git20131209/debian/changelog vdr-plugin-boblight-0.0.2-4-ged814f4/debian/changelog --- vdr-plugin-boblight-0.0.1+git20131209/debian/changelog 2013-12-29 12:12:22.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/debian/changelog 2013-12-30 09:30:42.000000000 +0000 @@ -1,3 +1,9 @@ +vdr-plugin-boblight (0.0.2-4-ged814f4-0yavdr0~precise) precise; urgency=medium + + * new upstream snapshot + + -- Lars Hanisch Mon, 30 Dec 2013 10:30:21 +0100 + vdr-plugin-boblight (0.0.1+git20131209-0yavdr0~precise) precise; urgency=medium * new upstream snapshot diff -Nru vdr-plugin-boblight-0.0.1+git20131209/debian/control vdr-plugin-boblight-0.0.2-4-ged814f4/debian/control --- vdr-plugin-boblight-0.0.1+git20131209/debian/control 2013-12-29 12:13:53.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/debian/control 2013-12-30 19:06:32.000000000 +0000 @@ -2,9 +2,9 @@ Section: video Priority: extra Maintainer: Lars Hanisch -Build-Depends: debhelper (>= 8), vdr-dev (>= 2.0.0), pkg-config +Build-Depends: debhelper (>= 8), vdr-dev (>= 2.0.0), pkg-config, libboblight-dev Standards-Version: 3.9.1 -Homepage: https://github.com/flensrocker/vdr-plugin-boblight +Homepage: http://projects.vdr-developer.org/projects/plg-boblight Package: vdr-plugin-boblight Architecture: any diff -Nru vdr-plugin-boblight-0.0.1+git20131209/debian/copyright vdr-plugin-boblight-0.0.2-4-ged814f4/debian/copyright --- vdr-plugin-boblight-0.0.1+git20131209/debian/copyright 2013-12-29 12:15:30.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/debian/copyright 2013-12-30 18:25:55.000000000 +0000 @@ -1,5 +1,5 @@ Upstream Homepage: - https://github.com/chriszero/vdr-plugin-boblight + http://projects.vdr-developer.org/projects/plg-boblight Upstream Author(s): Christian Völlinger diff -Nru vdr-plugin-boblight-0.0.1+git20131209/lib/boblight-functions.h vdr-plugin-boblight-0.0.2-4-ged814f4/lib/boblight-functions.h --- vdr-plugin-boblight-0.0.1+git20131209/lib/boblight-functions.h 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/lib/boblight-functions.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -/* - * boblight - * Copyright (C) Bob 2009 - * - * boblight is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * boblight is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -//these definitions can be expanded to make normal prototypes, or functionpointers and dlsym lines - -BOBLIGHT_FUNCTION(void*, boblight_init, ()); -BOBLIGHT_FUNCTION(void, boblight_destroy, (void* vpboblight)); - -BOBLIGHT_FUNCTION(int, boblight_connect, (void* vpboblight, const char* address, int port, int usectimeout)); -BOBLIGHT_FUNCTION(int, boblight_setpriority, (void* vpboblight, int priority)); -BOBLIGHT_FUNCTION(const char*, boblight_geterror, (void* vpboblight)); -BOBLIGHT_FUNCTION(int, boblight_getnrlights, (void* vpboblight)); -BOBLIGHT_FUNCTION(const char*, boblight_getlightname, (void* vpboblight, int lightnr)); - -BOBLIGHT_FUNCTION(int, boblight_getnroptions, (void* vpboblight)); -BOBLIGHT_FUNCTION(const char*, boblight_getoptiondescript,(void* vpboblight, int option)); -BOBLIGHT_FUNCTION(int, boblight_setoption, (void* vpboblight, int lightnr, const char* option)); -BOBLIGHT_FUNCTION(int, boblight_getoption, (void* vpboblight, int lightnr, const char* option, const char** output)); - -BOBLIGHT_FUNCTION(void, boblight_setscanrange, (void* vpboblight, int width, int height)); - -BOBLIGHT_FUNCTION(int, boblight_addpixel, (void* vpboblight, int lightnr, int* rgb)); -BOBLIGHT_FUNCTION(void, boblight_addpixelxy, (void* vpboblight, int x, int y, int* rgb)); - -BOBLIGHT_FUNCTION(int, boblight_sendrgb, (void* vpboblight, int sync, int* outputused)); -BOBLIGHT_FUNCTION(int, boblight_ping, (void* vpboblight, int* outputused)); diff -Nru vdr-plugin-boblight-0.0.1+git20131209/lib/boblight.cpp vdr-plugin-boblight-0.0.2-4-ged814f4/lib/boblight.cpp --- vdr-plugin-boblight-0.0.1+git20131209/lib/boblight.cpp 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/lib/boblight.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -/* - * boblight - * Copyright (C) Bob 2009 - * - * boblight is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * boblight is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#include "boblight.h" -#include "boblight_client.h" - -using namespace boblight; - -//C wrapper for C++ class - -void* boblight_init() -{ - CBoblight* boblight = new CBoblight; - return reinterpret_cast(boblight); -} - -void boblight_destroy(void* vpboblight) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - delete boblight; -} - -int boblight_connect(void* vpboblight, const char* address, int port, int usectimeout) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - return boblight->Connect(address, port, usectimeout); -} - -int boblight_setpriority(void* vpboblight, int priority) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - return boblight->SetPriority(priority); -} - -const char* boblight_geterror(void* vpboblight) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - return boblight->GetError(); -} - -int boblight_getnrlights(void* vpboblight) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - return boblight->GetNrLights(); -} - -const char* boblight_getlightname(void* vpboblight, int lightnr) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - return boblight->GetLightName(lightnr); -} - -int boblight_getnroptions(void* vpboblight) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - return boblight->GetNrOptions(); -} - -const char* boblight_getoptiondescript(void* vpboblight, int option) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - return boblight->GetOptionDescription(option); -} - -int boblight_setoption(void* vpboblight, int lightnr, const char* option) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - return boblight->SetOption(lightnr, option); -} - -int boblight_getoption(void* vpboblight, int lightnr, const char* option, const char** output) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - return boblight->GetOption(lightnr, option, output); -} - -void boblight_setscanrange(void* vpboblight, int width, int height) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - boblight->SetScanRange(width, height); -} - -int boblight_addpixel(void* vpboblight, int lightnr, int* rgb) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - return boblight->AddPixel(lightnr, rgb); -} - -void boblight_addpixelxy(void* vpboblight, int x, int y, int* rgb) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - boblight->AddPixel(rgb, x, y); -} - -int boblight_sendrgb(void* vpboblight, int sync, int* outputused) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - return boblight->SendRGB(sync, outputused); -} - -int boblight_ping(void* vpboblight, int* outputused) -{ - CBoblight* boblight = reinterpret_cast(vpboblight); - return boblight->Ping(outputused, true); -} diff -Nru vdr-plugin-boblight-0.0.1+git20131209/lib/boblight.h vdr-plugin-boblight-0.0.2-4-ged814f4/lib/boblight.h --- vdr-plugin-boblight-0.0.1+git20131209/lib/boblight.h 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/lib/boblight.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,103 +0,0 @@ -/* - * boblight - * Copyright (C) Bob 2009 - * - * boblight is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * boblight is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -//if you define BOBLIGHT_DLOPEN, all boblight functions are defined as pointers -//you can then call boblight_loadlibrary to load libboblight with dlopen and the function pointers with dlsym -//if you pass NULL to boblight_loadlibrary's first argument, the default filename for libboblight is used -//if boblight_loadlibrary returns NULL, dlopen and dlsym went ok, if not it returns a char* from dlerror - -//if you want to use the boblight functions from multiple files, you can define BOBLIGHT_DLOPEN in one file, -//and define BOBLIGHT_DLOPEN_EXTERN in the other file, the functionpointers are then defined as extern - -#ifndef LIBBOBLIGHT -#define LIBBOBLIGHT - - #if !defined(BOBLIGHT_DLOPEN) && !defined(BOBLIGHT_DLOPEN_EXTERN) - - #ifdef __cplusplus - extern "C" { - #endif - - //generate normal prototypes - #define BOBLIGHT_FUNCTION(returnvalue, name, arguments) returnvalue name arguments - #include "boblight-functions.h" - #undef BOBLIGHT_FUNCTION - - #ifdef __cplusplus - } - #endif - - #elif defined(BOBLIGHT_DLOPEN) - - #include - #include - - //generate function pointers - #define BOBLIGHT_FUNCTION(returnvalue, name, arguments) returnvalue (* name ) arguments = NULL - #include "boblight-functions.h" - #undef BOBLIGHT_FUNCTION - - #ifdef __cplusplus - #define BOBLIGHT_CAST(value) reinterpret_cast - #else - #define BOBLIGHT_CAST(value) (value) - #endif - - //gets a functionpointer from dlsym, and returns char* from dlerror if it didn't work - #define BOBLIGHT_FUNCTION(returnvalue, name, arguments) \ - name = BOBLIGHT_CAST(returnvalue (*) arguments)(dlsym(p_boblight, #name)); \ - { char* error = dlerror(); if (error) return error; } - - void* p_boblight = NULL; //where we put the lib - - //load function pointers - char* boblight_loadlibrary(const char* filename) - { - if (filename == NULL) - filename = "libboblight.so"; - - if (p_boblight != NULL) - { - dlclose(p_boblight); - p_boblight = NULL; - } - - p_boblight = dlopen(filename, RTLD_NOW); - if (p_boblight == NULL) - return dlerror(); - - //generate dlsym lines - #include "boblight-functions.h" - - return NULL; - } - #undef BOBLIGHT_FUNCTION - #undef BOBLIGHT_CAST - - //you can define BOBLIGHT_DLOPEN_EXTERN when you load the library in another file - #elif defined(BOBLIGHT_DLOPEN_EXTERN) - - extern char* boblight_loadlibrary(const char* filename); - extern void* p_boblight; - #define BOBLIGHT_FUNCTION(returnvalue, name, arguments) extern returnvalue (* name ) arguments - #include "boblight-functions.h" - #undef BOBLIGHT_FUNCTION - - #endif //BOBLIGHT_DLOPEN_EXTERN -#endif //LIBBOBLIGHT - diff -Nru vdr-plugin-boblight-0.0.1+git20131209/lib/boblight_client.cpp vdr-plugin-boblight-0.0.2-4-ged814f4/lib/boblight_client.cpp --- vdr-plugin-boblight-0.0.1+git20131209/lib/boblight_client.cpp 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/lib/boblight_client.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,704 +0,0 @@ -/* - * boblight - * Copyright (C) Bob 2009 - * - * boblight is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * boblight is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - - -#include "util/inclstdint.h" - -#include -#include //debug -#include - -#include "boblight_client.h" -#include "util/misc.h" -#include "util/timeutils.h" -#include "protocolversion.h" - -using namespace std; -using namespace boblight; - -#define GAMMASIZE (sizeof(m_gammacurve) / sizeof(m_gammacurve[0])) - -CLight::CLight() -{ - #define BOBLIGHT_OPTION(name, type, min, max, default, variable, postprocess) variable = default; - #include "options.h" - #undef BOBLIGHT_OPTION - - m_singlechange = 0.0; - - m_width = -1; - m_height = -1; - - memset(m_rgb, 0, sizeof(m_rgb)); - m_rgbcount = 0; - memset(m_prevrgb, 0, sizeof(m_prevrgb)); - memset(m_hscanscaled, 0, sizeof(m_hscanscaled)); - memset(m_vscanscaled, 0, sizeof(m_vscanscaled)); - - for (int i = 0; i < GAMMASIZE; i++) - m_gammacurve[i] = i; -} - -string CLight::SetOption(const char* option, bool& send) -{ - string stroption = option; - string strname; - - send = false; - - if (!GetWord(stroption, strname)) - return "emtpy option"; //string with only whitespace - - #define BOBLIGHT_OPTION(name, type, min, max, default, variable, postprocess) \ - if (strname == #name) \ - { \ - type value; \ - if (#type == "bool")\ - {\ - if (!StrToBool(stroption, *(bool*)(&value)))\ - return "invalid value " + stroption + " for option " + strname + " with type " + #type; \ - }\ - else\ - {\ - stringstream stream; \ - stream << stroption; \ - stream >> value; \ - if (stream.fail()) return "invalid value " + stroption + " for option " + strname + " with type " + #type; \ - \ - }\ - variable = value; \ - postprocess\ - \ - return ""; \ - } - #include "options.h" - #undef BOBLIGHT_OPTION - - return "unknown option " + strname; -} - -std::string CLight::GetOption(const char* option, std::string& output) -{ - string stroption = option; - string strname; - - if (!GetWord(stroption, strname)) - return "emtpy option"; //string with only whitespace - - #define BOBLIGHT_OPTION(name, type, min, max, default, variable, postprocess) \ - if (#name == strname)\ - {\ - output = ToString(variable);\ - return "";\ - } - #include "options.h" - #undef BOBLIGHT_OPTION - - return "unknown option"; -} - -void CLight::AddPixel(int* rgb) -{ - if (rgb[0] >= m_threshold || rgb[1] >= m_threshold || rgb[2] >= m_threshold) - { - if (m_gamma == 1.0) - { - m_rgb[0] += Clamp(rgb[0], 0, 255); - m_rgb[1] += Clamp(rgb[1], 0, 255); - m_rgb[2] += Clamp(rgb[2], 0, 255); - } - else - { - m_rgb[0] += m_gammacurve[Clamp(rgb[0], 0, GAMMASIZE - 1)]; - m_rgb[1] += m_gammacurve[Clamp(rgb[1], 0, GAMMASIZE - 1)]; - m_rgb[2] += m_gammacurve[Clamp(rgb[2], 0, GAMMASIZE - 1)]; - } - } - m_rgbcount++; -} - -void CLight::GetRGB(float* rgb) -{ - //if no pixels are set, the denominator is 0, so just return black - if (m_rgbcount == 0) - { - for (int i = 0; i < 3; i++) - { - rgb[i] = 0.0f; - m_rgb[i] = 0.0f; - } - - return; - } - - //convert from numerator/denominator to float - for (int i = 0; i < 3; i++) - { - rgb[i] = Clamp(m_rgb[i] / (float)m_rgbcount / 255.0f, 0.0f, 1.0f); - m_rgb[i] = 0.0f; - } - m_rgbcount = 0; - - //this tries to set the speed based on how fast the input is changing - //it needs sync mode to work properly - if (m_autospeed > 0.0) - { - float change = Abs(rgb[0] - m_prevrgb[0]) + Abs(rgb[1] - m_prevrgb[1]) + Abs(rgb[2] - m_prevrgb[2]); - change /= 3.0; - - //only apply singlechange if it's large enough, otherwise we risk sending it continously - if (change > 0.001) - m_singlechange = Clamp(change * m_autospeed / 10.0, 0.0, 1.0); - else - m_singlechange = 0.0; - } - - memcpy(m_prevrgb, rgb, sizeof(m_prevrgb)); - - //we need some hsv adjustments - if (m_value != 1.0 || m_valuerange[0] != 0.0 || m_valuerange[1] != 1.0 || - m_saturation != 1.0 || m_satrange[0] != 0.0 || m_satrange[1] != 1.0) - { - //rgb - hsv conversion, thanks wikipedia! - float hsv[3]; - float max = Max(rgb[0], rgb[1], rgb[2]); - float min = Min(rgb[0], rgb[1], rgb[2]); - - if (min == max) //grayscale - { - hsv[0] = -1.0f; //undefined - hsv[1] = 0.0; //no saturation - hsv[2] = min; //value - } - else - { - if (max == rgb[0]) //red zone - { - hsv[0] = (60.0f * ((rgb[1] - rgb[2]) / (max - min)) + 360.0f); - while (hsv[0] >= 360.0f) - hsv[0] -= 360.0f; - } - else if (max == rgb[1]) //green zone - { - hsv[0] = 60.0f * ((rgb[2] - rgb[0]) / (max - min)) + 120.0f; - } - else if (max == rgb[2]) //blue zone - { - hsv[0] = 60.0f * ((rgb[0] - rgb[1]) / (max - min)) + 240.0f; - } - - hsv[1] = (max - min) / max; //saturation - hsv[2] = max; //value - } - - //saturation and value adjustment - hsv[1] = Clamp(hsv[1] * m_saturation, m_satrange[0], m_satrange[1]); - hsv[2] = Clamp(hsv[2] * m_value, m_valuerange[0], m_valuerange[1]); - - if (hsv[0] == -1.0f) //grayscale - { - for (int i = 0; i < 3; i++) - rgb[i] = hsv[2]; - } - else - { - int hi = (int)(hsv[0] / 60.0f) % 6; - float f = (hsv[0] / 60.0f) - (float)(int)(hsv[0] / 60.0f); - - float s = hsv[1]; - float v = hsv[2]; - float p = v * (1.0f - s); - float q = v * (1.0f - f * s); - float t = v * (1.0f - (1.0f - f) * s); - - if (hi == 0) - { rgb[0] = v; rgb[1] = t; rgb[2] = p; } - else if (hi == 1) - { rgb[0] = q; rgb[1] = v; rgb[2] = p; } - else if (hi == 2) - { rgb[0] = p; rgb[1] = v; rgb[2] = t; } - else if (hi == 3) - { rgb[0] = p; rgb[1] = q; rgb[2] = v; } - else if (hi == 4) - { rgb[0] = t; rgb[1] = p; rgb[2] = v; } - else if (hi == 5) - { rgb[0] = v; rgb[1] = p; rgb[2] = q; } - } - - for (int i = 0; i < 3; i++) - rgb[i] = Clamp(rgb[i], 0.0f, 1.0f); - } -} - -//scale the light's scanrange to the dimensions set with boblight_setscanrange() -void CLight::SetScanRange(int width, int height) -{ - m_width = width; - m_height = height; - - m_hscanscaled[0] = Round32(m_hscan[0] / 100.0 * ((float)width - 1)); - m_hscanscaled[1] = Round32(m_hscan[1] / 100.0 * ((float)width - 1)); - m_vscanscaled[0] = Round32(m_vscan[0] / 100.0 * ((float)height - 1)); - m_vscanscaled[1] = Round32(m_vscan[1] / 100.0 * ((float)height - 1)); -} - -int CBoblight::Connect(const char* address, int port, int usectimeout) -{ - CMessage message; - CTcpData data; - int64_t now; - int64_t target; - string word; - - //set address - m_usectimeout = usectimeout; - if (address) - m_address = address; - else - m_address = "127.0.0.1"; - - //set port - if (port >= 0) - m_port = port; - else - m_port = 19333; - - //try to open a tcp connection - if (m_socket.Open(m_address, m_port, m_usectimeout) != SUCCESS) - { - m_error = m_socket.GetError(); - return 0; - } - - //write hello to the server, we should get hello back - if (!WriteDataToSocket("hello\n")) - return 0; - - if (!ReadDataToQueue()) - return 0; - - message = m_messagequeue.GetMessage(); - if (!ParseWord(message, "hello")) - { - m_error = m_address + ":" + ToString(m_port) + " sent gibberish"; - return 0; - } - - //get the protocol version from the server - if (!WriteDataToSocket("get version\n")) - return 0; - - if (!ReadDataToQueue()) - return 0; - - message = m_messagequeue.GetMessage(); - - if (!ParseWord(message, "version") || !GetWord(message.message, word)) - { - m_error = m_address + ":" + ToString(m_port) + " sent gibberish"; - return 0; - } - - //if we don't get the same protocol version back as we have, we can't work together - if (word != PROTOCOLVERSION) - { - m_error = "version mismatch, " + m_address + ":" + ToString(m_port) + " has version \"" + word + - "\", libboblight has version \"" + PROTOCOLVERSION + "\""; - return 0; - } - - //get lights info, like number, names and area - if (!WriteDataToSocket("get lights\n")) - return 0; - - if (!ReadDataToQueue()) - return 0; - - message = m_messagequeue.GetMessage(); - if (!ParseLights(message)) - { - m_error = m_address + ":" + ToString(m_port) + " sent gibberish"; - return 0; - } - - return 1; -} - -CBoblight::CBoblight() -{ - int padsize = 1; - //get option name pad size so it looks pretty - #define BOBLIGHT_OPTION(name, type, min, max, default, variable, postprocess) \ - if (strlen(#name) + 1 > padsize)\ - padsize = strlen(#name) + 1; - #include "options.h" - #undef BOBLIGHT_OPTION - - //stick in a line that describes the options - string option = "name"; - option.append(Max(padsize - option.length(), 1), ' '); - option += "type min max default"; - m_options.push_back(option); - - //fill vector with option strings - #define BOBLIGHT_OPTION(name, type, min, max, default, variable, postprocess) \ - {\ - string option = #name;\ - option.append(padsize - strlen(#name), ' ');\ - \ - option += #type;\ - option.append(Max(8 - strlen(#type), 1), ' ');\ - \ - option += #min;\ - option.append(Max(8 - strlen(#min), 1), ' ');\ - \ - option += #max;\ - option.append(Max(8 - strlen(#max), 1), ' ');\ - \ - if (strcmp(#default, "-1.0") == 0)\ - option += "set by boblightd";\ - else\ - option += #default;\ - \ - m_options.push_back(option);\ - } - #include "options.h" - #undef BOBLIGHT_OPTION -} - -//reads from socket until timeout or one message has arrived -bool CBoblight::ReadDataToQueue() -{ - CTcpData data; - int64_t now = GetTimeUs(); - int64_t target = now + m_usectimeout; - int nrmessages = m_messagequeue.GetNrMessages(); - - while (now < target && m_messagequeue.GetNrMessages() == nrmessages) - { - if (m_socket.Read(data) != SUCCESS) - { - m_error = m_socket.GetError(); - return false; - } - - m_messagequeue.AddData(data.GetData()); - - if (m_messagequeue.GetRemainingDataSize() > MAXDATA) - { - m_error = m_address + ":" + ToString(m_port) + " sent too much data"; - return false; - } - - now = GetTimeUs(); - } - - if (nrmessages == m_messagequeue.GetNrMessages()) - { - m_error = m_address + ":" + ToString(m_port) + " read timed out"; - return false; - } - return true; -} - -bool CBoblight::WriteDataToSocket(std::string strdata) -{ - CTcpData data; - data.SetData(strdata); - - if (m_socket.Write(data) != SUCCESS) - { - m_error = m_socket.GetError(); - return false; - } - - return true; -} - -//removes one word from the string in the messages, and compares it to wordtocmp -bool CBoblight::ParseWord(CMessage& message, std::string wordtocmp) -{ - string readword; - if (!GetWord(message.message, readword) || readword != wordtocmp) - return false; - - return true; -} - -bool CBoblight::ParseLights(CMessage& message) -{ - string word; - int nrlights; - - //first word in the message is "lights", second word is the number of lights - if (!ParseWord(message, "lights") || !GetWord(message.message, word) || !StrToInt(word, nrlights) || nrlights < 1) - return false; - - for (int i = 0; i < nrlights; i++) - { - CLight light; - - //read some data to the message queue if we have no messages - if (m_messagequeue.GetNrMessages() == 0) - { - if (!ReadDataToQueue()) - return false; - } - - message = m_messagequeue.GetMessage(); - - //first word sent is "light, second one is the name - if (!ParseWord(message, "light") || !GetWord(message.message, light.m_name)) - { - return false; - } - - //third one is "scan" - if (!ParseWord(message, "scan")) - return false; - - //now we read the scanrange - string scanarea; - for (int i = 0; i < 4; i++) - { - if (!GetWord(message.message, word)) - return false; - - scanarea += word + " "; - } - - ConvertFloatLocale(scanarea); //workaround for locale mismatch (, and .) - - if (sscanf(scanarea.c_str(), "%f %f %f %f", light.m_vscan, light.m_vscan + 1, light.m_hscan, light.m_hscan + 1) != 4) - return false; - - m_lights.push_back(light); - } - return true; -} - -const char* CBoblight::GetLightName(int lightnr) -{ - if (lightnr < 0) //negative lights don't exist, so we set it to an invalid number to get the error message - lightnr = m_lights.size(); - - if (CheckLightExists(lightnr)) - return m_lights[lightnr].m_name.c_str(); - - return NULL; -} - -int CBoblight::SetPriority(int priority) -{ - string data = "set priority " + ToString(priority) + "\n"; - - return WriteDataToSocket(data); -} - -bool CBoblight::CheckLightExists(int lightnr, bool printerror /*= true*/) -{ - if (lightnr >= (int)m_lights.size()) - { - if (printerror) - { - m_error = "light " + ToString(lightnr) + " doesn't exist (have " + ToString(m_lights.size()) + " lights)"; - } - return false; - } - return true; -} - -void CBoblight::SetScanRange(int width, int height) -{ - for (int i = 0; i < m_lights.size(); i++) - { - m_lights[i].SetScanRange(width, height); - } -} - -int CBoblight::AddPixel(int lightnr, int* rgb) -{ - if (!CheckLightExists(lightnr)) - return 0; - - if (lightnr < 0) - { - for (int i = 0; i < m_lights.size(); i++) - m_lights[i].AddPixel(rgb); - } - else - { - m_lights[lightnr].AddPixel(rgb); - } - - return 1; -} - -void CBoblight::AddPixel(int* rgb, int x, int y) -{ - for (int i = 0; i < m_lights.size(); i++) - { - if (x >= m_lights[i].m_hscanscaled[0] && x <= m_lights[i].m_hscanscaled[1] && - y >= m_lights[i].m_vscanscaled[0] && y <= m_lights[i].m_vscanscaled[1]) - { - m_lights[i].AddPixel(rgb); - } - } -} - -int CBoblight::SendRGB(int sync, int* outputused) -{ - string data; - - for (int i = 0; i < m_lights.size(); i++) - { - float rgb[3]; - m_lights[i].GetRGB(rgb); - data += "set light " + m_lights[i].m_name + " rgb " + ToString(rgb[0]) + " " + ToString(rgb[1]) + " " + ToString(rgb[2]) + "\n"; - if (m_lights[i].m_autospeed > 0.0 && m_lights[i].m_singlechange > 0.0) - data += "set light " + m_lights[i].m_name + " singlechange " + ToString(m_lights[i].m_singlechange) + "\n"; - } - - //send a message that we want devices to sync to our input - if (sync) - data += "sync\n"; - - //if we want to check if our output is used, send a ping message - if (outputused) - data += "ping\n"; - - if (!WriteDataToSocket(data)) - return 0; - - if (outputused) - return Ping(outputused, false); - else - return 1; -} - -int CBoblight::Ping(int* outputused, bool send) -{ - string word; - - if (send) - { - if (!WriteDataToSocket("ping\n")) - return 0; - } - - if (!ReadDataToQueue()) - return 0; - - CMessage message = m_messagequeue.GetMessage(); - - if (!GetWord(message.message, word) || word != "ping") - { - m_error = m_address + ":" + ToString(m_port) + " sent gibberish"; - return 0; - } - - //client can set outputused to NULL - if (outputused) - { - if (!GetWord(message.message, word) || !StrToInt(word, *outputused)) - { - m_error = m_address + ":" + ToString(m_port) + " sent gibberish"; - return 0; - } - } - - return 1; -} - -int CBoblight::GetNrOptions() -{ - return m_options.size(); -} - -const char* CBoblight::GetOptionDescription(int option) -{ - if (option < 0 || option >= m_options.size()) - return NULL; - - return m_options[option].c_str(); -} - -int CBoblight::SetOption(int lightnr, const char* option) -{ - string error; - string data; - bool send; - - if (!CheckLightExists(lightnr)) - return 0; - - if (lightnr < 0) - { - for (int i = 0; i < m_lights.size(); i++) - { - error = m_lights[i].SetOption(option, send); - if (!error.empty()) - { - m_error = error; - return 0; - } - if (send) - { - data += "set light " + m_lights[i].m_name + " " + option + "\n"; - } - } - } - else - { - error = m_lights[lightnr].SetOption(option, send); - if (!error.empty()) - { - m_error = error; - return 0; - } - if (send) - { - data += "set light " + m_lights[lightnr].m_name + " " + option + "\n"; - } - } - - if (!WriteDataToSocket(data)) - return 0; - - return 1; -} - -int CBoblight::GetOption(int lightnr, const char* option, const char** output) -{ - if (lightnr < 0) //negative lights don't exist, so we set it to an invalid number to get the error message - lightnr = m_lights.size(); - - if (!CheckLightExists(lightnr)) - return 0; - - string error = m_lights[lightnr].GetOption(option, m_lastoption); - if (!error.empty()) - { - m_error = error; - return 0; - } - - *output = m_lastoption.c_str(); - - return 1; -} diff -Nru vdr-plugin-boblight-0.0.1+git20131209/lib/boblight_client.h vdr-plugin-boblight-0.0.2-4-ged814f4/lib/boblight_client.h --- vdr-plugin-boblight-0.0.1+git20131209/lib/boblight_client.h 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/lib/boblight_client.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,115 +0,0 @@ -/* - * boblight - * Copyright (C) Bob 2009 - * - * boblight is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * boblight is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef CBOBLIGHT -#define CBOBLIGHT - -#include -#include - -#include "util/tcpsocket.h" -#include "util/messagequeue.h" - -namespace boblight -{ - class CLight - { - public: - CLight(); - - std::string SetOption(const char* option, bool& send); - std::string GetOption(const char* option, std::string& output); - - void SetScanRange(int width, int height); - void AddPixel(int* rgb); - - std::string m_name; - float m_speed; - float m_autospeed; - float m_singlechange; - - bool m_interpolation; - bool m_use; - - float m_value; - float m_valuerange[2]; - float m_saturation; - float m_satrange[2]; - int m_threshold; - float m_gamma; - float m_gammacurve[256]; - - float m_rgb[3]; - int m_rgbcount; - float m_prevrgb[3]; - void GetRGB(float* rgb); - - float m_hscan[2]; - float m_vscan[2]; - int m_width; - int m_height; - int m_hscanscaled[2]; - int m_vscanscaled[2]; - }; - - class CBoblight - { - public: - CBoblight(); - - int Connect(const char* address, int port, int usectimeout); - const char* GetError() { return m_error.c_str(); } - - int GetNrLights() { return m_lights.size(); } - const char* GetLightName (int lightnr); - - int SetPriority (int priority); - void SetScanRange (int width, int height); - - int AddPixel(int lightnr, int* rgb); - void AddPixel(int* rgb, int x, int y); - - int SendRGB(int sync, int* outputused); - int Ping(int* outputused, bool send); - - int GetNrOptions(); - const char* GetOptionDescription(int option); - int SetOption(int lightnr, const char* option); - int GetOption(int lightnr, const char* option, const char** output); - - private: - CTcpClientSocket m_socket; - std::string m_address; - int m_port; - std::string m_error; - CMessageQueue m_messagequeue; - int m_usectimeout; - - bool ReadDataToQueue(); - bool WriteDataToSocket(std::string strdata); - bool ParseWord(CMessage& message, std::string wordtocmp); - bool ParseLights(CMessage& message); - bool CheckLightExists(int lightnr, bool printerror = true); - - std::vector m_lights; - - std::vector m_options; - std::string m_lastoption; //place to store the last option retrieved by GetOption - }; -} -#endif //CBOBLIGHT diff -Nru vdr-plugin-boblight-0.0.1+git20131209/lib/options.h vdr-plugin-boblight-0.0.2-4-ged814f4/lib/options.h --- vdr-plugin-boblight-0.0.1+git20131209/lib/options.h 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/lib/options.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -/* - * boblight - * Copyright (C) Bob 2009 - * - * boblight is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * boblight is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -// name type min max default variable post-process -BOBLIGHT_OPTION(speed, float, 0.0, 100.0, 100.0, m_speed, m_speed = Clamp(m_speed, 0.0, 100.0); send = true;) -BOBLIGHT_OPTION(autospeed, float, 0, 100.0, 0.0, m_autospeed, m_autospeed = Max(m_autospeed, 0.0);) -BOBLIGHT_OPTION(interpolation, bool, false, true, false, m_interpolation, send = true;) -BOBLIGHT_OPTION(use, bool, false, true, true, m_use, send = true;) -BOBLIGHT_OPTION(saturation, float, 0.0, 20.0, 1.0, m_saturation, m_saturation = Max(m_saturation, 0.0);) -BOBLIGHT_OPTION(saturationmin, float, 0.0, 1.0, 0.0, m_satrange[0], m_satrange[0] = Clamp(m_satrange[0], 0.0, m_satrange[1]);) -BOBLIGHT_OPTION(saturationmax, float, 0.0, 1.0, 1.0, m_satrange[1], m_satrange[1] = Clamp(m_satrange[1], m_satrange[0], 1.0);) -BOBLIGHT_OPTION(value, float, 0.0, 20.0, 1.0, m_value, m_value = Max(m_value, 0.0);) -BOBLIGHT_OPTION(valuemin, float, 0.0, 1.0, 0.0, m_valuerange[0], m_valuerange[0] = Clamp(m_valuerange[0], 0.0, m_valuerange[1]);) -BOBLIGHT_OPTION(valuemax, float, 0.0, 1.0, 1.0, m_valuerange[1], m_valuerange[1] = Clamp(m_valuerange[1], m_valuerange[0], 1.0);) -BOBLIGHT_OPTION(threshold, int, 0, 255, 0, m_threshold, m_threshold = Clamp(m_threshold, 0, 255);) - -BOBLIGHT_OPTION(gamma, float, 0.0, 10.0, 1.0, m_gamma, m_gamma = Max(m_gamma, 0.0); \ - for (int i = 0; i < GAMMASIZE; i++) \ - m_gammacurve[i] = pow((float)i / ((float)GAMMASIZE - 1.0f), m_gamma) * (GAMMASIZE - 1.0f);) - -BOBLIGHT_OPTION(hscanstart, float, 0.0, 100.0, -1.0, m_hscan[0], m_hscan[0] = Clamp(m_hscan[0], 0.0, m_hscan[1]); SetScanRange(m_width, m_height);) -BOBLIGHT_OPTION(hscanend, float, 0.0, 100.0, -1.0, m_hscan[1], m_hscan[1] = Clamp(m_hscan[1], m_hscan[0], 100.0); SetScanRange(m_width, m_height);) -BOBLIGHT_OPTION(vscanstart, float, 0.0, 100.0, -1.0, m_vscan[0], m_vscan[0] = Clamp(m_vscan[0], 0.0, m_vscan[1]); SetScanRange(m_width, m_height);) -BOBLIGHT_OPTION(vscanend, float, 0.0, 100.0, -1.0, m_vscan[1], m_vscan[1] = Clamp(m_vscan[1], m_vscan[0], 100.0); SetScanRange(m_width, m_height);) - - diff -Nru vdr-plugin-boblight-0.0.1+git20131209/main_menu.c vdr-plugin-boblight-0.0.2-4-ged814f4/main_menu.c --- vdr-plugin-boblight-0.0.1+git20131209/main_menu.c 1970-01-01 00:00:00.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/main_menu.c 2013-12-29 17:56:05.000000000 +0000 @@ -0,0 +1,60 @@ + +#include + +#include "ambiservice.h" +#include "main_menu.h" +#include "config.h" +#include "common.h" + +cBoblightPluginMenu::cBoblightPluginMenu(const char* title, cPluginBoblight* aPlugin) +{ + plugin = aPlugin; + + Create(); +} + +void cBoblightPluginMenu::Create(void) { + Clear(); + + Add(new cMenuEditStraItem(tr("View Mode"), &cfg.viewMode, cAmbiService::vmCount, cAmbiService::viewModes)); + Add(new cMenuEditStraItem(tr("Startup View Mode"), &cfg.startupViewMode, cAmbiService::vmCount, cAmbiService::viewModes)); + + Add(new cMenuEditIntItem(tr("Fixed Color Red"), &cfg.fixedR, 0, 255)); + Add(new cMenuEditIntItem(tr("Fixed Color Green"), &cfg.fixedG, 0, 255)); + Add(new cMenuEditIntItem(tr("Fixed Color Blue"), &cfg.fixedB, 0, 255)); + + SetHelp(0, 0, 0, 0); + Display(); +} + +void cBoblightPluginMenu::Store() { + plugin->Save(); +} + +//*************************************************************************** +// Process Key +//*************************************************************************** + +eOSState cBoblightPluginMenu::ProcessKey(eKeys key) +{ + eOSState state = cOsdMenu::ProcessKey(key); + + if (state != osUnknown) + return state; + + if (key == kLeft || key == kRight) + { + if (cfg.viewMode == cAmbiService::vmDetached && plugin->isRunning()) + plugin->stopAtmo(); + else if (cfg.viewMode != cAmbiService::vmDetached && !plugin->isRunning()) + plugin->startAtmo(); + } + + if (key == kOk) + { + plugin->Save(); + return osEnd; + } + + return state; +} \ No newline at end of file diff -Nru vdr-plugin-boblight-0.0.1+git20131209/main_menu.h vdr-plugin-boblight-0.0.2-4-ged814f4/main_menu.h --- vdr-plugin-boblight-0.0.1+git20131209/main_menu.h 1970-01-01 00:00:00.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/main_menu.h 2013-12-29 17:56:05.000000000 +0000 @@ -0,0 +1,28 @@ +#ifndef __MAIN_MENU_H +#define __MAIN_MENU_H + +#include + +#include "vdrboblight.h" + +//*************************************************************************** +// Plugins Main Menu +//*************************************************************************** + +class cPluginBoblight; + +class cBoblightPluginMenu : public cMenuSetupPage +{ + public: + + cBoblightPluginMenu(const char* title, cPluginBoblight* aPlugin); + virtual ~cBoblightPluginMenu() { }; + virtual void Store(); + virtual eOSState ProcessKey(eKeys key); + + protected: + void Create(void); + cPluginBoblight* plugin; +}; + +#endif diff -Nru vdr-plugin-boblight-0.0.1+git20131209/setup_menu.c vdr-plugin-boblight-0.0.2-4-ged814f4/setup_menu.c --- vdr-plugin-boblight-0.0.1+git20131209/setup_menu.c 1970-01-01 00:00:00.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/setup_menu.c 2013-12-29 17:56:05.000000000 +0000 @@ -0,0 +1,55 @@ + +#include "setup_menu.h" +#include "config.h" +#include "common.h" + +//*************************************************************************** +// Object +//*************************************************************************** + +cAmbiSetup::cAmbiSetup(cPluginBoblight* aPlugin) +{ + plugin = aPlugin; + cineBars[0] = "Horizontal"; + cineBars[1] = "Vertical"; + cineBars[2] = "Both"; + + Setup(); +} + +//*************************************************************************** +// Setup +//*************************************************************************** + +void cAmbiSetup::Setup() +{ + Clear(); + + Add(new cMenuEditIntItem(tr("Log level"), &cfg.loglevel, 0, 3)); + Add(new cMenuEditBoolItem(tr("Show mainmenu"), &cfg.showMainmenu)); + + Add(new cMenuEditIntItem(tr("Updaterate [Hz]"), &cfg.frequence, 1, 100)); + + Add(new cMenuEditStraItem(tr("Detect cinema bars"), &cfg.detectCineBars, 3, cineBars)); + + Add(new cMenuEditIntItem(tr("Threshold (0-255)"), &cfg.threshold, 0, 255)); + Add(new cMenuEditIntItem(tr("Gamma (0-10.0)"), &cfg.gamma, 0, 100)); + Add(new cMenuEditIntItem(tr("Value (0-20.0)"), &cfg.value, 0, 200)); + Add(new cMenuEditIntItem(tr("Saturation (0-20.0)"), &cfg.saturation, 0, 200)); + Add(new cMenuEditIntItem(tr("Speed (0-100)"), &cfg.speed, 0, 100)); + Add(new cMenuEditIntItem(tr("Autospeed (0-100)"), &cfg.autospeed, 0, 100)); + Add(new cMenuEditBoolItem(tr("Interpolation"), &cfg.interpolation)); + Add(new cMenuEditIntItem(tr("Priority 0=Highest, 255=Lowest"), &cfg.priority, 0, 255)); +} + +eOSState cAmbiSetup::ProcessKey(eKeys key) +{ + eOSState state = cMenuSetupPage::ProcessKey(key); + + return state; +} + +void cAmbiSetup::Store() +{ + plugin->Save(); +} \ No newline at end of file diff -Nru vdr-plugin-boblight-0.0.1+git20131209/setup_menu.h vdr-plugin-boblight-0.0.2-4-ged814f4/setup_menu.h --- vdr-plugin-boblight-0.0.1+git20131209/setup_menu.h 1970-01-01 00:00:00.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/setup_menu.h 2013-12-29 17:56:05.000000000 +0000 @@ -0,0 +1,27 @@ +#ifndef __SETUP_MENU_H +#define __SETUP_MENU_H + +#include +#include "ambiservice.h" +#include "vdrboblight.h" + +//*************************************************************************** +// Setup +//*************************************************************************** +class cPluginBoblight; +class cAmbiSetup : public cMenuSetupPage, public cAmbiService +{ + public: + cAmbiSetup(cPluginBoblight* aPlugin); + + protected: + + virtual void Setup(); + virtual eOSState ProcessKey(eKeys Key); + virtual void Store(); + + const char* cineBars[cbCount]; + cPluginBoblight* plugin; +}; + +#endif diff -Nru vdr-plugin-boblight-0.0.1+git20131209/vdrboblight.c vdr-plugin-boblight-0.0.2-4-ged814f4/vdrboblight.c --- vdr-plugin-boblight-0.0.1+git20131209/vdrboblight.c 2013-12-09 20:52:16.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/vdrboblight.c 2013-12-29 17:56:05.000000000 +0000 @@ -16,154 +16,11 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - #include +#include "vdrboblight.h" -#include "config.h" -#include "ambiservice.h" -#include "ambithread.h" - -//*************************************************************************** -// -//*************************************************************************** - -static const char *VERSION = "0.0.1"; -static const char *DESCRIPTION = "Boblight with data from softhddevice"; -static const char *MAINMENUENTRY = "Boblight"; - -//*************************************************************************** -// Setup -//*************************************************************************** - -class cAmbiSetup : public cMenuSetupPage, public cAmbiService -{ - public: - - cAmbiSetup(); - - protected: - - virtual void Setup(); - virtual eOSState ProcessKey(eKeys Key); - virtual void Store(); - - const char* cineBars[cbCount]; - const char* seduRGBOrders[6]; - int rgbOrderIndex; -}; - -//*************************************************************************** -// Plugin -//*************************************************************************** - -class cPluginBoblight : public cPlugin -{ - public: - - cPluginBoblight(void); - virtual ~cPluginBoblight(); - virtual const char* Version(void) { return VERSION; } - virtual const char* Description(void) { return DESCRIPTION; } - virtual const char* CommandLineHelp(void) { return 0; } - virtual bool ProcessArgs(int argc, char* argv[]); - virtual bool Initialize(void); - virtual bool Start(void); - virtual void Stop(void); - virtual void Housekeeping(void) { }; - virtual void MainThreadHook(void) { }; - virtual cString Active(void); - virtual time_t WakeupTime(void); - virtual const char* MainMenuEntry(void) { return cfg.showMainmenu ? MAINMENUENTRY : 0; } - virtual cOsdObject* MainMenuAction(void); - virtual cMenuSetupPage* SetupMenu(void) { return new cAmbiSetup; } - virtual bool SetupParse(const char* Name, const char* Value); - virtual bool Service(const char* Id, void* Data = NULL); - virtual const char** SVDRPHelpPages(void); - virtual cString SVDRPCommand(const char* Command, const char* Option, int &ReplyCode); - - int startAtmo(); - int stopAtmo(); - cAmbiThread* update; - - int isRunning() - { - if (!update) - return no; - - return update->isRunning(); - } -}; - -//*************************************************************************** -// Plugins Main Menu -//*************************************************************************** - -class cSeduPluginMenu : public cMenuSetupPage -{ - public: - - cSeduPluginMenu(const char* title, cPluginBoblight* aPlugin); - virtual ~cSeduPluginMenu() { }; - - virtual eOSState ProcessKey(eKeys key); - - protected: - - void Store() { } - cPluginBoblight* plugin; -}; - -cSeduPluginMenu::cSeduPluginMenu(const char* title, cPluginBoblight* aPlugin) -{ - SetTitle(title ? title : ""); - plugin = aPlugin; - - Clear(); - - cOsdMenu::Add(new cMenuEditStraItem(tr("View Mode"), - (int*)&cfg.viewMode, - (int)cAmbiService::vmCount, - cAmbiService::viewModes)); - - Add(new cMenuEditIntItem(tr("Fixed Color Red"), &cfg.fixedR, 0, 255)); - Add(new cMenuEditIntItem(tr("Fixed Color Green"), &cfg.fixedG, 0, 255)); - Add(new cMenuEditIntItem(tr("Fixed Color Blue"), &cfg.fixedB, 0, 255)); - - SetHelp(0, 0, 0, 0); - - Display(); -} - -//*************************************************************************** -// Process Key -//*************************************************************************** - -eOSState cSeduPluginMenu::ProcessKey(eKeys key) -{ - eOSState state = cOsdMenu::ProcessKey(key); - - if (key == kLeft || key == kRight) - { - if (cfg.viewMode == cAmbiService::vmDetached && plugin->isRunning()) - plugin->stopAtmo(); - else if (cfg.viewMode != cAmbiService::vmDetached && !plugin->isRunning()) - plugin->startAtmo(); - } - - if (state != osUnknown) - return state; - - if (key == kOk) - { - SetupStore("FixedColorRed", cfg.fixedR); - SetupStore("FixedColorGreen", cfg.fixedG); - SetupStore("FixedColorBlue", cfg.fixedB); - SetupStore("ViewMode", (int)cfg.viewMode); - - return osEnd; - } - return state; -} +#include "setup_menu.h" +#include "main_menu.h" //*************************************************************************** // Plugin @@ -221,6 +78,29 @@ return done; } +void cPluginBoblight::Save() { + cfg.dirty = 1; + SetupStore("LogLevel", cfg.loglevel); + SetupStore("ShowMainmenu", cfg.showMainmenu); + SetupStore("StartupViewMode", cfg.startupViewMode); + + SetupStore("DetectCineBars", cfg.detectCineBars); + + SetupStore("Updaterate", cfg.frequence); + SetupStore("Threshold", cfg.threshold); + SetupStore("Gamma", cfg.gamma); + SetupStore("Value", cfg.value); + SetupStore("Saturation", cfg.saturation); + SetupStore("Speed", cfg.speed); + SetupStore("Autospeed", cfg.autospeed); + SetupStore("Interpolation", cfg.interpolation); + SetupStore("Priority", cfg.priority); + + SetupStore("FixedColorRed", cfg.fixedR); + SetupStore("FixedColorGreen", cfg.fixedG); + SetupStore("FixedColorBlue", cfg.fixedB); +} + void cPluginBoblight::Stop(void) { stopAtmo(); @@ -236,16 +116,23 @@ return 0; } +cMenuSetupPage* cPluginBoblight::SetupMenu(void) { + return new cAmbiSetup(this); +} + cOsdObject* cPluginBoblight::MainMenuAction(void) { - return new cSeduPluginMenu(MAINMENUENTRY, this); + return new cBoblightPluginMenu(MAINMENUENTRY, this); } bool cPluginBoblight::SetupParse(const char* Name, const char* Value) { if (!strcasecmp(Name, "LogLevel")) cfg.loglevel = atoi(Value); else if (!strcasecmp(Name, "ShowMainmenu")) cfg.showMainmenu = atoi(Value); - else if (!strcasecmp(Name, "ViewMode")) cfg.viewMode = (cAmbiService::ViewMode)atoi(Value); + else if (!strcasecmp(Name, "StartupViewMode")) { + cfg.startupViewMode = atoi(Value); + cfg.viewMode = cfg.startupViewMode; + } else if (!strcasecmp(Name, "DetectCineBars")) cfg.detectCineBars = (cAmbiService::Cinebars)atoi(Value); @@ -276,9 +163,6 @@ cString cPluginBoblight::SVDRPCommand(const char* Command, const char* Option, int &ReplyCode) { - if (!update) - return "Error: Plugin not initialized!"; - if (!strcasecmp(Command, "MODE")) { if (Option && strcasecmp(Option, "atmo") == 0) @@ -333,77 +217,6 @@ return HelpPages; } -//*************************************************************************** -// Class Setup Menu -//*************************************************************************** -//*************************************************************************** -// Object -//*************************************************************************** - -cAmbiSetup::cAmbiSetup() -{ - cineBars[0] = "Horizontal"; - cineBars[1] = "Vertical"; - cineBars[2] = "Both"; - - Setup(); -} - -//*************************************************************************** -// Setup -//*************************************************************************** - -void cAmbiSetup::Setup() -{ - Clear(); - - Add(new cMenuEditIntItem(tr("Log level"), &cfg.loglevel, 0, 3)); - Add(new cMenuEditBoolItem(tr("Show mainmenu"), &cfg.showMainmenu)); - - Add(new cMenuEditIntItem(tr("Updaterate [Hz]"), &cfg.frequence, 1, 100)); - - Add(new cMenuEditStraItem(tr("Detect cinema bars"), (int*)&cfg.detectCineBars, 3, cineBars)); - - Add(new cMenuEditIntItem(tr("Threshold (0-255)"), &cfg.threshold, 0, 255)); - Add(new cMenuEditIntItem(tr("Gamma (0-10.0)"), &cfg.gamma, 0, 100)); - Add(new cMenuEditIntItem(tr("Value (0-20.0)"), &cfg.value, 0, 200)); - Add(new cMenuEditIntItem(tr("Saturation (0-20.0)"), &cfg.saturation, 0, 200)); - Add(new cMenuEditIntItem(tr("Speed (0-100)"), &cfg.speed, 0, 100)); - Add(new cMenuEditIntItem(tr("Autospeed (0-100)"), &cfg.autospeed, 0, 100)); - Add(new cMenuEditBoolItem(tr("Interpolation"), &cfg.interpolation)); - Add(new cMenuEditIntItem(tr("Priority 0=Highest, 255=Lowest"), &cfg.priority, 0, 255)); -} - -eOSState cAmbiSetup::ProcessKey(eKeys key) -{ - eOSState state = cMenuSetupPage::ProcessKey(key); - - return state; -} - -void cAmbiSetup::Store() -{ - cfg.dirty = 1; - SetupStore("LogLevel", cfg.loglevel); - SetupStore("ShowMainmenu", cfg.showMainmenu); - SetupStore("ViewMode", (int)cfg.viewMode); - - SetupStore("DetectCineBars", cfg.detectCineBars); - - SetupStore("Updaterate", cfg.frequence); - SetupStore("Threshold", cfg.threshold); - SetupStore("Gamma", cfg.gamma); - SetupStore("Value", cfg.value); - SetupStore("Saturation", cfg.saturation); - SetupStore("Speed", cfg.speed); - SetupStore("Autospeed", cfg.autospeed); - SetupStore("Interpolation", cfg.interpolation); - SetupStore("Priority", cfg.priority); - - SetupStore("FixedColorRed", cfg.fixedR); - SetupStore("FixedColorGreen", cfg.fixedG); - SetupStore("FixedColorBlue", cfg.fixedB); -} //*************************************************************************** // VDR Internal diff -Nru vdr-plugin-boblight-0.0.1+git20131209/vdrboblight.h vdr-plugin-boblight-0.0.2-4-ged814f4/vdrboblight.h --- vdr-plugin-boblight-0.0.1+git20131209/vdrboblight.h 1970-01-01 00:00:00.000000000 +0000 +++ vdr-plugin-boblight-0.0.2-4-ged814f4/vdrboblight.h 2013-12-29 17:56:05.000000000 +0000 @@ -0,0 +1,82 @@ +/* + * vdrboblight.h + * + * Copyright (C) 2013 - Christian Völlinger + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef __VDRBOBLIGHT_H +#define __VDRBOBLIGHT_H + +#include + +#include "config.h" +#include "ambiservice.h" +#include "ambithread.h" +#include "setup_menu.h" +#include "main_menu.h" + +//*************************************************************************** +// +//*************************************************************************** + +static const char *VERSION = GITVERSION; +static const char *DESCRIPTION = "Boblight with data from softhddevice"; +static const char *MAINMENUENTRY = "Boblight"; + + +//*************************************************************************** +// Plugin +//*************************************************************************** + +class cPluginBoblight : public cPlugin +{ + public: + + cPluginBoblight(void); + virtual ~cPluginBoblight(); + virtual const char* Version(void) { return VERSION; } + virtual const char* Description(void) { return DESCRIPTION; } + virtual const char* CommandLineHelp(void) { return 0; } + virtual bool ProcessArgs(int argc, char* argv[]); + virtual bool Initialize(void); + virtual bool Start(void); + virtual void Stop(void); + virtual void Housekeeping(void) { }; + virtual void MainThreadHook(void) { }; + virtual cString Active(void); + virtual time_t WakeupTime(void); + virtual const char* MainMenuEntry(void) { return cfg.showMainmenu ? MAINMENUENTRY : 0; } + virtual cOsdObject* MainMenuAction(void); + virtual cMenuSetupPage* SetupMenu(void); + virtual bool SetupParse(const char* Name, const char* Value); + virtual bool Service(const char* Id, void* Data = NULL); + virtual const char** SVDRPHelpPages(void); + virtual cString SVDRPCommand(const char* Command, const char* Option, int &ReplyCode); + + int startAtmo(); + int stopAtmo(); + void Save(); + cAmbiThread* update; + + int isRunning() + { + if (!update) + return no; + + return update->isRunning(); + } +}; + +#endif