~ubuntu-branches/ubuntu/quantal/cobalt-panel-utils/quantal

« back to all changes in this revision

Viewing changes to lib/lcdtimeout.c

  • Committer: Bazaar Package Importer
  • Author(s): Adam Cécile (Le_Vert)
  • Date: 2006-09-23 17:58:08 UTC
  • Revision ID: james.westby@ubuntu.com-20060923175808-1y364v1jk38av0yp
Tags: upstream-1.0.2
Import upstream version 1.0.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright 2002 Sun Microsystems, Inc.  All rights reserved.
 
3
 *
 
4
 * Use is subject to the GNU Lesser General Public License, Version 2.1,
 
5
 * February 1999, which is contained in the read-me file named
 
6
 * "README_GNU_LGPL." This library is free software; you can
 
7
 * redistribute it and/or modify it under the terms of the GNU
 
8
 * Lesser General Public License as published by the Free Software
 
9
 * Foundation; either version 2.1 of the License, or (at your
 
10
 * option) any later version. This library is distributed in the
 
11
 * hope that it will be useful, but WITHOUT ANY WARRANTY; without
 
12
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 
13
 * PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 
14
 * for more details.
 
15
 *
 
16
 * You should have received a copy of the GNU Lesser General Public
 
17
 * License along with this library; if not, write to the Free
 
18
 * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 
19
 * MA  02111-1307  USA.
 
20
 *
 
21
 * implement time-related functions for panel utils. it's done this way
 
22
 * because select() doesn't always work with the lcd driver. bleah.
 
23
 *
 
24
 * NOTE: as we want to make sure that all of the lcd utils know
 
25
 *       about each other, this is almost intentionally 
 
26
 *       single-threaded.
 
27
 */
 
28
 
 
29
#include <stdio.h>
 
30
#include <stdlib.h>
 
31
#include <string.h>
 
32
#include <unistd.h>
 
33
#include <signal.h>
 
34
#include <sys/time.h>
 
35
#include <sys/types.h>
 
36
#include "lcdutils.h"
 
37
 
 
38
static struct itimerval timeout;
 
39
 
 
40
/* start up an alarm handler for timeouts. we have to do it
 
41
 * this way because we can't do a select/poll on /dev/lcd
 
42
 * and have it be meaningful. */
 
43
int lcd_timeout_start(void (*fcn)(int), const int seconds) {
 
44
        struct sigaction act;
 
45
        
 
46
        memset(&act, 0, sizeof(act));
 
47
        act.sa_handler = fcn;
 
48
        act.sa_flags = SA_RESTART;
 
49
        if (sigaction(SIGALRM, &act, NULL) < 0)
 
50
                return -1;
 
51
        
 
52
        memset(&timeout, 0, sizeof(timeout));
 
53
        timeout.it_interval.tv_sec = seconds;
 
54
        timeout.it_value.tv_sec = seconds;
 
55
        if (setitimer(ITIMER_REAL, &timeout, NULL) < 0) {
 
56
                sigaction(SIGALRM, NULL, NULL);
 
57
                return -1;
 
58
        }
 
59
        
 
60
        return 0;
 
61
}
 
62
 
 
63
/* stop and reset everything */
 
64
void lcd_timeout_stop(void) {
 
65
        struct itimerval zero;
 
66
        struct sigaction act;
 
67
        
 
68
        memset(&zero, 0, sizeof(zero));
 
69
        memset(&act, 0, sizeof(act));
 
70
        setitimer(ITIMER_REAL, &zero, NULL);
 
71
        act.sa_handler = SIG_DFL;
 
72
        sigaction(SIGALRM, &act, NULL);
 
73
}
 
74
 
 
75
/* just do a reset */
 
76
int lcd_timeout_reset(void) {
 
77
        return setitimer(ITIMER_REAL, &timeout, NULL); 
 
78
}