RM6785: init: Cleanup and refactor code
Change-Id: Id1df5f0ae453561892dd0530742313b063e7f1de
diff --git a/init/init_RM6785.cpp b/init/init_RM6785.cpp
index 1b088d6..610fe12 100644
--- a/init/init_RM6785.cpp
+++ b/init/init_RM6785.cpp
@@ -1,173 +1,153 @@
-/*
- Copyright (c) 2020, The LineageOS Project
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <fcntl.h>
#include <fstream>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <android-base/file.h>
+#include <tuple>
#include <android-base/logging.h>
-#include <android-base/properties.h>
-#include <android-base/strings.h>
#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
#include <sys/_system_properties.h>
#include "vendor_init.h"
-#include "property_service.h"
-#define PROC_NFC_CHIPSET "/proc/oppo_nfc/chipset"
+#define PROC_NFC "/proc/oppo_nfc/chipset"
+#define PROC_OPERATOR "/proc/oppoVersion/operatorName"
-using android::base::ReadFileToString;
-using android::base::Trim;
-using std::string;
+void property_override(std::string prop, std::string value, bool add = true) {
+ auto pi = (prop_info *)__system_property_find(prop.c_str());
-std::vector<std::string> ro_props_default_source_order = {
- "",
- "odm.",
- "product.",
- "system.",
- "system_ext.",
- "vendor.",
-};
-
-void property_override(char const prop[], char const value[], bool add = true) {
- prop_info *pi;
-
- pi = (prop_info*) __system_property_find(prop);
- if (pi)
- __system_property_update(pi, value, strlen(value));
- else if (add)
- __system_property_add(prop, strlen(prop), value, strlen(value));
-}
-
-void set_ro_build_prop(const std::string &prop, const std::string &value, bool product = true) {
- string prop_name;
-
- for (const auto &source : ro_props_default_source_order) {
- if (product)
- prop_name = "ro.product." + source + prop;
- else
- prop_name = "ro." + source + "build." + prop;
-
- property_override(prop_name.c_str(), value.c_str());
+ if (pi != nullptr) {
+ __system_property_update(pi, value.c_str(), value.size());
+ } else if (add) {
+ __system_property_add(prop.c_str(), prop.size(), value.c_str(),
+ value.size());
}
}
-void check_nfc_support()
-{
- std::ifstream procfile(PROC_NFC_CHIPSET);
+void set_ro_build_prop(const std::string &prop, const std::string &value,
+ bool product = true) {
+ std::string prop_name;
+ std::string prop_types[] = {
+ "",
+ "bootimage.",
+ "odm.",
+ "odm_dlkm.",
+ "product.",
+ "system.",
+ "system_ext.",
+ "vendor.",
+ "vendor_dlkm.",
+ };
+
+ for (const std::string &source : prop_types) {
+ if (product) {
+ prop_name = "ro.product." + source + prop;
+ } else {
+ prop_name = "ro." + source + "build." + prop;
+ }
+
+ property_override(prop_name, value, false);
+ }
+}
+
+bool nfc_variant() {
+ std::ifstream nfc_file(PROC_NFC);
+ nfc_file.good();
std::string chipset;
- getline(procfile, chipset);
+ getline(nfc_file, chipset);
LOG(INFO) << "oppo_nfc : chipset " << chipset;
- if (chipset != "NULL") {
- property_override("ro.boot.product.hardware.sku", "nfc");
+ return (chipset != "NULL");
+}
+
+std::tuple<std::string, std::string> get_device() {
+ std::string device, model, line;
+ std::ifstream operator_file(PROC_OPERATOR);
+ operator_file.good();
+ getline(operator_file, line);
+
+ int operatorName = stoi(line);
+
+ switch (operatorName) {
+ // realme 6
+ case 101:
+ case 102:
+ case 104:
+ case 105:
+ device = "RMX2001L1";
+ model = "RMX2001";
+ break;
+ case 106:
+ device = "RMX2003L1";
+ model = "RMX2003";
+ break;
+ case 113:
+ device = "RMX2005L1";
+ model = "RMX2005";
+ break;
+ // realme 6i/6s/Narzo
+ case 111:
+ case 112:
+ case 114:
+ device = "RMX2002L1";
+ model = "RMX2002";
+ break;
+ // realme 7
+ case 140:
+ case 141:
+ case 146:
+ case 149:
+ device = "RMX2151L1";
+ model = "RMX2151";
+ break;
+ case 142:
+ device = "RMX2153L1";
+ model = "RMX2153";
+ break;
+ case 94:
+ case 148:
+ device = "RMX2155L1";
+ model = "RMX2155";
+ break;
+ // realme Narzo 30 4G
+ case 90:
+ case 92:
+ device = "RMX2156L1";
+ model = "RMX2156";
+ break;
+ // realme Narzo 20 Pro
+ case 143:
+ device = "RMX2161L1";
+ model = "RMX2161";
+ break;
+ case 145:
+ case 147:
+ device = "RMX2163L1";
+ model = "RMX2163";
+ break;
+ default:
+ LOG(ERROR) << "Unable to read operator from " << PROC_OPERATOR;
}
+ return {device, model};
}
void vendor_load_properties() {
- char const *operator_file = "/proc/oppoVersion/operatorName";
- string operator_name;
- string device;
- string model;
-
- if (ReadFileToString(operator_file, &operator_name)) {
- // realme 6
- if (Trim(operator_name) == "101" || Trim(operator_name) == "102"
- || Trim(operator_name) == "104" || Trim(operator_name) == "105") {
- device = "RMX2001L1";
- model = "RMX2001";
- }
- else if (Trim(operator_name) == "106") {
- device = "RMX2003L1";
- model = "RMX2003";
- }
- else if (Trim(operator_name) == "113") {
- device = "RMX2005L1";
- model = "RMX2005";
- }
- // realme 6i/6s/Narzo
- else if (Trim(operator_name) == "111" || Trim(operator_name) == "112"
- || Trim(operator_name) == "114") {
- device = "RMX2002L1";
- model = "RMX2002";
- }
- // realme 7
- else if (Trim(operator_name) == "140" || Trim(operator_name) == "141"
- || Trim(operator_name) == "146" || Trim(operator_name) == "149") {
- device = "RMX2151L1";
- model = "RMX2151";
- property_override("ro.device", "RMX2151");
- }
- else if (Trim(operator_name) == "142") {
- device = "RMX2153L1";
- model = "RMX2153";
- property_override("ro.device", "RMX2151");
- }
- else if (Trim(operator_name) == "94" || Trim(operator_name) == "148") {
- device = "RMX2155L1";
- model = "RMX2155";
- property_override("ro.device", "RMX2151");
- }
- // realme Narzo 30 4G
- else if (Trim(operator_name) == "90" || Trim(operator_name) == "92") {
- device = "RMX2156L1";
- model = "RMX2156";
- property_override("ro.device", "RMX2151");
- }
- // realme Narzo 20 Pro
- else if (Trim(operator_name) == "143") {
- device = "RMX2161L1";
- model = "RMX2161";
- property_override("ro.device", "RMX2161");
- }
- else if (Trim(operator_name) == "147" || Trim(operator_name) == "145") {
- device = "RMX2163L1";
- model = "RMX2163";
- property_override("ro.device", "RMX2161");
- }
- }
- else {
- LOG(ERROR) << "Unable to read operator from " << operator_file;
- }
+ auto [device, model] = get_device();
set_ro_build_prop("device", device);
set_ro_build_prop("model", model);
set_ro_build_prop("name", model);
set_ro_build_prop("product", model, false);
- check_nfc_support();
+ // for RRO
+ if (!device.find("RMX215")) {
+ property_override("ro.device", "RMX2151");
+ }
+ if (!device.find("RMX216")) {
+ property_override("ro.device", "RMX2161");
+ }
+
+ // NFC check
+ if (nfc_variant()) {
+ property_override("ro.boot.product.hardware.sku", "nfc");
+ }
}