2006-05-21 20:58:10 -07:00
/*
* Watchdog Driver Test Program
*/
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <unistd.h>
# include <fcntl.h>
2012-05-17 15:07:48 +05:30
# include <signal.h>
2006-05-21 20:58:10 -07:00
# include <sys/ioctl.h>
# include <linux/types.h>
# include <linux/watchdog.h>
int fd ;
/*
* This function simply sends an IOCTL to the driver , which in turn ticks
* the PC Watchdog card to reset its internal timer so it doesn ' t trigger
* a computer reset .
*/
2009-09-22 16:43:42 -07:00
static void keep_alive ( void )
2006-05-21 20:58:10 -07:00
{
int dummy ;
ioctl ( fd , WDIOC_KEEPALIVE , & dummy ) ;
}
/*
* The main program . Run the program with " -d " to disable the card ,
* or " -e " to enable the card .
*/
2012-05-17 15:07:48 +05:30
2012-07-23 10:46:11 -07:00
static void term ( int sig )
2012-05-17 15:07:48 +05:30
{
close ( fd ) ;
fprintf ( stderr , " Stopping watchdog ticks... \n " ) ;
exit ( 0 ) ;
}
2006-05-21 20:58:10 -07:00
int main ( int argc , char * argv [ ] )
{
2010-04-05 11:31:29 +01:00
int flags ;
2006-05-21 20:58:10 -07:00
fd = open ( " /dev/watchdog " , O_WRONLY ) ;
if ( fd = = - 1 ) {
fprintf ( stderr , " Watchdog device not enabled. \n " ) ;
fflush ( stderr ) ;
exit ( - 1 ) ;
}
if ( argc > 1 ) {
if ( ! strncasecmp ( argv [ 1 ] , " -d " , 2 ) ) {
2010-04-05 11:31:29 +01:00
flags = WDIOS_DISABLECARD ;
ioctl ( fd , WDIOC_SETOPTIONS , & flags ) ;
2006-05-21 20:58:10 -07:00
fprintf ( stderr , " Watchdog card disabled. \n " ) ;
fflush ( stderr ) ;
2012-05-14 23:42:02 +05:30
goto end ;
2006-05-21 20:58:10 -07:00
} else if ( ! strncasecmp ( argv [ 1 ] , " -e " , 2 ) ) {
2010-04-05 11:31:29 +01:00
flags = WDIOS_ENABLECARD ;
ioctl ( fd , WDIOC_SETOPTIONS , & flags ) ;
2006-05-21 20:58:10 -07:00
fprintf ( stderr , " Watchdog card enabled. \n " ) ;
fflush ( stderr ) ;
2012-05-14 23:42:02 +05:30
goto end ;
2006-05-21 20:58:10 -07:00
} else {
fprintf ( stderr , " -d to disable, -e to enable. \n " ) ;
fprintf ( stderr , " run by itself to tick the card. \n " ) ;
fflush ( stderr ) ;
2012-05-14 23:42:02 +05:30
goto end ;
2006-05-21 20:58:10 -07:00
}
} else {
fprintf ( stderr , " Watchdog Ticking Away! \n " ) ;
fflush ( stderr ) ;
}
2012-05-17 15:07:48 +05:30
signal ( SIGINT , term ) ;
2006-05-21 20:58:10 -07:00
while ( 1 ) {
keep_alive ( ) ;
sleep ( 1 ) ;
}
2012-05-14 23:42:02 +05:30
end :
close ( fd ) ;
return 0 ;
2006-05-21 20:58:10 -07:00
}