Mike,
How important is the EDID communication beyond resolving our device ID? Looks like the rainshadowtech guy just polls the bus for a free ID and takes it, and the tv (sink) is typically device ID 0x00. As I understand it EDID is done over the DDC channel which is regular i2c, so in theory it shouldn't be too hard to properly resolve device ID etc.
My goal for CEC is to implement CEC functionality for an hdmi connected computer (HTPC) which itself doesn't support CEC. Therefore, the easiest thing for me is to find out the computer's physical address and act appropriately.
As far as tapping into the CEC bus, there are two approaches:
- Function as a node, hdmi cable from our device to tv/etc
- Hijack the CEC pins between two connected devices and pass everything else through.
Acting as a full node would also mean implementing DDC/EDID for our device. This would give it a physical address as a node but becomes much more complex.
I have a elbow HDMI connector (male and female connectors on it). I plan on cracking the case, tapping CEC and CEC/Ground and allowing all else to pass through unmolested. That shouldn't affect the TMDS signaling (I hope!).
The first is probably better, less wiring involved and I imagine the tolerances are much stricter for the TMDS signals. This ties up an HDMI port, but they seem plentiful on most equipment these days.
Table 4-27 indicates it is allowable for a root device to implement a separate CEC line for each hdmi input, although this is discouraged. This is probably not likely implemented.
As for communication, plugging into a device should expose the handshake responses. From what I've read, CEC is based on AVLink, each vendor has their own command set, not interoperable, though there was some initiative announced recently the define basic standards. I haven't seen much info on any vendors commands yet, mostly just focusing on the initial hurdle of being able to send and receive bytes to a device. I have a samsung tv myself. I'll start collecting whatever info I can find on the Bravia and AnyNet dialects.
I'm not familiar with AVLink, but hdmi 1.3a supports a wide range of standardized opcodes as well as options for vendor specific codes. That being said, my LG tv won't talk to my Sony bluray. Unfortunately, without two LG devices and two Sony devices, I probably won't be able to determine any vendor specific opcodes for these devices. My concern is that a device will ignore opcodes from another device that doesn't have a matching vendor id.
Looks like a fully Arduino based implementation is the way to go.
Anyone recommend an easy to work with hdmi jack? I'll have to look through the Mouser catalog this evening and see what they've got.
I agree. I'm going to breadboard a circuit today and try hooking it up with the purpose of strictly monitoring CEC traffic and start looking into decoding it. I've read through the wire protocol and it shouldn't be too hard to implement.