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>
# 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 .
*/
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 ) ;
exit ( 0 ) ;
} 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 ) ;
exit ( 0 ) ;
} else {
fprintf ( stderr , " -d to disable, -e to enable. \n " ) ;
fprintf ( stderr , " run by itself to tick the card. \n " ) ;
fflush ( stderr ) ;
exit ( 0 ) ;
}
} else {
fprintf ( stderr , " Watchdog Ticking Away! \n " ) ;
fflush ( stderr ) ;
}
while ( 1 ) {
keep_alive ( ) ;
sleep ( 1 ) ;
}
}