Files
libaaruformat/docs/html/flux_8h.html

266 lines
17 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.15.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libaaruformat: include/aaruformat/structs/flux.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">libaaruformat<span id="projectnumber">&#160;1.0</span>
</div>
<div id="projectbrief">Aaru Data Preservation Suite - Format Library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.15.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('flux_8h.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">flux.h File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Data structures for flux transition capture support in Aaru disk images.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br />
</div>
<p><a href="flux_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:FluxHeader" id="r_FluxHeader"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFluxHeader.html">FluxHeader</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Header structure for a FluxDataBlock containing flux capture metadata. <a href="structFluxHeader.html#details">More...</a><br /></td></tr>
<tr class="memitem:FluxEntry" id="r_FluxEntry"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFluxEntry.html">FluxEntry</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Metadata entry describing a single flux capture in the FluxDataBlock. <a href="structFluxEntry.html#details">More...</a><br /></td></tr>
<tr class="memitem:FluxCaptureMeta" id="r_FluxCaptureMeta"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFluxCaptureMeta.html">FluxCaptureMeta</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Metadata structure returned by <a class="el" href="decls_8h.html#a5f50a859c1849d13a6f4d26d904fb458" title="Retrieve metadata for all flux captures in the image.">aaruf_get_flux_captures()</a>. <a href="structFluxCaptureMeta.html#details">More...</a><br /></td></tr>
<tr class="memitem:DataStreamPayloadHeader" id="r_DataStreamPayloadHeader"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDataStreamPayloadHeader.html">DataStreamPayloadHeader</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Header structure for a DataStreamPayloadBlock containing data stream payload. <a href="structDataStreamPayloadHeader.html#details">More...</a><br /></td></tr>
<tr class="memitem:FluxCaptureRecord" id="r_FluxCaptureRecord"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFluxCaptureRecord.html">FluxCaptureRecord</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal structure for storing flux capture data during write mode. <a href="structFluxCaptureRecord.html#details">More...</a><br /></td></tr>
<tr class="memitem:FluxCaptureKey" id="r_FluxCaptureKey"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFluxCaptureKey.html">FluxCaptureKey</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Key structure for flux capture lookup map. <a href="structFluxCaptureKey.html#details">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-typedef-members" class="groupheader"><a id="typedef-members" name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a360dcd7eac2540e0979c10fb59fe3792" id="r_a360dcd7eac2540e0979c10fb59fe3792"><td class="memItemLeft" align="right" valign="top">typedef struct FluxHeader&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a360dcd7eac2540e0979c10fb59fe3792">FluxHeader</a></td></tr>
<tr class="memitem:a8cdda65d99453768e84ec91140d481df" id="r_a8cdda65d99453768e84ec91140d481df"><td class="memItemLeft" align="right" valign="top">typedef struct FluxEntry&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8cdda65d99453768e84ec91140d481df">FluxEntry</a></td></tr>
<tr class="memitem:a7276c29de57a7ddfd23097406c5c7d2a" id="r_a7276c29de57a7ddfd23097406c5c7d2a"><td class="memItemLeft" align="right" valign="top">typedef struct FluxCaptureMeta&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7276c29de57a7ddfd23097406c5c7d2a">FluxCaptureMeta</a></td></tr>
<tr class="memitem:a50fa327e8a58dfdff148b7c2f5d8c381" id="r_a50fa327e8a58dfdff148b7c2f5d8c381"><td class="memItemLeft" align="right" valign="top">typedef struct DataStreamPayloadHeader&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a50fa327e8a58dfdff148b7c2f5d8c381">DataStreamPayloadHeader</a></td></tr>
<tr class="memitem:a1c0aec18cdb24ce2cda6012dace51280" id="r_a1c0aec18cdb24ce2cda6012dace51280"><td class="memItemLeft" align="right" valign="top">typedef struct FluxCaptureRecord&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1c0aec18cdb24ce2cda6012dace51280">FluxCaptureRecord</a></td></tr>
<tr class="memitem:a7fb7328107aba7dd1f8face5eb2977b8" id="r_a7fb7328107aba7dd1f8face5eb2977b8"><td class="memItemLeft" align="right" valign="top">typedef struct FluxCaptureKey&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7fb7328107aba7dd1f8face5eb2977b8">FluxCaptureKey</a></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Data structures for flux transition capture support in Aaru disk images. </p>
<p>This header defines structures used to represent flux transition data captured from magnetic media. Flux transitions are the raw analog signals read from magnetic storage devices (such as floppy disks, hard drives, and tape) before they are interpreted into digital data.</p>
<p><b>Flux Capture Overview:</b> Certain hardware devices, such as Kryoflux, Pauline, and Applesauce, read magnetic media at the flux transition level rather than at the sector level. This provides a more complete representation of the analog properties of the media, allowing for advanced recovery techniques and preservation of media characteristics that would be lost in sector-level imaging.</p>
<p><b>Block Structure:</b> Flux data is stored in two block types:</p><ul>
<li>FluxDataBlock: Contains metadata entries describing all flux captures in the image. Each entry includes location information (head, track, subtrack), capture index, resolution data, and file offsets to the payload blocks.</li>
<li>DataStreamPayloadBlock: Contains the actual flux data and index buffers for a single capture. Payload blocks may be compressed using LZMA compression.</li>
</ul>
<p><b>Data Organization:</b> Each flux capture includes two data streams:</p><ul>
<li>Data buffer: Raw flux transition timing data, represented as an array of uint8_t bytes where each byte stores the tick count since the last flux transition. The value 0xFF indicates no transition within the byte range.</li>
<li>Index buffer: Index structure mapping logical positions to offsets within the data buffer, enabling efficient access to specific regions of the flux data.</li>
</ul>
<p><b>Capture Identification:</b> Flux captures are uniquely identified by a tuple of (head, track, subtrack, captureIndex). This allows multiple captures for the same physical location, which is useful for capturing multiple revolutions of a floppy disk track or different read attempts.</p>
<p><b>Resolution:</b> Each capture specifies two resolution values:</p><ul>
<li>dataResolution: The sampling resolution in picoseconds for the data stream</li>
<li>indexResolution: The sampling resolution in picoseconds for the index stream</li>
</ul>
<p>These resolutions determine the precision of the timing measurements and are hardware-dependent.</p>
<p><b>Storage Efficiency:</b> Payload blocks support LZMA compression to reduce storage requirements. The compression is transparent to the API user - <a class="el" href="decls_8h.html#a4592e2f67d77e1ee35d14cfca412add0" title="Read a specific flux capture&#39;s data and index buffers from the image.">aaruf_read_flux_capture()</a> handles decompression automatically.</p>
<p><b>Use Cases:</b></p><ul>
<li>Preservation of magnetic media at the lowest level possible</li>
<li>Recovery of data from damaged or degraded media</li>
<li>Analysis of media characteristics and timing variations</li>
<li>Emulation and accurate reproduction of original media behavior</li>
<li>Forensic imaging where complete bit-level accuracy is required</li>
</ul>
<dl class="section note"><dt>Note</dt><dd>All structures in this file use packed alignment (#pragma pack(push, 1)) to ensure consistent on-disk layout across different compilers and platforms.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3" title="List of known block types contained in an Aaru image.">BlockType</a> for the identifier constants used in <a class="el" href="structFluxHeader.html" title="Header structure for a FluxDataBlock containing flux capture metadata.">FluxHeader</a> and <a class="el" href="structDataStreamPayloadHeader.html" title="Header structure for a DataStreamPayloadBlock containing data stream payload.">DataStreamPayloadHeader</a> </dd>
<dd>
<a class="el" href="decls_8h.html#a5f50a859c1849d13a6f4d26d904fb458" title="Retrieve metadata for all flux captures in the image.">aaruf_get_flux_captures()</a> to retrieve metadata for all captures </dd>
<dd>
<a class="el" href="decls_8h.html#a4592e2f67d77e1ee35d14cfca412add0" title="Read a specific flux capture&#39;s data and index buffers from the image.">aaruf_read_flux_capture()</a> to read actual flux data </dd>
<dd>
<a class="el" href="decls_8h.html#ae11fa81212d9e363d8761e849859bab8" title="Add a flux capture to the image during write mode.">aaruf_write_flux_capture()</a> to add flux captures during write mode </dd></dl>
<p class="definition">Definition in file <a class="el" href="flux_8h_source.html">flux.h</a>.</p>
</div><a name="doc-typedef-members" id="doc-typedef-members"></a><h2 id="header-doc-typedef-members" class="groupheader">Typedef Documentation</h2>
<a id="a50fa327e8a58dfdff148b7c2f5d8c381" name="a50fa327e8a58dfdff148b7c2f5d8c381"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a50fa327e8a58dfdff148b7c2f5d8c381">&#9670;&#160;</a></span>DataStreamPayloadHeader</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct DataStreamPayloadHeader DataStreamPayloadHeader</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a7fb7328107aba7dd1f8face5eb2977b8" name="a7fb7328107aba7dd1f8face5eb2977b8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7fb7328107aba7dd1f8face5eb2977b8">&#9670;&#160;</a></span>FluxCaptureKey</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct FluxCaptureKey FluxCaptureKey</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a7276c29de57a7ddfd23097406c5c7d2a" name="a7276c29de57a7ddfd23097406c5c7d2a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7276c29de57a7ddfd23097406c5c7d2a">&#9670;&#160;</a></span>FluxCaptureMeta</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct FluxCaptureMeta FluxCaptureMeta</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a1c0aec18cdb24ce2cda6012dace51280" name="a1c0aec18cdb24ce2cda6012dace51280"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c0aec18cdb24ce2cda6012dace51280">&#9670;&#160;</a></span>FluxCaptureRecord</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct FluxCaptureRecord FluxCaptureRecord</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a8cdda65d99453768e84ec91140d481df" name="a8cdda65d99453768e84ec91140d481df"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8cdda65d99453768e84ec91140d481df">&#9670;&#160;</a></span>FluxEntry</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct FluxEntry FluxEntry</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a360dcd7eac2540e0979c10fb59fe3792" name="a360dcd7eac2540e0979c10fb59fe3792"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a360dcd7eac2540e0979c10fb59fe3792">&#9670;&#160;</a></span>FluxHeader</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct FluxHeader FluxHeader</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a href="dir_aeff2545c9dfcfc842fe9d84b123cb31.html">aaruformat</a></li><li class="navelem"><a href="dir_6387aeb6e475a334d8dc12d69f21999e.html">structs</a></li><li class="navelem"><a href="flux_8h.html">flux.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.15.0 </li>
</ul>
</div>
</body>
</html>