From f0240d89a0246faa2e2207b69f38e79526059dee Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 26 Oct 2019 22:37:38 +0200 Subject: [PATCH] - pick graphlcd support from DDT but include it in another way Conflicts: src/driver/Makefile.am src/driver/nglcd.cpp src/gui/Makefile.am src/gui/bouquetlist.cpp src/gui/channellist.cpp src/gui/osd_setup.cpp src/gui/widget/menue.cpp src/gui/widget/menue.h src/neutrino.cpp src/system/flashtool.cpp src/system/settings.h Signed-off-by: Thilo Graf --- acinclude.m4 | 12 ++ data/locale/deutsch.locale | 39 ++++++ data/locale/english.locale | 39 ++++++ src/Makefile.am | 4 + src/driver/Makefile.am | 5 + src/driver/display.h | 3 + src/driver/nglcd.cpp | 23 +++- src/driver/nglcd.h | 137 +++++++++++++++++++ src/driver/record.cpp | 8 +- src/driver/volume.cpp | 6 + src/gui/Makefile.am | 5 + src/gui/bouquetlist.cpp | 8 ++ src/gui/channellist.cpp | 7 + src/gui/glcdsetup.cpp | 273 +++++++++++++++++++++++++++++++++++++ src/gui/glcdsetup.h | 48 +++++++ src/gui/lcd4l_setup.cpp | 1 - src/gui/movieplayer.cpp | 32 +++++ src/gui/osd_setup.cpp | 1 + src/gui/vfd_setup.cpp | 10 ++ src/gui/widget/menue.cpp | 26 ++++ src/gui/widget/menue.h | 4 + src/neutrino.cpp | 109 +++++++++++++-- src/neutrino.h | 2 +- src/system/flashtool.cpp | 5 + src/system/locals.h | 39 ++++++ src/system/locals_intern.h | 39 ++++++ src/system/settings.h | 22 ++- 27 files changed, 888 insertions(+), 19 deletions(-) create mode 100644 src/driver/nglcd.h create mode 100644 src/gui/glcdsetup.cpp create mode 100644 src/gui/glcdsetup.h diff --git a/acinclude.m4 b/acinclude.m4 index 75097f419..a91cea95c 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -629,6 +629,18 @@ case "$BOXMODEL" in AC_DEFINE(ENABLE_CHANGE_OSD_RESOLUTION, 1, [enable to change osd resolution]) ;; esac + +# BOXMODELs that needs GraphLCD support +case "$BOXMODEL" in + vusolo4k|vuduo4k|vuultimo4k|vuuno4kse) + AC_DEFINE(ENABLE_GRAPHLCD, 1, [include GraphLCD support]) + enable_graphlcd=yes + ;; + *) + enable_graphlcd=no + ;; +esac +AM_CONDITIONAL(ENABLE_GRAPHLCD, test "$enable_graphlcd" = "yes") ]) dnl backward compatiblity diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 32522dbef..9503650e2 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -803,6 +803,45 @@ fsk.from_7 ab 7 fsk.to_12 bis 12 fsk.to_16 bis 16 fsk.to_7 bis 7 +glcd.brightness Helligkeit +glcd.brightness_standby Helligkeit in Standby +glcd.color.black Schwarz +glcd.color.blue Blau +glcd.color.cyan Blaugrün +glcd.color.green Grün +glcd.color.magenta Magenta +glcd.color.red Rot +glcd.color.white Weiss +glcd.color.yellow Gelb +glcd.color.orange Orange +glcd.color.light_gray Hellgrau +glcd.color.gray Grau +glcd.color.dark_gray Dunkelgrau +glcd.color.dark_red Dunkelrot +glcd.color.dark_green Dunkelgrün +glcd.color.dark_blue Dunkelblau +glcd.color.purple Purple +glcd.color.mint Mint +glcd.color.golden Golden +glcd.enable GraphLCD aktiv +glcd.font Schrift +glcd.head GraphLCD-Unterstützung +glcd.mirror_osd OSD-Menü auf GraphLCD anzeigen +glcd.mirror_video Videobild auf GraphLCD anzeigen +glcd.restart Neu erkennen +glcd.scroll_speed Scroll-Geschwindigkeit +glcd.select.bar Fortschrittsbalken-Farbe +glcd.select.bg Hintergrund-Farbe +glcd.select.fg Vordergrund-Farbe +glcd.show_logo Sender-Logo anzeigen +glcd.size_bar Fortschrittsbalken-Größe +glcd.size_channel Sender-Größe +glcd.size_epg EPG-Größe +glcd.size_logo Logo-Größe +glcd.size_time Uhrzeit-Größe +glcd.size_time_standby Uhrzeit-Größe in Standby +glcd.time_in_standby Zeitanzeige in Standby +glcd.volume Lautstärke hdd_10min 10 min. hdd_1min 1 min. hdd_20min 20 min. diff --git a/data/locale/english.locale b/data/locale/english.locale index 663190cc0..435be6d3b 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -803,6 +803,45 @@ fsk.from_7 from 7 fsk.to_12 to 12 fsk.to_16 to 16 fsk.to_7 to 7 +glcd.brightness Brightness +glcd.brightness_standby Brightness in standby +glcd.color.black Black +glcd.color.blue Blue +glcd.color.cyan Blue-Green +glcd.color.green Green +glcd.color.magenta Magenta +glcd.color.red Red +glcd.color.white White +glcd.color.yellow Yellow +glcd.color.orange Orange +glcd.color.light_gray Light Gray +glcd.color.gray Gray +glcd.color.dark_gray Dark Gray +glcd.color.dark_red Dark Red +glcd.color.dark_green Dark Green +glcd.color.dark_blue Dark Blue +glcd.color.purple Purple +glcd.color.mint Mint +glcd.color.golden Golden +glcd.enable GraphLCD enabled +glcd.font Font +glcd.head GraphLCD-Support +glcd.mirror_osd Show OSD menu on GraphLCD +glcd.mirror_video Show running video on GraphLCD +glcd.restart Rescan +glcd.scroll_speed Scrolling Speed +glcd.select.bar Progress bar color +glcd.select.bg Background color +glcd.select.fg Foreground color +glcd.show_logo Show channel logo +glcd.size_bar Progress bar height +glcd.size_channel Channel height +glcd.size_epg EPG height +glcd.size_logo Logo height +glcd.size_time Time height +glcd.size_time_standby Time height in standby +glcd.time_in_standby Display time in standby +glcd.volume Volume hdd_10min 10 min. hdd_1min 1 min. hdd_20min 20 min. diff --git a/src/Makefile.am b/src/Makefile.am index 164585a8a..ecc9368d5 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -130,6 +130,10 @@ neutrino_LDADD = \ -lrt -lpthread \ -lz +if ENABLE_GRAPHLCD +neutrino_LDADD += -lglcddrivers -lglcdgraphics -lusb-1.0 +endif + if ENABLE_GIFLIB neutrino_LDADD += -lgif else diff --git a/src/driver/Makefile.am b/src/driver/Makefile.am index d9bf82fc2..21fe2faa1 100644 --- a/src/driver/Makefile.am +++ b/src/driver/Makefile.am @@ -52,6 +52,11 @@ libneutrino_driver_a_SOURCES += \ lcd4l.cpp endif +if ENABLE_GRAPHLCD +libneutrino_driver_a_SOURCES += \ + nglcd.cpp +endif + if BOXTYPE_COOL libneutrino_driver_a_SOURCES += \ fb_accel_cs_hdx.cpp diff --git a/src/driver/display.h b/src/driver/display.h index 850926432..ea9185e85 100644 --- a/src/driver/display.h +++ b/src/driver/display.h @@ -8,3 +8,6 @@ #if HAVE_SPARK_HARDWARE || HAVE_AZBOX_HARDWARE || HAVE_GENERIC_HARDWARE || HAVE_ARM_HARDWARE || HAVE_MIPS_HARDWARE #include #endif +#ifdef ENABLE_GRAPHLCD +#include +#endif diff --git a/src/driver/nglcd.cpp b/src/driver/nglcd.cpp index a5d498c8b..7cbb3fbe5 100644 --- a/src/driver/nglcd.cpp +++ b/src/driver/nglcd.cpp @@ -131,15 +131,24 @@ void nGLCD::LcdAnalogClock(int posx,int posy,int dia) mAngleInRad = ((6 * tm_) * (2*pi_ / 360)); mAngleSave = mAngleInRad; mAngleInRad -= pi_/2; - +#if BOXMODEL_VUUNO4KSE + mx_ = int((dia * 0.55 * cos(mAngleInRad))); + my_ = int((dia * 0.55 * sin(mAngleInRad))); +#else mx_ = int((dia * 0.7 * cos(mAngleInRad))); my_ = int((dia * 0.7 * sin(mAngleInRad))); +#endif hAngleInRad = ((30 * th_)* (2*pi_ / 360)); hAngleInRad += mAngleSave / 12; hAngleInRad -= pi_/2; +#if BOXMODEL_VUUNO4KSE + hx_ = int((dia * 0.25 * cos(hAngleInRad))); + hy_ = int((dia * 0.25 * sin(hAngleInRad))); +#else hx_ = int((dia * 0.4 * cos(hAngleInRad))); hy_ = int((dia * 0.4 * sin(hAngleInRad))); +#endif std::string a_clock = ""; @@ -248,8 +257,8 @@ void nGLCD::Exec() { } if (CNeutrinoApp::getInstance()->recordingstatus) { -#if BOXMODEL_VUSOLO4K || BOXMODEL_VUDUO4K || BOXMODEL_VUULTIMO4K - for (int bx = 0; bx < 6; bx++) { +#if BOXMODEL_VUSOLO4K || BOXMODEL_VUDUO4K || BOXMODEL_VUULTIMO4K || BOXMODEL_VUUNO4KSE || BOXMODEL_VUUNO4K + for (int bx = 0; bx < 9; bx++) { #else for (int bx = 0; bx < 3; bx++) { #endif @@ -257,8 +266,8 @@ void nGLCD::Exec() { } } else if (CNeutrinoApp::getInstance()->isMuted()) { -#if BOXMODEL_VUSOLO4K || BOXMODEL_VUDUO4K || BOXMODEL_VUULTIMO4K - for (int bx = 0; bx < 6; bx++) { +#if BOXMODEL_VUSOLO4K || BOXMODEL_VUDUO4K || BOXMODEL_VUULTIMO4K || BOXMODEL_VUUNO4KSE || BOXMODEL_VUUNO4K + for (int bx = 0; bx < 9; bx++) { #else for (int bx = 0; bx < 3; bx++) { #endif @@ -593,14 +602,14 @@ void nGLCD::Run(void) bitmap->Clear(GLCD::cColor::Black); ts.tv_sec = 0; // don't wait static CFrameBuffer* fb = CFrameBuffer::getInstance(); -#if !defined BOXMODEL_VUSOLO4K && !defined BOXMODEL_VUDUO4K && !defined BOXMODEL_VUULTIMO4K +#if !BOXMODEL_VUSOLO4K && !BOXMODEL_VUDUO4K && !BOXMODEL_VUULTIMO4K && !BOXMODEL_VUUNO4KSE static int fb_width = fb->getScreenWidth(true); #endif static int fb_height = fb->getScreenHeight(true); static uint32_t *fbp = fb->getFrameBufferPointer(); int lcd_width = bitmap->Width(); int lcd_height = bitmap->Height(); -#if BOXMODEL_VUSOLO4K || BOXMODEL_VUDUO4K || BOXMODEL_VUULTIMO4K +#if BOXMODEL_VUSOLO4K || BOXMODEL_VUDUO4K || BOXMODEL_VUULTIMO4K || BOXMODEL_VUUNO4KSE unsigned int fb_stride = fb->getStride()/4; if (!showImage(fbp, fb_stride, fb_height, 0, 0, lcd_width, lcd_height, false)) { #else diff --git a/src/driver/nglcd.h b/src/driver/nglcd.h new file mode 100644 index 000000000..7936319c7 --- /dev/null +++ b/src/driver/nglcd.h @@ -0,0 +1,137 @@ +/* + nglcd.h -- Neutrino GraphLCD driver + + Copyright (C) 2012-2014 martii + + License: GPL + + 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifdef ENABLE_GRAPHLCD +#ifndef __glcd_h__ +#define __glcd_h__ + +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wunused-parameter" +#include +#include +#include +#include +#include +#pragma GCC diagnostic warning "-Wunused-parameter" + +class nGLCD +{ + private: + GLCD::cDriver * lcd; + GLCD::cFont font_channel; + GLCD::cFont font_epg; + GLCD::cFont font_time; + GLCD::cFont font_time_standby; + int fontsize_channel; + int fontsize_epg; + int fontsize_time; + int fontsize_time_standby; + int percent_channel; + int percent_time; + int percent_time_standby; + int percent_epg; + int percent_bar; + int percent_logo; + int percent_space; + GLCD::cBitmap * bitmap; + std::string Channel; + std::string Epg; + std::string stagingChannel; + std::string stagingEpg; + t_channel_id channel_id; + int Scale; + time_t now; + struct tm *tm; + int EpgWidth; + int ChannelWidth; + int scrollEpgSkip; + int scrollChannelSkip; + int scrollEpgOffset; + int scrollChannelOffset; + bool scrollEpgForward; + bool scrollChannelForward; + bool blitFlag; + bool channelLocked; + bool doRescan; + bool doSuspend; + bool doStandby; + bool doStandbyTime; + bool doExit; + bool doScrollChannel; + bool doScrollEpg; + bool doShowVolume; + bool doMirrorOSD; + bool fonts_initialized; + pthread_t thrGLCD; + pthread_mutex_t mutex; + sem_t sem; + void updateFonts(); + bool showImage(fb_pixel_t *s, + uint32_t sw, uint32_t sh, + uint32_t dx, uint32_t dy, uint32_t dw, uint32_t dh, + bool transp = false, bool maximize = false); + bool showImage(const std::string & filename, + uint32_t sw, uint32_t sh, + uint32_t dx, uint32_t dy, uint32_t dw, uint32_t dh, + bool transp = false, bool maximize = false); + bool showImage(uint64_t channel_id, std::string ChannelName, + uint32_t dx, uint32_t dy, uint32_t dw, uint32_t dh, + bool transp = false, bool maximize = false); + bool getBoundingBox(uint32_t *buffer, + int width, int height, + int &bb_x, int &bb_y, int &bb_width, int &bb_height); + void LcdAnalogClock(int posx,int posy,int dia); + void Exec(); + void Run(void); + static void* Run(void *); + static void Lock(); + static void Unlock(); + public: + nGLCD(); + ~nGLCD(); + void DeInit(); + void Rescan(); + static nGLCD *getInstance(); + static void lockChannel(std::string txt, std::string epg = "", int scale = 0); + static void unlockChannel(); + static void MirrorOSD(bool b = true); + static void Update(); + static void Suspend(); + static void StandbyMode(bool); + static void ShowVolume(bool); + static void Resume(); + static void Exit(); + static void Blit(); + static void SetBrightness(unsigned int b); + void UpdateBrightness(); + int handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data); +}; +#endif +#endif diff --git a/src/driver/record.cpp b/src/driver/record.cpp index 4acf350ad..149f7af11 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -49,7 +49,7 @@ #include #include - +#include #include #include #include @@ -1088,6 +1088,9 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); if(eventinfo->channel_id == live_channel_id) recordingstatus = 1; +#endif +#ifdef ENABLE_GRAPHLCD + nGLCD::Update(); #endif } else { delete inst; @@ -1290,6 +1293,9 @@ bool CRecordManager::Stop(const CTimerd::RecordingStopInfo * recinfo) if(inst != NULL && recinfo->eventID == inst->GetRecordingId()) { StopInstance(inst, false); ret = true; +#ifdef ENABLE_GRAPHLCD + nGLCD::Update(); +#endif } else { for(nextmap_iterator_t it = nextmap.begin(); it != nextmap.end(); it++) { if((*it)->eventID == recinfo->eventID) { diff --git a/src/driver/volume.cpp b/src/driver/volume.cpp index f78003f57..225ae2282 100644 --- a/src/driver/volume.cpp +++ b/src/driver/volume.cpp @@ -173,6 +173,9 @@ void CVolume::setVolume(const neutrino_msg_t key) } } g_settings.current_volume = v; +#ifdef ENABLE_GRAPHLCD + nGLCD::ShowVolume(true); +#endif } } else if (msg == CRCInput::RC_home) @@ -207,6 +210,9 @@ void CVolume::setVolume(const neutrino_msg_t key) } } while (msg != CRCInput::RC_timeout); +#ifdef ENABLE_GRAPHLCD + nGLCD::ShowVolume(false); +#endif hideVolscale(); } diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am index f4008425e..5764a0eac 100644 --- a/src/gui/Makefile.am +++ b/src/gui/Makefile.am @@ -118,6 +118,11 @@ libneutrino_gui_a_SOURCES += \ lcd4l_setup.cpp endif +if ENABLE_GRAPHLCD +libneutrino_gui_a_SOURCES += \ + glcdsetup.cpp +endif + if BOXTYPE_COOL libneutrino_gui_a_SOURCES += \ streaminfo1.cpp diff --git a/src/gui/bouquetlist.cpp b/src/gui/bouquetlist.cpp index 326f8c82c..1782d40e5 100644 --- a/src/gui/bouquetlist.cpp +++ b/src/gui/bouquetlist.cpp @@ -594,6 +594,10 @@ int CBouquetList::show(bool bShowChannelList) } hide(); +#ifdef ENABLE_GRAPHLCD + nGLCD::unlockChannel(); +#endif + #ifdef ENABLE_LCD4LINUX LCD4l->RemoveFile("/tmp/lcd/menu"); #endif @@ -655,6 +659,10 @@ void CBouquetList::paintItem(int pos) { if(npos < (int) Bouquets.size()) CVFD::getInstance()->showMenuText(0, lname, -1, true); +#ifdef ENABLE_GRAPHLCD + if(g_settings.glcd_enable) + nGLCD::lockChannel(g_Locale->getText(LOCALE_BOUQUETLIST_HEAD), lname, 0); +#endif #ifdef ENABLE_LCD4LINUX if(g_settings.lcd4l_support) LCD4l->CreateFile("/tmp/lcd/menu", lname, g_settings.lcd4l_convert); diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index d7befecc6..231d7af9f 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -968,6 +968,9 @@ int CChannelList::show() if (edit_state) editMode(false); +#ifdef ENABLE_GRAPHLCD + nGLCD::unlockChannel(); +#endif #ifdef ENABLE_LCD4LINUX LCD4l->RemoveFile("/tmp/lcd/menu"); #endif @@ -2247,6 +2250,10 @@ void CChannelList::updateVfd() } else CVFD::getInstance()->showMenuText(0, chan->getName().c_str(), -1, true); // UTF-8 +#ifdef ENABLE_GRAPHLCD + if(g_settings.glcd_enable) + nGLCD::lockChannel(g_Locale->getText(LOCALE_BOUQUETLIST_HEAD), chan->getName().c_str(), 0); +#endif #ifdef ENABLE_LCD4LINUX if (g_settings.lcd4l_support) LCD4l->CreateFile("/tmp/lcd/menu", chan->getName().c_str(), g_settings.lcd4l_convert); diff --git a/src/gui/glcdsetup.cpp b/src/gui/glcdsetup.cpp new file mode 100644 index 000000000..4ac2025d8 --- /dev/null +++ b/src/gui/glcdsetup.cpp @@ -0,0 +1,273 @@ +/* + Neutrino graphlcd menue + + (c) 2012 by martii + + + License: GPL + + 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#define __USE_FILE_OFFSET64 1 +#include "filebrowser.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "glcdsetup.h" +#include + +#define KEY_GLCD_BLACK 0 +#define KEY_GLCD_WHITE 1 +#define KEY_GLCD_RED 2 +#define KEY_GLCD_GREEN 3 +#define KEY_GLCD_BLUE 4 +#define KEY_GLCD_MAGENTA 5 +#define KEY_GLCD_CYAN 6 +#define KEY_GLCD_YELLOW 7 +#define KEY_GLCD_ORANGE 8 +#define KEY_GLCD_LIGHT_GRAY 9 +#define KEY_GLCD_GRAY 10 +#define KEY_GLCD_DARK_GRAY 11 +#define KEY_GLCD_DARK_RED 12 +#define KEY_GLCD_DARK_GREEN 13 +#define KEY_GLCD_DARK_BLUE 14 +#define KEY_GLCD_PURPLE 15 +#define KEY_GLCD_MINT 16 +#define KEY_GLCD_GOLDEN 17 +#define GLCD_COLOR_OPTION_COUNT 18 +static const CMenuOptionChooser::keyval GLCD_COLOR_OPTIONS[GLCD_COLOR_OPTION_COUNT] = +{ + { KEY_GLCD_BLACK, LOCALE_GLCD_COLOR_BLACK }, + { KEY_GLCD_WHITE, LOCALE_GLCD_COLOR_WHITE }, + { KEY_GLCD_RED, LOCALE_GLCD_COLOR_RED }, + { KEY_GLCD_GREEN, LOCALE_GLCD_COLOR_GREEN }, + { KEY_GLCD_BLUE, LOCALE_GLCD_COLOR_BLUE }, + { KEY_GLCD_MAGENTA, LOCALE_GLCD_COLOR_MAGENTA }, + { KEY_GLCD_CYAN, LOCALE_GLCD_COLOR_CYAN }, + { KEY_GLCD_YELLOW, LOCALE_GLCD_COLOR_YELLOW }, + { KEY_GLCD_ORANGE, LOCALE_GLCD_COLOR_ORANGE }, + { KEY_GLCD_LIGHT_GRAY, LOCALE_GLCD_COLOR_LIGHT_GRAY }, + { KEY_GLCD_GRAY, LOCALE_GLCD_COLOR_GRAY }, + { KEY_GLCD_DARK_GRAY, LOCALE_GLCD_COLOR_DARK_GRAY }, + { KEY_GLCD_DARK_RED, LOCALE_GLCD_COLOR_DARK_RED }, + { KEY_GLCD_DARK_GREEN, LOCALE_GLCD_COLOR_DARK_GREEN }, + { KEY_GLCD_DARK_BLUE, LOCALE_GLCD_COLOR_DARK_BLUE }, + { KEY_GLCD_PURPLE, LOCALE_GLCD_COLOR_PURPLE }, + { KEY_GLCD_MINT, LOCALE_GLCD_COLOR_MINT }, + { KEY_GLCD_GOLDEN, LOCALE_GLCD_COLOR_GOLDEN } +}; + +static const uint32_t colormap[GLCD_COLOR_OPTION_COUNT] = +{ + GLCD::cColor::Black, + GLCD::cColor::White, + GLCD::cColor::Red, + GLCD::cColor::Green, + GLCD::cColor::Blue, + GLCD::cColor::Magenta, + GLCD::cColor::Cyan, + GLCD::cColor::Yellow, + GLCD::cColor::Orange, + GLCD::cColor::Light_Gray, + GLCD::cColor::Gray, + GLCD::cColor::Dark_Gray, + GLCD::cColor::Dark_Red, + GLCD::cColor::Dark_Green, + GLCD::cColor::Dark_Blue, + GLCD::cColor::Purple, + GLCD::cColor::Mint, + GLCD::cColor::Golden +}; + +int GLCD_Menu::color2index(uint32_t color) { + for (int i = 0; i < GLCD_COLOR_OPTION_COUNT; i++) + if (colormap[i] == color) + return i; + return KEY_GLCD_BLACK; +} + +uint32_t GLCD_Menu::index2color(int i) { + return (i < GLCD_COLOR_OPTION_COUNT) ? colormap[i] : GLCD::cColor::ERRCOL; +} + +GLCD_Menu::GLCD_Menu() +{ + width = 40; + selected = -1; +} + +int GLCD_Menu::exec(CMenuTarget* parent, const std::string & actionKey) +{ + int res = menu_return::RETURN_REPAINT; + nGLCD *nglcd = nGLCD::getInstance(); + if(actionKey == "rescan") { + nglcd->Rescan(); + return res; + } + if(actionKey == "select_font") { + if(parent) + parent->hide(); + CFileBrowser fileBrowser; + CFileFilter fileFilter; + fileFilter.addFilter("ttf"); + fileBrowser.Filter = &fileFilter; + if (fileBrowser.exec(FONTDIR) == true) { + g_settings.glcd_font = fileBrowser.getSelectedFile()->Name; + nglcd->Rescan(); + } + return res; + } + + if (parent) + parent->hide(); + + GLCD_Menu_Settings(); + + return res; +} + +void GLCD_Menu::hide() +{ +} + +bool GLCD_Menu::changeNotify (const neutrino_locale_t OptionName, void *Data) +{ + if (!Data) + return false; + nGLCD *nglcd = nGLCD::getInstance(); + switch(OptionName) { + case LOCALE_GLCD_SELECT_FG: + g_settings.glcd_color_fg = GLCD_Menu::index2color(*((int *) Data)); + break; + case LOCALE_GLCD_SELECT_BG: + g_settings.glcd_color_bg = GLCD_Menu::index2color(*((int *) Data)); + break; + case LOCALE_GLCD_SELECT_BAR: + g_settings.glcd_color_bar = GLCD_Menu::index2color(*((int *) Data)); + break; + case LOCALE_GLCD_ENABLE: + if (g_settings.glcd_enable) + nglcd->Resume(); + else + nglcd->Suspend(); + return true; + case LOCALE_GLCD_MIRROR_OSD: + nglcd->MirrorOSD(*((int *) Data)); + break; + case LOCALE_GLCD_MIRROR_VIDEO: + nglcd->Update(); + break; + case LOCALE_GLCD_BRIGHTNESS: + case LOCALE_GLCD_BRIGHTNESS_STANDBY: + case LOCALE_GLCD_SHOW_LOGO: + case LOCALE_GLCD_SIZE_BAR: + case LOCALE_GLCD_SIZE_CHANNEL: + case LOCALE_GLCD_SIZE_EPG: + case LOCALE_GLCD_SIZE_LOGO: + case LOCALE_GLCD_SIZE_TIME: + case LOCALE_GLCD_SIZE_TIME_STANDBY: + case LOCALE_GLCD_TIME_IN_STANDBY: + case LOCALE_GLCD_SCROLL_SPEED: + break; + default: + return false; + } + if (((OptionName == LOCALE_GLCD_TIME_IN_STANDBY || OptionName == LOCALE_GLCD_BRIGHTNESS_STANDBY) && g_settings.glcd_percent_time_standby) || OptionName == LOCALE_GLCD_SIZE_TIME_STANDBY) + nglcd->StandbyMode(true); + else + nglcd->StandbyMode(false); + + nglcd->Update(); + return true; +} + +#define ONOFFSEC_OPTION_COUNT 3 +static const CMenuOptionChooser::keyval ONOFFSEC_OPTIONS[ONOFFSEC_OPTION_COUNT] = { + { 0, LOCALE_OPTIONS_OFF }, + { 1, LOCALE_OPTIONS_ON }, +// { 2, LOCALE_CLOCK_SECONDS }, + { 3, LOCALE_OPTIONS_ON } // FIXME +}; + +void GLCD_Menu::GLCD_Menu_Settings() +{ + int color_bg = color2index(g_settings.glcd_color_bg); + int color_fg = color2index(g_settings.glcd_color_fg); + int color_bar = color2index(g_settings.glcd_color_bar); + + CMenuWidget m(LOCALE_GLCD_HEAD, NEUTRINO_ICON_SETTINGS, width); + m.addIntroItems(); + m.setSelected(selected); + + m.addItem(new CMenuOptionChooser(LOCALE_GLCD_ENABLE, &g_settings.glcd_enable, + OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this)); + int shortcut = 1; + m.addItem(GenericMenuSeparatorLine); + m.addItem(new CMenuOptionChooser(LOCALE_GLCD_SELECT_FG, &color_fg, + GLCD_COLOR_OPTIONS, GLCD_COLOR_OPTION_COUNT, true, this, + CRCInput::convertDigitToKey(shortcut++))); + m.addItem(new CMenuOptionChooser(LOCALE_GLCD_SELECT_BG, &color_bg, + GLCD_COLOR_OPTIONS, GLCD_COLOR_OPTION_COUNT, true, this, + CRCInput::convertDigitToKey(shortcut++))); + m.addItem(new CMenuOptionChooser(LOCALE_GLCD_SELECT_BAR, &color_bar, + GLCD_COLOR_OPTIONS, GLCD_COLOR_OPTION_COUNT, true, this, + CRCInput::convertDigitToKey(shortcut++))); + m.addItem(new CMenuForwarder(LOCALE_GLCD_FONT, true, g_settings.glcd_font, this, "select_font", + CRCInput::convertDigitToKey(shortcut++))); + m.addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_SIZE_CHANNEL, + &g_settings.glcd_percent_channel, true, 0, 100, this)); + m.addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_SIZE_EPG, + &g_settings.glcd_percent_epg, true, 0, 100, this)); + m.addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_SIZE_BAR, + &g_settings.glcd_percent_bar, true, 0, 100, this)); + m.addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_SIZE_TIME, + &g_settings.glcd_percent_time, true, 0, 100, this)); + m.addItem(new CMenuOptionChooser(LOCALE_GLCD_SHOW_LOGO, &g_settings.glcd_show_logo, + OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this, + CRCInput::convertDigitToKey(shortcut++))); + m.addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_SIZE_LOGO, + &g_settings.glcd_percent_logo, true, 0, 100, this)); + m.addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_BRIGHTNESS, + &g_settings.glcd_brightness, true, 0, 100, this)); + m.addItem(GenericMenuSeparatorLine); + m.addItem(new CMenuOptionChooser(LOCALE_GLCD_TIME_IN_STANDBY, &g_settings.glcd_time_in_standby, + ONOFFSEC_OPTIONS, ONOFFSEC_OPTION_COUNT, true, this, + CRCInput::convertDigitToKey(shortcut++))); + m.addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_SIZE_TIME_STANDBY, + &g_settings.glcd_percent_time_standby, true, 0, 100, this)); + m.addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_BRIGHTNESS_STANDBY, + &g_settings.glcd_brightness_standby, true, 0, 100, this)); + m.addItem(GenericMenuSeparatorLine); + m.addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_SCROLL_SPEED, + &g_settings.glcd_scroll_speed, true, 1, 63, this)); + m.addItem(GenericMenuSeparatorLine); + m.addItem(new CMenuOptionChooser(LOCALE_GLCD_MIRROR_OSD, &g_settings.glcd_mirror_osd, + OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this, CRCInput::RC_green)); + m.addItem(new CMenuOptionChooser(LOCALE_GLCD_MIRROR_VIDEO, &g_settings.glcd_mirror_video, + OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this, CRCInput::RC_yellow)); + m.addItem(GenericMenuSeparatorLine); + m.addItem(new CMenuForwarder(LOCALE_GLCD_RESTART, true, NULL, this, "rescan", CRCInput::RC_red)); + m.exec(NULL, ""); + selected = m.getSelected(); + nGLCD::getInstance()->StandbyMode(false); + m.hide(); +} diff --git a/src/gui/glcdsetup.h b/src/gui/glcdsetup.h new file mode 100644 index 000000000..aa587517e --- /dev/null +++ b/src/gui/glcdsetup.h @@ -0,0 +1,48 @@ +/* + Neutrino graphlcd menue + + Copyright (C) 2012 martii + + License: GPL + + 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifdef ENABLE_GRAPHLCD + +#ifndef __glcdsetup_h__ +#define __glcdsetup_h__ + +#include +#include +#include +#include + +class GLCD_Menu : public CMenuTarget, public CChangeObserver +{ + private: + int width; + int selected; + static int color2index(uint32_t color); + public: + static uint32_t index2color(int i); + GLCD_Menu(); + void hide(); + int exec(CMenuTarget* parent, const std::string & actionKey); + bool changeNotify(const neutrino_locale_t, void *); + void GLCD_Menu_Settings(); +}; +#endif // __glcdsetup_h__ +#endif // ENABLE_GRAPHLCD diff --git a/src/gui/lcd4l_setup.cpp b/src/gui/lcd4l_setup.cpp index 59eb3bdc8..fc55dff00 100644 --- a/src/gui/lcd4l_setup.cpp +++ b/src/gui/lcd4l_setup.cpp @@ -52,7 +52,6 @@ #include -// lcd4l-support #include "driver/lcd4l.h" extern CLCD4l *LCD4l; diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 7f85f5c70..12e46039e 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -85,6 +85,10 @@ #include #endif +#ifdef ENABLE_GRAPHLCD +bool glcd_play = false; +#endif + #if HAVE_COOL_HARDWARE || HAVE_ARM_HARDWARE || HAVE_MIPS_HARDWARE #define LCD_MODE CVFD::MODE_MENU_UTF8 #else @@ -1370,6 +1374,16 @@ bool CMoviePlayerGui::PlayFileStart(void) CZapit::getInstance()->SetVolumePercent(percent); } +#ifdef ENABLE_GRAPHLCD + nGLCD::MirrorOSD(false); + if (p_movie_info) + nGLCD::lockChannel(p_movie_info->channelName, p_movie_info->epgTitle); + else { + glcd_play = true; + nGLCD::lockChannel(g_Locale->getText(LOCALE_MOVIEPLAYER_HEAD), file_name.c_str(), file_prozent); + } +#endif + file_prozent = 0; pthread_t thrStartHint = 0; if (is_file_player) { @@ -1563,6 +1577,14 @@ void CMoviePlayerGui::PlayFileLoop(void) #endif while (playstate >= CMoviePlayerGui::PLAY) { +#ifdef ENABLE_GRAPHLCD + if (p_movie_info) + nGLCD::lockChannel(p_movie_info->channelName, p_movie_info->epgTitle, duration ? (100 * position / duration) : 0); + else { + glcd_play = true; + nGLCD::lockChannel(g_Locale->getText(LOCALE_MOVIEPLAYER_HEAD), file_name.c_str(), file_prozent); + } +#endif if (update_lcd || g_settings.movieplayer_display_playtime) { update_lcd = false; updateLcd(g_settings.movieplayer_display_playtime); @@ -2068,6 +2090,12 @@ void CMoviePlayerGui::PlayFileEnd(bool restore) playback->SetSpeed(1); playback->Close(); +#ifdef ENABLE_GRAPHLCD + if (p_movie_info || glcd_play == true) { + glcd_play = false; + nGLCD::unlockChannel(); + } +#endif if (iso_file) { iso_file = false; if (umount2(ISO_MOUNT_POINT, MNT_FORCE)) @@ -2187,6 +2215,10 @@ void CMoviePlayerGui::callInfoViewer(bool init_vzap_it) } if (!movie_info.channelName.empty() || !movie_info.epgTitle.empty()) p_movie_info = &movie_info; +#ifdef ENABLE_GRAPHLCD + if (p_movie_info) + nGLCD::lockChannel(p_movie_info->channelName, p_movie_info->epgTitle); +#endif } if (p_movie_info) { diff --git a/src/gui/osd_setup.cpp b/src/gui/osd_setup.cpp index 747270916..4bfb820a6 100644 --- a/src/gui/osd_setup.cpp +++ b/src/gui/osd_setup.cpp @@ -64,6 +64,7 @@ #include #include #include +#include #include "cs_api.h" #include diff --git a/src/gui/vfd_setup.cpp b/src/gui/vfd_setup.cpp index 18aeea192..449f46ef4 100644 --- a/src/gui/vfd_setup.cpp +++ b/src/gui/vfd_setup.cpp @@ -33,6 +33,9 @@ #include #endif +#ifdef ENABLE_GRAPHLCD +#include +#endif #include "vfd_setup.h" @@ -187,6 +190,13 @@ int CVfdSetup::showSetup() vfds->addItem(oj); } +#ifdef ENABLE_GRAPHLCD + GLCD_Menu glcdMenu; + + vfds->addItem(GenericMenuSeparatorLine); + vfds->addItem(new CMenuForwarder(LOCALE_GLCD_HEAD, true, NULL, &glcdMenu, NULL, CRCInput::RC_blue)); +#endif + int res = vfds->exec(NULL, ""); delete vfds; diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index e2f05ef68..a7c919fb2 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -94,6 +94,9 @@ CMenuItem::CMenuItem(bool Active, neutrino_msg_t DirectKey, const char * const I actObserv = NULL; parent_widget = NULL; +#ifdef ENABLE_GRAPHLCD + graphlcd_text = ""; +#endif #ifdef ENABLE_LCD4LINUX lcd4l_text = ""; #endif @@ -243,6 +246,10 @@ void CMenuItem::paintItemCaption(const bool select_mode, const char * right_text char str[len]; snprintf(str, len, "%s %s", left_text, right_text); CVFD::getInstance()->showMenuText(0, str, -1, true); +#ifdef ENABLE_GRAPHLCD + if (g_settings.glcd_enable) + graphlcd_text = str; +#endif #ifdef ENABLE_LCD4LINUX if(g_settings.lcd4l_support) lcd4l_text = str; @@ -251,11 +258,20 @@ void CMenuItem::paintItemCaption(const bool select_mode, const char * right_text else { CVFD::getInstance()->showMenuText(0, left_text, -1, true); +#ifdef ENABLE_GRAPHLCD + if (g_settings.glcd_enable) + graphlcd_text = left_text; +#endif #ifdef ENABLE_LCD4LINUX if (g_settings.lcd4l_support) lcd4l_text = left_text; #endif } + +#ifdef ENABLE_GRAPHLCD + if (g_settings.glcd_enable) + nGLCD::lockChannel(g_Locale->getText(LOCALE_MAINMENU_HEAD), graphlcd_text, 0); +#endif #ifdef ENABLE_LCD4LINUX if (g_settings.lcd4l_support) LCD4l->CreateFile("/tmp/lcd/menu", lcd4l_text, g_settings.lcd4l_convert); @@ -1023,6 +1039,9 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) case (CRCInput::RC_right): case (CRCInput::RC_ok): if (hasItem() && selected > -1 && (int)items.size() > selected) { +#ifdef ENABLE_GRAPHLCD + nGLCD::unlockChannel(); +#endif #ifdef ENABLE_LCD4LINUX LCD4l->RemoveFile("/tmp/lcd/menu"); #endif @@ -1040,6 +1059,10 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) fader.StopFade(); int rv = item->exec( this ); +#ifdef ENABLE_GRAPHLCD + if (g_settings.glcd_enable) + nGLCD::lockChannel(g_Locale->getText(LOCALE_MAINMENU_HEAD), item->graphlcd_text, 0); +#endif #ifdef ENABLE_LCD4LINUX if (g_settings.lcd4l_support) LCD4l->CreateFile("/tmp/lcd/menu", item->lcd4l_text, g_settings.lcd4l_convert); @@ -1129,6 +1152,9 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) if(oldLcdMode != CVFD::getInstance()->getMode()) CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); +#ifdef ENABLE_GRAPHLCD + nGLCD::unlockChannel(); +#endif #ifdef ENABLE_LCD4LINUX LCD4l->RemoveFile("/tmp/lcd/menu"); #endif diff --git a/src/gui/widget/menue.h b/src/gui/widget/menue.h index eb211382a..4c3b162f0 100644 --- a/src/gui/widget/menue.h +++ b/src/gui/widget/menue.h @@ -208,6 +208,10 @@ class CMenuItem : public CComponentsSignals void setParentWidget(CMenuWidget* parent){parent_widget = parent;} void setInfoIconRight(const char * const IconName_Info_right); const char* getInfoIconRight(){return iconName_Info_right;} + +#ifdef ENABLE_GRAPHLCD + std::string graphlcd_text; +#endif #ifdef ENABLE_LCD4LINUX std::string lcd4l_text; #endif diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 9617aa56b..27abd5913 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -125,11 +125,6 @@ #include #include -#ifdef ENABLE_LCD4LINUX -#include "driver/lcd4l.h" -CLCD4l *LCD4l; -#endif - #include #include @@ -161,6 +156,12 @@ int old_b_id = -1; CInfoClock *InfoClock; CTimeOSD *FileTimeOSD; + +#ifdef ENABLE_LCD4LINUX +#include "driver/lcd4l.h" +CLCD4l *LCD4l; +#endif + int allow_flash = 1; Zapit_config zapitCfg; char zapit_lat[20]="#"; @@ -631,6 +632,38 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.osd_colorsettings_advanced_mode = configfile.getBool("osd_colorsettings_advanced_mode", false); +#ifdef ENABLE_GRAPHLCD + g_settings.glcd_enable = configfile.getInt32("glcd_enable", 1); + g_settings.glcd_color_fg = configfile.getInt32("glcd_color_fg", GLCD::cColor::White); + g_settings.glcd_color_bg = configfile.getInt32("glcd_color_bg", GLCD::cColor::Black); + g_settings.glcd_color_bar = configfile.getInt32("glcd_color_bar", GLCD::cColor::Blue); + g_settings.glcd_percent_channel = configfile.getInt32("glcd_percent_channel", 22); + g_settings.glcd_percent_epg = configfile.getInt32("glcd_percent_epg", 16); + g_settings.glcd_percent_bar = configfile.getInt32("glcd_percent_bar", 8); + g_settings.glcd_percent_time = configfile.getInt32("glcd_percent_time", 35); + g_settings.glcd_percent_time_standby = configfile.getInt32("glcd_percent_time_standby", 50); + g_settings.glcd_percent_logo = configfile.getInt32("glcd_percent_logo", 50); + g_settings.glcd_mirror_osd = configfile.getInt32("glcd_mirror_osd", 0); + g_settings.glcd_mirror_video = configfile.getInt32("glcd_mirror_video", 0); + g_settings.glcd_time_in_standby = configfile.getInt32("glcd_time_in_standby", 1); + g_settings.glcd_show_logo = configfile.getInt32("glcd_show_logo", 1); + g_settings.glcd_font = configfile.getString("glcd_font", FONTDIR "/neutrino.ttf"); +#if BOXMODEL_VUUNO4KSE + g_settings.glcd_brightness = configfile.getInt32("glcd_brightness", 25); + g_settings.glcd_brightness_standby = configfile.getInt32("glcd_brightness_standby", 5); +#else + g_settings.glcd_brightness = configfile.getInt32("glcd_brightness", 75); + g_settings.glcd_brightness_standby = configfile.getInt32("glcd_brightness_standby", 45); +#endif +#if BOXMODEL_VUUNO4KSE + g_settings.glcd_scroll_speed = configfile.getInt32("glcd_scroll_speed", 1); +#elif BOXMODEL_VUSOLO4K || BOXMODEL_VUDUO4K || BOXMODEL_VUULTIMO4K + g_settings.glcd_scroll_speed = configfile.getInt32("glcd_scroll_speed", 2); +#else + g_settings.glcd_scroll_speed = configfile.getInt32("glcd_scroll_speed", 5); +#endif +#endif + //personalize g_settings.personalize_pincode = configfile.getString( "personalize_pincode", "0000" ); for (int i = 0; i < SNeutrinoSettings::P_SETTINGS_MAX; i++)//settings.h, settings.cpp @@ -1492,6 +1525,27 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setBool("osd_colorsettings_advanced_mode", g_settings.osd_colorsettings_advanced_mode); +#ifdef ENABLE_GRAPHLCD + configfile.setInt32("glcd_enable", g_settings.glcd_enable); + configfile.setInt32("glcd_color_fg", g_settings.glcd_color_fg); + configfile.setInt32("glcd_color_bg", g_settings.glcd_color_bg); + configfile.setInt32("glcd_color_bar", g_settings.glcd_color_bar); + configfile.setInt32("glcd_percent_channel", g_settings.glcd_percent_channel); + configfile.setInt32("glcd_percent_epg", g_settings.glcd_percent_epg); + configfile.setInt32("glcd_percent_bar", g_settings.glcd_percent_bar); + configfile.setInt32("glcd_percent_time", g_settings.glcd_percent_time); + configfile.setInt32("glcd_percent_time_standby", g_settings.glcd_percent_time_standby); + configfile.setInt32("glcd_percent_logo", g_settings.glcd_percent_logo); + configfile.setInt32("glcd_mirror_osd", g_settings.glcd_mirror_osd); + configfile.setInt32("glcd_mirror_video", g_settings.glcd_mirror_video); + configfile.setInt32("glcd_time_in_standby", g_settings.glcd_time_in_standby); + configfile.setInt32("glcd_show_logo", g_settings.glcd_show_logo); + configfile.setString("glcd_font", g_settings.glcd_font); + configfile.setInt32("glcd_brightness", g_settings.glcd_brightness); + configfile.setInt32("glcd_brightness_standby", g_settings.glcd_brightness_standby); + configfile.setInt32("glcd_scroll_speed", g_settings.glcd_scroll_speed); +#endif + //personalize configfile.setString("personalize_pincode", g_settings.personalize_pincode); for (int i = 0; i < SNeutrinoSettings::P_SETTINGS_MAX; i++) //settings.h, settings.cpp @@ -2560,6 +2614,10 @@ TIMER_START(); CVFD::getInstance()->setBacklight(g_settings.backlight_tv); CVFD::getInstance()->setScrollMode(g_settings.lcd_scroll); +#ifdef ENABLE_GRAPHLCD + nGLCD::getInstance(); +#endif + if (!scanSettings.loadSettings(NEUTRINO_SCAN_SETTINGS_FILE)) dprintf(DEBUG_NORMAL, "Loading of scan settings failed. Using defaults.\n"); @@ -2771,7 +2829,11 @@ TIMER_START(); SHTDCNT::getInstance()->init(); - +#ifdef ENABLE_LCD4LINUX + LCD4l = new CLCD4l(); + if(g_settings.lcd4l_support) + LCD4l->StartLCD4l(); +#endif CZapit::getInstance()->SetScanSDT(g_settings.enable_sdt); cSysLoad::getInstance(); cHddStat::getInstance(); @@ -3148,6 +3210,11 @@ void CNeutrinoApp::RealRun() if(show_info && channelList->getSize()) { showInfo(); } +#ifdef ENABLE_GRAPHLCD + if (msg == NeutrinoMessages::EVT_CURRENTNEXT_EPG) { + nGLCD::Update(); + } +#endif } else if (msg == CRCInput::RC_timer) { @@ -3417,6 +3484,9 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) g_settings.audio_AnalogMode = 0; CVFD::getInstance()->UpdateIcons(); +#ifdef ENABLE_GRAPHLCD + nGLCD::Update(); +#endif g_RCInput->killTimer(scrambled_timer); if (mode != NeutrinoModes::mode_webtv) { g_Zapit->setMode43(g_settings.video_43mode); @@ -4244,6 +4314,11 @@ void CNeutrinoApp::ExitRun(int exit_code) delete SHTDCNT::getInstance(); stop_video(); +#ifdef ENABLE_GRAPHLCD + if (exit_code == CNeutrinoApp::EXIT_SHUTDOWN) + nGLCD::SetBrightness(0); +#endif + Cleanup(); printf("[neutrino] This is the end. Exiting with code %d\n", exit_code); @@ -4407,7 +4482,10 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) lockStandbyCall = true; if( bOnOff ) { - CVFD::getInstance()->ShowText("standby... "); +#ifdef ENABLE_GRAPHLCD + nGLCD::StandbyMode(true); +#endif + CVFD::getInstance()->ShowText("Standby ..."); if( mode == NeutrinoModes::mode_scart ) { //g_Controld->setScartMode( 0 ); } @@ -4494,6 +4572,10 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) g_InfoViewer->getEPG(0, dummy); g_RCInput->killTimer(fst_timer); +#ifdef ENABLE_GRAPHLCD + nGLCD::StandbyMode(false); +#endif + if(init_cec_setting){ //init cec settings CCECSetup cecsetup; @@ -4859,6 +4941,10 @@ void stop_daemons(bool stopall, bool for_flash) tuxtxt_stop(); tuxtxt_close(); +#ifdef ENABLE_GRAPHLCD + nGLCD::Exit(); +#endif + if (g_Radiotext) { delete g_Radiotext; g_Radiotext = NULL; @@ -5174,7 +5260,7 @@ void CNeutrinoApp::saveKeys(const char * fname) } } -void CNeutrinoApp::StopSubtitles() +void CNeutrinoApp::StopSubtitles(bool enable_glcd_mirroring) { //printf("[neutrino] %s\n", __FUNCTION__); int ttx, dvbpid, ttxpid, ttxpage; @@ -5188,6 +5274,10 @@ void CNeutrinoApp::StopSubtitles() tuxtx_pause_subtitle(true); frameBuffer->paintBackground(); } +#ifdef ENABLE_GRAPHLCD + if (enable_glcd_mirroring) + nGLCD::MirrorOSD(g_settings.glcd_mirror_osd); +#endif if (mode == NeutrinoModes::mode_webtv) CMoviePlayerGui::getInstance(true).clearSubtitle(true); } @@ -5195,6 +5285,9 @@ void CNeutrinoApp::StopSubtitles() void CNeutrinoApp::StartSubtitles(bool show) { //printf("%s: %s\n", __FUNCTION__, show ? "Show" : "Not show"); +#ifdef ENABLE_GRAPHLCD + nGLCD::MirrorOSD(false); +#endif if(!show) return; dvbsub_start(0); diff --git a/src/neutrino.h b/src/neutrino.h index a42037a28..8454be41e 100644 --- a/src/neutrino.h +++ b/src/neutrino.h @@ -206,7 +206,7 @@ public: void MarkChannelsInit(void) { channels_init = true; }; void quickZap(int msg); void numericZap(int msg); - void StopSubtitles(); + void StopSubtitles(bool enable_glcd_mirroring = true); void StartSubtitles(bool show = true); bool StartPip(const t_channel_id channel_id); void SelectSubtitles(); diff --git a/src/system/flashtool.cpp b/src/system/flashtool.cpp index 2ff4ff551..7c22d5b51 100644 --- a/src/system/flashtool.cpp +++ b/src/system/flashtool.cpp @@ -49,6 +49,11 @@ #define writesize oobsize #endif +#ifdef ENABLE_LCD4LINUX +#include "driver/lcd4l.h" +extern CLCD4l *LCD4l; +#endif + CFlashTool::CFlashTool() { statusViewer = NULL; diff --git a/src/system/locals.h b/src/system/locals.h index 198b826c0..3adfe5d2f 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -830,6 +830,45 @@ typedef enum LOCALE_FSK_TO_12, LOCALE_FSK_TO_16, LOCALE_FSK_TO_7, + LOCALE_GLCD_BRIGHTNESS, + LOCALE_GLCD_BRIGHTNESS_STANDBY, + LOCALE_GLCD_COLOR_BLACK, + LOCALE_GLCD_COLOR_BLUE, + LOCALE_GLCD_COLOR_CYAN, + LOCALE_GLCD_COLOR_GREEN, + LOCALE_GLCD_COLOR_MAGENTA, + LOCALE_GLCD_COLOR_RED, + LOCALE_GLCD_COLOR_WHITE, + LOCALE_GLCD_COLOR_YELLOW, + LOCALE_GLCD_COLOR_ORANGE, + LOCALE_GLCD_COLOR_LIGHT_GRAY, + LOCALE_GLCD_COLOR_GRAY, + LOCALE_GLCD_COLOR_DARK_GRAY, + LOCALE_GLCD_COLOR_DARK_RED, + LOCALE_GLCD_COLOR_DARK_GREEN, + LOCALE_GLCD_COLOR_DARK_BLUE, + LOCALE_GLCD_COLOR_PURPLE, + LOCALE_GLCD_COLOR_MINT, + LOCALE_GLCD_COLOR_GOLDEN, + LOCALE_GLCD_ENABLE, + LOCALE_GLCD_FONT, + LOCALE_GLCD_HEAD, + LOCALE_GLCD_MIRROR_OSD, + LOCALE_GLCD_MIRROR_VIDEO, + LOCALE_GLCD_RESTART, + LOCALE_GLCD_SCROLL_SPEED, + LOCALE_GLCD_SELECT_BAR, + LOCALE_GLCD_SELECT_BG, + LOCALE_GLCD_SELECT_FG, + LOCALE_GLCD_SHOW_LOGO, + LOCALE_GLCD_SIZE_BAR, + LOCALE_GLCD_SIZE_CHANNEL, + LOCALE_GLCD_SIZE_EPG, + LOCALE_GLCD_SIZE_LOGO, + LOCALE_GLCD_SIZE_TIME, + LOCALE_GLCD_SIZE_TIME_STANDBY, + LOCALE_GLCD_TIME_IN_STANDBY, + LOCALE_GLCD_VOLUME, LOCALE_HDD_10MIN, LOCALE_HDD_1MIN, LOCALE_HDD_20MIN, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index e0bd24073..f4b0247e3 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -830,6 +830,45 @@ const char * locale_real_names[] = "fsk.to_12", "fsk.to_16", "fsk.to_7", + "glcd.brightness", + "glcd.brightness_standby", + "glcd.color.black", + "glcd.color.blue", + "glcd.color.cyan", + "glcd.color.green", + "glcd.color.magenta", + "glcd.color.red", + "glcd.color.white", + "glcd.color.yellow", + "glcd.color.orange", + "glcd.color.light_gray", + "glcd.color.gray", + "glcd.color.dark_gray", + "glcd.color.dark_red", + "glcd.color.dark_green", + "glcd.color.dark_blue", + "glcd.color.purple", + "glcd.color.mint", + "glcd.color.golden", + "glcd.enable", + "glcd.font", + "glcd.head", + "glcd.mirror_osd", + "glcd.mirror_video", + "glcd.restart", + "glcd.scroll_speed", + "glcd.select.bar", + "glcd.select.bg", + "glcd.select.fg", + "glcd.show_logo", + "glcd.size_bar", + "glcd.size_channel", + "glcd.size_epg", + "glcd.size_logo", + "glcd.size_time", + "glcd.size_time_standby", + "glcd.time_in_standby", + "glcd.volume", "hdd_10min", "hdd_1min", "hdd_20min", diff --git a/src/system/settings.h b/src/system/settings.h index 9c146bdee..071e995ef 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -790,6 +790,27 @@ struct SNeutrinoSettings int infoClockSeconds; int infoClockBackground; +#ifdef ENABLE_GRAPHLCD + // graphlcd + int glcd_enable; + uint32_t glcd_color_fg; + uint32_t glcd_color_bg; + uint32_t glcd_color_bar; + std::string glcd_font; + int glcd_percent_channel; + int glcd_percent_epg; + int glcd_percent_bar; + int glcd_percent_time; + int glcd_percent_time_standby; + int glcd_percent_logo; + int glcd_mirror_osd; + int glcd_mirror_video; + int glcd_time_in_standby; + int glcd_show_logo; + int glcd_brightness; + int glcd_brightness_standby; + int glcd_scroll_speed; +#endif #ifdef ENABLE_LCD4LINUX // lcd4linux int lcd4l_support; @@ -801,7 +822,6 @@ struct SNeutrinoSettings int lcd4l_skin_radio; int lcd4l_convert; #endif - // lcdd enum LCD_SETTINGS { LCD_BRIGHTNESS = 0,