6 #include <lib/base/init.h>
7 #include <lib/base/init_num.h>
8 #include <lib/base/eerror.h>
9 #include <lib/base/ebase.h>
10 #include <lib/driver/hdmi_cec.h>
12 eHdmiCEC *eHdmiCEC::instance = NULL;
18 hdmiFd = ::open("/dev/hdmi_cec", O_RDWR | O_NONBLOCK);
21 messageNotifier = eSocketNotifier::create(eApp, hdmiFd, eSocketNotifier::Read);
22 CONNECT(messageNotifier->activated, eHdmiCEC::hdmiEvent);
28 if (hdmiFd >= 0) ::close(hdmiFd);
31 eHdmiCEC *eHdmiCEC::getInstance()
36 void eHdmiCEC::hdmiEvent(int what)
38 struct cec_message message;
39 if (::read(hdmiFd, &message, 2) == 2)
41 if (::read(hdmiFd, &message.data, message.length) == message.length)
43 messageReceived(message.address, message.data[0]);
44 //eDebug("[HDMI-CEC] ******************* received from %02x command: %02x %02x %02x %02x", message.address, message.data[0], message.data[1], message.data[2], message.data[3]);
45 switch(message.data[0])
48 messageReceivedKey(message.address, message.data[1]);
51 messageReceivedKey(message.address, message.data[1]);
53 for future functions =)
55 messageReceivedKey(message.address, message.data[1]);
56 SecondmessageReceivedKey(message.address, message.data[2]);
64 void eHdmiCEC::sendMessage(unsigned char address, unsigned char length, char *data)
68 struct cec_message message;
69 message.address = address;
70 if (length > sizeof(message.data)) length = sizeof(message.data);
71 message.length = length;
72 memcpy(message.data, data, length);
73 ::write(hdmiFd, &message, 2 + length);
77 eAutoInitP0<eHdmiCEC> init_hdmicec(eAutoInitNumbers::rc, "Hdmi CEC driver");