mirror of
https://github.com/d0k3/GodMode9.git
synced 2025-06-26 21:52:48 +00:00
Use software keyboard instead of string input prompt
This commit is contained in:
parent
ee86ffeb03
commit
40b4e3f541
@ -1,7 +1,6 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include "swkbd.h"
|
#include "swkbd.h"
|
||||||
#include "ui.h"
|
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
#include "hid.h"
|
#include "hid.h"
|
||||||
|
|
||||||
@ -246,6 +245,9 @@ bool ShowKeyboard(char* inputstr, const u32 max_size, const char *format, ...) {
|
|||||||
ClearScreen(BOT_SCREEN, COLOR_STD_BG);
|
ClearScreen(BOT_SCREEN, COLOR_STD_BG);
|
||||||
DrawStringF(BOT_SCREEN, str_x, 20, COLOR_STD_FONT, COLOR_STD_BG, "%s", str);
|
DrawStringF(BOT_SCREEN, str_x, 20, COLOR_STD_FONT, COLOR_STD_BG, "%s", str);
|
||||||
|
|
||||||
|
// wait for all keys released
|
||||||
|
while (HID_ReadState() & BUTTON_ANY);
|
||||||
|
|
||||||
// handle keyboard
|
// handle keyboard
|
||||||
u32 uppercase = 0; // 1 -> uppercase once, 2 -> uppercase always
|
u32 uppercase = 0; // 1 -> uppercase once, 2 -> uppercase always
|
||||||
u32 scroll = 0;
|
u32 scroll = 0;
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "ui.h"
|
||||||
|
#include "touchcal.h"
|
||||||
|
|
||||||
|
|
||||||
// special key ids
|
// special key ids
|
||||||
enum {
|
enum {
|
||||||
@ -80,4 +83,6 @@ enum {
|
|||||||
3, 30, 34, 30, 0, \
|
3, 30, 34, 30, 0, \
|
||||||
0
|
0
|
||||||
|
|
||||||
|
|
||||||
|
#define ShowKeyboardOrPrompt (TouchIsCalibrated() ? ShowKeyboard : ShowStringPrompt)
|
||||||
bool ShowKeyboard(char* inputstr, u32 max_size, const char *format, ...);
|
bool ShowKeyboard(char* inputstr, u32 max_size, const char *format, ...);
|
||||||
|
@ -14,11 +14,14 @@ static const HID_CalibrationData default_calib = {
|
|||||||
// so it's better to go with a sane default
|
// so it's better to go with a sane default
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool is_calibrated = false;
|
||||||
|
|
||||||
|
|
||||||
static bool SetCalibrationDefaults(void)
|
static bool SetCalibrationDefaults(void)
|
||||||
{
|
{
|
||||||
// Hardcoding this isn't ideal but it's better than
|
// Hardcoding this isn't ideal but it's better than
|
||||||
// leaving the system without any state to work with
|
// leaving the system without any state to work with
|
||||||
|
is_calibrated = false; // no, this is not proper calibration
|
||||||
return HID_SetCalibrationData(&default_calib, 1, SCREEN_WIDTH_BOT, SCREEN_HEIGHT);
|
return HID_SetCalibrationData(&default_calib, 1, SCREEN_WIDTH_BOT, SCREEN_HEIGHT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +73,8 @@ bool ShowTouchCalibrationDialog(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return HID_SetCalibrationData(calibrations, countof(dot_positions), SCREEN_WIDTH_BOT, SCREEN_HEIGHT);
|
is_calibrated = HID_SetCalibrationData(calibrations, countof(dot_positions), SCREEN_WIDTH_BOT, SCREEN_HEIGHT);
|
||||||
|
return is_calibrated;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CalibrateTouchFromFlash(void) {
|
bool CalibrateTouchFromFlash(void) {
|
||||||
@ -105,6 +109,11 @@ bool CalibrateTouchFromFlash(void) {
|
|||||||
data[i].screen_x = (((int)ts_data[base + 4]) * SCREEN_WIDTH_BOT) / 256;
|
data[i].screen_x = (((int)ts_data[base + 4]) * SCREEN_WIDTH_BOT) / 256;
|
||||||
data[i].screen_y = (((int)ts_data[base + 5]) * SCREEN_HEIGHT) / 192;
|
data[i].screen_y = (((int)ts_data[base + 5]) * SCREEN_HEIGHT) / 192;
|
||||||
}
|
}
|
||||||
|
|
||||||
return HID_SetCalibrationData(data, 2, SCREEN_WIDTH_BOT, SCREEN_HEIGHT);
|
is_calibrated = HID_SetCalibrationData(data, 2, SCREEN_WIDTH_BOT, SCREEN_HEIGHT);
|
||||||
|
return is_calibrated;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TouchIsCalibrated(void) {
|
||||||
|
return is_calibrated;
|
||||||
}
|
}
|
||||||
|
@ -4,3 +4,4 @@
|
|||||||
|
|
||||||
bool ShowTouchCalibrationDialog(void);
|
bool ShowTouchCalibrationDialog(void);
|
||||||
bool CalibrateTouchFromFlash(void);
|
bool CalibrateTouchFromFlash(void);
|
||||||
|
bool TouchIsCalibrated(void);
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "sdmmc.h"
|
#include "sdmmc.h"
|
||||||
#include "ff.h"
|
#include "ff.h"
|
||||||
#include "ui.h"
|
#include "ui.h"
|
||||||
|
#include "swkbd.h"
|
||||||
|
|
||||||
#define SKIP_CUR (1UL<<10)
|
#define SKIP_CUR (1UL<<10)
|
||||||
#define OVERWRITE_CUR (1UL<<11)
|
#define OVERWRITE_CUR (1UL<<11)
|
||||||
@ -625,7 +626,7 @@ bool PathMoveCopy(const char* dest, const char* orig, u32* flags, bool move) {
|
|||||||
|
|
||||||
// check & fix destination == origin
|
// check & fix destination == origin
|
||||||
while (strncasecmp(ldest, lorig, 255) == 0) {
|
while (strncasecmp(ldest, lorig, 255) == 0) {
|
||||||
if (!ShowStringPrompt(dname, 255 - (dname - ldest), "%s\nDestination equals origin\nChoose another name?", deststr))
|
if (!ShowKeyboardOrPrompt(dname, 255 - (dname - ldest), "%s\nDestination equals origin\nChoose another name?", deststr))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -641,7 +642,7 @@ bool PathMoveCopy(const char* dest, const char* orig, u32* flags, bool move) {
|
|||||||
"Destination already exists:\n%s", deststr);
|
"Destination already exists:\n%s", deststr);
|
||||||
if (user_select == 1) {
|
if (user_select == 1) {
|
||||||
do {
|
do {
|
||||||
if (!ShowStringPrompt(dname, 255 - (dname - ldest), "Choose new destination name"))
|
if (!ShowKeyboardOrPrompt(dname, 255 - (dname - ldest), "Choose new destination name"))
|
||||||
return false;
|
return false;
|
||||||
} while (fa_stat(ldest, NULL) == FR_OK);
|
} while (fa_stat(ldest, NULL) == FR_OK);
|
||||||
} else if (user_select == 2) {
|
} else if (user_select == 2) {
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include "memmap.h"
|
#include "memmap.h"
|
||||||
#include "support.h"
|
#include "support.h"
|
||||||
#include "ui.h"
|
#include "ui.h"
|
||||||
|
#include "swkbd.h"
|
||||||
#include "hid.h"
|
#include "hid.h"
|
||||||
#include "swkbd.h"
|
#include "swkbd.h"
|
||||||
#include "touchcal.h"
|
#include "touchcal.h"
|
||||||
@ -450,7 +451,7 @@ u32 SdFormatMenu(const char* slabel) {
|
|||||||
else cluster_size = cluster_size_table[user_select];
|
else cluster_size = cluster_size_table[user_select];
|
||||||
|
|
||||||
snprintf(label, 16, "0:%s", (slabel && *slabel) ? slabel : "GM9SD");
|
snprintf(label, 16, "0:%s", (slabel && *slabel) ? slabel : "GM9SD");
|
||||||
if (!ShowStringPrompt(label + 2, 11 + 1, "Format SD card (%lluMB)?\nEnter label:", sdcard_size_mb))
|
if (!ShowKeyboardOrPrompt(label + 2, 11 + 1, "Format SD card (%lluMB)?\nEnter label:", sdcard_size_mb))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (!FormatSDCard(emunand_size_mb, cluster_size, label)) {
|
if (!FormatSDCard(emunand_size_mb, cluster_size, label)) {
|
||||||
@ -752,7 +753,7 @@ u32 FileHexViewer(const char* path) {
|
|||||||
if (new_offset != (u64) -1) offset = new_offset;
|
if (new_offset != (u64) -1) offset = new_offset;
|
||||||
} else if (user_select == 2) {
|
} else if (user_select == 2) {
|
||||||
if (!found_size) *found_data = 0;
|
if (!found_size) *found_data = 0;
|
||||||
if (ShowStringPrompt((char*) found_data, 64 + 1, "Enter search string below.\n(R+X to repeat search)", (unsigned int) offset)) {
|
if (ShowKeyboardOrPrompt((char*) found_data, 64 + 1, "Enter search string below.\n(R+X to repeat search)", (unsigned int) offset)) {
|
||||||
found_size = strnlen((char*) found_data, 64);
|
found_size = strnlen((char*) found_data, 64);
|
||||||
found_offset = FileFindData(path, found_data, found_size, offset);
|
found_offset = FileFindData(path, found_data, found_size, offset);
|
||||||
if (found_offset == (u32) -1) {
|
if (found_offset == (u32) -1) {
|
||||||
@ -2051,7 +2052,7 @@ u32 GodMode(int entrypoint) {
|
|||||||
AutoEmuNandBase(true);
|
AutoEmuNandBase(true);
|
||||||
InitNandCrypto(true); // (entrypoint != ENTRY_B9S);
|
InitNandCrypto(true); // (entrypoint != ENTRY_B9S);
|
||||||
InitExtFS();
|
InitExtFS();
|
||||||
CalibrateTouchFromFlash(); // !!! this may need some further checking
|
CalibrateTouchFromFlash();
|
||||||
|
|
||||||
// custom font handling
|
// custom font handling
|
||||||
if (CheckSupportFile("font.pbm")) {
|
if (CheckSupportFile("font.pbm")) {
|
||||||
@ -2218,7 +2219,7 @@ u32 GodMode(int entrypoint) {
|
|||||||
char searchstr[256];
|
char searchstr[256];
|
||||||
snprintf(searchstr, 256, (user_select == srch_t) ? "*.tmd" : "*");
|
snprintf(searchstr, 256, (user_select == srch_t) ? "*.tmd" : "*");
|
||||||
TruncateString(namestr, curr_entry->name, 20, 8);
|
TruncateString(namestr, curr_entry->name, 20, 8);
|
||||||
if ((user_select == srch_t) || ShowStringPrompt(searchstr, 256, "Search %s?\nEnter search below.", namestr)) {
|
if ((user_select == srch_t) || ShowKeyboardOrPrompt(searchstr, 256, "Search %s?\nEnter search below.", namestr)) {
|
||||||
SetFSSearch(searchstr, curr_entry->path, (user_select == srch_t));
|
SetFSSearch(searchstr, curr_entry->path, (user_select == srch_t));
|
||||||
snprintf(current_path, 256, "Z:");
|
snprintf(current_path, 256, "Z:");
|
||||||
GetDirContents(current_dir, current_path);
|
GetDirContents(current_dir, current_path);
|
||||||
@ -2469,7 +2470,7 @@ u32 GodMode(int entrypoint) {
|
|||||||
char namestr[20+1];
|
char namestr[20+1];
|
||||||
TruncateString(namestr, curr_entry->name, 20, 12);
|
TruncateString(namestr, curr_entry->name, 20, 12);
|
||||||
snprintf(newname, 255, "%s", curr_entry->name);
|
snprintf(newname, 255, "%s", curr_entry->name);
|
||||||
if (ShowStringPrompt(newname, 256, "Rename %s?\nEnter new name below.", namestr)) {
|
if (ShowKeyboardOrPrompt(newname, 256, "Rename %s?\nEnter new name below.", namestr)) {
|
||||||
if (!PathRename(curr_entry->path, newname))
|
if (!PathRename(curr_entry->path, newname))
|
||||||
ShowPrompt(false, "Failed renaming path:\n%s", namestr);
|
ShowPrompt(false, "Failed renaming path:\n%s", namestr);
|
||||||
else {
|
else {
|
||||||
@ -2486,7 +2487,7 @@ u32 GodMode(int entrypoint) {
|
|||||||
char ename[256];
|
char ename[256];
|
||||||
u64 fsize = 0;
|
u64 fsize = 0;
|
||||||
snprintf(ename, 255, (type == 1) ? "newdir" : "dummy.bin");
|
snprintf(ename, 255, (type == 1) ? "newdir" : "dummy.bin");
|
||||||
if ((ShowStringPrompt(ename, 256, "Create a new %s here?\nEnter name below.", typestr)) &&
|
if ((ShowKeyboardOrPrompt(ename, 256, "Create a new %s here?\nEnter name below.", typestr)) &&
|
||||||
((type != 2) || ((fsize = ShowNumberPrompt(0, "Create a new %s here?\nEnter file size below.", typestr)) != (u64) -1))) {
|
((type != 2) || ((fsize = ShowNumberPrompt(0, "Create a new %s here?\nEnter file size below.", typestr)) != (u64) -1))) {
|
||||||
if (((type == 1) && !DirCreate(current_path, ename)) ||
|
if (((type == 1) && !DirCreate(current_path, ename)) ||
|
||||||
((type == 2) && !FileCreateDummy(current_path, ename, fsize))) {
|
((type == 2) && !FileCreateDummy(current_path, ename, fsize))) {
|
||||||
@ -2514,14 +2515,14 @@ u32 GodMode(int entrypoint) {
|
|||||||
int reboot = ++n_opt;
|
int reboot = ++n_opt;
|
||||||
int scripts = ++n_opt;
|
int scripts = ++n_opt;
|
||||||
int payloads = ++n_opt;
|
int payloads = ++n_opt;
|
||||||
int more = ++n_opt;
|
|
||||||
int test = ++n_opt;
|
int test = ++n_opt;
|
||||||
|
int more = ++n_opt;
|
||||||
if (poweroff > 0) optionstr[poweroff - 1] = "Poweroff system";
|
if (poweroff > 0) optionstr[poweroff - 1] = "Poweroff system";
|
||||||
if (reboot > 0) optionstr[reboot - 1] = "Reboot system";
|
if (reboot > 0) optionstr[reboot - 1] = "Reboot system";
|
||||||
if (scripts > 0) optionstr[scripts - 1] = "Scripts...";
|
if (scripts > 0) optionstr[scripts - 1] = "Scripts...";
|
||||||
if (payloads > 0) optionstr[payloads - 1] = "Payloads...";
|
if (payloads > 0) optionstr[payloads - 1] = "Payloads...";
|
||||||
if (more > 0) optionstr[more - 1] = "More...";
|
|
||||||
if (test > 0) optionstr[test - 1] = "Testing...";
|
if (test > 0) optionstr[test - 1] = "Testing...";
|
||||||
|
if (more > 0) optionstr[more - 1] = "More...";
|
||||||
|
|
||||||
int user_select = 0;
|
int user_select = 0;
|
||||||
while ((user_select = ShowSelectPrompt(n_opt, optionstr, "%s button pressed.\nSelect action:", buttonstr)) &&
|
while ((user_select = ShowSelectPrompt(n_opt, optionstr, "%s button pressed.\nSelect action:", buttonstr)) &&
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "sha.h"
|
#include "sha.h"
|
||||||
#include "hid.h"
|
#include "hid.h"
|
||||||
#include "ui.h"
|
#include "ui.h"
|
||||||
|
#include "swkbd.h"
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
#include "ips.h"
|
#include "ips.h"
|
||||||
#include "bps.h"
|
#include "bps.h"
|
||||||
@ -1012,7 +1013,7 @@ bool run_cmd(cmd_id id, u32 flags, char** argv, char* err_str) {
|
|||||||
char* var = get_var(argv[1], NULL);
|
char* var = get_var(argv[1], NULL);
|
||||||
strncpy(input, var, _VAR_CNT_LEN);
|
strncpy(input, var, _VAR_CNT_LEN);
|
||||||
input[_VAR_CNT_LEN - 1] = '\0';
|
input[_VAR_CNT_LEN - 1] = '\0';
|
||||||
ret = ShowStringPrompt(input, _VAR_CNT_LEN, "%s", argv[0]);
|
ret = ShowKeyboardOrPrompt(input, _VAR_CNT_LEN, "%s", argv[0]);
|
||||||
if (ret) set_var(argv[1], "");
|
if (ret) set_var(argv[1], "");
|
||||||
if (err_str) snprintf(err_str, _ERR_STR_LEN, "user abort");
|
if (err_str) snprintf(err_str, _ERR_STR_LEN, "user abort");
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user