<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/21047">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">tdef: Introduce OSMO_TDEF_US unit<br><br>Some applications may need submillisecond timers, such as those<br>interacting with modbus serial lines (RS-485, RTU), which require<br>timers of values around 1.5 char-time (T1.5), where a data char is<br>composed of 11 bits sent on the line: 1 start bit, 8 data bits,<br>1 stop bit, and and parity bit (or 2nd stop bits if no parity).<br><br>For instance, for a baudrate of 9600:<br>1.5 * 11 / 9600 = 1.718 ms = 1718 us<br><br>So having a granularity of MS is not enough here.<br><br>Change-Id: I71848d7c1ee0649929ce07680ee7320bb2a42f0e<br>---<br>M include/osmocom/core/tdef.h<br>M src/tdef.c<br>M tests/tdef/tdef_test.c<br>M tests/tdef/tdef_test.ok<br>4 files changed, 49 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/47/21047/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/core/tdef.h b/include/osmocom/core/tdef.h</span><br><span>index 54819d9..627ba3f 100644</span><br><span>--- a/include/osmocom/core/tdef.h</span><br><span>+++ b/include/osmocom/core/tdef.h</span><br><span>@@ -40,6 +40,7 @@</span><br><span>     OSMO_TDEF_MS,           /*!< milliseconds */</span><br><span>      OSMO_TDEF_M,            /*!< minutes */</span><br><span>   OSMO_TDEF_CUSTOM,       /*!< unspecified unit, explained in osmo_tdef.desc. */</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_TDEF_US,           /*!< microseconds */</span><br><span> };</span><br><span> </span><br><span> extern const struct value_string osmo_tdef_unit_names[];</span><br><span>diff --git a/src/tdef.c b/src/tdef.c</span><br><span>index 71a3315..897a92f 100644</span><br><span>--- a/src/tdef.c</span><br><span>+++ b/src/tdef.c</span><br><span>@@ -93,6 +93,17 @@</span><br><span>              return 1;</span><br><span> </span><br><span>        switch (b) {</span><br><span style="color: hsl(120, 100%, 40%);">+  case OSMO_TDEF_US:</span><br><span style="color: hsl(120, 100%, 40%);">+            switch (a) {</span><br><span style="color: hsl(120, 100%, 40%);">+          case OSMO_TDEF_MS:</span><br><span style="color: hsl(120, 100%, 40%);">+                    return 1000;</span><br><span style="color: hsl(120, 100%, 40%);">+          case OSMO_TDEF_S:</span><br><span style="color: hsl(120, 100%, 40%);">+                     return 1000*1000;</span><br><span style="color: hsl(120, 100%, 40%);">+             case OSMO_TDEF_M:</span><br><span style="color: hsl(120, 100%, 40%);">+                     return 60*1000*1000;</span><br><span style="color: hsl(120, 100%, 40%);">+          default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    case OSMO_TDEF_MS:</span><br><span>           switch (a) {</span><br><span>                 case OSMO_TDEF_S:</span><br><span>@@ -351,6 +362,7 @@</span><br><span>      { OSMO_TDEF_MS, "ms" },</span><br><span>    { OSMO_TDEF_M, "m" },</span><br><span>      { OSMO_TDEF_CUSTOM, "custom-unit" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { OSMO_TDEF_US, "us" },</span><br><span>    {}</span><br><span> };</span><br><span> </span><br><span>diff --git a/tests/tdef/tdef_test.c b/tests/tdef/tdef_test.c</span><br><span>index 9c0808e..ae5e206 100644</span><br><span>--- a/tests/tdef/tdef_test.c</span><br><span>+++ b/tests/tdef/tdef_test.c</span><br><span>@@ -54,6 +54,7 @@</span><br><span>        { .T=1006, .default_val=0, .unit=OSMO_TDEF_S, .desc="zero s" },</span><br><span>    { .T=1007, .default_val=0, .unit=OSMO_TDEF_M, .desc="zero m" },</span><br><span>    { .T=1008, .default_val=0, .unit=OSMO_TDEF_CUSTOM, .desc="zero" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { .T=1009, .default_val=0, .unit=OSMO_TDEF_US, .desc="zero" },</span><br><span> </span><br><span>         { .T=0, .default_val=1, .unit=OSMO_TDEF_CUSTOM, .desc="zero" },</span><br><span> </span><br><span>@@ -111,7 +112,7 @@</span><br><span>  for (i = 0; i < ARRAY_SIZE(tdefs)-1; i++) {</span><br><span>               unsigned int T = tdefs[i].T;</span><br><span>                 print_tdef_info(T);</span><br><span style="color: hsl(0, 100%, 40%);">-             for (as_unit = OSMO_TDEF_S; as_unit <= OSMO_TDEF_CUSTOM; as_unit++) {</span><br><span style="color: hsl(120, 100%, 40%);">+              for (as_unit = OSMO_TDEF_S; as_unit <= OSMO_TDEF_US; as_unit++) {</span><br><span>                         print_tdef_get_short(tdefs, T, as_unit);</span><br><span>             }</span><br><span>    }</span><br><span>@@ -122,7 +123,7 @@</span><br><span>      for (i = 0; i < ARRAY_SIZE(tdefs_range)-1; i++) {</span><br><span>                 unsigned int T = tdefs_range[i].T;</span><br><span>           print_tdef_info(T);</span><br><span style="color: hsl(0, 100%, 40%);">-             for (as_unit = OSMO_TDEF_S; as_unit <= OSMO_TDEF_CUSTOM; as_unit++) {</span><br><span style="color: hsl(120, 100%, 40%);">+              for (as_unit = OSMO_TDEF_S; as_unit <= OSMO_TDEF_US; as_unit++) {</span><br><span>                         print_tdef_get_short(tdefs_range, T, as_unit);</span><br><span>               }</span><br><span>    }</span><br><span>@@ -136,6 +137,7 @@</span><br><span>      print_tdef_get(tdefs, 5, OSMO_TDEF_MS);</span><br><span>      print_tdef_get(tdefs, 5, OSMO_TDEF_M);</span><br><span>       print_tdef_get(tdefs, 5, OSMO_TDEF_CUSTOM);</span><br><span style="color: hsl(120, 100%, 40%);">+   print_tdef_get(tdefs, 5, OSMO_TDEF_US);</span><br><span> }</span><br><span> </span><br><span> static void test_tdef_set_and_get()</span><br><span>@@ -152,6 +154,7 @@</span><br><span>        print_tdef_get_short(tdefs, 7, OSMO_TDEF_S);</span><br><span>         print_tdef_get_short(tdefs, 7, OSMO_TDEF_M);</span><br><span>         print_tdef_get_short(tdefs, 7, OSMO_TDEF_CUSTOM);</span><br><span style="color: hsl(120, 100%, 40%);">+     print_tdef_get_short(tdefs, 7, OSMO_TDEF_US);</span><br><span> </span><br><span>    printf("setting 7 = 420\n");</span><br><span>       OSMO_ASSERT(osmo_tdef_set(tdefs, 7, 420, OSMO_TDEF_S) == 0);</span><br><span>@@ -160,6 +163,7 @@</span><br><span>   print_tdef_get_short(tdefs, 7, OSMO_TDEF_S);</span><br><span>         print_tdef_get_short(tdefs, 7, OSMO_TDEF_M);</span><br><span>         print_tdef_get_short(tdefs, 7, OSMO_TDEF_CUSTOM);</span><br><span style="color: hsl(120, 100%, 40%);">+     print_tdef_get_short(tdefs, 7, OSMO_TDEF_US);</span><br><span> </span><br><span>    printf("setting 7 = 10 (ERANGE)\n");</span><br><span>       OSMO_ASSERT(!osmo_tdef_val_in_range(t, 10));</span><br><span>@@ -169,6 +173,7 @@</span><br><span>   print_tdef_get_short(tdefs, 7, OSMO_TDEF_S);</span><br><span>         print_tdef_get_short(tdefs, 7, OSMO_TDEF_M);</span><br><span>         print_tdef_get_short(tdefs, 7, OSMO_TDEF_CUSTOM);</span><br><span style="color: hsl(120, 100%, 40%);">+     print_tdef_get_short(tdefs, 7, OSMO_TDEF_US);</span><br><span> </span><br><span>    printf("setting 7 = 900 (ERANGE)\n");</span><br><span>      OSMO_ASSERT(!osmo_tdef_val_in_range(t, 900));</span><br><span>@@ -178,6 +183,7 @@</span><br><span>  print_tdef_get_short(tdefs, 7, OSMO_TDEF_S);</span><br><span>         print_tdef_get_short(tdefs, 7, OSMO_TDEF_M);</span><br><span>         print_tdef_get_short(tdefs, 7, OSMO_TDEF_CUSTOM);</span><br><span style="color: hsl(120, 100%, 40%);">+     print_tdef_get_short(tdefs, 7, OSMO_TDEF_US);</span><br><span> </span><br><span>    printf("setting 23 = 50 (EEXIST)\n");</span><br><span>      OSMO_ASSERT(osmo_tdef_set(tdefs, 23, 50, OSMO_TDEF_S) == -EEXIST);</span><br><span>diff --git a/tests/tdef/tdef_test.ok b/tests/tdef/tdef_test.ok</span><br><span>index 3c4a093..1770968 100644</span><br><span>--- a/tests/tdef/tdef_test.ok</span><br><span>+++ b/tests/tdef/tdef_test.ok</span><br><span>@@ -5,92 +5,116 @@</span><br><span> osmo_tdef_get(1, ms)        = 100000</span><br><span> osmo_tdef_get(1, m) = 2</span><br><span> osmo_tdef_get(1, custom-unit)    = 100</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1, us)     = 100000000</span><br><span> T2=100ms</span><br><span> osmo_tdef_get(2, s)  = 1</span><br><span> osmo_tdef_get(2, ms)     = 100</span><br><span> osmo_tdef_get(2, m)    = 1</span><br><span> osmo_tdef_get(2, custom-unit)    = 100</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(2, us)     = 100000</span><br><span> T3=100m</span><br><span> osmo_tdef_get(3, s)      = 6000</span><br><span> osmo_tdef_get(3, ms)  = 6000000</span><br><span> osmo_tdef_get(3, m)        = 100</span><br><span> osmo_tdef_get(3, custom-unit)  = 100</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(3, us)     = 6000000000</span><br><span> T4=100custom-unit</span><br><span> osmo_tdef_get(4, s)        = 100</span><br><span> osmo_tdef_get(4, ms)   = 100</span><br><span> osmo_tdef_get(4, m)    = 100</span><br><span> osmo_tdef_get(4, custom-unit)  = 100</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(4, us)     = 100</span><br><span> T7=50s</span><br><span> osmo_tdef_get(7, s)  = 50</span><br><span> osmo_tdef_get(7, ms)    = 50000</span><br><span> osmo_tdef_get(7, m)  = 1</span><br><span> osmo_tdef_get(7, custom-unit)    = 50</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(7, us)      = 50000000</span><br><span> T8=300s</span><br><span> osmo_tdef_get(8, s)    = 300</span><br><span> osmo_tdef_get(8, ms)   = 300000</span><br><span> osmo_tdef_get(8, m) = 5</span><br><span> osmo_tdef_get(8, custom-unit)    = 300</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(8, us)     = 300000000</span><br><span> T9=5m</span><br><span> osmo_tdef_get(9, s)     = 300</span><br><span> osmo_tdef_get(9, ms)   = 300000</span><br><span> osmo_tdef_get(9, m) = 5</span><br><span> osmo_tdef_get(9, custom-unit)    = 5</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(9, us)       = 300000000</span><br><span> T10=20m</span><br><span> osmo_tdef_get(10, s)  = 1200</span><br><span> osmo_tdef_get(10, ms) = 1200000</span><br><span> osmo_tdef_get(10, m)       = 20</span><br><span> osmo_tdef_get(10, custom-unit)  = 20</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(10, us)     = 1200000000</span><br><span> T1000=2000ms</span><br><span> osmo_tdef_get(1000, s)  = 2</span><br><span> osmo_tdef_get(1000, ms)  = 2000</span><br><span> osmo_tdef_get(1000, m)        = 1</span><br><span> osmo_tdef_get(1000, custom-unit) = 2000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1000, us) = 2000000</span><br><span> T1001=60000ms</span><br><span> osmo_tdef_get(1001, s)    = 60</span><br><span> osmo_tdef_get(1001, ms) = 60000</span><br><span> osmo_tdef_get(1001, m)       = 1</span><br><span> osmo_tdef_get(1001, custom-unit) = 60000</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1001, us)        = 60000000</span><br><span> T1004=1ms</span><br><span> osmo_tdef_get(1004, s)       = 1</span><br><span> osmo_tdef_get(1004, ms)  = 1</span><br><span> osmo_tdef_get(1004, m)   = 1</span><br><span> osmo_tdef_get(1004, custom-unit) = 1</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1004, us)    = 1000</span><br><span> T1005=0ms</span><br><span> osmo_tdef_get(1005, s)   = 0</span><br><span> osmo_tdef_get(1005, ms)  = 0</span><br><span> osmo_tdef_get(1005, m)   = 0</span><br><span> osmo_tdef_get(1005, custom-unit) = 0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1005, us)    = 0</span><br><span> T1006=0s</span><br><span> osmo_tdef_get(1006, s)       = 0</span><br><span> osmo_tdef_get(1006, ms)  = 0</span><br><span> osmo_tdef_get(1006, m)   = 0</span><br><span> osmo_tdef_get(1006, custom-unit) = 0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1006, us)    = 0</span><br><span> T1007=0m</span><br><span> osmo_tdef_get(1007, s)       = 0</span><br><span> osmo_tdef_get(1007, ms)  = 0</span><br><span> osmo_tdef_get(1007, m)   = 0</span><br><span> osmo_tdef_get(1007, custom-unit) = 0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1007, us)    = 0</span><br><span> T1008=0custom-unit</span><br><span> osmo_tdef_get(1008, s)     = 0</span><br><span> osmo_tdef_get(1008, ms)  = 0</span><br><span> osmo_tdef_get(1008, m)   = 0</span><br><span> osmo_tdef_get(1008, custom-unit) = 0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1008, us)    = 0</span><br><span style="color: hsl(120, 100%, 40%);">+T1009=0us</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1009, s)  = 0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1009, ms)    = 0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1009, m)     = 0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1009, custom-unit)   = 0</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(1009, us)    = 0</span><br><span> T0=1custom-unit</span><br><span> osmo_tdef_get(0, s)   = 1</span><br><span> osmo_tdef_get(0, ms)     = 1</span><br><span> osmo_tdef_get(0, m)      = 1</span><br><span> osmo_tdef_get(0, custom-unit)    = 1</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(0, us)       = 1</span><br><span> T123=1s</span><br><span> osmo_tdef_get(123, s) = 1</span><br><span> osmo_tdef_get(123, ms)   = 1000</span><br><span> osmo_tdef_get(123, m) = 1</span><br><span> osmo_tdef_get(123, custom-unit)  = 1</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(123, us)     = 1000000</span><br><span> </span><br><span> test_tdef_get_nonexisting()</span><br><span> osmo_tdef_get(tdefs, 5, s, 999) = 999</span><br><span> osmo_tdef_get(tdefs, 5, ms, 999)       = 999</span><br><span> osmo_tdef_get(tdefs, 5, m, 999)        = 999</span><br><span> osmo_tdef_get(tdefs, 5, custom-unit, 999)      = 999</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(tdefs, 5, us, 999) = 999</span><br><span> </span><br><span> test_tdef_set_and_get()</span><br><span> setting 7 = 42</span><br><span>@@ -99,24 +123,28 @@</span><br><span> osmo_tdef_get(7, s)    = 42</span><br><span> osmo_tdef_get(7, m)     = 1</span><br><span> osmo_tdef_get(7, custom-unit)    = 42</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(7, us)      = 42000000</span><br><span> setting 7 = 420</span><br><span> T7=420s(def=50)</span><br><span> osmo_tdef_get(7, ms)        = 420000</span><br><span> osmo_tdef_get(7, s) = 420</span><br><span> osmo_tdef_get(7, m)    = 7</span><br><span> osmo_tdef_get(7, custom-unit)    = 420</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(7, us)     = 420000000</span><br><span> setting 7 = 10 (ERANGE)</span><br><span> T7=420s(def=50)</span><br><span> osmo_tdef_get(7, ms)       = 420000</span><br><span> osmo_tdef_get(7, s) = 420</span><br><span> osmo_tdef_get(7, m)    = 7</span><br><span> osmo_tdef_get(7, custom-unit)    = 420</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(7, us)     = 420000000</span><br><span> setting 7 = 900 (ERANGE)</span><br><span> T7=420s(def=50)</span><br><span> osmo_tdef_get(7, ms)      = 420000</span><br><span> osmo_tdef_get(7, s) = 420</span><br><span> osmo_tdef_get(7, m)    = 7</span><br><span> osmo_tdef_get(7, custom-unit)    = 420</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_tdef_get(7, us)     = 420000000</span><br><span> setting 23 = 50 (EEXIST)</span><br><span> resetting</span><br><span> T7=50s</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/21047">change 21047</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/libosmocore/+/21047"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I71848d7c1ee0649929ce07680ee7320bb2a42f0e </div>
<div style="display:none"> Gerrit-Change-Number: 21047 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>