RocketLogger  1.0
rl_deamon.c
Go to the documentation of this file.
1 
5 #include "gpio.h"
6 
8 #define GPIO_BUTTON 26
9 #define MIN_INTERVAL 1
11 
16 int gpio_setup(void) {
17 
18  int ret1 = gpio_export(GPIO_BUTTON);
19  int ret2 = gpio_dir(GPIO_BUTTON, IN);
20  int ret3 = gpio_interrupt(GPIO_BUTTON, FALLING);
21 
22  if(ret1 == FAILURE || ret2 == FAILURE || ret3 == FAILURE) {
23  return FAILURE;
24  }
25 
26  return SUCCESS;
27 }
28 
33 void interrupt_handler(int value) {
34 
35  if (value == 0) { // only react if button pressed enough long
36 
37  // get RL status
38  int status = system("rocketlogger status > /dev/null");
39 
40  if (status > 0) {
41  system("rocketlogger stop > /dev/null");
42  } else {
43  system("rocketlogger cont > /dev/null");
44  }
45 
46  // debouncing
47  sleep(MIN_INTERVAL);
48 
49  }
50 
51 }
52 
59 int main(void) {
60 
61  int timeout = -1; //infinite timeout
62  if(gpio_setup() == FAILURE) {
63  exit(EXIT_FAILURE);
64  }
65 
66  while(1) {
67  int val = gpio_wait_interrupt(GPIO_BUTTON, timeout);
68  interrupt_handler(val);
69  }
70 
71  exit(EXIT_SUCCESS);
72 }
73 
int main(void)
Definition: rl_deamon.c:59
#define MIN_INTERVAL
Minimal time interval between two interrupts (in seconds)
Definition: rl_deamon.c:10
#define FAILURE
Definition: types.h:53
#define SUCCESS
Definition: types.h:50
struct rl_status status
Current status of RocketLogger.
Definition: rl_server.c:42
int gpio_export(int num)
Definition: gpio.c:37
#define GPIO_BUTTON
Linux GPIO number of start/stop button.
Definition: rl_deamon.c:8
Interrupt on falling edge.
Definition: gpio.h:35
int gpio_interrupt(int num, rl_edge edge)
Definition: gpio.c:92
GPIO read mode.
Definition: gpio.h:25
int gpio_wait_interrupt(int num, int timeout)
Definition: gpio.c:188
void interrupt_handler(int value)
Definition: rl_deamon.c:33
int gpio_dir(int num, rl_direction dir)
Definition: gpio.c:62
int gpio_setup(void)
Definition: rl_deamon.c:16