ril: sehradiomanager: Add support for a config file
Change-Id: Ia6a752932af1cc70c7ef75fd15573ec78629e9f7
diff --git a/ril/sehradiomanager/sehradiomanager.cpp b/ril/sehradiomanager/sehradiomanager.cpp
index 8472db8..f9d3c99 100644
--- a/ril/sehradiomanager/sehradiomanager.cpp
+++ b/ril/sehradiomanager/sehradiomanager.cpp
@@ -9,15 +9,20 @@
#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;
@@ -25,22 +30,42 @@
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);
-
- SehVendorConfiguration arg;
- arg.name = "FW_READY";
- arg.value = "1";
-
- svc->setVendorSpecificConfiguration(0x3232, {arg});
- LOG(INFO) << "HIDL FW_READY done (slot" << slot << ")";
+ svc->setVendorSpecificConfiguration(0x3232, config);
+ LOG(INFO) << "Done (slot" << slot << ")";
}
joinRpcThreadpool();