<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en" style='--code-editor-font: var(--default-mono-font, "GitLab Mono"), JetBrains Mono, Menlo, DejaVu Sans Mono, Liberation Mono, Consolas, Ubuntu Mono, Courier New, andale mono, lucida console, monospace;'>
<head>
<meta content="text/html; charset=US-ASCII" http-equiv="Content-Type">
<title>
GitLab
</title>
<style data-premailer="ignore" type="text/css">
a { color: #1068bf; }
</style>
<style>img {
max-width: 100%; height: auto;
}
body {
font-size: .875rem;
}
body {
-webkit-text-shadow: rgba(255,255,255,.01) 0 0 1px;
}
body {
font-family: var(--default-regular-font, "GitLab Sans"),-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"; font-size: inherit;
}
</style>
</head>
<body style='font-size: inherit; -webkit-text-shadow: rgba(255,255,255,.01) 0 0 1px; font-family: var(--default-regular-font, "GitLab Sans"),-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";'>
<div class="content">
<p class="details" style="font-style: italic; color: #737278;">
<a href="https://gitlab.rtems.org/sebhub">Sebastian Huber</a> created an issue: <a href="https://gitlab.rtems.org/rtems/rtos/rtems/-/issues/5057">#5057</a>
</p>
<p>
Assignee: Sebastian Huber
</p>
<div class="md" style="color: #333238; word-wrap: break-word;">
<h2 dir="auto" style="font-size: 1.5em; font-weight: 600; padding-bottom: .3em; border-bottom-width: 1px; border-bottom-color: #bfbfc3; border-bottom-style: solid; color: #333238; margin: 0 0 16px;" align="initial">
<a href="#summary" aria-hidden="true" class="anchor" id="user-content-summary" style="margin-top: 0; float: left; margin-left: -20px; text-decoration: none; outline: none;"></a>Summary</h2>
<p dir="auto" style="color: #333238; margin: 0 0 16px;" align="initial">libtest: Add packet processor</p>
<p dir="auto" style="color: #333238; margin: 0 0 16px;" align="initial">The RTEMS Test Framework packet processor provides a simple mechanism to exchange reliable and in-order data through transmitting and receiving one character at a time.</p>
<p dir="auto" style="color: #333238; margin: 0 0 16px;" align="initial">The packet processor does not buffer data. The processor uses a stop-and-wait automatic repeat request method. There is at most one packet in transmission. The data transfer is done using a single character input and output method. The protocol uses 12-bit sequence numbers, so a host could use a sliding window method to increase throughput. All integers and data are base64url encoded. A 24-bit CRC is used to ensure the data integrity. The <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; margin-top: 0; font-weight: inherit; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>{</code> character starts a packet. The <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; font-weight: inherit; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>}</code> character terminates a packet. The <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; font-weight: inherit; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>#</code> character prefixes a 24-bit CRC value. The <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; font-weight: inherit; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>:</code> character separates fields. The <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; font-weight: inherit; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>+</code> character prefixes data fields. The following packets are defined:</p>
<ul dir="auto" style="text-align: initial; list-style-type: disc; margin: 0 0 16px; padding: 0;">
<li style="margin-top: 0; line-height: 1.6em; margin-left: 25px; padding-left: 3px;">hello: <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; margin-top: 0; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>{<12-bit seq><12-bit ack>:H#<24-bit CRC>}</code>
</li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;">acknowledge: <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; margin-top: 0; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>{<12-bit seq><12-bit ack>:A#<24-bit CRC>}</code>
</li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;">reject: <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; margin-top: 0; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>{<12-bit seq><12-bit ack>:R :<12-bit seq of rejected packet> #<24-bit CRC>}</code>
</li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;">signal: <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; margin-top: 0; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>{<12-bit seq><12-bit ack>:S :<64-bit signal number> :<64-bit signal value> <optional list of colon separated 64-bit values> #<24-bit CRC>}</code>
</li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;">channel: <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; margin-top: 0; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>{<12-bit seq><12-bit ack>:C :<64-bit channel number> :<64-bit channel data size> <optional list of colon separated 64-bit values> #<24-bit CRC> + #<24-bit CRC>}</code>
</li>
</ul>
<p dir="auto" style="color: #333238; margin: 0 0 16px;" align="initial">The intended use case are boot loaders and test runners. For example, test runners may interface with an external test server performing equipment handling on request using the packet processor.</p>
<p dir="auto" style="color: #333238; margin: 0 0 16px;" align="initial">Use <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; margin-top: 0; font-weight: inherit; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>T_packet_initialize()</code> to initialize the packet processor. Use <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; font-weight: inherit; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>T_packet_process()</code> to drive the packet processing. You can enqueue packets for transmission with <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; font-weight: inherit; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>T_packet_enqueue()</code>. You can reliably send signals with <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; font-weight: inherit; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>T_packet_send()</code>. You can reliably, in-order transmit and receive channel data with <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; font-weight: inherit; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>T_packet_channel_push()</code> and <code style='font-size: 90%; color: #1f1e24; word-wrap: break-word; background-color: #ececef; border-radius: 4px; font-weight: inherit; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 2px 4px;'>T_packet_channel_exchange()</code>.</p>
<p dir="auto" style="color: #333238; margin: 0 0 16px;" align="initial">A simple boot loader for test runs could be implemented like this:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-canonical-lang="c" class="code highlight js-syntax-highlight language-c" v-pre="true" style='display: block; font-size: 14px; color: #333238; line-height: 1.6em; overflow-x: auto; border-radius: 4px; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; margin: 0 0 16px; padding: 12px; border: 1px solid #dcdcde;'><code style='font-size: inherit; color: inherit; word-wrap: normal; word-break: keep-all; background-color: inherit; border-radius: 4px; white-space: pre; margin-top: 0; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; vertical-align: bottom; overflow-wrap: normal; padding: unset;'><span id="LC1" class="line" lang="c" style="margin-top: 0;"> <span class="cp" style="margin-top: 0;">#include</span> <span class="cpf"><bsp.h></span></span>
<span id="LC2" class="line" lang="c"> <span class="cp" style="margin-top: 0;">#include</span> <span class="cpf"><rtems/bspIo.h></span></span>
<span id="LC3" class="line" lang="c"> <span class="cp" style="margin-top: 0;">#include</span> <span class="cpf"><rtems/counter.h></span></span>
<span id="LC4" class="line" lang="c"> <span class="cp" style="margin-top: 0;">#include</span> <span class="cpf"><rtems/test-packet.h></span></span>
<span id="LC5" class="line" lang="c"> </span>
<span id="LC6" class="line" lang="c"> <span class="k" style="margin-top: 0;">typedef</span> <span class="k">struct</span> <span class="p">{</span></span>
<span id="LC7" class="line" lang="c"> <span class="n" style="margin-top: 0;">T_packet_event_control</span> <span class="n">base</span><span class="p">;</span></span>
<span id="LC8" class="line" lang="c"> <span class="kt" style="margin-top: 0;">uint8_t</span> <span class="o">*</span><span class="n">load_address</span><span class="p">;</span></span>
<span id="LC9" class="line" lang="c"> <span class="p" style="margin-top: 0;">}</span> <span class="n">boot_control</span><span class="p">;</span></span>
<span id="LC10" class="line" lang="c"> </span>
<span id="LC11" class="line" lang="c"> <span class="k" style="margin-top: 0;">static</span> <span class="kt">void</span> <span class="nf">output_char</span><span class="p">(</span><span class="n">T_packet_control</span><span class="o">*</span> <span class="n">self</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">ch</span><span class="p">)</span> <span class="p">{</span></span>
<span id="LC12" class="line" lang="c"> <span class="p" style="margin-top: 0;">(</span><span class="kt">void</span><span class="p">)</span><span class="n">self</span><span class="p">;</span></span>
<span id="LC13" class="line" lang="c"> <span class="n" style="margin-top: 0;">rtems_putc</span><span class="p">(</span><span class="n">ch</span><span class="p">);</span></span>
<span id="LC14" class="line" lang="c"> <span class="p" style="margin-top: 0;">}</span></span>
<span id="LC15" class="line" lang="c"> </span>
<span id="LC16" class="line" lang="c"> <span class="k" style="margin-top: 0;">static</span> <span class="n">T_packet_status</span> <span class="nf">event_handler</span><span class="p">(</span><span class="n">T_packet_control</span><span class="o">*</span> <span class="n">self</span><span class="p">,</span></span>
<span id="LC17" class="line" lang="c"> <span class="n" style="margin-top: 0;">T_packet_event_control</span><span class="o">*</span> <span class="n">base</span><span class="p">,</span></span>
<span id="LC18" class="line" lang="c"> <span class="n" style="margin-top: 0;">T_packet_event</span> <span class="n">evt</span><span class="p">)</span> <span class="p">{</span></span>
<span id="LC19" class="line" lang="c"> <span class="n" style="margin-top: 0;">boot_control</span><span class="o">*</span> <span class="n">evt_ctrl</span> <span class="o">=</span> <span class="p">(</span><span class="n">boot_control</span><span class="o">*</span><span class="p">)</span><span class="n">base</span><span class="p">;</span></span>
<span id="LC20" class="line" lang="c"> </span>
<span id="LC21" class="line" lang="c"> <span class="k" style="margin-top: 0;">switch</span> <span class="p">(</span><span class="n">evt</span><span class="p">)</span> <span class="p">{</span></span>
<span id="LC22" class="line" lang="c"> <span class="k" style="margin-top: 0;">case</span> <span class="n">T_PACKET_EVENT_SIGNAL</span><span class="p">:</span></span>
<span id="LC23" class="line" lang="c"> <span class="k" style="margin-top: 0;">if</span> <span class="p">(</span><span class="n">T_packet_get_signal_number</span><span class="p">(</span><span class="n">self</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span></span>
<span id="LC24" class="line" lang="c"> <span class="n" style="margin-top: 0;">T_packet_output_acknowledge</span><span class="p">(</span><span class="n">self</span><span class="p">);</span></span>
<span id="LC25" class="line" lang="c"> <span class="n" style="margin-top: 0;">bsp_restart</span><span class="p">(</span><span class="n">T_packet_get_signal_value_as_address</span><span class="p">(</span><span class="n">self</span><span class="p">));</span></span>
<span id="LC26" class="line" lang="c"> <span class="p" style="margin-top: 0;">}</span></span>
<span id="LC27" class="line" lang="c"> </span>
<span id="LC28" class="line" lang="c"> <span class="k" style="margin-top: 0;">break</span><span class="p">;</span></span>
<span id="LC29" class="line" lang="c"> <span class="k" style="margin-top: 0;">case</span> <span class="n">T_PACKET_EVENT_HELLO</span><span class="p">:</span></span>
<span id="LC30" class="line" lang="c"> <span class="n" style="margin-top: 0;">T_packet_output_acknowledge</span><span class="p">(</span><span class="n">self</span><span class="p">);</span></span>
<span id="LC31" class="line" lang="c"> <span class="k" style="margin-top: 0;">break</span><span class="p">;</span></span>
<span id="LC32" class="line" lang="c"> <span class="k" style="margin-top: 0;">case</span> <span class="n">T_PACKET_EVENT_CHANNEL_BEGIN</span><span class="p">:</span></span>
<span id="LC33" class="line" lang="c"> <span class="k" style="margin-top: 0;">if</span> <span class="p">(</span><span class="n">T_packet_get_channel_number</span><span class="p">(</span><span class="n">self</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span></span>
<span id="LC34" class="line" lang="c"> <span class="kt" style="margin-top: 0;">void</span> <span class="o">*</span><span class="n">address</span><span class="p">;</span></span>
<span id="LC35" class="line" lang="c"> </span>
<span id="LC36" class="line" lang="c"> <span class="k" style="margin-top: 0;">if</span> <span class="p">(</span><span class="n">T_packet_get_extra_count</span><span class="p">(</span><span class="n">self</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span></span>
<span id="LC37" class="line" lang="c"> <span class="n" style="margin-top: 0;">address</span> <span class="o">=</span> <span class="n">T_packet_get_extra_as_address</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span></span>
<span id="LC38" class="line" lang="c"> <span class="n" style="margin-top: 0;">evt_ctrl</span><span class="o">-></span><span class="n">load_address</span> <span class="o">=</span> <span class="n">address</span><span class="p">;</span></span>
<span id="LC39" class="line" lang="c"> <span class="p" style="margin-top: 0;">}</span> <span class="k">else</span> <span class="p">{</span></span>
<span id="LC40" class="line" lang="c"> <span class="n" style="margin-top: 0;">address</span> <span class="o">=</span> <span class="n">evt_ctrl</span><span class="o">-></span><span class="n">load_address</span><span class="p">;</span></span>
<span id="LC41" class="line" lang="c"> <span class="p" style="margin-top: 0;">}</span></span>
<span id="LC42" class="line" lang="c"> </span>
<span id="LC43" class="line" lang="c"> <span class="n" style="margin-top: 0;">T_packet_set_channel_target</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">address</span><span class="p">);</span></span>
<span id="LC44" class="line" lang="c"> <span class="p" style="margin-top: 0;">}</span></span>
<span id="LC45" class="line" lang="c"> </span>
<span id="LC46" class="line" lang="c"> <span class="k" style="margin-top: 0;">break</span><span class="p">;</span></span>
<span id="LC47" class="line" lang="c"> <span class="k" style="margin-top: 0;">case</span> <span class="n">T_PACKET_EVENT_CHANNEL_END</span><span class="p">:</span></span>
<span id="LC48" class="line" lang="c"> <span class="k" style="margin-top: 0;">if</span> <span class="p">(</span><span class="n">T_packet_get_channel_number</span><span class="p">(</span><span class="n">self</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span></span>
<span id="LC49" class="line" lang="c"> <span class="n" style="margin-top: 0;">evt_ctrl</span><span class="o">-></span><span class="n">load_address</span> <span class="o">+=</span> <span class="n">T_packet_get_channel_size</span><span class="p">(</span><span class="n">self</span><span class="p">);</span></span>
<span id="LC50" class="line" lang="c"> <span class="n" style="margin-top: 0;">T_packet_output_acknowledge</span><span class="p">(</span><span class="n">self</span><span class="p">);</span></span>
<span id="LC51" class="line" lang="c"> <span class="p" style="margin-top: 0;">}</span></span>
<span id="LC52" class="line" lang="c"> </span>
<span id="LC53" class="line" lang="c"> <span class="k" style="margin-top: 0;">break</span><span class="p">;</span></span>
<span id="LC54" class="line" lang="c"> <span class="k" style="margin-top: 0;">case</span> <span class="n">T_PACKET_EVENT_OUTPUT_END</span><span class="p">:</span></span>
<span id="LC55" class="line" lang="c"> <span class="n" style="margin-top: 0;">rtems_putc</span><span class="p">(</span><span class="sc">'\n'</span><span class="p">);</span></span>
<span id="LC56" class="line" lang="c"> <span class="k" style="margin-top: 0;">break</span><span class="p">;</span></span>
<span id="LC57" class="line" lang="c"> <span class="nl" style="margin-top: 0;">default:</span></span>
<span id="LC58" class="line" lang="c"> <span class="k" style="margin-top: 0;">break</span><span class="p">;</span></span>
<span id="LC59" class="line" lang="c"> <span class="p" style="margin-top: 0;">}</span></span>
<span id="LC60" class="line" lang="c"> </span>
<span id="LC61" class="line" lang="c"> <span class="k" style="margin-top: 0;">return</span> <span class="n">T_PACKET_SUCCESSFUL</span><span class="p">;</span></span>
<span id="LC62" class="line" lang="c"> <span class="p" style="margin-top: 0;">}</span></span>
<span id="LC63" class="line" lang="c"> </span>
<span id="LC64" class="line" lang="c"> <span class="k" style="margin-top: 0;">static</span> <span class="kt">uint32_t</span> <span class="nf">clock_monotonic</span><span class="p">(</span><span class="n">T_packet_control</span><span class="o">*</span> <span class="n">self</span><span class="p">)</span> <span class="p">{</span></span>
<span id="LC65" class="line" lang="c"> <span class="p" style="margin-top: 0;">(</span><span class="kt">void</span><span class="p">)</span><span class="n">self</span><span class="p">;</span></span>
<span id="LC66" class="line" lang="c"> <span class="k" style="margin-top: 0;">return</span> <span class="n">rtems_counter_read</span><span class="p">();</span></span>
<span id="LC67" class="line" lang="c"> <span class="p" style="margin-top: 0;">}</span></span></code></pre>
<copy-code></copy-code>
</div>
<p dir="auto" style="color: #333238; margin: 0 0 16px;" align="initial">See also:</p>
<ul dir="auto" style="text-align: initial; list-style-type: disc; margin: 0; padding: 0;">
<li style="margin-top: 0; line-height: 1.6em; margin-left: 25px; padding-left: 3px;"><a href="https://lists.rtems.org/pipermail/devel/2024-January/077181.html" rel="nofollow noreferrer noopener" target="_blank" style="margin-top: 0;">https://lists.rtems.org/pipermail/devel/2024-January/077181.html</a></li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;"><a href="https://lists.rtems.org/pipermail/devel/2024-January/077055.html" rel="nofollow noreferrer noopener" target="_blank" style="margin-top: 0;">https://lists.rtems.org/pipermail/devel/2024-January/077055.html</a></li>
</ul>
</div>
</div>
<div class="footer" style="margin-top: 10px;">
<p style="font-size: small; color: #737278;">
—
<br>
<a href="https://gitlab.rtems.org/rtems/rtos/rtems/-/issues/5057">View it on GitLab</a>.
<br>
You're receiving this email because of your account on <a target="_blank" rel="noopener noreferrer" href="https://gitlab.rtems.org">gitlab.rtems.org</a>. <a href="https://gitlab.rtems.org/-/sent_notifications/40db4698403fc97a14ea3df40434cc48/unsubscribe" target="_blank" rel="noopener noreferrer">Unsubscribe</a> from this thread · <a href="https://gitlab.rtems.org/-/profile/notifications" target="_blank" rel="noopener noreferrer" class="mng-notif-link">Manage all notifications</a> · <a href="https://gitlab.rtems.org/help" target="_blank" rel="noopener noreferrer" class="help-link">Help</a>
<script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","action":{"@type":"ViewAction","name":"View Issue","url":"https://gitlab.rtems.org/rtems/rtos/rtems/-/issues/5057"}}</script>
</p>
</div>
</body>
</html>