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

Commit 405001db authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Hdmi CEC Mock : Clear the existing callback when new callback is set"...

Merge "Hdmi CEC Mock : Clear the existing callback when new callback is set" into main am: ad148cc9

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2968206



Change-Id: Id150740e5f81a83f94af27d8913dcab3c27b5642
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 597c13d5 ad148cc9
Loading
Loading
Loading
Loading
+19 −13
Original line number Diff line number Diff line
@@ -35,8 +35,7 @@ namespace implementation {
void HdmiCecMock::serviceDied(void* cookie) {
    ALOGE("HdmiCecMock died");
    auto hdmiCecMock = static_cast<HdmiCecMock*>(cookie);
    hdmiCecMock->mCecThreadRun = false;
    pthread_join(hdmiCecMock->mThreadId, NULL);
    hdmiCecMock->closeCallback();
}

ScopedAStatus HdmiCecMock::addLogicalAddress(CecLogicalAddress addr, Result* _aidl_return) {
@@ -86,10 +85,10 @@ ScopedAStatus HdmiCecMock::sendMessage(const CecMessage& message, SendMessageRes
}

ScopedAStatus HdmiCecMock::setCallback(const std::shared_ptr<IHdmiCecCallback>& callback) {
    // If callback is null, mCallback is also set to null so we do not call the old callback.
    mCallback = callback;
    closeCallback();

    if (callback != nullptr) {
        mCallback = callback;
        mDeathRecipient =
                ndk::ScopedAIBinder_DeathRecipient(AIBinder_DeathRecipient_new(serviceDied));
        AIBinder_linkToDeath(callback->asBinder().get(), mDeathRecipient.get(), this /* cookie */);
@@ -104,8 +103,8 @@ ScopedAStatus HdmiCecMock::setCallback(const std::shared_ptr<IHdmiCecCallback>&

ScopedAStatus HdmiCecMock::setLanguage(const std::string& language) {
    if (language.size() != 3) {
        LOG(ERROR) << "Wrong language code: expected 3 letters, but it was " << language.size()
                   << ".";
        ALOGE("[halimp_aidl] Wrong language code: expected 3 letters, but it was %zu",
              language.size());
        return ScopedAStatus::ok();
    }
    // TODO Validate if language is a valid language code
@@ -169,7 +168,7 @@ int HdmiCecMock::sendMessageToFifo(const CecMessage& message) {
    // Open the output pipe for writing outgoing cec message
    mOutputFile = open(CEC_MSG_OUT_FIFO, O_WRONLY | O_CLOEXEC);
    if (mOutputFile < 0) {
        ALOGD("[halimp_aidl] file open failed for writing");
        ALOGE("[halimp_aidl] file open failed for writing");
        return -1;
    }

@@ -258,18 +257,25 @@ void HdmiCecMock::threadLoop() {
}

HdmiCecMock::HdmiCecMock() {
    ALOGE("[halimp_aidl] Opening a virtual CEC HAL for testing and virtual machine.");
    ALOGD("[halimp_aidl] Opening a virtual CEC HAL for testing and virtual machine.");
    mCallback = nullptr;
    mDeathRecipient = ndk::ScopedAIBinder_DeathRecipient(nullptr);
}

HdmiCecMock::~HdmiCecMock() {
    ALOGE("[halimp_aidl] HdmiCecMock shutting down.");
void HdmiCecMock::closeCallback() {
    if (mCallback != nullptr) {
        ALOGD("[halimp_aidl] HdmiCecMock close the current callback.");
        mCallback = nullptr;
        mDeathRecipient = ndk::ScopedAIBinder_DeathRecipient(nullptr);
        mCecThreadRun = false;
        pthread_join(mThreadId, NULL);
    }
}

HdmiCecMock::~HdmiCecMock() {
    ALOGD("[halimp_aidl] HdmiCecMock shutting down.");
    closeCallback();
}

}  // namespace implementation
}  // namespace cec
+2 −2
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ struct HdmiCecMock : public BnHdmiCec {
    ::ndk::ScopedAStatus enableCec(bool value) override;
    ::ndk::ScopedAStatus enableSystemCecControl(bool value) override;
    void printCecMsgBuf(const char* msg_buf, int len);
    void closeCallback();

  private:
    static void* __threadLoop(void* data);
@@ -62,9 +63,8 @@ struct HdmiCecMock : public BnHdmiCec {
    int readMessageFromFifo(unsigned char* buf, int msgCount);
    int sendMessageToFifo(const CecMessage& message);
    void handleCecMessage(unsigned char* msgBuf, int length);

  private:
    static void serviceDied(void* cookie);

    std::shared_ptr<IHdmiCecCallback> mCallback;

    // Variables for the virtual cec hal impl