blob: f9d3c99288768ec9067619c4ca1f0b16d9e2cfae [file] [log] [blame]
/*
* Copyright (C) 2024 The LineageOS Project
*
* SPDX-License-Identifier: Apache-2.0
*/
#define LOG_TAG "SehRadioManager"
#include "SehRadioIndication.h"
#include "SehRadioResponse.h"
#include <android-base/file.h>
#include <android-base/logging.h>
#include <android-base/properties.h>
#include <android-base/strings.h>
#include <hidl/HidlTransportSupport.h>
#include <vendor/samsung/hardware/radio/2.2/ISehRadio.h>
using android::sp;
using android::base::GetIntProperty;
using android::base::ReadFileToString;
using android::base::Split;
using android::hardware::configureRpcThreadpool;
using android::hardware::hidl_vec;
using android::hardware::joinRpcThreadpool;
using vendor::samsung::hardware::radio::V2_2::ISehRadio;
using vendor::samsung::hardware::radio::V2_2::SehVendorConfiguration;
using vendor::samsung::hardware::radio::V2_2::implementation::SehRadioIndication;
using vendor::samsung::hardware::radio::V2_2::implementation::SehRadioResponse;
hidl_vec<SehVendorConfiguration> LoadConfiguration(std::string data) {
std::vector<SehVendorConfiguration> config;
for (std::string line : Split(data, "\n")) {
if (line == "\0") break;
std::vector<std::string> parts = Split(line, "=");
if (parts.size() == 2) {
config.push_back(SehVendorConfiguration(parts[0], parts[1]));
LOG(INFO) << line;
} else {
LOG(ERROR) << "Invalid data: " << line;
}
}
return hidl_vec<SehVendorConfiguration>(config);
}
int main() {
int slotCount = GetIntProperty("ro.vendor.multisim.simslotcount", 1);
configureRpcThreadpool(slotCount * 2 + 1, true);
std::string content;
if (!ReadFileToString("/vendor/etc/sehradiomanager.conf", &content)) {
LOG(WARNING) << "Could not read config, setting defaults";
content = "FW_READY=1";
}
auto config = LoadConfiguration(content);
for (int slot = 1; slot <= slotCount; slot++) {
auto samsungIndication = sp<SehRadioIndication>::make();
auto samsungResponse = sp<SehRadioResponse>::make();
auto svc = ISehRadio::getService("slot" + std::to_string(slot));
svc->setResponseFunction(samsungResponse, samsungIndication);
svc->setVendorSpecificConfiguration(0x3232, config);
LOG(INFO) << "Done (slot" << slot << ")";
}
joinRpcThreadpool();
return 1;
}