media: rc: do not remove first bit if leader pulse is present
The rc5 protocol does not have a leading pulse or space, but we encode the first bit using a single leading pulse. For other protocols, the leading pulse or space does not represent any bit. So, don't remove the first bit if a leading pulse is present. Cc: Antti Seppälä <a.seppala@gmail.com> Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
ddf9c1bb3d
commit
80008ddbed
|
@ -452,11 +452,11 @@ static int ir_mce_kbd_encode(enum rc_proto protocol, u32 scancode,
|
||||||
if (protocol == RC_PROTO_MCIR2_KBD) {
|
if (protocol == RC_PROTO_MCIR2_KBD) {
|
||||||
raw = scancode |
|
raw = scancode |
|
||||||
((u64)MCIR2_KEYBOARD_HEADER << MCIR2_KEYBOARD_NBITS);
|
((u64)MCIR2_KEYBOARD_HEADER << MCIR2_KEYBOARD_NBITS);
|
||||||
len = MCIR2_KEYBOARD_NBITS + MCIR2_HEADER_NBITS + 1;
|
len = MCIR2_KEYBOARD_NBITS + MCIR2_HEADER_NBITS;
|
||||||
} else {
|
} else {
|
||||||
raw = scancode |
|
raw = scancode |
|
||||||
((u64)MCIR2_MOUSE_HEADER << MCIR2_MOUSE_NBITS);
|
((u64)MCIR2_MOUSE_HEADER << MCIR2_MOUSE_NBITS);
|
||||||
len = MCIR2_MOUSE_NBITS + MCIR2_HEADER_NBITS + 1;
|
len = MCIR2_MOUSE_NBITS + MCIR2_HEADER_NBITS;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ir_raw_gen_manchester(&e, max, &ir_mce_kbd_timings, len, raw);
|
ret = ir_raw_gen_manchester(&e, max, &ir_mce_kbd_timings, len, raw);
|
||||||
|
|
|
@ -225,9 +225,9 @@ static int ir_rc5_encode(enum rc_proto protocol, u32 scancode,
|
||||||
/* encode data */
|
/* encode data */
|
||||||
data = !commandx << 12 | system << 6 | command;
|
data = !commandx << 12 | system << 6 | command;
|
||||||
|
|
||||||
/* Modulate the data */
|
/* First bit is encoded by leader_pulse */
|
||||||
ret = ir_raw_gen_manchester(&e, max, &ir_rc5_timings,
|
ret = ir_raw_gen_manchester(&e, max, &ir_rc5_timings,
|
||||||
RC5_NBITS, data);
|
RC5_NBITS - 1, data);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
} else if (protocol == RC_PROTO_RC5X_20) {
|
} else if (protocol == RC_PROTO_RC5X_20) {
|
||||||
|
@ -240,10 +240,11 @@ static int ir_rc5_encode(enum rc_proto protocol, u32 scancode,
|
||||||
/* encode data */
|
/* encode data */
|
||||||
data = commandx << 18 | system << 12 | command << 6 | xdata;
|
data = commandx << 18 | system << 12 | command << 6 | xdata;
|
||||||
|
|
||||||
/* Modulate the data */
|
/* First bit is encoded by leader_pulse */
|
||||||
pre_space_data = data >> (RC5X_NBITS - CHECK_RC5X_NBITS);
|
pre_space_data = data >> (RC5X_NBITS - CHECK_RC5X_NBITS);
|
||||||
ret = ir_raw_gen_manchester(&e, max, &ir_rc5x_timings[0],
|
ret = ir_raw_gen_manchester(&e, max, &ir_rc5x_timings[0],
|
||||||
CHECK_RC5X_NBITS, pre_space_data);
|
CHECK_RC5X_NBITS - 1,
|
||||||
|
pre_space_data);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
ret = ir_raw_gen_manchester(&e, max - (e - events),
|
ret = ir_raw_gen_manchester(&e, max - (e - events),
|
||||||
|
@ -254,8 +255,10 @@ static int ir_rc5_encode(enum rc_proto protocol, u32 scancode,
|
||||||
return ret;
|
return ret;
|
||||||
} else if (protocol == RC_PROTO_RC5_SZ) {
|
} else if (protocol == RC_PROTO_RC5_SZ) {
|
||||||
/* RC5-SZ scancode is raw enough for Manchester as it is */
|
/* RC5-SZ scancode is raw enough for Manchester as it is */
|
||||||
|
/* First bit is encoded by leader_pulse */
|
||||||
ret = ir_raw_gen_manchester(&e, max, &ir_rc5_sz_timings,
|
ret = ir_raw_gen_manchester(&e, max, &ir_rc5_sz_timings,
|
||||||
RC5_SZ_NBITS, scancode & 0x2fff);
|
RC5_SZ_NBITS - 1,
|
||||||
|
scancode & 0x2fff);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -327,7 +327,7 @@ static int ir_rc6_encode(enum rc_proto protocol, u32 scancode,
|
||||||
/* Modulate the header (Start Bit & Mode-0) */
|
/* Modulate the header (Start Bit & Mode-0) */
|
||||||
ret = ir_raw_gen_manchester(&e, max - (e - events),
|
ret = ir_raw_gen_manchester(&e, max - (e - events),
|
||||||
&ir_rc6_timings[0],
|
&ir_rc6_timings[0],
|
||||||
RC6_HEADER_NBITS + 1, (1 << 3));
|
RC6_HEADER_NBITS, (1 << 3));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -365,7 +365,7 @@ static int ir_rc6_encode(enum rc_proto protocol, u32 scancode,
|
||||||
/* Modulate the header (Start Bit & Header-version 6 */
|
/* Modulate the header (Start Bit & Header-version 6 */
|
||||||
ret = ir_raw_gen_manchester(&e, max - (e - events),
|
ret = ir_raw_gen_manchester(&e, max - (e - events),
|
||||||
&ir_rc6_timings[0],
|
&ir_rc6_timings[0],
|
||||||
RC6_HEADER_NBITS + 1, (1 << 3 | 6));
|
RC6_HEADER_NBITS, (1 << 3 | 6));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -256,7 +256,6 @@ int ir_raw_gen_manchester(struct ir_raw_event **ev, unsigned int max,
|
||||||
init_ir_raw_event_duration(++(*ev), 0,
|
init_ir_raw_event_duration(++(*ev), 0,
|
||||||
timings->leader_space);
|
timings->leader_space);
|
||||||
}
|
}
|
||||||
i >>= 1;
|
|
||||||
} else {
|
} else {
|
||||||
/* continue existing signal */
|
/* continue existing signal */
|
||||||
--(*ev);
|
--(*ev);
|
||||||
|
|
Loading…
Reference in New Issue