Hoernchen has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/42157?usp=email )
Change subject: ccid: fix rdr_to_pc_parameters and rdr_to_pc_hardware_error ......................................................................
ccid: fix rdr_to_pc_parameters and rdr_to_pc_hardware_error
Change-Id: I67d5cb876d20b29f4759d5b194606f34b8b966c4 --- M ccid_common/ccid_device.c M ccid_common/ccid_proto.h 2 files changed, 11 insertions(+), 6 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ccid-firmware refs/changes/57/42157/1
diff --git a/ccid_common/ccid_device.c b/ccid_common/ccid_device.c index acee696..b136cd0 100644 --- a/ccid_common/ccid_device.c +++ b/ccid_common/ccid_device.c @@ -264,11 +264,12 @@ const struct ccid_pars_decoded *dec_par) { struct msgb *msg = ccid_msgb_alloc(); - struct ccid_rdr_to_pc_parameters *par = - (struct ccid_rdr_to_pc_parameters *) msgb_put(msg, sizeof(par->hdr)+sizeof(par->abProtocolData.t0)); + struct ccid_rdr_to_pc_parameters *par = (struct ccid_rdr_to_pc_parameters *)msgb_put( + msg, sizeof(par->hdr) + sizeof(par->bProtocolNum) + sizeof(par->abProtocolData.t0)); uint8_t sts = (cmd_sts & CCID_CMD_STATUS_MASK) | icc_status;
SET_HDR_IN(par, RDR_to_PC_Parameters, slot_nr, seq, sts, err); + par->bProtocolNum = CCID_PROTOCOL_NUM_T0; if (dec_par) { osmo_store32le(sizeof(par->abProtocolData.t0), &par->hdr.hdr.dwLength); encode_ccid_pars_t0(&par->abProtocolData.t0, dec_par); @@ -286,11 +287,12 @@ const struct ccid_pars_decoded *dec_par) { struct msgb *msg = ccid_msgb_alloc(); - struct ccid_rdr_to_pc_parameters *par = - (struct ccid_rdr_to_pc_parameters *) msgb_put(msg, sizeof(par->hdr)+sizeof(par->abProtocolData.t1)); + struct ccid_rdr_to_pc_parameters *par = (struct ccid_rdr_to_pc_parameters *)msgb_put( + msg, sizeof(par->hdr) + sizeof(par->bProtocolNum) + sizeof(par->abProtocolData.t1)); uint8_t sts = (cmd_sts & CCID_CMD_STATUS_MASK) | icc_status;
SET_HDR_IN(par, RDR_to_PC_Parameters, slot_nr, seq, sts, err); + par->bProtocolNum = CCID_PROTOCOL_NUM_T1; if (dec_par) { osmo_store32le(sizeof(par->abProtocolData.t1), &par->hdr.hdr.dwLength); encode_ccid_pars_t1(&par->abProtocolData.t1, dec_par); diff --git a/ccid_common/ccid_proto.h b/ccid_common/ccid_proto.h index e26a051..19f1333 100644 --- a/ccid_common/ccid_proto.h +++ b/ccid_common/ccid_proto.h @@ -333,6 +333,7 @@ /* Section 6.2.3 RDR_to_PC_Parameters */ struct ccid_rdr_to_pc_parameters { struct ccid_header_in hdr; + uint8_t bProtocolNum; union { struct ccid_proto_data_t0 t0; struct ccid_proto_data_t1 t1; @@ -401,9 +402,11 @@ uint8_t bmSlotCCState[0]; /* as long as bNumSlots/4 padded to next byte */ } __attribute__ ((packed));
-/* Section 6.3.1 */ +/* Section 6.3.2 - Interrupt IN message (4 bytes, NOT bulk header format) */ struct ccid_rdr_to_pc_hardware_error { - struct ccid_header hdr; + uint8_t bMessageType; /* 0x51 */ + uint8_t bSlot; + uint8_t bSeq; uint8_t bHardwareErrorCode; } __attribute__ ((packed));