[cecd-devel] [PATCH 4/6] [libcec] check unicast/broadcast flag with destination address
Status: Beta
Brought to you by:
pbatard
|
From: Florian F. <f.f...@gm...> - 2011-12-30 14:11:45
|
HDMI CEC Compliance Testing Specification imposes a device not to answer to:
- messages received as broadcast while they are supposed to be directed
- messages received as directed with a broadcast address
in such a case return LIBCEC_ERROR_OTHER
---
libcec/decoder.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/libcec/decoder.c b/libcec/decoder.c
index 37764c2..2181310 100644
--- a/libcec/decoder.c
+++ b/libcec/decoder.c
@@ -210,6 +210,17 @@ int libcec_decode_message(uint8_t* message, size_t length)
return LIBCEC_ERROR_NOT_SUPPORTED;
}
+ // Broadcasted messages received as directed messages
+ if ((dst == 0x0F) && ((msg_props[message[1]] & 0x40) == 0)) {
+ ceci_warn("broadcast message received as directed: %02X", message[1]);
+ return LIBCEC_ERROR_OTHER;
+ }
+
+ if ((dst != 0x0F) && ((msg_props[message[1]] & 0x20) == 0)) {
+ ceci_warn("directed message received as broadcast: %02X", message[1]);
+ return LIBCEC_ERROR_OTHER;
+ }
+
if ( (length-2 < msg_min_max[msg_props[message[1]]&0x1F][0])
|| (length-2 > msg_min_max[msg_props[message[1]]&0x1F][1]) ) {
ceci_warn("invalid payload length for opcode: %02X", message[1]);
--
1.7.5.4
|