LIRC libraries
LinuxInfraredRemoteControl
 All Classes Files Functions Variables Typedefs Enumerations Macros Modules Pages
ir_remote_types.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** ir_remote_types.h *******************************************************
3 ****************************************************************************
4 *
5 * ir_remote_types.h - describes and decodes the signals from IR remotes
6 *
7 * Copyright (C) 1996,97 Ralph Metzler <rjkm@thp.uni-koeln.de>
8 * Copyright (C) 1998 Christoph Bartelmus <lirc@bartelmus.de>
9 *
10 */
11 
19 #ifndef IR_REMOTE_TYPES_H
20 #define IR_REMOTE_TYPES_H
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #include <stdint.h>
27 
28 #include <sys/time.h>
29 #include <unistd.h>
30 #include <string.h>
31 #include <math.h>
32 #include <stdlib.h>
33 #if defined(__linux__)
34 #include <linux/types.h>
35 #endif
36 
37 #ifdef HAVE_KERNEL_LIRC_H
38 #include <linux/lirc.h>
39 #else
40 #include "media/lirc.h"
41 #endif
42 
47 typedef uint64_t ir_code;
48 
53 struct ir_code_node {
54  ir_code code;
55  struct ir_code_node* next;
56 };
57 
64 struct ir_ncode {
66  char* name;
67 
69  ir_code code;
70 
72  int length;
73 
75  lirc_t* signals;
76 
79  struct ir_code_node* next;
80 
84 
87 
90 };
91 
92 /*
93  * struct ir_remote
94  * defines the encoding of a remote control
95  */
96 
97 /* definitions for flags */
98 
99 #define IR_PROTOCOL_MASK 0x07ff
100 
101 /* protocols: must not be combined */
102 /* Don't forget to take a look at config_file.h when adding new flags */
103 
104 #define RAW_CODES 0x0001
105 #define RC5 0x0002
106 #define SHIFT_ENC RC5
107 /* Hm, RC6 protocols seem to have changed the biphase semantics so
108  * that lircd will calculate the bit-wise complement of the codes. But
109  * this is only a guess as I did not have a datasheet... */
110 
111 #define RC6 0x0004
112 #define RCMM 0x0008
113 #define SPACE_ENC 0x0010
114 #define SPACE_FIRST 0x0020
115 #define GOLDSTAR 0x0040
116 #define GRUNDIG 0x0080
117 #define BO 0x0100
118 #define SERIAL 0x0200
119 #define XMP 0x0400
121 /* additinal flags: can be orred together with protocol flag */
122 #define REVERSE 0x0800
123 #define NO_HEAD_REP 0x1000
124 #define NO_FOOT_REP 0x2000
125 #define CONST_LENGTH 0x4000
126 #define REPEAT_HEADER 0x8000
128 #define COMPAT_REVERSE 0x00010000
133 #define REPEAT_MAX_DEFAULT 600
134 
135 #define DEFAULT_FREQ 38000
136 
137 #define IR_PARITY_NONE 0
138 #define IR_PARITY_EVEN 1
139 #define IR_PARITY_ODD 2
140 
142 struct decode_ctx_t {
143  ir_code code;
144  ir_code pre;
145  ir_code post;
149 };
150 
151 
155 struct ir_remote {
156  const char* name;
157  const char* driver;
158  struct ir_ncode* codes;
159  int bits;
160  int flags;
161  int eps;
162  unsigned int aeps;
169  int dyncode;
170  struct ir_ncode dyncodes[2];
172  /* pulse and space lengths of: */
173 
174  lirc_t phead, shead;
175  lirc_t pthree, sthree;
176  lirc_t ptwo, stwo;
177  lirc_t pone, sone;
178  lirc_t pzero, szero;
179  lirc_t plead;
180  lirc_t ptrail;
181  lirc_t pfoot, sfoot;
182  lirc_t prepeat, srepeat;
185  ir_code pre_data;
187  ir_code post_data;
188  lirc_t pre_p, pre_s;
189  lirc_t post_p, post_s;
191  uint32_t gap;
192  uint32_t gap2;
193  uint32_t repeat_gap;
195  ir_code toggle_bit_mask;
207  unsigned int min_code_repeat;
208  unsigned int freq;
209  unsigned int duty_cycle;
210  ir_code toggle_mask;
211  ir_code rc6_mask;
213  /* serial protocols */
214  unsigned int baud;
215  unsigned int bits_in_byte;
216  unsigned int parity;
217  unsigned int stop_bits;
221  ir_code ignore_mask;
222  ir_code repeat_mask;
223  /* end of user editable values */
224 
225  ir_code toggle_bit_mask_state;
226  int toggle_mask_state;
227  int repeat_countdown;
228  struct ir_ncode* last_code;
230  int reps;
231  struct timeval last_send;
237  lirc_t min_gap_length;
238  lirc_t max_gap_length;
239  lirc_t min_pulse_length, max_pulse_length;
240  lirc_t min_space_length, max_space_length;
243  struct ir_remote* next;
244 };
245 
246 #ifdef __cplusplus
247 }
248 #endif
249 
250 #endif
lirc_t min_remaining_gap
remember gap for CONST_LENGTH remotes
One remote as represented in the configuration file.
int bits
bits (length of code)
lirc_t min_total_signal_length
how long is the shortest signal including gap
An ir_code for entering into (singly) linked lists, i.e.
unsigned int freq
modulation frequency
lirc_t max_gap_length
how long is the longest gap
lirc_t max_total_signal_length
how long is the longest signal including gap
ir_code post_data
data which the remote sends after actual keycode
lirc_t post_s
signal between keycode and post_code
lirc_t plead
leading pulse
ir_code repeat_mask
mask defines which bits are inverted for repeats
struct ir_ncode * toggle_code
toggle code received or sent last
struct ir_code_node * next
Linked list of the subsequent ir_code's, after the first one.
unsigned int baud
can be overridden by [p|s]zero, [p|s]one
const char * name
name of remote control
lirc_t * signals
(private)
int eps
eps (relative tolerance)
struct ir_ncode * last_code
code received or sent last
unsigned int parity
currently unsupported
ir_code pre
pre data, before code.
lirc_t sfoot
foot
lirc_t ptrail
trailing pulse
int pre_data_bits
length of pre_data
lirc_t min_gap_length
how long is the shortest gap
int manual_sort
If set in any remote, disables automatic sorting.
char * name
Name of command.
struct timeval last_send
time last_code was received or sent
struct ir_code_node * current
Should point at the ir_code currently being transmitted, or NULL if none.
unsigned int duty_cycle
int post_data_bits
length of post_data
lirc_t sthree
3 (only used for RC-MM)
ir_code toggle_mask
Sharp (?) error detection scheme.
ir_code pre_data
data which the remote sends before actual keycode
ir_code post
post data, sent after code.
uint32_t gap
time between signals in usecs
lirc_t sone
1
char * dyncodes_name
name for unknown buttons
uint32_t repeat_gap
time between two repeat codes if different from gap
lirc_t shead
header
lirc_t max_remaining_gap
Estimated max time of trailing gap.
ir_code code
Code part, matched to code defintion.
uint32_t gap2
time between signals in usecs
unsigned int stop_bits
mapping: 1->2 1.5->3 2->4
lirc_t pre_s
signal between pre_data and keycode
lirc_t szero
0
int dyncode
last received code
IR Command, corresponding to one (command defining) line of the configuration file.
lirc_t stwo
2 (only used for RC-MM)
int flags
flags
unsigned int aeps
detecting very short pulses is difficult with relative tolerance for some remotes, this is an absolute tolerance to solve this problem usually you can say 0 here.
lirc_t srepeat
indicate repeating
State describing code, pre, post + gap and repeat state.
int release_detected
set by release generator
lirc_t min_remaining_gap
Estimated min time of trailing gap.
struct ir_code_node * transmit_state
(private)
lirc_t max_remaining_gap
gap range
int suppress_repeat
suppress unwanted repeats
ir_code code
The first code of the command.
int toggle_bit
obsolete
const char * driver
Name of driver for LIRCCODE cases.
struct ir_ncode * next_ncode
Next code in recorded buttons list.
unsigned int min_code_repeat
meaningful only if remote sends a repeat code: in this case this value indicates how often the real c...
struct ir_ncode dyncodes[2]
helper structs for unknown buttons
ir_code rc6_mask
RC-6 doubles signal length of some bits.
int repeat_flag
True if code is a repeated one.
ir_code toggle_bit_mask
previously only one bit called toggle_bit
int min_repeat
code is repeated at least x times code sent once -> min_repeat=0
ir_code ignore_mask
mask defines which bits can be ignored when matching a code
uint64_t ir_code
Denotes an internal coded representation for an IR transmission.
unsigned int bits_in_byte
default: 8
int length
(private)