|
@@ -87,8 +87,6 @@ static int ir_nec_decode(struct rc_dev *dev, struct ir_raw_event ev)
|
|
|
data->state = STATE_BIT_PULSE;
|
|
|
return 0;
|
|
|
} else if (eq_margin(ev.duration, NEC_REPEAT_SPACE, NEC_UNIT / 2)) {
|
|
|
- rc_repeat(dev);
|
|
|
- IR_dprintk(1, "Repeat last key\n");
|
|
|
data->state = STATE_TRAILER_PULSE;
|
|
|
return 0;
|
|
|
}
|
|
@@ -151,19 +149,26 @@ static int ir_nec_decode(struct rc_dev *dev, struct ir_raw_event ev)
|
|
|
if (!geq_margin(ev.duration, NEC_TRAILER_SPACE, NEC_UNIT / 2))
|
|
|
break;
|
|
|
|
|
|
- address = bitrev8((data->bits >> 24) & 0xff);
|
|
|
- not_address = bitrev8((data->bits >> 16) & 0xff);
|
|
|
- command = bitrev8((data->bits >> 8) & 0xff);
|
|
|
- not_command = bitrev8((data->bits >> 0) & 0xff);
|
|
|
+ if (data->count == NEC_NBITS) {
|
|
|
+ address = bitrev8((data->bits >> 24) & 0xff);
|
|
|
+ not_address = bitrev8((data->bits >> 16) & 0xff);
|
|
|
+ command = bitrev8((data->bits >> 8) & 0xff);
|
|
|
+ not_command = bitrev8((data->bits >> 0) & 0xff);
|
|
|
+
|
|
|
+ scancode = ir_nec_bytes_to_scancode(address,
|
|
|
+ not_address,
|
|
|
+ command,
|
|
|
+ not_command,
|
|
|
+ &rc_proto);
|
|
|
|
|
|
- scancode = ir_nec_bytes_to_scancode(address, not_address,
|
|
|
- command, not_command,
|
|
|
- &rc_proto);
|
|
|
+ if (data->is_nec_x)
|
|
|
+ data->necx_repeat = true;
|
|
|
|
|
|
- if (data->is_nec_x)
|
|
|
- data->necx_repeat = true;
|
|
|
+ rc_keydown(dev, rc_proto, scancode, 0);
|
|
|
+ } else {
|
|
|
+ rc_repeat(dev);
|
|
|
+ }
|
|
|
|
|
|
- rc_keydown(dev, rc_proto, scancode, 0);
|
|
|
data->state = STATE_INACTIVE;
|
|
|
return 0;
|
|
|
}
|