aboutsummaryrefslogtreecommitdiff
path: root/20.02/_gatord_mock_service_8cpp_source.xhtml
blob: 76f1321b9c300146d9ab0d01738f04bf410513f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<!-- Copyright (c) 2020 ARM Limited. -->
<!--                                 -->
<!-- SPDX-License-Identifier: MIT    -->
<!--                                 -->
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: tests/profiling/gatordmock/GatordMockService.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
  <td style="padding-left: 0.5em;">
   <div id="projectname">
   &#160;<span id="projectnumber">20.02</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_gatord_mock_service_8cpp_source.xhtml','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">GatordMockService.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_gatord_mock_service_8cpp.xhtml">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// Copyright © 2019 Arm Ltd. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// SPDX-License-Identifier: MIT</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_gatord_mock_service_8hpp.xhtml">GatordMockService.hpp</a>&quot;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_command_handler_registry_8hpp.xhtml">CommandHandlerRegistry.hpp</a>&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_packet_version_resolver_8hpp.xhtml">PacketVersionResolver.hpp</a>&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_profiling_utils_8hpp.xhtml">ProfilingUtils.hpp</a>&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_network_sockets_8hpp.xhtml">NetworkSockets.hpp</a>&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;cerrno&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;fcntl.h&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;iomanip&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacearmnn_utils.xhtml">armnnUtils</a>;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span>gatordmock</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#aa03af06b5336e9ad43b374a03934c0f1">   27</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#aa03af06b5336e9ad43b374a03934c0f1">GatordMockService::OpenListeningSocket</a>(std::string udsNamespace)</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    <a class="code" href="namespacearmnn_utils_1_1_sockets.xhtml#a248c764067ee60c03ee370784c49f353">Sockets::Initialize</a>();</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    m_ListeningSocket = socket(PF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0);</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <span class="keywordflow">if</span> (-1 == m_ListeningSocket)</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    {</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;        std::cerr &lt;&lt; <span class="stringliteral">&quot;: Socket construction failed: &quot;</span> &lt;&lt; strerror(errno) &lt;&lt; std::endl;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    }</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    sockaddr_un udsAddress;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    memset(&amp;udsAddress, 0, <span class="keyword">sizeof</span>(sockaddr_un));</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="comment">// We&#39;ve set the first element of sun_path to be 0, skip over it and copy the namespace after it.</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    memcpy(udsAddress.sun_path + 1, udsNamespace.c_str(), strlen(udsNamespace.c_str()));</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    udsAddress.sun_family = AF_UNIX;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    <span class="comment">// Bind the socket to the UDS namespace.</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keywordflow">if</span> (-1 == bind(m_ListeningSocket, reinterpret_cast&lt;const sockaddr*&gt;(&amp;udsAddress), <span class="keyword">sizeof</span>(sockaddr_un)))</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    {</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;        std::cerr &lt;&lt; <span class="stringliteral">&quot;: Binding on socket failed: &quot;</span> &lt;&lt; strerror(errno) &lt;&lt; std::endl;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    }</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <span class="comment">// Listen for 1 connection.</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    <span class="keywordflow">if</span> (-1 == listen(m_ListeningSocket, 1))</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    {</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;        std::cerr &lt;&lt; <span class="stringliteral">&quot;: Listen call on socket failed: &quot;</span> &lt;&lt; strerror(errno) &lt;&lt; std::endl;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    }</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;}</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a4c7dcda01e81dbdc47ceb1c82f26039b">   58</a></span>&#160;Sockets::Socket <a class="code" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a4c7dcda01e81dbdc47ceb1c82f26039b">GatordMockService::BlockForOneClient</a>()</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;{</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    m_ClientConnection = <a class="code" href="namespacearmnn_utils_1_1_sockets.xhtml#ae7d45c832d3f9a398a08352442d20417">Sockets::Accept</a>(m_ListeningSocket, <span class="keyword">nullptr</span>, <span class="keyword">nullptr</span>, SOCK_CLOEXEC);</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="keywordflow">if</span> (-1 == m_ClientConnection)</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    {</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;        std::cerr &lt;&lt; <span class="stringliteral">&quot;: Failure when waiting for a client connection: &quot;</span> &lt;&lt; strerror(errno) &lt;&lt; std::endl;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;        <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    }</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="keywordflow">return</span> m_ClientConnection;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;}</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#ac07351dbc304681b2efd5df4958a6735">   69</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#ac07351dbc304681b2efd5df4958a6735">GatordMockService::WaitForStreamMetaData</a>()</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;{</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keywordflow">if</span> (m_EchoPackets)</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    {</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;        std::cout &lt;&lt; <span class="stringliteral">&quot;Waiting for stream meta data...&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    }</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="comment">// The start of the stream metadata is 2x32bit words, 0 and packet length.</span></div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    uint8_t header[8];</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="keywordflow">if</span> (!ReadFromSocket(header, 8))</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    {</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    }</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    EchoPacket(<a class="code" href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955a2855fc8ecb116f85a4b09600fd1cd75f">PacketDirection::ReceivedHeader</a>, header, 8);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    <span class="comment">// The first word, stream_metadata_identifer, should always be 0.</span></div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keywordflow">if</span> (ToUint32(&amp;header[0], <a class="code" href="namespacearmnn_1_1gatordmock.xhtml#a006732ecc1f16712db06bf622eb79651aefe19217ee8d2186e7bbecbf2f171eb9">TargetEndianness::BeWire</a>) != 0)</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    {</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        std::cerr &lt;&lt; <span class="stringliteral">&quot;: Protocol error. The stream_metadata_identifer was not 0.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    }</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    uint8_t pipeMagic[4];</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keywordflow">if</span> (!ReadFromSocket(pipeMagic, 4))</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    {</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    }</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    EchoPacket(<a class="code" href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955af44b1a9eb8e6ef1bea10617c1dfef07f">PacketDirection::ReceivedData</a>, pipeMagic, 4);</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <span class="comment">// Before we interpret the length we need to read the pipe_magic word to determine endianness.</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="keywordflow">if</span> (ToUint32(&amp;pipeMagic[0], <a class="code" href="namespacearmnn_1_1gatordmock.xhtml#a006732ecc1f16712db06bf622eb79651aefe19217ee8d2186e7bbecbf2f171eb9">TargetEndianness::BeWire</a>) == PIPE_MAGIC)</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    {</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;        m_Endianness = <a class="code" href="namespacearmnn_1_1gatordmock.xhtml#a006732ecc1f16712db06bf622eb79651aefe19217ee8d2186e7bbecbf2f171eb9">TargetEndianness::BeWire</a>;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    }</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ToUint32(&amp;pipeMagic[0], <a class="code" href="namespacearmnn_1_1gatordmock.xhtml#a006732ecc1f16712db06bf622eb79651ab2db365e5027e9a57988c7054e9bd6b7">TargetEndianness::LeWire</a>) == PIPE_MAGIC)</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    {</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;        m_Endianness = <a class="code" href="namespacearmnn_1_1gatordmock.xhtml#a006732ecc1f16712db06bf622eb79651ab2db365e5027e9a57988c7054e9bd6b7">TargetEndianness::LeWire</a>;</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    }</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    {</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        std::cerr &lt;&lt; <span class="stringliteral">&quot;: Protocol read error. Unable to read PIPE_MAGIC value.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    }</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="comment">// Now we know the endianness we can get the length from the header.</span></div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <span class="comment">// Remember we already read the pipe magic 4 bytes.</span></div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    uint32_t metaDataLength = ToUint32(&amp;header[4], m_Endianness) - 4;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="comment">// Read the entire packet.</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    std::vector&lt;uint8_t&gt; packetData(metaDataLength);</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <span class="keywordflow">if</span> (metaDataLength !=</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        boost::numeric_cast&lt;uint32_t&gt;(<a class="code" href="namespacearmnn_utils_1_1_sockets.xhtml#a7b2c6949d9d76d2c0ffca916175e5322">Sockets::Read</a>(m_ClientConnection, packetData.data(), metaDataLength)))</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    {</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;        std::cerr &lt;&lt; <span class="stringliteral">&quot;: Protocol read error. Data length mismatch.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    }</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    EchoPacket(<a class="code" href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955af44b1a9eb8e6ef1bea10617c1dfef07f">PacketDirection::ReceivedData</a>, packetData.data(), metaDataLength);</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    m_StreamMetaDataVersion    = ToUint32(&amp;packetData[0], m_Endianness);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    m_StreamMetaDataMaxDataLen = ToUint32(&amp;packetData[4], m_Endianness);</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    m_StreamMetaDataPid        = ToUint32(&amp;packetData[8], m_Endianness);</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;}</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a41eaa65cf4e7212f09b04d06c130cd83">  129</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a41eaa65cf4e7212f09b04d06c130cd83">GatordMockService::SendConnectionAck</a>()</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;{</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">if</span> (m_EchoPackets)</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    {</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        std::cout &lt;&lt; <span class="stringliteral">&quot;Sending connection acknowledgement.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    }</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    <span class="comment">// The connection ack packet is an empty data packet with packetId == 1.</span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    SendPacket(0, 1, <span class="keyword">nullptr</span>, 0);</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;}</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a2b9de2e6eee97f258fe2d7c765206e8a">  139</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a2b9de2e6eee97f258fe2d7c765206e8a">GatordMockService::SendRequestCounterDir</a>()</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;{</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="keywordflow">if</span> (m_EchoPackets)</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    {</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        std::cout &lt;&lt; <span class="stringliteral">&quot;Sending connection acknowledgement.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    }</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="comment">// The connection ack packet is an empty data packet with packetId == 1.</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    SendPacket(0, 3, <span class="keyword">nullptr</span>, 0);</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;}</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a5175305569ecb4e58004e977abeff61a">  149</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a5175305569ecb4e58004e977abeff61a">GatordMockService::LaunchReceivingThread</a>()</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;{</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    <span class="keywordflow">if</span> (m_EchoPackets)</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    {</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;        std::cout &lt;&lt; <span class="stringliteral">&quot;Launching receiving thread.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    }</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="comment">// At this point we want to make the socket non blocking.</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="namespacearmnn_utils_1_1_sockets.xhtml#a8396c0d14fc0e7284b175fedfeceef37">Sockets::SetNonBlocking</a>(m_ClientConnection))</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    {</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        <a class="code" href="namespacearmnn_utils_1_1_sockets.xhtml#a72e0661331d20d0a352fb49c388a1b05">Sockets::Close</a>(m_ClientConnection);</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        std::cerr &lt;&lt; <span class="stringliteral">&quot;Failed to set socket as non blocking: &quot;</span> &lt;&lt; strerror(errno) &lt;&lt; std::endl;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    }</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    m_ListeningThread = std::thread(&amp;GatordMockService::ReceiveLoop, <span class="keyword">this</span>, std::ref(*<span class="keyword">this</span>));</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;}</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a93617d8640d5e93831d06a2ef3c86bef">  166</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a93617d8640d5e93831d06a2ef3c86bef">GatordMockService::WaitForReceivingThread</a>()</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    <span class="comment">// The receiving thread may already have died.</span></div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <span class="keywordflow">if</span> (m_CloseReceivingThread != <span class="keyword">true</span>)</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    {</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        m_CloseReceivingThread.store(<span class="keyword">true</span>);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    }</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <span class="comment">// Check that the receiving thread is running</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="keywordflow">if</span> (m_ListeningThread.joinable())</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    {</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        <span class="comment">// Wait for the receiving thread to complete operations</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        m_ListeningThread.join();</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    }</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;}</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#abaf2feb0e79566de18721659d896dae1">  181</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#abaf2feb0e79566de18721659d896dae1">GatordMockService::SendPeriodicCounterSelectionList</a>(uint32_t period, std::vector&lt;uint16_t&gt; counters)</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;{</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    <span class="comment">// The packet body consists of a UINT32 representing the period following by zero or more</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    <span class="comment">// UINT16&#39;s representing counter UID&#39;s. If the list is empty it implies all counters are to</span></div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <span class="comment">// be disabled.</span></div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <span class="keywordflow">if</span> (m_EchoPackets)</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    {</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        std::cout &lt;&lt; <span class="stringliteral">&quot;SendPeriodicCounterSelectionList: Period=&quot;</span> &lt;&lt; std::dec &lt;&lt; period &lt;&lt; <span class="stringliteral">&quot;uSec&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;        std::cout &lt;&lt; <span class="stringliteral">&quot;List length=&quot;</span> &lt;&lt; counters.size() &lt;&lt; std::endl;</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;        ;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    }</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <span class="comment">// Start by calculating the length of the packet body in bytes. This will be at least 4.</span></div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    uint32_t dataLength = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(4 + (counters.size() * 2));</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; uniqueData = std::make_unique&lt;unsigned char[]&gt;(dataLength);</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* data                         = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(uniqueData.get());</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    uint32_t offset = 0;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">profiling::WriteUint32</a>(data, offset, period);</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    offset += 4;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    <span class="keywordflow">for</span> (std::vector&lt;uint16_t&gt;::iterator it = counters.begin(); it != counters.end(); ++it)</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    {</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">profiling::WriteUint16</a>(data, offset, *it);</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        offset += 2;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    }</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="comment">// Send the packet.</span></div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    SendPacket(0, 4, data, dataLength);</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    <span class="comment">// There will be an echo response packet sitting in the receive thread. PeriodicCounterSelectionResponseHandler</span></div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    <span class="comment">// should deal with it.</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;}</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a18f77daf6b32e5bb456c2bc860140669">  214</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a18f77daf6b32e5bb456c2bc860140669">GatordMockService::WaitCommand</a>(uint32_t timeout)</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;{</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    <span class="comment">// Wait for a maximum of timeout microseconds or if the receive thread has closed.</span></div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    <span class="comment">// There is a certain level of rounding involved in this timing.</span></div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    uint32_t iterations = timeout / 1000;</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    std::cout &lt;&lt; std::dec &lt;&lt; <span class="stringliteral">&quot;Wait command with timeout of &quot;</span> &lt;&lt; timeout &lt;&lt; <span class="stringliteral">&quot; iterations =  &quot;</span> &lt;&lt; iterations &lt;&lt; std::endl;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    uint32_t count = 0;</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    <span class="keywordflow">while</span> ((this-&gt;<a class="code" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a82bd11e044b4bc9c647fcaa9ce5b3e55">ReceiveThreadRunning</a>() &amp;&amp; (count &lt; iterations)))</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    {</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;        std::this_thread::sleep_for(std::chrono::microseconds(1000));</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;        ++count;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    }</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    <span class="keywordflow">if</span> (m_EchoPackets)</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    {</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;        std::cout &lt;&lt; std::dec &lt;&lt; <span class="stringliteral">&quot;Wait command with timeout of &quot;</span> &lt;&lt; timeout &lt;&lt; <span class="stringliteral">&quot; microseconds completed. &quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    }</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;}</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;<span class="keywordtype">void</span> GatordMockService::ReceiveLoop(<a class="code" href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml">GatordMockService</a>&amp; mockService)</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;{</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    m_CloseReceivingThread.store(<span class="keyword">false</span>);</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    <span class="keywordflow">while</span> (!m_CloseReceivingThread.load())</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    {</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;        <span class="keywordflow">try</span></div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        {</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;            <a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml">armnn::profiling::Packet</a> packet = mockService.WaitForPacket(500);</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        }</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;        <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_timeout_exception.xhtml">armnn::TimeoutException</a>&amp;)</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;        {</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;            <span class="comment">// In this case we ignore timeouts and and keep trying to receive.</span></div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        }</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>&amp; e)</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;        {</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;            <span class="comment">// We couldn&#39;t find a functor to handle the packet?</span></div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;            std::cerr &lt;&lt; <span class="stringliteral">&quot;Packet received that could not be processed: &quot;</span> &lt;&lt; e.<a class="code" href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">what</a>() &lt;&lt; std::endl;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;        }</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;        <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>&amp; e)</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;        {</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;            <span class="comment">// A runtime exception occurred which means we must exit the loop.</span></div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;            std::cerr &lt;&lt; <span class="stringliteral">&quot;Receive thread closing: &quot;</span> &lt;&lt; e.<a class="code" href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">what</a>() &lt;&lt; std::endl;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;            m_CloseReceivingThread.store(<span class="keyword">true</span>);</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;        }</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    }</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;}</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;<a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml">armnn::profiling::Packet</a> GatordMockService::WaitForPacket(uint32_t timeoutMs)</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;{</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    <span class="comment">// Is there currently more than a headers worth of data waiting to be read?</span></div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    <span class="keywordtype">int</span> bytes_available;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    <a class="code" href="namespacearmnn_utils_1_1_sockets.xhtml#a36eb04939ffbb4d4a1291724921a6c6a">Sockets::Ioctl</a>(m_ClientConnection, FIONREAD, &amp;bytes_available);</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    <span class="keywordflow">if</span> (bytes_available &gt; 8)</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    {</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        <span class="comment">// Yes there is. Read it:</span></div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        <span class="keywordflow">return</span> ReceivePacket();</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    }</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    {</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;        <span class="comment">// No there&#39;s not. Poll for more data.</span></div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        <span class="keyword">struct </span>pollfd pollingFd[1]{};</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        pollingFd[0].fd = m_ClientConnection;</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;        <span class="keywordtype">int</span> pollResult  = <a class="code" href="namespacearmnn_utils_1_1_sockets.xhtml#a242d840b21fc2f18ac1ec8d609180e15">Sockets::Poll</a>(pollingFd, 1, static_cast&lt;int&gt;(timeoutMs));</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;        <span class="keywordflow">switch</span> (pollResult)</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        {</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;            <span class="comment">// Error</span></div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;            <span class="keywordflow">case</span> -1:</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;                <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>(std::string(<span class="stringliteral">&quot;File descriptor reported an error during polling: &quot;</span>) +</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;                                              strerror(errno));</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;            <span class="comment">// Timeout</span></div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;            <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;                <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_timeout_exception.xhtml">armnn::TimeoutException</a>(<span class="stringliteral">&quot;Timeout while waiting to receive packet.&quot;</span>);</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;            <span class="comment">// Normal poll return. It could still contain an error signal</span></div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;            <span class="keywordflow">default</span>:</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;                <span class="comment">// Check if the socket reported an error</span></div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;                <span class="keywordflow">if</span> (pollingFd[0].revents &amp; (POLLNVAL | POLLERR | POLLHUP))</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;                {</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;                    <span class="keywordflow">if</span> (pollingFd[0].revents == POLLNVAL)</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;                    {</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;                        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>(std::string(<span class="stringliteral">&quot;Error while polling receiving socket: POLLNVAL&quot;</span>));</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;                    }</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;                    <span class="keywordflow">if</span> (pollingFd[0].revents == POLLERR)</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;                    {</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;                        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>(std::string(<span class="stringliteral">&quot;Error while polling receiving socket: POLLERR: &quot;</span>) +</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;                                                      strerror(errno));</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;                    }</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;                    <span class="keywordflow">if</span> (pollingFd[0].revents == POLLHUP)</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;                    {</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;                        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>(std::string(<span class="stringliteral">&quot;Connection closed by remote client: POLLHUP&quot;</span>));</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;                    }</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;                }</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;                <span class="comment">// Check if there is data to read</span></div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;                <span class="keywordflow">if</span> (!(pollingFd[0].revents &amp; (POLLIN)))</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;                {</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;                    <span class="comment">// This is a corner case. The socket as been woken up but not with any data.</span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;                    <span class="comment">// We&#39;ll throw a timeout exception to loop around again.</span></div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;                    <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_timeout_exception.xhtml">armnn::TimeoutException</a>(<span class="stringliteral">&quot;File descriptor was polled but no data was available to receive.&quot;</span>);</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;                }</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;                <span class="keywordflow">return</span> ReceivePacket();</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;        }</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    }</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;}</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;<a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml">armnn::profiling::Packet</a> GatordMockService::ReceivePacket()</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;{</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    uint32_t header[2];</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    <span class="keywordflow">if</span> (!ReadHeader(header))</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    {</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml">armnn::profiling::Packet</a>();</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    }</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    <span class="comment">// Read data_length bytes from the socket.</span></div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; uniquePacketData = std::make_unique&lt;unsigned char[]&gt;(header[1]);</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* packetData                         = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(uniquePacketData.get());</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <span class="keywordflow">if</span> (!ReadFromSocket(packetData, header[1]))</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;    {</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml">armnn::profiling::Packet</a>();</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    }</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    EchoPacket(<a class="code" href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955af44b1a9eb8e6ef1bea10617c1dfef07f">PacketDirection::ReceivedData</a>, packetData, header[1]);</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <span class="comment">// Construct received packet</span></div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_packet_version_resolver.xhtml">armnn::profiling::PacketVersionResolver</a> packetVersionResolver;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml">armnn::profiling::Packet</a> packetRx = <a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml">armnn::profiling::Packet</a>(header[0], header[1], uniquePacketData);</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <span class="keywordflow">if</span> (m_EchoPackets)</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    {</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;        std::cout &lt;&lt; <span class="stringliteral">&quot;Processing packet ID= &quot;</span> &lt;&lt; packetRx.<a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml#a17b980d48f35a31c27a227e8ceae5402">GetPacketId</a>() &lt;&lt; <span class="stringliteral">&quot; Length=&quot;</span> &lt;&lt; packetRx.<a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml#a5a218fe9ea18741167670f1bc016b5cf">GetLength</a>()</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;                  &lt;&lt; std::endl;</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    }</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_version.xhtml">profiling::Version</a> version =</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;        packetVersionResolver.<a class="code" href="classarmnn_1_1profiling_1_1_packet_version_resolver.xhtml#ac8ad466123304f923e64997ac096926a">ResolvePacketVersion</a>(packetRx.<a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml#ab232ac74b80987179d2b185a7a495fa6">GetPacketFamily</a>(), packetRx.<a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml#a17b980d48f35a31c27a227e8ceae5402">GetPacketId</a>());</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_command_handler_functor.xhtml">profiling::CommandHandlerFunctor</a>* commandHandlerFunctor =</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;        m_HandlerRegistry.GetFunctor(packetRx.<a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml#ab232ac74b80987179d2b185a7a495fa6">GetPacketFamily</a>(), packetRx.<a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml#a17b980d48f35a31c27a227e8ceae5402">GetPacketId</a>(), version.<a class="code" href="classarmnn_1_1profiling_1_1_version.xhtml#a0ab0d5a402c197d4093cbc5fdbf81214">GetEncodedValue</a>());</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    BOOST_ASSERT(commandHandlerFunctor);</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    commandHandlerFunctor-&gt;operator()(packetRx);</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    <span class="keywordflow">return</span> packetRx;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;}</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;<span class="keywordtype">bool</span> GatordMockService::SendPacket(uint32_t packetFamily, uint32_t packetId, <span class="keyword">const</span> uint8_t* data, uint32_t dataLength)</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;{</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    <span class="comment">// Construct a packet from the id and data given and send it to the client.</span></div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    <span class="comment">// Encode the header.</span></div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    uint32_t header[2];</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    header[0] = packetFamily &lt;&lt; 26 | packetId &lt;&lt; 16;</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    header[1] = dataLength;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    <span class="comment">// Add the header to the packet.</span></div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    std::vector&lt;uint8_t&gt; packet(8 + dataLength);</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    InsertU32(header[0], packet.data(), m_Endianness);</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    InsertU32(header[1], packet.data() + 4, m_Endianness);</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    <span class="comment">// And the rest of the data if there is any.</span></div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    <span class="keywordflow">if</span> (dataLength &gt; 0)</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    {</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;        memcpy((packet.data() + 8), data, dataLength);</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    }</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    EchoPacket(<a class="code" href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955ae4b0c2b6d59cb4cf3e169a9886008087">PacketDirection::Sending</a>, packet.data(), packet.size());</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    <span class="keywordflow">if</span> (-1 == <a class="code" href="namespacearmnn_utils_1_1_sockets.xhtml#ad5b08981ac047ff0a3c7cb3442b9f161">Sockets::Write</a>(m_ClientConnection, packet.data(), packet.size()))</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    {</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;        std::cerr &lt;&lt; <span class="stringliteral">&quot;: Failure when writing to client socket: &quot;</span> &lt;&lt; strerror(errno) &lt;&lt; std::endl;</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    }</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;}</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;<span class="keywordtype">bool</span> GatordMockService::ReadHeader(uint32_t headerAsWords[2])</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;{</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    <span class="comment">// The header will always be 2x32bit words.</span></div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;    uint8_t header[8];</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    <span class="keywordflow">if</span> (!ReadFromSocket(header, 8))</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    {</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    }</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    EchoPacket(<a class="code" href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955a2855fc8ecb116f85a4b09600fd1cd75f">PacketDirection::ReceivedHeader</a>, header, 8);</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    headerAsWords[0] = ToUint32(&amp;header[0], m_Endianness);</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    headerAsWords[1] = ToUint32(&amp;header[4], m_Endianness);</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;}</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;<span class="keywordtype">bool</span> GatordMockService::ReadFromSocket(uint8_t* packetData, uint32_t expectedLength)</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;{</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    <span class="comment">// This is a blocking read until either expectedLength has been received or an error is detected.</span></div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    <span class="keywordtype">long</span> totalBytesRead = 0;</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    <span class="keywordflow">while</span> (boost::numeric_cast&lt;uint32_t&gt;(totalBytesRead) &lt; expectedLength)</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    {</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;        <span class="keywordtype">long</span> bytesRead = <a class="code" href="namespacearmnn_utils_1_1_sockets.xhtml#a7b2c6949d9d76d2c0ffca916175e5322">Sockets::Read</a>(m_ClientConnection, packetData, expectedLength);</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;        <span class="keywordflow">if</span> (bytesRead &lt; 0)</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;        {</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;            std::cerr &lt;&lt; <span class="stringliteral">&quot;: Failure when reading from client socket: &quot;</span> &lt;&lt; strerror(errno) &lt;&lt; std::endl;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;        }</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;        <span class="keywordflow">if</span> (bytesRead == 0)</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;        {</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;            std::cerr &lt;&lt; <span class="stringliteral">&quot;: EOF while reading from client socket.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;        }</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;        totalBytesRead += bytesRead;</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    }</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;};</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;<span class="keywordtype">void</span> GatordMockService::EchoPacket(<a class="code" href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955">PacketDirection</a> direction, uint8_t* packet, <span class="keywordtype">size_t</span> lengthInBytes)</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;{</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    <span class="comment">// If enabled print the contents of the data packet to the console.</span></div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    <span class="keywordflow">if</span> (m_EchoPackets)</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    {</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;        <span class="keywordflow">if</span> (direction == <a class="code" href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955ae4b0c2b6d59cb4cf3e169a9886008087">PacketDirection::Sending</a>)</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;        {</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;            std::cout &lt;&lt; <span class="stringliteral">&quot;TX &quot;</span> &lt;&lt; std::dec &lt;&lt; lengthInBytes &lt;&lt; <span class="stringliteral">&quot; bytes : &quot;</span>;</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;        }</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (direction == <a class="code" href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955a2855fc8ecb116f85a4b09600fd1cd75f">PacketDirection::ReceivedHeader</a>)</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;        {</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;            std::cout &lt;&lt; <span class="stringliteral">&quot;RX Header &quot;</span> &lt;&lt; std::dec &lt;&lt; lengthInBytes &lt;&lt; <span class="stringliteral">&quot; bytes : &quot;</span>;</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;        }</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;        {</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;            std::cout &lt;&lt; <span class="stringliteral">&quot;RX Data &quot;</span> &lt;&lt; std::dec &lt;&lt; lengthInBytes &lt;&lt; <span class="stringliteral">&quot; bytes : &quot;</span>;</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;        }</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; lengthInBytes; i++)</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;        {</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;            <span class="keywordflow">if</span> ((i % 10) == 0)</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;            {</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;                std::cout &lt;&lt; std::endl;</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;            }</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;            std::cout &lt;&lt; <span class="stringliteral">&quot;0x&quot;</span> &lt;&lt; std::setfill(<span class="charliteral">&#39;0&#39;</span>) &lt;&lt; std::setw(2) &lt;&lt; std::hex &lt;&lt; static_cast&lt;unsigned int&gt;(packet[i])</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;                      &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;        }</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;        std::cout &lt;&lt; std::endl;</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;    }</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;}</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;uint32_t GatordMockService::ToUint32(uint8_t* data, <a class="code" href="namespacearmnn_1_1gatordmock.xhtml#a006732ecc1f16712db06bf622eb79651">TargetEndianness</a> endianness)</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;{</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;    <span class="comment">// Extract the first 4 bytes starting at data and push them into a 32bit integer based on the</span></div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    <span class="comment">// specified endianness.</span></div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    <span class="keywordflow">if</span> (endianness == <a class="code" href="namespacearmnn_1_1gatordmock.xhtml#a006732ecc1f16712db06bf622eb79651aefe19217ee8d2186e7bbecbf2f171eb9">TargetEndianness::BeWire</a>)</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    {</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(data[0]) &lt;&lt; 24 | static_cast&lt;uint32_t&gt;(data[1]) &lt;&lt; 16 |</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;               <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(data[2]) &lt;&lt; 8 | static_cast&lt;uint32_t&gt;(data[3]);</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;    }</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    {</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(data[3]) &lt;&lt; 24 | static_cast&lt;uint32_t&gt;(data[2]) &lt;&lt; 16 |</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;               <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(data[1]) &lt;&lt; 8 | static_cast&lt;uint32_t&gt;(data[0]);</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;    }</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;}</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;<span class="keywordtype">void</span> GatordMockService::InsertU32(uint32_t value, uint8_t* data, <a class="code" href="namespacearmnn_1_1gatordmock.xhtml#a006732ecc1f16712db06bf622eb79651">TargetEndianness</a> endianness)</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;{</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    <span class="comment">// Take the bytes of a 32bit integer and copy them into char array starting at data considering</span></div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;    <span class="comment">// the endianness value.</span></div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    <span class="keywordflow">if</span> (endianness == <a class="code" href="namespacearmnn_1_1gatordmock.xhtml#a006732ecc1f16712db06bf622eb79651aefe19217ee8d2186e7bbecbf2f171eb9">TargetEndianness::BeWire</a>)</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    {</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;        *data       = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>((value &gt;&gt; 24) &amp; 0xFF);</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;        *(data + 1) = static_cast&lt;uint8_t&gt;((value &gt;&gt; 16) &amp; 0xFF);</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;        *(data + 2) = static_cast&lt;uint8_t&gt;((value &gt;&gt; 8) &amp; 0xFF);</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;        *(data + 3) = static_cast&lt;uint8_t&gt;(value &amp; 0xFF);</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    }</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    {</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;        *(data + 3) = static_cast&lt;uint8_t&gt;((value &gt;&gt; 24) &amp; 0xFF);</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;        *(data + 2) = static_cast&lt;uint8_t&gt;((value &gt;&gt; 16) &amp; 0xFF);</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;        *(data + 1) = static_cast&lt;uint8_t&gt;((value &gt;&gt; 8) &amp; 0xFF);</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;        *data       = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(value &amp; 0xFF);</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    }</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;}</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;}    <span class="comment">// namespace gatordmock</span></div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;}    <span class="comment">// namespace armnn</span></div><div class="ttc" id="_packet_version_resolver_8hpp_xhtml"><div class="ttname"><a href="_packet_version_resolver_8hpp.xhtml">PacketVersionResolver.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_utils_1_1_sockets_xhtml_a242d840b21fc2f18ac1ec8d609180e15"><div class="ttname"><a href="namespacearmnn_utils_1_1_sockets.xhtml#a242d840b21fc2f18ac1ec8d609180e15">armnnUtils::Sockets::Poll</a></div><div class="ttdeci">int Poll(PollFd *fds, nfds_t numFds, int timeout)</div><div class="ttdef"><b>Definition:</b> <a href="_network_sockets_8cpp_source.xhtml#l00081">NetworkSockets.cpp:81</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_version_xhtml_a0ab0d5a402c197d4093cbc5fdbf81214"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_version.xhtml#a0ab0d5a402c197d4093cbc5fdbf81214">armnn::profiling::Version::GetEncodedValue</a></div><div class="ttdeci">uint32_t GetEncodedValue()</div><div class="ttdef"><b>Definition:</b> <a href="_encode_version_8hpp_source.xhtml#l00045">EncodeVersion.hpp:45</a></div></div>
