Reporting patch.

This commit is contained in:
robijn
2001-11-29 14:09:13 +00:00
parent 3dc439e2c4
commit 285d29edf3
23 changed files with 534 additions and 477 deletions
+5 -2
View File
@@ -52,8 +52,11 @@ Bind=127.0.0.1
Port=13666
# Listen on this specified port; defaults to 13666.
#Debug=5
# Sets the debugging level; defaults to 0 (no debugging output).
#ReportLevel=3
# Sets the reporting level; defaults to 2 (warnings and errors only).
#ReportToSyslog=yes
# Should we report to syslog instead of stderr ? Default: no
WaitTime=5
# Sets the default time in seconds to displays a screen.
+2
View File
@@ -66,6 +66,8 @@
/* Define the protocol version */
#undef PROTOCOL_VERSION
#undef API_VERSION
#undef SLI_DRV
#undef SOLARIS
+2
View File
@@ -109,6 +109,8 @@ AC_DEFINE_UNQUOTED(LCDPORT, $LCDPORT)
AC_DEFINE_UNQUOTED(PROTOCOL_VERSION, "0.3")
AC_DEFINE_UNQUOTED(API_VERSION, "0.4")
AC_ARG_WITH(loadmax,
[ --with-loadmax=<load> Max Load Avg at which the backlight will]
+7 -7
View File
@@ -10,7 +10,7 @@
#include <stdio.h>
#include <string.h>
#include "shared/debug.h"
#include "shared/report.h"
#include "client_data.h"
#include "screen.h"
@@ -34,14 +34,14 @@ client_data_init (client_data * d)
d->screenlist = NewScreen();
if (!d->screenlist) {
fprintf (stderr, "client_data_init: Error allocating screenlist\n");
report( RPT_ERR, "client_data_init: Error allocating screenlist");
return -1;
}
/* TODO: this section... (client menus)
d->menulist = LL_new();
if(!d->menulist)
{
fprintf(stderr, "client_data_init: Error allocating menulist\n");
report( RPT_ERR, "client_data_init: Error allocating menulist");
return -1;
}
*/
@@ -53,7 +53,7 @@ client_data_destroy (client_data * d)
{
screen *s;
debug ("client_data_destroy\n");
report( RPT_INFO, "client_data_destroy");
if (!d)
return -1;
@@ -69,18 +69,18 @@ client_data_destroy (client_data * d)
free (d->client_keys);
// Clean up the screenlist...
debug ("client_data_destroy: Cleaning screenlist\n");
debug( RPT_DEBUG, "client_data_destroy: Cleaning screenlist");
ResetScreenList (d->screenlist);
do {
s = NextScreen(d->screenlist);
if (s) {
debug ("client_data_destroy: removing screen %s\n", s->id);
debug( RPT_DEBUG, "client_data_destroy: removing screen %s", s->id);
// FIXME? This shouldn't be handled here...
// Now, remove it from the screenlist...
if (screenlist_remove_all (s) < 0) {
// Not a serious error..
fprintf (stderr, "client_data_destroy: Error dequeueing screen\n");
report( RPT_ERR, "client_data_destroy: Error dequeueing screen");
return 0;
}
// Free its memory...
+54 -59
View File
@@ -15,9 +15,8 @@
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <syslog.h>
#include "shared/debug.h"
#include "shared/report.h"
#include "shared/sockets.h"
#include "drivers/lcd.h"
@@ -83,7 +82,7 @@ test_func_func (client * c, int argc, char **argv)
for (i = 0; i < argc; i++) {
snprintf (str, sizeof(str), "test_func_func: %i -> %s\n", i, argv[i]);
printf (str);
report (RPT_INFO, str);
sock_send_string (c->sock, str);
}
return 0;
@@ -107,7 +106,7 @@ hello_func (client * c, int argc, char **argv)
sock_send_string (c->sock, "huh? extra parameters ignored\n");
}
debug ("Hello!\n");
debug(RPT_INFO, "Hello!");
memset(str, '\0', sizeof(str));
snprintf (str, sizeof(str), "connect LCDproc %s protocol %s lcd wid %i hgt %i cellwid %i cellhgt %i\n",
@@ -178,9 +177,7 @@ client_set_func (client * c, int argc, char **argv)
} else {
strncpy(str, argv[i], sizeof(str) - 1);
debug ("client_set: name=\"%s\"\n", argv[i]);
syslog(LOG_INFO, "client set name to %s", str);
debug(RPT_DEBUG, "client_set: name=\"%s\"", argv[i]);
// set the name...
if (c->data->name)
@@ -229,7 +226,7 @@ client_add_key_func (client * c, int argc, char **argv)
}
keys = argv[1];
debug ("client_add_key: current client will handle key(s) %s\n", keys);
debug(RPT_DEBUG, "client_add_key: current client will handle key(s) %s", keys);
if (!c->data->client_keys) {
// No keys list, create a new one
@@ -287,7 +284,7 @@ client_del_key_func (client * c, int argc, char **argv)
}
keys = argv[1] ;
debug ("client_del_key: Deleting key(s) %s from client_keys\n", keys);
debug(RPT_DEBUG, "client_del_key: Deleting key(s) %s from client_keys", keys);
if (c->data->client_keys) {
// Client has keys, remove keys from the list
@@ -350,7 +347,7 @@ screen_add_key_func (client * c, int argc, char **argv)
id = argv[1];
keys = argv[2];
debug ("screen_add_key: Adding key(s) %s to screen %s\n", keys, id);
debug(RPT_DEBUG, "screen_add_key: Adding key(s) %s to screen %s", keys, id);
// Find the screen
s = screen_find (c, id);
@@ -422,7 +419,7 @@ screen_del_key_func (client * c, int argc, char **argv)
id = argv[1] ;
keys = argv[2] ;
debug ("screen_del_key: Deleting key(s) %s from screen %s\n", keys, id);
debug(RPT_DEBUG, "screen_del_key: Deleting key(s) %s from screen %s", keys, id);
// Find the screen
s = screen_find (c, id);
@@ -487,7 +484,7 @@ screen_add_func (client * c, int argc, char **argv)
return 0;
}
debug ("screen_add: Adding screen %s\n", argv[1]);
debug(RPT_DEBUG, "screen_add: Adding screen %s", argv[1]);
memset(scr, '\0', sizeof(scr));
strncpy(scr, argv[1], sizeof(scr) - 1);
@@ -496,12 +493,12 @@ screen_add_func (client * c, int argc, char **argv)
if (err == 0)
sock_send_string(c->sock, "success\n");
else if (err < 0) {
fprintf (stderr, "screen_add_func: Error adding screen\n");
report(RPT_WARNING, "screen_add_func: Error adding screen");
sock_send_string (c->sock, "huh? failed to add screen id#\n");
} else
sock_send_string (c->sock, "huh? You already have a screen with that id#\n");
syslog(LOG_NOTICE, "added a screen (%s) to the display", scr);
report(RPT_NOTICE, "added a screen (%s) to the display", scr);
return 0;
}
@@ -527,7 +524,7 @@ screen_del_func (client * c, int argc, char **argv)
return 0;
}
debug ("screen_del: Deleting screen %s\n", argv[1]);
debug (RPT_DEBUG, "screen_del: Deleting screen %s", argv[1]);
// Enforce bounds limits on argv[1]
memset(scr, '\0', sizeof(scr));
@@ -537,12 +534,12 @@ screen_del_func (client * c, int argc, char **argv)
if ( err == 0 )
sock_send_string(c->sock, "success\n");
else if (err < 0) {
fprintf (stderr, "screen_del_func: Error removing screen\n");
report(RPT_WARNING, "screen_del_func: Error removing screen");
sock_send_string(c->sock, "huh? failed to remove screen\n");
} else
sock_send_string (c->sock, "huh? You don't have a screen with that id#\n");
syslog(LOG_NOTICE, "removed a screen (%s) from the display", scr);
report(RPT_NOTICE, "removed a screen (%s) from the display", scr);
return 0;
}
@@ -594,7 +591,7 @@ screen_set_func (client * c, int argc, char **argv)
if (strcmp (p, "name") == 0) {
if (argc > i + 1) {
i++;
debug ("screen_set: name=\"%s\"\n", argv[i]);
debug (RPT_DEBUG, "screen_set: name=\"%s\"", argv[i]);
// set the name...
if (s->name)
@@ -609,7 +606,7 @@ screen_set_func (client * c, int argc, char **argv)
else if (strcmp (p, "priority") == 0) {
if (argc > i + 1) {
i++;
debug ("screen_set: priority=\"%s\"\n", argv[i]);
debug (RPT_DEBUG, "screen_set: priority=\"%s\"", argv[i]);
// set the priority...
number = atoi (argv[i]);
@@ -624,7 +621,7 @@ screen_set_func (client * c, int argc, char **argv)
else if (strcmp (p, "duration") == 0) {
if (argc > i + 1) {
i++;
debug ("screen_set: duration=\"%s\"\n", argv[i]);
debug (RPT_DEBUG, "screen_set: duration=\"%s\"", argv[i]);
// set the duration...
number = atoi (argv[i]);
@@ -639,7 +636,7 @@ screen_set_func (client * c, int argc, char **argv)
else if (strcmp (p, "heartbeat") == 0) {
if (argc > i + 1) {
i++;
debug ("screen_set: heartbeat=\"%s\"\n", argv[i]);
debug (RPT_DEBUG, "screen_set: heartbeat=\"%s\"", argv[i]);
// set the heartbeat type...
if (0 == strcmp (argv[i], "on"))
@@ -665,7 +662,7 @@ screen_set_func (client * c, int argc, char **argv)
else if (strcmp (p, "wid") == 0) {
if (argc > i + 1) {
i++;
debug ("screen_set: wid=\"%s\"\n", argv[i]);
debug (RPT_DEBUG, "screen_set: wid=\"%s\"", argv[i]);
// set the duration...
number = atoi (argv[i]);
@@ -681,7 +678,7 @@ screen_set_func (client * c, int argc, char **argv)
else if (strcmp (p, "hgt") == 0) {
if (argc > i + 1) {
i++;
debug ("screen_set: hgt=\"%s\"\n", argv[i]);
debug (RPT_DEBUG, "screen_set: hgt=\"%s\"", argv[i]);
// set the duration...
number = atoi (argv[i]);
@@ -696,15 +693,14 @@ screen_set_func (client * c, int argc, char **argv)
else if (strcmp (p, "timeout") == 0) {
if (argc > i + 1) {
i++;
syslog(LOG_NOTICE, "Setting timeout.");
debug ("screen_set: timeout=\"%s\"\n", argv[i]);
debug (RPT_DEBUG, "screen_set: timeout=\"%s\"", argv[i]);
// set the duration...
number = atoi (argv[i]);
// Add the timeout value (count of TIME_UNITS)
// to struct, TIME_UNIT is 1/8th of a second
if (number > 0) {
s->timeout = number;
syslog(LOG_NOTICE, "Timeout set.");
report(RPT_NOTICE, "Timeout set.");
}
sock_send_string(c->sock, "success\n");
} else {
@@ -716,7 +712,7 @@ screen_set_func (client * c, int argc, char **argv)
else if (strcmp (argv[i], "backlight") == 0) {
if (argc > i + 1) {
i++;
debug ("screen_set: backlight=\"%s\"\n", argv[i]);
debug (RPT_DEBUG, "screen_set: backlight=\"%s\"", argv[i]);
// set the backlight status based on what the client has set
switch(c->backlight_state) {
case BACKLIGHT_OPEN:
@@ -824,7 +820,7 @@ widget_add_func (client * c, int argc, char **argv)
if (err == 0)
sock_send_string(c->sock, "success\n");
else {
fprintf (stderr, "widget_add_func: Error adding widget\n");
report(RPT_WARNING, "widget_add_func: Error adding widget");
sock_send_string(c->sock, "huh? failed\n");
}
@@ -866,7 +862,7 @@ widget_del_func (client * c, int argc, char **argv)
sid = argv[1];
wid = argv[2];
debug ("screen_del: Deleting widget %s.%s\n", sid, wid);
debug (RPT_DEBUG, "screen_del: Deleting widget %s.%s", sid, wid);
s = screen_find (c, sid);
if (!s) {
@@ -877,7 +873,7 @@ widget_del_func (client * c, int argc, char **argv)
if (err == 0)
sock_send_string(c->sock, "success\n");
else {
fprintf (stderr, "widget_del_func: Error removing widget\n");
report( RPT_WARNING, "widget_del_func: Error removing widget");
sock_send_string(c->sock, "huh? failed\n");
}
@@ -942,10 +938,9 @@ widget_set_func (client * c, int argc, char **argv)
// Client Debugging...
{
int i;
fprintf (stderr, "huh? Invalid widget id (%s)\n", wid);
report( RPT_WARNING, "huh? Invalid widget id (%s)", wid);
for (i = 0; i < argc; i++)
fprintf (stderr, "%s ", argv[i]);
fprintf (stderr, "\n");
report( RPT_WARNING, " %.40s ", argv[i]);
}
return 0;
}
@@ -969,10 +964,10 @@ widget_set_func (client * c, int argc, char **argv)
free (w->text);
w->text = strdup (argv[i + 2]);
if (!w->text) {
fprintf (stderr, "widget_set_func: Error allocating string\n");
report( RPT_WARNING, "widget_set_func: Error allocating string");
return -1;
}
debug ("Widget %s set to %s\n", wid, w->text);
debug (RPT_DEBUG, "Widget %s set to %s", wid, w->text);
sock_send_string(c->sock, "success\n");
}
}
@@ -992,7 +987,7 @@ widget_set_func (client * c, int argc, char **argv)
w->y = y;
w->length = length;
}
debug ("Widget %s set to %i\n", wid, w->length);
debug (RPT_DEBUG, "Widget %s set to %i", wid, w->length);
sock_send_string(c->sock, "success\n");
}
break;
@@ -1011,7 +1006,7 @@ widget_set_func (client * c, int argc, char **argv)
w->y = y;
w->length = length;
}
debug ("Widget %s set to %i\n", wid, w->length);
debug (RPT_DEBUG, "Widget %s set to %i", wid, w->length);
sock_send_string(c->sock, "success\n");
}
break;
@@ -1040,10 +1035,10 @@ widget_set_func (client * c, int argc, char **argv)
free (w->text);
w->text = strdup (argv[i]);
if (!w->text) {
fprintf (stderr, "widget_set_func: Error allocating string\n");
report( RPT_WARNING, "widget_set_func: Error allocating string");
return -1;
}
debug ("Widget %s set to %s\n", wid, w->text);
debug (RPT_DEBUG, "Widget %s set to %s", wid, w->text);
sock_send_string(c->sock, "success\n");
}
break;
@@ -1058,17 +1053,17 @@ widget_set_func (client * c, int argc, char **argv)
sock_send_string (c->sock, "huh? Invalid coordinates\n");
} else {
left = atoi (argv[i]);
//debug("left: %d\n",left);
//debug("left: %d",left);
top = atoi (argv[i + 1]);
//debug("top: %d\n",top);
//debug("top: %d",top);
right = atoi (argv[i + 2]);
//debug("right: %d\n",right);
//debug("right: %d",right);
bottom = atoi (argv[i + 3]);
//debug("bottom: %d\n",bottom);
//debug("bottom: %d",bottom);
direction = (int) (argv[i + 4][0]);
//debug("dir: %c\n",(char)direction);
//debug("dir: %c",(char)direction);
speed = atoi (argv[i + 5]);
//debug("speed: %d\n",speed);
//debug("speed: %d",speed);
// Direction must be v or h
if (((char) direction != 'h') && ((char) direction != 'v')) {
sock_send_string (c->sock, "huh? Invalid direction\n");
@@ -1084,10 +1079,10 @@ widget_set_func (client * c, int argc, char **argv)
w->text = strdup (argv[i + 6]);
if (!w->text) {
sock_send_string(c->sock, "huh? out of memory\n");
fprintf (stderr, "widget_set_func: Error allocating string\n");
report( RPT_WARNING, "widget_set_func: Error allocating string");
return -1;
}
debug ("Widget %s set to %s\n", wid, w->text);
debug (RPT_DEBUG, "Widget %s set to %s", wid, w->text);
sock_send_string(c->sock, "success\n");
}
}
@@ -1106,21 +1101,21 @@ widget_set_func (client * c, int argc, char **argv)
sock_send_string (c->sock, "huh? Invalid coordinates\n");
} else {
left = atoi (argv[i]);
//debug("left: %d\n",left);
//debug("left: %d",left);
top = atoi (argv[i + 1]);
//debug("top: %d\n",top);
//debug("top: %d",top);
right = atoi (argv[i + 2]);
//debug("right: %d\n",right);
//debug("right: %d",right);
bottom = atoi (argv[i + 3]);
//debug("bottom: %d\n",bottom);
//debug("bottom: %d",bottom);
width = atoi (argv[i + 4]);
//debug("right: %d\n",right);
//debug("right: %d",right);
height = atoi (argv[i + 5]);
//debug("bottom: %d\n",bottom);
//debug("bottom: %d",bottom);
direction = (int) (argv[i + 6][0]);
//debug("dir: %c\n",(char)direction);
//debug("dir: %c",(char)direction);
speed = atoi (argv[i + 7]);
//debug("speed: %d\n",speed);
//debug("speed: %d",speed);
// Direction must be v or h
if (((char) direction != 'h') && ((char) direction != 'v')) {
sock_send_string (c->sock, "huh? Invalid direction\n");
@@ -1133,7 +1128,7 @@ widget_set_func (client * c, int argc, char **argv)
w->hgt = height;
w->length = direction;
w->speed = speed;
debug ("Widget %s set to (%i,%i)-(%i,%i) %ix%i\n", wid, left, top, right, bottom, width, height);
debug (RPT_DEBUG, "Widget %s set to (%i,%i)-(%i,%i) %ix%i", wid, left, top, right, bottom, width, height);
sock_send_string(c->sock, "success\n");
}
}
@@ -1153,7 +1148,7 @@ widget_set_func (client * c, int argc, char **argv)
w->x = x;
w->y = y;
}
debug ("Widget %s set to %i\n", wid, w->y);
debug (RPT_DEBUG, "Widget %s set to %i", wid, w->y);
sock_send_string(c->sock, "success\n");
}
break;
@@ -1294,7 +1289,7 @@ backlight_func (client * c, int argc, char **argv)
return 0;
}
debug ("backlight(%s)\n", argv[1]);
debug (RPT_DEBUG, "backlight(%s)", argv[1]);
backlight = (backlight && 1); // only preserves ON/OFF bit
@@ -1403,7 +1398,7 @@ output_func (client * c, int argc, char **argv)
// lcd_ptr->output (output_state);
syslog(LOG_NOTICE, "output states changed");
report(RPT_NOTICE, "output states changed");
return 0;
}
+28 -29
View File
@@ -15,12 +15,11 @@
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <syslog.h>
#include "sock.h"
#include "clients.h"
#include "client_data.h"
#include "shared/debug.h"
#include "shared/report.h"
#include "render.h"
LinkedList *clients;
@@ -29,11 +28,11 @@ LinkedList *clients;
int
client_init ()
{
debug ("client_init()\n");
debug(RPT_INFO, "client_init()");
clients = LL_new ();
if (!clients) {
fprintf (stderr, "client_init: Unable to create client list\n");
report( RPT_ERR, "client_init: Unable to create client list");
return -1;
}
@@ -45,29 +44,29 @@ client_shutdown ()
{
client *c;
debug ("client_shutdown()\n");
debug (RPT_INFO, "client_shutdown()");
// Free all client structures...
// Note that the regular list loop doesn't work here, because
// client_destroy() calls LL_Remove()
for (c = LL_Pop (clients); c; c = LL_Pop (clients)) {
debug ("client_shutdown: ...\n");
debug (RPT_DEBUG, "client_shutdown: ...");
if (c) {
debug ("client_shutdown: ... %i ...\n", c->sock);
debug (RPT_DEBUG, "client_shutdown: ... %i ...", c->sock);
if (client_destroy (c) != 0) {
fprintf (stderr, "client_shutdown: Error freeing client\n");
report (RPT_ERR, "client_shutdown: Error freeing client");
} else {
debug ("client_shutdown: Freed client...\n");
debug (RPT_DEBUG, "client_shutdown: Freed client...");
}
} else {
debug ("client_shutdown: No client!\n");
debug (RPT_DEBUG, "client_shutdown: No client!");
}
}
// Then, free the list...
LL_Destroy (clients);
debug ("client_shutdown: done\n");
debug (RPT_DEBUG, "client_shutdown: done");
return 0;
}
@@ -81,12 +80,12 @@ client_create (int sock)
{
client *c;
debug ("client_create(%i)\n", sock);
debug (RPT_DEBUG, "client_create(%i)", sock);
// Allocate new client...
c = malloc (sizeof (client));
if (!c) {
fprintf (stderr, "client_create: error allocating new client\n");
report (RPT_ERR, "client_create: error allocating new client");
return NULL;
}
// Init struct members
@@ -100,14 +99,14 @@ client_create (int sock)
// Set up message list...
c->messages = LL_new ();
if (!c->messages) {
fprintf (stderr, "client_create: error allocating message list\n");
report (RPT_ERR, "client_create: error allocating message list");
free (c);
return NULL;
}
// TODO: allocate and init client data...
c->data = malloc (sizeof (client_data));
if (!c->data) {
fprintf (stderr, "client_create: error allocating client data\n");
report (RPT_ERR, "client_create: error allocating client data");
free (c->messages);
free (c);
return NULL;
@@ -127,16 +126,16 @@ client_destroy (client * c)
char *str;
debug ("client_destroy()\n");
debug (RPT_INFO, "client_destroy()");
if (!c)
return -1;
// Eat the rest of the incoming requests...
debug ("client_destroy: get_messages\n");
debug (RPT_DEBUG, "client_destroy: get_messages");
while ((str = client_get_message (c))) {
if (str) {
debug ("client_destroy: kill message %s\n", str);
debug (RPT_DEBUG, "client_destroy: kill message %s", str);
free (str);
}
}
@@ -145,7 +144,7 @@ client_destroy (client * c)
if (c->sock) {
// sock_send_string (c->sock, "bye\n");
close(c->sock);
syslog(LOG_NOTICE, "closed socket for #%d\n", c->sock);
report(RPT_NOTICE, "closed socket for #%d", c->sock);
}
err = LL_Destroy (c->messages);
@@ -171,7 +170,7 @@ client_add_message (client * c, char *message)
char delimiters[] = "\n\r\0";
// int len;
//debug("client_add_message(%s)\n", message);
debug(RPT_DEBUG, "client_add_message(%s)", message);
if (!c)
return -1;
@@ -184,17 +183,17 @@ client_add_message (client * c, char *message)
// Copy the string to avoid overwriting the original...
dup = strdup (message);
if (!dup) {
fprintf (stderr, "client_add_message: Error allocating new string\n");
report(RPT_ERR, "client_add_message: Error allocating new string");
return -1;
}
// Now split the string into lines and enqueue each one...
for (str = strtok (dup, delimiters); str; str = strtok (NULL, delimiters)) {
cp = strdup (str);
debug ("client_add_message: %s\n", cp);
debug (RPT_DEBUG, "client_add_message: %s", cp);
err += LL_Enqueue (c->messages, (void *) cp);
}
//debug("client_add_message(%s): %i errors\n", message, err);
//debug(RPT_DEBUG, "client_add_message(%s): %i errors", message, err);
free (dup); // Fixed memory leak...
// Err is the number of errors encountered...
@@ -208,14 +207,14 @@ client_get_message (client * c)
{
char *str;
//debug("client_get_message()\n");
debug(RPT_DEBUG, "client_get_message()");
if (!c)
return NULL;
str = (char *) LL_Dequeue (c->messages);
//debug("client_get_message: \"%s\"\n", str);
//debug(RPT_DEBUG, "client_get_message: \"%s\"", str);
return str;
}
@@ -241,19 +240,19 @@ client_find_sock (int sock)
{
client *c;
// debug("client_find_sock(%i)\n", sock);
// debug(RPT_INFO, "client_find_sock(%i)", sock);
LL_Rewind (clients);
do {
c = (client *) LL_Get (clients);
// debug("client_find_sock: ... %i ...\n", c->sock);
// debug(RPT_DEBUG, "client_find_sock: ... %i ...", c->sock);
if (c->sock == sock) {
// debug("client_find_sock: ..! %i !..\n", c->sock);
// debug(RPT_DEBUG, "client_find_sock: ..! %i !..", c->sock);
return c;
}
} while (LL_Next (clients) == 0);
debug ("client_find_sock: failed\n");
debug (RPT_ERR, "client_find_sock: failed");
return NULL;
}
+14 -12
View File
@@ -13,6 +13,8 @@
#include <unistd.h>
#include <stdlib.h>
#include "shared/report.h"
typedef struct key {
char * name;
@@ -219,7 +221,7 @@ int config_has_key( char *sectionname, char *keyname )
void config_clear()
{
printf( "config_clear is unimplemented" );
report( RPT_WARNING, "config_clear is unimplemented" );
}
@@ -386,7 +388,7 @@ int process_config( section ** current_section, char (*get_next_char)(), char mo
case ST_SECTIONNAME:
switch( ch ) {
case '\n':
fprintf( stderr, "Section name incorrectly closed on line %d of %s: %s\n", line_nr, source_descr, sectionname );
report( RPT_WARNING, "Section name incorrectly closed on line %d of %s: %s", line_nr, source_descr, sectionname );
state = ST_INITIAL;
break;
case '\r':
@@ -394,7 +396,7 @@ int process_config( section ** current_section, char (*get_next_char)(), char mo
case ' ':
case '"':
case '[':
fprintf( stderr, "Section name contains invalid chars on line %d of %s: %s\n", line_nr, source_descr, sectionname );
report( RPT_WARNING, "Section name contains invalid chars on line %d of %s: %s", line_nr, source_descr, sectionname );
state = ST_INVALID_SECTIONNAME;
break;
case ']':
@@ -404,14 +406,14 @@ int process_config( section ** current_section, char (*get_next_char)(), char mo
state = ST_INITIAL;
break;
case 0:
fprintf( stderr, "Section name incorrectly closed on line %d of %s: %s\n", line_nr, source_descr, sectionname );
report( RPT_WARNING, "Section name incorrectly closed on line %d of %s: %s", line_nr, source_descr, sectionname );
break;
default:
if( sectionname_pos<MAXSECTIONNAMELENGTH ) {
sectionname[sectionname_pos++] = ch;
sectionname[sectionname_pos] = 0;
} else {
fprintf( stderr, "Section name too long on line %d of %s: %s\n", line_nr, source_descr, sectionname );
report( RPT_WARNING, "Section name too long on line %d of %s: %s", line_nr, source_descr, sectionname );
state = ST_INVALID_SECTIONNAME;
}
}
@@ -431,13 +433,13 @@ int process_config( section ** current_section, char (*get_next_char)(), char mo
case '\r':
case '\t':
case ' ':
fprintf( stderr, "Loose word found on line %d of %s: %s\n", line_nr, source_descr, keyname );
report( RPT_WARNING, "Loose word found on line %d of %s: %s", line_nr, source_descr, keyname );
state = ST_INITIAL;
break;
case '"':
case '[':
case ']':
fprintf( stderr, "Key name contains invalid characters on line %d of %s: %s\n", line_nr, source_descr, keyname );
report( RPT_WARNING, "Key name contains invalid characters on line %d of %s: %s", line_nr, source_descr, keyname );
state = ST_INVALID_KEYNAME;
break;
case '=':
@@ -447,7 +449,7 @@ int process_config( section ** current_section, char (*get_next_char)(), char mo
break;
default:
if( keyname_pos>=MAXKEYNAMELENGTH ) {
fprintf( stderr, "Key name too long on line %d of %s: %s\n", line_nr, source_descr, keyname );
report( RPT_WARNING, "Key name too long on line %d of %s: %s", line_nr, source_descr, keyname );
state = ST_INVALID_KEYNAME;
} else {
keyname[keyname_pos++] = ch;
@@ -469,7 +471,7 @@ int process_config( section ** current_section, char (*get_next_char)(), char mo
case '#':
case ';':
case '=':
fprintf( stderr, "Value contains invalid characters on line %d of %s, at key: %s\n", line_nr, source_descr, keyname );
report( RPT_WARNING, "Value contains invalid characters on line %d of %s, at key: %s", line_nr, source_descr, keyname );
state = ST_INVALID_VALUE;
break;
case '"':
@@ -482,7 +484,7 @@ int process_config( section ** current_section, char (*get_next_char)(), char mo
case ' ':
// Value complete !
if( ! *current_section ) {
fprintf( stderr, "Data before any section on line %d of %s with key: %s\n", line_nr, source_descr, keyname );
report( RPT_WARNING, "Data before any section on line %d of %s with key: %s", line_nr, source_descr, keyname );
}
else {
// Store the value
@@ -496,7 +498,7 @@ int process_config( section ** current_section, char (*get_next_char)(), char mo
value[value_pos++] = ch;
value[value_pos] = 0;
} else {
fprintf( stderr, "Value key is too long on line %d of %s, at key: %s\n", line_nr, source_descr, keyname );
report( RPT_WARNING, "Value key is too long on line %d of %s, at key: %s", line_nr, source_descr, keyname );
state = ST_INVALID_KEYNAME;
}
}
@@ -514,7 +516,7 @@ int process_config( section ** current_section, char (*get_next_char)(), char mo
switch( ch ) {
case 0:
case '\n':
fprintf( stderr, "String is incorrectly terminated on line %d of %s: %s\n", line_nr, source_descr, keyname );
report( RPT_WARNING, "String is incorrectly terminated on line %d of %s: %s", line_nr, source_descr, keyname );
state = ST_INITIAL;
break;
case '\\':
+7 -8
View File
@@ -11,14 +11,13 @@
#include <unistd.h>
#include <string.h>
#include <sys/errno.h>
#include <syslog.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "shared/LL.h"
#include "shared/debug.h"
#include "shared/report.h"
#include "configfile.h"
#include "drivers/lcd.h"
@@ -40,14 +39,14 @@ load_driver ( char * name, char * filename, char * args )
void (*driver_init)();
lcd_logical_driver * driver;
debug ("load_driver(%s,%s,%s)\n", name,filename,args);
report( RPT_INFO, "load_driver(%s,%s,%s)", name, filename, args );
// First driver ?
if( !loaded_drivers ) {
// Create linked list
loaded_drivers = LL_new ();
if( !loaded_drivers ) {
fprintf( stderr, "Error allocating driver list.\n" );
report( RPT_ERR, "Error allocating driver list." );
return -1;
}
}
@@ -56,7 +55,7 @@ load_driver ( char * name, char * filename, char * args )
// Find the driver in the array of driver types
if ((driver_init = (void *) lcd_find_init(name)) == NULL) {
// Driver not found
fprintf( stderr, "invalid driver: %s\n", name);
report( RPT_ERR, "invalid driver: %s", name);
return -1;
}
@@ -75,7 +74,7 @@ load_driver ( char * name, char * filename, char * args )
res = driver->init( driver, args );
if( res < 0 ) {
fprintf( stderr, "res<0\n" );
report( RPT_ERR, "Driver load failed, return code < 0" );
// driver load failed, don't add driver to list
return -1;
}
@@ -97,10 +96,10 @@ unload_all_drivers ()
{
lcd_logical_driver * driver;
debug ("unload_all_driver()\n");
report( RPT_INFO, "unload_all_driver()");
while( (driver = LL_Pop( loaded_drivers )) != NULL ) {
debug ("driver->close %p\n", driver );
debug( RPT_DEBUG, "driver->close %p", driver );
driver->close();
}
+25 -36
View File
@@ -5,10 +5,10 @@
#include <fcntl.h>
#include <string.h>
#include <sys/errno.h>
#include <syslog.h>
#include "lcd.h"
#include "debug.h"
#include "shared/report.h"
//////////////////////////////////////////////////////////////////////////
////////////////////// For Debugging Output //////////////////////////////
@@ -22,7 +22,7 @@ static lcd_logical_driver *debug_drv;
int
debug_init (struct lcd_logical_driver *driver, char *args)
{
syslog(LOG_DEBUG, "debug_init");
report (RPT_INFO, "debug_init()");
debug_drv = driver;
@@ -58,10 +58,10 @@ debug_init (struct lcd_logical_driver *driver, char *args)
void
debug_close ()
{
syslog(LOG_DEBUG, "debug_close()");
report (RPT_INFO, "debug_close()");
if (debug_drv->framebuf) {
printf ("frame buffer: %010X", (int) debug_drv->framebuf);
report (RPT_DEBUG, "frame buffer: %010X", (int) debug_drv->framebuf);
free (debug_drv->framebuf);
}
@@ -74,7 +74,7 @@ debug_close ()
void
debug_clear ()
{
syslog(LOG_DEBUG, "clear()");
report (RPT_INFO, "clear()");
memset (debug_drv->framebuf, ' ', debug_drv->wid * debug_drv->hgt);
@@ -86,7 +86,7 @@ debug_clear ()
void
debug_flush ()
{
syslog(LOG_DEBUG, "flush()");
report (RPT_INFO, "flush()");
debug_drv->draw_frame ();
}
@@ -100,10 +100,8 @@ debug_string (int x, int y, char string[])
{
int i;
char buf[64];
snprintf(buf, sizeof(buf), "string(%i,%i): %s", x, y, string);
syslog (LOG_DEBUG, buf);
report(RPT_INFO, "string(%i,%i,%.40s)", x, y, string);
y --; x --; // Convert 1-based coords to 0-based...
@@ -119,10 +117,7 @@ debug_string (int x, int y, char string[])
void
debug_chr (int x, int y, char c)
{
char buf[64];
snprintf(buf, sizeof(buf), "character(%i,%i): %c", x, y, c);
syslog (LOG_DEBUG, buf);
report (RPT_DEBUG, "char(%i,%i,%c)", x, y, c);
x--; y--;
debug_drv->framebuf[(y * debug_drv->wid) + x] = c;
@@ -131,50 +126,44 @@ debug_chr (int x, int y, char c)
int
debug_contrast (int contrast)
{
syslog(LOG_DEBUG, "contrast: %i", contrast);
report (RPT_INFO, "contrast(%i)", contrast);
return 0;
}
void
debug_backlight (int on)
{
if (on)
syslog(LOG_DEBUG, "backlight turned on");
else
syslog(LOG_DEBUG, "backlight turned off");
report (RPT_INFO, "backlight(%i)", on);
}
void
debug_init_vbar ()
{
syslog(LOG_DEBUG, "Init vertical bars");
report (LOG_INFO, "init_vbar()");
}
void
debug_init_hbar ()
{
syslog(LOG_DEBUG, "Init horizontal bars");
report (RPT_INFO, "init_hbar()");
}
void
debug_init_num ()
{
syslog(LOG_DEBUG, "Big numbers");
report (RPT_INFO, "init_bignum()");
}
void
debug_num (int x, int num)
{
char buf[64];
snprintf(buf, sizeof(buf), "big number(%i): %i", x, num);
syslog (LOG_DEBUG, buf);
report (RPT_INFO, "big number(%i,%i)", x, num);
}
void
debug_set_char (int n, char *dat)
{
syslog(LOG_DEBUG, "set character %i", n);
report (RPT_INFO, "set_char(%i,data)", n);
}
/////////////////////////////////////////////////////////////////
@@ -185,7 +174,7 @@ debug_vbar (int x, int len)
{
int y;
syslog (LOG_DEBUG, "vbar(%i): len = %i", x, len);
report (RPT_INFO, "vbar(%i,%i)", x, len);
for (y = debug_drv->hgt; y > 0 && len > 0; y--) {
debug_chr (x, y, '|');
@@ -201,7 +190,7 @@ debug_vbar (int x, int len)
void
debug_hbar (int x, int y, int len)
{
syslog(LOG_DEBUG, "hbar(%i,%i): len = %i", x, y, len);
report (RPT_INFO, "hbar(%i,%i,%i)", x, y, len);
for (; x < debug_drv->wid && len > 0; x++) {
debug_chr (x, y, '-');
@@ -217,13 +206,13 @@ debug_hbar (int x, int y, int len)
void
debug_icon (int which, char dest)
{
syslog (LOG_DEBUG, "char %i = icon %i", dest, which);
report (RPT_INFO, "icon(%i,%i", which, dest);
}
void
debug_flush_box (int lft, int top, int rgt, int bot)
{
syslog (LOG_DEBUG, "flush_box(%i,%i) - (%i,%i)", lft, top, rgt, bot);
report (RPT_INFO, "flush_box(%i,%i,%i,%i)", lft, top, rgt, bot);
debug_flush ();
}
@@ -235,25 +224,25 @@ debug_draw_frame (char *dat)
char out[LCD_MAX_WIDTH];
syslog (LOG_DEBUG, "draw_frame()");
report (RPT_INFO, "draw_frame(data)");
if (!dat)
return;
// printf("Frame (%ix%i): \n%s\n", debug_drv->wid, debug_drv->hgt, dat);
// report (RPT_DEBUG, "Frame (%ix%i): %s", debug_drv->wid, debug_drv->hgt, dat);
for (i = 0; i < debug_drv->wid; i++) {
out[i] = '-';
}
out[debug_drv->wid] = 0;
//printf ("+%s+\n", out);
//report (RPT_DEBUG, "+%s+", out);
for (i = 0; i < debug_drv->hgt; i++) {
for (j = 0; j < debug_drv->wid; j++) {
out[j] = dat[j + (i * debug_drv->wid)];
}
out[debug_drv->wid] = 0;
//printf ("|%s|\n", out);
//report (RPT_DEBUG, "|%s|", out);
}
@@ -261,13 +250,13 @@ debug_draw_frame (char *dat)
out[i] = '-';
}
out[debug_drv->wid] = 0;
//printf ("+%s+\n", out);
//report (RPT_DEBUG, "+%s+", out);
}
char
debug_getkey ()
{
syslog(LOG_DEBUG, "getkey");
report (RPT_INFO, "getkey()");
return 0;
}
+1 -1
View File
@@ -32,7 +32,7 @@
#endif
#include "shared/LL.h"
#include "shared/debug.h"
#include "shared/report.h"
#include "lcd.h"
+36 -23
View File
@@ -165,7 +165,9 @@
#include "lpt-port.h"
#include "lcd.h"
#include "shared/str.h"
#include <stdio.h>
#include "shared/report.h"
#include "configfile.h"
#include <string.h>
#include <errno.h>
#include <stdlib.h>
@@ -274,6 +276,9 @@ sed1330_init( lcd_logical_driver * driver, char *args )
sed1330 = driver;
debug( RPT_INFO, "SED1330: init(%p,%s)", driver, args );
// TODO: replace DriverName with driver->name when that field exists.
#define DriverName "sed1330"
@@ -291,13 +296,13 @@ sed1330_init( lcd_logical_driver * driver, char *args )
// READ THE CONFIG FILE
// Port
port = driver->config_get_int( DriverName, "port", 0, 0x278 );
port = config_get_int( DriverName, "port", 0, 0x278 );
data->port = port;
// Type
s = driver->config_get_string( DriverName, "type", 0, NULL );
if( !s ) {
printf( "SED1330: you need to specify the display type\n" );
report( RPT_ERR, "SED1330: you need to specify the display type" );
} else if( strcmp( s, "G321D" ) == 0 ) {
data->type = TYPE_G321D;
data->graph_width = 320;
@@ -311,14 +316,17 @@ sed1330_init( lcd_logical_driver * driver, char *args )
data->graph_width = 240;
data->graph_height = 128;
} else {
printf( "SED1330: Unknown display type: %s\n", s );
report( RPT_ERR, "SED1330: Unknown display type: %s", s );
return -1;
}
driver->wid = data->graph_width / CHARWIDTH;
driver->hgt = data->graph_height / CHARHEIGHT;
data->bytesperline = (data->graph_width - 1 ) / CHARWIDTH + 1;
report( RPT_INFO, "SED1330: Using LCD type: %s", s );
report( RPT_INFO, "SED1330: Text size: %dx%d", driver->wid, driver->hgt );
// Keymap
for( i=0; i<MAXKEYS; i++ ) {
char buf[8];
@@ -327,6 +335,8 @@ sed1330_init( lcd_logical_driver * driver, char *args )
if( s ) {
data->keymap[i] = (char *) malloc( strlen(s)+1 );
strcpy( data->keymap[i], s );
report( RPT_INFO, "SED1330: Key %d: \"%s\"", i, s );
} else {
data->keymap[i] = ""; // Pointing to an constant empty string
}
@@ -360,6 +370,7 @@ sed1330_init( lcd_logical_driver * driver, char *args )
// Arrange for access to port
debug( RPT_DEBUG, "SED1330: getting port access" );
port_access(data->port);
port_access(data->port+1);
port_access(data->port+2);
@@ -372,7 +383,7 @@ sed1330_init( lcd_logical_driver * driver, char *args )
struct sched_param param;
param.sched_priority=1;
if (( sched_setscheduler(0, SCHED_RR, &param)) == -1) {
fprintf (stderr, "HD44780_init: failed (%s)\n", strerror (errno));
report( RPT_ERR, "HD44780_init: failed (%s)", strerror (errno));
return -1;
}
}
@@ -404,6 +415,7 @@ sed1330_init( lcd_logical_driver * driver, char *args )
// INITIALIZE THE LCD
// End reset-state
debug( RPT_DEBUG, "SED1330: initializing LCD" );
port_out( port+2, (nWR) ^ OUTMASK ); // raise ^RD and ^WR
port_out( port+2, (nRESET|nWR) ^ OUTMASK ); // lower RESET
uPause( 200 );
@@ -495,7 +507,7 @@ sed1330_command( char command, int datacount, char * data )
int i;
int port = private_data->port;
printf( "sed1330_command %x #data=%d\n", command, datacount );
debug( RPT_INFO, "sed1330_command %x #data=%d", command, datacount );
port_out( port+2, (nRESET|nWR|A0) ^ OUTMASK ); // set A0 to indicate command
port_out( port, command ); // set up data
@@ -531,7 +543,7 @@ void sed1330_update_cursor()
char disp_en;
char fc; // named after CF register in SED1330
printf( "sed1330_update_cursor\n" );
debug( RPT_INFO, "sed1330_update_cursor" );
cursor_pos = (data->cursor_y-1) * data->bytesperline + (data->cursor_x-1) + 256 * SCR1_H + SCR1_L;
csrloc[0] = cursor_pos % 256;
@@ -568,7 +580,7 @@ void sed1330_update_cursor()
void
sed1330_close()
{
printf( "sed1330_close\n" );
debug( RPT_INFO, "sed1330_close" );
//sed1330_command( CMD_DISP_DIS, 0, NULL ); // display off
//port_out( port+2, (nWR) ^ OUTMASK ); // give LCD reset signal
@@ -586,7 +598,7 @@ sed1330_clear()
{
private_data * data = sed1330->private_data;
printf( "sed1330_clear\n" );
debug( RPT_INFO, "sed1330_clear" );
memset( data->framebuf_text, ' ', data->bytesperline * sed1330->hgt);
memset( data->framebuf_graph, 0, data->bytesperline * data->graph_height );
@@ -603,7 +615,8 @@ sed1330_string( int x, int y, char *str )
char * start;
int len;
printf( "sed1330_string x=%d y=%d s=\"%s\"\n", x, y, str );
debug( RPT_INFO, "sed1330_string x=%d y=%d s=\"%s\"", x, y, str );
if( y > sed1330->hgt ) {
return; // outside framebuf_textfer
}
@@ -626,7 +639,7 @@ sed1330_chr( int x, int y, char c )
{
private_data * data = sed1330->private_data;
printf( "sed1330_chr x=%d y=%d c='%c'\n", x, y, c );
debug( RPT_INFO, "sed1330_chr x=%d y=%d c='%c'", x, y, c );
if( y > sed1330->hgt || x > sed1330->wid ) {
return; // outside framebuf_textfer
@@ -645,7 +658,7 @@ sed1330_flush()
unsigned int pos, start_pos, nr_equal, fblen, len, cursor_pos;
char csrloc[2];
printf( "sed1330_flush\n" );
debug( RPT_INFO, "sed1330_flush" );
sed1330_command( CMD_DISP_EN, 1, ((char[1]) {0x16}) ); // cursor off
@@ -703,7 +716,7 @@ void sed1330_cursor( int x, int y, char state )
{
private_data * data = sed1330->private_data;
printf( "sed1330_cursor x=%d y=%d state='%c'\n", x, y, state );
debug( RPT_INFO, "sed1330_cursor x=%d y=%d state='%c'", x, y, state );
data->cursor_x = x;
data->cursor_y = y;
@@ -721,7 +734,7 @@ sed1330_backlight( int on )
{
//private_data * data = sed1330->private_data;
printf( "sed1330_backlight on='%c'\n", on );
debug( RPT_INFO, "sed1330_backlight on='%c'", on );
// unimplemented
}
@@ -737,7 +750,7 @@ sed1330_rect ( int x1, int y1, int x2, int y2, char pattern )
//private_data * data = sed1330->private_data;
int x, y;
printf( "sed1330_rect x1=%d y1=%d x2=%d y2=%d pattern=%d\n", x1, y1, x2, y2, (int) pattern );
debug( RPT_INFO, "sed1330_rect x1=%d y1=%d x2=%d y2=%d pattern=%d", x1, y1, x2, y2, (int) pattern );
// Swap coordinates if needed
if( x1>x2 ) {
@@ -771,7 +784,7 @@ sed1330_line ( int x1, int y1, int x2, int y2, char pattern )
//private_data * data = sed1330->private_data;
int x, y;
printf( "sed1330_rect x1=%d y1=%d x2=%d y2=%d pattern=%d\n", x1, y1, x2, y2, (int) pattern );
debug( RPT_INFO, "sed1330_rect x1=%d y1=%d x2=%d y2=%d pattern=%d", x1, y1, x2, y2, (int) pattern );
// Swap coordinates if needed
if( x1>x2 ) {
@@ -830,7 +843,7 @@ sed1330_set_pixel( int x, int y )
unsigned int bytepos;
char bitmask;
//printf( "sed1330_set_pixel x=%d y=%d\n", x, y );
//debug( RPT_INFO, "sed1330_set_pixel x=%d y=%d", x, y );
bytepos = y*data->bytesperline + x/PIXELSPERBYTE;
bitmask = 0x80 >> (x % PIXELSPERBYTE);
@@ -850,7 +863,7 @@ sed1330_clear_pixel( int x, int y )
int bytepos;
char bitmask;
//printf( "sed1330_clear_pixel x=%d y=%d\n", x, y );
//debug( RPT_INFO, "sed1330_clear_pixel x=%d y=%d", x, y );
bytepos = y*data->bytesperline + x/PIXELSPERBYTE;
bitmask = 0x80 >> (x % PIXELSPERBYTE);
@@ -866,7 +879,7 @@ sed1330_vbar( int x, int len )
{
private_data * data = sed1330->private_data;
printf( "sed1330_hbar x=%d len=%d\n", x, len );
debug( RPT_INFO, "sed1330_hbar x=%d len=%d", x, len );
sed1330_rect ( (x-1) * CHARWIDTH, data->graph_height-1, x * CHARWIDTH - 1, data->graph_height-1 - ((long) len * CHARHEIGHT / sed1330->cellhgt ), 1 );
}
@@ -881,7 +894,7 @@ sed1330_hbar( int x, int y, int len )
{
//private_data * data = sed1330->private_data;
printf( "sed1330_hbar x=%d y=%d len=%d\n", x, y, len );
debug( RPT_INFO, "sed1330_hbar x=%d y=%d len=%d", x, y, len );
sed1330_rect ( (x-1) * CHARWIDTH, (y-1) * CHARHEIGHT, x * CHARWIDTH + len, y * CHARHEIGHT - 1, 1 );
}
@@ -895,7 +908,7 @@ sed1330_num( int x, int num )
{
//private_data * data = sed1330->private_data;
printf( "sed1330_bignum x=%d num=%d\n", x, num );
debug( RPT_INFO, "sed1330_bignum x=%d num=%d", x, num );
}
@@ -918,7 +931,7 @@ sed1330_heartbeat( int type )
{ 0xFF, 0xAF, 0x07, 0x07, 0x07, 0x8F, 0xDF, 0xFF, 0x00, 0x00 }
};
printf( "sed1330_heartbeat type=%d\n", type );
report( RPT_INFO, "sed1330_heartbeat type=%d", type );
data->framebuf_text[sed1330->wid-1] = ' ';
whichIcon = (! ((timer + 4) & 5));
+6 -7
View File
@@ -66,10 +66,9 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <syslog.h>
#include "shared/sockets.h"
#include "shared/debug.h"
#include "shared/report.h"
#include "drivers/lcd.h"
@@ -105,7 +104,7 @@ handle_input ()
if ((key = lcd_ptr->getkey ()) == 0)
return 0;
//debug ("handle_input(%c)\n", (char) key);
//debug (RPT_DEBUG, "handle_input(%c)", (char) key);
// Sequence:
// Does the current screen want the key?
@@ -162,8 +161,8 @@ handle_input ()
int
server_input (int key)
{
debug ("server_input(%c)\n", (char) key);
syslog(LOG_DEBUG, "key %d pressed on device", key);
debug (RPT_INFO, "server_input(%c)", (char) key);
report(RPT_INFO, "key %d pressed on device", key);
switch ((char) key) {
case PAUSE_KEY:
@@ -181,11 +180,11 @@ server_input (int key)
screenlist_next ();
break;
case MAIN_MENU_KEY:
debug ("got the menu key!\n");
debug (RPT_DEBUG, "got the menu key!");
server_menu ();
break;
default:
debug ("server_input: Unused key \"%c\" (%i)\n", (char) key, key);
debug (RPT_DEBUG, "server_input: Unused key \"%c\" (%i)", (char) key, key);
break;
}
+177 -117
View File
@@ -20,7 +20,6 @@
#include <unistd.h>
#include <pwd.h>
#include <errno.h>
#include <syslog.h>
#include <math.h>
#include <sys/stat.h>
#include <sys/types.h>
@@ -29,7 +28,7 @@
extern char *optarg;
extern int optind, optopt, opterr;
#include "shared/debug.h"
#include "shared/report.h"
#include "drivers.h"
#include "sock.h"
@@ -46,7 +45,7 @@ extern int optind, optopt, opterr;
#define MAX_TIMER 0x10000
#define DEFAULT_DEBUG_LEVEL 1
//#define DEFAULT_DEBUG_LEVEL 1
#define DEFAULT_LCD_PORT LCDPORT
#define DEFAULT_BIND_ADDR "127.0.0.1"
#define DEFAULT_CONFIGFILE "/etc/LCDd.conf"
@@ -56,11 +55,14 @@ extern int optind, optopt, opterr;
#define MAX_DRIVERS 8
#define DEFAULT_DAEMON_MODE 1
#define DEFAULT_ENABLE_SERVER_SCREEN 0
#define DEFAULT_REPORTTOSYSLOG 0
#define DEFAULT_REPORTLEVEL RPT_WARNING
/* Store some standard defines into vars... */
char *version = VERSION;
char *protocol_version = PROTOCOL_VERSION;
char *api_version = API_VERSION;
char *build_date = __DATE__;
@@ -75,15 +77,22 @@ char *build_date = __DATE__;
/**** Configuration variables ****/
// All are set to 'unset' values
int debug_level = -1;
int lcd_port = -1;
char bind_addr[64] = "";
char configfile[256] = "";
char user[64] = "";
// All variables are set to 'unset' values
#define UNSET_INT -1
#define UNSET_STR "\01"
int daemon_mode = -1;
int enable_server_screen = -1;
//int debug_level = UNSET_INT;
int lcd_port = UNSET_INT;
char bind_addr[64] = UNSET_STR;
char configfile[256] = UNSET_STR;
char user[64] = UNSET_STR;
int daemon_mode = UNSET_INT;
int enable_server_screen = UNSET_INT;
static int reportLevel = UNSET_INT;
static int reportToSyslog = UNSET_INT;
static int serverStarted = 0;
// The drivers and their driver parameters
char *drivernames[MAX_DRIVERS];
@@ -130,7 +139,7 @@ int init_screens();
void do_mainloop();
void lcd_list_drivers();
#define ESSENTIAL(f) {int r; if( ( r=f )!=0 ) return r;}
#define ESSENTIAL(f) {int r; if( ( r=(f) )<0 ) { report( RPT_CRIT,"Critical error, abort"); return r;}}
int
main (int argc, char **argv)
@@ -168,12 +177,10 @@ main (int argc, char **argv)
* in the variable declaration...
*/
// Open syslog facility
openlog("LCDd", LOG_PID, LOG_DAEMON);
syslog(LOG_NOTICE, "server version %s starting up (protocol version %s)",
version, protocol_version);
syslog(LOG_NOTICE, "server built on %s",
build_date);
// Set the initial reporting parameters
report(RPT_NOTICE, "LCDd version %s starting", version );
report(RPT_INFO, "Built on %s, protocol version %s, API version %s",
build_date, protocol_version, api_version );
clear_settings();
@@ -186,21 +193,26 @@ main (int argc, char **argv)
// Set default values
set_default_settings();
if (debug_level > 0)
syslog(LOG_NOTICE, "debug level set to %d", debug_level);
// Set reporting values
ESSENTIAL( set_reporting( reportLevel, (reportToSyslog?RPT_DEST_SYSLOG:RPT_DEST_STDERR) ) );
report( RPT_NOTICE, "Set report level to %d, output to %s", reportLevel, (reportToSyslog?"syslog":"stderr") );
// Startup the server
ESSENTIAL( init_sockets() );
ESSENTIAL( init_drivers() );
ESSENTIAL( init_screens() );
ESSENTIAL( drop_privs(user) );
// Store it for exit_program()
serverStarted = 1;
#ifndef DEBUG
// Now, go into daemon mode...
if (daemon_mode) {
syslog(LOG_NOTICE, "server forking to background");
report(RPT_NOTICE, "Server forking to background");
ESSENTIAL( daemonize() );
} else {
syslog(LOG_NOTICE, "server running in foreground");
report(RPT_NOTICE, "Server running in foreground");
}
#endif
@@ -216,16 +228,19 @@ clear_settings ()
{
int i;
debug_level = -1;
lcd_port = -1;
bind_addr[0] = 0;
configfile[0] = 0;
user[0] = 0;
daemon_mode = -1;
enable_server_screen = -1;
backlight = -1;
//report( RPT_INFO, "clear_settings()" );
default_duration = -1;
lcd_port = UNSET_INT;
strcpy( bind_addr, UNSET_STR );
strcpy( configfile, UNSET_STR );
strcpy( user, UNSET_STR );
daemon_mode = UNSET_INT;
enable_server_screen = UNSET_INT;
backlight = UNSET_INT;
default_duration = UNSET_INT;
reportToSyslog = UNSET_INT;
reportLevel = UNSET_INT;
for( i=0; i < num_drivers; i++ ) {
free( drivernames[i] );
@@ -244,10 +259,11 @@ int
process_command_line (int argc, char **argv)
{
char c;
char buf[64];
//report( RPT_INFO, "process_command_line()" );
// analyze options here..
while ((c = getopt(argc, argv, "a:p:d:hfib:w:c:u:")) > 0) {
while ((c = getopt(argc, argv, "a:p:d:hfib:w:c:u:sr:")) > 0) {
// FIXME: Setting of c in this loop clobbers s!
// s is set equivalent to c.
switch(c) {
@@ -260,10 +276,10 @@ process_command_line (int argc, char **argv)
strcpy( drivernames[num_drivers], optarg );
strcpy( driverfilenames[num_drivers], optarg );
strcpy( driverargs[num_drivers], "");
strcpy( driverargs[num_drivers], "" );
num_drivers ++;
} else
fprintf(stderr, "too many drivers!");
report( RPT_ERR, "Too many drivers!" );
break;
case 'p':
lcd_port = atoi(optarg);
@@ -299,32 +315,36 @@ process_command_line (int argc, char **argv)
backlight = BACKLIGHT_OPEN;
}
else if( strcmp( optarg, "" ) != 0 ) {
fprintf( stderr, "backlight state should be on, off or open\n" );
report( RPT_ERR, "Backlight state should be on, off or open" );
HelpScreen();
}
break;
case 'w':
default_duration = atoi(optarg);
if ( default_duration < 16 || default_duration > 10000 ) {
snprintf(buf, sizeof(buf),
"wait time should be between 16 and 10000 (in 1/8ths of second), not %s\n", optarg);
fprintf(stderr, "%s", buf);
default_duration = (int) (atof(optarg) * 1e6 / TIME_UNIT);
if ( default_duration * TIME_UNIT < 2e6 ) {
report( RPT_ERR, "Waittime should be at least 2 (seconds), not %.8s", optarg );
HelpScreen ();
};
break;
case 's':
reportToSyslog = 1;
break;
case 'r':
reportLevel = atoi(optarg);
break;
case '?':
fprintf(stderr, "unknown option: '%c'\n", optopt);
report( RPT_ERR, "Unknown option: '%c'", optopt );
HelpScreen();
break;
case ':':
fprintf(stderr, "missing option argument!");
report( RPT_ERR, "Missing option argument!" );
HelpScreen();
break;
}
}
if (optind < argc)
fprintf(stderr, "non-option arguments!! BAD...");
report( RPT_ERR, "Non-option arguments on the command line !");
return 0;
}
@@ -338,44 +358,46 @@ process_configfile ( char *configfile )
char * s;
//char buf[64];
//report( RPT_INFO, "process_configfile()" );
// Read server settings
config_read_file( configfile );
if( debug_level == -1 )
debug_level = config_get_int( "server", "debug", 0, -1 );
// if( debug_level == UNSET_INT )
// debug_level = config_get_int( "server", "debug", 0, UNSET_INT );
if( lcd_port == -1 )
lcd_port = config_get_int( "server", "port", 0, -1 );
if( lcd_port == UNSET_INT )
lcd_port = config_get_int( "server", "port", 0, UNSET_INT );
if( bind_addr[0] == 0 )
strncpy( bind_addr, config_get_string( "server", "bind", 0, "" ), sizeof(bind_addr));
if( strcmp( bind_addr, UNSET_STR ) == 0 )
strncpy( bind_addr, config_get_string( "server", "bind", 0, UNSET_STR ), sizeof(bind_addr));
if( user[0] == 0 )
strncpy( user, config_get_string( "server", "user", 0, "" ), sizeof(user));
if( strcmp( user, UNSET_STR ) == 0 )
strncpy( user, config_get_string( "server", "user", 0, UNSET_STR ), sizeof(user));
if( default_duration == -1 ) {
default_duration = (config_get_float( "server", "waittime", 0, 0 ) * 1000000 / TIME_UNIT );
if( default_duration == UNSET_INT ) {
default_duration = (config_get_float( "server", "waittime", 0, 0 ) * 1e6 / TIME_UNIT );
if( default_duration == 0 )
default_duration = -1;
else if( default_duration < 16 ) {
fprintf( stderr, "waittime should be at least 2 (seconds)\n" );
default_duration = UNSET_INT;
else if( default_duration * TIME_UNIT < 2e6 ) {
report( RPT_ERR, "Waittime should be at least 2 (seconds)" );
return -1;
}
}
if( daemon_mode == -1 ) {
if( daemon_mode == UNSET_INT ) {
int fg;
fg = config_get_bool( "server", "foreground", 0, -1 );
if( fg != -1 )
fg = config_get_bool( "server", "foreground", 0, UNSET_INT );
if( fg != UNSET_INT )
daemon_mode = !fg;
}
if( enable_server_screen == -1 )
enable_server_screen = config_get_bool( "server", "serverscreen", 0, -1 );
if( enable_server_screen == UNSET_INT )
enable_server_screen = config_get_bool( "server", "serverscreen", 0, UNSET_INT );
if( backlight == -1 ) {
s = config_get_string( "server", "backlight", 0, "" );
if( backlight == UNSET_INT ) {
s = config_get_string( "server", "backlight", 0, UNSET_STR );
if( strcmp( s, "on" ) == 0 ) {
backlight = BACKLIGHT_ON;
backlight_state = backlight;
@@ -387,11 +409,22 @@ process_configfile ( char *configfile )
else if( strcmp( s, "open" ) == 0 ) {
backlight = BACKLIGHT_OPEN;
}
else if( strcmp( s, "" ) != 0 ) {
fprintf( stderr, "backlight state should be on, off or open\n" );
else if( strcmp( s, UNSET_STR ) != 0 ) {
report( RPT_ERR, "Backlight state should be on, off or open" );
}
}
if( reportToSyslog == UNSET_INT ) {
// Is the value set in the config file anyway ?
if( strcmp( config_get_string( "server", "reportToSyslog", 0, "" ), "" ) != 0 ) {
reportToSyslog = config_get_bool( "server", "reportToSyslog", 0, 0 );
}
}
if( reportLevel == UNSET_INT ) {
reportLevel = config_get_int( "server", "reportLevel", 0, UNSET_INT );
}
// Read drivers
// If drivers have been specified on the command line, then do not
@@ -435,29 +468,37 @@ process_configfile ( char *configfile )
void
set_default_settings()
{
//report( RPT_INFO, "set_default_settings()" );
// Set defaults into unfilled variables....
if (debug_level == -1)
debug_level = DEFAULT_DEBUG_LEVEL;
if (lcd_port == -1)
// if (debug_level == UNSET_INT)
// debug_level = DEFAULT_DEBUG_LEVEL;
if (lcd_port == UNSET_INT)
lcd_port = DEFAULT_LCD_PORT;
if (bind_addr[0] == 0)
if (strcmp( bind_addr, UNSET_STR ) == 0)
strncpy (bind_addr, DEFAULT_BIND_ADDR, sizeof(bind_addr));
if (configfile[0] == 0)
if (strcmp( configfile, UNSET_STR ) == 0)
strncpy (configfile, DEFAULT_CONFIGFILE, sizeof(configfile));
if (user[0] == 0)
if (strcmp( user, UNSET_STR ) == 0)
strncpy(user, DEFAULT_USER, sizeof(user));
if (daemon_mode == -1)
if (daemon_mode == UNSET_INT)
daemon_mode = DEFAULT_DAEMON_MODE;
if (enable_server_screen == -1)
if (enable_server_screen == UNSET_INT)
enable_server_screen = DEFAULT_ENABLE_SERVER_SCREEN;
if (default_duration == -1)
if (default_duration == UNSET_INT)
default_duration = DEFAULT_SCREEN_DURATION;
if (backlight == -1)
if (backlight == UNSET_INT)
backlight = BACKLIGHT_OPEN;
if (reportToSyslog == UNSET_INT )
reportToSyslog = DEFAULT_REPORTTOSYSLOG;
if( reportLevel == UNSET_INT )
reportLevel = DEFAULT_REPORTLEVEL;
// Use default driver
if( num_drivers == 0 ) {
drivernames[0] = malloc(strlen(DEFAULT_DRIVER)+1);
@@ -477,10 +518,12 @@ daemonize()
{
int child;
report( RPT_INFO, "daemonize()" );
switch ((child = fork ()) ) {
case -1:
syslog(LOG_ERR, "could not fork");
return 1;
report(RPT_ERR, "Could not fork");
return -1;
case 0: // We are the child
break;
default: // We are the parent
@@ -502,17 +545,18 @@ daemonize()
int
init_sockets ()
{
report( RPT_INFO, "init_sockets()" );
if (sock_create_server (&bind_addr, lcd_port) <= 0) {
syslog(LOG_ERR, "error opening socket");
return 1;
report(RPT_ERR, "Error opening socket");
return -1;
}
// Now init a bunch of required stuff...
if (client_init () < 0) {
syslog(LOG_ERR, "error initializing client list");
return 1;
report(RPT_ERR, "Error initializing client list");
return -1;
}
return 0;
}
@@ -522,10 +566,11 @@ int
init_drivers()
{
int i, res;
char buf[64];
int output_loaded = 0;
report( RPT_INFO, "init_drivers()" );
// FIXME: This sets s equal to a value related to i
// (bitshifted left?) FIX FIX FIX ARGH....
//
@@ -550,8 +595,7 @@ init_drivers()
break;
}
} else {
snprintf(buf, sizeof(buf), "Could not load driver %s\n", drivernames[i]);
fprintf(stderr, buf);
report( RPT_ERR, "Could not load driver %.40s", drivernames[i] );
}
}
@@ -559,6 +603,7 @@ init_drivers()
if ( output_loaded ) {
return 0;
} else {
report( RPT_ERR, "There is no output driver" );
return -1;
}
}
@@ -568,20 +613,16 @@ int drop_privs(char *user)
{
struct passwd *pwent;
report( RPT_INFO, "drop_privs()" );
if (getuid() == 0 || geteuid() == 0) {
if ((pwent = getpwnam(user)) == NULL) {
if (errno) {
perror("LCDd: getpwnam");
return 1;
} else {
fprintf(stderr, "user %s not a valid user!", user);
return 1;
}
report( RPT_ERR, "User %.40s not a valid user!", user );
return -1;
} else {
if (setuid(pwent->pw_uid) < 0) {
fprintf(stderr, "unable to switch to user %s\n", user);
perror("LCDd: setuid");
return 1;
report( RPT_ERR, "Unable to switch to user %.40s", user );
return -1;
}
}
}
@@ -592,14 +633,16 @@ int drop_privs(char *user)
int
init_screens ()
{
report( RPT_INFO, "init_screens()" );
if (screenlist_init () < 0) {
syslog(LOG_ERR, "error initializing screen list");
return 1;
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) {
syslog(LOG_ERR, "error initializing server screens");
return 1;
report(RPT_ERR, "Error initializing server screens");
return -1;
} else if (!enable_server_screen) {
server_screen->priority = 256;
}
@@ -613,6 +656,8 @@ do_mainloop ()
screen *s = NULL;
char *message=NULL;
report( RPT_INFO, "do_mainloop()" );
//char buf[64];
// FIXME: s should still be null from initialization.... what's happening here?!
@@ -632,7 +677,7 @@ do_mainloop ()
// this is here because s is getting overwritten...
//if (s != screenlist_current()) {
// syslog(LOG_DEBUG, "internal error! s was found overwritten at main.c:637");
// report(RPT_DEBUG, "internal error! s was found overwritten at main.c:637");
// s = screenlist_current();
//}
//
@@ -669,29 +714,29 @@ do_mainloop ()
//decrese it and then check to see if it has excpired.
//Remove if expired.
if((message = malloc(256)) == NULL)
syslog(LOG_NOTICE, "Error allocating message string");
report(RPT_ERR, "Error allocating message string");
else {
snprintf(message, 256, "Screen->%s has timeout->%d", s->name, s->timeout);
syslog(LOG_NOTICE, message);
report(RPT_DEBUG, message);
free(message);
}
if (s && s->timeout != -1) {
--(s->timeout);
if((message = malloc(256)) == NULL)
syslog(LOG_NOTICE, "Error allocating message string");
report(RPT_ERR, "Error allocating message string");
else {
snprintf(message, 256, "Timeout matches check, screen %s has timeout->%d", s->name, s->timeout);
syslog(LOG_NOTICE, message);
report(RPT_DEBUG, message);
free(message);
}
if (s->timeout <= 0) {
screen_remove (s->parent, s->id);
if((message = malloc(256)) == NULL)
syslog(LOG_NOTICE, "Error allocating message string");
report(RPT_ERR, "Error allocating message string");
else {
snprintf(message, 256, "Removing screen %s which has timeout->%d", s->name, s->timeout);
syslog(LOG_NOTICE, message);
report(RPT_DEBUG, message);
free(message);
}
}
@@ -707,28 +752,38 @@ exit_program (int val)
{
char buf[64];
report( RPT_INFO, "exit_program()" );
// TODO: These things shouldn't be so interdependent. The order
// things are shut down in shouldn't matter...
strcpy(buf, "server shutting down on ");
strcpy(buf, "Server shutting down on ");
switch(val) {
case 1: strcat(buf, "SIGHUP"); break;
case 2: strcat(buf, "SIGINT"); break;
case 15: strcat(buf, "SIGTERM"); break;
default: snprintf(buf, sizeof(buf), "server shutting down on signal %d", val); break;
default: snprintf(buf, sizeof(buf), "Server shutting down on signal %d", val); break;
// Other values should not be seen, but just in case..
}
syslog(LOG_NOTICE, buf); // send message to syslog
report(RPT_NOTICE, buf); // report it
// Set emergency reporting and flush all messages if not done already.
if( reportLevel == UNSET_INT )
reportLevel = DEFAULT_REPORTLEVEL;
if( reportToSyslog == UNSET_INT )
reportLevel = DEFAULT_REPORTLEVEL;
set_reporting( reportLevel, (reportToSyslog?RPT_DEST_SYSLOG:RPT_DEST_STDERR) );
goodbye_screen (); // display goodbye screen on LCD display
unload_all_drivers (); // release driver memory and file descriptors
client_shutdown (); // shutdown clients (must come first)
screenlist_shutdown (); // shutdown screens (must come after client_shutdown)
sock_close_all (); // close all open sockets (must come after client_shutdown)
// Shutdown things if server start was complete
if( serverStarted ) {
goodbye_screen (); // display goodbye screen on LCD display
unload_all_drivers (); // release driver memory and file descriptors
client_shutdown (); // shutdown clients (must come first)
screenlist_shutdown (); // shutdown screens (must come after client_shutdown)
sock_close_all (); // close all open sockets (must come after client_shutdown)
}
exit (0);
}
@@ -737,11 +792,14 @@ exit_program (int val)
void
HelpScreen ()
{
// Help screen is printed to stdout on purpose. No reason to have
// this in syslog...
report( RPT_INFO, "HelpScreen()" );
printf ("\nLCDd Server Daemon (part of lcdproc), %s\n", version);
printf ("Copyright (c) 1999 Scott Scriven, William Ferrell, and misc contributors\n");
printf ("This program is freely redistributable under the terms of the GNU Public License\n\n");
printf ("Usage: LCDd [ -hfiw ] [ -c <config> ] [ -d <driver> ] [ -a <addr> ] \\\n\t[ -p <port> ] [ -u <user> ] [ -w <time> ]\n\n");
printf ("Usage: LCDd [ -hfiws ] [ -c <config> ] [ -d <driver> ] [ -a <addr> ] \\\n\t[ -p <port> ] [ -u <user> ] [ -w <time> ] [ -r <level> ]\n\n");
printf ("Available options are:\n");
printf ("\t-h\t\tDisplay this help screen\n");
@@ -753,10 +811,12 @@ HelpScreen ()
printf ("\t-f\t\tRun in the foreground\n");
//printf ("\t-b\t--backlight <mode>\n\t\t\tSet backlight mode (on, off, open)\n");
printf ("\t-i\t\tDisable showing of the main LCDproc server screen\n");
printf ("\t-w <waittime>\tTime to pause at each screen (in 1/8s of a second)\n");
printf ("\t-w <waittime>\tTime to pause at each screen (in seconds)\n");
printf ("\t-a <addr>\tNetwork (IP) address to bind to\n");
printf ("\t-p <port>\tNetwork port to listen for connections on\n");
printf ("\t-u <user>\tUser to run as\n");
printf ("\t-s\t\tOutput messages to syslog\n");
printf ("\t-r <level>\tReport level (default=2)\n");
printf ("\nCurrently available drivers:\n");
lcd_list_drivers();
+2 -2
View File
@@ -14,7 +14,7 @@
#include <stdio.h>
#include <unistd.h>
#include "shared/debug.h"
#include "shared/report.h"
#include "drivers/lcd.h"
@@ -292,7 +292,7 @@ Contrast_func (int input)
void
server_menu ()
{
debug ("server_menu()\n");
debug (RPT_DEBUG, "server_menu()");
do_menu (main_menu);
+12 -10
View File
@@ -15,7 +15,7 @@
#include "shared/LL.h"
#include "shared/sockets.h"
#include "shared/debug.h"
#include "shared/report.h"
#include "clients.h"
#include "client_functions.h"
#include "parse.h"
@@ -42,6 +42,8 @@ parse_all_client_messages ()
int invalid = 0;
int quoteindex;
debug( RPT_DEBUG, "parse_all_client_messages()" );
for (i = 0; i < MAX_ARGUMENTS; i++) {
argv[i] = NULL;
}
@@ -50,17 +52,17 @@ parse_all_client_messages ()
#define LINE_TERM_CHAR '\0'
#define COMMENT_CHAR '#'
//debug("parse: Rewinding list...\n");
//debug("parse: Rewinding list...");
LL_Rewind (clients);
do {
// Get the next client...
//debug("parse: Getting client...\n");
//debug("parse: Getting client...");
c = LL_Get (clients);
if (c) {
// And parse all its messages...
//debug("parse: Getting messages...\n");
//debug(RPT_DEBUG, "parse: Getting messages...");
for (str = client_get_message (c); str; str = client_get_message (c)) {
debug ("parse: ...%s\n", str);
debug (RPT_DEBUG, "parse: ...%s", str);
// Now, split up the string...
argc = 0;
i = 0;
@@ -70,7 +72,7 @@ parse_all_client_messages ()
continue; // found a comment line - skip it...
}
//fprintf(stderr, "starting string scan...\n");
debug (RPT_DEBUG, "starting string scan...");
do {
// bypass initial white space...
@@ -98,7 +100,7 @@ parse_all_client_messages ()
// Handle quoted strings...
if ((s = strchr(leftquote, *p)) != NULL) {
quoteindex = s - leftquote;
//fprintf(stderr, "found <%c> at index [%d] = <%c>\n", *p, quoteindex, leftquote[quoteindex]);
//debug(RPT_DEBUG, "found <%c> at index [%d] = <%c>", *p, quoteindex, leftquote[quoteindex]);
q = ++p; // past open quote...
while ((rightquote[quoteindex] != *p) && (*p != LINE_TERM_CHAR)) {
p++;
@@ -130,11 +132,11 @@ parse_all_client_messages ()
// Not end of line?
if (*p) {
*p = LINE_TERM_CHAR;
//fprintf(stderr, "found new token: %s\n", q);
//debug(RPT_DEBUG, "found new token: %s", q);
argv[i++] = q;
q = ++p;
} else {
//fprintf(stderr, "found new token: %s\n", q);
//debug(RPT_DEBUG, "found new token: %s", q);
argv[i++] = q;
}
// At the end of this statement,
@@ -146,7 +148,7 @@ parse_all_client_messages ()
argc++;
} while (*p);
//fprintf(stderr, "exiting string scan...\n");
//debug(RPT_DEBUG, "exiting string scan...");
argv[argc] = NULL;
if (argc < 1)
+14 -14
View File
@@ -20,7 +20,7 @@
#include <string.h>
#include <stdio.h>
#include "shared/debug.h"
#include "shared/report.h"
#include "shared/LL.h"
#include "drivers/lcd.h"
@@ -49,12 +49,12 @@ draw_screen (screen * s, int timer)
static screen *old_s = NULL;
int tmp = 0, tmp_state = 0;
//debug("Render...\n");
//debug(RPT_DEBUG, "Render...");
//return 0;
reset = 1;
//debug("draw_screen: %8x, %i\n", (int)s, timer);
//debug(RPT_DEBUG, "draw_screen: %8x, %i", (int)s, timer);
if (!s)
return -1;
@@ -121,7 +121,7 @@ draw_screen (screen * s, int timer)
// Draw a frame...
draw_frame (s->widgets, 'v', 0, 0, lcd_ptr->wid, lcd_ptr->hgt, s->wid, s->hgt, (((s->duration / s->hgt) < 1) ? 1 : (s->duration / s->hgt)), timer);
//debug("draw_screen done\n");
//debug(RPT_DEBUG, "draw_screen done");
if (heartbeat) {
lcd_ptr->heartbeat(s->heartbeat);
@@ -143,7 +143,7 @@ draw_screen (screen * s, int timer)
// flush display out, frame and all...
lcd_ptr->flush ();
//debug("draw_screen: %8x, %i\n", s, timer);
//debug(RPT_DEBUG, "draw_screen: %8x, %i", s, timer);
return 0;
@@ -213,12 +213,12 @@ draw_frame (LinkedList * list,
} else if (HorizontalScrolling) {
// TODO: Frames don't scroll horizontally yet!
}
//debug("draw_screen: %8x, %i\n", s, timer);
//debug(RPT_DEBUG, "draw_screen: %8x, %i", s, timer);
if (!list)
return -1;
//debug("draw_frame: %8x, %i\n", frame, timer);
//debug(RPT_DEBUG, "draw_frame: %8x, %i", frame, timer);
#define PositiveX(a) ((a)->x > 0)
#define PositiveY(a) ((a)->y > 0)
@@ -334,7 +334,7 @@ draw_frame (LinkedList * list,
break;
if (w->right < w->left)
break;
//printf("rendering: %s %d\n",w->text,timer);
//printf(RPT_DEBUG, "rendering: %s %d",w->text,timer);
screen_width = w->right - w->left + 1;
switch (w->length) { // actually, direction...
// FIXED: Horz scrollers don't show the
@@ -382,7 +382,7 @@ draw_frame (LinkedList * list,
if (offset <= length) {
strncpy (str, &((w->text)[offset]), screen_width);
str[screen_width] = '\0';
//printf("%s : %d\n",str,length-offset);
//debug(RPT_DEBUG, "scroller %s : %d", str, length-offset);
} else {
str[0] = '\0';
}
@@ -416,15 +416,15 @@ draw_frame (LinkedList * list,
int begin = 0;
if (!screenlist_action)
screenlist_action = RENDER_HOLD;
//printf("length: %d sw: %d lines req: %d avail lines: %d effLines: %d \n",length,screen_width,lines_required,available_lines,effLines);
//debug(RPT_DEBUG, "length: %d sw: %d lines req: %d avail lines: %d effLines: %d ",length,screen_width,lines_required,available_lines,effLines);
if (w->speed > 0) {
necessaryTimeUnits = effLines * w->speed;
if (((timer / (effLines * w->speed)) % 2) == 0) {
//printf("up ");
//debug(RPT_DEBUG, "up ");
begin = (timer % (effLines * w->speed))
/ w->speed;
} else {
//printf("down ");
//debug(RPT_DEBUG, "down ");
begin = (((timer % (effLines * w->speed))
- (effLines * w->speed) + 1) / w->speed)
* -1;
@@ -442,11 +442,11 @@ draw_frame (LinkedList * list,
} else {
begin = 0;
}
//printf("rendering begin: %d timer: %d effLines: %d\n",begin,timer,effLines);
//debug(RPT_DEBUG, "rendering begin: %d timer: %d effLines: %d",begin,timer,effLines);
for (i = begin; i < begin + available_lines; i++) {
strncpy (str, &((w->text)[i * (screen_width)]), screen_width);
str[screen_width] = '\0';
//printf("rendering: '%s' of %s\n",
//debug(RPT_DEBUG, "rendering: '%s' of %s",
//str,w->text);
lcd_ptr->string (w->left, w->top + (i - begin), str);
}
+10 -10
View File
@@ -2,7 +2,7 @@
#include <stdio.h>
#include <string.h>
#include "shared/debug.h"
#include "shared/report.h"
#include "drivers/lcd.h"
@@ -24,7 +24,7 @@ screen_create ()
s = malloc (sizeof (screen));
if (!s) {
fprintf (stderr, "screen_create: Error allocating new screen\n");
report(RPT_ERR, "screen_create: Error allocating new screen");
return NULL;
}
@@ -44,7 +44,7 @@ screen_create ()
s->widgets = LL_new ();
if (!s->widgets) {
fprintf (stderr, "screen_create: Error allocating widget list\n");
report(RPT_ERR, "screen_create: Error allocating widget list");
return NULL;
}
@@ -89,13 +89,13 @@ screen_find (client * c, char *id)
if (!id)
return NULL;
debug ("client_find_screen(%s)\n", id);
debug (RPT_INFO, "client_find_screen(%s)", id);
LL_Rewind (c->data->screenlist);
do {
s = LL_Get (c->data->screenlist);
if ((s) && (0 == strcmp (s->id, id))) {
debug ("client_find_screen: Found %s\n", id);
debug (RPT_DEBUG, "client_find_screen: Found %s", id);
return s;
}
} while (LL_Next (c->data->screenlist) == 0);
@@ -121,7 +121,7 @@ screen_add (client * c, char *id)
s = screen_create ();
if (!s) {
fprintf (stderr, "screen_add: Error creating screen\n");
report (RPT_ERR, "screen_add: Error creating screen");
return -1;
}
@@ -129,7 +129,7 @@ screen_add (client * c, char *id)
s->id = strdup (id);
if (!s->id) {
fprintf (stderr, "screen_add: Error allocating name\n");
report (RPT_ERR, "screen_add: Error allocating name");
return -1;
}
// TODO: Check for errors here?
@@ -137,7 +137,7 @@ screen_add (client * c, char *id)
// Now, add it to the screenlist...
if (screenlist_add (s) < 0) {
fprintf (stderr, "screen_add: Error queueing new screen\n");
report (RPT_ERR, "screen_add: Error queueing new screen");
return -1;
}
@@ -157,7 +157,7 @@ screen_remove (client * c, char *id)
// Make sure this screen *does* exist...
s = screen_find (c, id);
if (!s) {
fprintf (stderr, "screen_remove: Error finding screen %s\n", id);
report (RPT_ERR, "screen_remove: Error finding screen %s", id);
return 1;
}
// TODO: Check for errors here?
@@ -166,7 +166,7 @@ screen_remove (client * c, char *id)
// Now, remove it from the screenlist...
if (screenlist_remove_all (s) < 0) {
// Not a serious error..
fprintf (stderr, "screen_remove: Error dequeueing screen\n");
report (RPT_ERR, "screen_remove: Error dequeueing screen");
return 0;
}
+27 -29
View File
@@ -1,10 +1,9 @@
#include <stdlib.h>
#include <stdio.h>
#include <syslog.h>
#include "shared/LL.h"
#include "shared/sockets.h"
#include "shared/debug.h"
#include "shared/report.h"
#include "screenlist.h"
#include "screen.h"
#include "clients.h"
@@ -26,11 +25,11 @@ int compare_addresses (void *one, void *two);
int
screenlist_init ()
{
debug ("screenlist_init()\n");
report (RPT_INFO, "screenlist_init()");
screenlist = LL_new ();
if (!screenlist) {
syslog(LOG_ERR, "screenlist_init: error allocating list");
report(RPT_ERR, "screenlist_init: error allocating list");
return -1;
}
@@ -43,7 +42,7 @@ screenlist_init ()
int
screenlist_shutdown ()
{
debug ("screenlist_shutdown()\n");
report (RPT_INFO, "screenlist_shutdown()");
LL_Destroy (screenlist);
@@ -53,7 +52,7 @@ screenlist_shutdown ()
int
screenlist_remove (screen * s)
{
debug ("screenlist_remove()\n");
report (RPT_INFO, "screenlist_remove()");
if (!LL_Remove (screenlist, s))
return -1;
@@ -66,12 +65,12 @@ screenlist_remove_all (screen * s)
{
int i = 0;
debug ("screenlist_remove_all()\n");
report (RPT_INFO, "screenlist_remove_all()");
while (LL_Remove (screenlist, s))
i++;
debug ("screenlist_remove_all()... got %i\n", i);
debug (RPT_DEBUG, "screenlist_remove_all()... got %i", i);
return i;
}
@@ -79,7 +78,7 @@ screenlist_remove_all (screen * s)
LinkedList *
screenlist_getlist ()
{
debug ("screenlist_getlist()\n");
report (RPT_INFO, "screenlist_getlist()");
return screenlist;
}
@@ -92,24 +91,25 @@ screenlist_current ()
static screen *old_s = NULL;
client *c;
//debug("screenlist_current:\n");
debug( RPT_INFO, "screenlist_current:");
//LL_dprint(screenlist);
s = (screen *) LL_GetFirst (screenlist);
// FIXME: Make sure the screen/client exists!
if (s != old_s) {
debug ("screenlist_current: new screen\n");
//debug (RPT_DEBUG, "screenlist_current: new screen");
timer = 0;
// Tell the client we're done with the current screen
if (old_s) {
//debug("screenlist_current: ignoring old screen\n");
//debug(RPT_DEBUG, "screenlist_current: ignoring old screen");
LL_Rewind (screenlist);
if (old_s != LL_Find (screenlist, compare_addresses, old_s)) {
debug ("screenlist: Didn't find screen 0x%8x!\n", (int) old_s);
report (RPT_WARNING, "screenlist: Didn't find screen 0x%8x!", (int) old_s);
} else {
//debug("screenlist_current: ... sending ignore\n");
//debug(RPT_DEBUG, "screenlist_current: ... sending ignore");
c = old_s->parent;
if (c) // Tell the client we're not listening any more...
{
@@ -119,11 +119,11 @@ screenlist_current ()
{
;
}
//debug("screenlist_current: ... sent ignore\n");
//debug(RPT_DEBUG, "screenlist_current: ... sent ignore");
}
}
if (s) {
//debug("screenlist_current: listening to new screen\n");
//debug(RPT_DEBUG, "screenlist_current: listening to new screen");
c = s->parent;
if (c) // Tell the client we're paying attention...
{
@@ -138,7 +138,7 @@ screenlist_current ()
old_s = s;
//debug("screenlist_current: return %8x\n", s);
//debug(RPT_DEBUG, "screenlist_current: return %8x", s);
return s;
}
@@ -155,7 +155,7 @@ screenlist_next ()
{
screen *s;
//debug("Screenlist_next()\n");
//debug(RPT_DEBUG, "Screenlist_next()");
s = screenlist_current ();
@@ -168,14 +168,14 @@ screenlist_next ()
// Otherwise, reset it to regular operation
screenlist_action = 0;
//debug("Screenlist_next: calling handler...\n");
//debug(RPT_DEBUG, "Screenlist_next: calling handler...");
// Call the selected queuing function...
// TODO: Different queueing modes...
s = screenlist_next_priority ();
//s = screenlist_next_roll();
//debug("Screenlist_next() done\n");
//debug(RPT_DEBUG, "Screenlist_next() done");
return s;
}
@@ -207,7 +207,7 @@ screenlist_prev ()
int
screenlist_add_end (screen * screen)
{
debug ("screenlist_add_end()\n");
debug (RPT_DEBUG, "screenlist_add_end()");
return LL_Push (screenlist, (void *) screen);
}
@@ -216,7 +216,7 @@ screenlist_add_end (screen * screen)
screen *
screenlist_next_roll ()
{
//debug("screenlist_next_roll()\n");
//debug(RPT_DEBUG, "screenlist_next_roll()");
if (LL_UnRoll (screenlist) != 0)
return NULL;
@@ -229,7 +229,7 @@ screen *
screenlist_next_priority ()
{
//screen *s, *t;
//debug("screenlist_next_priority\n");
//debug(RPT_DEBUG, "screenlist_next_priority");
if (LL_UnRoll (screenlist) != 0)
return NULL;
@@ -243,7 +243,7 @@ screenlist_next_priority ()
screen *
screenlist_prev_roll ()
{
//debug("screenlist_prev_roll()\n");
//debug(RPT_DEBUG, "screenlist_prev_roll()");
if (LL_Roll (screenlist) != 0)
return NULL;
@@ -256,7 +256,7 @@ compare_priority (void *one, void *two)
{
screen *a, *b;
//debug("compare_priority: %8x %8x\n", one, two);
//debug(RPT_DEBUG, "compare_priority: %8x %8x", one, two);
if (!one)
return 0;
@@ -266,7 +266,7 @@ compare_priority (void *one, void *two)
a = (screen *) one;
b = (screen *) two;
//debug("compare_priority: done?\n");
//debug(RPT_DEBUG, "compare_priority: done?");
return (a->priority - b->priority);
}
@@ -274,8 +274,6 @@ compare_priority (void *one, void *two)
int
compare_addresses (void *one, void *two)
{
//printf("compare_addresses: 0x%x == 0x%x ???\n", one, two);
//if(one == two) printf("Yes!\n");
//else printf("No!\n");
//printf(RPT_DEBUG, "compare_addresses: %p == %p ???", one, two);
return (one != two);
}
+12 -12
View File
@@ -6,7 +6,7 @@
#include "config.h"
#endif
#include "shared/debug.h"
#include "shared/report.h"
#include "drivers/lcd.h"
@@ -36,12 +36,12 @@ server_screen_init ()
{
widget *w;
debug ("server_screen_init\n");
debug (RPT_DEBUG, "server_screen_init");
server_screen = screen_create ();
if (!server_screen) {
fprintf (stderr, "server_screen_init: Error allocating screen\n");
report (RPT_ERR, "server_screen_init: Error allocating screen");
return -1;
}
@@ -50,43 +50,43 @@ server_screen_init ()
server_screen->duration = 8; // 1 second, instead of 4...
if (widget_add (server_screen, "title", "title", NULL, 1) != 0) {
fprintf (stderr, "server_screen_init: internal error: could not add title widget\n");
report (RPT_ERR, "server_screen_init: internal error: could not add title widget");
}
if (widget_add (server_screen, "one", "string", NULL, 1) != 0) {
fprintf (stderr, "server_screen_init: internal error: could not add title widget\n");
report (RPT_ERR, "server_screen_init: internal error: could not add title widget");
}
if (widget_add (server_screen, "two", "string", NULL, 1) != 0) {
fprintf (stderr, "server_screen_init: internal error: could not add title widget\n");
report (RPT_ERR, "server_screen_init: internal error: could not add title widget");
}
if (widget_add (server_screen, "three", "string", NULL, 1) != 0) {
fprintf (stderr, "server_screen_init: internal error: could not add title widget\n");
report (RPT_ERR, "server_screen_init: internal error: could not add title widget");
}
// Now, initialize all the widgets...
if ((w = widget_find (server_screen, "title")) != NULL) {
WidgetText(w,title);
} else
fprintf (stderr, "server_screen_init: Can't find title\n");
report (RPT_ERR, "server_screen_init: Can't find title");
if ((w = widget_find (server_screen, "one")) != NULL)
WidgetString(w,1,2,one)
else
fprintf (stderr, "server_screen_init: Can't find widget one\n");
report (RPT_ERR, "server_screen_init: Can't find widget one");
if ((w = widget_find (server_screen, "two")) != NULL)
WidgetString(w,1,3,two)
else
fprintf (stderr, "server_screen_init: Can't find widget two\n");
report (RPT_ERR, "server_screen_init: Can't find widget two");
if ((w = widget_find (server_screen, "three")) != NULL)
WidgetString(w,1,4,three)
else
fprintf (stderr, "server_screen_init: Can't find widget three\n");
report (RPT_ERR, "server_screen_init: Can't find widget three");
// And enqueue the screen
screenlist_add (server_screen);
debug ("server_screen_init done\n");
debug (RPT_DEBUG, "server_screen_init done");
return 0;
}
+32 -38
View File
@@ -18,8 +18,7 @@
#include "shared/sockets.h"
#include "sock.h"
#include "clients.h"
#include "shared/debug.h"
#include "syslog.h"
#include "shared/report.h"
extern char bind_addr[64];
extern int lcd_port;
@@ -45,36 +44,33 @@ sock_create_inet_socket (char * addr, unsigned int port)
struct sockaddr_in name;
int sock, sockopt=1;
debug ("sock_create_inet_socket(%i)\n", port);
report (RPT_INFO, "sock_create_inet_socket(%i)", port);
/* Create the socket. */
//debug("Creating Inet Socket\n");
//debug(RPT_DEBUG, "Creating Inet Socket");
sock = socket (PF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror ("Error creating socket");
syslog(LOG_ALERT, "could not create socket");
report(RPT_ERR, "Could not create socket");
return -1;
}
/* Set the socket so we can re-use it*/
if(setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&sockopt,sizeof(sockopt)) < 0) {
perror("Error setting socket option SO_REUSEADDR");
syslog(LOG_ALERT, "Error setting socket option SO_REUSEADDR");
report(RPT_ERR, "Error setting socket option SO_REUSEADDR");
return -1;
}
/* Give the socket a name. */
//debug("Binding Inet Socket\n");
//debug(RPT_DEBUG, "Binding Inet Socket");
memset (&name, 0, sizeof (name));
name.sin_family = AF_INET;
name.sin_port = htons (port);
inet_aton(addr, &name.sin_addr);
if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0) {
perror ("Error binding socket");
syslog(LOG_ALERT, "could not bind to port %d", port);
report(RPT_ERR, "Could not bind to port %d", port);
return -1;
} else {
syslog(LOG_NOTICE, "listening for queries on port %d", port);
report(RPT_NOTICE, "listening for queries on port %d", port);
}
return sock;
@@ -87,18 +83,17 @@ sock_create_server (char *bind_addr, int lcd_port)
{
int sock;
debug ("sock_create_server()\n");
report (RPT_INFO, "sock_create_server()");
/* Create the socket and set it up to accept connections. */
sock = sock_create_inet_socket (bind_addr, lcd_port);
if (sock < 0) {
perror ("sock_create_server: Error creating socket");
report (RPT_ERR, "sock_create_server: Error creating socket");
return -1;
}
if (listen (sock, 1) < 0) {
perror ("sock_create_server: Listen error");
syslog(LOG_ALERT, "error in attempting to listen to port");
report(RPT_ERR, "error in attempting to listen to port");
return -1;
}
@@ -115,11 +110,11 @@ sock_create_server (char *bind_addr, int lcd_port)
len = sizeof(int);
getsockopt(sock, SOL_SOCKET, SO_SNDBUF, &val, &len);
printf("SEND buffer: %i bytes\n", val);
debug(RPT_DEBUG, "SEND buffer: %i bytes", val);
len = sizeof(int);
getsockopt(sock, SOL_SOCKET, SO_RCVBUF, &val, &len);
printf("RECV buffer: %i bytes\n", val);
debug(RPT_DEBUG, "RECV buffer: %i bytes", val);
}
*/
@@ -138,7 +133,7 @@ sock_poll_clients ()
struct timeval t;
client *c;
//debug("sock_poll_clients()\n");
debug(RPT_INFO, "sock_poll_clients()");
t.tv_sec = 0;
t.tv_usec = 0;
@@ -147,7 +142,7 @@ sock_poll_clients ()
read_fd_set = active_fd_set;
if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, &t) < 0) {
perror ("sock_poll_clients: Select error");
report (RPT_ERR, "sock_poll_clients: Select error");
return -1;
}
@@ -160,12 +155,10 @@ sock_poll_clients ()
size = sizeof (clientname);
new = accept (orig_sock, (struct sockaddr *) &clientname, &size);
if (new < 0) {
perror ("sock_poll_clients: Accept error");
syslog(LOG_WARNING, "error in accepting client");
report (RPT_ERR, "sock_poll_clients: Accept error");
return -1;
}
debug ("sock_poll_clients: connect from host %s, port %hd.\n", inet_ntoa (clientname.sin_addr), ntohs (clientname.sin_port));
syslog(LOG_NOTICE, "connect from host %s:%hd on #%d",
report (RPT_INFO, "sock_poll_clients: Connect from host %s:%hd on #%d",
inet_ntoa (clientname.sin_addr), ntohs (clientname.sin_port), new);
FD_SET (new, &active_fd_set);
@@ -173,16 +166,16 @@ sock_poll_clients ()
// TODO: Create new "client" here... (done?)
if (client_create (new) == NULL) {
fprintf (stderr, "sock_poll_clients: error creating client %i\n", i);
report( RPT_ERR, "sock_poll_clients: error creating client %i", i);
return -1;
}
} else {
/* Data arriving on an already-connected socket. */
err = 0;
do {
debug ("sock_poll_clients: reading...\n");
debug (RPT_DEBUG, "sock_poll_clients: reading...");
err = read_from_client (i);
debug ("sock_poll_clients: ...done\n");
debug (RPT_DEBUG, "sock_poll_clients: ...done");
if (err < 0) {
// TODO: Destroy a "client" here... (done?)
c = client_find_sock (i);
@@ -191,10 +184,9 @@ sock_poll_clients ()
client_destroy (c);
close (i);
FD_CLR (i, &active_fd_set);
debug ("sock_poll_clients: Closed connection %i\n", i);
syslog(LOG_NOTICE, "closed connection #%i", i);
report (RPT_INFO, "sock_poll_clients: Closed connection %i", i);
} else
fprintf (stderr, "sock_poll_clients: Can't find client %i\n", i);
report (RPT_ERR, "sock_poll_clients: Can't find client %i", i);
}
} while (err > 0);
@@ -211,16 +203,18 @@ read_from_client (int filedes)
int nbytes, i;
client *c;
report(RPT_DEBUG, "read_from_client()" );
//nbytes = read (filedes, buffer, MAXMSG);
//debug("read_from_client(%i): reading...\n", filedes);
//debug(RPT_DEBUG, "read_from_client(%i): reading...", filedes);
//nbytes = sock_recv (filedes, buffer, MAXMSG);
//debug("read_from_client(%i): ...done\n", filedes);
//debug ("read_from_client(%i): %i bytes\n", filedes, nbytes);
//debug(RPT_DEBUG, "read_from_client(%i): ...done", filedes);
//debug (RPT_DEBUG, "read_from_client(%i): %i bytes", filedes, nbytes);
errno = 0;
if ((nbytes = sock_recv (filedes, buffer, MAXMSG)) < 0) {
if (errno != EAGAIN)
fprintf (stderr, "read_from_client: (fd %d) %s\n", filedes, strerror(errno));
report (RPT_DEBUG, "read_from_client: (fd %d) %s", filedes, strerror(errno));
return 0;
} else if (nbytes == 0) // EOF
return -1;
@@ -240,9 +234,9 @@ read_from_client (int filedes)
if (c) {
client_add_message (c, buffer);
} else
fprintf (stderr, "read_from_client: Can't find client %i\n", filedes);
report (RPT_DEBUG, "read_from_client: Can't find client %i", filedes);
debug ("read_from_client: got message: `%s'\n", buffer);
debug (RPT_DEBUG, "read_from_client: got message: `%s'", buffer);
return nbytes;
}
return nbytes;
@@ -256,7 +250,7 @@ sock_close_all ()
{
int fd;
debug ("sock_close_all()\n");
report (RPT_INFO, "sock_close_all()");
for (fd = 0; fd < FD_SETSIZE; fd++) {
// TODO: Destroy a "client" here...? Nope.
@@ -274,7 +268,7 @@ sock_close_all ()
//sock_send_string (fd, "bye\n");
close (fd);
FD_CLR (fd, &active_fd_set);
debug ("sock_close_all: Closed connection %i\n", fd);
debug (RPT_DEBUG, "sock_close_all: Closed connection %i", fd);
}
}
+25 -25
View File
@@ -3,7 +3,7 @@
#include <string.h>
#include "shared/sockets.h"
#include "shared/debug.h"
#include "shared/report.h"
#include "screen.h"
#include "widget.h"
@@ -30,11 +30,11 @@ widget_create ()
{
widget *w;
debug ("widget_create()\n");
report (RPT_INFO, "widget_create()");
w = malloc (sizeof (widget));
if (!w) {
fprintf (stderr, "widget_create: Error allocating widget\n");
report (RPT_DEBUG, "widget_create: Error allocating widget");
return NULL;
}
@@ -65,14 +65,14 @@ widget_destroy (widget * w)
if (!w)
return -1;
debug ("widget_destroy(%s)\n", w->id);
debug (RPT_INFO, "widget_destroy(%s)", w->id);
if (w->id)
free (w->id);
//debug("widget_destroy: id...\n");
//debug(RPT_DEBUG, "widget_destroy: id...");
if (w->text)
free (w->text);
//debug("widget_destroy: text...\n");
//debug(RPT_DEBUG, "widget_destroy: text...");
// TODO: Free kids!
if (w->kids) {
@@ -89,7 +89,7 @@ widget_destroy (widget * w)
}
free (w);
//debug("widget_destroy: widget...\n");
//debug(RPT_DEBUG, "widget_destroy: widget...");
return 0;
}
@@ -104,7 +104,7 @@ widget_find (screen * s, char *id)
if (!id)
return NULL;
debug ("widget_find(%s)\n", id);
debug (RPT_DEBUG, "widget_find(%s)", id);
return widget_finder (s->widgets, id);
}
@@ -119,26 +119,26 @@ widget_finder (LinkedList * list, char *id)
if (!id)
return NULL;
debug ("widget_finder(%s)\n", id);
debug (RPT_DEBUG, "widget_finder(%s)", id);
LL_Rewind (list);
do {
//debug("widget_finder: Iteration\n");
//debug(RPT_DEBUG, "widget_finder: Iteration");
w = LL_Get (list);
if (w) {
//debug("widget_finder: ...\n");
//debug(RPT_DEBUG, "widget_finder: ...");
if (0 == strcmp (w->id, id)) {
debug ("widget_finder: Found %s\n", id);
debug (RPT_DEBUG, "widget_finder: Found %s", id);
return w;
}
// Search kids recursively
//debug("widget_finder: ...\n");
//debug(RPT_DEBUG, "widget_finder: ...");
if (w->type == WID_FRAME) {
err = widget_finder (w->kids, id);
if (err)
return err;
}
//debug("widget_finder: ...\n");
//debug(RPT_DEBUG, "widget_finder: ...");
}
} while (LL_Next (list) == 0);
@@ -155,7 +155,7 @@ widget_add (screen * s, char *id, char *type, char *in, int sock)
widget *w, *parent;
LinkedList *list;
debug ("widget_add(%s, %s, %s)\n", id, type, in);
report (RPT_INFO, "widget_add(%s, %s, %s)", id, type, in);
if (!s)
return -1;
@@ -187,7 +187,7 @@ widget_add (screen * s, char *id, char *type, char *in, int sock)
if (parent->type == WID_FRAME) {
list = parent->kids;
if (!list)
fprintf (stderr, "widget_add: Parent has no kids\n");
report (RPT_DEBUG, "widget_add: Parent has no kids");
} else {
// no frame to use as parent
sock_send_string (sock, "huh? Not a frame\n");
@@ -211,18 +211,18 @@ widget_add (screen * s, char *id, char *type, char *in, int sock)
return 2;
}
debug ("widget_add: making widget\n");
debug (RPT_DEBUG, "widget_add: making widget");
// Now, make it...
w = widget_create ();
if (!w) {
fprintf (stderr, "widget_add: Error creating widget\n");
report (RPT_ERR, "widget_add: Error creating widget");
return -1;
}
w->id = strdup (id);
if (!w->id) {
fprintf (stderr, "widget_add: Error allocating id\n");
report (RPT_ERR, "widget_add: Error allocating id");
return -1;
}
@@ -233,7 +233,7 @@ widget_add (screen * s, char *id, char *type, char *in, int sock)
if (!w->kids) {
w->kids = LL_new ();
if (!w->kids) {
fprintf (stderr, "widget_add: error allocating kids for frame\n");
report (RPT_ERR, "widget_add: error allocating kids for frame");
return -1;
}
}
@@ -251,7 +251,7 @@ widget_remove (screen * s, char *id, int sock)
widget *w;
LinkedList *list;
debug ("widget_remove(%s)\n", id);
report (RPT_INFO, "widget_remove(%s)", id);
if (!s)
return -1;
@@ -268,7 +268,7 @@ widget_remove (screen * s, char *id, int sock)
w = widget_find (s, id);
if (!w) {
sock_send_string (sock, "huh? You don't have a widget with that id#\n");
debug ("widget_remove: Error finding widget %s\n", id);
report (RPT_ERR, "widget_remove: Error finding widget %s", id);
return 1;
}
@@ -291,7 +291,7 @@ widget_remover (LinkedList * list, widget * w)
widget *foo, *bar;
int err;
debug ("widget_remover\n");
debug (RPT_DEBUG, "widget_remover");
if (!list)
return 0;
@@ -309,7 +309,7 @@ widget_remover (LinkedList * list, widget * w)
// If removing a frame, kill all its kids, too...
if (foo == w) {
if (!foo->kids) {
fprintf (stderr, "widget_remover: frame has no kids\n");
debug (RPT_DEBUG, "widget_remover: frame has no kids");
} else // Kill the kids...
{
LL_Rewind (foo->kids);
@@ -326,7 +326,7 @@ widget_remover (LinkedList * list, widget * w)
} else // Otherwise, search the frame recursively...
{
if (!foo->kids) {
fprintf (stderr, "widget_remover: frame has no kids\n");
debug (RPT_DEBUG, "widget_remover: frame has no kids");
} else
err = widget_remover (foo->kids, w);
+1 -1
View File
@@ -1,2 +1,2 @@
noinst_LIBRARIES = libLCDstuff.a
libLCDstuff_a_SOURCES = LL.c LL.h sockets.c sockets.h str.c str.h debug.h
libLCDstuff_a_SOURCES = LL.c LL.h sockets.c sockets.h str.c str.h debug.h report.c report.h
+12 -12
View File
@@ -12,7 +12,7 @@
#include <arpa/inet.h>
#include <fcntl.h>
#include "debug.h"
#include "report.h"
#include "sockets.h"
/**************************************************
@@ -36,7 +36,7 @@ sock_init_sockaddr (sockaddr_in * name, const char *hostname, unsigned short int
name->sin_port = htons (port);
hostinfo = gethostbyname (hostname);
if (hostinfo == NULL) {
fprintf (stderr, "sock_init_sockaddr: Unknown host %s.\n", hostname);
report (RPT_ERR, "sock_init_sockaddr: Unknown host %s.", hostname);
return -1;
}
name->sin_addr = *(struct in_addr *) hostinfo->h_addr;
@@ -53,19 +53,19 @@ sock_connect (char *host, unsigned short int port)
int sock;
int err = 0;
debug ("sock_connect: Creating socket\n");
report (RPT_DEBUG, "sock_connect: Creating socket");
sock = socket (PF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror ("sock_connect: Error creating socket");
report (RPT_ERR, "sock_connect: Error creating socket");
return sock;
}
debug ("sock_connect: Created socket (%i)\n", sock);
debug (RPT_DEBUG, "sock_connect: Created socket (%i)", sock);
sock_init_sockaddr (&servername, host, port);
err = connect (sock, (struct sockaddr *) &servername, sizeof (servername));
if (err < 0) {
perror ("sock_connect: connect failed");
report (RPT_ERR, "sock_connect: connect failed");
shutdown (sock, 2);
return 0; // Normal exit if server doesn't exist...
}
@@ -104,8 +104,8 @@ sock_send_string (int fd, char *string)
int sent = write (fd, string + offset, len - offset);
if (sent == -1) {
if (errno != EAGAIN) {
perror ("sock_send_string: socket write error");
printf ("Message was: %s\n", string);
report (RPT_ERR, "sock_send_string: socket write error");
report (RPT_DEBUG, "Message was: %s", string);
//shutdown(fd, 2);
return sent;
}
@@ -145,7 +145,7 @@ sock_recv_string (int fd, char *dest, size_t maxlen)
}
return 0;
} else {
perror ("sock_recv_string: socket read error");
report (RPT_ERR, "sock_recv_string: socket read error");
return err;
}
} else if (err == 0) {
@@ -188,7 +188,7 @@ sock_send (int fd, void *src, size_t size)
int sent = write (fd, ((char *) src) + offset, size - offset);
if (sent == -1) {
if (errno != EAGAIN) {
perror ("sock_send: socket write error");
report (RPT_ERR, "sock_send: socket write error");
//shutdown(fd, 2);
return sent;
}
@@ -217,11 +217,11 @@ sock_recv (int fd, void *dest, size_t maxlen)
err = read (fd, dest, maxlen);
if (err < 0) {
//fprintf (stderr,"sock_recv: socket read error\n");
//report (RPT_DEBUG,"sock_recv: socket read error");
//shutdown(fd, 2);
return err;
}
//debug("sock_recv: Got message \"%s\"\n", (char *)dest);
//debug(RPT_DEBUG, "sock_recv: Got message \"%s\"", (char *)dest);
return err;
}