CHG: and now that I do actually check on bitlenght, I can get a better annotation yet again. Looking at it raises a question, acknowledge is 0x19 or 0x39, they just don't match up with tagtype identification of 0x0D, 0x1D, 0x39. I'll need to look at a 1024 tags response in a trace with a valid reader.

This commit is contained in:
iceman1001 2016-09-26 12:58:11 +02:00
commit 7c91c8bf24
2 changed files with 23 additions and 13 deletions

View file

@ -370,19 +370,20 @@ void annotateIso14443b(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize) {
// 1 = read // 1 = read
// 0 = write // 0 = write
// Quite simpel tag // Quite simpel tag
void annotateLegic(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize){ void annotateLegic(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize){
uint8_t bitsend = cmd[0];
uint8_t bitsend = cmd[0];
switch (bitsend){ switch (bitsend){
case 7: case 7:
snprintf(exp, size, "IV 0x%02X", cmd[1]); snprintf(exp, size, "IV 0x%02X", cmd[1]);
break; break;
case 6: { case 6: {
if ( cmd[1] == LEGIC_HSK_22 ) switch ( cmd[1] ) {
snprintf(exp, size, "MIM22"); case LEGIC_MIM_22: snprintf(exp, size, "MIM22"); break;
if ( cmd[1] == LEGIC_HSK_256 ) case LEGIC_MIM_256: snprintf(exp, size, "MIM256"); break;
snprintf(exp, size, "MIN256/1024"); case LEGIC_MIM_1024: snprintf(exp, size, "MIM1024"); break;
case LEGIC_ACK_22: snprintf(exp, size, "ACK 22"); break;
case LEGIC_ACK_256: snprintf(exp, size, "ACK 256/1024"); break;
}
break; break;
} }
case 9: case 9:
@ -681,14 +682,20 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui
} }
} }
if (data_len == 0 ) if (data_len == 0 ) {
sprintf(line[0],"<empty trace - possible error>"); sprintf(line[0],"<empty trace - possible error>");
return tracepos;
}
//--- Draw the CRC column // Draw the CRC column
char *crc = (crcStatus == 0 ? "!crc" : (crcStatus == 1 ? " ok " : " ")); char *crc = (crcStatus == 0 ? "!crc" : (crcStatus == 1 ? " ok " : " "));
EndOfTransmissionTimestamp = timestamp + duration; EndOfTransmissionTimestamp = timestamp + duration;
// Always annotate LEGIC read/tag
if ( protocol == LEGIC )
annotateLegic(explanation,sizeof(explanation),frame,data_len);
if (!isResponse) { if (!isResponse) {
switch(protocol) { switch(protocol) {
case ICLASS: annotateIclass(explanation,sizeof(explanation),frame,data_len); break; case ICLASS: annotateIclass(explanation,sizeof(explanation),frame,data_len); break;
@ -697,7 +704,7 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui
case ISO_14443B: annotateIso14443b(explanation,sizeof(explanation),frame,data_len); break; case ISO_14443B: annotateIso14443b(explanation,sizeof(explanation),frame,data_len); break;
case TOPAZ: annotateTopaz(explanation,sizeof(explanation),frame,data_len); break; case TOPAZ: annotateTopaz(explanation,sizeof(explanation),frame,data_len); break;
case ISO_7816_4: annotateIso7816(explanation,sizeof(explanation),frame,data_len); break; case ISO_7816_4: annotateIso7816(explanation,sizeof(explanation),frame,data_len); break;
case LEGIC: annotateLegic(explanation,sizeof(explanation),frame,data_len); break;
default: break; default: break;
} }
} }

View file

@ -326,8 +326,11 @@ ISO 7816-4 Basic interindustry commands. For command APDU's.
#define MFDES_AUTHENTICATION_FRAME 0xAF #define MFDES_AUTHENTICATION_FRAME 0xAF
// LEGIC Commands // LEGIC Commands
#define LEGIC_HSK_22 0x19 #define LEGIC_MIM_22 0x0D
#define LEGIC_HSK_256 0x39 #define LEGIC_MIM_256 0x1D
#define LEGIC_MIM_1024 0x3D
#define LEGIC_ACK_22 0x19
#define LEGIC_ACK_256 0x39
#define LEGIC_READ 0x01 #define LEGIC_READ 0x01
#define LEGIC_WRITE 0x00 #define LEGIC_WRITE 0x00