Fixing LinkCard tutorial

This commit is contained in:
Rodrigo Alfonso
2025-02-17 21:36:49 -03:00
parent a10d4c6f65
commit ea515ab1d4
3 changed files with 27 additions and 21 deletions

View File

@@ -47,11 +47,13 @@ int main() {
std::string output = "LinkCard_demo (v8.0.0)\n\n";
output += "Device: ";
// (2) Probe the connected device
u32 initialVCount = REG_VCOUNT;
auto device = linkCard->getConnectedDevice([&initialVCount]() {
u32 elapsed = (REG_VCOUNT - initialVCount + 228) % 228;
return elapsed > 30;
});
switch (device) {
case LinkCard::ConnectedDevice::E_READER_JAP:
case LinkCard::ConnectedDevice::E_READER_USA: {
@@ -66,7 +68,7 @@ int main() {
u32 loaderSize;
const u8* loader = (const u8*)gbfs_get_obj(fs, fileName, &loaderSize);
// (2) Send the DLC loader program
// (3) Send the DLC loader program
auto result = linkCard->sendLoader(loader, loaderSize, []() {
u16 keys = ~REG_KEYS & KEY_ANY;
return keys & KEY_B;
@@ -89,7 +91,7 @@ int main() {
if (Common::didPress(KEY_A, a)) {
Common::log("Receiving...\n\nPress B to cancel");
// (3) Receive scanned cards
// (4) Receive scanned cards
u8 card[LINK_CARD_SIZE + 1]; // +1 to interpret contents as a string
auto result = linkCard->receiveCard(card, []() {
u16 keys = ~REG_KEYS & KEY_ANY;

View File

@@ -9,15 +9,15 @@
// LinkCard* linkCard = new LinkCard();
// - 2) Probe the connected device:
// auto device = getConnectedDevice();
// - 2) Send the DLC loader program:
// - 3) Send the DLC loader program:
// if (device == LinkCard::ConnectedDevice::E_READER_USA)
// LinkCard::SendResult result = linkCard->sendLoader(loader, []() {
// u16 keys = ~REG_KEYS & KEY_ANY;
// return keys & KEY_START;
// }));
// - 3) Receive scanned cards:
// if (device == LinkCard::ConnectedDevice::CARD_SCANNER) {
// u8 card[LINK_CARD_CARD_SIZE];
// - 4) Receive scanned cards:
// if (device == LinkCard::ConnectedDevice::DLC_LOADER) {
// u8 card[LINK_CARD_SIZE];
// bool received = linkCard->receiveCard(card, []() {
// u16 keys = ~REG_KEYS & KEY_ANY;
// return keys & KEY_START;
@@ -84,6 +84,14 @@ class LinkCard {
static constexpr int PRE_TRANSFER_WAIT = 2 + 1;
public:
enum class ConnectedDevice {
E_READER_USA,
E_READER_JAP,
DLC_LOADER,
WRONG_CONNECTION,
UNKNOWN_DEVICE
};
enum class SendResult {
SUCCESS,
UNALIGNED,
@@ -92,6 +100,7 @@ class LinkCard {
WRONG_DEVICE,
FAILURE_DURING_TRANSFER
};
enum class ReceiveResult {
SUCCESS,
CANCELED,
@@ -99,13 +108,6 @@ class LinkCard {
BAD_CHECKSUM,
UNEXPECTED_FAILURE,
};
enum class ConnectedDevice {
E_READER_USA,
E_READER_JAP,
DLC_LOADER,
WRONG_CONNECTION,
UNKNOWN_DEVICE
};
/**
* Returns the connected device.

View File

@@ -9,6 +9,16 @@ extern "C" {
typedef void* C_LinkCardHandle;
#define C_LINK_CARD_SIZE 1998
typedef enum {
C_LINK_CARD_CONNECTED_DEVICE_E_READER_USA,
C_LINK_CARD_CONNECTED_DEVICE_E_READER_JAP,
C_LINK_CARD_CONNECTED_DEVICE_DLC_LOADER,
C_LINK_CARD_CONNECTED_DEVICE_WRONG_CONNECTION,
C_LINK_CARD_CONNECTED_DEVICE_UNKNOWN_DEVICE
} C_LinkCard_ConnectedDevice;
typedef enum {
C_LINK_CARD_SEND_RESULT_SUCCESS,
C_LINK_CARD_SEND_RESULT_UNALIGNED,
@@ -26,14 +36,6 @@ typedef enum {
C_LINK_CARD_RECEIVE_RESULT_UNEXPECTED_FAILURE
} C_LinkCard_ReceiveResult;
typedef enum {
C_LINK_CARD_CONNECTED_DEVICE_E_READER_USA,
C_LINK_CARD_CONNECTED_DEVICE_E_READER_JAP,
C_LINK_CARD_CONNECTED_DEVICE_DLC_LOADER,
C_LINK_CARD_CONNECTED_DEVICE_WRONG_CONNECTION,
C_LINK_CARD_CONNECTED_DEVICE_UNKNOWN_DEVICE
} C_LinkCard_ConnectedDevice;
C_LinkCardHandle C_LinkCard_createDefault();
void C_LinkCard_destroy(C_LinkCardHandle handle);