Sophie

Sophie

distrib > Mageia > 7 > i586 > by-pkgid > 2bcfde21a73ffa0573b5ca7b311a2f76 > files > 51

bladerf-doc-2018.12-0.rc3.1.mga7.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>libbladeRF: Triggers and synchronization</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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { init_search(); });
</script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</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="logo.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">libbladeRF
   &#160;<span id="projectnumber">1.7.2</span>
   </div>
   <div id="projectbrief">Nuand bladeRF library</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li class="current"><a href="modules.html"><span>API&#160;Sections</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
</div><!-- top -->
<!-- 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="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">Triggers and synchronization</div>  </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Description</h2>
<p>Trigger functionality introduced in bladeRF FPGA v0.6.0 allows TX and/or RX samples to be gated via a trigger signal. This allows multiple devices to synchronize their TX/RX operations upon the reception of a trigger event.</p>
<p>The set of functions presented in this section of the API provides control over this triggering functionality. It is intended that these functions be used <b>prior</b> to starting sample streams. Attempting to use these functions while streaming may yield undefined and undesirable behavior. These functions are thread-safe.</p>
<p>For devices running at the same sample rate, the trigger event should achieve synchronization within +/- 1 sample on each device in the chain.</p>
<p>As of FPGA v0.6.0, J71 pin 4 (mini_exp_1) has been allocated as the trigger signal. However, this API section is designed to allow future signals to be added, including users' software and hardware customizations.</p>
<dl class="section note"><dt>Note</dt><dd><b>Important</b>: Ensure that you disarm triggers <b>before</b> stopping sample streams (i.e., calling <a class="el" href="group___f_n___m_o_d_u_l_e.html#gabef14480bd8483eaf937b30a4b5eab88">bladerf_enable_module()</a> with <code>enable = false</code>). Otherwise, the operation of shutting down streams will block for the entire duration of the stream timeout (or infinitely if the timeouts were set to 0).</dd></dl>
<p>The standard usage of these functions is shown below. This example assumes:</p>
<ul>
<li>The two devices are connected such they share a common ground and their J71-4 pins are connected.</li>
<li>Both devices are already configured to utilize a common clock signal via the external SMB connection. Generally, this will consist of one device to outputting its reference clock via the SMB clock port, and configuring the other device(s) to use the SMB clock port as a reference clock input. This may be achieved using the <a class="el" href="group___f_n___s_m_b___c_l_o_c_k.html#ga42184eb5678f687c7542b3e2abe3bb71">bladerf_set_smb_mode()</a> function, found in the <a class="el" href="group___f_n___s_m_b___c_l_o_c_k.html">SMB clock port control</a> section.</li>
</ul>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> status;</div><div class="line"><a class="code" href="group___f_n___m_o_d_u_l_e.html#gab12571146a3d4c5d79ac497a74b3fb5e">bladerf_module</a> module = <a class="code" href="group___f_n___m_o_d_u_l_e.html#ggab12571146a3d4c5d79ac497a74b3fb5ea8df9d0339c79bf7221af3a3897360c6f">BLADERF_MODULE_RX</a>;</div><div class="line"><a class="code" href="group___f_n___t_r_i_g.html#gaebcb881ab6a5f975aaabfd87586f248d">bladerf_trigger_signal</a> = <a class="code" href="group___f_n___t_r_i_g.html#ggaebcb881ab6a5f975aaabfd87586f248dae3d9f6ee37fa174c707d33d7ecb0de79">BLADERF_TRIGGER_J71_4</a>;</div><div class="line"></div><div class="line"><span class="comment">// Allocate and initialize a bladerf_trigger structure for each</span></div><div class="line"><span class="comment">// trigger in the system.</span></div><div class="line"><span class="keyword">struct </span><a class="code" href="structbladerf__trigger.html">bladerf_trigger</a> trig_master, trig_slave;</div><div class="line"></div><div class="line">status = <a class="code" href="group___f_n___t_r_i_g.html#ga0330be975673ea887876cbf5c05e7465">bladerf_trigger_init</a>(dev_master, module, <a class="code" href="structbladerf__trigger.html#a2bea7884d40e7f7af4a9e2fa9ca39661">signal</a>, &amp;trig_master);</div><div class="line"><span class="keywordflow">if</span> (status == 0) {</div><div class="line">    trig_master.role = <a class="code" href="group___f_n___t_r_i_g.html#ggae0ce25426c2eba648a28fa07a3436acca673a4f671f5985c7f75007e578b06351">BLADERF_TRIGGER_ROLE_MASTER</a>;</div><div class="line">} <span class="keywordflow">else</span> {</div><div class="line">    <span class="keywordflow">goto</span> handle_error;</div><div class="line">}</div><div class="line"></div><div class="line">status = <a class="code" href="group___f_n___t_r_i_g.html#ga0330be975673ea887876cbf5c05e7465">bladerf_trigger_init</a>(dev_slave1, module, <a class="code" href="structbladerf__trigger.html#a2bea7884d40e7f7af4a9e2fa9ca39661">signal</a>, &amp;trig_slave);</div><div class="line"><span class="keywordflow">if</span> (status == 0) {</div><div class="line">    master_rx.role = <a class="code" href="group___f_n___t_r_i_g.html#ggae0ce25426c2eba648a28fa07a3436accab9e9f74c156adcd4e45d5ba09e38a582">BLADERF_TRIGGER_ROLE_SLAVE</a>;</div><div class="line">} <span class="keywordflow">else</span> {</div><div class="line">    <span class="keywordflow">goto</span> handle_error;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="comment">// Arm the triggering functionality on each device</span></div><div class="line">status = <a class="code" href="group___f_n___t_r_i_g.html#ga14afff57873c8ae591a4142d7851a869">bladerf_trigger_arm</a>(dev_master, &amp;trig_master, <span class="keyword">true</span>, 0, 0);</div><div class="line"><span class="keywordflow">if</span> (status != 0) {</div><div class="line">    <span class="keywordflow">goto</span> handle_error;</div><div class="line">}</div><div class="line"></div><div class="line">status = <a class="code" href="group___f_n___t_r_i_g.html#ga14afff57873c8ae591a4142d7851a869">bladerf_trigger_arm</a>(dev_slave, &amp;trig_slave, <span class="keyword">true</span>, 0, 0);</div><div class="line"><span class="keywordflow">if</span> (status != 0) {</div><div class="line">    <span class="keywordflow">goto</span> handle_error;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="comment">// Call bladerf_sync_config() and bladerf_sync_rx() on each device.</span></div><div class="line"><span class="comment">// Ensure the timeout parameters used are long enough to accommodate</span></div><div class="line"><span class="comment">// the expected time until the trigger will be fired.</span></div><div class="line">status = start_rx_streams(dev_master, dev_slave);</div><div class="line"><span class="keywordflow">if</span> (status != 0) {</div><div class="line">    <span class="keywordflow">goto</span> handle_error;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="comment">// Fire the trigger signal</span></div><div class="line">status = <a class="code" href="group___f_n___t_r_i_g.html#gaaa2b932a3b810203952bb49c1673c124">bladerf_trigger_fire</a>(dev_master, &amp;trig_master);</div><div class="line"><span class="keywordflow">if</span> (status != 0) {</div><div class="line">    <span class="keywordflow">goto</span> handle_error;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="comment">// Handle RX signals and then shut down streams.</span></div><div class="line"><span class="comment">// Synchronized samples should now be reaching the host following the</span></div><div class="line"><span class="comment">// reception of the external trigger signal.</span></div><div class="line">status = handle_rx_operations(dev_master, dev_slave);</div><div class="line"><span class="keywordflow">if</span> (status != 0) {</div><div class="line">    <span class="keywordflow">goto</span> handle_error;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="comment">// Disable triggering on all devices to restore normal RX operation</span></div><div class="line">trig_master.role = <a class="code" href="group___f_n___t_r_i_g.html#ggae0ce25426c2eba648a28fa07a3436acca6aee42dd7b70647f2d298605bed9ef5f">BLADERF_TRIGGER_ROLE_DISABLED</a>;</div><div class="line">status = <a class="code" href="group___f_n___t_r_i_g.html#ga14afff57873c8ae591a4142d7851a869">bladerf_trigger_arm</a>(dev_master, &amp;trig_master, <span class="keyword">false</span>, 0, 0);</div><div class="line"><span class="keywordflow">if</span> (status != 0) {</div><div class="line">    <span class="keywordflow">goto</span> handle_error;</div><div class="line">}</div><div class="line"></div><div class="line">trig_slave.role  = <a class="code" href="group___f_n___t_r_i_g.html#ggae0ce25426c2eba648a28fa07a3436acca6aee42dd7b70647f2d298605bed9ef5f">BLADERF_TRIGGER_ROLE_DISABLED</a>;</div><div class="line">status = <a class="code" href="group___f_n___t_r_i_g.html#ga14afff57873c8ae591a4142d7851a869">bladerf_trigger_arm</a>(dev_master, &amp;trig_slave, <span class="keyword">false</span>, 0, 0);</div><div class="line"><span class="keywordflow">if</span> (status != 0) {</div><div class="line">    <span class="keywordflow">goto</span> handle_error;</div><div class="line">}</div></div><!-- fragment --> <table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbladerf__trigger.html">bladerf_trigger</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gae0ce25426c2eba648a28fa07a3436acc"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___f_n___t_r_i_g.html#gae0ce25426c2eba648a28fa07a3436acc">bladerf_trigger_role</a> { <a class="el" href="group___f_n___t_r_i_g.html#ggae0ce25426c2eba648a28fa07a3436acca568408af972e0907da8a84eb5fc39cd7">BLADERF_TRIGGER_ROLE_INVALID</a> = -1, 
<a class="el" href="group___f_n___t_r_i_g.html#ggae0ce25426c2eba648a28fa07a3436acca6aee42dd7b70647f2d298605bed9ef5f">BLADERF_TRIGGER_ROLE_DISABLED</a>, 
<a class="el" href="group___f_n___t_r_i_g.html#ggae0ce25426c2eba648a28fa07a3436acca673a4f671f5985c7f75007e578b06351">BLADERF_TRIGGER_ROLE_MASTER</a>, 
<a class="el" href="group___f_n___t_r_i_g.html#ggae0ce25426c2eba648a28fa07a3436accab9e9f74c156adcd4e45d5ba09e38a582">BLADERF_TRIGGER_ROLE_SLAVE</a>
 }</td></tr>
