Lines Matching +full:scan +full:- +full:count

1 // SPDX-License-Identifier: GPL-2.0
2 // ir-nec-decoder.c - handle NEC IR Pulse/Space protocol
8 #include "rc-core-priv.h"
33 * ir_nec_decode() - Decode one NEC pulse or space
37 * This function returns -EINVAL if the pulse violates the state machine
41 struct nec_dec *data = &dev->raw->nec; in ir_nec_decode()
48 data->state = STATE_INACTIVE; in ir_nec_decode()
52 dev_dbg(&dev->dev, "NEC decode started at state %d (%uus %s)\n", in ir_nec_decode()
53 data->state, ev.duration, TO_STR(ev.pulse)); in ir_nec_decode()
55 switch (data->state) { in ir_nec_decode()
62 data->is_nec_x = false; in ir_nec_decode()
63 data->necx_repeat = false; in ir_nec_decode()
65 data->is_nec_x = true; in ir_nec_decode()
69 data->count = 0; in ir_nec_decode()
70 data->state = STATE_HEADER_SPACE; in ir_nec_decode()
78 data->state = STATE_BIT_PULSE; in ir_nec_decode()
81 data->state = STATE_TRAILER_PULSE; in ir_nec_decode()
94 data->state = STATE_BIT_SPACE; in ir_nec_decode()
101 if (data->necx_repeat && data->count == NECX_REPEAT_BITS && in ir_nec_decode()
103 dev_dbg(&dev->dev, "Repeat last key\n"); in ir_nec_decode()
105 data->state = STATE_INACTIVE; in ir_nec_decode()
107 } else if (data->count > NECX_REPEAT_BITS) in ir_nec_decode()
108 data->necx_repeat = false; in ir_nec_decode()
110 data->bits <<= 1; in ir_nec_decode()
112 data->bits |= 1; in ir_nec_decode()
115 data->count++; in ir_nec_decode()
117 if (data->count == NEC_NBITS) in ir_nec_decode()
118 data->state = STATE_TRAILER_PULSE; in ir_nec_decode()
120 data->state = STATE_BIT_PULSE; in ir_nec_decode()
131 data->state = STATE_TRAILER_SPACE; in ir_nec_decode()
141 if (data->count == NEC_NBITS) { in ir_nec_decode()
142 address = bitrev8((data->bits >> 24) & 0xff); in ir_nec_decode()
143 not_address = bitrev8((data->bits >> 16) & 0xff); in ir_nec_decode()
144 command = bitrev8((data->bits >> 8) & 0xff); in ir_nec_decode()
145 not_command = bitrev8((data->bits >> 0) & 0xff); in ir_nec_decode()
153 if (data->is_nec_x) in ir_nec_decode()
154 data->necx_repeat = true; in ir_nec_decode()
161 data->state = STATE_INACTIVE; in ir_nec_decode()
165 dev_dbg(&dev->dev, "NEC decode failed at count %d state %d (%uus %s)\n", in ir_nec_decode()
166 data->count, data->state, ev.duration, TO_STR(ev.pulse)); in ir_nec_decode()
167 data->state = STATE_INACTIVE; in ir_nec_decode()
168 return -EINVAL; in ir_nec_decode()
172 * ir_nec_scancode_to_raw() - encode an NEC scancode ready for modulation.
183 /* 32-bit NEC (used by Apple and TiVo remotes) */ in ir_nec_scancode_to_raw()
184 /* scan encoding: aaAAddDD */ in ir_nec_scancode_to_raw()
190 /* scan encoding AAaaDD */ in ir_nec_scancode_to_raw()
196 /* scan encoding: AADD */ in ir_nec_scancode_to_raw()
221 * ir_nec_encode() - Encode a scancode as a stream of raw events
229 * -ENOBUFS if there isn't enough space in the array to fit the
247 return e - events; in ir_nec_encode()