From 924b2e51ddd8f658e140ca1f6843c6ec9598e97b Mon Sep 17 00:00:00 2001 From: gfk Date: Fri, 15 Mar 2002 20:24:39 +0000 Subject: [PATCH] Implemented the no ServerScreen feature. Also corrected a bug which prevented to run without any screen. --- LCDd.conf | 8 ++++++-- server/main.c | 44 ++++++++++++++++++++++++++++-------------- server/render.h | 4 ++++ server/serverscreens.c | 11 ----------- server/serverscreens.h | 1 - 5 files changed, 40 insertions(+), 28 deletions(-) diff --git a/LCDd.conf b/LCDd.conf index 1a1da7f..dc03667 100644 --- a/LCDd.conf +++ b/LCDd.conf @@ -65,8 +65,12 @@ User=nobody # User to run as. LCDd will drop its root priviledges, # if any, and run as this user instead. -ServerScreen=no -# Enables the server screen also when other screens are active. +#ServerScreen=no +# Enables the built-in server screen [Default: noscreen] +# yes : always, +# noscreen : when there are no other screens active, +# no : never, the LCD display will be blank when there are +# no screens active. Foreground=yes # The server will stay in the foreground if set to true. diff --git a/server/main.c b/server/main.c index c669a36..8330dfa 100644 --- a/server/main.c +++ b/server/main.c @@ -62,7 +62,7 @@ extern int optind, optopt, opterr; #define DEFAULT_WAITTIME 8 #define MAX_DRIVERS 8 #define DEFAULT_DAEMON_MODE 1 -#define DEFAULT_ENABLE_SERVER_SCREEN 0 +#define DEFAULT_ENABLE_SERVER_SCREEN SERVER_SCREEN_NOSCREEN #define DEFAULT_REPORTTOSYSLOG 0 #define DEFAULT_REPORTLEVEL RPT_WARNING @@ -376,9 +376,22 @@ process_configfile ( char *configfile ) daemon_mode = !fg; } - if( enable_server_screen == UNSET_INT ) - enable_server_screen = config_get_bool( "server", "serverscreen", 0, UNSET_INT ); - + if( enable_server_screen == UNSET_INT ) { + s = config_get_string( "server", "serverscreen", 0, UNSET_STR ); + if( strcmp( s, "no" ) == 0 ) { + enable_server_screen = SERVER_SCREEN_NEVER; + } + else if( strcmp( s, "noscreen" ) == 0 ) { + enable_server_screen = SERVER_SCREEN_NOSCREEN; + } + else if( strcmp( s, "yes" ) == 0 ) { + enable_server_screen = SERVER_SCREEN_ALWAYS; + } + else if( strcmp( s, UNSET_STR ) != 0 ) { + report( RPT_ERR, "Serverscreen can only be no, noscreen or yes" ); + } + } + if( backlight == UNSET_INT ) { s = config_get_string( "server", "backlight", 0, UNSET_STR ); if( strcmp( s, "on" ) == 0 ) { @@ -594,12 +607,18 @@ init_screens () report(RPT_ERR, "Error initializing screen list"); return -1; } - /* Make sure the server screen shows up every once in a while..*/ - if (server_screen_init () < 0) { - report(RPT_ERR, "Error initializing server screens"); - return -1; - } else if (!enable_server_screen) { - server_screen->priority = 256; + + if (enable_server_screen > SERVER_SCREEN_NEVER) { + /* Add the server screen */ + if (server_screen_init () < 0) { + report(RPT_ERR, "Error initializing server screens"); + return -1; + } + + if (enable_server_screen == SERVER_SCREEN_NOSCREEN) { + /* Display the server screen only when there are no other screens */ + server_screen->priority = 256; + } } return 0; } @@ -663,10 +682,7 @@ do_mainloop () /* draw the current scren*/ if ((s = screenlist_current ()) != NULL) - draw_screen (s, timer); - else - no_screen_screen (timer); usleep (TIME_UNIT); @@ -676,7 +692,7 @@ do_mainloop () */ if((message = malloc(256)) == NULL) report(RPT_ERR, "Error allocating message string"); - else { + else if (s) { snprintf(message, 256, "Screen->%s has timeout->%d", s->name, s->timeout); report(RPT_DEBUG, message); free(message); diff --git a/server/render.h b/server/render.h index d180b50..adb7483 100644 --- a/server/render.h +++ b/server/render.h @@ -22,6 +22,10 @@ #define HEARTBEAT_ON HEART_ON #define HEARTBEAT_OPEN HEART_OPEN +#define SERVER_SCREEN_NEVER 0 +#define SERVER_SCREEN_NOSCREEN 1 +#define SERVER_SCREEN_ALWAYS 2 + #define BACKLIGHT_OFF 0 #define BACKLIGHT_ON 1 #define BACKLIGHT_OPEN 2 diff --git a/server/serverscreens.c b/server/serverscreens.c index 6400e2a..9f632ec 100644 --- a/server/serverscreens.c +++ b/server/serverscreens.c @@ -167,17 +167,6 @@ update_server_screen (int timer) return 0; } -int -no_screen_screen (int timer) -{ - - drivers_clear (); - drivers_string (1, 1, "Error: No screen!"); - drivers_flush (); - - return 0; -} - int goodbye_screen () { diff --git a/server/serverscreens.h b/server/serverscreens.h index 6773596..b88a298 100644 --- a/server/serverscreens.h +++ b/server/serverscreens.h @@ -18,7 +18,6 @@ extern screen *server_screen; int server_screen_init (); int update_server_screen (int timer); -int no_screen_screen (int timer); int goodbye_screen (); #endif