/* * Copyright (C) 2026 oxmc / PawletOS * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include #include #include "engine.h" #include "service.h" #include "util.h" using namespace pawlet::hwupdate; namespace { constexpr char kServiceName[] = "pawlet_hwupdate"; constexpr char kDefaultManifest[] = "/system_ext/etc/pawlet/supported_hardware.json"; constexpr char kDefaultServer[] = "https://oxmc.me/apis/aosp/ota.php?mode=hardware"; constexpr char kStateDir[] = "/data/pawlet/hw"; } // namespace int main(int, char**) { android::base::InitLogging(nullptr, android::base::LogdLogger()); LOG(INFO) << "pawlethwd starting"; if (curl_global_init(CURL_GLOBAL_DEFAULT) != 0) { LOG(ERROR) << "pawlethwd: curl_global_init failed"; return 1; } EngineConfig cfg; cfg.manifestPath = util::Prop("ro.pawlet.hardware.manifest", kDefaultManifest); cfg.serverBaseUrl = util::Prop("ro.pawlet.hwupdate.uri", kDefaultServer); cfg.stateDir = kStateDir; cfg.autoApply = util::Prop("persist.pawlet.hwupdate.auto_apply", "true") != "false"; Engine engine(cfg); engine.Start(); android::sp service = android::sp::make(&engine); android::status_t st = android::defaultServiceManager()->addService( android::String16(kServiceName), service); if (st != android::OK) { LOG(ERROR) << "pawlethwd: failed to register service: " << st; return 1; } LOG(INFO) << "pawlethwd: service registered as " << kServiceName; android::ProcessState::self()->startThreadPool(); android::IPCThreadState::self()->joinThreadPool(); engine.Stop(); curl_global_cleanup(); return 0; }