blob: a841662a4583493de9b4e42d5808eaab662fafa8 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flash Circular Buffer (FCB) &mdash; Apache Mynewt latest documentation</title>
<link rel="shortcut icon" href="../../../_static/mynewt-logo-only-newt32x32.png"/>
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/sphinx_theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/bootstrap-3.0.3.min.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/v2.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/custom.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/restructuredtext.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/overrides.css" type="text/css" />
<link rel="index" title="Index"
href="../../../genindex.html"/>
<link rel="search" title="Search" href="../../../search.html"/>
<link rel="top" title="Apache Mynewt latest documentation" href="../../../index.html"/>
<link rel="up" title="OS User Guide" href="../../os_user_guide.html"/>
<link rel="next" title="Mynewt Sensor Framework Overview" href="../sensor_framework/sensor_framework.html"/>
<link rel="prev" title="Adding a new file system" href="../fs/fs_add.html"/>
<script src="../../../_static/js/modernizr.min.js"></script>
<script>
(function(i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
(i[r] =
i[r] ||
function() {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
</head>
<body class="not-front page-documentation" role="document" >
<div id="wrapper">
<div class="container">
<div id="banner" class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="../../../_static/img/logo.png">
</a>
<div class="tagline-cell">
<h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
</div>
<div class="news-cell">
<div class="well">
<h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.12.0, Apache NimBLE 1.7.0 </a> released April 4, 2024)
</div>
</div>
</div>
</div>
<header>
<nav id="navbar" class="navbar navbar-inverse" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav navbar-right">
<li>
<a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
</li>
<li class="important">
<a href="/quick-start/">Quick Start</a>
</li>
<li>
<a href="/about/">About</a>
</li>
<li>
<a href="/talks/">Talks</a>
</li>
<li class="active">
<a href="/documentation/">Documentation</a>
</li>
<li>
<a href="/download/">Download</a>
</li>
<li>
<a href="/community/">Community</a>
</li>
<li>
<a href="/events/">Events</a>
</li>
</ul>
<!-- Search, Navigation and Repo links -->
<ul class="nav navbar-nav navbar-right">
</ul>
</div>
</div>
</nav>
</header>
<!-- STARTS MAIN CONTENT -->
<div id="main-content">
<div id="breadcrumb">
<div class="container">
<a href="/documentation/">Docs</a> /
<a href="../../os_user_guide.html">OS User Guide</a> /
Flash Circular Buffer (FCB)
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-core/edit/master/docs/os/modules/fcb/fcb.rst" class="icon icon-github"
rel="nofollow"> Edit on GitHub</a>
</div>
</div>
</div>
<!-- STARTS CONTAINER -->
<div class="container">
<!-- STARTS .content -->
<div id="content" class="row">
<!-- STARTS .container-sidebar -->
<div class="container-sidebar col-xs-12 col-sm-3">
<div id="docSidebar" class="sticky-container">
<div role="search" class="sphinx-search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search documentation" class="search-documentation" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<!-- Note: only works when deployed -->
<select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest" selected>
Version: latest
</option>
<option value="/v1_12_0" >
Version: 1.12.0
</option>
<option value="/v1_11_0" >
Version: 1.11.0
</option>
<option value="/v1_10_0" >
Version: 1.10.0
</option>
<option value="/v1_9_0" >
Version: 1.9.0
</option>
<option value="/v1_8_0" >
Version: 1.8.0
</option>
<option value="/v1_7_0" >
Version: 1.7.0
</option>
<option value="/v1_6_0" selected="selected" >
Version: 1.6.0
</option>
<option value="/v1_5_0" >
Version: 1.5.0
</option>
<option value="/v1_4_0" >
Version: 1.4.0
</option>
<option value="/v1_3_0/os/introduction" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" >
Version: 1.1.0
</option>
<option value="/v1_0_0/os/introduction" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select>
<div class="region region-sidebar">
<div class="docs-menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../get_started/index.html">Setup &amp; Get Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../concepts.html">Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../tutorials/tutorials.html">Tutorials</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../external_links.html">Third-party Resources</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../os_user_guide.html">OS User Guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../core_os/mynewt_os.html">Kernel</a></li>
<li class="toctree-l2"><a class="reference internal" href="../system_modules.html">System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../hal/hal.html">Hardware Abstraction</a></li>
<li class="toctree-l2"><a class="reference internal" href="../bootloader/bootloader.html">Secure Bootloader</a></li>
<li class="toctree-l2"><a class="reference internal" href="../split/split.html">Split Images</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../core_os/porting/port_os.html">Porting Guide</a></li>
<li class="toctree-l2"><a class="reference internal" href="../baselibc.html">Baselibc</a></li>
<li class="toctree-l2"><a class="reference internal" href="../drivers/driver.html">Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="../devmgmt/newtmgr.html">Device Management with Newt Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../mcumgr/mcumgr.html">Device Management with MCUmgr</a></li>
<li class="toctree-l2"><a class="reference internal" href="../imgmgr/imgmgr.html">Image Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../sysinitconfig/sysinitconfig.html">Compile-Time Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../fs/fs.html">File System</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Flash Circular Buffer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../sensor_framework/sensor_framework.html">Sensor Framework</a></li>
<li class="toctree-l2"><a class="reference internal" href="../testutil/testutil.html">Test Utilities</a></li>
<li class="toctree-l2"><a class="reference internal" href="../json/json.html">JSON</a></li>
<li class="toctree-l2"><a class="reference internal" href="../mfg/mfg.html">Manufacturing support</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../network/index.html">BLE User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../newt/index.html">Newt Tool Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../newtmgr/index.html">Newt Manager Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../mynewt_faq/index.html">Mynewt FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../misc/index.html">Appendix</a></li>
</ul>
</div>
</div>
</div>
<!-- ENDS STICKY CONTAINER -->
</div>
<!-- ENDS .container-sidebar -->
<div class="col-xs-12 col-sm-9">
<div class="alert alert-warning">
<p>
Version 1.6.0 is not the most recent version of the
Apache Mynewt documentation. Click <a href="/latest">here</a> to
read the latest version.
</p>
</div>
<div class="">
<div class="rst-content">
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="flash-circular-buffer-fcb">
<h1>Flash Circular Buffer (FCB)<a class="headerlink" href="#flash-circular-buffer-fcb" title="Permalink to this headline"></a></h1>
<p>Flash circular buffer provides an abstration through which you can treat
flash like a FIFO. You append entries to the end, and read data from the
beginning.</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#description" id="id1">Description</a></p></li>
<li><p><a class="reference internal" href="#usage" id="id2">Usage</a></p></li>
<li><p><a class="reference internal" href="#data-structures" id="id3">Data structures</a></p></li>
<li><p><a class="reference internal" href="#api" id="id4">API</a></p></li>
</ul>
</div>
<div class="section" id="description">
<h2><a class="toc-backref" href="#id1">Description</a><a class="headerlink" href="#description" title="Permalink to this headline"></a></h2>
<p>Elements in the flash contain the length of the element, the data within
the element, and checksum over the element contents.</p>
<p>Storage of elements in flash is done in a FIFO fashion. When user
requests space for the next element, space is located at the end of the
used area. When user starts reading, the first element served is the
oldest element in flash.</p>
<p>Elements can be appended to the end of the area until storage space is
exhausted. User has control over what happens next; either erase oldest
block of data, thereby freeing up some space, or stop writing new data
until existing data has been collected. FCB treats underlying storage as
an array of flash sectors; when it erases old data, it does this a
sector at a time.</p>
<p>Elements in the flash are checksummed. That is how FCB detects whether
writing element to flash completed ok. It will skip over entries which
don’t have a valid checksum.</p>
</div>
<div class="section" id="usage">
<h2><a class="toc-backref" href="#id2">Usage</a><a class="headerlink" href="#usage" title="Permalink to this headline"></a></h2>
<p>To add an element to circular buffer:</p>
<ul class="simple">
<li><p>Call fcb_append() to get the location where data can be written. If
this fails due to lack of space, you can call fcb_rotate() to make
some. And then call fcb_append() again.</p></li>
<li><p>Use flash_area_write() to write element contents.</p></li>
<li><p>Call fcb_append_finish() when done. This completes the entry by
calculating the checksum.</p></li>
</ul>
<p>To read contents of the circular buffer: * Call fcb_walk() with a
pointer to your callback function. * Within callback function copy in
data from the element using flash_area_read(). You can tell when all
data from within a sector has been read by monitoring returned element’s
area pointer. Then you can call fcb_rotate(), if you’re done with that
data.</p>
<p>Alternatively: * Call fcb_getnext() with 0 in element offset to get
the pointer to oldest element. * Use flash_area_read() to read
element contents. * Call fcb_getnext() with pointer to current element
to get the next one. And so on.</p>
</div>
<div class="section" id="data-structures">
<h2><a class="toc-backref" href="#id3">Data structures</a><a class="headerlink" href="#data-structures" title="Permalink to this headline"></a></h2>
<p>This data structure describes the element location in the flash. You
would use it figure out what parameters to pass to flash_area_read()
to read element contents. Or to flash_area_write() when adding a new
element.</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">fcb_entry</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">flash_area</span><span class="w"> </span><span class="o">*</span><span class="n">fe_area</span><span class="p">;</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">fe_elem_off</span><span class="p">;</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">fe_data_off</span><span class="p">;</span>
<span class="w"> </span><span class="kt">uint16_t</span><span class="w"> </span><span class="n">fe_data_len</span><span class="p">;</span>
<span class="p">};</span>
</pre></div>
</div>
<table class="docutils align-default">
<colgroup>
<col style="width: 43%" />
<col style="width: 57%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Element</p></th>
<th class="head"><p>Description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>fe_area</p></td>
<td><p>Pointer to
info about the
flash sector.
Pass this to
flash_area_x
x()
routines.</p></td>
</tr>
<tr class="row-odd"><td><p>fe_elem_
off</p></td>
<td><p>Byte offset
from the start
of the sector
to beginning
of element.</p></td>
</tr>
<tr class="row-even"><td><p>fe_data_
off</p></td>
<td><p>Byte offset
from start of
the sector to
beginning of
element data.
Pass this to
to
flash_area_x
x()
routines.</p></td>
</tr>
<tr class="row-odd"><td><p>fe_data_
len</p></td>
<td><p>Number of
bytes in the
element.</p></td>
</tr>
</tbody>
</table>
<p>The following data structure describes the FCB itself. First part should
be filled in by the user before calling fcb_init(). The second part is
used by FCB for its internal bookkeeping.</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">fcb</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="cm">/* Caller of fcb_init fills this in */</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">f_magic</span><span class="p">;</span><span class="w"> </span><span class="cm">/* As placed on the disk */</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">f_version</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Current version number of the data */</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">f_sector_cnt</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Number of elements in sector array */</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">f_scratch_cnt</span><span class="p">;</span><span class="w"> </span><span class="cm">/* How many sectors should be kept empty */</span>
<span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">flash_area</span><span class="w"> </span><span class="o">*</span><span class="n">f_sectors</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Array of sectors, must be contiguous */</span>
<span class="w"> </span><span class="cm">/* Flash circular buffer internal state */</span>
<span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">os_mutex</span><span class="w"> </span><span class="n">f_mtx</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Locking for accessing the FCB data */</span>
<span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">flash_area</span><span class="w"> </span><span class="o">*</span><span class="n">f_oldest</span><span class="p">;</span>
<span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">fcb_entry</span><span class="w"> </span><span class="n">f_active</span><span class="p">;</span>
<span class="w"> </span><span class="kt">uint16_t</span><span class="w"> </span><span class="n">f_active_id</span><span class="p">;</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">f_align</span><span class="p">;</span><span class="w"> </span><span class="cm">/* writes to flash have to aligned to this */</span>
<span class="p">};</span>
</pre></div>
</div>
<table class="docutils align-default">
<colgroup>
<col style="width: 43%" />
<col style="width: 57%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Element</p></th>
<th class="head"><p>Description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>f_magic</p></td>
<td><p>Magic number
in the
beginning of
FCB flash
sector. FCB
uses this when
determining
whether sector
contains valid
data or not.</p></td>
</tr>
<tr class="row-odd"><td><p>f_version</p></td>
<td><p>Current
version number
of the data.
Also stored in
flash sector
header.</p></td>
</tr>
<tr class="row-even"><td><p>f_sector_cnt</p></td>
<td><p>Number of
elements in
the f_sectors
array.</p></td>
</tr>
<tr class="row-odd"><td><p>f_scratch
_cnt</p></td>
<td><p>Number of
sectors to
keep empty.
This can be
used if you
need to have
scratch space
for garbage
collecting
when FCB fills
up.</p></td>
</tr>
<tr class="row-even"><td><p>f_sectors</p></td>
<td><p>Array of
entries
describing
flash sectors
to use.</p></td>
</tr>
<tr class="row-odd"><td><p>f_mtx</p></td>
<td><p>Lock
protecting
access to FCBs
internal data.</p></td>
</tr>
<tr class="row-even"><td><p>f_oldest</p></td>
<td><p>Pointer to
flash sector
containing the
oldest data.
This is where
data is served
when read is
started.</p></td>
</tr>
<tr class="row-odd"><td><p>f_active</p></td>
<td><p>Flash location
where the
newest data
is. This is
used by
fcb_append()
to figure out
where the data
should go to.</p></td>
</tr>
<tr class="row-even"><td><p>f_active_id</p></td>
<td><p>Flash sectors
are assigned
ever-increasin
g
serial
numbers. This
is how FCB
figures out
where oldest
data is on
system
restart.</p></td>
</tr>
<tr class="row-odd"><td><p>f_align</p></td>
<td><p>Some flashes
have
restrictions
on alignment
for writes.
FCB keeps a
copy of this
number for the
flash here.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="api">
<h2><a class="toc-backref" href="#id4">API</a><a class="headerlink" href="#api" title="Permalink to this headline"></a></h2>
<dl class="c type">
<dt id="c.fcb_walk_cb">
<span class="target" id="group___f_c_b_1gaa5b10380f15d7cd339ef4bab1ee8869b"></span><em class="property"><span class="pre">typedef</span> </em><span class="pre">int</span> <span class="pre">(</span><span class="pre">*</span><code class="sig-name descname"><span class="pre">fcb_walk_cb</span></code><span class="pre">)</span><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_entry" title="fcb_entry"><span class="pre">fcb_entry</span></a> <span class="pre">*</span><span class="pre">loc</span>, <span class="pre">void</span> <span class="pre">*</span><span class="pre">arg</span><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_walk_cb" title="Permalink to this definition"></a><br /></dt>
<dd><p>Walk over all log entries in FCB, or entries in a given flash_area. </p>
<p>cb gets called for every entry. If cb wants to stop the walk, it should return non-zero value.</p>
<p>Entry data can be read using flash_area_read(), using loc-&gt;fe_area, loc-&gt;fe_data_off, and loc-&gt;fe_data_len as arguments. </p>
</dd></dl>
<dl class="c type">
<dt>
<span class="target" id="group___f_c_b_1gaa5b10380f15d7cd339ef4bab1ee8869b"></span><em class="property"><span class="pre">typedef</span> </em><span class="pre">int</span> <span class="pre">(</span><span class="pre">*</span><code class="sig-name descname"><span class="pre">fcb_walk_cb</span></code><span class="pre">)</span><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_entry" title="fcb_entry"><span class="pre">fcb_entry</span></a> <span class="pre">*</span><span class="pre">loc</span>, <span class="pre">void</span> <span class="pre">*</span><span class="pre">arg</span><span class="sig-paren">)</span><br /></dt>
<dd><p>Walk over all log entries in FCB, or entries in a given flash_area. </p>
<p>cb gets called for every entry. If cb wants to stop the walk, it should return non-zero value.</p>
<p>Entry data can be read using <a class="reference internal" href="#group___f_c_b_1ga52ba7c1520307db1138494cf4a299e59"><span class="std std-ref">fcb_read()</span></a>. </p>
</dd></dl>
<dl class="c var">
<dt id="c.fe_area">
<span class="target" id="group___f_c_b_1gaab7905b826e8bdd45d3cfa9603a00743"></span><em class="property"><span class="pre">struct</span></em> <span class="pre">flash_area</span> <span class="pre">*</span><code class="sig-name descname"><span class="pre">fe_area</span></code><a class="headerlink" href="#c.fe_area" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.fe_elem_off">
<span class="target" id="group___f_c_b_1ga6d01cb2107949bf4f0a2779c9781261f"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">fe_elem_off</span></code><a class="headerlink" href="#c.fe_elem_off" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.fe_data_off">
<span class="target" id="group___f_c_b_1ga82cba5933875498c804f31722a6e90f9"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">fe_data_off</span></code><a class="headerlink" href="#c.fe_data_off" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.fe_data_len">
<span class="target" id="group___f_c_b_1gaa207d21d51bc2c7aa838ca9dc3b52be7"></span><span class="pre">uint16_t</span> <code class="sig-name descname"><span class="pre">fe_data_len</span></code><a class="headerlink" href="#c.fe_data_len" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_magic">
<span class="target" id="group___f_c_b_1ga4206faa9ed633ba2315163c52e557397"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">f_magic</span></code><a class="headerlink" href="#c.f_magic" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_version">
<span class="target" id="group___f_c_b_1ga030b96abd6c857295f154197278cca69"></span><span class="pre">uint8_t</span> <code class="sig-name descname"><span class="pre">f_version</span></code><a class="headerlink" href="#c.f_version" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_sector_cnt">
<span class="target" id="group___f_c_b_1gaa642058028d755c7bc5b6814a4cb8c16"></span><span class="pre">uint8_t</span> <code class="sig-name descname"><span class="pre">f_sector_cnt</span></code><a class="headerlink" href="#c.f_sector_cnt" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_scratch_cnt">
<span class="target" id="group___f_c_b_1gaab748de6989e30de6571fc94d66ee365"></span><span class="pre">uint8_t</span> <code class="sig-name descname"><span class="pre">f_scratch_cnt</span></code><a class="headerlink" href="#c.f_scratch_cnt" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_sectors">
<span class="target" id="group___f_c_b_1ga394cc29955bb6d66e5addab08caebccd"></span><em class="property"><span class="pre">struct</span></em> <span class="pre">flash_area</span> <span class="pre">*</span><code class="sig-name descname"><span class="pre">f_sectors</span></code><a class="headerlink" href="#c.f_sectors" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_mtx">
<span class="target" id="group___f_c_b_1gaf5f0013eaeab63cb43f9bd4f16ef607d"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="../../core_os/mutex/mutex.html#c.os_mutex" title="os_mutex"><span class="pre">os_mutex</span></a> <code class="sig-name descname"><span class="pre">f_mtx</span></code><a class="headerlink" href="#c.f_mtx" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_oldest">
<span class="target" id="group___f_c_b_1ga98e161f37e0e79867b200d47aeeea650"></span><em class="property"><span class="pre">struct</span></em> <span class="pre">flash_area</span> <span class="pre">*</span><code class="sig-name descname"><span class="pre">f_oldest</span></code><a class="headerlink" href="#c.f_oldest" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_active">
<span class="target" id="group___f_c_b_1ga1f7922dc1e8076bcfffca117260d5e02"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_entry" title="fcb_entry"><span class="pre">fcb_entry</span></a> <code class="sig-name descname"><span class="pre">f_active</span></code><a class="headerlink" href="#c.f_active" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_active_id">
<span class="target" id="group___f_c_b_1ga8da1d0b4bef7d9ddcd5922d9bbef0cef"></span><span class="pre">uint16_t</span> <code class="sig-name descname"><span class="pre">f_active_id</span></code><a class="headerlink" href="#c.f_active_id" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_align">
<span class="target" id="group___f_c_b_1gaa745e88d4477408b40a759dd1baea637"></span><span class="pre">uint8_t</span> <code class="sig-name descname"><span class="pre">f_align</span></code><a class="headerlink" href="#c.f_align" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.flb_entry">
<span class="target" id="group___f_c_b_1gadfd0e7049021fe72254e94a3d3c0f41c"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_entry" title="fcb_entry"><span class="pre">fcb_entry</span></a> <code class="sig-name descname"><span class="pre">flb_entry</span></code><a class="headerlink" href="#c.flb_entry" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.flb_index">
<span class="target" id="group___f_c_b_1gab1af519b0f80ce69ba4e75977c1f53e9"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">flb_index</span></code><a class="headerlink" href="#c.flb_index" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.fls_bmarks">
<span class="target" id="group___f_c_b_1ga7d07ba6c5428b1aadae8df24a33c1f1f"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_log_bmark" title="fcb_log_bmark"><span class="pre">fcb_log_bmark</span></a> <span class="pre">*</span><code class="sig-name descname"><span class="pre">fls_bmarks</span></code><a class="headerlink" href="#c.fls_bmarks" title="Permalink to this definition"></a><br /></dt>
<dd><p>Array of bookmarks. </p>
</dd></dl>
<dl class="c var">
<dt id="c.fls_cap">
<span class="target" id="group___f_c_b_1ga416ca0eaefc8529bb92c330079d1939c"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fls_cap</span></code><a class="headerlink" href="#c.fls_cap" title="Permalink to this definition"></a><br /></dt>
<dd><p>The maximum number of bookmarks. </p>
</dd></dl>
<dl class="c var">
<dt id="c.fls_size">
<span class="target" id="group___f_c_b_1gabb1a01009772154db6147c1303f4cd24"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fls_size</span></code><a class="headerlink" href="#c.fls_size" title="Permalink to this definition"></a><br /></dt>
<dd><p>The number of currently usable bookmarks. </p>
</dd></dl>
<dl class="c var">
<dt id="c.fls_next">
<span class="target" id="group___f_c_b_1ga44e47f92685d97e8fd92a5278f46bbd3"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fls_next</span></code><a class="headerlink" href="#c.fls_next" title="Permalink to this definition"></a><br /></dt>
<dd><p>The index where the next bookmark will get written. </p>
</dd></dl>
<dl class="c var">
<dt id="c.fl_fcb">
<span class="target" id="group___f_c_b_1ga68139f1e79779253e7227ddda1a445e8"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb" title="fcb"><span class="pre">fcb</span></a> <code class="sig-name descname"><span class="pre">fl_fcb</span></code><a class="headerlink" href="#c.fl_fcb" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.fl_entries">
<span class="target" id="group___f_c_b_1ga7cd9c61768c2952770c869f33d6713dc"></span><span class="pre">uint8_t</span> <code class="sig-name descname"><span class="pre">fl_entries</span></code><a class="headerlink" href="#c.fl_entries" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.fl_watermark_off">
<span class="target" id="group___f_c_b_1gaff338550d9a5841f09775b1c0c901598"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">fl_watermark_off</span></code><a class="headerlink" href="#c.fl_watermark_off" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.fl_bset">
<span class="target" id="group___f_c_b_1ga192e704bf9f9088420e6759fd3a5a63e"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_log_bset" title="fcb_log_bset"><span class="pre">fcb_log_bset</span></a> <code class="sig-name descname"><span class="pre">fl_bset</span></code><a class="headerlink" href="#c.fl_bset" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.fe_fcb">
<span class="target" id="group___f_c_b_1gaddf9f7b8d342527f33748dc31778ec14"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb" title="fcb"><span class="pre">fcb</span></a> <span class="pre">*</span><code class="sig-name descname"><span class="pre">fe_fcb</span></code><a class="headerlink" href="#c.fe_fcb" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.fe_range">
<span class="target" id="group___f_c_b_1gad53ea87aa89f1cb8893fb793e30d80ec"></span><em class="property"><span class="pre">struct</span></em> <span class="pre">flash_sector_range</span> <span class="pre">*</span><code class="sig-name descname"><span class="pre">fe_range</span></code><a class="headerlink" href="#c.fe_range" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.fe_sector">
<span class="target" id="group___f_c_b_1ga118ce453e23195a4dd722a072f2b46cc"></span><span class="pre">uint16_t</span> <code class="sig-name descname"><span class="pre">fe_sector</span></code><a class="headerlink" href="#c.fe_sector" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.fe_entry_num">
<span class="target" id="group___f_c_b_1ga56b04fb009923ae630ca4a578c658c1f"></span><span class="pre">uint16_t</span> <code class="sig-name descname"><span class="pre">fe_entry_num</span></code><a class="headerlink" href="#c.fe_entry_num" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_range_cnt">
<span class="target" id="group___f_c_b_1ga09d4fda573685cea1cd53b5faaf80492"></span><span class="pre">uint8_t</span> <code class="sig-name descname"><span class="pre">f_range_cnt</span></code><a class="headerlink" href="#c.f_range_cnt" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt>
<span class="target" id="group___f_c_b_1ga6e66e3657ff946da9b87594b819de075"></span><span class="pre">uint16_t</span> <code class="sig-name descname"><span class="pre">f_sector_cnt</span></code><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_ranges">
<span class="target" id="group___f_c_b_1gacb0f6e85b3a4bfab08a2146b95287c41"></span><em class="property"><span class="pre">struct</span></em> <span class="pre">flash_sector_range</span> <span class="pre">*</span><code class="sig-name descname"><span class="pre">f_ranges</span></code><a class="headerlink" href="#c.f_ranges" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_oldest_sec">
<span class="target" id="group___f_c_b_1ga5638e611aed89f1852a5869b35752218"></span><span class="pre">uint16_t</span> <code class="sig-name descname"><span class="pre">f_oldest_sec</span></code><a class="headerlink" href="#c.f_oldest_sec" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.f_sector_entries">
<span class="target" id="group___f_c_b_1ga120eb0b6eb14ffd00b6eedd13acb1379"></span><span class="pre">uint16_t</span> <code class="sig-name descname"><span class="pre">f_sector_entries</span></code><a class="headerlink" href="#c.f_sector_entries" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.si_range">
<span class="target" id="group___f_c_b_1gab65e52aa909d303edd5e3ae1f0bfa516"></span><em class="property"><span class="pre">struct</span></em> <span class="pre">flash_sector_range</span> <span class="pre">*</span><code class="sig-name descname"><span class="pre">si_range</span></code><a class="headerlink" href="#c.si_range" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.si_sector_offset">
<span class="target" id="group___f_c_b_1ga3333f4d55a55a16c4207125ca060758f"></span><span class="pre">uint32_t</span> <code class="sig-name descname"><span class="pre">si_sector_offset</span></code><a class="headerlink" href="#c.si_sector_offset" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c var">
<dt id="c.si_sector_in_range">
<span class="target" id="group___f_c_b_1ga6faae800691e2a44229c745842d31bc9"></span><span class="pre">uint16_t</span> <code class="sig-name descname"><span class="pre">si_sector_in_range</span></code><a class="headerlink" href="#c.si_sector_in_range" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.fcb_init">
<span class="target" id="group___f_c_b_1gaca464dc27ceff4033505b08273e86165"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_init</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_init" title="fcb"><span class="pre">fcb</span></a> <span class="pre">*</span><em><span class="pre">fcb</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_init" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.fcb_append">
<span class="target" id="group___f_c_b_1ga50cf034bf22db571855664d0043b6bed"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_append</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb" title="fcb"><span class="pre">fcb</span></a><span class="pre">*</span>, <span class="pre">uint16_t</span> <em><span class="pre">len</span></em>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_entry" title="fcb_entry"><span class="pre">fcb_entry</span></a> <span class="pre">*</span><em><span class="pre">loc</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_append" title="Permalink to this definition"></a><br /></dt>
<dd><p><a class="reference internal" href="#group___f_c_b_1ga50cf034bf22db571855664d0043b6bed"><span class="std std-ref">fcb_append()</span></a> appends an entry to circular buffer. </p>
<p>When writing the contents for the entry, use loc-&gt;fl_area and loc-&gt;fl_data_off with flash_area_write(). When you’re finished, call <a class="reference internal" href="#group___f_c_b_1ga305609965a81896243492751f0a2bcf9"><span class="std std-ref">fcb_append_finish()</span></a> with loc as argument.</p>
<p>When writing the contents for the entry, <a class="reference internal" href="#group___f_c_b_1ga946c03af503c0ac13503d2ab4d9a6702"><span class="std std-ref">fcb_write()</span></a> with <a class="reference internal" href="#structfcb__entry"><span class="std std-ref">fcb_entry</span></a> filled by. <a class="reference internal" href="#group___f_c_b_1ga50cf034bf22db571855664d0043b6bed"><span class="std std-ref">fcb_append()</span></a>. When you’re finished, call <a class="reference internal" href="#group___f_c_b_1ga305609965a81896243492751f0a2bcf9"><span class="std std-ref">fcb_append_finish()</span></a> with loc as argument. </p>
</dd></dl>
<dl class="c function">
<dt id="c.fcb_append_finish">
<span class="target" id="group___f_c_b_1ga305609965a81896243492751f0a2bcf9"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_append_finish</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb" title="fcb"><span class="pre">fcb</span></a><span class="pre">*</span>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_entry" title="fcb_entry"><span class="pre">fcb_entry</span></a> <span class="pre">*</span><em><span class="pre">append_loc</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_append_finish" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.fcb_walk">
<span class="target" id="group___f_c_b_1gaec1b7a8b950dbfec1b0fec62b31592a3"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_walk</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb" title="fcb"><span class="pre">fcb</span></a><span class="pre">*</span>, <em class="property"><span class="pre">struct</span></em> <span class="pre">flash_area</span><span class="pre">*</span>, <a class="reference internal" href="#c.fcb_walk_cb" title="fcb_walk_cb"><span class="pre">fcb_walk_cb</span></a> <em><span class="pre">cb</span></em>, <span class="pre">void</span> <span class="pre">*</span><em><span class="pre">cb_arg</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_walk" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.fcb_getnext">
<span class="target" id="group___f_c_b_1ga98129247e1f0a26313345067dc3776d0"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_getnext</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb" title="fcb"><span class="pre">fcb</span></a><span class="pre">*</span>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_entry" title="fcb_entry"><span class="pre">fcb_entry</span></a> <span class="pre">*</span><em><span class="pre">loc</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_getnext" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.fcb_rotate">
<span class="target" id="group___f_c_b_1ga47d0b2d120f101a82dc2eb9e712006c5"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_rotate</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb" title="fcb"><span class="pre">fcb</span></a><span class="pre">*</span><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_rotate" title="Permalink to this definition"></a><br /></dt>
<dd><p>Erases the data from oldest sector. </p>
</dd></dl>
<dl class="c function">
<dt id="c.fcb_append_to_scratch">
<span class="target" id="group___f_c_b_1ga150beafa3be414576a236fbfbdf25356"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_append_to_scratch</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb" title="fcb"><span class="pre">fcb</span></a><span class="pre">*</span><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_append_to_scratch" title="Permalink to this definition"></a><br /></dt>
<dd><p>Start using the scratch block. </p>
</dd></dl>
<dl class="c function">
<dt id="c.fcb_free_sector_cnt">
<span class="target" id="group___f_c_b_1ga2dec5f90b687466997eb25be43448daa"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_free_sector_cnt</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_free_sector_cnt" title="fcb"><span class="pre">fcb</span></a> <span class="pre">*</span><em><span class="pre">fcb</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_free_sector_cnt" title="Permalink to this definition"></a><br /></dt>
<dd><p>How many sectors are unused. </p>
</dd></dl>
<dl class="c function">
<dt id="c.fcb_is_empty">
<span class="target" id="group___f_c_b_1ga76d29d337d5e457f065ed897297ba6cb"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_is_empty</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_is_empty" title="fcb"><span class="pre">fcb</span></a> <span class="pre">*</span><em><span class="pre">fcb</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_is_empty" title="Permalink to this definition"></a><br /></dt>
<dd><p>Whether FCB has any data. </p>
</dd></dl>
<dl class="c function">
<dt id="c.fcb_offset_last_n">
<span class="target" id="group___f_c_b_1gacf4b86d660b7f3a3b73477defd86590c"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_offset_last_n</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_offset_last_n" title="fcb"><span class="pre">fcb</span></a> <span class="pre">*</span><em><span class="pre">fcb</span></em>, <span class="pre">uint8_t</span> <em><span class="pre">entries</span></em>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_entry" title="fcb_entry"><span class="pre">fcb_entry</span></a> <span class="pre">*</span><em><span class="pre">last_n_entry</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_offset_last_n" title="Permalink to this definition"></a><br /></dt>
<dd><p>Element at offset <em>entries</em> from last position (backwards). </p>
</dd></dl>
<dl class="c function">
<dt id="c.fcb_clear">
<span class="target" id="group___f_c_b_1gab3d5c09980af72f0de1692682c8dfef1"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_clear</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_clear" title="fcb"><span class="pre">fcb</span></a> <span class="pre">*</span><em><span class="pre">fcb</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_clear" title="Permalink to this definition"></a><br /></dt>
<dd><p>Clears FCB passed to it. </p>
</dd></dl>
<dl class="c function">
<dt id="c.fcb_area_info">
<span class="target" id="group___f_c_b_1ga537ad86e219488d94427a661df947a38"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_area_info</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_area_info" title="fcb"><span class="pre">fcb</span></a> <span class="pre">*</span><em><span class="pre">fcb</span></em>, <em class="property"><span class="pre">struct</span></em> <span class="pre">flash_area</span> <span class="pre">*</span><em><span class="pre">fa</span></em>, <span class="pre">int</span> <span class="pre">*</span><em><span class="pre">elemsp</span></em>, <span class="pre">int</span> <span class="pre">*</span><em><span class="pre">bytesp</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_area_info" title="Permalink to this definition"></a><br /></dt>
<dd><p>Usage report for a given FCB area. </p>
<p>Returns number of elements and the number of bytes stored in them. </p>
</dd></dl>
<dl class="c function">
<dt id="c.fcb_log_init_bmarks">
<span class="target" id="group___f_c_b_1gaf1db1cb642b18d65054959c212590804"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">fcb_log_init_bmarks</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_log_init_bmarks" title="fcb_log"><span class="pre">fcb_log</span></a> <span class="pre">*</span><em><span class="pre">fcb_log</span></em>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_log_bmark" title="fcb_log_bmark"><span class="pre">fcb_log_bmark</span></a> <span class="pre">*</span><em><span class="pre">buf</span></em>, <span class="pre">int</span> <em><span class="pre">bmark_count</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_log_init_bmarks" title="Permalink to this definition"></a><br /></dt>
<dd><p>Bookmarks are an optimization to speed up lookups in FCB-backed logs. </p>
<p>The concept is simple: maintain a set of flash area+offset pairs corresponding to recently found log entries. When we perform a log lookup, the walk starts from the bookmark closest to our desired entry rather than from the beginning of the log.</p>
<p>Bookmarks are stored in a circular buffer in the <a class="reference internal" href="#structfcb__log"><span class="std std-ref">fcb_log</span></a> object. Each time the log is walked, the starting point of the walk is added to the set of bookmarks.</p>
<p>FCB rotation invalidates all bookmarks. It is up to the client code to clear a log’s bookmarks whenever rotation occurs.</p>
<p>Configures an <a class="reference internal" href="#structfcb__log"><span class="std std-ref">fcb_log</span></a> to use the specified buffer for bookmarks.</p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><a class="reference internal" href="#structfcb__log"><span class="std std-ref"><span class="pre">fcb_log</span></span></a></code>: The log to configure. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bmarks</span></code>: The buffer to use for bookmarks. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bmark_count</span></code>: The bookmark capacity of the supplied buffer. </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.fcb_log_clear_bmarks">
<span class="target" id="group___f_c_b_1ga7e66e21fc8a316f291754188cb72d53e"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">fcb_log_clear_bmarks</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_log_clear_bmarks" title="fcb_log"><span class="pre">fcb_log</span></a> <span class="pre">*</span><em><span class="pre">fcb_log</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_log_clear_bmarks" title="Permalink to this definition"></a><br /></dt>
<dd><p>Erases all bookmarks from the supplied <a class="reference internal" href="#structfcb__log"><span class="std std-ref">fcb_log</span></a>. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><a class="reference internal" href="#structfcb__log"><span class="std std-ref"><span class="pre">fcb_log</span></span></a></code>: The <a class="reference internal" href="#structfcb__log"><span class="std std-ref">fcb_log</span></a> to clear. </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.fcb_log_closest_bmark">
<span class="target" id="group___f_c_b_1gadec4fdc4b347d00fd580ca847acf43b6"></span><em class="property"><span class="pre">const</span></em> <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_log_bmark" title="fcb_log_bmark"><span class="pre">fcb_log_bmark</span></a> <span class="pre">*</span><code class="sig-name descname"><span class="pre">fcb_log_closest_bmark</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">const</span></em> <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_log_closest_bmark" title="fcb_log"><span class="pre">fcb_log</span></a> <span class="pre">*</span><em><span class="pre">fcb_log</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">index</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_log_closest_bmark" title="Permalink to this definition"></a><br /></dt>
<dd><p>Searches an <a class="reference internal" href="#structfcb__log"><span class="std std-ref">fcb_log</span></a> for the closest bookmark that comes before or at the specified index. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>The closest bookmark on success; NULL if the log has no applicable bookmarks. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><a class="reference internal" href="#structfcb__log"><span class="std std-ref"><span class="pre">fcb_log</span></span></a></code>: The log to search. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">index</span></code>: The index to look for.</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.fcb_log_add_bmark">
<span class="target" id="group___f_c_b_1ga91719a09b3f854c8449ba7cc9e52c1aa"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">fcb_log_add_bmark</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_log_add_bmark" title="fcb_log"><span class="pre">fcb_log</span></a> <span class="pre">*</span><em><span class="pre">fcb_log</span></em>, <em class="property"><span class="pre">const</span></em> <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_entry" title="fcb_entry"><span class="pre">fcb_entry</span></a> <span class="pre">*</span><em><span class="pre">entry</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">index</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_log_add_bmark" title="Permalink to this definition"></a><br /></dt>
<dd><p>Inserts a bookmark into the provided log. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><a class="reference internal" href="#structfcb__log"><span class="std std-ref"><span class="pre">fcb_log</span></span></a></code>: The log to insert a bookmark into. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">entry</span></code>: The entry the bookmark should point to. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">index</span></code>: The log entry index of the bookmark. </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.fcb_init_flash_area">
<span class="target" id="group___f_c_b_1ga28de960f84d694da036075a58badc2a4"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_init_flash_area</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_init_flash_area" title="fcb"><span class="pre">fcb</span></a> <span class="pre">*</span><em><span class="pre">fcb</span></em>, <span class="pre">int</span> <em><span class="pre">flash_area_id</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">magic</span></em>, <span class="pre">uint8_t</span> <em><span class="pre">version</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_init_flash_area" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.fcb_write">
<span class="target" id="group___f_c_b_1ga946c03af503c0ac13503d2ab4d9a6702"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_write</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_entry" title="fcb_entry"><span class="pre">fcb_entry</span></a> <span class="pre">*</span><em><span class="pre">loc</span></em>, <span class="pre">uint16_t</span> <em><span class="pre">off</span></em>, <span class="pre">void</span> <span class="pre">*</span><em><span class="pre">buf</span></em>, <span class="pre">uint16_t</span> <em><span class="pre">len</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_write" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt>
<span class="target" id="group___f_c_b_1gac39cdfddc5c82b9fa9b56946a095255b"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_append_finish</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_entry" title="fcb_entry"><span class="pre">fcb_entry</span></a> <span class="pre">*</span><em><span class="pre">append_loc</span></em><span class="sig-paren">)</span><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt>
<span class="target" id="group___f_c_b_1gab2c21db85a06aa26b6f46554ace55bcd"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_walk</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb" title="fcb"><span class="pre">fcb</span></a><span class="pre">*</span>, <span class="pre">int</span> <em><span class="pre">sector</span></em>, <a class="reference internal" href="#c.fcb_walk_cb" title="fcb_walk_cb"><span class="pre">fcb_walk_cb</span></a> <em><span class="pre">cb</span></em>, <span class="pre">void</span> <span class="pre">*</span><em><span class="pre">cb_arg</span></em><span class="sig-paren">)</span><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.fcb_read">
<span class="target" id="group___f_c_b_1ga52ba7c1520307db1138494cf4a299e59"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_read</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_entry" title="fcb_entry"><span class="pre">fcb_entry</span></a> <span class="pre">*</span><em><span class="pre">loc</span></em>, <span class="pre">uint16_t</span> <em><span class="pre">off</span></em>, <span class="pre">void</span> <span class="pre">*</span><em><span class="pre">buf</span></em>, <span class="pre">uint16_t</span> <em><span class="pre">len</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_read" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.fcb_get_total_size">
<span class="target" id="group___f_c_b_1ga4326a6356021de568c4deced2973dcf4"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_get_total_size</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">const</span></em> <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_get_total_size" title="fcb"><span class="pre">fcb</span></a> <span class="pre">*</span><em><span class="pre">fcb</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.fcb_get_total_size" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get total size of FCB. </p>
<p><p>return FCB’s size in bytes </p>
<dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">fcb</span></code>: FCB to use</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt>
<span class="target" id="group___f_c_b_1ga27b1e91fde2938f961ead86b7d25ee6d"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fcb_area_info</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_area_info" title="fcb"><span class="pre">fcb</span></a> <span class="pre">*</span><em><span class="pre">fcb</span></em>, <span class="pre">int</span> <em><span class="pre">sector</span></em>, <span class="pre">int</span> <span class="pre">*</span><em><span class="pre">elemsp</span></em>, <span class="pre">int</span> <span class="pre">*</span><em><span class="pre">bytesp</span></em><span class="sig-paren">)</span><br /></dt>
<dd><p>Usage report for a given FCB sector. </p>
<p>Returns number of elements and the number of bytes stored in them. </p>
</dd></dl>
<dl class="c macro">
<dt id="c.FCB_MAX_LEN">
<span class="target" id="group___f_c_b_1gaccabb1cb7f83c0d8919571cf3de7ee47"></span><code class="sig-name descname"><span class="pre">FCB_MAX_LEN</span></code><a class="headerlink" href="#c.FCB_MAX_LEN" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt id="c.FCB_OK">
<span class="target" id="group___f_c_b_1ga739a2dd44516b9d25d2bd36a3e9a1ced"></span><code class="sig-name descname"><span class="pre">FCB_OK</span></code><a class="headerlink" href="#c.FCB_OK" title="Permalink to this definition"></a><br /></dt>
<dd><p>Error codes. </p>
</dd></dl>
<dl class="c macro">
<dt id="c.FCB_ERR_ARGS">
<span class="target" id="group___f_c_b_1ga3ade25493981aedb4cb47364e142506a"></span><code class="sig-name descname"><span class="pre">FCB_ERR_ARGS</span></code><a class="headerlink" href="#c.FCB_ERR_ARGS" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt id="c.FCB_ERR_FLASH">
<span class="target" id="group___f_c_b_1gaab70b4f6510d4e25795342340ebaaf1a"></span><code class="sig-name descname"><span class="pre">FCB_ERR_FLASH</span></code><a class="headerlink" href="#c.FCB_ERR_FLASH" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt id="c.FCB_ERR_NOVAR">
<span class="target" id="group___f_c_b_1ga8ef0ddd5218f7d3d266a1a522f5f118a"></span><code class="sig-name descname"><span class="pre">FCB_ERR_NOVAR</span></code><a class="headerlink" href="#c.FCB_ERR_NOVAR" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt id="c.FCB_ERR_NOSPACE">
<span class="target" id="group___f_c_b_1gaeda9a197227518600f3c559738f90f0b"></span><code class="sig-name descname"><span class="pre">FCB_ERR_NOSPACE</span></code><a class="headerlink" href="#c.FCB_ERR_NOSPACE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt id="c.FCB_ERR_NOMEM">
<span class="target" id="group___f_c_b_1gad5ac56f5f9a67b46c65f2fade0c21b97"></span><code class="sig-name descname"><span class="pre">FCB_ERR_NOMEM</span></code><a class="headerlink" href="#c.FCB_ERR_NOMEM" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt id="c.FCB_ERR_CRC">
<span class="target" id="group___f_c_b_1ga16da332cd464586e9193face6bc3227e"></span><code class="sig-name descname"><span class="pre">FCB_ERR_CRC</span></code><a class="headerlink" href="#c.FCB_ERR_CRC" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt id="c.FCB_ERR_MAGIC">
<span class="target" id="group___f_c_b_1ga46efb14fbda927e4b400c35255111b1c"></span><code class="sig-name descname"><span class="pre">FCB_ERR_MAGIC</span></code><a class="headerlink" href="#c.FCB_ERR_MAGIC" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt id="c.FCB_ERR_VERSION">
<span class="target" id="group___f_c_b_1gab57024b8ae61f7b69c7a52c07591395c"></span><code class="sig-name descname"><span class="pre">FCB_ERR_VERSION</span></code><a class="headerlink" href="#c.FCB_ERR_VERSION" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt>
<span class="target" id="group___f_c_b_1gaccabb1cb7f83c0d8919571cf3de7ee47"></span><code class="sig-name descname"><span class="pre">FCB_MAX_LEN</span></code><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt id="c.FCB_SECTOR_OLDEST">
<span class="target" id="group___f_c_b_1gafdb2ceeac6215db2c6bd419b746aa234"></span><code class="sig-name descname"><span class="pre">FCB_SECTOR_OLDEST</span></code><a class="headerlink" href="#c.FCB_SECTOR_OLDEST" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt id="c.FCB_ENTRY_SIZE">
<span class="target" id="group___f_c_b_1gafca07367e1a71c2afde5ab653de08ab4"></span><code class="sig-name descname"><span class="pre">FCB_ENTRY_SIZE</span></code><a class="headerlink" href="#c.FCB_ENTRY_SIZE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt id="c.FCB_CRC_LEN">
<span class="target" id="group___f_c_b_1gae0d4d10bbca5410ace610de9897970c7"></span><code class="sig-name descname"><span class="pre">FCB_CRC_LEN</span></code><a class="headerlink" href="#c.FCB_CRC_LEN" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt>
<span class="target" id="group___f_c_b_1ga739a2dd44516b9d25d2bd36a3e9a1ced"></span><code class="sig-name descname"><span class="pre">FCB_OK</span></code><br /></dt>
<dd><p>Error codes. </p>
</dd></dl>
<dl class="c macro">
<dt>
<span class="target" id="group___f_c_b_1ga3ade25493981aedb4cb47364e142506a"></span><code class="sig-name descname"><span class="pre">FCB_ERR_ARGS</span></code><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt>
<span class="target" id="group___f_c_b_1gaab70b4f6510d4e25795342340ebaaf1a"></span><code class="sig-name descname"><span class="pre">FCB_ERR_FLASH</span></code><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt>
<span class="target" id="group___f_c_b_1ga8ef0ddd5218f7d3d266a1a522f5f118a"></span><code class="sig-name descname"><span class="pre">FCB_ERR_NOVAR</span></code><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt>
<span class="target" id="group___f_c_b_1gaeda9a197227518600f3c559738f90f0b"></span><code class="sig-name descname"><span class="pre">FCB_ERR_NOSPACE</span></code><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt>
<span class="target" id="group___f_c_b_1gad5ac56f5f9a67b46c65f2fade0c21b97"></span><code class="sig-name descname"><span class="pre">FCB_ERR_NOMEM</span></code><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt>
<span class="target" id="group___f_c_b_1ga16da332cd464586e9193face6bc3227e"></span><code class="sig-name descname"><span class="pre">FCB_ERR_CRC</span></code><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt>
<span class="target" id="group___f_c_b_1ga46efb14fbda927e4b400c35255111b1c"></span><code class="sig-name descname"><span class="pre">FCB_ERR_MAGIC</span></code><br /></dt>
<dd></dd></dl>
<dl class="c macro">
<dt>
<span class="target" id="group___f_c_b_1gab57024b8ae61f7b69c7a52c07591395c"></span><code class="sig-name descname"><span class="pre">FCB_ERR_VERSION</span></code><br /></dt>
<dd></dd></dl>
<dl class="c struct">
<dt id="c.fcb_entry">
<span class="target" id="structfcb__entry"></span><em class="property"><span class="pre">struct</span> </em><code class="sig-name descname"><span class="pre">fcb_entry</span></code><a class="headerlink" href="#c.fcb_entry" title="Permalink to this definition"></a><br /></dt>
<dd><em>#include &lt;fcb.h&gt;</em><p>Entry location is pointer to area (within fcb-&gt;f_sectors), and offset within that area. </p>
<p>Entry location point to sector, and offset within that sector. </p>
</dd></dl>
<dl class="c struct">
<dt id="c.fcb">
<span class="target" id="structfcb"></span><em class="property"><span class="pre">struct</span> </em><code class="sig-name descname"><span class="pre">fcb</span></code><a class="headerlink" href="#c.fcb" title="Permalink to this definition"></a><br /></dt>
<dd><em>#include &lt;fcb.h&gt;</em></dd></dl>
<dl class="c struct">
<dt id="c.fcb_log_bmark">
<span class="target" id="structfcb__log__bmark"></span><em class="property"><span class="pre">struct</span> </em><code class="sig-name descname"><span class="pre">fcb_log_bmark</span></code><a class="headerlink" href="#c.fcb_log_bmark" title="Permalink to this definition"></a><br /></dt>
<dd><em>#include &lt;fcb.h&gt;</em><p>An individual fcb log bookmark. </p>
</dd></dl>
<dl class="c struct">
<dt id="c.fcb_log_bset">
<span class="target" id="structfcb__log__bset"></span><em class="property"><span class="pre">struct</span> </em><code class="sig-name descname"><span class="pre">fcb_log_bset</span></code><a class="headerlink" href="#c.fcb_log_bset" title="Permalink to this definition"></a><br /></dt>
<dd><em>#include &lt;fcb.h&gt;</em><p>A set of fcb log bookmarks. </p>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-members">Public Members</p>
<dl class="c var">
<dt id="c.fcb_log_bset.fls_bmarks">
<span class="target" id="group___f_c_b_1ga7d07ba6c5428b1aadae8df24a33c1f1f"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.fcb_log_bmark" title="fcb_log_bmark"><span class="pre">fcb_log_bmark</span></a> <span class="pre">*</span><code class="sig-name descname"><span class="pre">fls_bmarks</span></code><a class="headerlink" href="#c.fcb_log_bset.fls_bmarks" title="Permalink to this definition"></a><br /></dt>
<dd><p>Array of bookmarks. </p>
</dd></dl>
<dl class="c var">
<dt id="c.fcb_log_bset.fls_cap">
<span class="target" id="group___f_c_b_1ga416ca0eaefc8529bb92c330079d1939c"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fls_cap</span></code><a class="headerlink" href="#c.fcb_log_bset.fls_cap" title="Permalink to this definition"></a><br /></dt>
<dd><p>The maximum number of bookmarks. </p>
</dd></dl>
<dl class="c var">
<dt id="c.fcb_log_bset.fls_size">
<span class="target" id="group___f_c_b_1gabb1a01009772154db6147c1303f4cd24"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fls_size</span></code><a class="headerlink" href="#c.fcb_log_bset.fls_size" title="Permalink to this definition"></a><br /></dt>
<dd><p>The number of currently usable bookmarks. </p>
</dd></dl>
<dl class="c var">
<dt id="c.fcb_log_bset.fls_next">
<span class="target" id="group___f_c_b_1ga44e47f92685d97e8fd92a5278f46bbd3"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">fls_next</span></code><a class="headerlink" href="#c.fcb_log_bset.fls_next" title="Permalink to this definition"></a><br /></dt>
<dd><p>The index where the next bookmark will get written. </p>
</dd></dl>
</div>
</dd></dl>
<dl class="c struct">
<dt id="c.fcb_log">
<span class="target" id="structfcb__log"></span><em class="property"><span class="pre">struct</span> </em><code class="sig-name descname"><span class="pre">fcb_log</span></code><a class="headerlink" href="#c.fcb_log" title="Permalink to this definition"></a><br /></dt>
<dd><em>#include &lt;fcb.h&gt;</em><p><a class="reference internal" href="#structfcb__log"><span class="std std-ref">fcb_log</span></a> is needed as the number of entries in a log </p>
</dd></dl>
<dl class="c struct">
<dt id="c.fcb_sector_info">
<span class="target" id="structfcb__sector__info"></span><em class="property"><span class="pre">struct</span> </em><code class="sig-name descname"><span class="pre">fcb_sector_info</span></code><a class="headerlink" href="#c.fcb_sector_info" title="Permalink to this definition"></a><br /></dt>
<dd><em>#include &lt;fcb.h&gt;</em></dd></dl>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="../sensor_framework/sensor_framework.html" class="btn btn-neutral float-right" title="Mynewt Sensor Framework Overview" accesskey="n">Next: Mynewt Sensor Framework Overview <span class="fa fa-arrow-circle-right"></span></a>
<a href="../fs/fs_add.html" class="btn btn-neutral" title="Adding a new file system" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Adding a new file system</a>
</div>
</div>
</div>
</div>
<!-- ENDS CONTENT SECTION -->
</div>
<!-- ENDS .content -->
</div>
</div>
<footer>
<div class="container">
<div class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<img src="../../../_static/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
<small class="footnote">
Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt project logo are either
registered trademarks or trademarks of the Apache Software Foundation in the United States and other countries.
</small>
<a href="">
<img src="../../../_static/img/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- ENDS #wrapper -->
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../../../',
VERSION:'latest',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
LINK_SUFFIX: '.html'
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/js/bootstrap-3.0.3.min.js"></script>
<script type="text/javascript" src="../../../_static/js/affix.js"></script>
<script type="text/javascript" src="../../../_static/js/main.js"></script>
</body>
</html>