1/* 2 * Watchdog Driver Test Program 3 */ 4 5#include <stdio.h> 6#include <stdlib.h> 7#include <string.h> 8#include <unistd.h> 9#include <fcntl.h> 10#include <signal.h> 11#include <sys/ioctl.h> 12#include <linux/types.h> 13#include <linux/watchdog.h> 14 15int fd; 16 17/* 18 * This function simply sends an IOCTL to the driver, which in turn ticks 19 * the PC Watchdog card to reset its internal timer so it doesn't trigger 20 * a computer reset. 21 */ 22static void keep_alive(void) 23{ 24 int dummy; 25 26 ioctl(fd, WDIOC_KEEPALIVE, &dummy); 27} 28 29/* 30 * The main program. Run the program with "-d" to disable the card, 31 * or "-e" to enable the card. 32 */ 33 34static void term(int sig) 35{ 36 close(fd); 37 fprintf(stderr, "Stopping watchdog ticks...\n"); 38 exit(0); 39} 40 41int main(int argc, char *argv[]) 42{ 43 int flags; 44 45 fd = open("/dev/watchdog", O_WRONLY); 46 47 if (fd == -1) { 48 fprintf(stderr, "Watchdog device not enabled.\n"); 49 fflush(stderr); 50 exit(-1); 51 } 52 53 if (argc > 1) { 54 if (!strncasecmp(argv[1], "-d", 2)) { 55 flags = WDIOS_DISABLECARD; 56 ioctl(fd, WDIOC_SETOPTIONS, &flags); 57 fprintf(stderr, "Watchdog card disabled.\n"); 58 fflush(stderr); 59 goto end; 60 } else if (!strncasecmp(argv[1], "-e", 2)) { 61 flags = WDIOS_ENABLECARD; 62 ioctl(fd, WDIOC_SETOPTIONS, &flags); 63 fprintf(stderr, "Watchdog card enabled.\n"); 64 fflush(stderr); 65 goto end; 66 } else { 67 fprintf(stderr, "-d to disable, -e to enable.\n"); 68 fprintf(stderr, "run by itself to tick the card.\n"); 69 fflush(stderr); 70 goto end; 71 } 72 } else { 73 fprintf(stderr, "Watchdog Ticking Away!\n"); 74 fflush(stderr); 75 } 76 77 signal(SIGINT, term); 78 79 while(1) { 80 keep_alive(); 81 sleep(1); 82 } 83end: 84 close(fd); 85 return 0; 86} 87