summaryrefslogtreecommitdiff
path: root/rotor.c
diff options
context:
space:
mode:
Diffstat (limited to 'rotor.c')
-rw-r--r--rotor.c105
1 files changed, 0 insertions, 105 deletions
diff --git a/rotor.c b/rotor.c
deleted file mode 100644
index f6121f4..0000000
--- a/rotor.c
+++ /dev/null
@@ -1,105 +0,0 @@
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <poll.h>
-
-#include <sys/time.h>
-#include <time.h>
-
-#define MAX_BUF 64
-
-struct timespec diff(struct timespec start, struct timespec end)
-{
- struct timespec temp;
- if ((end.tv_nsec-start.tv_nsec)<0) {
- temp.tv_sec = end.tv_sec-start.tv_sec-1;
- temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
- } else {
- temp.tv_sec = end.tv_sec-start.tv_sec;
- temp.tv_nsec = end.tv_nsec-start.tv_nsec;
- }
- return temp;
-}
-
-int main( int argc, char** argv )
-{
- struct pollfd fdset[2];
-
- int nfds = 2;
- int gpio_fd, timeout, rc;
- char buf[MAX_BUF];
- int len;
- int number=0;
- struct timespec now_ts, then_ts, diff_ts;
- bool firstInt; // the next interrupt is the first of the sequence
-
-
- gpio_fd = open( "/sys/class/gpio/gpio15_pb2/value", O_RDONLY | O_NONBLOCK );
- timeout = 500;
-
-
- clock_gettime(CLOCK_MONOTONIC, &then_ts);
-
- firstInt=true;
-
- while (1) {
-
- memset((void*)fdset, 0, sizeof(fdset));
- memset((void*)buf,0,sizeof(buf));
-
- fdset[0].fd = 0;
- fdset[0].events = POLLIN;
-
- fdset[1].fd = gpio_fd;
- fdset[1].events = POLLPRI;
-
- rc = poll(fdset, nfds, timeout);
-
- if (rc < 0) {
- fprintf(stderr,"\npoll() failed!\n");
- return -1;
- }
-
- // scaduto il timeout senza interrupt
- if (rc == 0) {
- // printf(".");
- if (number > 0) {
- printf("%d\n\n", number % 10);
- number=0;
- }
- }
-
- if (fdset[1].revents & POLLPRI) {
- clock_gettime(CLOCK_MONOTONIC, &now_ts);
- // printf("%d %d - ", now_ts.tv_sec, now_ts.tv_nsec);
- diff_ts = diff(then_ts, now_ts);
- then_ts = now_ts;
- lseek(fdset[1].fd,0,SEEK_SET);
- len = read(fdset[1].fd, buf, MAX_BUF);
-// printf("\npoll() GPIO %d interrupt occurred\n", 34);
- strtok(buf,"\n");
-
- int sec=diff_ts.tv_sec;
- float msec=diff_ts.tv_nsec/1000000.0;
-
-
- printf("value [%s] sec %d msec %f\n",buf,sec,msec);
-
- if (firstInt || msec > 90) number++;
- firstInt=false;
- }
-
- if (fdset[0].revents & POLLIN) {
- (void)read(fdset[0].fd, buf, 1);
- fprintf(stderr, "\npoll() stdin read 0x%2.2X\n", (unsigned int) buf[0]);
- }
-
- fflush(stdout);
- }
-
-
-}