From 3a2da4c1ab75319dabad52f7ee173c2500596ccd Mon Sep 17 00:00:00 2001 From: Mauro Vietri Date: Wed, 31 May 2023 00:27:15 -0300 Subject: [PATCH] Merge: Tool to enable/disable ADB --- makefile | 3 + skeleton/BASE/Screenshots/.keep | 0 .../Tools/rg35xx/Toggle ADB.pak/launch.sh | 5 ++ src/boot/boot.sh | 10 +-- src/common/api.c | 30 ++++++--- src/common/api.h | 2 + src/common/defines.h | 1 + src/toggle_adb/makefile | 15 +++++ src/toggle_adb/toggle_adb.c | 67 +++++++++++++++++++ 9 files changed, 118 insertions(+), 15 deletions(-) create mode 100644 skeleton/BASE/Screenshots/.keep create mode 100755 skeleton/EXTRAS/Tools/rg35xx/Toggle ADB.pak/launch.sh create mode 100644 src/toggle_adb/makefile create mode 100644 src/toggle_adb/toggle_adb.c diff --git a/makefile b/makefile index 2173986..ac81fb2 100644 --- a/makefile +++ b/makefile @@ -45,6 +45,7 @@ all-cores: tools: cd ./src/clock && make cd ./src/clear_recent && make + cd ./src/toggle_adb && make cd ./other/DinguxCommander && make -j bundle: @@ -73,6 +74,7 @@ bundle: cp ./src/minui/minui.elf ./build/SYSTEM/rg35xx/paks/MinUI.pak cp ./src/clock/clock.elf ./build/EXTRAS/Tools/rg35xx/Clock.pak cp ./src/clear_recent/clear_recent.elf "./build/EXTRAS/Tools/rg35xx/Clear Recently Played.pak" + cp ./src/toggle_adb/toggle_adb.elf "./build/EXTRAS/Tools/rg35xx/Toggle ADB.pak" # stock cores cp ./cores/output/fceumm_libretro.so ./build/SYSTEM/rg35xx/cores @@ -131,4 +133,5 @@ clean: cd ./cores && make clean cd ./src/clock && make clean cd ./src/clear_recent && make clean + cd ./src/toggle_adb && make clean cd ./other/DinguxCommander && make clean diff --git a/skeleton/BASE/Screenshots/.keep b/skeleton/BASE/Screenshots/.keep new file mode 100644 index 0000000..e69de29 diff --git a/skeleton/EXTRAS/Tools/rg35xx/Toggle ADB.pak/launch.sh b/skeleton/EXTRAS/Tools/rg35xx/Toggle ADB.pak/launch.sh new file mode 100755 index 0000000..4a2e896 --- /dev/null +++ b/skeleton/EXTRAS/Tools/rg35xx/Toggle ADB.pak/launch.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +PATH=$(dirname "$0") +cd "$PATH" +./toggle_adb.elf diff --git a/src/boot/boot.sh b/src/boot/boot.sh index 00cdb4b..43c87f5 100755 --- a/src/boot/boot.sh +++ b/src/boot/boot.sh @@ -1,10 +1,5 @@ #!/system/bin/sh -# Enable Android Debug Bridge -if [ -f /misc/enableADB ]; then - /usbdbg.sh device -fi - echo 0xF > /sys/devices/system/cpu/autoplug/plug_mask TF1_PATH=/mnt/mmc # ROMS partition @@ -31,6 +26,11 @@ if [ $? -ne 0 ]; then fi fi +# Enable Android Debug Bridge +if [ -f /mnt/mmc/enableADB ]; then + /usbdbg.sh device +fi + if [ -d ${TF1_PATH}${SYSTEM_FRAG} ] || [ -f ${TF1_PATH}${UPDATE_FRAG} ]; then if [ ! -L $TF2_PATH ]; then # .system found on TF1 but TF2 is present diff --git a/src/common/api.c b/src/common/api.c index a2e8364..c816c16 100644 --- a/src/common/api.c +++ b/src/common/api.c @@ -1560,24 +1560,34 @@ void POW_update(int* _dirty, int* _show_setting, POW_callback_t before_sleep, PO void POW_disablePowerOff(void) { pow.can_poweroff = 0; } +void POW_sync(char* msg) { + GFX_clear(gfx.screen); + GFX_blitMessage(font.large, msg, gfx.screen, NULL); + GFX_flip(gfx.screen); + + system("sync"); + system("echo s > /proc/sysrq-trigger"); + system("echo u > /proc/sysrq-trigger"); + system("sync"); + + sleep(2); +} void POW_powerOff(void) { if (pow.can_poweroff) { char* msg = exists(AUTO_RESUME_PATH) ? "Quicksave created,\npowering off" : "Powering off"; - GFX_clear(gfx.screen); - GFX_blitMessage(font.large, msg, gfx.screen, NULL); - GFX_flip(gfx.screen); - - system("sync"); - system("echo s > /proc/sysrq-trigger"); - system("echo u > /proc/sysrq-trigger"); - system("sync"); - - sleep(2); + POW_sync(msg); // actual shutdown system("echo o > /proc/sysrq-trigger"); } } +void POW_reboot(void) { + char* msg = "Rebooting"; + POW_sync(msg); + + // trigger reboot + system("echo b > /proc/sysrq-trigger"); +} #define BACKLIGHT_PATH "/sys/class/backlight/backlight.2/bl_power" diff --git a/src/common/api.h b/src/common/api.h index b09428c..857628a 100644 --- a/src/common/api.h +++ b/src/common/api.h @@ -220,8 +220,10 @@ void POW_warn(int enable); void POW_update(int* dirty, int* show_setting, POW_callback_t before_sleep, POW_callback_t after_sleep); +void POW_sync(char* msg); void POW_disablePowerOff(void); void POW_powerOff(void); +void POW_reboot(void); void POW_fauxSleep(void); void POW_disableAutosleep(void); diff --git a/src/common/defines.h b/src/common/defines.h index a2b61b7..c8c405c 100644 --- a/src/common/defines.h +++ b/src/common/defines.h @@ -61,6 +61,7 @@ #define COLLECTIONS_PATH SDCARD_PATH "/Collections" #define BATTERY_PATH SDCARD_PATH "/battery.txt" #define SCREENSHOTS_PATH SDCARD_PATH "/Screenshots" +#define ADB_FLAG_PATH SDCARD_PATH "/enableADB" #define LAST_PATH "/tmp/last.txt" // transient #define CHANGE_DISC_PATH "/tmp/change_disc.txt" diff --git a/src/toggle_adb/makefile b/src/toggle_adb/makefile new file mode 100644 index 0000000..00f4dd7 --- /dev/null +++ b/src/toggle_adb/makefile @@ -0,0 +1,15 @@ +ifeq (,$(CROSS_COMPILE)) +$(error missing CROSS_COMPILE for this toolchain) +endif + +TARGET = toggle_adb + +CC = $(CROSS_COMPILE)gcc +CFLAGS = -Os -marm -mtune=cortex-a9 -mfpu=neon-fp16 -mfloat-abi=hard -march=armv7-a -fomit-frame-pointer +CFLAGS += -I. -I../common -DPLATFORM=\"$(UNION_PLATFORM)\" +LDFLAGS = -ldl -lSDL -lSDL_image -lSDL_ttf -lmsettings -lpthread + +all: + $(CC) $(TARGET).c ../common/utils.c ../common/api.c -o $(TARGET).elf $(CFLAGS) $(LDFLAGS) +clean: + rm -f $(TARGET).elf diff --git a/src/toggle_adb/toggle_adb.c b/src/toggle_adb/toggle_adb.c new file mode 100644 index 0000000..9381fff --- /dev/null +++ b/src/toggle_adb/toggle_adb.c @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include + +#include "defines.h" +#include "utils.h" +#include "api.h" + +int main(int argc, char* argv[]) { + POW_setCPUSpeed(CPU_SPEED_MENU); + + SDL_Surface* screen = GFX_init(MODE_MAIN); + POW_init(); + InitSettings(); + + SDL_Event event; + int quit = 0; + int save_changes = 0; + int adb_enabled = 0; + + // Show confirmation message + // GFX_blitHardwareGroup(screen, show_setting); + FILE *file = fopen(ADB_FLAG_PATH, "r"); + if (file) { + adb_enabled = 1; + GFX_blitMessage(font.large, "ADB is currently enabled\nDisable and reboot?", screen, NULL); + GFX_blitButtonGroup((char*[]){ "B","CANCEL", "A","DISABLE", NULL }, screen, 1); + } else { + GFX_blitMessage(font.large, "ADB is not enabled\nEnable and reboot?", screen, NULL); + GFX_blitButtonGroup((char*[]){ "B","CANCEL", "A","ENABLE", NULL }, screen, 1); + } + + GFX_flip(screen); + + // Wait for user's input + while (!quit) { + PAD_poll(); + if (PAD_justPressed(BTN_A)) { + save_changes = 1; + quit = 1; + } else if (PAD_justPressed(BTN_B)) { + quit = 1; + } else { + GFX_sync(); + } + } + + // Execute main program based on user's input + if (save_changes) { + if (!adb_enabled){ + fclose(fopen(ADB_FLAG_PATH, "w")); + } else { + remove(ADB_FLAG_PATH); + } + LOG_info("Rebooting to save changes\n"); + POW_reboot(); + } + + QuitSettings(); + POW_quit(); + GFX_quit(); + + return EXIT_SUCCESS; +}