<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/14054">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ccid_device: Make it compile<br><br>Change-Id: I0350fec36eeef69eeccb873f547c9df8b364ae12<br>---<br>M ccid/ccid_device.c<br>1 file changed, 47 insertions(+), 22 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/ccid/ccid_device.c b/ccid/ccid_device.c</span><br><span>index c81f177..f10b700 100644</span><br><span>--- a/ccid/ccid_device.c</span><br><span>+++ b/ccid/ccid_device.c</span><br><span>@@ -2,6 +2,7 @@</span><br><span> #include <stdio.h></span><br><span> #include <unistd.h></span><br><span> #include <assert.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <string.h></span><br><span> </span><br><span> #include <osmocom/core/msgb.h></span><br><span> #include <osmocom/core/utils.h></span><br><span>@@ -19,7 +20,7 @@</span><br><span> };</span><br><span> </span><br><span> struct ccid_ops {</span><br><span style="color: hsl(0, 100%, 40%);">-     int (*send)(struct ccid_instance *ci, struct msgb *msg);</span><br><span style="color: hsl(120, 100%, 40%);">+      int (*send_in)(struct ccid_instance *ci, struct msgb *msg);</span><br><span> };</span><br><span> </span><br><span> struct ccid_instance {</span><br><span>@@ -35,7 +36,7 @@</span><br><span>  if (slot_nr >= sizeof(ci->slot))</span><br><span>               return NULL;</span><br><span>         else</span><br><span style="color: hsl(0, 100%, 40%);">-            return &ci->slot[slot_nr]</span><br><span style="color: hsl(120, 100%, 40%);">+              return &ci->slot[slot_nr];</span><br><span> }</span><br><span> </span><br><span> static uint8_t get_icc_status(const struct ccid_slot *cs)</span><br><span>@@ -67,7 +68,7 @@</span><br><span> </span><br><span> static struct msgb *ccid_msgb_alloc(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-       struct msgb *msg = msgb_alloc("ccid");</span><br><span style="color: hsl(120, 100%, 40%);">+      struct msgb *msg = msgb_alloc(512, "ccid");</span><br><span>        OSMO_ASSERT(msg);</span><br><span>    return msg;</span><br><span> }</span><br><span>@@ -79,10 +80,10 @@</span><br><span> </span><br><span> static int ccid_slot_send(struct ccid_slot *cs, struct msgb *msg)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    const struct ccid_header *ch = (const struct ccid_header *) msgb_ccid_in(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+        struct ccid_header *ch = (struct ccid_header *) msgb_ccid_in(msg);</span><br><span> </span><br><span>       /* patch bSlotNr into message */</span><br><span style="color: hsl(0, 100%, 40%);">-        ch->hdr.bSlot = cs->slot_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+    ch->bSlot = cs->slot_nr;</span><br><span>       return ccid_send(cs->ci, msg);</span><br><span> }</span><br><span> </span><br><span>@@ -93,11 +94,12 @@</span><br><span>                                      uint32_t data_len)</span><br><span> {</span><br><span>     struct msgb *msg = ccid_msgb_alloc();</span><br><span style="color: hsl(0, 100%, 40%);">-   struct ccid_rdr_to_pc_data_block *db = msgb_put(msg, sizeof(*db) + data_len);</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ccid_rdr_to_pc_data_block *db = </span><br><span style="color: hsl(120, 100%, 40%);">+               (struct ccid_rdr_to_pc_data_block *) msgb_put(msg, sizeof(*db) + data_len);</span><br><span>  uint8_t sts = (cmd_sts & CCID_CMD_STATUS_MASK) | get_icc_status(cs);</span><br><span> </span><br><span>         SET_HDR_IN(db, RDR_to_PC_DataBlock, cs->slot_nr, seq, sts, err);</span><br><span style="color: hsl(0, 100%, 40%);">-     db->hdr.dwLength = cpu_to_le32(data_len);</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_store32le(data_len, &db->hdr.hdr.dwLength);</span><br><span>      memcpy(db->abData, data, data_len);</span><br><span>       return msg;</span><br><span> }</span><br><span>@@ -107,7 +109,8 @@</span><br><span>                                        enum ccid_error_code err)</span><br><span> {</span><br><span>      struct msgb *msg = ccid_msgb_alloc();</span><br><span style="color: hsl(0, 100%, 40%);">-   struct ccid_rdr_to_pc_slot_status *ss = msgb_put(msg, sizeof(*ss));</span><br><span style="color: hsl(120, 100%, 40%);">+   struct ccid_rdr_to_pc_slot_status *ss =</span><br><span style="color: hsl(120, 100%, 40%);">+               (struct ccid_rdr_to_pc_slot_status *) msgb_put(msg, sizeof(*ss));</span><br><span>    uint8_t sts = (cmd_sts & CCID_CMD_STATUS_MASK) | get_icc_status(cs);</span><br><span> </span><br><span>         SET_HDR_IN(ss, RDR_to_PC_SlotStatus, cs->slot_nr, seq, sts, err);</span><br><span>@@ -123,11 +126,12 @@</span><br><span>                                     uint32_t data_len)</span><br><span> {</span><br><span>  struct msgb *msg = ccid_msgb_alloc();</span><br><span style="color: hsl(0, 100%, 40%);">-   struct ccid_rdr_to_pc_escape *esc = msgb_put(msg, sizeof(*esc) + data_len);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct ccid_rdr_to_pc_escape *esc =</span><br><span style="color: hsl(120, 100%, 40%);">+           (struct ccid_rdr_to_pc_escape *) msgb_put(msg, sizeof(*esc) + data_len);</span><br><span>     uint8_t sts = (cmd_sts & CCID_CMD_STATUS_MASK) | get_icc_status(cs);</span><br><span> </span><br><span>         SET_HDR_IN(esc, RDR_to_PC_Escape, cs->slot_nr, seq, sts, err);</span><br><span style="color: hsl(0, 100%, 40%);">-       esc->hdr.dwLength = cpu_to_le32(data_len);</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_store32le(data_len, &esc->hdr.hdr.dwLength);</span><br><span>     memcpy(esc->abData, data, data_len);</span><br><span>      return msg;</span><br><span> }</span><br><span>@@ -137,13 +141,14 @@</span><br><span>                                         enum ccid_error_code err, uint32_t clock_khz, uint32_t rate_bps)</span><br><span> {</span><br><span>    struct msgb *msg = ccid_msgb_alloc();</span><br><span style="color: hsl(0, 100%, 40%);">-   struct ccid_rdr_to_pc_data_rate_and_clock *drc = msgb_put(msg, sizeof(*drc));</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ccid_rdr_to_pc_data_rate_and_clock *drc =</span><br><span style="color: hsl(120, 100%, 40%);">+              (struct ccid_rdr_to_pc_data_rate_and_clock *) msgb_put(msg, sizeof(*drc));</span><br><span>   uint8_t sts = (cmd_sts & CCID_CMD_STATUS_MASK) | get_icc_status(cs);</span><br><span> </span><br><span>         SET_HDR_IN(drc, RDR_to_PC_DataRateAndClockFrequency, cs->slot_nr, seq, sts, err);</span><br><span style="color: hsl(0, 100%, 40%);">-    drc->dwLength = cpu_to_le32(8); /* Message-specific data length (wtf?) */</span><br><span style="color: hsl(0, 100%, 40%);">-    drc->dwClockFrequency = cpu_to_le32(clock_khz); /* kHz */</span><br><span style="color: hsl(0, 100%, 40%);">-    drc->dwDataRate = cpu_to_le32(rate_bps); /* bps */</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_store32le(8, &drc->hdr.hdr.dwLength); /* Message-specific data length (wtf?) */</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_store32le(clock_khz, &drc->dwClockFrequency); /* kHz */</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_store32le(rate_bps, &drc->dwDataRate); /* bps */</span><br><span>         return msg;</span><br><span> }</span><br><span> </span><br><span>@@ -181,7 +186,7 @@</span><br><span> </span><br><span>       /* TODO: send actual ATR; handle error cases */</span><br><span>      /* TODO: handle this asynchronously */</span><br><span style="color: hsl(0, 100%, 40%);">-  resp = ccid_gen_data_block(cs, u->icc_power_on.hdr.hSeq, CCID_CMD_STATUS_OK, 0, NULL, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+  resp = ccid_gen_data_block(cs, u->icc_power_on.hdr.bSeq, CCID_CMD_STATUS_OK, 0, NULL, 0);</span><br><span> </span><br><span>     return ccid_send(cs->ci, resp);</span><br><span> }</span><br><span>@@ -190,6 +195,8 @@</span><br><span> static int ccid_handle_icc_power_off(struct ccid_slot *cs, struct msgb *msg)</span><br><span> {</span><br><span>   const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct msgb *resp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         resp = ccid_gen_slot_status(cs, u->get_slot_status.hdr.bSeq, CCID_CMD_STATUS_OK, 0);</span><br><span>      return ccid_send(cs->ci, resp);</span><br><span> }</span><br><span>@@ -198,7 +205,9 @@</span><br><span> static int ccid_handle_xfr_block(struct ccid_slot *cs, struct msgb *msg)</span><br><span> {</span><br><span>       const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);</span><br><span style="color: hsl(0, 100%, 40%);">-     resp = ccid_gen_data_block(cs, u->icc_power_on.hdr.hSeq, CCID_CMD_STATUS_OK, 0, NULL, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+  struct msgb *resp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  resp = ccid_gen_data_block(cs, u->icc_power_on.hdr.bSeq, CCID_CMD_STATUS_OK, 0, NULL, 0);</span><br><span>         return ccid_send(cs->ci, resp);</span><br><span> }</span><br><span> </span><br><span>@@ -206,30 +215,36 @@</span><br><span> static int ccid_handle_get_parameters(struct ccid_slot *cs, struct msgb *msg)</span><br><span> {</span><br><span>    const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct msgb *resp;</span><br><span> }</span><br><span> </span><br><span> /* Section 6.1.6 */</span><br><span> static int ccid_handle_reset_parameters(struct ccid_slot *cs, struct msgb *msg)</span><br><span> {</span><br><span>   const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct msgb *resp;</span><br><span> }</span><br><span> </span><br><span> /* Section 6.1.7 */</span><br><span> static int ccid_handle_set_parameters(struct ccid_slot *cs, struct msgb *msg)</span><br><span> {</span><br><span>     const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct msgb *resp;</span><br><span> }</span><br><span> </span><br><span> /* Section 6.1.8 */</span><br><span> static int ccid_handle_escape(struct ccid_slot *cs, struct msgb *msg)</span><br><span> {</span><br><span>     const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct msgb *resp;</span><br><span> }</span><br><span> </span><br><span> /* Section 6.1.9 */</span><br><span> static int ccid_handle_icc_clock(struct ccid_slot *cs, struct msgb *msg)</span><br><span> {</span><br><span>  const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct msgb *resp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         resp = ccid_gen_slot_status(cs, u->get_slot_status.hdr.bSeq, CCID_CMD_STATUS_OK, 0);</span><br><span>      return ccid_send(cs->ci, resp);</span><br><span> }</span><br><span>@@ -238,6 +253,8 @@</span><br><span> static int ccid_handle_t0apdu(struct ccid_slot *cs, struct msgb *msg)</span><br><span> {</span><br><span>  const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct msgb *resp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         resp = ccid_gen_slot_status(cs, u->get_slot_status.hdr.bSeq, CCID_CMD_STATUS_OK, 0);</span><br><span>      return ccid_send(cs->ci, resp);</span><br><span> }</span><br><span>@@ -252,6 +269,8 @@</span><br><span> static int ccid_handle_mechanical(struct ccid_slot *cs, struct msgb *msg)</span><br><span> {</span><br><span>      const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct msgb *resp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         resp = ccid_gen_slot_status(cs, u->get_slot_status.hdr.bSeq, CCID_CMD_STATUS_OK, 0);</span><br><span>      return ccid_send(cs->ci, resp);</span><br><span> }</span><br><span>@@ -260,6 +279,8 @@</span><br><span> static int ccid_handle_abort(struct ccid_slot *cs, struct msgb *msg)</span><br><span> {</span><br><span>   const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct msgb *resp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         resp = ccid_gen_slot_status(cs, u->get_slot_status.hdr.bSeq, CCID_CMD_STATUS_OK, 0);</span><br><span>      return ccid_send(cs->ci, resp);</span><br><span> }</span><br><span>@@ -267,7 +288,8 @@</span><br><span> /* Section 6.1.14 */</span><br><span> static int ccid_handle_set_rate_and_clock(struct ccid_slot *cs, struct msgb *msg)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- const union ccid_pc_to_rdr *u = msgb_ccid(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+       const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct msgb *resp;</span><br><span> }</span><br><span> </span><br><span> /* handle data arriving from the host on the OUT endpoint */</span><br><span>@@ -277,13 +299,14 @@</span><br><span>  const struct ccid_header *ch = (const struct ccid_header *) u;</span><br><span>       unsigned int len = msgb_length(msg);</span><br><span>         struct ccid_slot *cs;</span><br><span style="color: hsl(120, 100%, 40%);">+ int rc;</span><br><span> </span><br><span>  if (len < sizeof(*ch)) {</span><br><span>          /* FIXME */</span><br><span>          return -1;</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   cs = get_ccid_slot(ci, ch->hdr.bSlot);</span><br><span style="color: hsl(120, 100%, 40%);">+     cs = get_ccid_slot(ci, ch->bSlot);</span><br><span>        if (!cs) {</span><br><span>           /* FIXME */</span><br><span>          return -1;</span><br><span>@@ -338,7 +361,7 @@</span><br><span>     case PC_to_RDR_T0APDU:</span><br><span>               if (len != /*FIXME*/ sizeof(u->t0apdu))</span><br><span>                   goto short_msg;</span><br><span style="color: hsl(0, 100%, 40%);">-         rc = ccid_handle_t0_apdu(cs, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+            rc = ccid_handle_t0apdu(cs, msg);</span><br><span>            break;</span><br><span>       case PC_to_RDR_Secure:</span><br><span>               if (len < sizeof(u->secure))</span><br><span>@@ -361,10 +384,12 @@</span><br><span>           rc = ccid_handle_set_rate_and_clock(cs, msg);</span><br><span>                break;</span><br><span>       default:</span><br><span style="color: hsl(0, 100%, 40%);">-                FIXME</span><br><span style="color: hsl(120, 100%, 40%);">+         /* FIXME */</span><br><span>          break;</span><br><span>       }</span><br><span style="color: hsl(0, 100%, 40%);">-       FIXME</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> short_msg:</span><br><span style="color: hsl(0, 100%, 40%);">-       FIXME</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME */</span><br><span style="color: hsl(120, 100%, 40%);">+   return -1;</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/14054">change 14054</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/14054"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ccid-firmware </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I0350fec36eeef69eeccb873f547c9df8b364ae12 </div>
<div style="display:none"> Gerrit-Change-Number: 14054 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>