#include #include #include #include #include u16 __CARDVendorID = 0xffff; s32 CARDGetSerialNo(s32 chan, u64 *serialNo) { CARDControl *card; CARDID *id; int i; u64 code; s32 result; if (!(0 <= chan && chan < 2)) { return CARD_RESULT_FATAL_ERROR; } result = __CARDGetControlBlock(chan, &card); if (result < 0) { return result; } id = (CARDID *)card->workArea; for (code = 0, i = 0; i < sizeof(id->serial) / sizeof(u64); ++i) { code ^= *(u64 *)&id->serial[sizeof(u64) * i]; } *serialNo = code; return __CARDPutControlBlock(card, CARD_RESULT_READY); }