diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2022-03-20 13:07:39 +0000 |
---|---|---|
committer | Aidan MacDonald <amachronic@protonmail.com> | 2022-03-25 21:36:51 +0000 |
commit | 5160c90690c6c3881eec1aa7392d1473c9f865b3 (patch) | |
tree | 14acd9467c4d9bbb90c91c864fa8f2323987a6c9 | |
parent | 4cf36dfbf37edeb3f537296bb532008b8f206455 (diff) | |
download | rockbox-5160c90690c6c3881eec1aa7392d1473c9f865b3.tar.gz rockbox-5160c90690c6c3881eec1aa7392d1473c9f865b3.zip |
x1000: bootloader: add screenshot function
Screenshots of the recovery menu will be useful for documentation.
This can be disabled by turning off HAVE_BOOTLOADER_SCREENDUMP in
the target config file if the bootloader should ever run up against
max size limits.
Change-Id: I62ec1e465df2ca7a8a0e78625d88b31f6c4ef078
-rw-r--r-- | bootloader/x1000/gui.c | 15 | ||||
-rw-r--r-- | bootloader/x1000/recovery.c | 3 | ||||
-rw-r--r-- | bootloader/x1000/utils.c | 22 | ||||
-rw-r--r-- | bootloader/x1000/x1000bootloader.h | 8 | ||||
-rw-r--r-- | firmware/export/config/erosqnative.h | 1 | ||||
-rw-r--r-- | firmware/export/config/fiiom3k.h | 1 | ||||
-rw-r--r-- | firmware/export/config/shanlingq1.h | 1 |
7 files changed, 47 insertions, 4 deletions
diff --git a/bootloader/x1000/gui.c b/bootloader/x1000/gui.c index 513a3cb9cb..1208d3c161 100644 --- a/bootloader/x1000/gui.c +++ b/bootloader/x1000/gui.c | |||
@@ -122,10 +122,17 @@ void splashf(long delay, const char* msg, ...) | |||
122 | int get_button(int timeout) | 122 | int get_button(int timeout) |
123 | { | 123 | { |
124 | int btn = button_get_w_tmo(timeout); | 124 | int btn = button_get_w_tmo(timeout); |
125 | if(btn == SYS_USB_CONNECTED) | 125 | switch(btn) { |
126 | is_usb_connected = true; | 126 | case SYS_USB_CONNECTED: |
127 | else if(btn == SYS_USB_DISCONNECTED) | 127 | case SYS_USB_DISCONNECTED: |
128 | is_usb_connected = false; | 128 | is_usb_connected = (btn == SYS_USB_CONNECTED); |
129 | break; | ||
130 | #ifdef HAVE_SCREENDUMP | ||
131 | case BL_SCREENSHOT: | ||
132 | screenshot(); | ||
133 | break; | ||
134 | #endif | ||
135 | } | ||
129 | 136 | ||
130 | return btn; | 137 | return btn; |
131 | } | 138 | } |
diff --git a/bootloader/x1000/recovery.c b/bootloader/x1000/recovery.c index d70c3b9305..c53fa376b9 100644 --- a/bootloader/x1000/recovery.c +++ b/bootloader/x1000/recovery.c | |||
@@ -65,6 +65,9 @@ static const struct menuitem recovery_items[] = { | |||
65 | 65 | ||
66 | static const struct menuitem debug_menu_items[] = { | 66 | static const struct menuitem debug_menu_items[] = { |
67 | {MENUITEM_HEADING, "Debug tools", NULL}, | 67 | {MENUITEM_HEADING, "Debug tools", NULL}, |
68 | #ifdef HAVE_SCREENDUMP | ||
69 | {MENUITEM_ACTION, "Enable screenshots", &screenshot_enable}, | ||
70 | #endif | ||
68 | #ifdef OF_PLAYER_ADDR | 71 | #ifdef OF_PLAYER_ADDR |
69 | {MENUITEM_ACTION, "Dump OF player", &dump_of_player}, | 72 | {MENUITEM_ACTION, "Dump OF player", &dump_of_player}, |
70 | #endif | 73 | #endif |
diff --git a/bootloader/x1000/utils.c b/bootloader/x1000/utils.c index 629a2c6280..4d3fb69e57 100644 --- a/bootloader/x1000/utils.c +++ b/bootloader/x1000/utils.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include "rb-loader.h" | 29 | #include "rb-loader.h" |
30 | #include "loader_strerror.h" | 30 | #include "loader_strerror.h" |
31 | #include "linuxboot.h" | 31 | #include "linuxboot.h" |
32 | #include "screendump.h" | ||
32 | #include "nand-x1000.h" | 33 | #include "nand-x1000.h" |
33 | 34 | ||
34 | /* Set to true if a SYS_USB_CONNECTED event is seen | 35 | /* Set to true if a SYS_USB_CONNECTED event is seen |
@@ -37,6 +38,8 @@ | |||
37 | * TODO: this is an ugly kludge */ | 38 | * TODO: this is an ugly kludge */ |
38 | bool is_usb_connected = false; | 39 | bool is_usb_connected = false; |
39 | 40 | ||
41 | static bool screenshot_enabled = false; | ||
42 | |||
40 | /* this is both incorrect and incredibly racy... */ | 43 | /* this is both incorrect and incredibly racy... */ |
41 | int check_disk(bool wait) | 44 | int check_disk(bool wait) |
42 | { | 45 | { |
@@ -75,6 +78,25 @@ void usb_mode(void) | |||
75 | splashf(3*HZ, "USB disconnected"); | 78 | splashf(3*HZ, "USB disconnected"); |
76 | } | 79 | } |
77 | 80 | ||
81 | void screenshot(void) | ||
82 | { | ||
83 | #ifdef HAVE_SCREENDUMP | ||
84 | if(!screenshot_enabled || check_disk(false) != DISK_PRESENT) | ||
85 | return; | ||
86 | |||
87 | screen_dump(); | ||
88 | #endif | ||
89 | } | ||
90 | |||
91 | void screenshot_enable(void) | ||
92 | { | ||
93 | #ifdef HAVE_SCREENDUMP | ||
94 | splashf(3*HZ, "Screenshots enabled\nPress %s for screenshot", | ||
95 | BL_SCREENSHOT_NAME); | ||
96 | screenshot_enabled = true; | ||
97 | #endif | ||
98 | } | ||
99 | |||
78 | int load_rockbox(const char* filename, size_t* sizep) | 100 | int load_rockbox(const char* filename, size_t* sizep) |
79 | { | 101 | { |
80 | if(check_disk(true) != DISK_PRESENT) | 102 | if(check_disk(true) != DISK_PRESENT) |
diff --git a/bootloader/x1000/x1000bootloader.h b/bootloader/x1000/x1000bootloader.h index f6231bbd54..0886e6f6b5 100644 --- a/bootloader/x1000/x1000bootloader.h +++ b/bootloader/x1000/x1000bootloader.h | |||
@@ -36,10 +36,12 @@ struct uimage_header; | |||
36 | # define BL_DOWN BUTTON_VOL_DOWN | 36 | # define BL_DOWN BUTTON_VOL_DOWN |
37 | # define BL_SELECT BUTTON_PLAY | 37 | # define BL_SELECT BUTTON_PLAY |
38 | # define BL_QUIT BUTTON_POWER | 38 | # define BL_QUIT BUTTON_POWER |
39 | # define BL_SCREENSHOT_NAME BUTTON_MENU | ||
39 | # define BL_UP_NAME "VOL+" | 40 | # define BL_UP_NAME "VOL+" |
40 | # define BL_DOWN_NAME "VOL-" | 41 | # define BL_DOWN_NAME "VOL-" |
41 | # define BL_SELECT_NAME "PLAY" | 42 | # define BL_SELECT_NAME "PLAY" |
42 | # define BL_QUIT_NAME "POWER" | 43 | # define BL_QUIT_NAME "POWER" |
44 | # define BL_SCREENSHOT_NAME "MENU" | ||
43 | # define BOOTBACKUP_FILE "/fiiom3k-boot.bin" | 45 | # define BOOTBACKUP_FILE "/fiiom3k-boot.bin" |
44 | # define OF_PLAYER_NAME "FiiO player" | 46 | # define OF_PLAYER_NAME "FiiO player" |
45 | # define OF_PLAYER_ADDR 0x20000 | 47 | # define OF_PLAYER_ADDR 0x20000 |
@@ -63,10 +65,12 @@ struct uimage_header; | |||
63 | # define BL_DOWN BUTTON_NEXT | 65 | # define BL_DOWN BUTTON_NEXT |
64 | # define BL_SELECT BUTTON_PLAY | 66 | # define BL_SELECT BUTTON_PLAY |
65 | # define BL_QUIT BUTTON_POWER | 67 | # define BL_QUIT BUTTON_POWER |
68 | # define BL_SCREENSHOT BUTTON_TOPLEFT | ||
66 | # define BL_UP_NAME "PREV" | 69 | # define BL_UP_NAME "PREV" |
67 | # define BL_DOWN_NAME "NEXT" | 70 | # define BL_DOWN_NAME "NEXT" |
68 | # define BL_SELECT_NAME "PLAY" | 71 | # define BL_SELECT_NAME "PLAY" |
69 | # define BL_QUIT_NAME "POWER" | 72 | # define BL_QUIT_NAME "POWER" |
73 | # define BL_SCREENSHOT_NAME "TOPLEFT" | ||
70 | # define BOOTBACKUP_FILE "/shanlingq1-boot.bin" | 74 | # define BOOTBACKUP_FILE "/shanlingq1-boot.bin" |
71 | # define OF_PLAYER_NAME "Shanling player" | 75 | # define OF_PLAYER_NAME "Shanling player" |
72 | # define OF_PLAYER_ADDR 0x140000 | 76 | # define OF_PLAYER_ADDR 0x140000 |
@@ -84,10 +88,12 @@ struct uimage_header; | |||
84 | # define BL_DOWN BUTTON_SCROLL_FWD | 88 | # define BL_DOWN BUTTON_SCROLL_FWD |
85 | # define BL_SELECT BUTTON_PLAY | 89 | # define BL_SELECT BUTTON_PLAY |
86 | # define BL_QUIT BUTTON_POWER | 90 | # define BL_QUIT BUTTON_POWER |
91 | # define BL_SCREENSHOT BUTTON_MENU | ||
87 | # define BL_UP_NAME "Up" | 92 | # define BL_UP_NAME "Up" |
88 | # define BL_DOWN_NAME "Scroll Down" | 93 | # define BL_DOWN_NAME "Scroll Down" |
89 | # define BL_SELECT_NAME "PLAY" | 94 | # define BL_SELECT_NAME "PLAY" |
90 | # define BL_QUIT_NAME "POWER" | 95 | # define BL_QUIT_NAME "POWER" |
96 | # define BL_SCREENSHOT_NAME "MENU" | ||
91 | # define BOOTBACKUP_FILE "/erosqnative-boot.bin" | 97 | # define BOOTBACKUP_FILE "/erosqnative-boot.bin" |
92 | #else | 98 | #else |
93 | # error "Missing keymap!" | 99 | # error "Missing keymap!" |
@@ -160,6 +166,8 @@ enum { | |||
160 | 166 | ||
161 | int check_disk(bool wait); | 167 | int check_disk(bool wait); |
162 | void usb_mode(void); | 168 | void usb_mode(void); |
169 | void screenshot(void); | ||
170 | void screenshot_enable(void); | ||
163 | 171 | ||
164 | int load_rockbox(const char* filename, size_t* sizep); | 172 | int load_rockbox(const char* filename, size_t* sizep); |
165 | int load_uimage_file(const char* filename, | 173 | int load_uimage_file(const char* filename, |
diff --git a/firmware/export/config/erosqnative.h b/firmware/export/config/erosqnative.h index a76e8f6426..3b83d52c0e 100644 --- a/firmware/export/config/erosqnative.h +++ b/firmware/export/config/erosqnative.h | |||
@@ -136,3 +136,4 @@ | |||
136 | #define HAVE_TAGCACHE | 136 | #define HAVE_TAGCACHE |
137 | #define HAVE_QUICKSCREEN | 137 | #define HAVE_QUICKSCREEN |
138 | #define HAVE_HOTKEY | 138 | #define HAVE_HOTKEY |
139 | #define HAVE_BOOTLOADER_SCREENDUMP | ||
diff --git a/firmware/export/config/fiiom3k.h b/firmware/export/config/fiiom3k.h index baf4cf4660..27aefc374f 100644 --- a/firmware/export/config/fiiom3k.h +++ b/firmware/export/config/fiiom3k.h | |||
@@ -144,3 +144,4 @@ | |||
144 | #define HAVE_HOTKEY | 144 | #define HAVE_HOTKEY |
145 | #define HAVE_LOCKED_ACTIONS | 145 | #define HAVE_LOCKED_ACTIONS |
146 | #define AB_REPEAT_ENABLE | 146 | #define AB_REPEAT_ENABLE |
147 | #define HAVE_BOOTLOADER_SCREENDUMP | ||
diff --git a/firmware/export/config/shanlingq1.h b/firmware/export/config/shanlingq1.h index 1355c1824e..222427716f 100644 --- a/firmware/export/config/shanlingq1.h +++ b/firmware/export/config/shanlingq1.h | |||
@@ -128,3 +128,4 @@ | |||
128 | #define HAVE_QUICKSCREEN | 128 | #define HAVE_QUICKSCREEN |
129 | #define HAVE_HOTKEY | 129 | #define HAVE_HOTKEY |
130 | #define AB_REPEAT_ENABLE | 130 | #define AB_REPEAT_ENABLE |
131 | #define HAVE_BOOTLOADER_SCREENDUMP | ||