Hallo Gemeinde,
ich rätsel schon seit Tagen an einem Problem.
RaspberryPI GPIOs via poll() auf "/sys/class/gpio/gpio%d/value" ...
Funktioniert eigentlich perferkt, bis auf diese blöden Spitzen :-/
Der Interrupt wird von einem Reed ausgelöst, ich dachte erst der prellt,
aber zwischen den Impulsen liegen regelmässig 5-6 Sekunden!
Hat jemand eine Idee?
1 | char buffer[BUF_LEN];
|
2 | struct pollfd fds[inputs];
|
3 |
|
4 | for (i=0; i<inputs; i++)
|
5 | {
|
6 | char buffer[BUF_LEN];
|
7 | snprintf ( buffer, BUF_LEN, "/sys/class/gpio/gpio%d/value", gpio_pin_id[i] );
|
8 | if((fds[i].fd = open( buffer, O_RDONLY | O_NONBLOCK )) ==-1)
|
9 | {
|
10 | syslog(LOG_INFO,"Error:%s (%m)", buffer);
|
11 | }
|
12 | }
|
13 |
|
14 | for (i=0; i<inputs; i++)
|
15 | {
|
16 | fds[i].events = POLLPRI;
|
17 | }
|
18 |
|
19 | while(1)
|
20 | {
|
21 | int ret = poll(fds, inputs, 0 );
|
22 |
|
23 | if(ret<0)
|
24 | {
|
25 | syslog(LOG_INFO,"Error: ");
|
26 | }
|
27 |
|
28 | for (i=0; i<inputs; i++)
|
29 | {
|
30 | if (fds[i].revents & POLLPRI)
|
31 | {
|
32 | read(fds[i].fd, buffer, BUF_LEN);
|
33 | http_post(vzuuid[i]);
|
34 | }
|
35 | }
|
36 | }
|