LIRC libraries
Linux Infrared Remote Control
release.c
Go to the documentation of this file.
1 /****************************************************************************
2 ** release.c ***************************************************************
3 ****************************************************************************
4 *
5 * Copyright (C) 2007 Christoph Bartelmus (lirc@bartelmus.de)
6 *
7 */
8 
17 #ifdef HAVE_CONFIG_H
18 # include <config.h>
19 #endif
20 
21 #include <stdlib.h>
22 #include <stdio.h>
23 #include <sys/time.h>
24 
25 #ifdef HAVE_KERNEL_LIRC_H
26 #include <linux/lirc.h>
27 #else
28 #include "media/lirc.h"
29 #endif
30 
31 #include "lirc/release.h"
32 #include "lirc/receive.h"
33 #include "lirc/lirc_log.h"
34 
35 static const logchannel_t logchannel = LOG_LIB;
36 
37 static struct timeval release_time;
38 static struct ir_remote* release_remote;
39 static struct ir_ncode* release_ncode;
40 static ir_code release_code;
41 static int release_reps;
42 static lirc_t release_gap;
43 
44 static struct ir_remote* release_remote2;
45 static struct ir_ncode* release_ncode2;
46 static ir_code release_code2;
47 
48 static void register_input(void)
49 {
50  struct timeval gap;
51 
52  if (release_remote == NULL)
53  return;
54 
55  timerclear(&gap);
56  gap.tv_usec = release_gap;
57 
58  gettimeofday(&release_time, NULL);
59  timeradd(&release_time, &gap, &release_time);
60 }
61 
62 void register_button_press(struct ir_remote* remote,
63  struct ir_ncode* ncode,
64  ir_code code,
65  int reps)
66 {
67  if (reps == 0 && release_remote != NULL) {
68  release_remote2 = release_remote;
69  release_ncode2 = release_ncode;
70  release_code2 = release_code;
71  }
72 
73  release_remote = remote;
74  release_ncode = ncode;
75  release_code = code;
76  release_reps = reps;
77  /* some additional safety margin */
78  release_gap = upper_limit(remote,
80  - remote->min_gap_length)
81  + receive_timeout(upper_limit(remote,
82  remote->min_gap_length))
83  + 10000;
84  log_trace("release_gap: %lu", release_gap);
85  register_input();
86 }
87 
88 void get_release_data(const char** remote_name,
89  const char** button_name,
90  int* reps)
91 {
92  if (release_remote != NULL) {
93  *remote_name = release_remote->name;
94  *button_name = release_ncode->name;
95  *reps = release_reps;
96  } else {
97  *remote_name = *button_name = "(NULL)";
98  *reps = 0;
99  }
100 }
101 
102 
103 void get_release_time(struct timeval* tv)
104 {
105  *tv = release_time;
106 }
uint64_t ir_code
Denotes an internal coded representation for an IR transmission.
#define log_trace(fmt,...)
Log a trace message.
Definition: lirc_log.h:129
logchannel_t
Log channels used to filter messages.
Definition: lirc_log.h:53
void get_release_data(const char **remote_name, const char **button_name, int *reps)
Get data from saved from last call to register_button_press().
Definition: release.c:88
void register_button_press(struct ir_remote *remote, struct ir_ncode *ncode, ir_code code, int reps)
Set up pending events for given button, including the release_gap.
Definition: release.c:62
void get_release_time(struct timeval *tv)
Get time for last call to register_button_press() if defined, else a noop.
Definition: release.c:103
IR Command, corresponding to one (command defining) line of the configuration file.
char * name
Name of command.
One remote as represented in the configuration file.
lirc_t min_gap_length
how long is the shortest gap
const char * name
name of remote control
lirc_t max_total_signal_length
how long is the longest signal including gap