2
* Copyright 2002 Sun Microsystems, Inc. All rights reserved.
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
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,
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.
24
* NOTE: as we want to make sure that all of the lcd utils know
25
* about each other, this is almost intentionally
35
#include <sys/types.h>
38
static struct itimerval timeout;
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) {
46
memset(&act, 0, sizeof(act));
48
act.sa_flags = SA_RESTART;
49
if (sigaction(SIGALRM, &act, NULL) < 0)
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);
63
/* stop and reset everything */
64
void lcd_timeout_stop(void) {
65
struct itimerval zero;
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);
76
int lcd_timeout_reset(void) {
77
return setitimer(ITIMER_REAL, &timeout, NULL);