Hoernchen has uploaded this change for review.
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));
To view, visit change 42157. To unsubscribe, or for help writing mail filters, visit settings.