<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.15"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>LIRC libraries: /home/iurt/rpmbuild/BUILD/lirc-0.10.1/lib/ir_remote.c 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"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(document).ready(initResizable); /* @license-end */</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> <link href="doxygen.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;"> <td id="projectlogo"><img alt="Logo" src="diode-2.gif"/></td> <td id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">LIRC libraries </div> <div id="projectbrief">LinuxInfraredRemoteControl</div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.15 --> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ var searchBox = new SearchBox("searchBox", "search",false,'Search'); /* @license-end */ </script> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('',true,false,'search.php','Search'); $(document).ready(function() { init_search(); }); }); /* @license-end */</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"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(document).ready(function(){initNavTree('ir__remote_8c_source.html','');}); /* @license-end */ </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">ir_remote.c</div> </div> </div><!--header--> <div class="contents"> <a href="ir__remote_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/****************************************************************************</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">** ir_remote.c *************************************************************</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">****************************************************************************</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">*</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">* ir_remote.c - sends and decodes the signals from IR remotes</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">*</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">* Copyright (C) 1996,97 Ralph Metzler (rjkm@thp.uni-koeln.de)</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">* Copyright (C) 1998 Christoph Bartelmus (lirc@bartelmus.de)</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">*/</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># include <config.h></span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <stdlib.h></span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <stdio.h></span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <stdint.h></span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <fcntl.h></span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <limits.h></span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <sys/ioctl.h></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifdef HAVE_KERNEL_LIRC_H</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <linux/lirc.h></span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "media/lirc.h"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "lirc/ir_remote.h"</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "lirc/driver.h"</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "lirc/release.h"</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "lirc/lirc_log.h"</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="lirc__log_8h.html#abffd9aa4ab9bcfacdbb9d7728037114b">logchannel_t</a> logchannel = LOG_LIB;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structir__ncode.html">ir_ncode</a> NCODE_EOF = {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="stringliteral">"__EOF"</span>, <a class="code" href="lirc__config_8h.html#a510ecf0088b450b9aee39c8260fdb296">LIRC_EOF</a>, 1, NULL, NULL, NULL, 0</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> };</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> PACKET_EOF = <span class="stringliteral">"0000000008000000 00 __EOF lirc\n"</span>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a> lirc_internal_remote = { <span class="stringliteral">"lirc"</span> };</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a>* decoding = NULL;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="group__driver__api.html#ga474c489cabdaae4546ca0ac26ec9cd87"> 59</a></span> <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a>* <a class="code" href="group__driver__api.html#ga474c489cabdaae4546ca0ac26ec9cd87">last_remote</a> = NULL;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="group__driver__api.html#ga7bc28a85da7d0ccf4466708918f01dc4"> 61</a></span> <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a>* <a class="code" href="group__driver__api.html#ga7bc28a85da7d0ccf4466708918f01dc4">repeat_remote</a> = NULL;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="group__driver__api.html#ga2da0e0383db556d0e1ba7261763815c5"> 63</a></span> <span class="keyword">struct </span><a class="code" href="structir__ncode.html">ir_ncode</a>* <a class="code" href="group__driver__api.html#ga2da0e0383db556d0e1ba7261763815c5">repeat_code</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">static</span> <span class="keywordtype">int</span> dyncodes = 0;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="group__driver__api.html#gac288bce2140d2066a3990a1b2e3317c5"> 69</a></span> <span class="keyword">struct </span><a class="code" href="structir__ncode.html">ir_ncode</a>* <a class="code" href="group__driver__api.html#gac288bce2140d2066a3990a1b2e3317c5">ncode_dup</a>(<span class="keyword">struct</span> <a class="code" href="structir__ncode.html">ir_ncode</a>* ncode)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">struct </span><a class="code" href="structir__ncode.html">ir_ncode</a>* new_ncode;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordtype">size_t</span> signal_size;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">struct </span><a class="code" href="structir__code__node.html">ir_code_node</a>* node;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">struct </span><a class="code" href="structir__code__node.html">ir_code_node</a>** node_ptr;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">struct </span><a class="code" href="structir__code__node.html">ir_code_node</a>* new_node;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  new_ncode = (<span class="keyword">struct </span><a class="code" href="structir__ncode.html">ir_ncode</a>*)malloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structir__ncode.html">ir_ncode</a>));</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">if</span> (new_ncode == NULL)</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  memcpy(new_ncode, ncode, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structir__ncode.html">ir_ncode</a>));</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  new_ncode-><a class="code" href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">name</a> = ncode-><a class="code" href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">name</a> == NULL ? NULL : strdup(ncode-><a class="code" href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">name</a>);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">if</span> (ncode-><a class="code" href="structir__ncode.html#a46824261611491c5ff0b611cda1ec437">length</a> > 0) {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  signal_size = ncode-><a class="code" href="structir__ncode.html#a46824261611491c5ff0b611cda1ec437">length</a> * <span class="keyword">sizeof</span>(lirc_t);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  new_ncode-><a class="code" href="structir__ncode.html#a6ff318262c9447b1e1fc4e944e29bf4a">signals</a> = (lirc_t*)malloc(signal_size);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">if</span> (new_ncode-><a class="code" href="structir__ncode.html#a6ff318262c9447b1e1fc4e944e29bf4a">signals</a> == NULL)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  memcpy(new_ncode-><a class="code" href="structir__ncode.html#a6ff318262c9447b1e1fc4e944e29bf4a">signals</a>, ncode-><a class="code" href="structir__ncode.html#a6ff318262c9447b1e1fc4e944e29bf4a">signals</a>, signal_size);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  new_ncode-><a class="code" href="structir__ncode.html#a6ff318262c9447b1e1fc4e944e29bf4a">signals</a> = NULL;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  node_ptr = &(new_ncode-><a class="code" href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">next</a>);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">for</span> (node = ncode-><a class="code" href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">next</a>; node != NULL; node = node->next) {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  new_node = malloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structir__code__node.html">ir_code_node</a>));</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  memcpy(new_node, node, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structir__code__node.html">ir_code_node</a>));</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  *node_ptr = new_node;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  node_ptr = &(new_node->next);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  *node_ptr = NULL;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> new_ncode;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="group__driver__api.html#ga4477860d1f604548e032694de8f69c16"> 104</a></span> <span class="keywordtype">void</span> <a class="code" href="group__driver__api.html#ga4477860d1f604548e032694de8f69c16">ncode_free</a>(<span class="keyword">struct</span> <a class="code" href="structir__ncode.html">ir_ncode</a>* ncode)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">struct </span><a class="code" href="structir__code__node.html">ir_code_node</a>* node;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keyword">struct </span><a class="code" href="structir__code__node.html">ir_code_node</a>* next;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">if</span> (ncode == NULL)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  node = ncode-><a class="code" href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">next</a>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">while</span> (node != NULL) {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  next = node->next;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (node != NULL)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  free(node);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  node = next;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">if</span> (ncode-><a class="code" href="structir__ncode.html#a6ff318262c9447b1e1fc4e944e29bf4a">signals</a> != NULL)</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  free(ncode-><a class="code" href="structir__ncode.html#a6ff318262c9447b1e1fc4e944e29bf4a">signals</a>);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  free(ncode);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="group__driver__api.html#ga8d5bc121b8582a690000bc8befe13080"> 124</a></span> <span class="keywordtype">void</span> <a class="code" href="group__driver__api.html#ga8d5bc121b8582a690000bc8befe13080">ir_remote_init</a>(<span class="keywordtype">int</span> use_dyncodes)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  dyncodes = use_dyncodes;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keyword">static</span> lirc_t time_left(<span class="keyword">struct</span> timeval* current,</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keyword">struct</span> timeval* last,</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  lirc_t gap)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> secs, diff;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  secs = current->tv_sec - last->tv_sec;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  diff = 1000000 * secs + current->tv_usec - last->tv_usec;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">return</span> (lirc_t)(diff < gap ? gap - diff : 0);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> }</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">static</span> <span class="keywordtype">int</span> match_ir_code(<span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remote, <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> a, <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> b)</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">return</span> (remote-><a class="code" href="structir__remote.html#a739c26d88eb023d67353fa08dd076255">ignore_mask</a> | a) == (remote-><a class="code" href="structir__remote.html#a739c26d88eb023d67353fa08dd076255">ignore_mask</a> | b)</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  || (remote-><a class="code" href="structir__remote.html#a739c26d88eb023d67353fa08dd076255">ignore_mask</a> | a) ==</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  (remote-><a class="code" href="structir__remote.html#a739c26d88eb023d67353fa08dd076255">ignore_mask</a> | (b ^ remote-><a class="code" href="structir__remote.html#ad1d35f0da36527d473c7d857231ec739">toggle_bit_mask</a>));</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="group__driver__api.html#ga19bab2135ca2b7f68dc0b2f8cde9863f"> 156</a></span> <span class="keywordtype">void</span> <a class="code" href="group__driver__api.html#ga19bab2135ca2b7f68dc0b2f8cde9863f">get_frequency_range</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remotes,</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>* min_freq,</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>* max_freq)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a>* scan;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="comment">/* use remotes carefully, it may be changed on SIGHUP */</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  scan = remotes;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">if</span> (scan == NULL) {</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  *min_freq = 0;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  *max_freq = 0;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  *min_freq = scan-><a class="code" href="structir__remote.html#a04eb04a7c2333f53ceb20ffef8d2ebc4">freq</a>;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  *max_freq = scan-><a class="code" href="structir__remote.html#a04eb04a7c2333f53ceb20ffef8d2ebc4">freq</a>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  scan = scan->next;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">while</span> (scan) {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">if</span> (scan-><a class="code" href="structir__remote.html#a04eb04a7c2333f53ceb20ffef8d2ebc4">freq</a> != 0) {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">if</span> (scan-><a class="code" href="structir__remote.html#a04eb04a7c2333f53ceb20ffef8d2ebc4">freq</a> > *max_freq)</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  *max_freq = scan-><a class="code" href="structir__remote.html#a04eb04a7c2333f53ceb20ffef8d2ebc4">freq</a>;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (scan-><a class="code" href="structir__remote.html#a04eb04a7c2333f53ceb20ffef8d2ebc4">freq</a> < *min_freq)</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  *min_freq = scan-><a class="code" href="structir__remote.html#a04eb04a7c2333f53ceb20ffef8d2ebc4">freq</a>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  scan = scan->next;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="group__driver__api.html#ga1a1b6c86d0309f25ab5806a5f861692c"> 193</a></span> <span class="keywordtype">void</span> <a class="code" href="group__driver__api.html#ga1a1b6c86d0309f25ab5806a5f861692c">get_filter_parameters</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remotes,</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  lirc_t* max_gap_lengthp,</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  lirc_t* min_pulse_lengthp,</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  lirc_t* min_space_lengthp,</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  lirc_t* max_pulse_lengthp,</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  lirc_t* max_space_lengthp)</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a>* scan = remotes;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  lirc_t <a class="code" href="structir__remote.html#ae78acfc685ff2bc9559d45f1e4b702bb">max_gap_length</a> = 0;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  lirc_t min_pulse_length = 0, min_space_length = 0;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  lirc_t max_pulse_length = 0, max_space_length = 0;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">while</span> (scan) {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  lirc_t val;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  val = upper_limit(scan, scan-><a class="code" href="structir__remote.html#ae78acfc685ff2bc9559d45f1e4b702bb">max_gap_length</a>);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (val > <a class="code" href="structir__remote.html#ae78acfc685ff2bc9559d45f1e4b702bb">max_gap_length</a>)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="structir__remote.html#ae78acfc685ff2bc9559d45f1e4b702bb">max_gap_length</a> = val;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  val = lower_limit(scan, scan->min_pulse_length);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span> (min_pulse_length == 0 || val < min_pulse_length)</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  min_pulse_length = val;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  val = lower_limit(scan, scan->min_space_length);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">if</span> (min_space_length == 0 || val > min_space_length)</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  min_space_length = val;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  val = upper_limit(scan, scan->max_pulse_length);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">if</span> (val > max_pulse_length)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  max_pulse_length = val;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  val = upper_limit(scan, scan->max_space_length);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">if</span> (val > max_space_length)</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  max_space_length = val;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  scan = scan->next;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  *max_gap_lengthp = <a class="code" href="structir__remote.html#ae78acfc685ff2bc9559d45f1e4b702bb">max_gap_length</a>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  *min_pulse_lengthp = min_pulse_length;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  *min_space_lengthp = min_space_length;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  *max_pulse_lengthp = max_pulse_length;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  *max_space_lengthp = max_space_length;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="group__driver__api.html#gaadf09b8ef4b71be00f8e53a39f70d315"> 239</a></span> <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a>* <a class="code" href="group__driver__api.html#gaadf09b8ef4b71be00f8e53a39f70d315">is_in_remotes</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remotes,</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remote)</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">while</span> (remotes != NULL) {</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">if</span> (remotes == remote)</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">return</span> remote;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  remotes = remotes->next;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  }</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div><div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="group__driver__api.html#ga251129673cd73c5f869bb53c6c38a88f"> 251</a></span> <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a>* <a class="code" href="group__driver__api.html#ga251129673cd73c5f869bb53c6c38a88f">get_ir_remote</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remotes,</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="structir__remote.html#acd104de70d9169542de9c471befb0045">name</a>)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a>* all;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="comment">/* use remotes carefully, it may be changed on SIGHUP */</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  all = remotes;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">if</span> (strcmp(<a class="code" href="structir__remote.html#acd104de70d9169542de9c471befb0045">name</a>, <span class="stringliteral">"lirc"</span>) == 0)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">return</span> &lirc_internal_remote;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">while</span> (all) {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span> (strcasecmp(all-><a class="code" href="structir__remote.html#acd104de70d9169542de9c471befb0045">name</a>, <a class="code" href="structir__remote.html#acd104de70d9169542de9c471befb0045">name</a>) == 0)</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">return</span> (<span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>*)all;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  all = all->next;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="group__driver__api.html#gabac8048f405d0a78fcc01fa9ef1132df"> 283</a></span> <span class="keywordtype">int</span> <a class="code" href="group__driver__api.html#gabac8048f405d0a78fcc01fa9ef1132df">map_code</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remote,</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keyword">struct</span> <a class="code" href="structdecode__ctx__t.html">decode_ctx_t</a>* ctx,</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordtype">int</span> pre_bits,</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> pre,</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordtype">int</span> <a class="code" href="structir__remote.html#a66c874209817af89bc88503f61a76539">bits</a>,</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> code,</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordtype">int</span> post_bits,</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> post)</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> all;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">if</span> (pre_bits + <a class="code" href="structir__remote.html#a66c874209817af89bc88503f61a76539">bits</a> + post_bits != remote-><a class="code" href="structir__remote.html#ae5bfde45bb74a00d7ec53023f2fa6252">pre_data_bits</a> +</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  remote-><a class="code" href="structir__remote.html#a66c874209817af89bc88503f61a76539">bits</a> + remote-><a class="code" href="structir__remote.html#a67432d0e91b257de5044ee47985cbb5b">post_data_bits</a>)</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  all = (pre & gen_mask(pre_bits));</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  all <<= <a class="code" href="structir__remote.html#a66c874209817af89bc88503f61a76539">bits</a>;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  all |= (code & gen_mask(<a class="code" href="structir__remote.html#a66c874209817af89bc88503f61a76539">bits</a>));</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  all <<= post_bits;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  all |= (post & gen_mask(post_bits));</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a81e997b57167363c5cc8db496a841165">post</a> = (all & gen_mask(remote-><a class="code" href="structir__remote.html#a67432d0e91b257de5044ee47985cbb5b">post_data_bits</a>));</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  all >>= remote-><a class="code" href="structir__remote.html#a67432d0e91b257de5044ee47985cbb5b">post_data_bits</a>;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a> = (all & gen_mask(remote-><a class="code" href="structir__remote.html#a66c874209817af89bc88503f61a76539">bits</a>));</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  all >>= remote-><a class="code" href="structir__remote.html#a66c874209817af89bc88503f61a76539">bits</a>;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  ctx-><a class="code" href="structdecode__ctx__t.html#ae52561bab1b135eda87baf242a1092a6">pre</a> = (all & gen_mask(remote-><a class="code" href="structir__remote.html#ae5bfde45bb74a00d7ec53023f2fa6252">pre_data_bits</a>));</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"pre: %llx"</span>, (uint64_t)(ctx-><a class="code" href="structdecode__ctx__t.html#ae52561bab1b135eda87baf242a1092a6">pre</a>));</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"code: %llx"</span>, (uint64_t)(ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a>));</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"post: %llx"</span>, (uint64_t)(ctx-><a class="code" href="structdecode__ctx__t.html#a81e997b57167363c5cc8db496a841165">post</a>));</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"code: %016llx\n"</span>, code);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="group__driver__api.html#gac691a06cc99d8c914e2c7451407f245a"> 329</a></span> <span class="keywordtype">void</span> <a class="code" href="group__driver__api.html#gac691a06cc99d8c914e2c7451407f245a">map_gap</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remote,</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keyword">struct</span> <a class="code" href="structdecode__ctx__t.html">decode_ctx_t</a>* ctx,</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keyword">const</span> <span class="keyword">struct</span> timeval* start,</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keyword">const</span> <span class="keyword">struct</span> timeval* last,</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  lirc_t signal_length)</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="comment">// Time gap (us) between a keypress on the remote control and</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="comment">// the next one.</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  lirc_t <a class="code" href="structir__remote.html#abde525f609dea108baab4b690c2b94e4">gap</a>;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="comment">// Check the time gap between the last keypress and this one.</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">if</span> (start->tv_sec - last->tv_sec >= 2) {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="comment">// Gap of 2 or more seconds: this is not a repeated keypress.</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a7c9bcadb5d59fb05fdad3a0cdd9b1106">repeat_flag</a> = 0;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <a class="code" href="structir__remote.html#abde525f609dea108baab4b690c2b94e4">gap</a> = 0;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="comment">// Calculate the time gap in microseconds.</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <a class="code" href="structir__remote.html#abde525f609dea108baab4b690c2b94e4">gap</a> = time_elapsed(last, start);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">if</span> (expect_at_most(remote, <a class="code" href="structir__remote.html#abde525f609dea108baab4b690c2b94e4">gap</a>, remote-><a class="code" href="structir__remote.html#a2d289d49ef2ff113cbf52fd30e30fe5b">max_remaining_gap</a>)) {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="comment">// The gap is shorter than a standard gap</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="comment">// (with relative or aboslute tolerance): this</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="comment">// is a repeated keypress.</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a7c9bcadb5d59fb05fdad3a0cdd9b1106">repeat_flag</a> = 1;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="comment">// Standard gap: this is a new keypress.</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a7c9bcadb5d59fb05fdad3a0cdd9b1106">repeat_flag</a> = 0;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="comment">// Calculate extimated time gap remaining for the next code.</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">if</span> (is_const(remote)) {</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="comment">// The sum (signal_length + gap) is always constant</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="comment">// so the gap is shorter when the code is longer.</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">if</span> (min_gap(remote) > signal_length) {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  ctx-><a class="code" href="structdecode__ctx__t.html#aa76a228985ce90fddd03399aceacadb5">min_remaining_gap</a> = min_gap(remote) -</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  signal_length;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  ctx-><a class="code" href="structdecode__ctx__t.html#ab7221813c357026846919c726cf43d73">max_remaining_gap</a> = max_gap(remote) -</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  signal_length;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  ctx-><a class="code" href="structdecode__ctx__t.html#aa76a228985ce90fddd03399aceacadb5">min_remaining_gap</a> = 0;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">if</span> (max_gap(remote) > signal_length)</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  ctx-><a class="code" href="structdecode__ctx__t.html#ab7221813c357026846919c726cf43d73">max_remaining_gap</a> = max_gap(remote) -</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  signal_length;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  ctx-><a class="code" href="structdecode__ctx__t.html#ab7221813c357026846919c726cf43d73">max_remaining_gap</a> = 0;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="comment">// The gap after the signal is always constant.</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="comment">// This is the case of Kanam Accent serial remote.</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  ctx-><a class="code" href="structdecode__ctx__t.html#aa76a228985ce90fddd03399aceacadb5">min_remaining_gap</a> = min_gap(remote);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  ctx-><a class="code" href="structdecode__ctx__t.html#ab7221813c357026846919c726cf43d73">max_remaining_gap</a> = max_gap(remote);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  }</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"repeat_flagp: %d"</span>, (ctx-><a class="code" href="structdecode__ctx__t.html#a7c9bcadb5d59fb05fdad3a0cdd9b1106">repeat_flag</a>));</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"is_const(remote): %d"</span>, is_const(remote));</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"remote->gap range: %lu %lu"</span>, (uint32_t)min_gap(</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  remote), (uint32_t)max_gap(remote));</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"remote->remaining_gap: %lu %lu"</span>,</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  (uint32_t)remote-><a class="code" href="structir__remote.html#aec8b4e8638d32a3542671b91a344806f">min_remaining_gap</a>,</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  (uint32_t)remote-><a class="code" href="structir__remote.html#a2d289d49ef2ff113cbf52fd30e30fe5b">max_remaining_gap</a>);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"signal length: %lu"</span>, (uint32_t)signal_length);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"gap: %lu"</span>, (uint32_t)<a class="code" href="structir__remote.html#abde525f609dea108baab4b690c2b94e4">gap</a>);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"extim. remaining_gap: %lu %lu"</span>,</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  (uint32_t)(ctx-><a class="code" href="structdecode__ctx__t.html#aa76a228985ce90fddd03399aceacadb5">min_remaining_gap</a>),</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  (uint32_t)(ctx-><a class="code" href="structdecode__ctx__t.html#ab7221813c357026846919c726cf43d73">max_remaining_gap</a>));</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> }</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div><div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="group__driver__api.html#gafaa7cb5587a3c58e3e825411b966738a"> 397</a></span> <span class="keyword">struct </span><a class="code" href="structir__ncode.html">ir_ncode</a>* <a class="code" href="group__driver__api.html#gafaa7cb5587a3c58e3e825411b966738a">get_code_by_name</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remote,</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">name</a>)</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structir__ncode.html">ir_ncode</a>* all;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  all = remote->codes;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordflow">if</span> (all == NULL)</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keywordflow">if</span> (strcmp(remote-><a class="code" href="structir__remote.html#acd104de70d9169542de9c471befb0045">name</a>, <span class="stringliteral">"lirc"</span>) == 0)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">return</span> strcmp(<a class="code" href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">name</a>, <span class="stringliteral">"__EOF"</span>) == 0 ? &NCODE_EOF : 0;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordflow">while</span> (all-><a class="code" href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">name</a> != NULL) {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordflow">if</span> (strcasecmp(all-><a class="code" href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">name</a>, <a class="code" href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">name</a>) == 0)</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keywordflow">return</span> (<span class="keyword">struct</span> <a class="code" href="structir__ncode.html">ir_ncode</a>*)all;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  all++;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  }</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> }</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="comment">/* find longest matching sequence */</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordtype">void</span> find_longest_match(<span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remote,</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keyword">struct</span> <a class="code" href="structir__ncode.html">ir_ncode</a>* codes,</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> all,</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a>* next_all,</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordtype">int</span> have_code,</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keyword">struct</span> <a class="code" href="structir__ncode.html">ir_ncode</a>** found,</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordtype">int</span>* found_code)</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keyword">struct </span><a class="code" href="structir__code__node.html">ir_code_node</a>* search;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keyword">struct </span><a class="code" href="structir__code__node.html">ir_code_node</a>* prev;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keyword">struct </span><a class="code" href="structir__code__node.html">ir_code_node</a>* next;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordtype">int</span> flag = 1;</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordtype">int</span> sequence_match = 0;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  search = codes-><a class="code" href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">next</a>;</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">if</span> (search == NULL</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  || (codes-><a class="code" href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">next</a> != NULL && codes-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> == NULL)) {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  codes-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> = NULL;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordflow">while</span> (search != codes-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a>->next) {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  prev = NULL; <span class="comment">/* means codes->code */</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  next = search;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">while</span> (next != codes-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a>) {</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">if</span> (get_ir_code(codes, prev)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  != get_ir_code(codes, next)) {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  flag = 0;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  prev = get_next_ir_code_node(codes, prev);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  next = get_next_ir_code_node(codes, next);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">if</span> (flag == 1) {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  *next_all = gen_ir_code(remote,</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  remote-><a class="code" href="structir__remote.html#a54cf93d6a6ea5fa37c4b17ecad8b7b4b">pre_data</a>,</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  get_ir_code(codes, prev),</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  remote-><a class="code" href="structir__remote.html#a96f9c35cff5a927c8fb76c5a8a240238">post_data</a>);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">if</span> (match_ir_code(remote, *next_all, all)) {</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  codes-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> =</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  get_next_ir_code_node(codes, prev);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  sequence_match = 1;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  *found_code = 1;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keywordflow">if</span> (!have_code)</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  *found = codes;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  }</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  search = search->next;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keywordflow">if</span> (!sequence_match)</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  codes-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> = NULL;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structir__ncode.html">ir_ncode</a>* get_code(<span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remote,</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> pre,</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> <a class="code" href="structir__ncode.html#a17ca9e939fd5742de3ed6e29bdc68e8d">code</a>,</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> post,</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keywordtype">int</span>* repeat_flag,</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a>* toggle_bit_mask_statep)</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> {</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> pre_mask, code_mask, post_mask, toggle_bit_mask_state, all;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordtype">int</span> found_code, have_code;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <span class="keyword">struct </span><a class="code" href="structir__ncode.html">ir_ncode</a>* codes;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keyword">struct </span><a class="code" href="structir__ncode.html">ir_ncode</a>* found;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  pre_mask = code_mask = post_mask = 0;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">if</span> (has_toggle_bit_mask(remote)) {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  pre_mask = remote-><a class="code" href="structir__remote.html#ad1d35f0da36527d473c7d857231ec739">toggle_bit_mask</a> >></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  (remote-><a class="code" href="structir__remote.html#a66c874209817af89bc88503f61a76539">bits</a> + remote-><a class="code" href="structir__remote.html#a67432d0e91b257de5044ee47985cbb5b">post_data_bits</a>);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  post_mask = remote-><a class="code" href="structir__remote.html#ad1d35f0da36527d473c7d857231ec739">toggle_bit_mask</a> & gen_mask(</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  remote-><a class="code" href="structir__remote.html#a67432d0e91b257de5044ee47985cbb5b">post_data_bits</a>);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">if</span> (has_ignore_mask(remote)) {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  pre_mask |= remote-><a class="code" href="structir__remote.html#a739c26d88eb023d67353fa08dd076255">ignore_mask</a> >></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  (remote-><a class="code" href="structir__remote.html#a66c874209817af89bc88503f61a76539">bits</a> + remote-><a class="code" href="structir__remote.html#a67432d0e91b257de5044ee47985cbb5b">post_data_bits</a>);</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  post_mask |= remote-><a class="code" href="structir__remote.html#a739c26d88eb023d67353fa08dd076255">ignore_mask</a> & gen_mask(</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  remote-><a class="code" href="structir__remote.html#a67432d0e91b257de5044ee47985cbb5b">post_data_bits</a>);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">if</span> (has_toggle_mask(remote) && remote->toggle_mask_state % 2) {</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a>* affected;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> mask;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> mask_bit;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keywordtype">int</span> bit, current_bit;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  affected = &post;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  mask = remote-><a class="code" href="structir__remote.html#a9744aba55e393727c08815e548a9f836">toggle_mask</a>;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keywordflow">for</span> (bit = current_bit = 0; bit < bit_count(remote);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  bit++, current_bit++) {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">if</span> (bit == remote-><a class="code" href="structir__remote.html#a67432d0e91b257de5044ee47985cbb5b">post_data_bits</a>) {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  affected = &<a class="code" href="structir__ncode.html#a17ca9e939fd5742de3ed6e29bdc68e8d">code</a>;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  current_bit = 0;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="keywordflow">if</span> (bit == remote-><a class="code" href="structir__remote.html#a67432d0e91b257de5044ee47985cbb5b">post_data_bits</a> + remote-><a class="code" href="structir__remote.html#a66c874209817af89bc88503f61a76539">bits</a>) {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  affected = &pre;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  current_bit = 0;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  }</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  mask_bit = mask & 1;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  (*affected) ^= (mask_bit << current_bit);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  mask >>= 1;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="keywordflow">if</span> (has_pre(remote)) {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keywordflow">if</span> ((pre | pre_mask) != (remote-><a class="code" href="structir__remote.html#a54cf93d6a6ea5fa37c4b17ecad8b7b4b">pre_data</a> | pre_mask)) {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"bad pre data"</span>);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <a class="code" href="lirc__log_8h.html#aa28b268ea240f30ce6ae3bcd5492bd31">log_trace1</a>(<span class="stringliteral">"%llx %llx"</span>, pre, remote-><a class="code" href="structir__remote.html#a54cf93d6a6ea5fa37c4b17ecad8b7b4b">pre_data</a>);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"pre"</span>);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keywordflow">if</span> (has_post(remote)) {</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordflow">if</span> ((post | post_mask) != (remote-><a class="code" href="structir__remote.html#a96f9c35cff5a927c8fb76c5a8a240238">post_data</a> | post_mask)) {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"bad post data"</span>);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <a class="code" href="lirc__log_8h.html#aa28b268ea240f30ce6ae3bcd5492bd31">log_trace1</a>(<span class="stringliteral">"%llx %llx"</span>, post, remote-><a class="code" href="structir__remote.html#a96f9c35cff5a927c8fb76c5a8a240238">post_data</a>);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  }</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"post"</span>);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  }</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  all = gen_ir_code(remote, pre, <a class="code" href="structir__ncode.html#a17ca9e939fd5742de3ed6e29bdc68e8d">code</a>, post);</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">if</span> (*repeat_flag && has_repeat_mask(remote))</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  all ^= remote-><a class="code" href="structir__remote.html#a47f22b4a2e69b0d90ae6ad61960076b3">repeat_mask</a>;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> </div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  toggle_bit_mask_state = all & remote-><a class="code" href="structir__remote.html#ad1d35f0da36527d473c7d857231ec739">toggle_bit_mask</a>;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  found = NULL;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  found_code = 0;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  have_code = 0;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  codes = remote->codes;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">if</span> (codes != NULL) {</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">while</span> (codes-><a class="code" href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">name</a> != NULL) {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> next_all;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  next_all = gen_ir_code(remote,</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  remote-><a class="code" href="structir__remote.html#a54cf93d6a6ea5fa37c4b17ecad8b7b4b">pre_data</a>,</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  get_ir_code(codes,</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  codes-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a>),</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  remote-><a class="code" href="structir__remote.html#a96f9c35cff5a927c8fb76c5a8a240238">post_data</a>);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">if</span> (match_ir_code(remote, next_all, all) ||</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  (*repeat_flag &&</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  has_repeat_mask(remote) &&</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  match_ir_code(remote,</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  next_all,</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  all ^ remote-><a class="code" href="structir__remote.html#a47f22b4a2e69b0d90ae6ad61960076b3">repeat_mask</a>))) {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  found_code = 1;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keywordflow">if</span> (codes-><a class="code" href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">next</a> != NULL) {</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">if</span> (codes-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> == NULL)</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  codes-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> = codes-><a class="code" href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">next</a>;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  codes-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> =</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  codes-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a>->next;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">if</span> (!have_code) {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  found = codes;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">if</span> (codes-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> == NULL)</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  have_code = 1;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  find_longest_match(remote,</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  codes,</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  all,</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  &next_all,</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  have_code,</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  &found,</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  &found_code);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  codes++;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  }</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">if</span> (!found_code && dyncodes) {</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keywordflow">if</span> (remote-><a class="code" href="structir__remote.html#a250d88b2da87c39fc420714afc93c7f6">dyncodes</a>[remote-><a class="code" href="structir__remote.html#ae8172a416ed4f0481f61aaee32b3803c">dyncode</a>].<a class="code" href="structir__ncode.html#a17ca9e939fd5742de3ed6e29bdc68e8d">code</a> != <a class="code" href="structir__ncode.html#a17ca9e939fd5742de3ed6e29bdc68e8d">code</a>) {</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  remote-><a class="code" href="structir__remote.html#ae8172a416ed4f0481f61aaee32b3803c">dyncode</a>++;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  remote-><a class="code" href="structir__remote.html#ae8172a416ed4f0481f61aaee32b3803c">dyncode</a> %= 2;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  remote-><a class="code" href="structir__remote.html#a250d88b2da87c39fc420714afc93c7f6">dyncodes</a>[remote-><a class="code" href="structir__remote.html#ae8172a416ed4f0481f61aaee32b3803c">dyncode</a>].<a class="code" href="structir__ncode.html#a17ca9e939fd5742de3ed6e29bdc68e8d">code</a> = <a class="code" href="structir__ncode.html#a17ca9e939fd5742de3ed6e29bdc68e8d">code</a>;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  found = &(remote-><a class="code" href="structir__remote.html#a250d88b2da87c39fc420714afc93c7f6">dyncodes</a>[remote-><a class="code" href="structir__remote.html#ae8172a416ed4f0481f61aaee32b3803c">dyncode</a>]);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  found_code = 1;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keywordflow">if</span> (found_code && found != NULL && has_toggle_mask(remote)) {</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keywordflow">if</span> (!(remote->toggle_mask_state % 2)) {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  remote-><a class="code" href="structir__remote.html#ac80cecb60d0e4e77b01c3044df9d6713">toggle_code</a> = found;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"toggle_mask_start"</span>);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keywordflow">if</span> (found != remote-><a class="code" href="structir__remote.html#ac80cecb60d0e4e77b01c3044df9d6713">toggle_code</a>) {</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  remote-><a class="code" href="structir__remote.html#ac80cecb60d0e4e77b01c3044df9d6713">toggle_code</a> = NULL;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  }</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  remote-><a class="code" href="structir__remote.html#ac80cecb60d0e4e77b01c3044df9d6713">toggle_code</a> = NULL;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  }</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  *toggle_bit_mask_statep = toggle_bit_mask_state;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordflow">return</span> found;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> }</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> </div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> </div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="keyword">static</span> uint64_t set_code(<span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remote,</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <span class="keyword">struct</span> <a class="code" href="structir__ncode.html">ir_ncode</a>* found,</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> toggle_bit_mask_state,</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keyword">struct</span> <a class="code" href="structdecode__ctx__t.html">decode_ctx_t</a>* ctx)</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keyword">struct </span>timeval current;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a>* last_decoded = NULL;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"found: %s"</span>, found-><a class="code" href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">name</a>);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  gettimeofday(&current, NULL);</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"%lx %lx %lx %d %d %d %d %d %d %d"</span>,</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  remote, <a class="code" href="group__driver__api.html#ga474c489cabdaae4546ca0ac26ec9cd87">last_remote</a>, last_decoded,</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  remote == last_decoded,</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  found == remote-><a class="code" href="structir__remote.html#ac6557d868466bb5d2722b028bfe62d8c">last_code</a>, found-><a class="code" href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">next</a> != NULL,</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  found-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> != NULL, ctx-><a class="code" href="structdecode__ctx__t.html#a7c9bcadb5d59fb05fdad3a0cdd9b1106">repeat_flag</a>,</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  time_elapsed(&remote-><a class="code" href="structir__remote.html#a93a28c38d457232d6ab2310487b0f00e">last_send</a>,</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  &current) < 1000000,</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  (!has_toggle_bit_mask(remote)</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  ||</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  toggle_bit_mask_state ==</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  remote</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  ->toggle_bit_mask_state));</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">if</span> (remote-><a class="code" href="structir__remote.html#a783c26d5860269f673cb0b5506332560">release_detected</a>) {</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  remote-><a class="code" href="structir__remote.html#a783c26d5860269f673cb0b5506332560">release_detected</a> = 0;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (ctx-><a class="code" href="structdecode__ctx__t.html#a7c9bcadb5d59fb05fdad3a0cdd9b1106">repeat_flag</a>)</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="stringliteral">"repeat indicated although release was detected before"</span>);</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a7c9bcadb5d59fb05fdad3a0cdd9b1106">repeat_flag</a> = 0;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  }</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keywordflow">if</span> (remote == last_decoded &&</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  (found == remote-><a class="code" href="structir__remote.html#ac6557d868466bb5d2722b028bfe62d8c">last_code</a></div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  || (found-><a class="code" href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">next</a> != NULL && found-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> != NULL))</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  && ctx-><a class="code" href="structdecode__ctx__t.html#a7c9bcadb5d59fb05fdad3a0cdd9b1106">repeat_flag</a></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  && time_elapsed(&remote-><a class="code" href="structir__remote.html#a93a28c38d457232d6ab2310487b0f00e">last_send</a>, &current) < 1000000</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  && (!has_toggle_bit_mask(remote)</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  || toggle_bit_mask_state == remote->toggle_bit_mask_state)) {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <span class="keywordflow">if</span> (has_toggle_mask(remote)) {</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  remote->toggle_mask_state++;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordflow">if</span> (remote->toggle_mask_state == 4) {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  remote->reps++;</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  remote->toggle_mask_state = 2;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (found-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> == NULL) {</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  remote->reps++;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  }</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">if</span> (found-><a class="code" href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">next</a> != NULL && found-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> == NULL)</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  remote->reps = 1;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  remote->reps = 0;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">if</span> (has_toggle_mask(remote)) {</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  remote->toggle_mask_state = 1;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  remote-><a class="code" href="structir__remote.html#ac80cecb60d0e4e77b01c3044df9d6713">toggle_code</a> = found;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keywordflow">if</span> (has_toggle_bit_mask(remote))</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  remote->toggle_bit_mask_state = toggle_bit_mask_state;</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <a class="code" href="group__driver__api.html#ga474c489cabdaae4546ca0ac26ec9cd87">last_remote</a> = remote;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  last_decoded = remote;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordflow">if</span> (found-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> == NULL)</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  remote-><a class="code" href="structir__remote.html#ac6557d868466bb5d2722b028bfe62d8c">last_code</a> = found;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  remote-><a class="code" href="structir__remote.html#a93a28c38d457232d6ab2310487b0f00e">last_send</a> = current;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  remote-><a class="code" href="structir__remote.html#aec8b4e8638d32a3542671b91a344806f">min_remaining_gap</a> = ctx-><a class="code" href="structdecode__ctx__t.html#aa76a228985ce90fddd03399aceacadb5">min_remaining_gap</a>;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  remote-><a class="code" href="structir__remote.html#a2d289d49ef2ff113cbf52fd30e30fe5b">max_remaining_gap</a> = ctx-><a class="code" href="structdecode__ctx__t.html#ab7221813c357026846919c726cf43d73">max_remaining_gap</a>;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a> = 0;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">if</span> (has_pre(remote)) {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a> |= remote-><a class="code" href="structir__remote.html#a54cf93d6a6ea5fa37c4b17ecad8b7b4b">pre_data</a>;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a> = ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a> << remote-><a class="code" href="structir__remote.html#a66c874209817af89bc88503f61a76539">bits</a>;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  }</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a> |= found-><a class="code" href="structir__ncode.html#a17ca9e939fd5742de3ed6e29bdc68e8d">code</a>;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">if</span> (has_post(remote)) {</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a> = ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a> << remote-><a class="code" href="structir__remote.html#a67432d0e91b257de5044ee47985cbb5b">post_data_bits</a>;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a> |= remote-><a class="code" href="structir__remote.html#a96f9c35cff5a927c8fb76c5a8a240238">post_data</a>;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordflow">if</span> (remote-><a class="code" href="structir__remote.html#a9ac03eb6d4cee793010b00fe434aa985">flags</a> & <a class="code" href="ir__remote__types_8h.html#a4810ea9a08167df9744ad0d4ed381496">COMPAT_REVERSE</a>)</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="comment">/* actually this is wrong: pre, code and post should</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="comment"> * be rotated separately but we have to stay</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="comment"> * compatible with older software</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="comment"> */</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a> = reverse(ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a>, bit_count(remote));</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="keywordflow">return</span> ctx-><a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a>;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span> }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div><div class="line"><a name="l00713"></a><span class="lineno"><a class="line" href="group__driver__api.html#ga04461705747fd8521d369ee96ed762fe"> 713</a></span> <span class="keywordtype">int</span> <a class="code" href="group__driver__api.html#ga04461705747fd8521d369ee96ed762fe">write_message</a>(<span class="keywordtype">char</span>* buffer,</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <span class="keywordtype">size_t</span> size,</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  <span class="keyword">const</span> <span class="keywordtype">char</span>* remote_name,</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keyword">const</span> <span class="keywordtype">char</span>* button_name,</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="keyword">const</span> <span class="keywordtype">char</span>* button_suffix,</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> code,</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="keywordtype">int</span> reps)</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span> </div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span> {</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordtype">int</span> len;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  len = snprintf(buffer, size, <span class="stringliteral">"%016llx %02x %s%s %s\n"</span>,</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span>)code, reps, button_name,</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  button_suffix != NULL ? button_suffix : <span class="stringliteral">""</span>,</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  remote_name);</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span> </div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keywordflow">return</span> len;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span> }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span> </div><div class="line"><a name="l00733"></a><span class="lineno"><a class="line" href="group__driver__api.html#gae334c37e486ce414abf272d4850df6c4"> 733</a></span> <span class="keywordtype">char</span>* <a class="code" href="group__driver__api.html#gae334c37e486ce414abf272d4850df6c4">decode_all</a>(<span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remotes)</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span> {</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a>* remote;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keyword">static</span> <span class="keywordtype">char</span> message[<a class="code" href="lirc__config_8h.html#aebdc7d8ca8e25ed8efc90bb88ef7ef5b">PACKET_SIZE</a> + 1];</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keyword">struct </span><a class="code" href="structir__ncode.html">ir_ncode</a>* ncode;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <a class="code" href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a> toggle_bit_mask_state;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a>* scan;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keyword">struct </span><a class="code" href="structir__ncode.html">ir_ncode</a>* scan_ncode;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="keyword">struct </span><a class="code" href="structdecode__ctx__t.html">decode_ctx_t</a> ctx;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span> </div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="comment">/* use remotes carefully, it may be changed on SIGHUP */</span></div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  decoding = remote = remotes;</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keywordflow">while</span> (remote) {</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"trying \"%s\" remote"</span>, remote-><a class="code" href="structir__remote.html#acd104de70d9169542de9c471befb0045">name</a>);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">if</span> (<a class="code" href="driver_8c.html#a656110ac202d464ae49251c9599baf66">curr_driver</a>-><a class="code" href="structdriver.html#a4c8fb1671a48fb248bc8dafa90cded15">decode_func</a>(remote, &ctx)) {</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  ncode = get_code(remote,</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  ctx.<a class="code" href="structdecode__ctx__t.html#ae52561bab1b135eda87baf242a1092a6">pre</a>, ctx.<a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a>, ctx.<a class="code" href="structdecode__ctx__t.html#a81e997b57167363c5cc8db496a841165">post</a>,</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  &ctx.<a class="code" href="structdecode__ctx__t.html#a7c9bcadb5d59fb05fdad3a0cdd9b1106">repeat_flag</a>,</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  &toggle_bit_mask_state);</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keywordflow">if</span> (ncode) {</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordtype">int</span> len;</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="keywordtype">int</span> reps;</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span> </div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <span class="keywordflow">if</span> (ncode == &NCODE_EOF) {</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <a class="code" href="lirc__log_8h.html#a0e37223ab9f5df7af8cb2a59b7c4dc18">log_debug</a>(<span class="stringliteral">"decode all: returning EOF"</span>);</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  strncpy(message,</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  PACKET_EOF, <span class="keyword">sizeof</span>(message));</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">return</span> message;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  }</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  ctx.<a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a> = set_code(remote,</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  ncode,</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  toggle_bit_mask_state,</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  &ctx);</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="keywordflow">if</span> ((has_toggle_mask(remote)</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  && remote->toggle_mask_state % 2)</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  || ncode-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> != NULL) {</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  decoding = NULL;</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  }</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span> </div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="keywordflow">for</span> (scan = decoding;</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  scan != NULL;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  scan = scan->next)</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">for</span> (scan_ncode = scan->codes;</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  scan_ncode-><a class="code" href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">name</a> != NULL;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  scan_ncode++)</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  scan_ncode-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> = NULL;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <span class="keywordflow">if</span> (is_xmp(remote))</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  remote-><a class="code" href="structir__remote.html#ac6557d868466bb5d2722b028bfe62d8c">last_code</a>-><a class="code" href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">current</a> =</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  remote-><a class="code" href="structir__remote.html#ac6557d868466bb5d2722b028bfe62d8c">last_code</a>-><a class="code" href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">next</a>;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  reps = remote->reps - (ncode-><a class="code" href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">next</a> ? 1 : 0);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">if</span> (reps > 0) {</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <span class="keywordflow">if</span> (reps <= remote->suppress_repeat) {</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  decoding = NULL;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  }</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  reps -= remote-><a class="code" href="structir__remote.html#a075a47ed472f9e8a42b64d3837333bbd">suppress_repeat</a>;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <a class="code" href="release_8c.html#a3b06cf75f596a29a84d1137c05b62efe">register_button_press</a>(remote,</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  remote-><a class="code" href="structir__remote.html#ac6557d868466bb5d2722b028bfe62d8c">last_code</a>,</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  ctx.<a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a>,</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  reps);</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  len = <a class="code" href="group__driver__api.html#ga04461705747fd8521d369ee96ed762fe">write_message</a>(message, <a class="code" href="lirc__config_8h.html#aebdc7d8ca8e25ed8efc90bb88ef7ef5b">PACKET_SIZE</a> + 1,</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  remote-><a class="code" href="structir__remote.html#acd104de70d9169542de9c471befb0045">name</a>,</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  remote-><a class="code" href="structir__remote.html#ac6557d868466bb5d2722b028bfe62d8c">last_code</a>-><a class="code" href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">name</a>,</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="stringliteral">""</span>,</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  ctx.<a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a>,</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  reps);</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  decoding = NULL;</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordflow">if</span> (len >= <a class="code" href="lirc__config_8h.html#aebdc7d8ca8e25ed8efc90bb88ef7ef5b">PACKET_SIZE</a> + 1) {</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <a class="code" href="lirc__log_8h.html#a887f83dbb884a13949e4f2ad710e5ddf">log_error</a>(<span class="stringliteral">"message buffer overflow"</span>);</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordflow">return</span> message;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  }</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"failed \"%s\" remote"</span>,</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  remote-><a class="code" href="structir__remote.html#acd104de70d9169542de9c471befb0045">name</a>);</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  }</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  }</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  remote->toggle_mask_state = 0;</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  remote = remote->next;</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  }</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  decoding = NULL;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <a class="code" href="group__driver__api.html#ga474c489cabdaae4546ca0ac26ec9cd87">last_remote</a> = NULL;</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <a class="code" href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a>(<span class="stringliteral">"decoding failed for all remotes"</span>);</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span> }</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span> </div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span> </div><div class="line"><a name="l00823"></a><span class="lineno"><a class="line" href="group__driver__api.html#ga51d2eb6ccf92c9210c69cd727b712bae"> 823</a></span> <span class="keywordtype">int</span> <a class="code" href="group__driver__api.html#ga51d2eb6ccf92c9210c69cd727b712bae">send_ir_ncode</a>(<span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>* remote, <span class="keyword">struct</span> <a class="code" href="structir__ncode.html">ir_ncode</a>* <a class="code" href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">code</a>, <span class="keywordtype">int</span> delay)</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span> {</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="keywordtype">int</span> ret;</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span> </div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="keywordflow">if</span> (delay) {</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="comment">/* insert pause when needed: */</span></div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <span class="keywordflow">if</span> (remote-><a class="code" href="structir__remote.html#ac6557d868466bb5d2722b028bfe62d8c">last_code</a> != NULL) {</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="keyword">struct </span>timeval current;</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> usecs;</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span> </div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  gettimeofday(&current, NULL);</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  usecs = time_left(&current,</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  &remote-><a class="code" href="structir__remote.html#a93a28c38d457232d6ab2310487b0f00e">last_send</a>,</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  remote-><a class="code" href="structir__remote.html#aec8b4e8638d32a3542671b91a344806f">min_remaining_gap</a> * 2);</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="keywordflow">if</span> (usecs > 0) {</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">if</span> (<a class="code" href="group__driver__api.html#ga7bc28a85da7d0ccf4466708918f01dc4">repeat_remote</a> == NULL || remote !=</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <a class="code" href="group__driver__api.html#ga7bc28a85da7d0ccf4466708918f01dc4">repeat_remote</a></div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  || remote-><a class="code" href="structir__remote.html#ac6557d868466bb5d2722b028bfe62d8c">last_code</a> != code)</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  usleep(usecs);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  }</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  }</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  }</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  ret = <a class="code" href="driver_8c.html#a656110ac202d464ae49251c9599baf66">curr_driver</a>-><a class="code" href="structdriver.html#a90d38db70255ee7d38bcd81c9edd9412">send_func</a>(remote, code);</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span> </div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keywordflow">if</span> (ret) {</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  gettimeofday(&remote-><a class="code" href="structir__remote.html#a93a28c38d457232d6ab2310487b0f00e">last_send</a>, NULL);</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  remote-><a class="code" href="structir__remote.html#ac6557d868466bb5d2722b028bfe62d8c">last_code</a> = code;</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  }</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span> }</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span> </div><div class="line"><a name="l00854"></a><span class="lineno"><a class="line" href="group__driver__api.html#gaf2e0b982088d231116dea399afa8597f"> 854</a></span> <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structir__remote.html">ir_remote</a>* <a class="code" href="group__driver__api.html#gaf2e0b982088d231116dea399afa8597f">get_decoding</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span> {</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structir__remote.html">ir_remote</a>*)&decoding;</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span> }</div><div class="ttc" id="structir__remote_html_aec8b4e8638d32a3542671b91a344806f"><div class="ttname"><a href="structir__remote.html#aec8b4e8638d32a3542671b91a344806f">ir_remote::min_remaining_gap</a></div><div class="ttdeci">lirc_t min_remaining_gap</div><div class="ttdoc">remember gap for CONST_LENGTH remotes</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00232">ir_remote_types.h:232</a></div></div> <div class="ttc" id="group__driver__api_html_ga474c489cabdaae4546ca0ac26ec9cd87"><div class="ttname"><a href="group__driver__api.html#ga474c489cabdaae4546ca0ac26ec9cd87">last_remote</a></div><div class="ttdeci">struct ir_remote * last_remote</div><div class="ttdoc">TODO.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00059">ir_remote.c:59</a></div></div> <div class="ttc" id="group__driver__api_html_ga2da0e0383db556d0e1ba7261763815c5"><div class="ttname"><a href="group__driver__api.html#ga2da0e0383db556d0e1ba7261763815c5">repeat_code</a></div><div class="ttdeci">struct ir_ncode * repeat_code</div><div class="ttdoc">Global pointer to the code currently repeating.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00063">ir_remote.c:63</a></div></div> <div class="ttc" id="structir__remote_html"><div class="ttname"><a href="structir__remote.html">ir_remote</a></div><div class="ttdoc">One remote as represented in the configuration file.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00155">ir_remote_types.h:155</a></div></div> <div class="ttc" id="structir__remote_html_a66c874209817af89bc88503f61a76539"><div class="ttname"><a href="structir__remote.html#a66c874209817af89bc88503f61a76539">ir_remote::bits</a></div><div class="ttdeci">int bits</div><div class="ttdoc">bits (length of code)</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00159">ir_remote_types.h:159</a></div></div> <div class="ttc" id="structir__code__node_html"><div class="ttname"><a href="structir__code__node.html">ir_code_node</a></div><div class="ttdoc">An ir_code for entering into (singly) linked lists, i.e.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00053">ir_remote_types.h:53</a></div></div> <div class="ttc" id="structir__remote_html_a04eb04a7c2333f53ceb20ffef8d2ebc4"><div class="ttname"><a href="structir__remote.html#a04eb04a7c2333f53ceb20ffef8d2ebc4">ir_remote::freq</a></div><div class="ttdeci">unsigned int freq</div><div class="ttdoc">modulation frequency</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00208">ir_remote_types.h:208</a></div></div> <div class="ttc" id="structir__remote_html_ae78acfc685ff2bc9559d45f1e4b702bb"><div class="ttname"><a href="structir__remote.html#ae78acfc685ff2bc9559d45f1e4b702bb">ir_remote::max_gap_length</a></div><div class="ttdeci">lirc_t max_gap_length</div><div class="ttdoc">how long is the longest gap</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00238">ir_remote_types.h:238</a></div></div> <div class="ttc" id="group__driver__api_html_ga8d5bc121b8582a690000bc8befe13080"><div class="ttname"><a href="group__driver__api.html#ga8d5bc121b8582a690000bc8befe13080">ir_remote_init</a></div><div class="ttdeci">void ir_remote_init(int use_dyncodes)</div><div class="ttdoc">Initiate: define if dynamic codes should be used.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00124">ir_remote.c:124</a></div></div> <div class="ttc" id="driver_8c_html_a656110ac202d464ae49251c9599baf66"><div class="ttname"><a href="driver_8c.html#a656110ac202d464ae49251c9599baf66">curr_driver</a></div><div class="ttdeci">const struct driver *const curr_driver</div><div class="ttdoc">Read-only access to drv for client code.</div><div class="ttdef"><b>Definition:</b> <a href="driver_8c_source.html#l00034">driver.c:34</a></div></div> <div class="ttc" id="structir__remote_html_a96f9c35cff5a927c8fb76c5a8a240238"><div class="ttname"><a href="structir__remote.html#a96f9c35cff5a927c8fb76c5a8a240238">ir_remote::post_data</a></div><div class="ttdeci">ir_code post_data</div><div class="ttdoc">data which the remote sends after actual keycode</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00187">ir_remote_types.h:187</a></div></div> <div class="ttc" id="structir__remote_html_a47f22b4a2e69b0d90ae6ad61960076b3"><div class="ttname"><a href="structir__remote.html#a47f22b4a2e69b0d90ae6ad61960076b3">ir_remote::repeat_mask</a></div><div class="ttdeci">ir_code repeat_mask</div><div class="ttdoc">mask defines which bits are inverted for repeats</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00222">ir_remote_types.h:222</a></div></div> <div class="ttc" id="structir__remote_html_ac80cecb60d0e4e77b01c3044df9d6713"><div class="ttname"><a href="structir__remote.html#ac80cecb60d0e4e77b01c3044df9d6713">ir_remote::toggle_code</a></div><div class="ttdeci">struct ir_ncode * toggle_code</div><div class="ttdoc">toggle code received or sent last</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00229">ir_remote_types.h:229</a></div></div> <div class="ttc" id="group__driver__api_html_ga1a1b6c86d0309f25ab5806a5f861692c"><div class="ttname"><a href="group__driver__api.html#ga1a1b6c86d0309f25ab5806a5f861692c">get_filter_parameters</a></div><div class="ttdeci">void get_filter_parameters(const struct ir_remote *remotes, lirc_t *max_gap_lengthp, lirc_t *min_pulse_lengthp, lirc_t *min_space_lengthp, lirc_t *max_pulse_lengthp, lirc_t *max_space_lengthp)</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00193">ir_remote.c:193</a></div></div> <div class="ttc" id="lirc__log_8h_html_a0e37223ab9f5df7af8cb2a59b7c4dc18"><div class="ttname"><a href="lirc__log_8h.html#a0e37223ab9f5df7af8cb2a59b7c4dc18">log_debug</a></div><div class="ttdeci">#define log_debug(fmt,...)</div><div class="ttdoc">Log a debug message.</div><div class="ttdef"><b>Definition:</b> <a href="lirc__log_8h_source.html#l00124">lirc_log.h:124</a></div></div> <div class="ttc" id="structdriver_html_a4c8fb1671a48fb248bc8dafa90cded15"><div class="ttname"><a href="structdriver.html#a4c8fb1671a48fb248bc8dafa90cded15">driver::decode_func</a></div><div class="ttdeci">int(*const decode_func)(struct ir_remote *remote, struct decode_ctx_t *ctx)</div><div class="ttdoc">TODO.</div><div class="ttdef"><b>Definition:</b> <a href="driver_8h_source.html#l00206">driver.h:206</a></div></div> <div class="ttc" id="structir__ncode_html_a0e80278912121f630d3b398959c4dad7"><div class="ttname"><a href="structir__ncode.html#a0e80278912121f630d3b398959c4dad7">ir_ncode::next</a></div><div class="ttdeci">struct ir_code_node * next</div><div class="ttdoc">Linked list of the subsequent ir_code's, after the first one.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00079">ir_remote_types.h:79</a></div></div> <div class="ttc" id="structir__remote_html_acd104de70d9169542de9c471befb0045"><div class="ttname"><a href="structir__remote.html#acd104de70d9169542de9c471befb0045">ir_remote::name</a></div><div class="ttdeci">const char * name</div><div class="ttdoc">name of remote control</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00156">ir_remote_types.h:156</a></div></div> <div class="ttc" id="structir__ncode_html_a6ff318262c9447b1e1fc4e944e29bf4a"><div class="ttname"><a href="structir__ncode.html#a6ff318262c9447b1e1fc4e944e29bf4a">ir_ncode::signals</a></div><div class="ttdeci">lirc_t * signals</div><div class="ttdoc">(private)</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00075">ir_remote_types.h:75</a></div></div> <div class="ttc" id="group__driver__api_html_gafaa7cb5587a3c58e3e825411b966738a"><div class="ttname"><a href="group__driver__api.html#gafaa7cb5587a3c58e3e825411b966738a">get_code_by_name</a></div><div class="ttdeci">struct ir_ncode * get_code_by_name(const struct ir_remote *remote, const char *name)</div><div class="ttdoc">Return code with given name in remote's list of codes or NULL.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00397">ir_remote.c:397</a></div></div> <div class="ttc" id="ir__remote__types_8h_html_a4810ea9a08167df9744ad0d4ed381496"><div class="ttname"><a href="ir__remote__types_8h.html#a4810ea9a08167df9744ad0d4ed381496">COMPAT_REVERSE</a></div><div class="ttdeci">#define COMPAT_REVERSE</div><div class="ttdoc">compatibility mode for REVERSE flag</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00128">ir_remote_types.h:128</a></div></div> <div class="ttc" id="structir__remote_html_ac6557d868466bb5d2722b028bfe62d8c"><div class="ttname"><a href="structir__remote.html#ac6557d868466bb5d2722b028bfe62d8c">ir_remote::last_code</a></div><div class="ttdeci">struct ir_ncode * last_code</div><div class="ttdoc">code received or sent last</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00228">ir_remote_types.h:228</a></div></div> <div class="ttc" id="group__driver__api_html_ga251129673cd73c5f869bb53c6c38a88f"><div class="ttname"><a href="group__driver__api.html#ga251129673cd73c5f869bb53c6c38a88f">get_ir_remote</a></div><div class="ttdeci">struct ir_remote * get_ir_remote(const struct ir_remote *remotes, const char *name)</div><div class="ttdoc">Return ir_remote with given name in remotes list, or NULL if not found.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00251">ir_remote.c:251</a></div></div> <div class="ttc" id="structdecode__ctx__t_html_ae52561bab1b135eda87baf242a1092a6"><div class="ttname"><a href="structdecode__ctx__t.html#ae52561bab1b135eda87baf242a1092a6">decode_ctx_t::pre</a></div><div class="ttdeci">ir_code pre</div><div class="ttdoc">pre data, before code.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00144">ir_remote_types.h:144</a></div></div> <div class="ttc" id="lirc__config_8h_html_a510ecf0088b450b9aee39c8260fdb296"><div class="ttname"><a href="lirc__config_8h.html#a510ecf0088b450b9aee39c8260fdb296">LIRC_EOF</a></div><div class="ttdeci">#define LIRC_EOF</div><div class="ttdoc">Bit manipulator in lirc_t, see lirc.h .</div><div class="ttdef"><b>Definition:</b> <a href="lirc__config_8h_source.html#l00090">lirc_config.h:90</a></div></div> <div class="ttc" id="group__driver__api_html_gabac8048f405d0a78fcc01fa9ef1132df"><div class="ttname"><a href="group__driver__api.html#gabac8048f405d0a78fcc01fa9ef1132df">map_code</a></div><div class="ttdeci">int map_code(const struct ir_remote *remote, struct decode_ctx_t *ctx, int pre_bits, ir_code pre, int bits, ir_code code, int post_bits, ir_code post)</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00283">ir_remote.c:283</a></div></div> <div class="ttc" id="group__driver__api_html_gae334c37e486ce414abf272d4850df6c4"><div class="ttname"><a href="group__driver__api.html#gae334c37e486ce414abf272d4850df6c4">decode_all</a></div><div class="ttdeci">char * decode_all(struct ir_remote *remotes)</div><div class="ttdoc">Tries to decode current signal trying all known remotes.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00733">ir_remote.c:733</a></div></div> <div class="ttc" id="structir__remote_html_ae5bfde45bb74a00d7ec53023f2fa6252"><div class="ttname"><a href="structir__remote.html#ae5bfde45bb74a00d7ec53023f2fa6252">ir_remote::pre_data_bits</a></div><div class="ttdeci">int pre_data_bits</div><div class="ttdoc">length of pre_data</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00184">ir_remote_types.h:184</a></div></div> <div class="ttc" id="structdriver_html_a90d38db70255ee7d38bcd81c9edd9412"><div class="ttname"><a href="structdriver.html#a90d38db70255ee7d38bcd81c9edd9412">driver::send_func</a></div><div class="ttdeci">int(*const send_func)(struct ir_remote *remote, struct ir_ncode *code)</div><div class="ttdoc">Send data to the remote.</div><div class="ttdef"><b>Definition:</b> <a href="driver_8h_source.html#l00192">driver.h:192</a></div></div> <div class="ttc" id="lirc__config_8h_html_aebdc7d8ca8e25ed8efc90bb88ef7ef5b"><div class="ttname"><a href="lirc__config_8h.html#aebdc7d8ca8e25ed8efc90bb88ef7ef5b">PACKET_SIZE</a></div><div class="ttdeci">#define PACKET_SIZE</div><div class="ttdoc">IR transmission packet size.</div><div class="ttdef"><b>Definition:</b> <a href="lirc__config_8h_source.html#l00084">lirc_config.h:84</a></div></div> <div class="ttc" id="lirc__log_8h_html_abffd9aa4ab9bcfacdbb9d7728037114b"><div class="ttname"><a href="lirc__log_8h.html#abffd9aa4ab9bcfacdbb9d7728037114b">logchannel_t</a></div><div class="ttdeci">logchannel_t</div><div class="ttdoc">Log channels used to filter messages.</div><div class="ttdef"><b>Definition:</b> <a href="lirc__log_8h_source.html#l00053">lirc_log.h:53</a></div></div> <div class="ttc" id="structir__ncode_html_ac28e8133cbc7aa22dbbc8ef722883d2b"><div class="ttname"><a href="structir__ncode.html#ac28e8133cbc7aa22dbbc8ef722883d2b">ir_ncode::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Name of command.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00066">ir_remote_types.h:66</a></div></div> <div class="ttc" id="structir__remote_html_a93a28c38d457232d6ab2310487b0f00e"><div class="ttname"><a href="structir__remote.html#a93a28c38d457232d6ab2310487b0f00e">ir_remote::last_send</a></div><div class="ttdeci">struct timeval last_send</div><div class="ttdoc">time last_code was received or sent</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00231">ir_remote_types.h:231</a></div></div> <div class="ttc" id="structir__ncode_html_a849807a18ac00c5d4228c2ebf5eb6519"><div class="ttname"><a href="structir__ncode.html#a849807a18ac00c5d4228c2ebf5eb6519">ir_ncode::current</a></div><div class="ttdeci">struct ir_code_node * current</div><div class="ttdoc">Should point at the ir_code currently being transmitted, or NULL if none.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00083">ir_remote_types.h:83</a></div></div> <div class="ttc" id="structir__remote_html_a67432d0e91b257de5044ee47985cbb5b"><div class="ttname"><a href="structir__remote.html#a67432d0e91b257de5044ee47985cbb5b">ir_remote::post_data_bits</a></div><div class="ttdeci">int post_data_bits</div><div class="ttdoc">length of post_data</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00186">ir_remote_types.h:186</a></div></div> <div class="ttc" id="structir__remote_html_a9744aba55e393727c08815e548a9f836"><div class="ttname"><a href="structir__remote.html#a9744aba55e393727c08815e548a9f836">ir_remote::toggle_mask</a></div><div class="ttdeci">ir_code toggle_mask</div><div class="ttdoc">Sharp (?) error detection scheme.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00210">ir_remote_types.h:210</a></div></div> <div class="ttc" id="lirc__log_8h_html_a887f83dbb884a13949e4f2ad710e5ddf"><div class="ttname"><a href="lirc__log_8h.html#a887f83dbb884a13949e4f2ad710e5ddf">log_error</a></div><div class="ttdeci">#define log_error(fmt,...)</div><div class="ttdoc">Log an error message.</div><div class="ttdef"><b>Definition:</b> <a href="lirc__log_8h_source.html#l00104">lirc_log.h:104</a></div></div> <div class="ttc" id="lirc__log_8h_html_aa28b268ea240f30ce6ae3bcd5492bd31"><div class="ttname"><a href="lirc__log_8h.html#aa28b268ea240f30ce6ae3bcd5492bd31">log_trace1</a></div><div class="ttdeci">#define log_trace1(fmt,...)</div><div class="ttdoc">Log a trace1 message.</div><div class="ttdef"><b>Definition:</b> <a href="lirc__log_8h_source.html#l00134">lirc_log.h:134</a></div></div> <div class="ttc" id="structir__remote_html_a54cf93d6a6ea5fa37c4b17ecad8b7b4b"><div class="ttname"><a href="structir__remote.html#a54cf93d6a6ea5fa37c4b17ecad8b7b4b">ir_remote::pre_data</a></div><div class="ttdeci">ir_code pre_data</div><div class="ttdoc">data which the remote sends before actual keycode</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00185">ir_remote_types.h:185</a></div></div> <div class="ttc" id="structdecode__ctx__t_html_a81e997b57167363c5cc8db496a841165"><div class="ttname"><a href="structdecode__ctx__t.html#a81e997b57167363c5cc8db496a841165">decode_ctx_t::post</a></div><div class="ttdeci">ir_code post</div><div class="ttdoc">post data, sent after code.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00145">ir_remote_types.h:145</a></div></div> <div class="ttc" id="release_8c_html_a3b06cf75f596a29a84d1137c05b62efe"><div class="ttname"><a href="release_8c.html#a3b06cf75f596a29a84d1137c05b62efe">register_button_press</a></div><div class="ttdeci">void register_button_press(struct ir_remote *remote, struct ir_ncode *ncode, ir_code code, int reps)</div><div class="ttdoc">Set up pending release events for given button, including the release_gap.</div><div class="ttdef"><b>Definition:</b> <a href="release_8c_source.html#l00064">release.c:64</a></div></div> <div class="ttc" id="group__driver__api_html_ga04461705747fd8521d369ee96ed762fe"><div class="ttname"><a href="group__driver__api.html#ga04461705747fd8521d369ee96ed762fe">write_message</a></div><div class="ttdeci">int write_message(char *buffer, size_t size, const char *remote_name, const char *button_name, const char *button_suffix, ir_code code, int reps)</div><div class="ttdoc">Formats the arguments into a readable string.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00713">ir_remote.c:713</a></div></div> <div class="ttc" id="structir__remote_html_abde525f609dea108baab4b690c2b94e4"><div class="ttname"><a href="structir__remote.html#abde525f609dea108baab4b690c2b94e4">ir_remote::gap</a></div><div class="ttdeci">uint32_t gap</div><div class="ttdoc">time between signals in usecs</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00191">ir_remote_types.h:191</a></div></div> <div class="ttc" id="lirc__log_8h_html_a056b9e71b3a2e575f88c564ff3670877"><div class="ttname"><a href="lirc__log_8h.html#a056b9e71b3a2e575f88c564ff3670877">log_trace</a></div><div class="ttdeci">#define log_trace(fmt,...)</div><div class="ttdoc">Log a trace message.</div><div class="ttdef"><b>Definition:</b> <a href="lirc__log_8h_source.html#l00129">lirc_log.h:129</a></div></div> <div class="ttc" id="group__driver__api_html_gaadf09b8ef4b71be00f8e53a39f70d315"><div class="ttname"><a href="group__driver__api.html#gaadf09b8ef4b71be00f8e53a39f70d315">is_in_remotes</a></div><div class="ttdeci">const struct ir_remote * is_in_remotes(const struct ir_remote *remotes, const struct ir_remote *remote)</div><div class="ttdoc">Test if a given remote is in a list of remotes.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00239">ir_remote.c:239</a></div></div> <div class="ttc" id="structdecode__ctx__t_html_ab7221813c357026846919c726cf43d73"><div class="ttname"><a href="structdecode__ctx__t.html#ab7221813c357026846919c726cf43d73">decode_ctx_t::max_remaining_gap</a></div><div class="ttdeci">lirc_t max_remaining_gap</div><div class="ttdoc">Estimated max time of trailing gap.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00147">ir_remote_types.h:147</a></div></div> <div class="ttc" id="structdecode__ctx__t_html_a1a206e5968a38e6e5286be41c037c30c"><div class="ttname"><a href="structdecode__ctx__t.html#a1a206e5968a38e6e5286be41c037c30c">decode_ctx_t::code</a></div><div class="ttdeci">ir_code code</div><div class="ttdoc">Code part, matched to code defintion.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00143">ir_remote_types.h:143</a></div></div> <div class="ttc" id="group__driver__api_html_gaf2e0b982088d231116dea399afa8597f"><div class="ttname"><a href="group__driver__api.html#gaf2e0b982088d231116dea399afa8597f">get_decoding</a></div><div class="ttdeci">const struct ir_remote * get_decoding(void)</div><div class="ttdoc">Return pointer to currently decoded remote.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00854">ir_remote.c:854</a></div></div> <div class="ttc" id="structir__remote_html_ae8172a416ed4f0481f61aaee32b3803c"><div class="ttname"><a href="structir__remote.html#ae8172a416ed4f0481f61aaee32b3803c">ir_remote::dyncode</a></div><div class="ttdeci">int dyncode</div><div class="ttdoc">last received code</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00169">ir_remote_types.h:169</a></div></div> <div class="ttc" id="group__driver__api_html_ga4477860d1f604548e032694de8f69c16"><div class="ttname"><a href="group__driver__api.html#ga4477860d1f604548e032694de8f69c16">ncode_free</a></div><div class="ttdeci">void ncode_free(struct ir_ncode *ncode)</div><div class="ttdoc">Dispose an ir_ncode instance obtained from ncode_dup().</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00104">ir_remote.c:104</a></div></div> <div class="ttc" id="structir__ncode_html"><div class="ttname"><a href="structir__ncode.html">ir_ncode</a></div><div class="ttdoc">IR Command, corresponding to one (command defining) line of the configuration file.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00064">ir_remote_types.h:64</a></div></div> <div class="ttc" id="structir__remote_html_a9ac03eb6d4cee793010b00fe434aa985"><div class="ttname"><a href="structir__remote.html#a9ac03eb6d4cee793010b00fe434aa985">ir_remote::flags</a></div><div class="ttdeci">int flags</div><div class="ttdoc">flags</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00160">ir_remote_types.h:160</a></div></div> <div class="ttc" id="structdecode__ctx__t_html"><div class="ttname"><a href="structdecode__ctx__t.html">decode_ctx_t</a></div><div class="ttdoc">State describing code, pre, post + gap and repeat state.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00142">ir_remote_types.h:142</a></div></div> <div class="ttc" id="group__driver__api_html_gac691a06cc99d8c914e2c7451407f245a"><div class="ttname"><a href="group__driver__api.html#gac691a06cc99d8c914e2c7451407f245a">map_gap</a></div><div class="ttdeci">void map_gap(const struct ir_remote *remote, struct decode_ctx_t *ctx, const struct timeval *start, const struct timeval *last, lirc_t signal_length)</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00329">ir_remote.c:329</a></div></div> <div class="ttc" id="structir__remote_html_a783c26d5860269f673cb0b5506332560"><div class="ttname"><a href="structir__remote.html#a783c26d5860269f673cb0b5506332560">ir_remote::release_detected</a></div><div class="ttdeci">int release_detected</div><div class="ttdoc">set by release generator</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00241">ir_remote_types.h:241</a></div></div> <div class="ttc" id="structdecode__ctx__t_html_aa76a228985ce90fddd03399aceacadb5"><div class="ttname"><a href="structdecode__ctx__t.html#aa76a228985ce90fddd03399aceacadb5">decode_ctx_t::min_remaining_gap</a></div><div class="ttdeci">lirc_t min_remaining_gap</div><div class="ttdoc">Estimated min time of trailing gap.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00148">ir_remote_types.h:148</a></div></div> <div class="ttc" id="group__driver__api_html_gac288bce2140d2066a3990a1b2e3317c5"><div class="ttname"><a href="group__driver__api.html#gac288bce2140d2066a3990a1b2e3317c5">ncode_dup</a></div><div class="ttdeci">struct ir_ncode * ncode_dup(struct ir_ncode *ncode)</div><div class="ttdoc">Create a malloc'd, deep copy of ncode.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00069">ir_remote.c:69</a></div></div> <div class="ttc" id="structir__remote_html_a2d289d49ef2ff113cbf52fd30e30fe5b"><div class="ttname"><a href="structir__remote.html#a2d289d49ef2ff113cbf52fd30e30fe5b">ir_remote::max_remaining_gap</a></div><div class="ttdeci">lirc_t max_remaining_gap</div><div class="ttdoc">gap range</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00233">ir_remote_types.h:233</a></div></div> <div class="ttc" id="group__driver__api_html_ga19bab2135ca2b7f68dc0b2f8cde9863f"><div class="ttname"><a href="group__driver__api.html#ga19bab2135ca2b7f68dc0b2f8cde9863f">get_frequency_range</a></div><div class="ttdeci">void get_frequency_range(const struct ir_remote *remotes, unsigned int *min_freq, unsigned int *max_freq)</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00156">ir_remote.c:156</a></div></div> <div class="ttc" id="structir__remote_html_a075a47ed472f9e8a42b64d3837333bbd"><div class="ttname"><a href="structir__remote.html#a075a47ed472f9e8a42b64d3837333bbd">ir_remote::suppress_repeat</a></div><div class="ttdeci">int suppress_repeat</div><div class="ttdoc">suppress unwanted repeats</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00196">ir_remote_types.h:196</a></div></div> <div class="ttc" id="structir__ncode_html_a17ca9e939fd5742de3ed6e29bdc68e8d"><div class="ttname"><a href="structir__ncode.html#a17ca9e939fd5742de3ed6e29bdc68e8d">ir_ncode::code</a></div><div class="ttdeci">ir_code code</div><div class="ttdoc">The first code of the command.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00069">ir_remote_types.h:69</a></div></div> <div class="ttc" id="structir__remote_html_a250d88b2da87c39fc420714afc93c7f6"><div class="ttname"><a href="structir__remote.html#a250d88b2da87c39fc420714afc93c7f6">ir_remote::dyncodes</a></div><div class="ttdeci">struct ir_ncode dyncodes[2]</div><div class="ttdoc">helper structs for unknown buttons</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00170">ir_remote_types.h:170</a></div></div> <div class="ttc" id="structdecode__ctx__t_html_a7c9bcadb5d59fb05fdad3a0cdd9b1106"><div class="ttname"><a href="structdecode__ctx__t.html#a7c9bcadb5d59fb05fdad3a0cdd9b1106">decode_ctx_t::repeat_flag</a></div><div class="ttdeci">int repeat_flag</div><div class="ttdoc">True if code is a repeated one.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00146">ir_remote_types.h:146</a></div></div> <div class="ttc" id="group__driver__api_html_ga7bc28a85da7d0ccf4466708918f01dc4"><div class="ttname"><a href="group__driver__api.html#ga7bc28a85da7d0ccf4466708918f01dc4">repeat_remote</a></div><div class="ttdeci">struct ir_remote * repeat_remote</div><div class="ttdoc">Global pointer to the remote that contains the code currently repeating.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00061">ir_remote.c:61</a></div></div> <div class="ttc" id="structir__remote_html_ad1d35f0da36527d473c7d857231ec739"><div class="ttname"><a href="structir__remote.html#ad1d35f0da36527d473c7d857231ec739">ir_remote::toggle_bit_mask</a></div><div class="ttdeci">ir_code toggle_bit_mask</div><div class="ttdoc">previously only one bit called toggle_bit</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00195">ir_remote_types.h:195</a></div></div> <div class="ttc" id="group__driver__api_html_ga51d2eb6ccf92c9210c69cd727b712bae"><div class="ttname"><a href="group__driver__api.html#ga51d2eb6ccf92c9210c69cd727b712bae">send_ir_ncode</a></div><div class="ttdeci">int send_ir_ncode(struct ir_remote *remote, struct ir_ncode *code, int delay)</div><div class="ttdoc">Transmits the actual code in the second argument by calling the current hardware driver.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote_8c_source.html#l00823">ir_remote.c:823</a></div></div> <div class="ttc" id="structir__remote_html_a739c26d88eb023d67353fa08dd076255"><div class="ttname"><a href="structir__remote.html#a739c26d88eb023d67353fa08dd076255">ir_remote::ignore_mask</a></div><div class="ttdeci">ir_code ignore_mask</div><div class="ttdoc">mask defines which bits can be ignored when matching a code</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00221">ir_remote_types.h:221</a></div></div> <div class="ttc" id="ir__remote__types_8h_html_a4607c3797b0d3ac909185d2844030624"><div class="ttname"><a href="ir__remote__types_8h.html#a4607c3797b0d3ac909185d2844030624">ir_code</a></div><div class="ttdeci">uint64_t ir_code</div><div class="ttdoc">Denotes an internal coded representation for an IR transmission.</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00047">ir_remote_types.h:47</a></div></div> <div class="ttc" id="structir__ncode_html_a46824261611491c5ff0b611cda1ec437"><div class="ttname"><a href="structir__ncode.html#a46824261611491c5ff0b611cda1ec437">ir_ncode::length</a></div><div class="ttdeci">int length</div><div class="ttdoc">(private)</div><div class="ttdef"><b>Definition:</b> <a href="ir__remote__types_8h_source.html#l00072">ir_remote_types.h:72</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_97aefd0d527b934f1d99a682da8fe6a9.html">lib</a></li><li class="navelem"><a class="el" href="ir__remote_8c.html">ir_remote.c</a></li> <li class="footer">Generated by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li> </ul> </div> </body> </html>