Files
libaaruformat/docs/html/dpm_8h.html

323 lines
19 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.18.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libaaruformat: include/aaruformat/structs/dpm.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="codefolding.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.18.0 -->
<script type="text/javascript">
let searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', codefold.init);
</script>
<script type="application/json" id="doxygen-config">
{
"relPath": "",
"generateTreeView": true,
"searchEngine": true,
"serverBasedSearch": false,
"disableIndex": false,
"dynamicMenus": true,
"fullSidebar": false
}
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<div id="main-nav-mobile">
<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
<label class="main-menu-btn" for="main-menu-state">
<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
<span id="searchBoxPos1"></span>
</div>
</div><!-- main-nav-mobile -->
<div id="main-nav">
<ul class="sm sm-dox" id="main-menu">
<li id="searchBoxPos2">
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
</span>
</div>
</li>
</ul>
</div><!-- main-nav -->
</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" class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded',() => { initNavTree('dpm_8h.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow">
</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">dpm.h File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Packed on-disk structures of the Data Position Measurement (DPM) block.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br />
</div>
<p><a href="dpm_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:DpmHeader" id="r_DpmHeader"><td class="memItemLeft">struct &#160;</td><td class="memItemRight"><a class="el" href="structDpmHeader.html">DpmHeader</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Header of the Data Position Measurement block. <a href="structDpmHeader.html#details">More...</a><br /></td></tr>
<tr class="memitem:DpmEntry" id="r_DpmEntry"><td class="memItemLeft">struct &#160;</td><td class="memItemRight"><a class="el" href="structDpmEntry.html">DpmEntry</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A DPM control point. <a href="structDpmEntry.html#details">More...</a><br /></td></tr>
<tr class="memitem:DpmCalibration" id="r_DpmCalibration"><td class="memItemLeft">struct &#160;</td><td class="memItemRight"><a class="el" href="structDpmCalibration.html">DpmCalibration</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A rotation calibration done while measuring. <a href="structDpmCalibration.html#details">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a84647319f82a4634b3010c97d4ff014d" id="r_a84647319f82a4634b3010c97d4ff014d"><td class="memItemLeft">#define&#160;</td><td class="memItemRight"><a class="el" href="#a84647319f82a4634b3010c97d4ff014d">DPM_UNITS_PER_TURN</a>&#160;&#160;&#160;2560000</td></tr>
<tr class="memdesc:a84647319f82a4634b3010c97d4ff014d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Angle units per turn, Alcohol 120% units (256 per turn) multiplied by 10000. <br /></td></tr>
<tr class="memitem:aed620d7bdfe29ecea9da806aa504c36e" id="r_aed620d7bdfe29ecea9da806aa504c36e"><td class="memItemLeft">#define&#160;</td><td class="memItemRight"><a class="el" href="#aed620d7bdfe29ecea9da806aa504c36e">DPM_UNITS_PER_ALCOHOL_UNIT</a>&#160;&#160;&#160;10000</td></tr>
<tr class="memdesc:aed620d7bdfe29ecea9da806aa504c36e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Angle units per Alcohol 120% unit. <br /></td></tr>
<tr class="memitem:a58237c1bbc55908dd16a0055bd99b360" id="r_a58237c1bbc55908dd16a0055bd99b360"><td class="memItemLeft">#define&#160;</td><td class="memItemRight"><a class="el" href="#a58237c1bbc55908dd16a0055bd99b360">DPM_FLAG_OPPOSITE_TRACK_PATH</a>&#160;&#160;&#160;0x01</td></tr>
<tr class="memdesc:a58237c1bbc55908dd16a0055bd99b360"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bit set in <a class="el" href="structDpmHeader.html#ac430dca9dfaad5130db4a6a0e172f0b4" title="Flags, see DPM_FLAG_OPPOSITE_TRACK_PATH.">DpmHeader::flags</a> when the layers use opposite track path. <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:a23da14f1db50d37ce9cd5f65cd8cd995" id="r_a23da14f1db50d37ce9cd5f65cd8cd995"><td class="memItemLeft">typedef struct DpmHeader&#160;</td><td class="memItemRight"><a class="el" href="#a23da14f1db50d37ce9cd5f65cd8cd995">DpmHeader</a></td></tr>
<tr class="memitem:aa996b37ef27ac853bef62e13b16a7b24" id="r_aa996b37ef27ac853bef62e13b16a7b24"><td class="memItemLeft">typedef struct DpmEntry&#160;</td><td class="memItemRight"><a class="el" href="#aa996b37ef27ac853bef62e13b16a7b24">DpmEntry</a></td></tr>
<tr class="memitem:a1b04444c118d78eb575213027a50d532" id="r_a1b04444c118d78eb575213027a50d532"><td class="memItemLeft">typedef struct DpmCalibration&#160;</td><td class="memItemRight"><a class="el" href="#a1b04444c118d78eb575213027a50d532">DpmCalibration</a></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-enum-members" class="groupheader"><a id="enum-members" name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:a49f715d63d4c61b4f14b2d3b6102ed3b" id="r_a49f715d63d4c61b4f14b2d3b6102ed3b"><td class="memItemLeft">enum &#160;</td><td class="memItemRight"><a class="el" href="#a49f715d63d4c61b4f14b2d3b6102ed3b">DpmEntryStatus</a> { <br />
&#160;&#160;<a class="el" href="#a49f715d63d4c61b4f14b2d3b6102ed3ba7e43dea4fe33161429b9d2136217d9d2">DpmStatusUnknown</a> = 0
, <a class="el" href="#a49f715d63d4c61b4f14b2d3b6102ed3bac5619ad3aecb3e4a928876b571f91461">DpmStatusMeasured</a> = 1
, <a class="el" href="#a49f715d63d4c61b4f14b2d3b6102ed3bae908ded84a364f97209dfb11d58e6679">DpmStatusRemeasured</a> = 2
, <a class="el" href="#a49f715d63d4c61b4f14b2d3b6102ed3baa80703dfe3c78dee9cfaeecf10ff5268">DpmStatusInterpolated</a> = 3
, <br />
&#160;&#160;<a class="el" href="#a49f715d63d4c61b4f14b2d3b6102ed3baa7e1f200d7384cf53034f14d5e243d9f">DpmStatusUnreadable</a> = 4
, <a class="el" href="#a49f715d63d4c61b4f14b2d3b6102ed3ba29c137da0d9b820291febe4249511954">DpmStatusLayerBreak</a> = 5
<br />
}</td></tr>
<tr class="memdesc:a49f715d63d4c61b4f14b2d3b6102ed3b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Status of the bin of sectors that ends at an entry. <a href="#a49f715d63d4c61b4f14b2d3b6102ed3b">More...</a><br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Packed on-disk structures of the Data Position Measurement (DPM) block. </p>
<p>Data Position Measurement records the physical angle of sectors along the spiral track of an optical disc, as measured by timing reads. The angle is cumulative: it starts at 0 on the first entry and grows by one full turn every <a class="el" href="#a84647319f82a4634b3010c97d4ff014d" title="DPM_UNITS_PER_TURN">DPM_UNITS_PER_TURN</a> units, so it also counts how many times the disc turned.</p>
<p>Binary layout (little-endian, packed):</p>
<p><a class="el" href="structDpmHeader.html" title="Header of the Data Position Measurement block.">DpmHeader</a> (sizeof = 40 bytes) uint64_t layerEnd[layerEnds] -&gt; last sector of every layer but the last, increasing <a class="el" href="structDpmEntry.html" title="A DPM control point.">DpmEntry</a> entry[entries] -&gt; control points, strictly increasing sector <a class="el" href="structDpmCalibration.html" title="A rotation calibration done while measuring.">DpmCalibration</a> calibration[calibrations]</p>
<p>length = layerEnds * 8 + entries * sizeof(DpmEntry) + calibrations * sizeof(DpmCalibration) crc64 = CRC64-ECMA of the length bytes that follow the header</p>
<p>The density, in degrees per sector, of the bin between two consecutive entries is (angle[i + 1] - angle[i]) * 360 / DPM_UNITS_PER_TURN / (lba[i + 1] - lba[i]).</p>
<p>Alcohol 120% stores the same cumulative angle, in 256 units per turn, on a uniform grid. A value of this block divided by <a class="el" href="#aed620d7bdfe29ecea9da806aa504c36e" title="DPM_UNITS_PER_ALCOHOL_UNIT">DPM_UNITS_PER_ALCOHOL_UNIT</a>, rounded, is the Alcohol 120% value.</p>
<dl class="section warning"><dt>Warning</dt><dd>Structures are packed; never rely on natural alignment when mapping from a byte buffer. </dd></dl>
<p class="definition">Definition in file <a class="el" href="dpm_8h_source.html">dpm.h</a>.</p>
</div><a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="a58237c1bbc55908dd16a0055bd99b360" name="a58237c1bbc55908dd16a0055bd99b360"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a58237c1bbc55908dd16a0055bd99b360">&#9670;&#160;</a></span>DPM_FLAG_OPPOSITE_TRACK_PATH</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DPM_FLAG_OPPOSITE_TRACK_PATH&#160;&#160;&#160;0x01</td>
</tr>
</table>
</div><div class="memdoc">
<p>Bit set in <a class="el" href="structDpmHeader.html#ac430dca9dfaad5130db4a6a0e172f0b4" title="Flags, see DPM_FLAG_OPPOSITE_TRACK_PATH.">DpmHeader::flags</a> when the layers use opposite track path. </p>
<p class="definition">Definition at line <a class="el" href="dpm_8h_source.html#l00058">58</a> of file <a class="el" href="dpm_8h_source.html">dpm.h</a>.</p>
</div>
</div>
<a id="aed620d7bdfe29ecea9da806aa504c36e" name="aed620d7bdfe29ecea9da806aa504c36e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aed620d7bdfe29ecea9da806aa504c36e">&#9670;&#160;</a></span>DPM_UNITS_PER_ALCOHOL_UNIT</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DPM_UNITS_PER_ALCOHOL_UNIT&#160;&#160;&#160;10000</td>
</tr>
</table>
</div><div class="memdoc">
<p>Angle units per Alcohol 120% unit. </p>
<p class="definition">Definition at line <a class="el" href="dpm_8h_source.html#l00055">55</a> of file <a class="el" href="dpm_8h_source.html">dpm.h</a>.</p>
</div>
</div>
<a id="a84647319f82a4634b3010c97d4ff014d" name="a84647319f82a4634b3010c97d4ff014d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a84647319f82a4634b3010c97d4ff014d">&#9670;&#160;</a></span>DPM_UNITS_PER_TURN</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DPM_UNITS_PER_TURN&#160;&#160;&#160;2560000</td>
</tr>
</table>
</div><div class="memdoc">
<p>Angle units per turn, Alcohol 120% units (256 per turn) multiplied by 10000. </p>
<p class="definition">Definition at line <a class="el" href="dpm_8h_source.html#l00053">53</a> of file <a class="el" href="dpm_8h_source.html">dpm.h</a>.</p>
</div>
</div>
<a name="doc-typedef-members" id="doc-typedef-members"></a><h2 id="header-doc-typedef-members" class="groupheader">Typedef Documentation</h2>
<a id="a1b04444c118d78eb575213027a50d532" name="a1b04444c118d78eb575213027a50d532"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1b04444c118d78eb575213027a50d532">&#9670;&#160;</a></span>DpmCalibration</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct DpmCalibration DpmCalibration</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="aa996b37ef27ac853bef62e13b16a7b24" name="aa996b37ef27ac853bef62e13b16a7b24"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa996b37ef27ac853bef62e13b16a7b24">&#9670;&#160;</a></span>DpmEntry</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct DpmEntry DpmEntry</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a23da14f1db50d37ce9cd5f65cd8cd995" name="a23da14f1db50d37ce9cd5f65cd8cd995"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a23da14f1db50d37ce9cd5f65cd8cd995">&#9670;&#160;</a></span>DpmHeader</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct DpmHeader DpmHeader</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a name="doc-enum-members" id="doc-enum-members"></a><h2 id="header-doc-enum-members" class="groupheader">Enumeration Type Documentation</h2>
<a id="a49f715d63d4c61b4f14b2d3b6102ed3b" name="a49f715d63d4c61b4f14b2d3b6102ed3b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a49f715d63d4c61b4f14b2d3b6102ed3b">&#9670;&#160;</a></span>DpmEntryStatus</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="#a49f715d63d4c61b4f14b2d3b6102ed3b">DpmEntryStatus</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Status of the bin of sectors that ends at an entry. </p>
<p>Ignored for the first entry. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a49f715d63d4c61b4f14b2d3b6102ed3ba7e43dea4fe33161429b9d2136217d9d2" name="a49f715d63d4c61b4f14b2d3b6102ed3ba7e43dea4fe33161429b9d2136217d9d2"></a>DpmStatusUnknown&#160;</td><td class="fielddoc"><p>Unknown, e.g. imported from a format that does not record it. </p>
</td></tr>
<tr><td class="fieldname"><a id="a49f715d63d4c61b4f14b2d3b6102ed3bac5619ad3aecb3e4a928876b571f91461" name="a49f715d63d4c61b4f14b2d3b6102ed3bac5619ad3aecb3e4a928876b571f91461"></a>DpmStatusMeasured&#160;</td><td class="fielddoc"><p>Measured on the first attempt. </p>
</td></tr>
<tr><td class="fieldname"><a id="a49f715d63d4c61b4f14b2d3b6102ed3bae908ded84a364f97209dfb11d58e6679" name="a49f715d63d4c61b4f14b2d3b6102ed3bae908ded84a364f97209dfb11d58e6679"></a>DpmStatusRemeasured&#160;</td><td class="fielddoc"><p>Measured again because the first measurement was an outlier. </p>
</td></tr>
<tr><td class="fieldname"><a id="a49f715d63d4c61b4f14b2d3b6102ed3baa80703dfe3c78dee9cfaeecf10ff5268" name="a49f715d63d4c61b4f14b2d3b6102ed3baa80703dfe3c78dee9cfaeecf10ff5268"></a>DpmStatusInterpolated&#160;</td><td class="fielddoc"><p>Measurement failed, interpolated from its neighbours. </p>
</td></tr>
<tr><td class="fieldname"><a id="a49f715d63d4c61b4f14b2d3b6102ed3baa7e1f200d7384cf53034f14d5e243d9f" name="a49f715d63d4c61b4f14b2d3b6102ed3baa7e1f200d7384cf53034f14d5e243d9f"></a>DpmStatusUnreadable&#160;</td><td class="fielddoc"><p>Sectors could not be read, interpolated from its neighbours. </p>
</td></tr>
<tr><td class="fieldname"><a id="a49f715d63d4c61b4f14b2d3b6102ed3ba29c137da0d9b820291febe4249511954" name="a49f715d63d4c61b4f14b2d3b6102ed3ba29c137da0d9b820291febe4249511954"></a>DpmStatusLayerBreak&#160;</td><td class="fielddoc"><p>Bin crosses a layer boundary or is too short, density copied from the bin before. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="dpm_8h_source.html#l00063">63</a> of file <a class="el" href="dpm_8h_source.html">dpm.h</a>.</p>
</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="dpm_8h.html">dpm.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.18.0 </li>
</ul>
</div>
</body>
</html>