Ich habe mir nun mal einen kleinen Versuchsaufbau mit einem Arduino und
dem Interface aus der Library https://github.com/floe/CEC gemacht und
die CEC-Leitung vom HDMI-Kabel welches TV und MR verbindet parallel
angezapft. Ich will ja erstmal nur mithören.
Dann habe ich die Beispieldatei
https://github.com/floe/CEC/blob/master/examples/CEC/CEC.ino auf den
Arduino geflashed und das ganze mal in Betrieb genommen und geschaut was
es so hergibt.
Nach dem verbinden des Arduino mit dem "Seriellen Monitor" der
ArduinoIDE kommt erstmal:
1 | Logical address assigned: 4
|
2 | Device ready
|
TV und MR befanden sich dabei im Standby.
Als erstes habe ich den MR eingeschaltet und dies ergab folgenden
output:
1 | Packet received at 8449: 00 -> 15: 0F:87:00:E0:91
|
2 | Packet received at 8958: 00 -> 15: 0F:87:00:E0:91
|
3 | Packet received at 9094: 00 -> 15: 0F:87:00:E0:91
|
4 | Packet received at 9228: 00 -> 15: 0F:87:00:E0:91
|
5 | Packet received at 18463: 00 -> 15: 0F:87:00:E0:91
|
6 | Packet received at 18972: 00 -> 15: 0F:87:00:E0:91
|
7 | Packet received at 19107: 00 -> 15: 0F:87:00:E0:91
|
8 | Packet received at 19241: 00 -> 15: 0F:87:00:E0:91
|
9 | Packet received at 25000: 03 -> 15: 3F:82:10:00
|
10 | Packet received at 26003: 03 -> 15: 3F:82:10:00
|
11 | Packet received at 26385: 03 -> 15: 3F:84:10:00:03
|
12 | Packet received at 27003: 03 -> 15: 3F:82:10:00
|
13 | Packet received at 29006: 03 -> 15: 3F:82:10:00
|
14 | Packet received at 31009: 03 -> 15: 3F:82:00:00
|
15 | Packet received at 32751: 03 -> 15: 3F:84:10:00:03
|
16 | Packet received at 33012: 03 -> 15: 3F:82:10:00
|
17 | Packet received at 33820: 00 -> 15: 0F:87:00:E0:91
|
18 | Packet received at 33975: 00 -> 15: 0F:87:00:E0:91
|
19 | Packet received at 34110: 00 -> 15: 0F:87:00:E0:91
|
20 | Packet received at 34244: 00 -> 15: 0F:87:00:E0:91
|
21 | Packet received at 34379: 00 -> 15: 0F:87:00:E0:91
|
22 | Packet received at 34580: 03 -> 15: 3F:84:10:00:03
|
23 | Packet received at 34812: 03 -> 15: 3F:84:10:00:03
|
24 | Packet received at 35098: 03 -> 15: 3F:82:10:00
|
25 | report VendorID
|
26 | Transmit: 1
|
27 | Packet received at 36026: 03 -> 15: 3F:84:10:00:03
|
28 | Packet received at 36165: 00 -> 15: 0F:87:00:E0:91
|
29 | Packet received at 36300: 00 -> 15: 0F:87:00:E0:91
|
30 | Packet received at 36435: 00 -> 15: 0F:87:00:E0:91
|
31 | Packet received at 36570: 00 -> 15: 0F:87:00:E0:91
|
32 | Packet received at 36705: 00 -> 15: 0F:87:00:E0:91
|
33 | Packet received at 37023: 00 -> 15: 0F:87:00:E0:91
|
34 | Packet received at 37158: 00 -> 15: 0F:87:00:E0:91
|
35 | Packet received at 37293: 00 -> 15: 0F:87:00:E0:91
|
36 | 0x387: Line Error!
|
37 | report VendorID
|
38 | Transmit: 1
|
39 | Packet received at 38681: 00 -> 15: 0F:85
|
40 | Packet received at 38794: 03 -> 15: 3F:82:10:00
|
41 | Packet received at 38860: 00 -> 15: 0F:85
|
42 | Packet received at 38973: 03 -> 15: 3F:82:10:00
|
43 | Packet received at 39041: 00 -> 15: 0F:85
|
44 | Packet received at 39153: 03 -> 15: 3F:82:10:00
|
45 | Packet received at 39220: 00 -> 15: 0F:85
|
46 | Packet received at 39332: 03 -> 15: 3F:82:10:00
|
47 | Packet received at 39399: 00 -> 15: 0F:85
|
48 | Packet received at 39512: 03 -> 15: 3F:82:10:00
|
49 | Packet received at 39651: 00 -> 15: 0F:87:00:E0:91
|
50 | Packet received at 39786: 00 -> 15: 0F:87:00:E0:91
|
51 | Packet received at 39920: 00 -> 15: 0F:87:00:E0:91
|
52 | Packet received at 40055: 00 -> 15: 0F:87:00:E0:91
|
53 | Packet received at 40190: 00 -> 15: 0F:87:00:E0:91
|
54 | report VendorID
|
55 | Transmit: 1
|
56 | Packet received at 54473: 00 -> 15: 0F:87:00:E0:91
|
57 | Packet received at 54608: 00 -> 15: 0F:87:00:E0:91
|
58 | Packet received at 54743: 00 -> 15: 0F:87:00:E0:91
|
59 | Packet received at 54878: 00 -> 15: 0F:87:00:E0:91
|
60 | report VendorID
|
61 | Transmit: 1
|
Nach dem aktivieren des MR aktiviert sich auch kurz drauf der TV. Man
kann es ganz gut nachvollziehen. Auf ID-0 vermute ich den Fernseher, auf
ID-3 den MR und ID-15 (0x0F) ist wohl ein Broadcast. Das CEC-Arduino
Interface selbst hat sich wohl als ID-4 registriert.
Mit dem https://www.cec-o-matic.com/index.php habe ich mal versucht den
Inhalt der Datenpakete zu analysieren:
1 | Packet received at 19241: 00 -> 15: 0F:87:00:E0:91
|
Das erste Byte der Message enthält im oberen Nibble die Source und im
unteren die Target-ID.
Das zweite Byte ist die Message-ID, in dem Fall 0x87 und laut O-Matic
"Reports the Vendor ID of this device (Broadcast)".
Die restlichen Bytes sind dann Payload. In dem Fall ist die Vendor-ID
vom Device mit der ID-0 (TV) 0x00E091 (= 57489 dezimal). Vermutlich gibt
es irgendwo im Netz auch eine Liste wer sich dahinter verbirgt. Ich
würde jetzt mal tippen "LG" ;-)
Dieses Paket ist also für das ein/ausschalten nicht von Bedeutung, aber
das nächste:
1 | Packet received at 25000: 03 -> 15: 3F:82:10:00
|
Das geht vom MR als Broadcast raus und die Message-ID 0x82 besagt "Used
by a new source to indicate that it has started to transmit a stream OR
used in response to a "Request Active Source" (Brodcast). This message
is used in several features : One Touch Play,Routing Control"
Der MR zeigt damit also an das er ein Signal sendet und darum bittet
dieses darzustellen.
Danach wiederholt sich alles irgendwie nur und scheint nicht mehr
relevant zu sein. Meine Vermutung ist, das der TV diese
Sendebereitschaft des MR erkennt, sich daraufhin einschaltet und den
HDMI1 als Quelle auswählt.
Schalte ich den MR aus, kommt:
1 | standby
|
2 | standby
|
3 | standby
|
4 | standby
|
5 | standby
|
Was sehr wahrscheinlich den MR dazu bewegt selbst in den Standby zu
gehen.
ABER, schalte ich den MR aus (TV ist noch an), dann tut sich auf der CEC
genau NICHTS!! Es wird keine Nachricht gesendet. Das ist dann der Grund
warum der TV nicht mit ausgeht. Und das obwohl in den Einstellungen ganz
klar die Rede von "Ein/Ausschalten" über CEC ist.
Ich würde jetzt mal versuchen einen Sketch zu bauen bei dem ich über
einen Taster am Arduino ein "Standby" Signal vom MR simulieren kann um
zu sehen ob der TV darauf richtig reagieren würde.