⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 latch.c

📁 uclinux里面涉及到的一个button的demo代码
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <time.h>#include "../../modules/io/sgio.h"/* Which SGIO input is the button? counting from zero */#define BUTTON_NUM	0/* How long to latch the output in s */#define LATCH_TIME	60/* Define our poll timings. * We'll check for a state change every 20ms (fiftieth of a second) and * we'll provide a debounce delay of 50ms (twentieth of a second). */#define POLL_RATE	(1000 * 20)#define DEBOUNCE_TIME	(1000 * 50)/* The main routine, wait for button state changes and output transitions */int main(int argc, char *argv[]) {	int fd;	int i, previ;	time_t t, st;	int sleeptime;	struct sgio_write_output_s outs;	st = 0;	close(0);	fd = open("/dev/sgio", O_RDONLY);	if (fd >= 0) {		previ = 2;		close(2);		outs.number = BUTTON_NUM;		outs.value = 0;		ioctl(fd, SGIO_WRITE_OUTPUT, &outs);		for (;;) {			t = time(NULL);			i = ioctl(fd, SGIO_READ_INPUT, BUTTON_NUM);			if (i != previ) {				if (i == 0) {					if (1 != write(1, "0", 1))						return 0;					outs.number = BUTTON_NUM;					outs.value = 1;					ioctl(fd, SGIO_WRITE_OUTPUT, &outs);					st = t + LATCH_TIME;				} else if (previ == 2) {					write(1, "1", 1);					outs.number = BUTTON_NUM;					outs.value = 0;					ioctl(fd, SGIO_WRITE_OUTPUT, &outs);				}//				if (1 != write(1, i?"1":"0", 1))//					return 0;				previ = i;				sleeptime = DEBOUNCE_TIME;			} else				sleeptime = POLL_RATE;			if (st != 0 && st <= t) {				st = 0;				write(1, "1", 1);				outs.number = BUTTON_NUM;				outs.value = 0;				ioctl(fd, SGIO_WRITE_OUTPUT, &outs);			}			usleep(sleeptime);		}	}	fprintf(stderr, "cannot open %s\n", "/dev/sgio");	return 1;}

⌨️ 快捷键说明

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