Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
media
rc
rc-core-priv.h
Go to the documentation of this file.
1
/*
2
* Remote Controller core raw events header
3
*
4
* Copyright (C) 2010 by Mauro Carvalho Chehab <
[email protected]
>
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation version 2 of the License.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*/
15
16
#ifndef _RC_CORE_PRIV
17
#define _RC_CORE_PRIV
18
19
#include <linux/slab.h>
20
#include <
linux/spinlock.h
>
21
#include <
media/rc-core.h
>
22
23
struct
ir_raw_handler
{
24
struct
list_head
list
;
25
26
u64
protocols
;
/* which are handled by this handler */
27
int
(*
decode
)(
struct
rc_dev
*
dev
,
struct
ir_raw_event
event
);
28
29
/* These two should only be used by the lirc decoder */
30
int
(*
raw_register
)(
struct
rc_dev
*
dev
);
31
int
(*
raw_unregister
)(
struct
rc_dev
*
dev
);
32
};
33
34
struct
ir_raw_event_ctrl
{
35
struct
list_head
list
;
/* to keep track of raw clients */
36
struct
task_struct
*
thread
;
37
spinlock_t
lock
;
38
struct
kfifo_rec_ptr_1
kfifo
;
/* fifo for the pulse/space durations */
39
ktime_t
last_event
;
/* when last event occurred */
40
enum
raw_event_type
last_type
;
/* last event type */
41
struct
rc_dev
*
dev
;
/* pointer to the parent rc_dev */
42
u64
enabled_protocols
;
/* enabled raw protocol decoders */
43
44
/* raw decoder state follows */
45
struct
ir_raw_event
prev_ev
;
46
struct
ir_raw_event
this_ev
;
47
struct
nec_dec
{
48
int
state
;
49
unsigned
count
;
50
u32
bits
;
51
bool
is_nec_x
;
52
bool
necx_repeat
;
53
}
nec
;
54
struct
rc5_dec
{
55
int
state
;
56
u32
bits
;
57
unsigned
count
;
58
unsigned
wanted_bits
;
59
}
rc5
;
60
struct
rc6_dec
{
61
int
state
;
62
u8
header
;
63
u32
body
;
64
bool
toggle
;
65
unsigned
count
;
66
unsigned
wanted_bits
;
67
}
rc6
;
68
struct
sony_dec
{
69
int
state
;
70
u32
bits
;
71
unsigned
count
;
72
}
sony
;
73
struct
jvc_dec
{
74
int
state
;
75
u16
bits
;
76
u16
old_bits
;
77
unsigned
count
;
78
bool
first
;
79
bool
toggle
;
80
}
jvc
;
81
struct
rc5_sz_dec
{
82
int
state
;
83
u32
bits
;
84
unsigned
count
;
85
unsigned
wanted_bits
;
86
}
rc5_sz
;
87
struct
sanyo_dec
{
88
int
state
;
89
unsigned
count
;
90
u64
bits
;
91
}
sanyo
;
92
struct
mce_kbd_dec
{
93
struct
input_dev *
idev
;
94
struct
timer_list
rx_timeout
;
95
char
name
[64];
96
char
phys
[64];
97
int
state
;
98
u8
header
;
99
u32
body
;
100
unsigned
count
;
101
unsigned
wanted_bits
;
102
}
mce_kbd
;
103
struct
lirc_codec
{
104
struct
rc_dev
*
dev
;
105
struct
lirc_driver
*
drv
;
106
int
carrier_low
;
107
108
ktime_t
gap_start
;
109
u64
gap_duration
;
110
bool
gap
;
111
bool
send_timeout_reports
;
112
113
}
lirc
;
114
};
115
116
/* macros for IR decoders */
117
static
inline
bool
geq_margin(
unsigned
d1
,
unsigned
d2
,
unsigned
margin)
118
{
119
return
d1 > (d2 - margin);
120
}
121
122
static
inline
bool
eq_margin(
unsigned
d1
,
unsigned
d2
,
unsigned
margin)
123
{
124
return
((d1 > (d2 - margin)) && (d1 < (d2 + margin)));
125
}
126
127
static
inline
bool
is_transition(
struct
ir_raw_event
*
x
,
struct
ir_raw_event
*
y
)
128
{
129
return
x->
pulse
!= y->
pulse
;
130
}
131
132
static
inline
void
decrease_duration(
struct
ir_raw_event
*ev,
unsigned
duration
)
133
{
134
if
(duration > ev->
duration
)
135
ev->
duration
= 0;
136
else
137
ev->
duration
-=
duration
;
138
}
139
140
/* Returns true if event is normal pulse/space event */
141
static
inline
bool
is_timing_event(
struct
ir_raw_event
ev)
142
{
143
return
!ev.
carrier_report
&& !ev.
reset
;
144
}
145
146
#define TO_US(duration) DIV_ROUND_CLOSEST((duration), 1000)
147
#define TO_STR(is_pulse) ((is_pulse) ? "pulse" : "space")
148
149
/*
150
* Routines from rc-raw.c to be used internally and by decoders
151
*/
152
u64
ir_raw_get_allowed_protocols
(
void
);
153
int
ir_raw_event_register
(
struct
rc_dev
*
dev
);
154
void
ir_raw_event_unregister
(
struct
rc_dev
*
dev
);
155
int
ir_raw_handler_register
(
struct
ir_raw_handler
*
ir_raw_handler
);
156
void
ir_raw_handler_unregister
(
struct
ir_raw_handler
*
ir_raw_handler
);
157
void
ir_raw_init
(
void
);
158
159
/*
160
* Decoder initialization code
161
*
162
* Those load logic are called during ir-core init, and automatically
163
* loads the compiled decoders for their usage with IR raw events
164
*/
165
166
/* from ir-nec-decoder.c */
167
#ifdef CONFIG_IR_NEC_DECODER_MODULE
168
#define load_nec_decode() request_module("ir-nec-decoder")
169
#else
170
static
inline
void
load_nec_decode(
void
) { }
171
#endif
172
173
/* from ir-rc5-decoder.c */
174
#ifdef CONFIG_IR_RC5_DECODER_MODULE
175
#define load_rc5_decode() request_module("ir-rc5-decoder")
176
#else
177
static
inline
void
load_rc5_decode(
void
) { }
178
#endif
179
180
/* from ir-rc6-decoder.c */
181
#ifdef CONFIG_IR_RC6_DECODER_MODULE
182
#define load_rc6_decode() request_module("ir-rc6-decoder")
183
#else
184
static
inline
void
load_rc6_decode(
void
) { }
185
#endif
186
187
/* from ir-jvc-decoder.c */
188
#ifdef CONFIG_IR_JVC_DECODER_MODULE
189
#define load_jvc_decode() request_module("ir-jvc-decoder")
190
#else
191
static
inline
void
load_jvc_decode(
void
) { }
192
#endif
193
194
/* from ir-sony-decoder.c */
195
#ifdef CONFIG_IR_SONY_DECODER_MODULE
196
#define load_sony_decode() request_module("ir-sony-decoder")
197
#else
198
static
inline
void
load_sony_decode(
void
) { }
199
#endif
200
201
/* from ir-sanyo-decoder.c */
202
#ifdef CONFIG_IR_SANYO_DECODER_MODULE
203
#define load_sanyo_decode() request_module("ir-sanyo-decoder")
204
#else
205
static
inline
void
load_sanyo_decode(
void
) { }
206
#endif
207
208
/* from ir-mce_kbd-decoder.c */
209
#ifdef CONFIG_IR_MCE_KBD_DECODER_MODULE
210
#define load_mce_kbd_decode() request_module("ir-mce_kbd-decoder")
211
#else
212
static
inline
void
load_mce_kbd_decode(
void
) { }
213
#endif
214
215
/* from ir-lirc-codec.c */
216
#ifdef CONFIG_IR_LIRC_CODEC_MODULE
217
#define load_lirc_codec() request_module("ir-lirc-codec")
218
#else
219
static
inline
void
load_lirc_codec(
void
) { }
220
#endif
221
222
223
#endif
/* _RC_CORE_PRIV */
Generated on Thu Jan 10 2013 13:50:32 for Linux Kernel by
1.8.2