blob: 7d0f63a3b58eaa850303e75cabed12128f942e15 [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Capture &mdash; NuttX latest documentation</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css" />
<link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../../../../_static/sphinx_collapse.css" />
<link rel="stylesheet" type="text/css" href="../../../../_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css" />
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
<script src="../../../../_static/jquery.js"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../../../../" id="documentation_options" src="../../../../_static/documentation_options.js"></script>
<script src="../../../../_static/doctools.js"></script>
<script src="../../../../_static/sphinx_highlight.js"></script>
<script src="../../../../_static/clipboard.min.js"></script>
<script src="../../../../_static/copybutton.js"></script>
<script src="../../../../_static/design-tabs.js"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../search.html" />
<link rel="next" title="Touchscreen Device Drivers" href="../touchscreen.html" />
<link rel="prev" title="RTC Drivers" href="rtc.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../../../../latest" selected="selected">latest</option>
<option value="../../../../../10.0.0" >10.0.0</option>
<option value="../../../../../10.0.1" >10.0.1</option>
<option value="../../../../../10.1.0" >10.1.0</option>
<option value="../../../../../10.2.0" >10.2.0</option>
<option value="../../../../../10.3.0" >10.3.0</option>
<option value="../../../../../11.0.0" >11.0.0</option>
<option value="../../../../../12.0.0" >12.0.0</option>
<option value="../../../../../12.1.0" >12.1.0</option>
<option value="../../../../../12.2.0" >12.2.0</option>
<option value="../../../../../12.2.1" >12.2.1</option>
<option value="../../../../../12.3.0" >12.3.0</option>
<option value="../../../../../12.4.0" >12.4.0</option>
<option value="../../../../../12.5.0" >12.5.0</option>
<option value="../../../../../12.5.1" >12.5.1</option>
<option value="../../../../../12.6.0" >12.6.0</option>
<option value="../../../../../12.7.0" >12.7.0</option>
<option value="../../../../../12.8.0" >12.8.0</option>
<option value="../../../../../12.9.0" >12.9.0</option>
<option value="../../../../../12.10.0" >12.10.0</option>
<option value="../../../../../12.11.0" >12.11.0</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../../../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../quickstart/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../contributing/index.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../platforms/index.html">Supported Platforms</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../../index.html">OS Components</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../../binfmt.html">Binary Loader</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../../index.html">Device Drivers</a><ul class="current">
<li class="toctree-l3 current"><a class="reference internal" href="../index.html">Character Device Drivers</a><ul class="current">
<li class="toctree-l4"><a class="reference internal" href="../1wire.html">One Wire Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="../analog/index.html">Analog (ADC/DAC) Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="../bch.html">Block Driver to Character Driver</a></li>
<li class="toctree-l4"><a class="reference internal" href="../can.html">CAN Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="../contactless.html">Constactless Devices</a></li>
<li class="toctree-l4"><a class="reference internal" href="../crypto/index.html">Crypto Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="../efuse.html">EFUSE Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="../i2s.html">I2S Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="../input/index.html">Input Devices</a></li>
<li class="toctree-l4"><a class="reference internal" href="../ipcc.html">IPCC (Inter Processor Communication Controller) Driver</a></li>
<li class="toctree-l4"><a class="reference internal" href="../leds/index.html">LEDS</a></li>
<li class="toctree-l4"><a class="reference internal" href="../loop.html">Loop Device</a></li>
<li class="toctree-l4"><a class="reference internal" href="../math.html">Math Acceleration Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="../modem.html">Modem Device</a></li>
<li class="toctree-l4"><a class="reference internal" href="../motor/index.html">Motor Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="../note.html">Note Driver Interface</a></li>
<li class="toctree-l4"><a class="reference internal" href="../nullzero.html"><code class="docutils literal notranslate"><span class="pre">dev_null.c</span></code> and <code class="docutils literal notranslate"><span class="pre">dev_zero.c</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../quadrature.html">Quadrature Encoder Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="../rc.html">Remote Control Devices</a></li>
<li class="toctree-l4"><a class="reference internal" href="../rf.html">RF Devices</a></li>
<li class="toctree-l4"><a class="reference internal" href="../serial.html">Serial Device Drivers</a></li>
<li class="toctree-l4 current"><a class="reference internal" href="index.html">Timers Drivers</a><ul class="current">
<li class="toctree-l5"><a class="reference internal" href="timer.html">Timer Drivers</a></li>
<li class="toctree-l5"><a class="reference internal" href="pwm.html">PWM Drivers</a></li>
<li class="toctree-l5"><a class="reference internal" href="watchdog.html">Watchdog Timer Drivers</a></li>
<li class="toctree-l5"><a class="reference internal" href="rtc.html">RTC Drivers</a></li>
<li class="toctree-l5 current"><a class="current reference internal" href="#">Capture</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="../touchscreen.html">Touchscreen Device Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="../wireless/index.html">Wireless character drivers</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../block/index.html">Block Device Drivers</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../special/index.html">Specialized Device Drivers</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../thermal/index.html">Thermal Framework</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../index.html#subdirectories-of-nuttx-drivers">Subdirectories of <code class="docutils literal notranslate"><span class="pre">nuttx/drivers</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../index.html#skeleton-files">Skeleton Files</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../index.html#drivers-early-initialization">Drivers Early Initialization</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../../nxflat.html">NXFLAT</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../paging.html">On-Demand Paging</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../audio/index.html">Audio Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../filesystem/index.html">NuttX File System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../libs/index.html">NuttX libraries</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../net/index.html">Network Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../mm/index.html">Memory Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../syscall.html">Syscall Layer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../tools/index.html"><code class="docutils literal notranslate"><span class="pre">/tools</span></code> Host Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../arch/index.html">Architecture-Specific Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../boards.html">Boards Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../cmake.html">CMake Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../openamp.html">OpenAMP Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../video.html">Video Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../crypto.html">Crypto API Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../wireless.html">Wireless Subsystem</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../implementation/index.html">Implementation Details</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../debugging/index.html">Debugging</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../standards/index.html">Standards</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../logos/index.html">NuttX Logos</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../_tags/tagsindex.html">Tags</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../../../index.html">OS Components</a></li>
<li class="breadcrumb-item"><a href="../../index.html">Device Drivers</a></li>
<li class="breadcrumb-item"><a href="../index.html">Character Device Drivers</a></li>
<li class="breadcrumb-item"><a href="index.html">Timers Drivers</a></li>
<li class="breadcrumb-item active">Capture</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/nuttx/blob/master/Documentation/components/drivers/character/timers/capture.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="capture">
<h1>Capture<a class="headerlink" href="#capture" title="Permalink to this heading"></a></h1>
<p>The <strong>capture driver</strong> is a character device driver that allows capturing
timer values on specific events. This is useful for tasks such as
measuring the frequency, duty cycle, or pulse count of an input signal.</p>
<p>This documentation is based on the STM32H7 timer capture driver.</p>
<section id="usage">
<h2>Usage<a class="headerlink" href="#usage" title="Permalink to this heading"></a></h2>
<p>The capture driver is accessed via a device file (e.g., <code class="docutils literal notranslate"><span class="pre">/dev/capture0</span></code>).
You can use standard file operations along with <code class="docutils literal notranslate"><span class="pre">ioctl()</span></code> calls to
retrieve captured values or configure the driver.</p>
<section id="supported-ioctl-commands">
<h3>Supported <code class="docutils literal notranslate"><span class="pre">ioctl</span></code> Commands<a class="headerlink" href="#supported-ioctl-commands" title="Permalink to this heading"></a></h3>
<dl class="c macro">
<dt class="sig sig-object c" id="c.CAPIOC_DUTYCYCLE">
<span class="sig-name descname"><span class="n"><span class="pre">CAPIOC_DUTYCYCLE</span></span></span><a class="headerlink" href="#c.CAPIOC_DUTYCYCLE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get the PWM duty cycle from the capture unit.</p>
<p><strong>Argument:</strong> <code class="docutils literal notranslate"><span class="pre">int8_t</span> <span class="pre">*</span></code> (pointer to duty cycle percentage).</p>
</dd></dl>
<dl class="c macro">
<dt class="sig sig-object c" id="c.CAPIOC_FREQUENCE">
<span class="sig-name descname"><span class="n"><span class="pre">CAPIOC_FREQUENCE</span></span></span><a class="headerlink" href="#c.CAPIOC_FREQUENCE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get the pulse frequency from the capture unit.</p>
<p><strong>Argument:</strong> <code class="docutils literal notranslate"><span class="pre">int32_t</span> <span class="pre">*</span></code> (pointer to frequency in Hz).</p>
</dd></dl>
<dl class="c macro">
<dt class="sig sig-object c" id="c.CAPIOC_EDGES">
<span class="sig-name descname"><span class="n"><span class="pre">CAPIOC_EDGES</span></span></span><a class="headerlink" href="#c.CAPIOC_EDGES" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get the number of PWM edges detected.</p>
<p><strong>Argument:</strong> <code class="docutils literal notranslate"><span class="pre">int32_t</span> <span class="pre">*</span></code> (pointer to edge count).</p>
</dd></dl>
<dl class="c macro">
<dt class="sig sig-object c" id="c.CAPIOC_ALL">
<span class="sig-name descname"><span class="n"><span class="pre">CAPIOC_ALL</span></span></span><a class="headerlink" href="#c.CAPIOC_ALL" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get duty cycle, pulse frequency, and edge count in a single call.</p>
<p><strong>Argument:</strong> <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">cap_all_s</span> <span class="pre">*</span></code> (structure containing all values).</p>
</dd></dl>
<dl class="c macro">
<dt class="sig sig-object c" id="c.CAPIOC_PULSES">
<span class="sig-name descname"><span class="n"><span class="pre">CAPIOC_PULSES</span></span></span><a class="headerlink" href="#c.CAPIOC_PULSES" title="Permalink to this definition"></a><br /></dt>
<dd><p>Read the current pulse count value.</p>
<p><strong>Argument:</strong> <code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">*</span></code> (pointer to pulse count).</p>
</dd></dl>
<dl class="c macro">
<dt class="sig sig-object c" id="c.CAPIOC_CLR_CNT">
<span class="sig-name descname"><span class="n"><span class="pre">CAPIOC_CLR_CNT</span></span></span><a class="headerlink" href="#c.CAPIOC_CLR_CNT" title="Permalink to this definition"></a><br /></dt>
<dd><p>Clear the pulse count value.</p>
<p><strong>Argument:</strong> None.</p>
</dd></dl>
<dl class="c macro">
<dt class="sig sig-object c" id="c.CAPIOC_FILTER">
<span class="sig-name descname"><span class="n"><span class="pre">CAPIOC_FILTER</span></span></span><a class="headerlink" href="#c.CAPIOC_FILTER" title="Permalink to this definition"></a><br /></dt>
<dd><p>Configure the glitch filter.</p>
<p><strong>Argument:</strong> <code class="docutils literal notranslate"><span class="pre">uint32_t</span></code> (filter value in nanoseconds, <code class="docutils literal notranslate"><span class="pre">0</span></code> to disable).</p>
</dd></dl>
<dl class="c macro">
<dt class="sig sig-object c" id="c.CAPIOC_HANDLER">
<span class="sig-name descname"><span class="n"><span class="pre">CAPIOC_HANDLER</span></span></span><a class="headerlink" href="#c.CAPIOC_HANDLER" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set a user callback function for capture events.</p>
<p><strong>Argument:</strong> <code class="docutils literal notranslate"><span class="pre">xcpt_t</span></code> (function pointer, <code class="docutils literal notranslate"><span class="pre">NULL</span></code> to disable).</p>
</dd></dl>
<dl class="c macro">
<dt class="sig sig-object c" id="c.CAPIOC_ADD_WP">
<span class="sig-name descname"><span class="n"><span class="pre">CAPIOC_ADD_WP</span></span></span><a class="headerlink" href="#c.CAPIOC_ADD_WP" title="Permalink to this definition"></a><br /></dt>
<dd><p>Add a watchpoint to the capture unit.</p>
<p><strong>Argument:</strong> <code class="docutils literal notranslate"><span class="pre">int</span></code> (value to watch for).</p>
</dd></dl>
</section>
<section id="configuration">
<h3>Configuration<a class="headerlink" href="#configuration" title="Permalink to this heading"></a></h3>
<p>To enable the capture driver, enable the following configuration options:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_CAPTURE</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">CONFIG_STM32H7_TIM4_CAP</span></code> (for STM32H7 Timer 4)</p></li>
</ul>
<p>The <code class="docutils literal notranslate"><span class="pre">CONFIG_CAPTURE</span></code> option enables the lower-half driver and registers
the <code class="docutils literal notranslate"><span class="pre">/dev/capture</span></code> device.</p>
<p>Without it, capture is still possible manually by including the appropriate
header (e.g., <code class="docutils literal notranslate"><span class="pre">arch/arm/src/stm32h7/stm32_capture.h</span></code>) and performing a
manual initialization.</p>
</section>
<section id="example">
<h3>Example<a class="headerlink" href="#example" title="Permalink to this heading"></a></h3>
<p>Here is a simple example of using the capture driver to read a signal’s
frequency:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;fcntl.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;sys/ioctl.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;nuttx/timers/capture.h&gt;</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">argc</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">argv</span><span class="p">[])</span>
<span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">fd</span><span class="p">;</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">frequency</span><span class="p">;</span>
<span class="w"> </span><span class="n">fd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">open</span><span class="p">(</span><span class="s">&quot;/dev/capture0&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">O_RDONLY</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">fd</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">perror</span><span class="p">(</span><span class="s">&quot;Failed to open capture device&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ioctl</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span><span class="w"> </span><span class="n">CAPIOC_FREQUENCE</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="p">)</span><span class="o">&amp;</span><span class="n">frequency</span><span class="p">)</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">perror</span><span class="p">(</span><span class="s">&quot;Failed to get frequency&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">close</span><span class="p">(</span><span class="n">fd</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Frequency: %u Hz</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">frequency</span><span class="p">);</span>
<span class="w"> </span><span class="n">close</span><span class="p">(</span><span class="n">fd</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</section>
<section id="notes">
<h3>Notes<a class="headerlink" href="#notes" title="Permalink to this heading"></a></h3>
<ul class="simple">
<li><p>The actual set of supported <code class="docutils literal notranslate"><span class="pre">ioctl</span></code> commands may vary depending on
the hardware and driver implementation.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">CAPIOC_FREQUENCE</span></code> macro name is preserved for compatibility,
even though “frequency” is the correct English spelling.</p></li>
<li><p>Always check return values from <code class="docutils literal notranslate"><span class="pre">ioctl()</span></code> calls for error handling.</p></li>
<li><p><strong>Important:</strong> In debug builds of NuttX, calling an unsupported
<code class="docutils literal notranslate"><span class="pre">ioctl</span></code> command will trigger a <code class="docutils literal notranslate"><span class="pre">DEBUGASSERT</span></code> in the driver,
which will halt or crash the system.</p></li>
</ul>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="rtc.html" class="btn btn-neutral float-left" title="RTC Drivers" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../touchscreen.html" class="btn btn-neutral float-right" title="Touchscreen Device Drivers" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>