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