<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/simtrace2/+/15875">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">add/fix mcp23017 i2c gpio expander functions and tests<br><br>Change-Id: Ia2e5a1bf3f97272931014e54e587109297556c03<br>---<br>M firmware/apps/gpio_test/gpio_test.c<br>M firmware/libboard/octsimtest/include/i2c.h<br>M firmware/libboard/octsimtest/include/mcp23017.h<br>M firmware/libboard/octsimtest/source/board_octsimtest.c<br>M firmware/libboard/octsimtest/source/i2c.c<br>M firmware/libboard/octsimtest/source/mcp23017.c<br>6 files changed, 52 insertions(+), 9 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/firmware/apps/gpio_test/gpio_test.c b/firmware/apps/gpio_test/gpio_test.c</span><br><span>index 2ab23e7..a6b0a00 100644</span><br><span>--- a/firmware/apps/gpio_test/gpio_test.c</span><br><span>+++ b/firmware/apps/gpio_test/gpio_test.c</span><br><span>@@ -2,9 +2,7 @@</span><br><span> #include "utils.h"</span><br><span> #include "chip.h"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> void gpio_test_init(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        printf("FIXME run tests here\n\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("FIXME run tests here\n\r");</span><br><span> }</span><br><span>diff --git a/firmware/libboard/octsimtest/include/i2c.h b/firmware/libboard/octsimtest/include/i2c.h</span><br><span>index 5a8c908..6c94d26 100644</span><br><span>--- a/firmware/libboard/octsimtest/include/i2c.h</span><br><span>+++ b/firmware/libboard/octsimtest/include/i2c.h</span><br><span>@@ -22,7 +22,7 @@</span><br><span> </span><br><span> bool i2c_write_byte(bool send_start, bool send_stop, uint8_t byte);</span><br><span> uint8_t i2c_read_byte(bool nack, bool send_stop);</span><br><span style="color: hsl(0, 100%, 40%);">-static void i2c_stop_cond(void);</span><br><span style="color: hsl(120, 100%, 40%);">+void i2c_stop_cond(void);</span><br><span> </span><br><span> int eeprom_write_byte(uint8_t slave, uint8_t addr, uint8_t byte);</span><br><span> int eeprom_read_byte(uint8_t slave, uint8_t addr);</span><br><span>diff --git a/firmware/libboard/octsimtest/include/mcp23017.h b/firmware/libboard/octsimtest/include/mcp23017.h</span><br><span>index dea6285..962a1d5 100644</span><br><span>--- a/firmware/libboard/octsimtest/include/mcp23017.h</span><br><span>+++ b/firmware/libboard/octsimtest/include/mcp23017.h</span><br><span>@@ -19,5 +19,7 @@</span><br><span> #define MCP23017_ADDRESS 0x20</span><br><span> </span><br><span> int mcp23017_init(uint8_t slave);</span><br><span style="color: hsl(120, 100%, 40%);">+int mcp23017_test(uint8_t slave);</span><br><span style="color: hsl(120, 100%, 40%);">+int mcp23017_toggle(uint8_t slave);</span><br><span> //int mcp23017_write_byte(uint8_t slave, uint8_t addr, uint8_t byte);</span><br><span> //int mcp23017_read_byte(uint8_t slave, uint8_t addr);</span><br><span>diff --git a/firmware/libboard/octsimtest/source/board_octsimtest.c b/firmware/libboard/octsimtest/source/board_octsimtest.c</span><br><span>index 2772015..b7d7245 100644</span><br><span>--- a/firmware/libboard/octsimtest/source/board_octsimtest.c</span><br><span>+++ b/firmware/libboard/octsimtest/source/board_octsimtest.c</span><br><span>@@ -32,12 +32,20 @@</span><br><span>   case '?':</span><br><span>            printf("\t?\thelp\n\r");</span><br><span>           printf("\tR\treset SAM3\n\r");</span><br><span style="color: hsl(120, 100%, 40%);">+              printf("\tm\trun mcp23017 test\n\r");</span><br><span style="color: hsl(120, 100%, 40%);">+               printf("\tR\ttoggle MSB of gpio on mcp23017\n\r");</span><br><span>                 break;</span><br><span>       case 'R':</span><br><span>            printf("Asking NVIC to reset us\n\r");</span><br><span>             USBD_Disconnect();</span><br><span>           NVIC_SystemReset();</span><br><span>          break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 'm':</span><br><span style="color: hsl(120, 100%, 40%);">+             mcp23017_test(MCP23017_ADDRESS);</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 't':</span><br><span style="color: hsl(120, 100%, 40%);">+             mcp23017_toggle(MCP23017_ADDRESS);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span>       default:</span><br><span>             printf("Unknown command '%c'\n\r", ch);</span><br><span>            break;</span><br><span>@@ -50,7 +58,8 @@</span><br><span>   usb_buf_init();</span><br><span> </span><br><span>  i2c_pin_init();</span><br><span style="color: hsl(0, 100%, 40%);">- mcp23017_init(MCP23017_ADDRESS);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!mcp23017_init(MCP23017_ADDRESS))</span><br><span style="color: hsl(120, 100%, 40%);">+         printf("mcp23017 not found!\n\r");</span><br><span>         /* Initialize checking for card insert/remove events */</span><br><span>      //card_present_init();</span><br><span> #endif</span><br><span>diff --git a/firmware/libboard/octsimtest/source/i2c.c b/firmware/libboard/octsimtest/source/i2c.c</span><br><span>index a708704..2cd8423 100644</span><br><span>--- a/firmware/libboard/octsimtest/source/i2c.c</span><br><span>+++ b/firmware/libboard/octsimtest/source/i2c.c</span><br><span>@@ -96,7 +96,7 @@</span><br><span>        i2c_started = true;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void i2c_stop_cond(void)</span><br><span style="color: hsl(120, 100%, 40%);">+void i2c_stop_cond(void)</span><br><span> {</span><br><span>   clear_sda();</span><br><span>         set_scl();</span><br><span>diff --git a/firmware/libboard/octsimtest/source/mcp23017.c b/firmware/libboard/octsimtest/source/mcp23017.c</span><br><span>index 63390b4..167bf34 100644</span><br><span>--- a/firmware/libboard/octsimtest/source/mcp23017.c</span><br><span>+++ b/firmware/libboard/octsimtest/source/mcp23017.c</span><br><span>@@ -94,13 +94,47 @@</span><br><span> </span><br><span> int mcp23017_init(uint8_t slave)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      printf("mcp23017_init\n");</span><br><span style="color: hsl(120, 100%, 40%);">+  printf("mcp23017_init\n\r");</span><br><span>       // all gpio input</span><br><span>    if (mcp23017_write_byte(slave, MCP23017_IODIRA, 0xff))</span><br><span>               return false;</span><br><span style="color: hsl(0, 100%, 40%);">-   if (mcp23017_write_byte(slave, MCP23017_IODIRB, 0xff))</span><br><span style="color: hsl(120, 100%, 40%);">+        // msb of portb output, rest input</span><br><span style="color: hsl(120, 100%, 40%);">+    if (mcp23017_write_byte(slave, MCP23017_IODIRB, 0x7f))</span><br><span>               return false;</span><br><span style="color: hsl(0, 100%, 40%);">-   printf("mcp23017 found\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mcp23017_write_byte(slave, MCP23017_IOCONA, 0x20)) //disable SEQOP (autoinc addressing)</span><br><span style="color: hsl(120, 100%, 40%);">+           return false;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("mcp23017 found\n\r");</span><br><span>      return true;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int mcp23017_test(uint8_t slave)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    printf("mcp23017_test\n\r");</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("GPIOA 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_GPIOA));</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("GPIOB 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_GPIOB));</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("IODIRA 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_IODIRA));</span><br><span style="color: hsl(120, 100%, 40%);">+       printf("IODIRB 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_IODIRB));</span><br><span style="color: hsl(120, 100%, 40%);">+       printf("IOCONA 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_IOCONA));</span><br><span style="color: hsl(120, 100%, 40%);">+       printf("IOCONB 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_IOCONB));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     return 0;</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%);">+int mcp23017_toggle(uint8_t slave)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ // example writing MSB of gpio</span><br><span style="color: hsl(120, 100%, 40%);">+        static bool foo=false;</span><br><span style="color: hsl(120, 100%, 40%);">+        if (foo)</span><br><span style="color: hsl(120, 100%, 40%);">+      {</span><br><span style="color: hsl(120, 100%, 40%);">+             printf("+\n\r");</span><br><span style="color: hsl(120, 100%, 40%);">+            mcp23017_write_byte(slave, MCP23017_OLATB, 0x80);</span><br><span style="color: hsl(120, 100%, 40%);">+             foo=false;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     else</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+             printf("-\n\r");</span><br><span style="color: hsl(120, 100%, 40%);">+            mcp23017_write_byte(slave, MCP23017_OLATB, 0x00);</span><br><span style="color: hsl(120, 100%, 40%);">+             foo=true;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/simtrace2/+/15875">change 15875</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/simtrace2/+/15875"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: simtrace2 </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia2e5a1bf3f97272931014e54e587109297556c03 </div>
<div style="display:none"> Gerrit-Change-Number: 15875 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: roh <jsteiger@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>