• Jarod Wilson's avatar
    [media] rc: call input_sync after scancode reports · 98c32bcd
    Jarod Wilson authored
    Due to commit cdda911c, evdev only
    becomes readable when the buffer contains an EV_SYN/SYN_REPORT event. If
    we get a repeat or a scancode we don't have a mapping for, we never call
    input_sync, and thus those events don't get reported in a timely
    fashion.
    
    For example, take an mceusb transceiver with a default rc6 keymap. Press
    buttons on an rc5 remote while monitoring with ir-keytable, and you'll
    see nothing. Now press a button on the rc6 remote matching the keymap.
    You'll suddenly get the rc5 key scancodes, the rc6 scancode and the rc6
    key spit out all at the same time.
    
    Pressing and holding a button on a remote we do have a keymap for also
    works rather unreliably right now, due to repeat events also happening
    without a call to input_sync (we bail from ir_do_keydown before getting
    to the point where it calls input_sync).
    
    Easy fix though, just add two strategically placed input_sync calls
    right after our input_event calls for EV_MSC, and all is well again.
    Technically, we probably should have been doing this all along, its just
    that it never caused any functional difference until the referenced
    change went into the input layer.
    
    input_sync once per IR signal. There was another hidden bug in the code
    where we were calling input_report_key using last_keycode instead of our
    just discovered keycode, which manifested with the reordering of calling
    input_report_key and setting last_keycode.
    Reported-by: default avatarStephan Raue <sraue@openelec.tv>
    CC: Stephan Raue <sraue@openelec.tv>
    CC: Mauro Carvalho Chehab <mchehab@redhat.com>
    CC: Jeff Brown <jeffbrown@android.com>
    Acked-by: default avatarDmitry Torokhov <dtor@mail.ru>
    Signed-off-by: default avatarJarod Wilson <jarod@redhat.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    98c32bcd
rc-main.c 30.4 KB