<p>laforge would like Hoernchen to <strong>review</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/15645">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ccid_gen_notify_slot_status: Fix bitmask of card slot insert status<br><br>Change-Id: I0dece04fd302041aa8e23208734e9028ad42cd62<br>---<br>M sysmoOCTSIM/main.c<br>1 file changed, 25 insertions(+), 11 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ccid-firmware refs/changes/45/15645/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/sysmoOCTSIM/main.c b/sysmoOCTSIM/main.c</span><br><span>index 8b3f5fa..9ef7f2f 100644</span><br><span>--- a/sysmoOCTSIM/main.c</span><br><span>+++ b/sysmoOCTSIM/main.c</span><br><span>@@ -301,13 +301,32 @@</span><br><span> }</span><br><span> </span><br><span> #include "ccid_proto.h"</span><br><span style="color: hsl(0, 100%, 40%);">-struct msgb *ccid_gen_notify_slot_status(const uint8_t *bitmask, uint8_t bm_len)</span><br><span style="color: hsl(120, 100%, 40%);">+static struct msgb *ccid_gen_notify_slot_status(uint8_t old_bm, uint8_t new_bm)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t statusbytes[2] = {0};</span><br><span>        //struct msgb *msg = ccid_msgb_alloc();</span><br><span>      struct msgb *msg = msgb_alloc(64, "IRQ");</span><br><span style="color: hsl(0, 100%, 40%);">-     struct ccid_rdr_to_pc_notify_slot_change *nsc = msgb_put(msg, sizeof(*nsc) + bm_len);</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ccid_rdr_to_pc_notify_slot_change *nsc = msgb_put(msg, sizeof(*nsc) + sizeof(statusbytes));</span><br><span>   nsc->bMessageType = RDR_to_PC_NotifySlotChange;</span><br><span style="color: hsl(0, 100%, 40%);">-      memcpy(&nsc->bmSlotCCState, bitmask, bm_len);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        for(int i = 0; i <8; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                uint8_t byteidx = i >> 2;</span><br><span style="color: hsl(120, 100%, 40%);">+               uint8_t old_bit = old_bm & (1 << i);</span><br><span style="color: hsl(120, 100%, 40%);">+                uint8_t new_bit = new_bm & (1 << i);</span><br><span style="color: hsl(120, 100%, 40%);">+                uint8_t bv;</span><br><span style="color: hsl(120, 100%, 40%);">+           if (old_bit == new_bit && new_bit == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                       bv = 0x00;</span><br><span style="color: hsl(120, 100%, 40%);">+            else if (old_bit == new_bit && new_bit == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                  bv = 0x01;</span><br><span style="color: hsl(120, 100%, 40%);">+            else if (old_bit != new_bit && new_bit == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                  bv = 0x02;</span><br><span style="color: hsl(120, 100%, 40%);">+            else</span><br><span style="color: hsl(120, 100%, 40%);">+                  bv = 0x03;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          statusbytes[byteidx] |= bv << ((i % 4) << 1);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   memcpy(&nsc->bmSlotCCState, statusbytes, sizeof(statusbytes));</span><br><span> </span><br><span>    return msg;</span><br><span> }</span><br><span>@@ -319,19 +338,14 @@</span><br><span>     struct msgb *msg;</span><br><span>    unsigned int i;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     for (i = 0; i < 8; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-            bool irq_level = ncn8025_interrupt_level(i);</span><br><span style="color: hsl(0, 100%, 40%);">-            if (irq_level)</span><br><span style="color: hsl(0, 100%, 40%);">-                  new_mask &= ~(1 << i);</span><br><span style="color: hsl(0, 100%, 40%);">-                else</span><br><span style="color: hsl(0, 100%, 40%);">-                    new_mask |= (1 << i);</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(120, 100%, 40%);">+     for (i = 0; i < 8; i++)</span><br><span style="color: hsl(120, 100%, 40%);">+            new_mask |= ncn8025_interrupt_level(i) << i;</span><br><span> </span><br><span>       /* notify the user/host about any changes */</span><br><span>         if (g_ccid_s.card_insert_mask != new_mask) {</span><br><span>                 printf("CARD_DET 0x%02x -> 0x%02x\r\n",</span><br><span>                         g_ccid_s.card_insert_mask, new_mask);</span><br><span style="color: hsl(0, 100%, 40%);">-           msg = ccid_gen_notify_slot_status(&new_mask, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+          msg = ccid_gen_notify_slot_status(g_ccid_s.card_insert_mask, new_mask);</span><br><span>              msgb_enqueue_irqsafe(&g_ccid_s.irq_ep.list, msg);</span><br><span> </span><br><span>            g_ccid_s.card_insert_mask = new_mask;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/15645">change 15645</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/c/osmo-ccid-firmware/+/15645"/><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-Change-Id: I0dece04fd302041aa8e23208734e9028ad42cd62 </div>
<div style="display:none"> Gerrit-Change-Number: 15645 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>