1*4d7e907cSAndroid Build Coastguard Worker/* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker * 8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker * 10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard Workerpackage [email protected]; 18*4d7e907cSAndroid Build Coastguard Worker 19*4d7e907cSAndroid Build Coastguard Workerimport IHdmiCecCallback; 20*4d7e907cSAndroid Build Coastguard Worker 21*4d7e907cSAndroid Build Coastguard Worker/** 22*4d7e907cSAndroid Build Coastguard Worker * HDMI-CEC HAL interface definition. 23*4d7e907cSAndroid Build Coastguard Worker */ 24*4d7e907cSAndroid Build Coastguard Workerinterface IHdmiCec { 25*4d7e907cSAndroid Build Coastguard Worker /** 26*4d7e907cSAndroid Build Coastguard Worker * Passes the logical address that must be used in this system. 27*4d7e907cSAndroid Build Coastguard Worker * 28*4d7e907cSAndroid Build Coastguard Worker * HAL must use it to configure the hardware so that the CEC commands 29*4d7e907cSAndroid Build Coastguard Worker * addressed the given logical address can be filtered in. This method must 30*4d7e907cSAndroid Build Coastguard Worker * be able to be called as many times as necessary in order to support 31*4d7e907cSAndroid Build Coastguard Worker * multiple logical devices. 32*4d7e907cSAndroid Build Coastguard Worker * 33*4d7e907cSAndroid Build Coastguard Worker * @param addr Logical address that must be used in this system. It must be 34*4d7e907cSAndroid Build Coastguard Worker * in the range of valid logical addresses for the call to succeed. 35*4d7e907cSAndroid Build Coastguard Worker * @return result Result status of the operation. SUCCESS if successful, 36*4d7e907cSAndroid Build Coastguard Worker * FAILURE_INVALID_ARGS if the given logical address is invalid, 37*4d7e907cSAndroid Build Coastguard Worker * FAILURE_BUSY if device or resource is busy 38*4d7e907cSAndroid Build Coastguard Worker */ 39*4d7e907cSAndroid Build Coastguard Worker @callflow(next={"*"}) 40*4d7e907cSAndroid Build Coastguard Worker addLogicalAddress(CecLogicalAddress addr) generates (Result result); 41*4d7e907cSAndroid Build Coastguard Worker 42*4d7e907cSAndroid Build Coastguard Worker /** 43*4d7e907cSAndroid Build Coastguard Worker * Clears all the logical addresses. 44*4d7e907cSAndroid Build Coastguard Worker * 45*4d7e907cSAndroid Build Coastguard Worker * It is used when the system doesn't need to process CEC command any more, 46*4d7e907cSAndroid Build Coastguard Worker * hence to tell HAL to stop receiving commands from the CEC bus, and change 47*4d7e907cSAndroid Build Coastguard Worker * the state back to the beginning. 48*4d7e907cSAndroid Build Coastguard Worker */ 49*4d7e907cSAndroid Build Coastguard Worker @callflow(next="addLogicalAddress") 50*4d7e907cSAndroid Build Coastguard Worker @exit 51*4d7e907cSAndroid Build Coastguard Worker clearLogicalAddress(); 52*4d7e907cSAndroid Build Coastguard Worker 53*4d7e907cSAndroid Build Coastguard Worker /** 54*4d7e907cSAndroid Build Coastguard Worker * Gets the CEC physical address. 55*4d7e907cSAndroid Build Coastguard Worker * 56*4d7e907cSAndroid Build Coastguard Worker * The physical address depends on the topology of the network formed by 57*4d7e907cSAndroid Build Coastguard Worker * connected HDMI devices. It is therefore likely to change if the cable is 58*4d7e907cSAndroid Build Coastguard Worker * plugged off and on again. It is advised to call getPhysicalAddress to get 59*4d7e907cSAndroid Build Coastguard Worker * the updated address when hot plug event takes place. 60*4d7e907cSAndroid Build Coastguard Worker * 61*4d7e907cSAndroid Build Coastguard Worker * @return result Result status of the operation. SUCCESS if successful, 62*4d7e907cSAndroid Build Coastguard Worker * FAILURE_INVALID_STATE if HAL cannot retrieve the physical 63*4d7e907cSAndroid Build Coastguard Worker * address. 64*4d7e907cSAndroid Build Coastguard Worker * @return addr Physical address of this device. 65*4d7e907cSAndroid Build Coastguard Worker */ 66*4d7e907cSAndroid Build Coastguard Worker @callflow(next="*") 67*4d7e907cSAndroid Build Coastguard Worker getPhysicalAddress() generates (Result result, uint16_t addr); 68*4d7e907cSAndroid Build Coastguard Worker 69*4d7e907cSAndroid Build Coastguard Worker /** 70*4d7e907cSAndroid Build Coastguard Worker * Transmits HDMI-CEC message to other HDMI device. 71*4d7e907cSAndroid Build Coastguard Worker * 72*4d7e907cSAndroid Build Coastguard Worker * The method must be designed to return in a certain amount of time and not 73*4d7e907cSAndroid Build Coastguard Worker * hanging forever which may happen if CEC signal line is pulled low for 74*4d7e907cSAndroid Build Coastguard Worker * some reason. 75*4d7e907cSAndroid Build Coastguard Worker * 76*4d7e907cSAndroid Build Coastguard Worker * It must try retransmission at least once as specified in the section '7.1 77*4d7e907cSAndroid Build Coastguard Worker * Frame Re-transmissions' of the CEC Spec 1.4b. 78*4d7e907cSAndroid Build Coastguard Worker * 79*4d7e907cSAndroid Build Coastguard Worker * @param message CEC message to be sent to other HDMI device. 80*4d7e907cSAndroid Build Coastguard Worker * @return result Result status of the operation. SUCCESS if successful, 81*4d7e907cSAndroid Build Coastguard Worker * NACK if the sent message is not acknowledged, 82*4d7e907cSAndroid Build Coastguard Worker * BUSY if the CEC bus is busy. 83*4d7e907cSAndroid Build Coastguard Worker */ 84*4d7e907cSAndroid Build Coastguard Worker @callflow(next="*") 85*4d7e907cSAndroid Build Coastguard Worker sendMessage(CecMessage message) generates (SendMessageResult result); 86*4d7e907cSAndroid Build Coastguard Worker 87*4d7e907cSAndroid Build Coastguard Worker /** 88*4d7e907cSAndroid Build Coastguard Worker * Sets a callback that HDMI-CEC HAL must later use for incoming CEC 89*4d7e907cSAndroid Build Coastguard Worker * messages or internal HDMI events. 90*4d7e907cSAndroid Build Coastguard Worker * 91*4d7e907cSAndroid Build Coastguard Worker * @param callback Callback object to pass hdmi events to the system. The 92*4d7e907cSAndroid Build Coastguard Worker * previously registered callback must be replaced with this one. 93*4d7e907cSAndroid Build Coastguard Worker */ 94*4d7e907cSAndroid Build Coastguard Worker @callflow(next={"addLogicalAddress"}) 95*4d7e907cSAndroid Build Coastguard Worker @entry 96*4d7e907cSAndroid Build Coastguard Worker setCallback(IHdmiCecCallback callback); 97*4d7e907cSAndroid Build Coastguard Worker 98*4d7e907cSAndroid Build Coastguard Worker /** 99*4d7e907cSAndroid Build Coastguard Worker * Returns the CEC version supported by underlying hardware. 100*4d7e907cSAndroid Build Coastguard Worker * 101*4d7e907cSAndroid Build Coastguard Worker * @return version the CEC version supported by underlying hardware. 102*4d7e907cSAndroid Build Coastguard Worker */ 103*4d7e907cSAndroid Build Coastguard Worker @callflow(next={"*"}) 104*4d7e907cSAndroid Build Coastguard Worker getCecVersion() generates (int32_t version); 105*4d7e907cSAndroid Build Coastguard Worker 106*4d7e907cSAndroid Build Coastguard Worker /** 107*4d7e907cSAndroid Build Coastguard Worker * Gets the identifier of the vendor. 108*4d7e907cSAndroid Build Coastguard Worker * 109*4d7e907cSAndroid Build Coastguard Worker * @return vendorId Identifier of the vendor that is the 24-bit unique 110*4d7e907cSAndroid Build Coastguard Worker * company ID obtained from the IEEE Registration Authority 111*4d7e907cSAndroid Build Coastguard Worker * Committee (RAC). The upper 8 bits must be 0. 112*4d7e907cSAndroid Build Coastguard Worker */ 113*4d7e907cSAndroid Build Coastguard Worker @callflow(next={"*"}) 114*4d7e907cSAndroid Build Coastguard Worker getVendorId() generates (uint32_t vendorId); 115*4d7e907cSAndroid Build Coastguard Worker 116*4d7e907cSAndroid Build Coastguard Worker /** 117*4d7e907cSAndroid Build Coastguard Worker * Gets the hdmi port information of underlying hardware. 118*4d7e907cSAndroid Build Coastguard Worker * 119*4d7e907cSAndroid Build Coastguard Worker * @return infos The list of HDMI port information 120*4d7e907cSAndroid Build Coastguard Worker */ 121*4d7e907cSAndroid Build Coastguard Worker @callflow(next={"*"}) 122*4d7e907cSAndroid Build Coastguard Worker getPortInfo() generates (vec<HdmiPortInfo> infos); 123*4d7e907cSAndroid Build Coastguard Worker 124*4d7e907cSAndroid Build Coastguard Worker /** 125*4d7e907cSAndroid Build Coastguard Worker * Sets flags controlling the way HDMI-CEC service works down to HAL 126*4d7e907cSAndroid Build Coastguard Worker * implementation. Those flags must be used in case the feature needs update 127*4d7e907cSAndroid Build Coastguard Worker * in HAL itself, firmware or microcontroller. 128*4d7e907cSAndroid Build Coastguard Worker * 129*4d7e907cSAndroid Build Coastguard Worker * @param key The key of the option to be updated with a new value. 130*4d7e907cSAndroid Build Coastguard Worker * @param value Value to be set. 131*4d7e907cSAndroid Build Coastguard Worker */ 132*4d7e907cSAndroid Build Coastguard Worker @callflow(next="*") 133*4d7e907cSAndroid Build Coastguard Worker setOption(OptionKey key, bool value); 134*4d7e907cSAndroid Build Coastguard Worker 135*4d7e907cSAndroid Build Coastguard Worker /** 136*4d7e907cSAndroid Build Coastguard Worker * Passes the updated language information of Android system. Contains 137*4d7e907cSAndroid Build Coastguard Worker * three-letter code as defined in ISO/FDIS 639-2. Must be used for HAL to 138*4d7e907cSAndroid Build Coastguard Worker * respond to <Get Menu Language> while in standby mode. 139*4d7e907cSAndroid Build Coastguard Worker * 140*4d7e907cSAndroid Build Coastguard Worker * @param language Three-letter code defined in ISO/FDIS 639-2. Must be 141*4d7e907cSAndroid Build Coastguard Worker * lowercase letters. (e.g., eng for English) 142*4d7e907cSAndroid Build Coastguard Worker */ 143*4d7e907cSAndroid Build Coastguard Worker @callflow(next="*") 144*4d7e907cSAndroid Build Coastguard Worker setLanguage(string language); 145*4d7e907cSAndroid Build Coastguard Worker 146*4d7e907cSAndroid Build Coastguard Worker /** 147*4d7e907cSAndroid Build Coastguard Worker * Configures ARC circuit in the hardware logic to start or stop the 148*4d7e907cSAndroid Build Coastguard Worker * feature. 149*4d7e907cSAndroid Build Coastguard Worker * 150*4d7e907cSAndroid Build Coastguard Worker * @param portId Port id to be configured. 151*4d7e907cSAndroid Build Coastguard Worker * @param enable Flag must be either true to start the feature or false to 152*4d7e907cSAndroid Build Coastguard Worker * stop it. 153*4d7e907cSAndroid Build Coastguard Worker */ 154*4d7e907cSAndroid Build Coastguard Worker @callflow(next="*") 155*4d7e907cSAndroid Build Coastguard Worker enableAudioReturnChannel(int32_t portId, bool enable); 156*4d7e907cSAndroid Build Coastguard Worker 157*4d7e907cSAndroid Build Coastguard Worker /** 158*4d7e907cSAndroid Build Coastguard Worker * Gets the connection status of the specified port. 159*4d7e907cSAndroid Build Coastguard Worker * 160*4d7e907cSAndroid Build Coastguard Worker * @param portId Port id to be inspected for the connection status. 161*4d7e907cSAndroid Build Coastguard Worker * @return status True if a device is connected, otherwise false. The HAL 162*4d7e907cSAndroid Build Coastguard Worker * must watch for +5V power signal to determine the status. 163*4d7e907cSAndroid Build Coastguard Worker */ 164*4d7e907cSAndroid Build Coastguard Worker @callflow(next="*") 165*4d7e907cSAndroid Build Coastguard Worker isConnected(int32_t portId) generates (bool status); 166*4d7e907cSAndroid Build Coastguard Worker}; 167