w83627hf_test.c

来自「主板上提供一个可按分或秒计时的」· C语言 代码 · 共 91 行

C
91
字号
#include <stdio.h>#include <sys/fcntl.h>#include <sys/ioctl.h>#include <sys/signal.h>#include <unistd.h>#include "w83627hf_wdt.h"#define WDT_DEVICE "/dev/watchdog"#define WATCHDOG_TIMEOUT 30 /* 根据传入的参数处理各种ioctl操作 */void wdt_ioctl(int fd, unsigned int cmd, unsigned long arg){	struct watchdog_info *argp = (struct watchdog_info *)arg;	int *p = (int *)arg;	int ret;	switch (cmd)	{		case WDIOC_GETSUPPORT:/* 获取wdt_all_info */			ioctl(fd, cmd, argp);			if(argp->options & WDIOF_KEEPALIVEPING)				printf("WDIOF_KEEPALIVEPING\n");			if(argp->options & WDIOF_SETTIMEOUT)				printf("WDIOF_SETTIMEOUT\n");			if(argp->options & WDIOF_MAGICCLOSE)				printf("WDIOF_MAGICCLOSE\n");			printf("firmware_version:%d\n", argp->firmware_version);			printf("identity:%s\n", argp->identity);			break;		case WDIOC_GETSTATUS:			ioctl(fd, cmd, p);			printf("status:%d\n", *p);			break;		case WDIOC_SETTIMEOUT:/* 设置超时值 */			ret = ioctl(fd, cmd, p);			if(ret == 0)				printf("settimeout success!\n");			else				printf("settimeout failed!\n");			break;		case WDIOC_SETOPTIONS:/* 设置看门狗状态,开启/禁用 */			ret = ioctl(fd, cmd, p);			printf("wdt enable ret is:%d\n", ret);			break;		case WDIOC_GETTIMEOUT:/* 获取超时值 */			ret = ioctl(fd, cmd, p);			if(ret == 0)				printf("timeout: %d\n", *p);			else				printf("gettimeout failed!\n");			break;		default:	  		return;	}}int main(int argc,char *argv[]){	int wdt;	struct watchdog_info info;	unsigned long arg=0;	wdt = open(WDT_DEVICE, O_RDWR);/* 打开设备 */	if(wdt < 0)	{	printf("I can not open watchdog\n");	return 1;	}	//ioctl	wdt_ioctl(wdt, WDIOC_GETSUPPORT, (unsigned long)&info);/* 获取看门狗信息 */	wdt_ioctl(wdt, WDIOC_GETSTATUS, (unsigned long)&arg);	wdt_ioctl(wdt, WDIOC_GETTIMEOUT, (unsigned long)&arg);/* 获取看门狗超时值 */	//enable watchdog	arg = WDIOS_ENABLECARD;	wdt_ioctl(wdt, WDIOC_SETOPTIONS, (unsigned long)&arg);/* 开启看门狗 */	//set new timeout 	arg = WATCHDOG_TIMEOUT;	wdt_ioctl(wdt, WDIOC_SETTIMEOUT, (unsigned long)&arg);/* 设置看门狗超时值为WATCHDOG_TIMEOUT */	wdt_ioctl(wdt, WDIOC_GETTIMEOUT, (unsigned long)&arg);/* 获取看门狗超时值 */	while (1)//fee watchdog	{		arg = WATCHDOG_TIMEOUT;		write(wdt, &arg, sizeof(arg));/* 喂狗 */		sleep(1);	}	close(wdt);	return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?