Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 05c454f3 authored by Shraddha Basantwani's avatar Shraddha Basantwani
Browse files

CEC: Add implementation of WAKEUP option to default HdmiCec

When WAKEUP is set to false, HAL does not wake up the system
upon receiving <Image View On> or <Text View On> messages.

Bug: 185434120
Test: manual
Change-Id: Iaf98020decc887f04b02da480adc70b76189b66d
parent d591d975
Loading
Loading
Loading
Loading
+32 −0
Original line number Original line Diff line number Diff line
@@ -38,6 +38,11 @@ namespace implementation {


// When set to false, all the CEC commands are discarded. True by default after initialization.
// When set to false, all the CEC commands are discarded. True by default after initialization.
bool mCecEnabled;
bool mCecEnabled;
/*
 * When set to false, HAL does not wake up the system upon receiving <Image View On> or
 * <Text View On>. True by default after initialization.
 */
bool mWakeupEnabled;


int mCecFd;
int mCecFd;
int mExitFd;
int mExitFd;
@@ -48,6 +53,7 @@ HdmiCecDefault::HdmiCecDefault() {
    mCecFd = -1;
    mCecFd = -1;
    mExitFd = -1;
    mExitFd = -1;
    mCecEnabled = false;
    mCecEnabled = false;
    mWakeupEnabled = false;
    mCallback = nullptr;
    mCallback = nullptr;
}
}


@@ -244,6 +250,10 @@ Return<void> HdmiCecDefault::setOption(OptionKey key, bool value) {
            LOG(DEBUG) << "setOption: Enable CEC: " << value;
            LOG(DEBUG) << "setOption: Enable CEC: " << value;
            mCecEnabled = value;
            mCecEnabled = value;
            break;
            break;
        case OptionKey::WAKEUP:
            LOG(DEBUG) << "setOption: WAKEUP: " << value;
            mWakeupEnabled = value;
            break;
        default:
        default:
            break;
            break;
    }
    }
@@ -317,6 +327,7 @@ Return<Result> HdmiCecDefault::init() {
    }
    }


    mCecEnabled = true;
    mCecEnabled = true;
    mWakeupEnabled = true;
    return Result::SUCCESS;
    return Result::SUCCESS;
}
}


@@ -333,6 +344,7 @@ Return<void> HdmiCecDefault::release() {
        close(mCecFd);
        close(mCecFd);
    }
    }
    mCecEnabled = false;
    mCecEnabled = false;
    mWakeupEnabled = false;
    setCallback(nullptr);
    setCallback(nullptr);
    return Void();
    return Void();
}
}
@@ -402,6 +414,11 @@ void* HdmiCecDefault::event_thread(void*) {
                continue;
                continue;
            }
            }


            if (!mWakeupEnabled && isWakeupMessage(msg)) {
                LOG(DEBUG) << "Filter wakeup message";
                continue;
            }

            if (mCallback != nullptr) {
            if (mCallback != nullptr) {
                size_t length = std::min(msg.len - 1, (uint32_t)MaxLength::MESSAGE_BODY);
                size_t length = std::min(msg.len - 1, (uint32_t)MaxLength::MESSAGE_BODY);
                CecMessage cecMessage{
                CecMessage cecMessage{
@@ -421,6 +438,21 @@ void* HdmiCecDefault::event_thread(void*) {
    return NULL;
    return NULL;
}
}


int HdmiCecDefault::getOpcode(struct cec_msg message) {
    return (static_cast<uint8_t>(message.msg[1]) & 0xff);
}

bool HdmiCecDefault::isWakeupMessage(struct cec_msg message) {
    int opcode = getOpcode(message);
    switch (opcode) {
        case CEC_MESSAGE_TEXT_VIEW_ON:
        case CEC_MESSAGE_IMAGE_VIEW_ON:
            return true;
        default:
            return false;
    }
}

}  // namespace implementation
}  // namespace implementation
}  // namespace V1_0
}  // namespace V1_0
}  // namespace cec
}  // namespace cec
+2 −0
Original line number Original line Diff line number Diff line
@@ -48,6 +48,8 @@ struct HdmiCecDefault : public IHdmiCec, public hidl_death_recipient {
    Return<Result> init();
    Return<Result> init();
    Return<void> release();
    Return<void> release();
    static void* event_thread(void*);
    static void* event_thread(void*);
    static int getOpcode(struct cec_msg message);
    static bool isWakeupMessage(struct cec_msg message);
};
};


}  // namespace implementation
}  // namespace implementation