Add support for GetContainerId to 'hf felica sim'

This commit is contained in:
kormax
2026-06-13 22:20:45 +03:00
parent 0e9e796670
commit da5355ed81
2 changed files with 22 additions and 0 deletions
+21
View File
@@ -418,6 +418,25 @@ static uint16_t felica_sim_process_request_system_code(const felica_sim_model_he
return felica_sim_response_finish(resp, pos);
}
static uint16_t felica_sim_process_get_container_id(const felica_sim_model_header_t *hdr, const uint8_t *model,
const uint8_t *req, uint16_t req_len, uint8_t *resp) {
if (req_len != sizeof(felica_get_container_id_request_t) ||
req[4] != 0x00 ||
req[5] != 0x00) {
return 0;
}
const felica_sim_system_record_t *system = felica_sim_find_system_by_code(hdr, model, SYSTEMCODE_OSAIFU_KEITAI, NULL);
if (system == NULL) {
return 0;
}
uint16_t pos = felica_sim_response_begin(resp, FELICA_GET_CONTAINER_ID_ACK);
memcpy(resp + pos, system->idm, sizeof(system->idm));
pos += sizeof(system->idm);
return felica_sim_response_finish(resp, pos);
}
static uint16_t felica_sim_process_request_response(const uint8_t *req, uint16_t req_len,
const felica_sim_system_record_t *active_system, uint8_t *resp) {
if (req_len != 10 || felica_sim_idm_matches(req, active_system) == false) {
@@ -735,6 +754,8 @@ static uint16_t felica_sim_process_request(const felica_sim_model_header_t *hdr,
return felica_sim_process_polling(hdr, model, req, req_len, active_system_index, resp);
case FELICA_ECHO_REQ:
return felica_sim_process_echo(req, req_len, resp);
case FELICA_GET_CONTAINER_ID_REQ:
return felica_sim_process_get_container_id(hdr, model, req, req_len, resp);
case FELICA_REQSYSCODE_REQ:
return felica_sim_process_request_system_code(hdr, model, req, req_len, active_system, resp);
case FELICA_REQRESP_REQ:
+1
View File
@@ -920,6 +920,7 @@ ISO 7816-4 Basic interindustry commands. For command APDU's.
#define SYSTEMCODE_FELICA_LITE 0x88b4 // FeliCa Lite
#define SYSTEMCODE_COMMON 0xfe00 // Common
#define SYSTEMCODE_EDY 0xfe00 // Edy
#define SYSTEMCODE_OSAIFU_KEITAI 0xfe0f // Osaifu Keitai Container
#define SYSTEMCODE_CYBERNE 0x0003 // Cyberne
#define SYSTEMCODE_SUICA 0x0003 // Suica
#define SYSTEMCODE_PASMO 0x0003 // Pasmo