diff --git a/examples/LinkCard_demo/#loader/src/main.c b/examples/LinkCard_demo/#loader/src/main.c index 6ab011f..b6106a6 100644 --- a/examples/LinkCard_demo/#loader/src/main.c +++ b/examples/LinkCard_demo/#loader/src/main.c @@ -42,7 +42,6 @@ const char* MSG_SCAN_CARD = "Scan a card!"; const char* MSG_TRANSFERRING = "Transferring..."; const char* MSG_CARD_SENT = "Card sent!"; const char* MSG_ERROR = "Error!"; -const char* MSG_PRESS_A_TRY_AGAIN = "Press A to try again"; const char* MSG_PRESS_B_CANCEL = "Press B to cancel"; #endif @@ -111,17 +110,13 @@ int main() { print(MSG_SCAN_CARD); // scan card - while (true) { - if (cancel()) - goto abort; - if (!sendAndExpect(EREADER_READY, GAME_READY, cancel)) - goto abort; - u32 resultCode = ERAPI_ScanDotCode((u32)card); - if (resultCode == SCAN_SUCCESS) { - break; - } else - goto error; - } + if (cancel()) + goto abort; + if (!sendAndExpect(EREADER_READY, GAME_READY, cancel)) + goto abort; + u32 resultCode = ERAPI_ScanDotCode((u32)card); + if (resultCode != SCAN_SUCCESS) + goto error; // "Transferring..." print(MSG_TRANSFERRING); @@ -164,12 +159,9 @@ int main() { // "Error!" ERAPI_ClearRegion(region); ERAPI_DrawText(region, 0, 0, MSG_ERROR); - ERAPI_DrawText(region, 0, 16, MSG_PRESS_A_TRY_AGAIN); + ERAPI_DrawText(region, 0, 16, MSG_WAITING_GAME); ERAPI_RenderFrame(1); - while (!tryAgain()) - ERAPI_RenderFrame(1); - send(EREADER_CANCEL, cancel); send(EREADER_ANIMATING, cancel); send(EREADER_SIO_END, cancel); diff --git a/examples/LinkCard_demo/gbfs_files/jap.loader b/examples/LinkCard_demo/gbfs_files/jap.loader index 4eee2f3..c676b2c 100644 Binary files a/examples/LinkCard_demo/gbfs_files/jap.loader and b/examples/LinkCard_demo/gbfs_files/jap.loader differ diff --git a/examples/LinkCard_demo/gbfs_files/usa.loader b/examples/LinkCard_demo/gbfs_files/usa.loader index 511439a..9921a9a 100644 Binary files a/examples/LinkCard_demo/gbfs_files/usa.loader and b/examples/LinkCard_demo/gbfs_files/usa.loader differ diff --git a/lib/LinkCard.hpp b/lib/LinkCard.hpp index fe4ec1d..d53f664 100644 --- a/lib/LinkCard.hpp +++ b/lib/LinkCard.hpp @@ -107,6 +107,7 @@ class LinkCard { WRONG_DEVICE, BAD_CHECKSUM, UNEXPECTED_FAILURE, + SCAN_ERROR }; /** @@ -276,7 +277,7 @@ class LinkCard { EREADER_READY, cancel)) return ReceiveResult::CANCELED; if (transferMultiAndExpectOneOf(EREADER_ANIMATING, EREADER_ANIMATING, - EREADER_READY, cancel) == -1) + EREADER_READY, cancel) < 0) return ReceiveResult::CANCELED; // wait for card @@ -285,6 +286,8 @@ class LinkCard { if ((received = transferMultiAndExpectOneOf( GAME_READY, EREADER_READY, EREADER_SEND_READY, cancel)) == -1) return ReceiveResult::CANCELED; + if (received == -2) + return ReceiveResult::SCAN_ERROR; if (received == EREADER_SEND_READY) break; } @@ -339,8 +342,10 @@ class LinkCard { u16 received; do { received = transferMulti(value, cancel); - if (cancel() || received == EREADER_CANCEL) + if (cancel()) return -1; + if (received == EREADER_CANCEL) + return -2; } while (received != expected1 && received != expected2); return received; diff --git a/lib/c_bindings/C_LinkCard.h b/lib/c_bindings/C_LinkCard.h index 26b3463..7d3fa1d 100644 --- a/lib/c_bindings/C_LinkCard.h +++ b/lib/c_bindings/C_LinkCard.h @@ -33,7 +33,8 @@ typedef enum { C_LINK_CARD_RECEIVE_RESULT_CANCELED, C_LINK_CARD_RECEIVE_RESULT_WRONG_DEVICE, C_LINK_CARD_RECEIVE_RESULT_BAD_CHECKSUM, - C_LINK_CARD_RECEIVE_RESULT_UNEXPECTED_FAILURE + C_LINK_CARD_RECEIVE_RESULT_UNEXPECTED_FAILURE, + C_LINK_CARD_RECEIVE_RESULT_SCAN_ERROR } C_LinkCard_ReceiveResult; C_LinkCardHandle C_LinkCard_createDefault();