[Pommed-commits] r373 - trunk/pommed
jblache at alioth.debian.org
jblache at alioth.debian.org
Fri Nov 16 16:18:06 UTC 2007
Author: jblache
Date: 2007-11-16 16:18:06 +0000 (Fri, 16 Nov 2007)
New Revision: 373
Modified:
trunk/pommed/evdev.c
trunk/pommed/evdev.h
trunk/pommed/pommed.c
Log:
Move event loop processing into evdev.c.
Modified: trunk/pommed/evdev.c
===================================================================
--- trunk/pommed/evdev.c 2007-11-15 08:52:57 UTC (rev 372)
+++ trunk/pommed/evdev.c 2007-11-16 16:18:06 UTC (rev 373)
@@ -67,10 +67,15 @@
#define EVDEV_NO_EVDEV 0
+/* evdev bitmask */
static unsigned int evdevs;
-void
+static struct pollfd *fds;
+static int nfds;
+
+
+static void
evdev_process_events(int fd)
{
int ret;
@@ -223,6 +228,48 @@
}
}
+
+int
+evdev_event_loop(int *reopen)
+{
+ int ret;
+ int i;
+
+ ret = poll(fds, nfds, LOOP_TIMEOUT);
+
+ if (ret < 0)
+ {
+ if (errno != EINTR)
+ {
+ logmsg(LOG_ERR, "poll() error: %s", strerror(errno));
+
+ return -2;
+ }
+ else
+ return -1;
+ }
+ else if (ret != 0)
+ {
+ for (i = 0; i < nfds; i++)
+ {
+ /* the event devices cease to exist when suspending */
+ if (fds[i].revents & (POLLERR | POLLHUP | POLLNVAL))
+ {
+ logmsg(LOG_WARNING, "Error condition signaled on evdev, reopening");
+ *reopen = 1;
+
+ return -1;
+ }
+
+ if (fds[i].revents & POLLIN)
+ evdev_process_events(fds[i].fd);
+ }
+ }
+
+ return ret;
+}
+
+
#ifdef __powerpc__
/* PowerBook G4 Titanium */
int
@@ -500,12 +547,11 @@
int
-evdev_open(struct pollfd **fds)
+evdev_open(void)
{
int ret;
int i, j;
- int found = 0;
int fd[32];
unsigned short id[4];
@@ -583,15 +629,15 @@
continue;
}
- found++;
+ nfds++;
}
- logdebug("\nFound %d devices\n", found);
+ logdebug("\nFound %d devices\n", nfds);
- /* Allocate found pollfd structs + 1 for the beeper */
- *fds = (struct pollfd *) malloc((found + 1) * sizeof(struct pollfd));
+ /* Allocate nfds pollfd structs + 1 for the beeper */
+ fds = (struct pollfd *) malloc((nfds + 1) * sizeof(struct pollfd));
- if (*fds == NULL)
+ if (fds == NULL)
{
for (i = 0; i < EVDEV_MAX; i++)
{
@@ -599,62 +645,62 @@
close(fd[i]);
}
- logmsg(LOG_ERR, "Out of memory for %d pollfd structs", found);
+ logmsg(LOG_ERR, "Out of memory for %d pollfd structs", nfds);
return -1;
}
j = 0;
- for (i = 0; i < EVDEV_MAX && j < found; i++)
+ for (i = 0; i < EVDEV_MAX && j < nfds; i++)
{
if (fd[i] < 0)
continue;
- (*fds)[j].fd = fd[i];
- (*fds)[j].events = POLLIN;
+ fds[j].fd = fd[i];
+ fds[j].events = POLLIN;
j++;
}
ret = beep_open_device();
if (ret == 0)
{
- (*fds)[j].fd = beep_info.fd;
- (*fds)[j].events = POLLIN;
- found++;
+ fds[j].fd = beep_info.fd;
+ fds[j].events = POLLIN;
+ nfds++;
}
- return found;
+ return nfds;
}
void
-evdev_close(struct pollfd **fds, int nfds)
+evdev_close(void)
{
int i;
- if (*fds != NULL)
+ if (fds != NULL)
{
for (i = 0; i < nfds; i++)
{
- if ((*fds)[i].fd == beep_info.fd)
+ if (fds[i].fd == beep_info.fd)
beep_close_device();
else
- close((*fds)[i].fd);
+ close(fds[i].fd);
}
- free(*fds);
+ free(fds);
}
- *fds = NULL;
+ fds = NULL;
}
int
-evdev_reopen(struct pollfd **fds, int nfds)
+evdev_reopen(void)
{
int i;
unsigned int prev_evdevs = evdevs;
- evdev_close(fds, nfds);
+ evdev_close();
logdebug("Previous event devices: 0x%04x\n", prev_evdevs);
@@ -666,7 +712,7 @@
{
usleep(500000);
- nfds = evdev_open(fds);
+ nfds = evdev_open();
if (nfds > 0)
{
@@ -676,7 +722,7 @@
break;
/* We haven't got all the event devices we need */
- evdev_close(fds, nfds);
+ evdev_close();
}
}
Modified: trunk/pommed/evdev.h
===================================================================
--- trunk/pommed/evdev.h 2007-11-15 08:52:57 UTC (rev 372)
+++ trunk/pommed/evdev.h 2007-11-16 16:18:06 UTC (rev 373)
@@ -72,8 +72,8 @@
#define EVDEV_MAX 32
-void
-evdev_process_events(int fd);
+int
+evdev_event_loop(int *reopen);
#ifdef __powerpc__
@@ -100,12 +100,12 @@
int
-evdev_open(struct pollfd **fds);
+evdev_open(void);
void
-evdev_close(struct pollfd **fds, int nfds);
+evdev_close(void);
int
-evdev_reopen(struct pollfd **fds, int nfds);
+evdev_reopen(void);
#endif /* !__EVDEV_H__ */
Modified: trunk/pommed/pommed.c
===================================================================
--- trunk/pommed/pommed.c 2007-11-15 08:52:57 UTC (rev 372)
+++ trunk/pommed/pommed.c 2007-11-16 16:18:06 UTC (rev 373)
@@ -28,7 +28,6 @@
#include <sys/time.h>
#include <time.h>
#include <string.h>
-#include <poll.h>
#include <signal.h>
#include <syslog.h>
@@ -639,13 +638,9 @@
{
int ret;
int c;
- int i;
FILE *pidfile;
- struct pollfd *fds;
- int nfds;
-
int reopen;
machine_type machine;
@@ -744,8 +739,8 @@
exit(1);
}
- nfds = evdev_open(&fds);
- if (nfds < 1)
+ ret = evdev_open();
+ if (ret < 1)
{
logmsg(LOG_ERR, "No suitable event devices found");
@@ -778,7 +773,7 @@
{
logmsg(LOG_ERR, "daemon() failed: %s", strerror(errno));
- evdev_close(&fds, nfds);
+ evdev_close();
exit(-1);
}
@@ -789,7 +784,7 @@
{
logmsg(LOG_WARNING, "Could not open pidfile %s: %s", PIDFILE, strerror(errno));
- evdev_close(&fds, nfds);
+ evdev_close();
exit(-1);
}
@@ -812,9 +807,9 @@
/* Attempt to reopen event devices, typically after resuming */
if (reopen)
{
- nfds = evdev_reopen(&fds, nfds);
+ ret = evdev_reopen();
- if (nfds < 1)
+ if (ret < 1)
{
logmsg(LOG_ERR, "No suitable event devices found (reopen)");
@@ -830,35 +825,17 @@
reopen = 0;
}
- ret = poll(fds, nfds, LOOP_TIMEOUT);
+ ret = evdev_event_loop(&reopen);
gettimeofday(&tv_now, NULL);
if (ret < 0) /* error */
{
- if (errno != EINTR)
- {
- logmsg(LOG_ERR, "poll() error: %s", strerror(errno));
-
- break;
- }
+ if (ret == -2)
+ break;
}
else if (ret != 0)
{
- for (i = 0; i < nfds; i++)
- {
- /* the event devices cease to exist when suspending */
- if (fds[i].revents & (POLLERR | POLLHUP | POLLNVAL))
- {
- logmsg(LOG_WARNING, "Error condition signaled on evdev, reopening");
- reopen = 1;
- break;
- }
-
- if (fds[i].revents & POLLIN)
- evdev_process_events(fds[i].fd);
- }
-
/* is it time to chek the ambient light sensors and AC state ? */
tv_diff.tv_sec = tv_now.tv_sec - tv_als.tv_sec;
if (tv_diff.tv_sec < 0)
@@ -903,7 +880,7 @@
mbpdbus_process_requests();
}
- evdev_close(&fds, nfds);
+ evdev_close();
beep_cleanup();
More information about the Pommed-commits
mailing list