From 2ee6173832f7760cad33b0b63ce4f798d6640873 Mon Sep 17 00:00:00 2001 From: Martin Hammerschmid Date: Tue, 17 Dec 2002 18:46:31 +0100 Subject: Version 0.0.8 --- Makefile | 8 ++++++-- README | 3 +++ lcd.c | 56 +++++++++++++++++++++++++++++++++++++++++--------------- lcdproc.c | 2 +- 4 files changed, 51 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index 80ad3e9..fcec38f 100644 --- a/Makefile +++ b/Makefile @@ -36,14 +36,18 @@ INCLUDES = -I$(VDRINC) -I$(DVBDIR) DEFINES = -DPLUGIN_NAME_I18N='"$(PLUGIN)"' +ifdef LCDKEYCONF +DEFINES += -DLCD_EXT_KEY_CONF="\"$(LCDKEYCONF)\"" +endif + ### The object files (add further files here): OBJS = $(PLUGIN).o lcd.o sockets.o i18n.o setup.o ### The C++ compiler and options: -CXX = g++ -CXXFLAGS = -g -O2 -Wall -Woverloaded-virtual +CXX ?= g++ +CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual ### Implicit rules: diff --git a/README b/README index 1f7cb7a..db86cf6 100644 --- a/README +++ b/README @@ -33,6 +33,9 @@ correctly, you can fix that by selecting a in the setup menu: (Charmap) 2 ... CFontz Thanks to Stephan Schreiber lcdkeyconf.h is used to configure the plugin for a keypad. +you can use a different file instead with +LCDKEYCONF=/path/to/your/lcdkeyconf.h +during compile time. Mattia Rossi added support for the output pins that some Matrix Orbital displays have (lcdm001 and glk driver). diff --git a/lcd.c b/lcd.c index 7ce9b39..760af65 100644 --- a/lcd.c +++ b/lcd.c @@ -10,9 +10,14 @@ #include "setup.h" #include "lcd.h" #include "sockets.h" -#include "lcdkeyconf.h" #include "i18n.h" +#ifdef LCD_EXT_KEY_CONF +#include LCD_EXT_KEY_CONF +#else +#include "lcdkeyconf.h" +#endif + // character mapping for output, see cLcd::Write #include "lcdtranstbl.h" @@ -158,28 +163,44 @@ void cLcd::SetHelp( unsigned int n, const char *Red, const char *Green, const ch if (!connected) return; char help[2*wid], red[wid+1], green[wid+1], yellow[wid+1], blue[wid+1]; - unsigned int allchars=0, i, empty=0, spacewid=1; + unsigned int allchars=0, i,j , empty=0, spacewid=1; char *longest, *longest1, *longest2; if ( Red==NULL || Red[0]=='\0' ) { empty++; red[0]=' '; red[1]='\0'; } else { - strncpy(red,Red,wid); allchars+=strlen(red); + j=i=0; while ( (i (wid-empty-3)) { @@ -578,9 +599,9 @@ void cLcd::GetTimeDateStat( char *string, unsigned int OutStateData[] ) { void cLcd::Action(void) { // LCD output thread unsigned int i,j, barx=1, bary=1, barl=0, ScrollState=0, ScrollLine=1, lasttitlelen=0; - int Current=0, Total=1, scrollpos=0, scrollcnt=0, scrollwaitcnt=10, lastAltShift=0, lastBackLight; + int Current=0, Total=1, scrollpos=0, scrollcnt=0, scrollwaitcnt=10, lastAltShift=0, lastBackLight, keycnt=0; struct timeval now, voltime; - char workstring[256]; + char workstring[1024], lastkeypressed='\0'; cLcd::ThreadStates PrevState=Menu; struct cLcd::StateData OutStateData; bool Lcddirty[LCDMAXSTATES][4]; @@ -665,7 +686,7 @@ void cLcd::Action(void) { // LCD output thread if ( (now.tv_usec < WakeUpCycle) && (replayDvbApi) ) { char tempbuffer[16]; - replayDvbApi->GetIndex(Current, Total, false); + replayDvbApi->GetIndex(Current, Total, false); Total=(Total==0)?1:Total; sprintf(tempbuffer,IndexToHMSF(Total)); SetProgress(IndexToHMSF(Current),tempbuffer, (100 * Current) / Total); } @@ -851,12 +872,17 @@ void cLcd::Action(void) { // LCD output thread else sock_send_string(sock,"screen_set VDR -heartbeat heart\n"); } - - workstring[0]='\0'; sock_recv(sock, workstring, 256); + + if ( !(keycnt=(keycnt+1)%4) ) lastkeypressed='\0'; + + workstring[0]='\0'; sock_recv(sock, workstring, 1023); workstring[1024]='\0'; + //if (workstring[0] != '\0') syslog(LOG_INFO, "%s", workstring); if ( LcdMaxKeys && ( strlen(workstring) > 4 ) ) { for (i=0; i < (strlen(workstring)-4); i++ ) { - if (workstring[i]=='k' && workstring[i+1]=='e' && workstring[i+2]=='y' && workstring[i+3]==' ') { - for (j=0; j