PrintAndLog("Usage: hf 14a apdu [-s] [-k] [-t] <APDU (hex)>");
PrintAndLog(" -s activate field and select card");
PrintAndLog(" -k leave the signal field ON after receive response");
- PrintAndLog(" -t executes TLV decoder if it possible");
+ PrintAndLog(" -t executes TLV decoder if it possible. TODO!!!!");
return 0;
}
{"9FXX", APDUCODE_TYPE_NONE, "Command successfully executed; 'xx' bytes of data are available and can be requested using GET RESPONSE."},
{"9xXX", APDUCODE_TYPE_NONE, "Application related status, (ISO 7816-3)"}
};
+const size_t APDUCodeTableLen = sizeof(APDUCodeTable)/sizeof(APDUCode);
int CodeCmp(const char *code1, const char *code2) {
int xsymb = 0;
return -1;
}
-APDUCode *GetAPDUCode(uint8_t sw1, uint8_t sw2) {
+const APDUCode* const GetAPDUCode(uint8_t sw1, uint8_t sw2) {
char buf[4] = {0};
sprintf(&buf[0], "%02X ", sw1);
sprintf(&buf[2], "%02X ", sw2);
-
- int tableLen = sizeof(APDUCodeTable)/sizeof(APDUCode);
- for (int i = 0; i < tableLen; i++) {
+ for (int i = 0; i < APDUCodeTableLen; i++) {
if (CodeCmp(APDUCodeTable[i].ID, buf) == 0) { // TODO make not so equal comparation... XXXX - not works...
return &APDUCodeTable[i];
}
return NULL;
}
-const char *GetAPDUCodeDescription(uint8_t sw1, uint8_t sw2) {
- APDUCode *cd = GetAPDUCode(sw1, sw2);
+const char* GetAPDUCodeDescription(uint8_t sw1, uint8_t sw2) {
+ const APDUCode *cd = GetAPDUCode(sw1, sw2);
if (cd)
return cd->Description;
else
return APDUCodeTable[0].Description; //empty string
}
-
-
const char *Description;
} APDUCode;
-extern APDUCode* GetAPDUCode(uint8_t sw1, uint8_t sw2);
+extern const APDUCode* const GetAPDUCode(uint8_t sw1, uint8_t sw2);
extern const char* GetAPDUCodeDescription(uint8_t sw1, uint8_t sw2);
#endif