<tr class="separator:gae0ce25426c2eba648a28fa07a3436acc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaebcb881ab6a5f975aaabfd87586f248d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___f_n___t_r_i_g.html#gaebcb881ab6a5f975aaabfd87586f248d">bladerf_trigger_signal</a> { <br />
&#160;&#160;<a class="el" href="group___f_n___t_r_i_g.html#ggaebcb881ab6a5f975aaabfd87586f248daf48fe7ea301ab5b83af4cf648200eff8">BLADERF_TRIGGER_INVALID</a> = -1, 
<a class="el" href="group___f_n___t_r_i_g.html#ggaebcb881ab6a5f975aaabfd87586f248dae3d9f6ee37fa174c707d33d7ecb0de79">BLADERF_TRIGGER_J71_4</a>, 
<a class="el" href="group___f_n___t_r_i_g.html#ggaebcb881ab6a5f975aaabfd87586f248daa1c2053b28babb6588784a2caed700a3">BLADERF_TRIGGER_USER_0</a> = 128, 
<a class="el" href="group___f_n___t_r_i_g.html#ggaebcb881ab6a5f975aaabfd87586f248da24bd2dc2c307ba965a2285ef03ec0a77">BLADERF_TRIGGER_USER_1</a>, 
<br />
&#160;&#160;<a class="el" href="group___f_n___t_r_i_g.html#ggaebcb881ab6a5f975aaabfd87586f248da50b34c6e1d0f3f9770216a59b7601b27">BLADERF_TRIGGER_USER_2</a>, 
<a class="el" href="group___f_n___t_r_i_g.html#ggaebcb881ab6a5f975aaabfd87586f248dab49b7cc864c9fccda2de2a3b1a83d016">BLADERF_TRIGGER_USER_3</a>, 
<a class="el" href="group___f_n___t_r_i_g.html#ggaebcb881ab6a5f975aaabfd87586f248da0e82b07e7ead36d97da5c7f908651ab5">BLADERF_TRIGGER_USER_4</a>, 
<a class="el" href="group___f_n___t_r_i_g.html#ggaebcb881ab6a5f975aaabfd87586f248da2804dc6af85a57cacc8e3f3634c1b067">BLADERF_TRIGGER_USER_5</a>, 
<br />
&#160;&#160;<a class="el" href="group___f_n___t_r_i_g.html#ggaebcb881ab6a5f975aaabfd87586f248dae0fec8346ddaa2a984d11bf968358b3c">BLADERF_TRIGGER_USER_6</a>, 
<a class="el" href="group___f_n___t_r_i_g.html#ggaebcb881ab6a5f975aaabfd87586f248da88f9745e98c677c5bee7701c4533a4b2">BLADERF_TRIGGER_USER_7</a>
<br />
 }</td></tr>
