<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/13847">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;">add slot_set_isorate to the baud rate using ISO 7816 values<br><br>Change-Id: I604f72bb28944962aee055e6d88a435827f79bec<br>---<br>M sysmoOCTSIM/main.c<br>1 file changed, 55 insertions(+), 1 deletion(-)<br><br></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 70099e1..a895c14 100644</span><br><span>--- a/sysmoOCTSIM/main.c</span><br><span>+++ b/sysmoOCTSIM/main.c</span><br><span>@@ -30,6 +30,7 @@</span><br><span> #include "i2c_bitbang.h"</span><br><span> #include "octsim_i2c.h"</span><br><span> #include "ncn8025.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "iso7816_3.h"</span><br><span> </span><br><span> #include "command.h"</span><br><span> </span><br><span>@@ -158,6 +159,57 @@</span><br><span>    return true;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/** change ISO baud rate of card slot</span><br><span style="color: hsl(120, 100%, 40%);">+ *  @param[in] slotnr slot number for which the baud rate should be set</span><br><span style="color: hsl(120, 100%, 40%);">+ *  @param[in] clkdiv can clock divider</span><br><span style="color: hsl(120, 100%, 40%);">+ *  @param[in] f clock rate conversion integer F</span><br><span style="color: hsl(120, 100%, 40%);">+ *  @param[in] d baud rate adjustment factor D</span><br><span style="color: hsl(120, 100%, 40%);">+ *  @return if the baud rate has been set, else a parameter is out of range</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+static bool slot_set_isorate(uint8_t slotnr, enum ncn8025_sim_clkdiv clkdiv, uint16_t f, uint8_t d)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    // input checks</span><br><span style="color: hsl(120, 100%, 40%);">+       ASSERT(slotnr < ARRAY_SIZE(SIM_peripheral_descriptors));</span><br><span style="color: hsl(120, 100%, 40%);">+   if (clkdiv != SIM_CLKDIV_1 && clkdiv != SIM_CLKDIV_2 && clkdiv != SIM_CLKDIV_4 && clkdiv != SIM_CLKDIV_8) {</span><br><span style="color: hsl(120, 100%, 40%);">+           return false;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!iso7816_3_valid_f(f)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          return false;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!iso7816_3_valid_d(d)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          return false;</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%);">+   // set clockdiv</span><br><span style="color: hsl(120, 100%, 40%);">+       struct ncn8025_settings settings;</span><br><span style="color: hsl(120, 100%, 40%);">+     ncn8025_get(slotnr, &settings);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (settings.clkdiv != clkdiv) {</span><br><span style="color: hsl(120, 100%, 40%);">+              settings.clkdiv = clkdiv;</span><br><span style="color: hsl(120, 100%, 40%);">+             ncn8025_set(slotnr, &settings);</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%);">+   // calculate desired frequency</span><br><span style="color: hsl(120, 100%, 40%);">+        uint32_t freq = 20000000UL; // maximum frequency</span><br><span style="color: hsl(120, 100%, 40%);">+      switch (clkdiv) {</span><br><span style="color: hsl(120, 100%, 40%);">+     case SIM_CLKDIV_1:</span><br><span style="color: hsl(120, 100%, 40%);">+            freq /= 1;</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case SIM_CLKDIV_2:</span><br><span style="color: hsl(120, 100%, 40%);">+            freq /= 2;</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case SIM_CLKDIV_4:</span><br><span style="color: hsl(120, 100%, 40%);">+            freq /= 4;</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case SIM_CLKDIV_8:</span><br><span style="color: hsl(120, 100%, 40%);">+            freq /= 8;</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</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%);">+   // set baud rate</span><br><span style="color: hsl(120, 100%, 40%);">+      uint32_t baudrate = (freq * d) / f; // calculate actual baud rate</span><br><span style="color: hsl(120, 100%, 40%);">+     return slot_set_baudrate(slotnr, baudrate); // // set baud rate</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DEFUN(sim_status, cmd_sim_status, "sim-status", "Get state of specified NCN8025")</span><br><span> {</span><br><span>   struct ncn8025_settings settings;</span><br><span>@@ -322,10 +374,12 @@</span><br><span>    // TODO wait some time for card to be completely deactivated</span><br><span>         usart_async_flush_rx_buffer(SIM_peripheral_descriptors[slotnr]); // flush RX buffer to start from scratch</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   slot_set_baudrate(slotnr, 2500000 / (372 / 1)); // set USART baud rate to match the interface (f = 2.5 MHz) and card default settings (Fd = 372, Dd = 1)</span><br><span style="color: hsl(120, 100%, 40%);">+      </span><br><span>     // set clock to lowest frequency (20 MHz / 8 = 2.5 MHz)</span><br><span>      // note: according to ISO/IEC 7816-3:2006 section 5.2.3 the minimum value is 1 MHz, and maximum is 5 MHz during activation</span><br><span>   settings.clkdiv = SIM_CLKDIV_8;</span><br><span style="color: hsl(120, 100%, 40%);">+       // set USART baud rate to match the interface (f = 2.5 MHz) and card default settings (Fd = 372, Dd = 1)</span><br><span style="color: hsl(120, 100%, 40%);">+      slot_set_isorate(slotnr, settings.clkdiv, ISO7816_3_DEFAULT_FD, ISO7816_3_DEFAULT_DD);</span><br><span>       // set card voltage to 3.0 V (the most supported)</span><br><span>    // note: according to ISO/IEC 7816-3:2006 no voltage should damage the card, and you should cycle from low to high</span><br><span>   settings.vsel = SIM_VOLT_3V0;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13847">change 13847</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/13847"/><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: I604f72bb28944962aee055e6d88a435827f79bec </div>
<div style="display:none"> Gerrit-Change-Number: 13847 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: Kévin Redon <kredon@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Kévin Redon <kredon@sysmocom.de> </div>