Hi Antti, On 08/02/14 12:07, Antti Seppälä wrote: > The encoding in rc5-sz first inserts a pulse and then simply utilizes the > generic Manchester encoder available in rc-core. > > Signed-off-by: Antti Seppälä <a.seppala@xxxxxxxxx> > --- > drivers/media/rc/ir-rc5-sz-decoder.c | 35 +++++++++++++++++++++++++++++++++++ > 1 file changed, 35 insertions(+) > > diff --git a/drivers/media/rc/ir-rc5-sz-decoder.c b/drivers/media/rc/ir-rc5-sz-decoder.c > index 984e5b9..0d5e552 100644 > --- a/drivers/media/rc/ir-rc5-sz-decoder.c > +++ b/drivers/media/rc/ir-rc5-sz-decoder.c > @@ -127,9 +127,44 @@ out: > return -EINVAL; > } > > +static struct ir_raw_timings_manchester ir_rc5_sz_timings = { > + .pulse_space_start = 0, > + .clock = RC5_UNIT, > +}; > + > +/* > + * ir_rc5_sz_encode() - Encode a scancode as a stream of raw events > + * > + * @protocols: allowed protocols > + * @scancode: scancode filter describing scancode (helps distinguish between > + * protocol subtypes when scancode is ambiguous) > + * @events: array of raw ir events to write into > + * @max: maximum size of @events > + * > + * This function returns -EINVAL if the scancode filter is invalid or matches > + * multiple scancodes. Otherwise the number of ir_raw_events generated is > + * returned. > + */ > +static int ir_rc5_sz_encode(u64 protocols, > + const struct rc_scancode_filter *scancode, > + struct ir_raw_event *events, unsigned int max) > +{ > + int ret; > + struct ir_raw_event *e = events; Probably worth checking scancode->mask == 0xfff too? > + > + /* RC5-SZ scancode is raw enough for manchester as it is */ > + ret = ir_raw_gen_manchester(&e, max, &ir_rc5_sz_timings, RC5_SZ_NBITS, > + scancode->data); > + if (ret < 0) > + return ret; I suspect it needs some more space at the end too, to be sure that no more bits afterwards are accepted. > + > + return e - events; > +} > + > static struct ir_raw_handler rc5_sz_handler = { > .protocols = RC_BIT_RC5_SZ, > .decode = ir_rc5_sz_decode, > + .encode = ir_rc5_sz_encode, > }; > > static int __init ir_rc5_sz_decode_init(void) > Cheers James -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html