Add fast scrolling through NES database

Fast scrolling skips 30 entries at once.
Also fixed lockup when browsing backwards on first database entry.
This commit is contained in:
sanni 2022-11-01 22:26:53 +01:00
parent a8a78347a7
commit d7082a2366
2 changed files with 52 additions and 21 deletions

View File

@ -4,8 +4,8 @@
This project represents a community-driven effort to provide This project represents a community-driven effort to provide
an easy to build and easy to modify cartridge dumper. an easy to build and easy to modify cartridge dumper.
Date: 31.10.2022 Date: 01.11.2022
Version: 11.1 Version: 11.2
SD lib: https://github.com/greiman/SdFat SD lib: https://github.com/greiman/SdFat
LCD lib: https://github.com/olikraus/u8g2 LCD lib: https://github.com/olikraus/u8g2
@ -57,7 +57,7 @@
**********************************************************************************/ **********************************************************************************/
char ver[5] = "11.1"; char ver[5] = "11.2";
//****************************************** //******************************************
// !!! CHOOSE HARDWARE VERSION !!! // !!! CHOOSE HARDWARE VERSION !!!
@ -677,14 +677,14 @@ void rewind_line(FsFile& readfile, byte count = 1) {
uint32_t position = readfile.curPosition(); uint32_t position = readfile.curPosition();
count++; count++;
for (byte count_newline = 0; count_newline < count; count_newline++) { for (byte count_newline = 0; count_newline < count; count_newline++) {
while (position--) { while (1) {
if (readfile.curPosition() == 0)
break;
readfile.seekCur(-1); readfile.seekCur(-1);
if (readfile.peek() == '\n') if (readfile.peek() == '\n')
break; break;
} }
} }
if (position)
readfile.seekCur(1);
} }
// Calculate CRC32 if needed and compare it to CRC read from database // Calculate CRC32 if needed and compare it to CRC read from database
@ -2730,8 +2730,11 @@ void wait_serial() {
// Read button state // Read button state
int checkButton() { int checkButton() {
#ifdef enable_Button2 #ifdef enable_Button2
if (checkButton2() != 0) byte eventButton2 = checkButton2();
if ((eventButton2 > 0) && (eventButton2 < 2))
return 3; return 3;
else if (eventButton2 > 2)
return 4;
else else
return (checkButton1()); return (checkButton1());
#else #else
@ -2803,7 +2806,7 @@ int checkButton1() {
int checkButton2() { int checkButton2() {
int event = 0; int event = 0;
// Read the state of the button (PD7) // Read the state of the button (PG2)
buttonVal2 = (PING & (1 << 2)); buttonVal2 = (PING & (1 << 2));
// Button pressed down // Button pressed down
if (buttonVal2 == LOW && buttonLast2 == HIGH && (millis() - upTime2) > debounce) { if (buttonVal2 == LOW && buttonLast2 == HIGH && (millis() - upTime2) > debounce) {
@ -2928,15 +2931,18 @@ int checkButton() {
if (buttonState == 0) { if (buttonState == 0) {
unsigned long pushTime = millis(); unsigned long pushTime = millis();
// Wait until button was let go again // Wait until button was let go again
while ((PING & (1 << PING2)) >> PING2 == 0) while ((PING & (1 << PING2)) >> PING2 == 0) {
; // Signal long press delay reached
if ((millis() - pushTime) > 2000)
rgbLed(green_color);
}
lastButtonState = reading; lastButtonState = reading;
// If the hold time was over 10 seconds, super long press for resetting eeprom in about screen // 2 second long press
if (millis() - pushTime > 10000) { if ((millis() - pushTime) > 2000) {
return 4; return 4;
} }
// long press // normal press
else { else {
return 3; return 3;
} }

View File

@ -529,7 +529,6 @@ void getMapping() {
// Filter out all 0xFF checksums at 0x8000 and 0xE000 // Filter out all 0xFF checksums at 0x8000 and 0xE000
if (oldcrc32 == 0xBD7BC39F && oldcrc32MMC3 == 0xBD7BC39F) { if (oldcrc32 == 0xBD7BC39F && oldcrc32MMC3 == 0xBD7BC39F) {
println_Msg(F(""));
println_Msg(F("No data found.")); println_Msg(F("No data found."));
println_Msg(F("Using manual selection")); println_Msg(F("Using manual selection"));
display_Update(); display_Update();
@ -577,6 +576,7 @@ void getMapping() {
selectMapping(database); selectMapping(database);
} }
} }
byte fastScrolling = 1;
// Display database // Display database
while (database.available()) { while (database.available()) {
@ -647,17 +647,25 @@ void getMapping() {
#ifdef global_log #ifdef global_log
// Disable log to prevent unnecessary logging // Disable log to prevent unnecessary logging
println_Log(F("Get Mapping from List")); //println_Log(F("Get Mapping from List"));
dont_log = true; dont_log = true;
#endif #endif
println_Msg(entry.filename); println_Msg(entry.filename);
printNESSettings(); printNESSettings();
#if defined(enable_OLED) #if defined(enable_OLED)
print_STR(press_to_change_STR, 1); print_STR(press_to_change_STR, 0);
print_STR(right_to_select_STR, 1); if (fastScrolling > 1)
println_Msg(F(" (fast)"));
else
println_Msg("");
println_Msg(F("Hold to select"));
#elif defined(enable_LCD) #elif defined(enable_LCD)
print_STR(rotate_to_change_STR, 1); print_STR(rotate_to_change_STR, 0);
print_STR(press_to_select_STR, 1); if (fastScrolling > 1)
println_Msg(F(" (fast)"));
else
println_Msg("");
println_Msg(F("Hold to Select"));
#elif defined(SERIAL_MONITOR) #elif defined(SERIAL_MONITOR)
println_Msg(F("U/D to Change")); println_Msg(F("U/D to Change"));
println_Msg(F("Space to Select")); println_Msg(F("Space to Select"));
@ -673,14 +681,31 @@ void getMapping() {
b = checkButton(); b = checkButton();
} while (b == 0); } while (b == 0);
if (b == 1) if (b == 1) {
// 1: Next record // 1: Next record
if (fastScrolling > 1) {
for (byte skipped = 0; skipped < fastScrolling * 3; skipped++) {
skip_line(&database);
}
}
continue; continue;
}
if (b == 2) { if (b == 2) {
// 2: Previous record // 2: Previous record
if (fastScrolling > 1)
rewind_line(database, fastScrolling * 3 + 3);
else
rewind_line(database, 6); rewind_line(database, 6);
continue; continue;
} }
if (b == 3) {
// 3: Toggle Fast Scrolling
if (fastScrolling == 1)
fastScrolling = 30;
else
fastScrolling = 1;
continue;
}
// anything else: select current record // anything else: select current record
setRomnameFromString(entry.filename); setRomnameFromString(entry.filename);
// Save Mapper // Save Mapper