mirror of
https://github.com/sanni/cartreader.git
synced 2024-11-23 21:19:16 +01:00
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:
parent
a8a78347a7
commit
d7082a2366
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user