<tr class="separator:gaebcb881ab6a5f975aaabfd87586f248d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga0330be975673ea887876cbf5c05e7465"><td class="memItemLeft" align="right" valign="top"><a class="el" href="libblade_r_f_8h.html#a5e3652cae8b48c1ad174f0b06bbd06d0">API_EXPORT</a> int <a class="el" href="libblade_r_f_8h.html#a66285a1fe575693f5f275b212891222e">CALL_CONV</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___f_n___t_r_i_g.html#ga0330be975673ea887876cbf5c05e7465">bladerf_trigger_init</a> (struct bladerf *dev, <a class="el" href="group___f_n___m_o_d_u_l_e.html#gab12571146a3d4c5d79ac497a74b3fb5e">bladerf_module</a> module, <a class="el" href="group___f_n___t_r_i_g.html#gaebcb881ab6a5f975aaabfd87586f248d">bladerf_trigger_signal</a> signal, struct <a class="el" href="structbladerf__trigger.html">bladerf_trigger</a> *trigger)</td></tr>
<tr class="separator:ga0330be975673ea887876cbf5c05e7465"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga14afff57873c8ae591a4142d7851a869"><td class="memItemLeft" align="right" valign="top"><a class="el" href="libblade_r_f_8h.html#a5e3652cae8b48c1ad174f0b06bbd06d0">API_EXPORT</a> int <a class="el" href="libblade_r_f_8h.html#a66285a1fe575693f5f275b212891222e">CALL_CONV</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___f_n___t_r_i_g.html#ga14afff57873c8ae591a4142d7851a869">bladerf_trigger_arm</a> (struct bladerf *dev, const struct <a class="el" href="structbladerf__trigger.html">bladerf_trigger</a> *trigger, bool arm, uint64_t resv1, uint64_t resv2)</td></tr>
<tr class="separator:ga14afff57873c8ae591a4142d7851a869"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaaa2b932a3b810203952bb49c1673c124"><td class="memItemLeft" align="right" valign="top"><a class="el" href="libblade_r_f_8h.html#a5e3652cae8b48c1ad174f0b06bbd06d0">API_EXPORT</a> int <a class="el" href="libblade_r_f_8h.html#a66285a1fe575693f5f275b212891222e">CALL_CONV</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___f_n___t_r_i_g.html#gaaa2b932a3b810203952bb49c1673c124">bladerf_trigger_fire</a> (struct bladerf *dev, const struct <a class="el" href="structbladerf__trigger.html">bladerf_trigger</a> *trigger)</td></tr>
<tr class="separator:gaaa2b932a3b810203952bb49c1673c124"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga63c07df2a4c7a533824d0faaeedc3a1a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="libblade_r_f_8h.html#a5e3652cae8b48c1ad174f0b06bbd06d0">API_EXPORT</a> int <a class="el" href="libblade_r_f_8h.html#a66285a1fe575693f5f275b212891222e">CALL_CONV</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___f_n___t_r_i_g.html#ga63c07df2a4c7a533824d0faaeedc3a1a">bladerf_trigger_state</a> (struct bladerf *dev, const struct <a class="el" href="structbladerf__trigger.html">bladerf_trigger</a> *trigger, bool *is_armed, bool *has_fired, bool *fire_requested, uint64_t *resv1, uint64_t *resv2)</td></tr>
<tr class="separator:ga63c07df2a4c7a533824d0faaeedc3a1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="gae0ce25426c2eba648a28fa07a3436acc"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group___f_n___t_r_i_g.html#gae0ce25426c2eba648a28fa07a3436acc">bladerf_trigger_role</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>This value denotes the role of a device in a trigger chain. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="ggae0ce25426c2eba648a28fa07a3436acca568408af972e0907da8a84eb5fc39cd7"></a>BLADERF_TRIGGER_ROLE_INVALID&#160;</td><td class="fielddoc">
<p>Invalid role selection </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae0ce25426c2eba648a28fa07a3436acca6aee42dd7b70647f2d298605bed9ef5f"></a>BLADERF_TRIGGER_ROLE_DISABLED&#160;</td><td class="fielddoc">
<p>Triggering functionality is disabled on this device. Samples are not gated and the trigger signal is an input. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae0ce25426c2eba648a28fa07a3436acca673a4f671f5985c7f75007e578b06351"></a>BLADERF_TRIGGER_ROLE_MASTER&#160;</td><td class="fielddoc">
<p>This device is the trigger master. Its trigger signal will be an output and this device will determine when all devices shall trigger. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggae0ce25426c2eba648a28fa07a3436accab9e9f74c156adcd4e45d5ba09e38a582"></a>BLADERF_TRIGGER_ROLE_SLAVE&#160;</td><td class="fielddoc">
<p>This device is the trigger slave. This device's trigger signal will be an input and this devices will wait for the master's trigger signal assertion. </p>
</td></tr>
</table>

