Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 100 additions & 14 deletions client/src/cmdhflist.c
Original file line number Diff line number Diff line change
Expand Up @@ -1972,48 +1972,77 @@ void annotateLegic(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) {
}

void annotateFelica(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) {
switch (cmd[3]) {
case FELICA_POLL_REQ:
if (cmdsize < 4) {
snprintf(exp, size, "?");
return;
}

uint16_t cmd_code = cmd[3];
if (cmd_code >= 0xC0 && cmdsize > 4) {
// Command codes >= 0xC0 include a second-byte subcommand/function code.
cmd_code = (uint16_t)((cmd_code << 8) | cmd[4]);
}

switch (cmd_code) {
case FELICA_POLL_REQ: {
// Polling request code is byte 6 of the trace frame.
if (cmdsize > 6) {
if (cmd[6] == 0x01) {
snprintf(exp, size, "POLLING (SYSTEM CODE)");
break;
}
if (cmd[6] == 0x02) {
snprintf(exp, size, "POLLING (COMMUNICATION PERFORMANCE)");
break;
}
}
snprintf(exp, size, "POLLING");
break;
}
case FELICA_POLL_ACK:
snprintf(exp, size, "POLL ACK");
snprintf(exp, size, "POLLING ACK");
break;
case FELICA_REQSRV_REQ:
snprintf(exp, size, "REQUEST SERVICE");
break;
case FELICA_REQSRV_ACK:
snprintf(exp, size, "REQ SERV ACK");
snprintf(exp, size, "REQUEST SERVICE ACK");
break;
case FELICA_REQRESP_REQ:
snprintf(exp, size, "REQUEST RESPONSE");
break;
case FELICA_REQRESP_ACK:
snprintf(exp, size, "REQ RESP ACK");
snprintf(exp, size, "REQUEST RESPONSE ACK");
break;
case FELICA_RDBLK_REQ:
snprintf(exp, size, "READ BLK");
snprintf(exp, size, "READ WITHOUT ENCRYPTION");
break;
case FELICA_RDBLK_ACK:
snprintf(exp, size, "READ BLK ACK");
snprintf(exp, size, "READ WITHOUT ENCRYPTION ACK");
break;
case FELICA_WRTBLK_REQ:
snprintf(exp, size, "WRITE BLK");
snprintf(exp, size, "WRITE WITHOUT ENCRYPTION");
break;
case FELICA_WRTBLK_ACK:
snprintf(exp, size, "WRITE BLK ACK");
snprintf(exp, size, "WRITE WITHOUT ENCRYPTION ACK");
break;
case FELICA_SRCHSYSCODE_REQ:
snprintf(exp, size, "SEARCH SERVICE CODE");
break;
case FELICA_SRCHSYSCODE_ACK:
snprintf(exp, size, "SSC ACK");
snprintf(exp, size, "SEARCH SERVICE CODE ACK");
break;
case FELICA_REQSYSCODE_REQ:
snprintf(exp, size, "REQUEST SYSTEM CODE");
break;
case FELICA_REQSYSCODE_ACK:
snprintf(exp, size, "RSC ACK");
snprintf(exp, size, "REQUEST SYSTEM CODE ACK");
break;
case FELICA_REQBLKINFO_REQ:
snprintf(exp, size, "REQUEST BLOCK INFORMATION");
break;
case FELICA_REQBLKINFO_ACK:
snprintf(exp, size, "REQUEST BLOCK INFORMATION ACK");
break;
case FELICA_AUTH1_REQ:
snprintf(exp, size, "AUTH 1");
Expand Down Expand Up @@ -2045,23 +2074,71 @@ void annotateFelica(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) {
case FELICA_GET_NODE_LIST_ACK:
snprintf(exp, size, "REQUEST CODE LIST ACK");
break;
case FELICA_REQBLKINFO_EX_REQ:
snprintf(exp, size, "REQUEST BLOCK INFORMATION EX");
break;
case FELICA_REQBLKINFO_EX_ACK:
snprintf(exp, size, "REQUEST BLOCK INFORMATION EX ACK");
break;
case FELICA_SET_PARAMETER_REQ:
snprintf(exp, size, "SET PARAMETER");
break;
case FELICA_SET_PARAMETER_ACK:
snprintf(exp, size, "SET PARAMETER ACK");
break;
case FELICA_GET_CONTAINER_ISSUE_INFO_REQ:
snprintf(exp, size, "GET CONTAINER ISSUE INFO");
break;
case FELICA_GET_CONTAINER_ISSUE_INFO_ACK:
snprintf(exp, size, "GET CONTAINER ISSUE INFO ACK");
break;
case FELICA_GET_AREA_INFO_REQ:
snprintf(exp, size, "GET AREA INFO");
break;
case FELICA_GET_AREA_INFO_ACK:
snprintf(exp, size, "GET AREA INFO ACK");
break;
case FELICA_GET_NODE_PROPERTY_REQ:
snprintf(exp, size, "GET NODE PROPERTY");
break;
case FELICA_GET_NODE_PROPERTY_ACK:
snprintf(exp, size, "GET NODE PROPERTY ACK");
break;
case FELICA_GET_CONTAINER_PROPERTY_REQ:
snprintf(exp, size, "GET CONTAINER PROPERTY");
break;
case FELICA_GET_CONTAINER_PROPERTY_ACK:
snprintf(exp, size, "GET CONTAINER PROPERTY ACK");
break;
case FELICA_REQSRV2_REQ:
snprintf(exp, size, "REQUEST SERVICE v2");
break;
case FELICA_REQSRV2_ACK:
snprintf(exp, size, "REQ SERV v2 ACK");
snprintf(exp, size, "REQUEST SERVICE v2 ACK");
break;
case FELICA_INTERNAL_AUTH_READ_REQ:
snprintf(exp, size, "INTERNAL AUTHENTICATE AND READ");
break;
case FELICA_INTERNAL_AUTH_READ_ACK:
snprintf(exp, size, "INTERNAL AUTHENTICATE AND READ ACK");
break;
case FELICA_GETSTATUS_REQ:
snprintf(exp, size, "GET STATUS");
break;
case FELICA_GETSTATUS_ACK:
snprintf(exp, size, "GET STATUS ACK");
break;
case FELICA_GETPLATFORMINFO_REQ:
snprintf(exp, size, "GET PLATFORM INFO");
break;
case FELICA_GETPLATFORMINFO_ACK:
snprintf(exp, size, "GET PLATFORM INFO ACK");
break;
case FELICA_REQUEST_SPEC_VERSION_REQ:
snprintf(exp, size, "REQUEST SPEC VERSION");
break;
case FELICA_REQUEST_SPEC_VERSION_ACK:
snprintf(exp, size, "REQUEST SPEC ACK");
snprintf(exp, size, "REQUEST SPEC VERSION ACK");
break;
case FELICA_RESET_MODE_REQ:
snprintf(exp, size, "RESET MODE");
Expand Down Expand Up @@ -2097,7 +2174,16 @@ void annotateFelica(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) {
snprintf(exp, size, "UPDATE RANDOM ID");
break;
case FELICA_UPDATE_RNDID_ACK:
snprintf(exp, size, "URI ACK");
snprintf(exp, size, "UPDATE RANDOM ID ACK");
break;
case FELICA_GET_CONTAINER_ID_REQ:
snprintf(exp, size, "GET CONTAINER ID");
break;
case FELICA_GET_CONTAINER_ID_ACK:
snprintf(exp, size, "GET CONTAINER ID ACK");
break;
case FELICA_ECHO_REQ:
snprintf(exp, size, "ECHO");
break;
default :
snprintf(exp, size, "?");
Expand Down
21 changes: 21 additions & 0 deletions include/protocols.h
Original file line number Diff line number Diff line change
Expand Up @@ -837,6 +837,9 @@ ISO 7816-4 Basic interindustry commands. For command APDU's.
#define FELICA_REQSYSCODE_REQ 0x0c
#define FELICA_REQSYSCODE_ACK 0x0d

#define FELICA_REQBLKINFO_REQ 0x0e
#define FELICA_REQBLKINFO_ACK 0x0f

#define FELICA_AUTH1_REQ 0x10
#define FELICA_AUTH1_ACK 0x11

Expand All @@ -852,15 +855,30 @@ ISO 7816-4 Basic interindustry commands. For command APDU's.
#define FELICA_GET_NODE_LIST_REQ 0x1a
#define FELICA_GET_NODE_LIST_ACK 0x1b

#define FELICA_REQBLKINFO_EX_REQ 0x1e
#define FELICA_REQBLKINFO_EX_ACK 0x1f

#define FELICA_SET_PARAMETER_REQ 0x20
#define FELICA_SET_PARAMETER_ACK 0x21

#define FELICA_GET_CONTAINER_ISSUE_INFO_REQ 0x22
#define FELICA_GET_CONTAINER_ISSUE_INFO_ACK 0x23

#define FELICA_GET_AREA_INFO_REQ 0x24
#define FELICA_GET_AREA_INFO_ACK 0x25

#define FELICA_GET_NODE_PROPERTY_REQ 0x28
#define FELICA_GET_NODE_PROPERTY_ACK 0x29

#define FELICA_GET_CONTAINER_PROPERTY_REQ 0x2e
#define FELICA_GET_CONTAINER_PROPERTY_ACK 0x2f

#define FELICA_REQSRV2_REQ 0x32
#define FELICA_REQSRV2_ACK 0x33

#define FELICA_INTERNAL_AUTH_READ_REQ 0x34
#define FELICA_INTERNAL_AUTH_READ_ACK 0x35

#define FELICA_GETSTATUS_REQ 0x38
#define FELICA_GETSTATUS_ACK 0x39

Expand Down Expand Up @@ -890,6 +908,9 @@ ISO 7816-4 Basic interindustry commands. For command APDU's.
#define FELICA_GET_CONTAINER_ID_REQ 0x70
#define FELICA_GET_CONTAINER_ID_ACK 0x71

// Echo is a two-byte command (F000).
#define FELICA_ECHO_REQ 0xF000

// FeliCa SYSTEM list
#define SYSTEMCODE_ANY 0xffff // ANY
#define SYSTEMCODE_FELICA_LITE 0x88b4 // FeliCa Lite
Expand Down
Loading