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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add various SIM card related debug command<br><br>this allows commands like<br> sim-status 0                # read the status<br> sim-voltage 0 5     # set voltage to 5V<br> sim-clkdiv 0 2            # set clock-divider to 2 (10 MHz)<br> sim-reset 0 0               # disable reset<br> sim-power 0 1         # enable power<br><br>Change-Id: Id6131be60d37cba769c79952fa44f3ec6c976a38<br>---<br>M sysmoOCTSIM/main.c<br>M sysmoOCTSIM/ncn8025.c<br>M sysmoOCTSIM/ncn8025.h<br>3 files changed, 193 insertions(+), 0 deletions(-)<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 ef87162..dc67406 100644</span><br><span>--- a/sysmoOCTSIM/main.c</span><br><span>+++ b/sysmoOCTSIM/main.c</span><br><span>@@ -16,6 +16,8 @@</span><br><span>  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.</span><br><span> */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdlib.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdio.h></span><br><span> #include <parts.h></span><br><span> #include <hal_cache.h></span><br><span> #include <hri_port_e54.h></span><br><span>@@ -55,6 +57,163 @@</span><br><span>    printf("Hello World!\r\n");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int validate_slotnr(int argc, char **argv, int idx)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ int slotnr;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (argc < idx+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                printf("You have to specify the slot number (0..7)\r\n");</span><br><span style="color: hsl(120, 100%, 40%);">+           return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     slotnr = atoi(argv[idx]);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (slotnr < 0 || slotnr > 7) {</span><br><span style="color: hsl(120, 100%, 40%);">+         printf("You have to specify the slot number (0..7)\r\n");</span><br><span style="color: hsl(120, 100%, 40%);">+           return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     return slotnr;</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%);">+DEFUN(sim_status, cmd_sim_status, "sim-status", "Get state of specified NCN8025")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ncn8025_settings settings;</span><br><span style="color: hsl(120, 100%, 40%);">+     int slotnr = validate_slotnr(argc, argv, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (slotnr < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</span><br><span style="color: hsl(120, 100%, 40%);">+       ncn8025_get(slotnr, &settings);</span><br><span style="color: hsl(120, 100%, 40%);">+   printf("SIM%d: ", slotnr);</span><br><span style="color: hsl(120, 100%, 40%);">+  ncn8025_dump(&settings);</span><br><span style="color: hsl(120, 100%, 40%);">+  printf("\r\n");</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%);">+DEFUN(sim_power, cmd_sim_power, "sim-power", "Enable/disable SIM card power")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  struct ncn8025_settings settings;</span><br><span style="color: hsl(120, 100%, 40%);">+     int slotnr = validate_slotnr(argc, argv, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+  int enable;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (slotnr < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (argc < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+            printf("You have to specify 0=disable or 1=enable\r\n");</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     enable = atoi(argv[2]);</span><br><span style="color: hsl(120, 100%, 40%);">+       ncn8025_get(slotnr, &settings);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (enable)</span><br><span style="color: hsl(120, 100%, 40%);">+           settings.cmdvcc = true;</span><br><span style="color: hsl(120, 100%, 40%);">+       else</span><br><span style="color: hsl(120, 100%, 40%);">+          settings.cmdvcc = false;</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%);">+DEFUN(sim_reset, cmd_sim_reset, "sim-reset", "Enable/disable SIM reset")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     struct ncn8025_settings settings;</span><br><span style="color: hsl(120, 100%, 40%);">+     int slotnr = validate_slotnr(argc, argv, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+  int enable;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (slotnr < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (argc < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+            printf("You have to specify 0=disable or 1=enable\r\n");</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     enable = atoi(argv[2]);</span><br><span style="color: hsl(120, 100%, 40%);">+       ncn8025_get(slotnr, &settings);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (enable)</span><br><span style="color: hsl(120, 100%, 40%);">+           settings.rstin = true;</span><br><span style="color: hsl(120, 100%, 40%);">+        else</span><br><span style="color: hsl(120, 100%, 40%);">+          settings.rstin = false;</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%);">+DEFUN(sim_clkdiv, cmd_sim_clkdiv, "sim-clkdiv", "Set SIM clock divider (1,2,4,8)")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   struct ncn8025_settings settings;</span><br><span style="color: hsl(120, 100%, 40%);">+     int slotnr = validate_slotnr(argc, argv, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+  int clkdiv;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (slotnr < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (argc < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+            printf("You have to specify a valid divider (1,2,4,8)\r\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     clkdiv = atoi(argv[2]);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (clkdiv != 1 && clkdiv != 2 && clkdiv != 4 && clkdiv != 8) {</span><br><span style="color: hsl(120, 100%, 40%);">+               printf("You have to specify a valid divider (1,2,4,8)\r\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     ncn8025_get(slotnr, &settings);</span><br><span style="color: hsl(120, 100%, 40%);">+   switch (clkdiv) {</span><br><span style="color: hsl(120, 100%, 40%);">+     case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+               settings.clkdiv = SIM_CLKDIV_1;</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+               settings.clkdiv = SIM_CLKDIV_2;</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+               settings.clkdiv = SIM_CLKDIV_4;</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 8:</span><br><span style="color: hsl(120, 100%, 40%);">+               settings.clkdiv = SIM_CLKDIV_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%);">+     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%);">+DEFUN(sim_voltage, cmd_sim_voltage, "sim-voltage", "Set SIM voltage (5/3/1.8)")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      struct ncn8025_settings settings;</span><br><span style="color: hsl(120, 100%, 40%);">+     int slotnr = validate_slotnr(argc, argv, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (slotnr < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (argc < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+            printf("You have to specify a valid voltage (5/3/1.8)\r\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     ncn8025_get(slotnr, &settings);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!strcmp(argv[2], "5"))</span><br><span style="color: hsl(120, 100%, 40%);">+          settings.vsel = SIM_VOLT_5V0;</span><br><span style="color: hsl(120, 100%, 40%);">+ else if (!strcmp(argv[2], "3"))</span><br><span style="color: hsl(120, 100%, 40%);">+             settings.vsel = SIM_VOLT_3V0;</span><br><span style="color: hsl(120, 100%, 40%);">+ else if (!strcmp(argv[2], "1.8"))</span><br><span style="color: hsl(120, 100%, 40%);">+           settings.vsel = SIM_VOLT_1V8;</span><br><span style="color: hsl(120, 100%, 40%);">+ else {</span><br><span style="color: hsl(120, 100%, 40%);">+                printf("You have to specify a valid voltage (5/3/1.8)\r\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</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%);">+DEFUN(sim_led, cmd_sim_led, "sim-led", "Set SIM LED (1=on, 0=off)")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  struct ncn8025_settings settings;</span><br><span style="color: hsl(120, 100%, 40%);">+     int slotnr = validate_slotnr(argc, argv, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (slotnr < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (argc < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+            printf("You have to specify 0=disable or 1=enable\r\n");</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     ncn8025_get(slotnr, &settings);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (atoi(argv[2]))</span><br><span style="color: hsl(120, 100%, 40%);">+            settings.led = true;</span><br><span style="color: hsl(120, 100%, 40%);">+  else</span><br><span style="color: hsl(120, 100%, 40%);">+          settings.led = false;</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%);">+</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%);">+</span><br><span> int main(void)</span><br><span> {</span><br><span>      atmel_start_init();</span><br><span>@@ -66,6 +225,12 @@</span><br><span>    board_init();</span><br><span>        command_init("sysmoOCTSIM> ");</span><br><span>  command_register(&cmd_hello);</span><br><span style="color: hsl(120, 100%, 40%);">+     command_register(&cmd_sim_status);</span><br><span style="color: hsl(120, 100%, 40%);">+        command_register(&cmd_sim_power);</span><br><span style="color: hsl(120, 100%, 40%);">+ command_register(&cmd_sim_reset);</span><br><span style="color: hsl(120, 100%, 40%);">+ command_register(&cmd_sim_clkdiv);</span><br><span style="color: hsl(120, 100%, 40%);">+        command_register(&cmd_sim_voltage);</span><br><span style="color: hsl(120, 100%, 40%);">+       command_register(&cmd_sim_led);</span><br><span> </span><br><span>      printf("\r\n\r\nsysmocom sysmoOCTSIM\r\n");</span><br><span>        while (true) { // main loop</span><br><span>diff --git a/sysmoOCTSIM/ncn8025.c b/sysmoOCTSIM/ncn8025.c</span><br><span>index 99b93b8..5f9b03d 100644</span><br><span>--- a/sysmoOCTSIM/ncn8025.c</span><br><span>+++ b/sysmoOCTSIM/ncn8025.c</span><br><span>@@ -8,6 +8,7 @@</span><br><span> </span><br><span> #include <stdint.h></span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdio.h></span><br><span> #include <utils_assert.h></span><br><span> #include <utils.h></span><br><span> #include "octsim_i2c.h"</span><br><span>@@ -134,3 +135,29 @@</span><br><span>            return rc;</span><br><span>   return ncn8025_set(slot, &def_settings);</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static const char *volt_str[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+        [SIM_VOLT_3V0] = "3.0",</span><br><span style="color: hsl(120, 100%, 40%);">+     [SIM_VOLT_5V0] = "5.0",</span><br><span style="color: hsl(120, 100%, 40%);">+     [SIM_VOLT_1V8] = "1.8",</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%);">+static const unsigned int div_val[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+      [SIM_CLKDIV_1] = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+   [SIM_CLKDIV_2] = 2,</span><br><span style="color: hsl(120, 100%, 40%);">+   [SIM_CLKDIV_4] = 4,</span><br><span style="color: hsl(120, 100%, 40%);">+   [SIM_CLKDIV_8] = 8,</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%);">+void ncn8025_dump(const struct ncn8025_settings *set)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   printf("VOLT=%s, CLKDIV=%u", volt_str[set->vsel], div_val[set->clkdiv]);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (set->rstin)</span><br><span style="color: hsl(120, 100%, 40%);">+            printf(", RST");</span><br><span style="color: hsl(120, 100%, 40%);">+    if (set->cmdvcc)</span><br><span style="color: hsl(120, 100%, 40%);">+           printf(", VCC");</span><br><span style="color: hsl(120, 100%, 40%);">+    if (set->simpres)</span><br><span style="color: hsl(120, 100%, 40%);">+          printf(", SIMPRES");</span><br><span style="color: hsl(120, 100%, 40%);">+        if (set->led)</span><br><span style="color: hsl(120, 100%, 40%);">+              printf(", LED");</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/sysmoOCTSIM/ncn8025.h b/sysmoOCTSIM/ncn8025.h</span><br><span>index a392c5d..79e8b60 100644</span><br><span>--- a/sysmoOCTSIM/ncn8025.h</span><br><span>+++ b/sysmoOCTSIM/ncn8025.h</span><br><span>@@ -26,3 +26,4 @@</span><br><span> int ncn8025_set(uint8_t slot, const struct ncn8025_settings *set);</span><br><span> int ncn8025_get(uint8_t slot, struct ncn8025_settings *set);</span><br><span> int ncn8025_init(unsigned int slot);</span><br><span style="color: hsl(120, 100%, 40%);">+void ncn8025_dump(const struct ncn8025_settings *set);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13037">change 13037</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/13037"/><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: Id6131be60d37cba769c79952fa44f3ec6c976a38 </div>
<div style="display:none"> Gerrit-Change-Number: 13037 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: 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>