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

Commit dcbae487 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk
Browse files

Implement RadioModem for AIDL-HIDL Telephony HAL translator

Bug: 203699028
Test: Boot and grep logcat against radiocompat
Change-Id: I670f78af2cd7a0ce0b49dfc802fd363f47d9b6a6
parent 6e084181
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ cc_library {
        "android.hardware.radio.config@1.3",
        "android.hardware.radio.data-V1-ndk",
        "android.hardware.radio.messaging-V1-ndk",
        "android.hardware.radio.modem-V1-ndk",
        "android.hardware.radio.network-V1-ndk",
        "android.hardware.radio.sim-V1-ndk",
        "android.hardware.radio.voice-V1-ndk",
@@ -56,7 +57,6 @@ cc_library {
    ],
    srcs: [
        "RadioCompatBase.cpp",
        "RadioIndication.cpp",
        "RadioResponse.cpp",
        "commonStructs.cpp",
        "config/RadioConfig.cpp",
@@ -71,6 +71,10 @@ cc_library {
        "messaging/RadioMessaging.cpp",
        "messaging/RadioResponse-messaging.cpp",
        "messaging/structs.cpp",
        "modem/RadioIndication-modem.cpp",
        "modem/RadioResponse-modem.cpp",
        "modem/RadioModem.cpp",
        "modem/structs.cpp",
        "network/RadioIndication-network.cpp",
        "network/RadioNetwork.cpp",
        "network/RadioResponse-network.cpp",
+1 −80
Original line number Diff line number Diff line
@@ -18,9 +18,6 @@

#include "debug.h"

// TODO(b/203699028): remove when fully implemented
#pragma GCC diagnostic ignored "-Wunused-parameter"

#define RADIO_MODULE "Common"

namespace android::hardware::radio::compat {
@@ -30,87 +27,11 @@ Return<void> RadioResponse::acknowledgeRequest(int32_t serial) {
    // TODO(b/203699028): send to correct requestor or confirm if spam is not a problem
    if (mDataCb) mDataCb->acknowledgeRequest(serial);
    if (mMessagingCb) mMessagingCb->acknowledgeRequest(serial);
    if (mModemCb) mModemCb->acknowledgeRequest(serial);
    if (mNetworkCb) mNetworkCb->acknowledgeRequest(serial);
    if (mSimCb) mSimCb->acknowledgeRequest(serial);
    if (mVoiceCb) mVoiceCb->acknowledgeRequest(serial);
    return {};
}

Return<void> RadioResponse::setRadioPowerResponse(const V1_0::RadioResponseInfo& info) {
    return {};
}

Return<void> RadioResponse::getBasebandVersionResponse(const V1_0::RadioResponseInfo& info,
                                                       const hidl_string& version) {
    return {};
}

Return<void> RadioResponse::getDeviceIdentityResponse(  //
        const V1_0::RadioResponseInfo& info, const hidl_string& imei, const hidl_string& imeisv,
        const hidl_string& esn, const hidl_string& meid) {
    return {};
}

Return<void> RadioResponse::nvReadItemResponse(const V1_0::RadioResponseInfo& info,
                                               const hidl_string& result) {
    return {};
}

Return<void> RadioResponse::nvWriteItemResponse(const V1_0::RadioResponseInfo& info) {
    return {};
}

Return<void> RadioResponse::nvWriteCdmaPrlResponse(const V1_0::RadioResponseInfo& info) {
    return {};
}

Return<void> RadioResponse::nvResetConfigResponse(const V1_0::RadioResponseInfo& info) {
    return {};
}

Return<void> RadioResponse::getHardwareConfigResponse(
        const V1_0::RadioResponseInfo& info, const hidl_vec<V1_0::HardwareConfig>& config) {
    return {};
}

Return<void> RadioResponse::requestShutdownResponse(const V1_0::RadioResponseInfo& info) {
    return {};
}

Return<void> RadioResponse::getRadioCapabilityResponse(const V1_0::RadioResponseInfo& info,
                                                       const V1_0::RadioCapability& rc) {
    return {};
}

Return<void> RadioResponse::setRadioCapabilityResponse(const V1_0::RadioResponseInfo& info,
                                                       const V1_0::RadioCapability& rc) {
    return {};
}

Return<void> RadioResponse::getModemActivityInfoResponse(
        const V1_0::RadioResponseInfo& info, const V1_0::ActivityStatsInfo& activityInfo) {
    return {};
}

Return<void> RadioResponse::sendDeviceStateResponse(const V1_0::RadioResponseInfo& info) {
    return {};
}

Return<void> RadioResponse::enableModemResponse(const V1_0::RadioResponseInfo& info) {
    return {};
}

Return<void> RadioResponse::getModemStackStatusResponse(const V1_0::RadioResponseInfo& info,
                                                        bool isEnabled) {
    return {};
}

Return<void> RadioResponse::setRadioPowerResponse_1_5(const V1_0::RadioResponseInfo& info) {
    return {};
}

Return<void> RadioResponse::setRadioPowerResponse_1_6(const V1_6::RadioResponseInfo& info) {
    return {};
}

}  // namespace android::hardware::radio::compat
+16 −0
Original line number Diff line number Diff line
@@ -54,6 +54,22 @@ auto toHidl(const std::vector<T>& inp) {
    return out;
}

/**
 * Converts hidl_array<T> HIDL list to std::vector<T> AIDL list.
 *
 * To convert values, the template uses toAidl functions for a given type T, assuming it's defined.
 *
 * \param inp array to convert
 */
template <typename T, size_t N>
auto toAidl(const hidl_array<T, N>& inp) {
    std::vector<decltype(toAidl(T{}))> out(N);
    for (size_t i = 0; i < N; i++) {
        out[i] = toAidl(inp[i]);
    }
    return out;
}

/**
 * Converts T=OptionalX HIDL value to std::optional<X> AIDL value.
 *
+4 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@

#include <aidl/android/hardware/radio/data/IRadioDataIndication.h>
#include <aidl/android/hardware/radio/messaging/IRadioMessagingIndication.h>
#include <aidl/android/hardware/radio/modem/IRadioModemIndication.h>
#include <aidl/android/hardware/radio/network/IRadioNetworkIndication.h>
#include <aidl/android/hardware/radio/sim/IRadioSimIndication.h>
#include <aidl/android/hardware/radio/voice/IRadioVoiceIndication.h>
@@ -28,6 +29,7 @@ class RadioIndication : public V1_6::IRadioIndication {
    std::shared_ptr<::aidl::android::hardware::radio::data::IRadioDataIndication> mDataCb;
    std::shared_ptr<::aidl::android::hardware::radio::messaging::IRadioMessagingIndication>
            mMessagingCb;
    std::shared_ptr<::aidl::android::hardware::radio::modem::IRadioModemIndication> mModemCb;
    std::shared_ptr<::aidl::android::hardware::radio::network::IRadioNetworkIndication> mNetworkCb;
    std::shared_ptr<::aidl::android::hardware::radio::sim::IRadioSimIndication> mSimCb;
    std::shared_ptr<::aidl::android::hardware::radio::voice::IRadioVoiceIndication> mVoiceCb;
@@ -184,6 +186,8 @@ class RadioIndication : public V1_6::IRadioIndication {
    void setResponseFunction(
            std::shared_ptr<::aidl::android::hardware::radio::messaging::IRadioMessagingIndication>
                    radioMessagingIndication);
    void setResponseFunction(
            std::shared_ptr<::aidl::android::hardware::radio::modem::IRadioModemIndication> modmCb);
    void setResponseFunction(
            std::shared_ptr<::aidl::android::hardware::radio::network::IRadioNetworkIndication> ni);
    void setResponseFunction(
+59 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#pragma once

#include "RadioCompatBase.h"

#include <aidl/android/hardware/radio/modem/BnRadioModem.h>

namespace android::hardware::radio::compat {

class RadioModem : public RadioCompatBase,
                   public aidl::android::hardware::radio::modem::BnRadioModem {
    ::ndk::ScopedAStatus enableModem(int32_t serial, bool on) override;
    ::ndk::ScopedAStatus getBasebandVersion(int32_t serial) override;
    ::ndk::ScopedAStatus getDeviceIdentity(int32_t serial) override;
    ::ndk::ScopedAStatus getHardwareConfig(int32_t serial) override;
    ::ndk::ScopedAStatus getModemActivityInfo(int32_t serial) override;
    ::ndk::ScopedAStatus getModemStackStatus(int32_t serial) override;
    ::ndk::ScopedAStatus getRadioCapability(int32_t serial) override;
    ::ndk::ScopedAStatus nvReadItem(
            int32_t serial, ::aidl::android::hardware::radio::modem::NvItem itemId) override;
    ::ndk::ScopedAStatus nvResetConfig(
            int32_t serial, ::aidl::android::hardware::radio::modem::ResetNvType type) override;
    ::ndk::ScopedAStatus nvWriteCdmaPrl(int32_t serial, const std::vector<uint8_t>& prl) override;
    ::ndk::ScopedAStatus nvWriteItem(
            int32_t serial, const ::aidl::android::hardware::radio::modem::NvWriteItem& i) override;
    ::ndk::ScopedAStatus requestShutdown(int32_t serial) override;
    ::ndk::ScopedAStatus responseAcknowledgement() override;
    ::ndk::ScopedAStatus sendDeviceState(
            int32_t serial, ::aidl::android::hardware::radio::modem::DeviceStateType stateType,
            bool state) override;
    ::ndk::ScopedAStatus setRadioCapability(
            int32_t s, const ::aidl::android::hardware::radio::modem::RadioCapability& rc) override;
    ::ndk::ScopedAStatus setRadioPower(int32_t serial, bool powerOn, bool forEmergencyCall,
                                       bool preferredForEmergencyCall) override;
    ::ndk::ScopedAStatus setResponseFunctions(
            const std::shared_ptr<::aidl::android::hardware::radio::modem::IRadioModemResponse>&
                    radioModemResponse,
            const std::shared_ptr<::aidl::android::hardware::radio::modem::IRadioModemIndication>&
                    radioModemIndication) override;

  public:
    using RadioCompatBase::RadioCompatBase;
};

}  // namespace android::hardware::radio::compat
Loading