diff --git a/AndroidBoard.mk b/AndroidBoard.mk index 148133c..0662dbf 100644 --- a/AndroidBoard.mk +++ b/AndroidBoard.mk @@ -33,3 +33,17 @@ $(CEC_XML_SYMLINK): $(LOCAL_INSTALLED_MODULE) $(hide) ln -sf /data/vendor/permissions/android.hardware.hdmi.cec.xml $@ ALL_DEFAULT_INSTALLED_MODULES += $(CEC_XML_SYMLINK) + +LPFLASH := $(HOST_OUT_EXECUTABLES)/lpflash$(HOST_EXECUTABLE_SUFFIX) +INSTALLED_SUPERIMAGE_DUMMY_TARGET := $(PRODUCT_OUT)/super_dummy.img + +$(INSTALLED_SUPERIMAGE_DUMMY_TARGET): $(PRODUCT_OUT)/super_empty.img $(LPFLASH) + $(call pretty,"Target dummy super image: $@") + $(hide) touch $@ + $(hide) echo $(CURDIR) + $(hide) $(LPFLASH) $(CURDIR)/$@ $(CURDIR)/$(PRODUCT_OUT)/super_empty.img + +.PHONY: super_dummyimage +super_dummyimage: $(INSTALLED_SUPERIMAGE_DUMMY_TARGET) + +INSTALLED_RADIOIMAGE_TARGET += $(INSTALLED_SUPERIMAGE_DUMMY_TARGET) diff --git a/BoardConfig.mk b/BoardConfig.mk index 7f859a9..48514ec 100644 --- a/BoardConfig.mk +++ b/BoardConfig.mk @@ -76,6 +76,7 @@ TARGET_RECOVERY_PIXEL_FORMAT := BGRA_8888 # Releasetools TARGET_RELEASETOOLS_EXTENSIONS := device/nintendo/nx/releasetools +TARGET_RECOVERY_UPDATER_LIBS += librecovery_updater_nx # Security Patch Level VENDOR_SECURITY_PATCH := 2022-04-05 diff --git a/recovery/Android.mk b/recovery/Android.mk new file mode 100644 index 0000000..ddef61c --- /dev/null +++ b/recovery/Android.mk @@ -0,0 +1,23 @@ +# +# Copyright (C) 2024 The LineageOS Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_MODULE := librecovery_updater_nx +LOCAL_SRC_FILES := recovery_updater.cpp +LOCAL_STATIC_LIBRARIES += libedify libotautil libbase +include $(BUILD_STATIC_LIBRARY) diff --git a/recovery/recovery_updater.cpp b/recovery/recovery_updater.cpp new file mode 100644 index 0000000..fe7a5f8 --- /dev/null +++ b/recovery/recovery_updater.cpp @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: Apache-2.0 +/** + * @name recovery_updater.cpp + * @author Thomas Makin + * @brief NX-specific edify updater command additions. + * @copyright 2024 The LineageOS Project + */ + +#include +#include +#include + +#include + +#include "edify/expr.h" +#include "otautil/error_code.h" + +#define MAGIC_OFFSET 4096 +#define MAGIC_SZ 4 +#define MAGIC "gDla" // 67446c61 + +Value *CheckSuperFn(const char *name, State *state, + [[maybe_unused]] const std::vector> &argv) +{ + FILE *fd = fopen("/dev/block/by-name/super", "r"); + char read_magic[MAGIC_SZ+1]; + + if(!fd) + return ErrorAbort(state, kArgsParsingFailure, "%s(): Failed to get file", name); + + fseek(fd, MAGIC_OFFSET, SEEK_SET); + fgets(read_magic, (MAGIC_SZ + 1), fd); + + LOG(INFO) << name << ": magic read from file: " << read_magic; + + fclose(fd); + + if(!strcmp(read_magic, MAGIC)) + return StringValue("SUCCESS"); + + return StringValue(""); +} + +void Register_librecovery_updater_nx() +{ + RegisterFunction("nx.check_super", CheckSuperFn); +} diff --git a/releasetools/releasetools.py b/releasetools/releasetools.py index b93edc4..12f2f95 100644 --- a/releasetools/releasetools.py +++ b/releasetools/releasetools.py @@ -20,6 +20,7 @@ import re import os DTB_PART = '/dev/block/by-name/dtb' +SUPER_PART = '/dev/block/by-name/super' NX_FILES = '/mnt/vendor/hos_data' NX_BL_VERSION = '2022.10-g4f111ee6dc'