<p>Definition at line <a class="el" href="libblade_r_f_8h_source.html#l01661">1661</a> of file <a class="el" href="libblade_r_f_8h_source.html">libbladeRF.h</a>.</p>

</div>
</div>
<a class="anchor" id="gaebcb881ab6a5f975aaabfd87586f248d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group___f_n___t_r_i_g.html#gaebcb881ab6a5f975aaabfd87586f248d">bladerf_trigger_signal</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Trigger signal selection</p>
<p>This selects pin or signal used for the trigger.</p>
<p><a class="el" href="group___f_n___t_r_i_g.html#ggaebcb881ab6a5f975aaabfd87586f248dae3d9f6ee37fa174c707d33d7ecb0de79">BLADERF_TRIGGER_J71_4</a> is the only valid option as of FPGA v0.6.0.</p>
<p>The BLADERF_TRIGGER_USER_* values have been added to allow users to modify both hardware and software implementations to add custom triggers, while maintaining libbladeRF API compatibility. Official bladeRF releases will not utilize these user signal IDs. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="ggaebcb881ab6a5f975aaabfd87586f248daf48fe7ea301ab5b83af4cf648200eff8"></a>BLADERF_TRIGGER_INVALID&#160;</td><td class="fielddoc">
<p>Invalid selection </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggaebcb881ab6a5f975aaabfd87586f248dae3d9f6ee37fa174c707d33d7ecb0de79"></a>BLADERF_TRIGGER_J71_4&#160;</td><td class="fielddoc">
<p>J71 pin 4 (mini_exp_1) </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggaebcb881ab6a5f975aaabfd87586f248daa1c2053b28babb6588784a2caed700a3"></a>BLADERF_TRIGGER_USER_0&#160;</td><td class="fielddoc">
<p>Reserved for user SW/HW customizations </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggaebcb881ab6a5f975aaabfd87586f248da24bd2dc2c307ba965a2285ef03ec0a77"></a>BLADERF_TRIGGER_USER_1&#160;</td><td class="fielddoc">
<p>Reserved for user SW/HW customizations </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggaebcb881ab6a5f975aaabfd87586f248da50b34c6e1d0f3f9770216a59b7601b27"></a>BLADERF_TRIGGER_USER_2&#160;</td><td class="fielddoc">
<p>Reserved for user SW/HW customizations </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggaebcb881ab6a5f975aaabfd87586f248dab49b7cc864c9fccda2de2a3b1a83d016"></a>BLADERF_TRIGGER_USER_3&#160;</td><td class="fielddoc">
<p>Reserved for user SW/HW customizations </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggaebcb881ab6a5f975aaabfd87586f248da0e82b07e7ead36d97da5c7f908651ab5"></a>BLADERF_TRIGGER_USER_4&#160;</td><td class="fielddoc">
<p>Reserved for user SW/HW customizations </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggaebcb881ab6a5f975aaabfd87586f248da2804dc6af85a57cacc8e3f3634c1b067"></a>BLADERF_TRIGGER_USER_5&#160;</td><td class="fielddoc">
<p>Reserved for user SW/HW customizations </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggaebcb881ab6a5f975aaabfd87586f248dae0fec8346ddaa2a984d11bf968358b3c"></a>BLADERF_TRIGGER_USER_6&#160;</td><td class="fielddoc">
<p>Reserved for user SW/HW customizations </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggaebcb881ab6a5f975aaabfd87586f248da88f9745e98c677c5bee7701c4533a4b2"></a>BLADERF_TRIGGER_USER_7&#160;</td><td class="fielddoc">
<p>Reserved for user SW/HW customizations </p>
</td></tr>
</table>

