nsw:dev:kefir_sh
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| nsw:dev:kefir_sh [2022.04.01 12:55:47] – admin | nsw:dev:kefir_sh [2022.04.13 00:47:36] (текущий) – [kefir.cpp] admin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== Kefir refreSH ====== | ====== Kefir refreSH ====== | ||
| + | ===== kefir.sh ===== | ||
| <file bash kefir.sh> | <file bash kefir.sh> | ||
| #!/bin/sh | #!/bin/sh | ||
| kver=123 | kver=123 | ||
| - | echo " | + | if [ -n " |
| - | read kver | + | kver=$1 |
| + | else | ||
| + | | ||
| + | read kver | ||
| + | fi | ||
| user=Atmosphere-NX | user=Atmosphere-NX | ||
| repo=Atmosphere | repo=Atmosphere | ||
| Строка 11: | Строка 16: | ||
| if ! [ -f ./$repo.zip ]; then | if ! [ -f ./$repo.zip ]; then | ||
| git clone --recurse-submodules https:// | git clone --recurse-submodules https:// | ||
| - | | + | # |
| else | else | ||
| unzip ./$repo.zip | unzip ./$repo.zip | ||
| Строка 36: | Строка 41: | ||
| #sed -i ' | #sed -i ' | ||
| - | #... | + | # md5 for 1.3.0 release is fa0f38f14964ec619527832357ec617c |
| + | # md5 for 1.3.1 release is 7d34d689829a6b5d95954b410519beec | ||
| + | if ! [ $(md5sum ./ | ||
| + | echo " | ||
| + | read | ||
| + | fi | ||
| + | rm ./ | ||
| + | cp ../ | ||
| #sed -i ' | #sed -i ' | ||
| Строка 52: | Строка 64: | ||
| sed -i 's/if (g_exfat_supported)/ | sed -i 's/if (g_exfat_supported)/ | ||
| - | #sed -i ' | + | #sed -i ' |
| - | if [ $(wc -c ./ | + | #sed -i ' |
| - | echo "# | + | |
| - | else | + | #sed -i ' |
| - | sed -i ' | + | #sed -i ' |
| - | fi | + | |
| + | #sed -i ' | ||
| + | #if [ $(wc -c ./ | ||
| + | # echo "# | ||
| + | #else | ||
| + | # sed -i ' | ||
| + | #fi | ||
| + | |||
| + | #sed -i ' | ||
| + | sed -i ' | ||
| make | make | ||
| + | </ | ||
| + | ===== kefir.cpp ===== | ||
| + | <file cpp setsys_mitm_service.kef> | ||
| + | /* | ||
| + | * Copyright (c) Atmosphère-NX | ||
| + | * | ||
| + | * This program is free software; you can redistribute it and/or modify it | ||
| + | * under the terms and conditions of the GNU General Public License, | ||
| + | * version 2, as published by the Free Software Foundation. | ||
| + | * | ||
| + | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| + | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| + | * FITNESS FOR A PARTICULAR PURPOSE. | ||
| + | * more details. | ||
| + | * | ||
| + | * You should have received a copy of the GNU General Public License | ||
| + | * along with this program. | ||
| + | */ | ||
| + | #include < | ||
| + | #include " | ||
| + | #include " | ||
| + | |||
| + | namespace ams:: | ||
| + | |||
| + | using namespace ams:: | ||
| + | |||
| + | namespace { | ||
| + | |||
| + | constinit os:: | ||
| + | constinit bool g_cached_firmware_version; | ||
| + | constinit settings:: | ||
| + | constinit settings:: | ||
| + | |||
| + | int g_kfr_firmware_version = 0; | ||
| + | |||
| + | void CacheFirmwareVersion() { | ||
| + | if (AMS_LIKELY(g_cached_firmware_version)) { | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | std:: | ||
| + | |||
| + | if (AMS_UNLIKELY(g_cached_firmware_version)) { | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | /* Mount the SD card. */ | ||
| + | { | ||
| + | if (R_SUCCEEDED(fs:: | ||
| + | ams:: | ||
| + | if (R_SUCCEEDED(fs:: | ||
| + | ON_SCOPE_EXIT { ams:: | ||
| + | |||
| + | /* Get file size. */ | ||
| + | s64 file_size; | ||
| + | R_ABORT_UNLESS(fs:: | ||
| + | |||
| + | /* Allocate kver txt buffer. */ | ||
| + | char *kef_txt = static_cast< | ||
| + | ON_SCOPE_EXIT { std:: | ||
| + | |||
| + | /* Read kver into buffer. */ | ||
| + | R_ABORT_UNLESS(fs:: | ||
| + | kef_txt[file_size] = ' | ||
| + | |||
| + | g_kfr_firmware_version = strtol(kef_txt, | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | /* Mount firmware version data archive. */ | ||
| + | { | ||
| + | R_ABORT_UNLESS(ams:: | ||
| + | ON_SCOPE_EXIT { ams:: | ||
| + | |||
| + | /* Firmware version file must exist. */ | ||
| + | ams:: | ||
| + | R_ABORT_UNLESS(ams:: | ||
| + | ON_SCOPE_EXIT { ams:: | ||
| + | |||
| + | /* Must be possible to read firmware version from file. */ | ||
| + | R_ABORT_UNLESS(ams:: | ||
| + | |||
| + | g_ams_firmware_version = g_firmware_version; | ||
| + | } | ||
| + | |||
| + | /* Modify the atmosphere firmware version to display a custom version string. */ | ||
| + | { | ||
| + | const auto api_info = exosphere:: | ||
| + | const char emummc_char = emummc:: | ||
| + | |||
| + | /* NOTE: We have carefully accounted for the size of the string we print. */ | ||
| + | /* No truncation occurs assuming two-digits for all version number components. */ | ||
| + | char display_version[sizeof(g_ams_firmware_version.display_version)]; | ||
| + | |||
| + | if (g_kfr_firmware_version != 0) | ||
| + | util:: | ||
| + | else | ||
| + | util:: | ||
| + | |||
| + | std:: | ||
| + | } | ||
| + | |||
| + | g_cached_firmware_version = true; | ||
| + | } | ||
| + | |||
| + | Result GetFirmwareVersionImpl(settings:: | ||
| + | /* Ensure that we have the firmware version cached. */ | ||
| + | CacheFirmwareVersion(); | ||
| + | |||
| + | /* We want to give a special firmware version to the home menu title, and nothing else. */ | ||
| + | /* This means Qlaunch + Maintenance Menu, and nothing else. */ | ||
| + | if (client_info.program_id == ncm:: | ||
| + | *out = g_ams_firmware_version; | ||
| + | } else { | ||
| + | *out = g_firmware_version; | ||
| + | } | ||
| + | |||
| + | R_SUCCEED(); | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | Result SetSysMitmService:: | ||
| + | R_TRY(GetFirmwareVersionImpl(out.GetPointer(), | ||
| + | |||
| + | /* GetFirmwareVersion sanitizes the revision fields. */ | ||
| + | out.GetPointer()-> | ||
| + | out.GetPointer()-> | ||
| + | R_SUCCEED(); | ||
| + | } | ||
| + | |||
| + | Result SetSysMitmService:: | ||
| + | R_RETURN(GetFirmwareVersionImpl(out.GetPointer(), | ||
| + | } | ||
| + | |||
| + | Result SetSysMitmService:: | ||
| + | R_TRY_CATCH(settings:: | ||
| + | R_CATCH_RETHROW(sf:: | ||
| + | R_CONVERT_ALL(sm:: | ||
| + | } R_END_TRY_CATCH; | ||
| + | |||
| + | R_SUCCEED(); | ||
| + | } | ||
| + | |||
| + | Result SetSysMitmService:: | ||
| + | R_TRY_CATCH(settings:: | ||
| + | R_CATCH_RETHROW(sf:: | ||
| + | R_CONVERT_ALL(sm:: | ||
| + | } R_END_TRY_CATCH; | ||
| + | |||
| + | R_SUCCEED(); | ||
| + | } | ||
| + | |||
| + | Result SetSysMitmService:: | ||
| + | /* If we're not processing for am, just return the real flag value. */ | ||
| + | R_UNLESS(m_client_info.program_id == ncm:: | ||
| + | |||
| + | /* Retrieve the user configuration. */ | ||
| + | u8 en = 0; | ||
| + | settings:: | ||
| + | |||
| + | out.SetValue(en != 0); | ||
| + | R_SUCCEED(); | ||
| + | } | ||
| + | |||
| + | } | ||
| </ | </ | ||
nsw/dev/kefir_sh.1648817747.txt.gz · Последнее изменение: — admin
