1d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin/* 2d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* Copyright (c) 2014 The Linux Foundation. All rights reserved. 3d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* 4d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* Redistribution and use in source and binary forms, with or without 5d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* modification, are permitted provided that the following conditions are 6d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* met: 7d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* * Redistributions of source code must retain the above copyright 8d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* notice, this list of conditions and the following disclaimer. 9d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* * Redistributions in binary form must reproduce the above 10d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* copyright notice, this list of conditions and the following 11d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* disclaimer in the documentation and/or other materials provided 12d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* with the distribution. 13d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* * Neither the name of The Linux Foundation. nor the names of its 14d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* contributors may be used to endorse or promote products derived 15d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* from this software without specific prior written permission. 16d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* 17d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin*/ 29d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#ifndef QHDMI_CEC_H 30d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#define QHDMI_CEC_H 31d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin 32d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#include <hardware/hdmi_cec.h> 33d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#include <utils/RefBase.h> 34d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin 35d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinnamespace qClient { 36d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin class QHDMIClient; 37d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin}; 38d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin 39d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinnamespace qhdmicec { 40d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin 41d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#define SYSFS_BASE "/sys/class/graphics/fb" 42d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#define MAX_PATH_LENGTH 128 43d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin 44d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinstruct cec_callback_t { 45d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin // Function in HDMI service to call back on CEC messages 46d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin event_callback_t callback_func; 47d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin // This stores the object to pass back to the framework 48d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin void* callback_arg; 49d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin 50d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin}; 51d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin 52d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinstruct cec_context_t { 53d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin hdmi_cec_device_t device; // Device for HW module 54d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin cec_callback_t callback; // Struct storing callback object 55d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin bool enabled; 56d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin bool arc_enabled; 57d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin bool system_control; // If true, HAL/driver handle CEC messages 58d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin int fb_num; // Framebuffer node for HDMI 59d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin char fb_sysfs_path[MAX_PATH_LENGTH]; 60d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin hdmi_port_info *port_info; // HDMI port info 61d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin 62d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin // Logical address is stored in an array, the index of the array is the 63d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin // logical address and the value in the index shows whether it is set or not 64d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin int logical_address[CEC_ADDR_BROADCAST]; 65d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin int version; 66d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin uint32_t vendor_id; 67d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin android::sp<qClient::QHDMIClient> disp_client; 68d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin}; 69d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin 70d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinvoid cec_receive_message(cec_context_t *ctx, char *msg, ssize_t len); 71d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinvoid cec_hdmi_hotplug(cec_context_t *ctx, int connected); 72d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin 73d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin}; //namespace 74d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#endif /* end of include guard: QHDMI_CEC_H */ 75