<p>Definition at line <a class="el" href="libblade_r_f_8h_source.html#l01697">1697</a> of file <a class="el" href="libblade_r_f_8h_source.html">libbladeRF.h</a>.</p>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga14afff57873c8ae591a4142d7851a869"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="libblade_r_f_8h.html#a5e3652cae8b48c1ad174f0b06bbd06d0">API_EXPORT</a> int <a class="el" href="libblade_r_f_8h.html#a66285a1fe575693f5f275b212891222e">CALL_CONV</a> bladerf_trigger_arm </td>
          <td>(</td>
          <td class="paramtype">struct bladerf *&#160;</td>
          <td class="paramname"><em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const struct <a class="el" href="structbladerf__trigger.html">bladerf_trigger</a> *&#160;</td>
          <td class="paramname"><em>trigger</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>arm</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint64_t&#160;</td>
          <td class="paramname"><em>resv1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint64_t&#160;</td>
          <td class="paramname"><em>resv2</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Configure and (dis)arm a trigger on the specified device.</p>
<dl class="section note"><dt>Note</dt><dd>If trigger-&gt;role is set to <a class="el" href="group___f_n___t_r_i_g.html#ggae0ce25426c2eba648a28fa07a3436acca6aee42dd7b70647f2d298605bed9ef5f">BLADERF_TRIGGER_ROLE_DISABLED</a>, this will inherently disarm an armed trigger and clear any fire requests, regardless of the value of <code>arm</code>.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">dev</td><td>Device to configure </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">trigger</td><td>Trigger configure </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">arm</td><td>(Re)Arm trigger if true, disarm if false </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">resv1</td><td>Reserved for future use. Set to 0. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">resv2</td><td>Reserved for future use. Set to 0.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section warning"><dt>Warning</dt><dd>Configuring two devices in the trigger chain (or both RX and TX on a single device) as masters can damage the associated FPGA pins, as this would cause contention over the trigger signal.<b> Ensure only one device in the chain is configured as the master! </b></dd></dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success, value from <a class="el" href="group___r_e_t_c_o_d_e_s.html">Error codes</a> list on failure </dd></dl>

</div>
</div>
<a class="anchor" id="gaaa2b932a3b810203952bb49c1673c124"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="libblade_r_f_8h.html#a5e3652cae8b48c1ad174f0b06bbd06d0">API_EXPORT</a> int <a class="el" href="libblade_r_f_8h.html#a66285a1fe575693f5f275b212891222e">CALL_CONV</a> bladerf_trigger_fire </td>
          <td>(</td>
          <td class="paramtype">struct bladerf *&#160;</td>
          <td class="paramname"><em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const struct <a class="el" href="structbladerf__trigger.html">bladerf_trigger</a> *&#160;</td>
          <td class="paramname"><em>trigger</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Fire a trigger event.</p>
<p>Calling this functiona with a trigger whose role is anything other than <a class="el" href="group___l_o_w___l_e_v_e_l.html#gad1ba39cc55506c8b78ba24b76f310d3c">BLADERF_TRIGGER_REG_MASTER</a> will yield a BLADERF_ERR_INVAL return value.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">dev</td><td>Device handle </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">trigger</td><td>Trigger to assert</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success, value from <a class="el" href="group___r_e_t_c_o_d_e_s.html">Error codes</a> list on failure </dd></dl>

</div>
</div>
<a class="anchor" id="ga0330be975673ea887876cbf5c05e7465"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="libblade_r_f_8h.html#a5e3652cae8b48c1ad174f0b06bbd06d0">API_EXPORT</a> int <a class="el" href="libblade_r_f_8h.html#a66285a1fe575693f5f275b212891222e">CALL_CONV</a> bladerf_trigger_init </td>
          <td>(</td>
          <td class="paramtype">struct bladerf *&#160;</td>
          <td class="paramname"><em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group___f_n___m_o_d_u_l_e.html#gab12571146a3d4c5d79ac497a74b3fb5e">bladerf_module</a>&#160;</td>
          <td class="paramname"><em>module</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group___f_n___t_r_i_g.html#gaebcb881ab6a5f975aaabfd87586f248d">bladerf_trigger_signal</a>&#160;</td>
          <td class="paramname"><em>signal</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structbladerf__trigger.html">bladerf_trigger</a> *&#160;</td>
          <td class="paramname"><em>trigger</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Initialize a <a class="el" href="structbladerf__trigger.html">bladerf_trigger</a> structure based upon the current configuration of the specified trigger signal.</p>
<p>While it is possible to simply declare and manually fill in a <a class="el" href="structbladerf__trigger.html">bladerf_trigger</a> structure, it is recommended to use this function to retrieve the current <code>role</code> and <code>options</code> values.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">dev</td><td>Device to query </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">module</td><td>Module to query </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">signal</td><td>Trigger signal to query </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">trigger</td><td>Updated to describe trigger</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success, value from <a class="el" href="group___r_e_t_c_o_d_e_s.html">Error codes</a> list on failure </dd></dl>

</div>
</div>
<a class="anchor" id="ga63c07df2a4c7a533824d0faaeedc3a1a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="libblade_r_f_8h.html#a5e3652cae8b48c1ad174f0b06bbd06d0">API_EXPORT</a> int <a class="el" href="libblade_r_f_8h.html#a66285a1fe575693f5f275b212891222e">CALL_CONV</a> bladerf_trigger_state </td>
          <td>(</td>
          <td class="paramtype">struct bladerf *&#160;</td>
          <td class="paramname"><em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const struct <a class="el" href="structbladerf__trigger.html">bladerf_trigger</a> *&#160;</td>
          <td class="paramname"><em>trigger</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool *&#160;</td>
          <td class="paramname"><em>is_armed</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool *&#160;</td>
          <td class="paramname"><em>has_fired</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool *&#160;</td>
          <td class="paramname"><em>fire_requested</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint64_t *&#160;</td>
          <td class="paramname"><em>resv1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint64_t *&#160;</td>
          <td class="paramname"><em>resv2</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Query the fire request status of a master trigger</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">dev</td><td>Device handle</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">trigger</td><td>Trigger to query</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">is_armed</td><td>Set to true if the trigger is armed, and false otherwise. May be NULL.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">has_fired</td><td>Set to true if the trigger has fired, and false otherwise. May be NULL.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">fire_requested</td><td>Only applicable to a trigger master. Set to true if a fire request has been previously submitted. May be NULL.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">resv1</td><td>Reserved for future use. This field is written as 0 if not set to NULL.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">resv2</td><td>Reserved for future use. This field is written as 0 if not set to NULL.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success, value from <a class="el" href="group___r_e_t_c_o_d_e_s.html">Error codes</a> list on failure </dd></dl>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Jun 29 2016 16:51:01 for libbladeRF by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>