From 0b69bc17f90f165c148a2613a3fe1f0ab4f93bae Mon Sep 17 00:00:00 2001 From: TangoCash Date: Thu, 19 Oct 2017 21:39:55 +0200 Subject: [PATCH] armbox: improve cec --- libarmbox/video.cpp | 18 ++++++++++++++++-- libarmbox/video_lib.h | 5 ++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/libarmbox/video.cpp b/libarmbox/video.cpp index f5f0964..7e62f5b 100644 --- a/libarmbox/video.cpp +++ b/libarmbox/video.cpp @@ -161,6 +161,7 @@ cVideo::cVideo(int, void *, void *, unsigned int unit) } else devnum = unit; fd = -1; + hdmiFd = -1; standby_cec_activ = autoview_cec_activ = false; openDevice(); } @@ -815,9 +816,21 @@ bool cVideo::SetCECMode(VIDEO_HDMI_CEC_MODE _deviceType) physicalAddress[0] = 0x10; physicalAddress[1] = 0x00; logicalAddress = 1; - deviceType = 1; /* default: recorder */ + + if (_deviceType == VIDEO_HDMI_CEC_MODE_OFF) + { + if (hdmiFd >= 0) { + close hdmiFd; + hdmiFd = -1; + } + return false; + } + else + deviceType = _deviceType; + + if (hdmiFd == -1) + hdmiFd = open("/dev/cec0", O_RDWR | O_CLOEXEC); - hdmiFd = open("/dev/cec0", O_RDWR | O_CLOEXEC); if (hdmiFd >= 0) { __u32 monitor = CEC_MODE_INITIATOR | CEC_MODE_FOLLOWER; @@ -891,6 +904,7 @@ bool cVideo::SetCECMode(VIDEO_HDMI_CEC_MODE _deviceType) GetCECAddressInfo(); + return true; } void cVideo::GetCECAddressInfo() diff --git a/libarmbox/video_lib.h b/libarmbox/video_lib.h index 2090ab5..15224bc 100644 --- a/libarmbox/video_lib.h +++ b/libarmbox/video_lib.h @@ -118,11 +118,10 @@ typedef enum { VIDEO_STD_MAX = VIDEO_STD_AUTO } VIDEO_STD; -/* not used, for dummy functions */ typedef enum { VIDEO_HDMI_CEC_MODE_OFF = 0, - VIDEO_HDMI_CEC_MODE_TUNER, - VIDEO_HDMI_CEC_MODE_RECORDER + VIDEO_HDMI_CEC_MODE_TUNER = 3, + VIDEO_HDMI_CEC_MODE_RECORDER = 1 } VIDEO_HDMI_CEC_MODE; typedef enum