| 45 | |
| 46 | |
| 47 | void runRemoteCommands (int fd) |
| 48 | { |
| 49 | register uint32_t pin ; |
| 50 | int len ; |
| 51 | struct drcNetComStruct cmd ; |
| 52 | |
| 53 | len = sizeof (struct drcNetComStruct) ; |
| 54 | |
| 55 | if (setsockopt (fd, SOL_SOCKET, SO_RCVLOWAT, (void *)&len, sizeof (len)) < 0) |
| 56 | return ; |
| 57 | |
| 58 | for (;;) |
| 59 | { |
| 60 | if (recv (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) // Probably remote hangup |
| 61 | return ; |
| 62 | |
| 63 | pin = cmd.pin ; |
| 64 | if (noLocalPins && ((pin & PI_GPIO_MASK) == 0)) |
| 65 | { |
| 66 | if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) |
| 67 | return ; |
| 68 | continue ; |
| 69 | } |
| 70 | |
| 71 | switch (cmd.cmd) |
| 72 | { |
| 73 | case DRCN_PIN_MODE: |
| 74 | pinMode (pin, cmd.data) ; |
| 75 | if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) |
| 76 | return ; |
| 77 | break ; |
| 78 | |
| 79 | case DRCN_PULL_UP_DN: |
| 80 | pullUpDnControl (pin, cmd.data) ; |
| 81 | break ; |
| 82 | |
| 83 | case DRCN_PWM_WRITE: |
| 84 | pwmWrite (pin, cmd.data) ; |
| 85 | if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) |
| 86 | return ; |
| 87 | break ; |
| 88 | |
| 89 | case DRCN_DIGITAL_WRITE: |
| 90 | digitalWrite (pin, cmd.data) ; |
| 91 | if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) |
| 92 | return ; |
| 93 | break ; |
| 94 | |
| 95 | case DRCN_DIGITAL_WRITE8: |
| 96 | if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) |
| 97 | return ; |
| 98 | break ; |
| 99 | |
| 100 | case DRCN_DIGITAL_READ: |
| 101 | cmd.data = digitalRead (pin) ; |
| 102 | if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) |
| 103 | return ; |
| 104 | break ; |
no test coverage detected