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

Commit a803f275 authored by Vick Wang's avatar Vick Wang
Browse files

Add vendor callback for receiving spinel frames

Adds a vendor callback mechanism to the ThreadChip class. This allows
vendors to implement product-specific features by registering a callback
function that will be invoked when ever a spinel frame is received.

- Added `mVendorCallback` member to store the vendor callback.
- Added `setVendorCallback` method to set the vendor callback.
- Modified `handleReceivedFrame` to invoke the vendor callback with the received spinel frame.

Bug: 371460661
Test: build and flash
Change-Id: I97b80db08cfcc2cade520c55ecc27a50a1727690
parent a74f7c94
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -83,6 +83,11 @@ void ThreadChip::handleReceivedFrame(void) {
                mRxFrameBuffer.GetFrame(), mRxFrameBuffer.GetFrame() + mRxFrameBuffer.GetLength()));
                mRxFrameBuffer.GetFrame(), mRxFrameBuffer.GetFrame() + mRxFrameBuffer.GetLength()));
    }
    }


    if (mVendorCallback != nullptr) {
        mVendorCallback->onReceiveSpinelFrame(std::vector<uint8_t>(
                mRxFrameBuffer.GetFrame(), mRxFrameBuffer.GetFrame() + mRxFrameBuffer.GetLength()));
    }

    mRxFrameBuffer.DiscardFrame();
    mRxFrameBuffer.DiscardFrame();
}
}


@@ -193,6 +198,10 @@ void ThreadChip::Process(const otSysMainloopContext& context) {
    }
    }
}
}


void ThreadChip::setVendorCallback(const std::shared_ptr<IThreadChipCallback>& vendorCallback) {
    mVendorCallback = vendorCallback;
}

ndk::ScopedAStatus ThreadChip::errorStatus(int32_t error, const char* message) {
ndk::ScopedAStatus ThreadChip::errorStatus(int32_t error, const char* message) {
    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(error, message));
    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(error, message));
}
}
+2 −0
Original line number Original line Diff line number Diff line
@@ -43,6 +43,7 @@ class ThreadChip : public BnThreadChip, ot::Posix::Mainloop::Source {
    ndk::ScopedAStatus hardwareReset() override;
    ndk::ScopedAStatus hardwareReset() override;
    void Update(otSysMainloopContext& context) override;
    void Update(otSysMainloopContext& context) override;
    void Process(const otSysMainloopContext& context) override;
    void Process(const otSysMainloopContext& context) override;
    void setVendorCallback(const std::shared_ptr<IThreadChipCallback>& vendorCallback);


  private:
  private:
    static void onBinderDiedJump(void* context);
    static void onBinderDiedJump(void* context);
@@ -59,6 +60,7 @@ class ThreadChip : public BnThreadChip, ot::Posix::Mainloop::Source {
    std::shared_ptr<ot::Spinel::SpinelInterface> mSpinelInterface;
    std::shared_ptr<ot::Spinel::SpinelInterface> mSpinelInterface;
    ot::Spinel::SpinelInterface::RxFrameBuffer mRxFrameBuffer;
    ot::Spinel::SpinelInterface::RxFrameBuffer mRxFrameBuffer;
    std::shared_ptr<IThreadChipCallback> mCallback;
    std::shared_ptr<IThreadChipCallback> mCallback;
    std::shared_ptr<IThreadChipCallback> mVendorCallback;
    ::ndk::ScopedAIBinder_DeathRecipient mDeathRecipient;
    ::ndk::ScopedAIBinder_DeathRecipient mDeathRecipient;
};
};