<div class="ttc" id="namespacearmnn_1_1gatordmock_xhtml_a006732ecc1f16712db06bf622eb79651"><div class="ttname"><a href="namespacearmnn_1_1gatordmock.xhtml#a006732ecc1f16712db06bf622eb79651">armnn::gatordmock::TargetEndianness</a></div><div class="ttdeci">TargetEndianness</div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8hpp_source.xhtml#l00022">GatordMockService.hpp:22</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_ae5ace88c65e65ab7cf5572613601a60d"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">armnn::profiling::WriteUint16</a></div><div class="ttdeci">void WriteUint16(const IPacketBufferPtr &amp;packetBuffer, unsigned int offset, uint16_t value)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00126">ProfilingUtils.cpp:126</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a3e638748a39d46e2943dfcef94dcb828"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">armnn::profiling::WriteUint32</a></div><div class="ttdeci">void WriteUint32(const IPacketBufferPtr &amp;packetBuffer, unsigned int offset, uint32_t value)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00119">ProfilingUtils.cpp:119</a></div></div>
<div class="ttc" id="namespacearmnn_1_1gatordmock_xhtml_a006732ecc1f16712db06bf622eb79651ab2db365e5027e9a57988c7054e9bd6b7"><div class="ttname"><a href="namespacearmnn_1_1gatordmock.xhtml#a006732ecc1f16712db06bf622eb79651ab2db365e5027e9a57988c7054e9bd6b7">armnn::gatordmock::TargetEndianness::LeWire</a></div></div>
<div class="ttc" id="namespacearmnn_1_1gatordmock_xhtml_aec1b34297cc8e184a2d3d2c6e20da955"><div class="ttname"><a href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955">armnn::gatordmock::PacketDirection</a></div><div class="ttdeci">PacketDirection</div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8hpp_source.xhtml#l00028">GatordMockService.hpp:28</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_packet_version_resolver_xhtml_ac8ad466123304f923e64997ac096926a"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_packet_version_resolver.xhtml#ac8ad466123304f923e64997ac096926a">armnn::profiling::PacketVersionResolver::ResolvePacketVersion</a></div><div class="ttdeci">Version ResolvePacketVersion(uint32_t familyId, uint32_t packetId) const</div><div class="ttdef"><b>Definition:</b> <a href="_packet_version_resolver_8cpp_source.xhtml#l00055">PacketVersionResolver.cpp:55</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_packet_version_resolver_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_packet_version_resolver.xhtml">armnn::profiling::PacketVersionResolver</a></div><div class="ttdef"><b>Definition:</b> <a href="_packet_version_resolver_8hpp_source.xhtml#l00036">PacketVersionResolver.hpp:36</a></div></div>
<div class="ttc" id="classarmnn_1_1_exception_xhtml_abf843cbb29dec939d0731e491bab6f70"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">armnn::Exception::what</a></div><div class="ttdeci">virtual const char * what() const noexcept override</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8cpp_source.xhtml#l00032">Exceptions.cpp:32</a></div></div>
<div class="ttc" id="classarmnn_1_1gatordmock_1_1_gatord_mock_service_xhtml_aa03af06b5336e9ad43b374a03934c0f1"><div class="ttname"><a href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#aa03af06b5336e9ad43b374a03934c0f1">armnn::gatordmock::GatordMockService::OpenListeningSocket</a></div><div class="ttdeci">bool OpenListeningSocket(std::string udsNamespace)</div><div class="ttdoc">Establish the Unix domain socket and set it to listen for connections. </div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8cpp_source.xhtml#l00027">GatordMockService.cpp:27</a></div></div>
<div class="ttc" id="_network_sockets_8hpp_xhtml"><div class="ttname"><a href="_network_sockets_8hpp.xhtml">NetworkSockets.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_1_1gatordmock_xhtml_a006732ecc1f16712db06bf622eb79651aefe19217ee8d2186e7bbecbf2f171eb9"><div class="ttname"><a href="namespacearmnn_1_1gatordmock.xhtml#a006732ecc1f16712db06bf622eb79651aefe19217ee8d2186e7bbecbf2f171eb9">armnn::gatordmock::TargetEndianness::BeWire</a></div></div>
<div class="ttc" id="_gatord_mock_service_8hpp_xhtml"><div class="ttname"><a href="_gatord_mock_service_8hpp.xhtml">GatordMockService.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml"><div class="ttname"><a href="namespacearmnn.xhtml">armnn</a></div><div class="ttdoc">Copyright (c) 2020 ARM Limited. </div><div class="ttdef"><b>Definition:</b> <a href="00__introduction_8dox_source.xhtml#l00025">00_introduction.dox:25</a></div></div>
<div class="ttc" id="namespacearmnn_utils_1_1_sockets_xhtml_a36eb04939ffbb4d4a1291724921a6c6a"><div class="ttname"><a href="namespacearmnn_utils_1_1_sockets.xhtml#a36eb04939ffbb4d4a1291724921a6c6a">armnnUtils::Sockets::Ioctl</a></div><div class="ttdeci">int Ioctl(Socket s, unsigned long int cmd, void *arg)</div><div class="ttdef"><b>Definition:</b> <a href="_network_sockets_8cpp_source.xhtml#l00069">NetworkSockets.cpp:69</a></div></div>
<div class="ttc" id="classarmnn_1_1_timeout_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_timeout_exception.xhtml">armnn::TimeoutException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00135">Exceptions.hpp:135</a></div></div>
<div class="ttc" id="classarmnn_1_1gatordmock_1_1_gatord_mock_service_xhtml_ac07351dbc304681b2efd5df4958a6735"><div class="ttname"><a href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#ac07351dbc304681b2efd5df4958a6735">armnn::gatordmock::GatordMockService::WaitForStreamMetaData</a></div><div class="ttdeci">bool WaitForStreamMetaData()</div><div class="ttdoc">Once the connection is open wait to receive the stream meta data packet from the client. </div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8cpp_source.xhtml#l00069">GatordMockService.cpp:69</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_packet_xhtml_ab232ac74b80987179d2b185a7a495fa6"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_packet.xhtml#ab232ac74b80987179d2b185a7a495fa6">armnn::profiling::Packet::GetPacketFamily</a></div><div class="ttdeci">uint32_t GetPacketFamily() const</div><div class="ttdef"><b>Definition:</b> <a href="_packet_8hpp_source.xhtml#l00070">Packet.hpp:70</a></div></div>
<div class="ttc" id="classarmnn_1_1gatordmock_1_1_gatord_mock_service_xhtml_a2b9de2e6eee97f258fe2d7c765206e8a"><div class="ttname"><a href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a2b9de2e6eee97f258fe2d7c765206e8a">armnn::gatordmock::GatordMockService::SendRequestCounterDir</a></div><div class="ttdeci">void SendRequestCounterDir()</div><div class="ttdoc">Send a request counter directory packet back to the client. </div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8cpp_source.xhtml#l00139">GatordMockService.cpp:139</a></div></div>
<div class="ttc" id="classarmnn_1_1gatordmock_1_1_gatord_mock_service_xhtml_a82bd11e044b4bc9c647fcaa9ce5b3e55"><div class="ttname"><a href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a82bd11e044b4bc9c647fcaa9ce5b3e55">armnn::gatordmock::GatordMockService::ReceiveThreadRunning</a></div><div class="ttdeci">bool ReceiveThreadRunning()</div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8hpp_source.xhtml#l00092">GatordMockService.hpp:92</a></div></div>
<div class="ttc" id="namespacearmnn_utils_1_1_sockets_xhtml_a248c764067ee60c03ee370784c49f353"><div class="ttname"><a href="namespacearmnn_utils_1_1_sockets.xhtml#a248c764067ee60c03ee370784c49f353">armnnUtils::Sockets::Initialize</a></div><div class="ttdeci">bool Initialize()</div><div class="ttdoc">Performs any required one-time setup. </div><div class="ttdef"><b>Definition:</b> <a href="_network_sockets_8cpp_source.xhtml#l00018">NetworkSockets.cpp:18</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_version_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_version.xhtml">armnn::profiling::Version</a></div><div class="ttdef"><b>Definition:</b> <a href="_encode_version_8hpp_source.xhtml#l00029">EncodeVersion.hpp:29</a></div></div>
<div class="ttc" id="namespacearmnn_utils_1_1_sockets_xhtml_a8396c0d14fc0e7284b175fedfeceef37"><div class="ttname"><a href="namespacearmnn_utils_1_1_sockets.xhtml#a8396c0d14fc0e7284b175fedfeceef37">armnnUtils::Sockets::SetNonBlocking</a></div><div class="ttdeci">bool SetNonBlocking(Socket s)</div><div class="ttdef"><b>Definition:</b> <a href="_network_sockets_8cpp_source.xhtml#l00038">NetworkSockets.cpp:38</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_packet_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_packet.xhtml">armnn::profiling::Packet</a></div><div class="ttdef"><b>Definition:</b> <a href="_packet_8hpp_source.xhtml#l00018">Packet.hpp:18</a></div></div>
<div class="ttc" id="classarmnn_1_1gatordmock_1_1_gatord_mock_service_xhtml_a5175305569ecb4e58004e977abeff61a"><div class="ttname"><a href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a5175305569ecb4e58004e977abeff61a">armnn::gatordmock::GatordMockService::LaunchReceivingThread</a></div><div class="ttdeci">bool LaunchReceivingThread()</div><div class="ttdoc">Start the thread that will receive all packets and print them nicely to stdout. </div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8cpp_source.xhtml#l00149">GatordMockService.cpp:149</a></div></div>
<div class="ttc" id="classarmnn_1_1_runtime_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00120">Exceptions.hpp:120</a></div></div>
<div class="ttc" id="namespacearmnn_utils_1_1_sockets_xhtml_a72e0661331d20d0a352fb49c388a1b05"><div class="ttname"><a href="namespacearmnn_utils_1_1_sockets.xhtml#a72e0661331d20d0a352fb49c388a1b05">armnnUtils::Sockets::Close</a></div><div class="ttdeci">int Close(Socket s)</div><div class="ttdef"><b>Definition:</b> <a href="_network_sockets_8cpp_source.xhtml#l00028">NetworkSockets.cpp:28</a></div></div>
<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_command_handler_functor_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_command_handler_functor.xhtml">armnn::profiling::CommandHandlerFunctor</a></div><div class="ttdef"><b>Definition:</b> <a href="_command_handler_functor_8hpp_source.xhtml#l00020">CommandHandlerFunctor.hpp:20</a></div></div>
<div class="ttc" id="namespacearmnn_utils_1_1_sockets_xhtml_ae7d45c832d3f9a398a08352442d20417"><div class="ttname"><a href="namespacearmnn_utils_1_1_sockets.xhtml#ae7d45c832d3f9a398a08352442d20417">armnnUtils::Sockets::Accept</a></div><div class="ttdeci">armnnUtils::Sockets::Socket Accept(Socket s, sockaddr *addr, socklen_t *addrlen, int flags)</div><div class="ttdef"><b>Definition:</b> <a href="_network_sockets_8cpp_source.xhtml#l00091">NetworkSockets.cpp:91</a></div></div>
<div class="ttc" id="namespacearmnn_1_1gatordmock_xhtml_aec1b34297cc8e184a2d3d2c6e20da955af44b1a9eb8e6ef1bea10617c1dfef07f"><div class="ttname"><a href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955af44b1a9eb8e6ef1bea10617c1dfef07f">armnn::gatordmock::PacketDirection::ReceivedData</a></div></div>
<div class="ttc" id="classarmnn_1_1gatordmock_1_1_gatord_mock_service_xhtml"><div class="ttname"><a href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml">armnn::gatordmock::GatordMockService</a></div><div class="ttdoc">A class that implements a Mock Gatord server. </div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8hpp_source.xhtml#l00037">GatordMockService.hpp:37</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_packet_xhtml_a5a218fe9ea18741167670f1bc016b5cf"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_packet.xhtml#a5a218fe9ea18741167670f1bc016b5cf">armnn::profiling::Packet::GetLength</a></div><div class="ttdeci">uint32_t GetLength() const</div><div class="ttdef"><b>Definition:</b> <a href="_packet_8hpp_source.xhtml#l00074">Packet.hpp:74</a></div></div>
<div class="ttc" id="namespacearmnn_1_1gatordmock_xhtml_aec1b34297cc8e184a2d3d2c6e20da955a2855fc8ecb116f85a4b09600fd1cd75f"><div class="ttname"><a href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955a2855fc8ecb116f85a4b09600fd1cd75f">armnn::gatordmock::PacketDirection::ReceivedHeader</a></div></div>
<div class="ttc" id="namespacearmnn_1_1gatordmock_xhtml_aec1b34297cc8e184a2d3d2c6e20da955ae4b0c2b6d59cb4cf3e169a9886008087"><div class="ttname"><a href="namespacearmnn_1_1gatordmock.xhtml#aec1b34297cc8e184a2d3d2c6e20da955ae4b0c2b6d59cb4cf3e169a9886008087">armnn::gatordmock::PacketDirection::Sending</a></div></div>
<div class="ttc" id="classarmnn_1_1gatordmock_1_1_gatord_mock_service_xhtml_a18f77daf6b32e5bb456c2bc860140669"><div class="ttname"><a href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a18f77daf6b32e5bb456c2bc860140669">armnn::gatordmock::GatordMockService::WaitCommand</a></div><div class="ttdeci">void WaitCommand(uint32_t timeout)</div><div class="ttdoc">Execute the WAIT command from the comamnd file. </div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8cpp_source.xhtml#l00214">GatordMockService.cpp:214</a></div></div>
<div class="ttc" id="classarmnn_1_1gatordmock_1_1_gatord_mock_service_xhtml_abaf2feb0e79566de18721659d896dae1"><div class="ttname"><a href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#abaf2feb0e79566de18721659d896dae1">armnn::gatordmock::GatordMockService::SendPeriodicCounterSelectionList</a></div><div class="ttdeci">void SendPeriodicCounterSelectionList(uint32_t period, std::vector&lt; uint16_t &gt; counters)</div><div class="ttdoc">Send the counter list to ArmNN. </div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8cpp_source.xhtml#l00181">GatordMockService.cpp:181</a></div></div>
<div class="ttc" id="namespacearmnn_utils_xhtml"><div class="ttname"><a href="namespacearmnn_utils.xhtml">armnnUtils</a></div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00013">DataLayoutIndexed.hpp:13</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_packet_xhtml_a17b980d48f35a31c27a227e8ceae5402"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_packet.xhtml#a17b980d48f35a31c27a227e8ceae5402">armnn::profiling::Packet::GetPacketId</a></div><div class="ttdeci">uint32_t GetPacketId() const</div><div class="ttdef"><b>Definition:</b> <a href="_packet_8hpp_source.xhtml#l00071">Packet.hpp:71</a></div></div>
<div class="ttc" id="namespacearmnn_utils_1_1_sockets_xhtml_ad5b08981ac047ff0a3c7cb3442b9f161"><div class="ttname"><a href="namespacearmnn_utils_1_1_sockets.xhtml#ad5b08981ac047ff0a3c7cb3442b9f161">armnnUtils::Sockets::Write</a></div><div class="ttdeci">long Write(Socket s, const void *buf, size_t len)</div><div class="ttdef"><b>Definition:</b> <a href="_network_sockets_8cpp_source.xhtml#l00050">NetworkSockets.cpp:50</a></div></div>
<div class="ttc" id="classarmnn_1_1gatordmock_1_1_gatord_mock_service_xhtml_a93617d8640d5e93831d06a2ef3c86bef"><div class="ttname"><a href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a93617d8640d5e93831d06a2ef3c86bef">armnn::gatordmock::GatordMockService::WaitForReceivingThread</a></div><div class="ttdeci">void WaitForReceivingThread()</div><div class="ttdoc">This is a placeholder method to prevent main exiting. </div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8cpp_source.xhtml#l00166">GatordMockService.cpp:166</a></div></div>
<div class="ttc" id="_command_handler_registry_8hpp_xhtml"><div class="ttname"><a href="_command_handler_registry_8hpp.xhtml">CommandHandlerRegistry.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_utils_1_1_sockets_xhtml_a7b2c6949d9d76d2c0ffca916175e5322"><div class="ttname"><a href="namespacearmnn_utils_1_1_sockets.xhtml#a7b2c6949d9d76d2c0ffca916175e5322">armnnUtils::Sockets::Read</a></div><div class="ttdeci">long Read(Socket s, void *buf, size_t len)</div><div class="ttdef"><b>Definition:</b> <a href="_network_sockets_8cpp_source.xhtml#l00060">NetworkSockets.cpp:60</a></div></div>
<div class="ttc" id="classarmnn_1_1gatordmock_1_1_gatord_mock_service_xhtml_a4c7dcda01e81dbdc47ceb1c82f26039b"><div class="ttname"><a href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a4c7dcda01e81dbdc47ceb1c82f26039b">armnn::gatordmock::GatordMockService::BlockForOneClient</a></div><div class="ttdeci">armnnUtils::Sockets::Socket BlockForOneClient()</div><div class="ttdoc">Block waiting to accept one client to connect to the UDS. </div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8cpp_source.xhtml#l00058">GatordMockService.cpp:58</a></div></div>
<div class="ttc" id="classarmnn_1_1gatordmock_1_1_gatord_mock_service_xhtml_a41eaa65cf4e7212f09b04d06c130cd83"><div class="ttname"><a href="classarmnn_1_1gatordmock_1_1_gatord_mock_service.xhtml#a41eaa65cf4e7212f09b04d06c130cd83">armnn::gatordmock::GatordMockService::SendConnectionAck</a></div><div class="ttdeci">void SendConnectionAck()</div><div class="ttdoc">Send a connection acknowledged packet back to the client. </div><div class="ttdef"><b>Definition:</b> <a href="_gatord_mock_service_8cpp_source.xhtml#l00129">GatordMockService.cpp:129</a></div></div>
<div class="ttc" id="_profiling_utils_8hpp_xhtml"><div class="ttname"><a href="_profiling_utils_8hpp.xhtml">ProfilingUtils.hpp</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_59425e443f801f1f2fd8bbe4959a3ccf.xhtml">tests</a></li><li class="navelem"><a class="el" href="dir_659c7018c274c4a27f289b6765351cd5.xhtml">profiling</a></li><li class="navelem"><a class="el" href="dir_0f843ccd982e68996492857574f1c0de.xhtml">gatordmock</a></li><li class="navelem"><a class="el" href="_gatord_mock_service_8cpp.xhtml">GatordMockService.cpp</a></li>
    <li class="footer">Generated on Fri Mar 13 2020 16:09:13 for ArmNN by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>