Files
device_realme_nemo/init/init_nemo.cpp
Debayan Kar 85832ecb49 nemo: Drop realme 7/Narzo 20 Pro/Narzo 30 4G support
Change-Id: Ieb3a21ee1a098370c422fb060a30c47408270811
2025-09-10 22:00:58 +05:30

106 lines
2.9 KiB
C++

//
// Copyright (C) 2022-2023 The LineageOS Project
//
// SPDX-License-Identifier: Apache-2.0
//
#include <android-base/file.h>
#include <android-base/logging.h>
#include <vector>
#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
#include <sys/_system_properties.h>
#include "vendor_init.h"
constexpr const char* kProcOperatorPath = "/proc/oppoVersion/operatorName";
struct DeviceProps {
std::string model;
std::string device;
};
void property_override(const char* prop, const char* value, bool add = true) {
prop_info* pi = (prop_info*)__system_property_find(prop);
if (pi != nullptr) {
__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) {
std::string prop_name;
std::vector<std::string> prop_types = {
"", "bootimage.", "odm.", "odm_dlkm.", "product.",
"system.", "system_ext.", "vendor.", "vendor_dlkm."};
for (const auto& source : prop_types) {
if (product) {
prop_name = "ro.product." + source + prop;
} else {
prop_name = "ro." + source + "build." + prop;
}
property_override(prop_name.c_str(), value.c_str(), false);
}
}
DeviceProps get_device() {
std::string device, model, operator_content;
if (!android::base::ReadFileToString(kProcOperatorPath,
&operator_content)) {
LOG(ERROR) << "Failed to read file: " << kProcOperatorPath;
return {"", ""};
}
int operator_code = stoi(operator_content);
DeviceProps device_props;
switch (operator_code) {
// realme 6
case 101:
case 102:
case 104:
case 105:
device_props = {"RMX2001", "RMX2001L1"};
break;
case 106:
device_props = {"RMX2003", "RMX2003L1"};
break;
case 113:
device_props = {"RMX2005", "RMX2005L1"};
break;
// realme 6i/6s/Narzo
case 111:
case 112:
case 114:
device_props = {"RMX2002", "RMX2002L1"};
break;
default:
LOG(ERROR) << "Unknown operator found: " << operator_code;
device_props = {"", ""};
}
return device_props;
}
void set_device() {
const DeviceProps device_props = get_device();
if (!device_props.device.empty() && !device_props.model.empty()) {
set_ro_build_prop("device", device_props.device);
set_ro_build_prop("model", device_props.model);
set_ro_build_prop("name", device_props.model);
set_ro_build_prop("product", device_props.model, false);
}
}
void vendor_load_properties() {
#ifndef __ANDROID_RECOVERY__
set_device();
#endif
}