libcec, cecremote-plugin, Samsung, Raspberry, vendor buttons

VDR ja DVB aiheista keskustelua

libcec, cecremote-plugin, Samsung, Raspberry, vendor buttons

ViestiKirjoittaja kurg » 22.03.2016 12:54

Alkusanoiksi on todettava, että nyt ollaan syvällä erittäin spesiaalissa ongelmassa, johon on monta kiertokonstia. Jäi kuitenkin häiritsemään, kun ei homma toimi kuten haluaisin, joten päätin tutkia asiaa.

Ongelma:
Samsung television (Samsung P2370HD) kaukosäätimen (BN59-00865A) napit CH LIST ja RETURN eivät toimi kuin ensimmäisellä painalluskerralla, ellei välissä paina jotakin muuta nappia. Esimerkiksi VDR:n valikoiden syövereissä ollessani pääsen RETURN-napilla yhden valikon taaksepäin, mutta sen jälkeen on painettava esim. kerran DOWN, jotta pääsen RETURN:lla toisenkin valikkotason taaksepäin.

Mahdolliset vikapaikat:
-libcec
-cecremote-plugin
-Samsung TV
-Raspberry
-Broken by design, eli mikään ei olekkaan rikki, vaan homman ei kuulukkaan toimia kuten haluan
-Edellisten yhdistelmä

Olen kokeillut uusinta Jessie:n pakettihallinnasta saatavaa libcec:ä, kuin myös git:stä itse käännettyä uusinta versiota.

cec-client:n log oikein toimivasta OK-napista:
Koodi: Valitse kaikki
TRAFFIC: [           10072]     >> 01:44:00
DEBUG:   [           10072]     SetCurrentButton select (0) D:0ms cur:0
DEBUG:   [           10072]     key pressed: select (0) current(ff) duration(0)
DEBUG:   [           10072]     Changed key select (0) D:0ms cur:ff
DEBUG:   [           10072]     key pressed: select (0, 0)
DEBUG:   [           10072]     >> TV (0) -> Recorder 1 (1): user control pressed (44)
DEBUG:   [           10072]     making Recorder 1 (1) the active source
NOTICE:  [           10072]     >> source activated: Recorder 1 (1)
DEBUG:   [           10073]     CheckKeypressTimeout T:56810.755
DEBUG:   [           10073]     Key select: idle (duration:0) (0) timeout:1992128308ms (rel:499,rep:0,prs:499,rel:0)
TRAFFIC: [           10142]     >> 01:8b:00
DEBUG:   [           10142]     key released: select (0) D:70ms
DEBUG:   [           10142]     >> TV (0) -> Recorder 1 (1): vendor remote button up (8B)


cec-client:n log ongelmallisesta RETURN-napista ("vendor remote button", "AN_RETURN"):
Koodi: Valitse kaikki
TRAFFIC: [           14886]     >> 01:8a:91
DEBUG:   [           14886]     key pressed: return (Samsung) (91) current(ff) duration(500)
DEBUG:   [           14886]     Changed key return (Samsung) (91) D:500ms cur:ff
DEBUG:   [           14886]     key pressed: return (Samsung) (91, 500)
DEBUG:   [           14886]     >> TV (0) -> Recorder 1 (1): vendor remote button down (8A)
TRAFFIC: [           14955]     >> 01:8b:00
DEBUG:   [           14956]     >> TV (0) -> Recorder 1 (1): vendor remote button up (8B)


Kuten logista käy ilmi, "vendor remote button"-nappeja käsitellään jotenkin eri tavalla kuin muita nappeja. Arvaukseni on, että cecremote-plugin ei totea koskaan sitä, että nappi on nostettu ylös, eikä näin ollen suostu tottelemaan nappia toista kertaa peräkkäin.
(lisähuomio: tämä kyseinen Samsung tuntuu lähettävän hiukan epäloogisesti kaikkien, myös muiden kuin "vendor remote button"-nappien kohdalla ylöspäästöstä "Vendor Remote Button Up"-eventin)

Tästä tuli mieleen ajatus, että saisiko "vendor remote button"-napit käyttäytymään kuten tavalliset napit. Tämä johti epätyylikkääseen korjaukseen, joka saattaa olla vian korjaamista toisella vialla.
/usr/local/src/libcec/src/libcec/implementations/CECCommandHandler.cpp:
Koodi: Valitse kaikki
  case CEC_OPCODE_USER_CONTROL_PRESSED:
  case CEC_OPCODE_VENDOR_REMOTE_BUTTON_DOWN: //!!!
    iHandled = HandleUserControlPressed(command);
    break;
  case CEC_OPCODE_USER_CONTROL_RELEASE:
  case CEC_OPCODE_VENDOR_REMOTE_BUTTON_UP: //!!!
    iHandled = HandleUserControlRelease(command);
    break;

Koodi: Valitse kaikki
/*  case CEC_OPCODE_VENDOR_REMOTE_BUTTON_DOWN:
    iHandled = HandleVendorRemoteButtonDown(command);
    break;
  case CEC_OPCODE_VENDOR_REMOTE_BUTTON_UP:
    iHandled = HandleVendorRemoteButtonUp(command);
    break;*/


Ohjeet libcec:n sorsien hakuun ja kääntöön täältä:
https://github.com/Pulse-Eight/libcec

Yritin tarkistaa, että kyseisten vendor-nappien command:t (AN_RETURN 0x91 ja AN_CHANNELS_LIST 0x96) eivät ole päällekkäin muiden tunnettujen nappien kanssa. Muokkauksen jälkeen sekä AN_RETURN että AN_CHANNELS_LIST -napit näkyvät logeissa kuten tavallisetkin napit ja lisäksi ne toimivat VDR:ssä toistuvastikkin painettuna.

CEC-kehyksien kääntämistä selkokielelle ja toisinpäin:
http://www.cec-o-matic.com/
kurg
Vanhempi asiantuntija
 
Viestit: 175
Liittynyt: 13.04.2006 17:17

Paluu VDR & DVB

Paikallaolijat

Käyttäjiä lukemassa tätä aluetta: Ei rekisteröityneitä käyttäjiä ja 3 vierailijaa

cron