Files
libaaruformat/docs/html/ecc__cd_8c.html

682 lines
39 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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libaaruformat: src/checksum/ecc_cd.c 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.14.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('ecc__cd_8c.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">ecc_cd.c File Reference</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &lt;stdbool.h&gt;</code><br />
<code>#include &lt;stdint.h&gt;</code><br />
<code>#include &lt;stdlib.h&gt;</code><br />
<code>#include &lt;string.h&gt;</code><br />
<code>#include &quot;<a class="el" href="aaruformat_8h_source.html">aaruformat.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="log_8h_source.html">log.h</a>&quot;</code><br />
</div>
<p><a href="ecc__cd_8c_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ac1a30bb251ac148f485c51593c0740c1" id="r_ac1a30bb251ac148f485c51593c0740c1"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac1a30bb251ac148f485c51593c0740c1">aaruf_ecc_cd_init</a> ()</td></tr>
<tr class="memdesc:ac1a30bb251ac148f485c51593c0740c1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes a Compact Disc ECC context. <br /></td></tr>
<tr class="memitem:afbc09e16b1a654de04706e07c3212ecb" id="r_afbc09e16b1a654de04706e07c3212ecb"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afbc09e16b1a654de04706e07c3212ecb">aaruf_ecc_cd_is_suffix_correct</a> (void *context, const uint8_t *sector)</td></tr>
<tr class="memdesc:afbc09e16b1a654de04706e07c3212ecb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if the suffix (EDC/ECC) of a CD sector is correct (Mode 1). <br /></td></tr>
<tr class="memitem:ab77ca170a2e8d2f0a2a7ea1a8a51690a" id="r_ab77ca170a2e8d2f0a2a7ea1a8a51690a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab77ca170a2e8d2f0a2a7ea1a8a51690a">aaruf_ecc_cd_is_suffix_correct_mode2</a> (void *context, const uint8_t *sector)</td></tr>
<tr class="memdesc:ab77ca170a2e8d2f0a2a7ea1a8a51690a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if the suffix (EDC/ECC) of a CD sector is correct (Mode 2). <br /></td></tr>
<tr class="memitem:a1cd08adea9a778c2463b90ab9295dc3f" id="r_a1cd08adea9a778c2463b90ab9295dc3f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a1cd08adea9a778c2463b90ab9295dc3f">aaruf_ecc_cd_check</a> (void *context, const uint8_t *address, const uint8_t *data, const uint32_t major_count, const uint32_t minor_count, const uint32_t major_mult, const uint32_t minor_inc, const uint8_t *ecc, const int32_t address_offset, const int32_t data_offset, const int32_t ecc_offset)</td></tr>
<tr class="memdesc:a1cd08adea9a778c2463b90ab9295dc3f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks the ECC of a CD sector. <br /></td></tr>
<tr class="memitem:a330d4bda939de120a160592c0bdb703d" id="r_a330d4bda939de120a160592c0bdb703d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a330d4bda939de120a160592c0bdb703d">aaruf_ecc_cd_write</a> (void *context, const uint8_t *address, const uint8_t *data, const uint32_t major_count, const uint32_t minor_count, const uint32_t major_mult, const uint32_t minor_inc, uint8_t *ecc, const int32_t address_offset, const int32_t data_offset, const int32_t ecc_offset)</td></tr>
<tr class="memdesc:a330d4bda939de120a160592c0bdb703d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes ECC for a CD sector. <br /></td></tr>
<tr class="memitem:ab541a4ae9c6568d4dad8df5101ebad58" id="r_ab541a4ae9c6568d4dad8df5101ebad58"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab541a4ae9c6568d4dad8df5101ebad58">aaruf_ecc_cd_write_sector</a> (void *context, const uint8_t *address, const uint8_t *data, uint8_t *ecc, const int32_t address_offset, const int32_t data_offset, const int32_t ecc_offset)</td></tr>
<tr class="memdesc:ab541a4ae9c6568d4dad8df5101ebad58"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes ECC for a full CD sector (both P and Q ECC). <br /></td></tr>
<tr class="memitem:a4e5ee3f9330f970b761de5566458ac3b" id="r_a4e5ee3f9330f970b761de5566458ac3b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a4e5ee3f9330f970b761de5566458ac3b">aaruf_cd_lba_to_msf</a> (const int64_t pos, uint8_t *minute, uint8_t *second, uint8_t *frame)</td></tr>
<tr class="memdesc:a4e5ee3f9330f970b761de5566458ac3b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts a CD LBA (Logical Block Address) to MSF (Minute:Second:Frame) format. <br /></td></tr>
<tr class="memitem:a9dc3231aea6933691f5881914e8da1f6" id="r_a9dc3231aea6933691f5881914e8da1f6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a9dc3231aea6933691f5881914e8da1f6">aaruf_ecc_cd_reconstruct_prefix</a> (uint8_t *sector, const uint8_t type, const int64_t lba)</td></tr>
<tr class="memdesc:a9dc3231aea6933691f5881914e8da1f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reconstructs the prefix (sync, address, mode) of a CD sector. <br /></td></tr>
<tr class="memitem:a5bf5a19fd4ec540968f0b4c3d641e973" id="r_a5bf5a19fd4ec540968f0b4c3d641e973"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5bf5a19fd4ec540968f0b4c3d641e973">aaruf_ecc_cd_reconstruct</a> (void *context, uint8_t *sector, const uint8_t type)</td></tr>
<tr class="memdesc:a5bf5a19fd4ec540968f0b4c3d641e973"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reconstructs the EDC and ECC fields of a CD sector. <br /></td></tr>
<tr class="memitem:a67c65c3f2ca5cdf1596c16fa35558df1" id="r_a67c65c3f2ca5cdf1596c16fa35558df1"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a67c65c3f2ca5cdf1596c16fa35558df1">aaruf_edc_cd_compute</a> (void *context, uint32_t edc, const uint8_t *src, int size, int pos)</td></tr>
<tr class="memdesc:a67c65c3f2ca5cdf1596c16fa35558df1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the EDC (Error Detection Code) for a CD sector. <br /></td></tr>
</table>
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
<a id="a4e5ee3f9330f970b761de5566458ac3b" name="a4e5ee3f9330f970b761de5566458ac3b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4e5ee3f9330f970b761de5566458ac3b">&#9670;&#160;</a></span>aaruf_cd_lba_to_msf()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void aaruf_cd_lba_to_msf </td>
<td>(</td>
<td class="paramtype">const int64_t</td> <td class="paramname"><span class="paramname"><em>pos</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>minute</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>second</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>frame</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Converts a CD LBA (Logical Block Address) to MSF (Minute:Second:Frame) format. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">pos</td><td>LBA position. </td></tr>
<tr><td class="paramname">minute</td><td>Pointer to store the minute value. </td></tr>
<tr><td class="paramname">second</td><td>Pointer to store the second value. </td></tr>
<tr><td class="paramname">frame</td><td>Pointer to store the frame value. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="ecc__cd_8c_source.html#l00374">374</a> of file <a class="el" href="ecc__cd_8c_source.html">ecc_cd.c</a>.</p>
<p class="reference">References <a class="el" href="decls_8h_source.html#l00045">AARU_CALL</a>, <a class="el" href="decls_8h_source.html#l00055">AARU_LOCAL</a>, and <a class="el" href="log_8h_source.html#l00025">TRACE</a>.</p>
<p class="reference">Referenced by <a class="el" href="ecc__cd_8c_source.html#l00392">aaruf_ecc_cd_reconstruct_prefix()</a>.</p>
</div>
</div>
<a id="a1cd08adea9a778c2463b90ab9295dc3f" name="a1cd08adea9a778c2463b90ab9295dc3f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1cd08adea9a778c2463b90ab9295dc3f">&#9670;&#160;</a></span>aaruf_ecc_cd_check()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool aaruf_ecc_cd_check </td>
<td>(</td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>context</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *</td> <td class="paramname"><span class="paramname"><em>address</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *</td> <td class="paramname"><span class="paramname"><em>data</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint32_t</td> <td class="paramname"><span class="paramname"><em>major_count</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint32_t</td> <td class="paramname"><span class="paramname"><em>minor_count</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint32_t</td> <td class="paramname"><span class="paramname"><em>major_mult</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint32_t</td> <td class="paramname"><span class="paramname"><em>minor_inc</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *</td> <td class="paramname"><span class="paramname"><em>ecc</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int32_t</td> <td class="paramname"><span class="paramname"><em>address_offset</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int32_t</td> <td class="paramname"><span class="paramname"><em>data_offset</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int32_t</td> <td class="paramname"><span class="paramname"><em>ecc_offset</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks the ECC of a CD sector. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Pointer to the ECC context. </td></tr>
<tr><td class="paramname">address</td><td>Pointer to the address field. </td></tr>
<tr><td class="paramname">data</td><td>Pointer to the data field. </td></tr>
<tr><td class="paramname">major_count</td><td>Number of major iterations. </td></tr>
<tr><td class="paramname">minor_count</td><td>Number of minor iterations. </td></tr>
<tr><td class="paramname">major_mult</td><td>Major multiplier. </td></tr>
<tr><td class="paramname">minor_inc</td><td>Minor increment. </td></tr>
<tr><td class="paramname">ecc</td><td>Pointer to the ECC field. </td></tr>
<tr><td class="paramname">address_offset</td><td>Offset for the address field. </td></tr>
<tr><td class="paramname">data_offset</td><td>Offset for the data field. </td></tr>
<tr><td class="paramname">ecc_offset</td><td>Offset for the ECC field. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true if ECC is correct, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="ecc__cd_8c_source.html#l00227">227</a> of file <a class="el" href="ecc__cd_8c_source.html">ecc_cd.c</a>.</p>
<p class="reference">References <a class="el" href="decls_8h_source.html#l00045">AARU_CALL</a>, <a class="el" href="decls_8h_source.html#l00054">AARU_EXPORT</a>, <a class="el" href="context_8h_source.html#l00088">CdEccContext::ecc_b_table</a>, <a class="el" href="context_8h_source.html#l00089">CdEccContext::ecc_f_table</a>, <a class="el" href="context_8h_source.html#l00087">CdEccContext::inited_edc</a>, and <a class="el" href="log_8h_source.html#l00025">TRACE</a>.</p>
<p class="reference">Referenced by <a class="el" href="ecc__cd_8c_source.html#l00101">aaruf_ecc_cd_is_suffix_correct()</a>, and <a class="el" href="ecc__cd_8c_source.html#l00165">aaruf_ecc_cd_is_suffix_correct_mode2()</a>.</p>
</div>
</div>
<a id="ac1a30bb251ac148f485c51593c0740c1" name="ac1a30bb251ac148f485c51593c0740c1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac1a30bb251ac148f485c51593c0740c1">&#9670;&#160;</a></span>aaruf_ecc_cd_init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void * aaruf_ecc_cd_init </td>
<td>(</td>
<td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes a Compact Disc ECC context. </p>
<p>Allocates and initializes a context for Compact Disc ECC calculations.</p>
<dl class="section return"><dt>Returns</dt><dd>Pointer to the initialized <a class="el" href="structCdEccContext.html" title="Lookup tables and state for Compact Disc EDC/ECC (P/Q) regeneration / verification.">CdEccContext</a> structure, or NULL on failure. </dd></dl>
<p class="definition">Definition at line <a class="el" href="ecc__cd_8c_source.html#l00035">35</a> of file <a class="el" href="ecc__cd_8c_source.html">ecc_cd.c</a>.</p>
<p class="reference">References <a class="el" href="decls_8h_source.html#l00045">AARU_CALL</a>, <a class="el" href="decls_8h_source.html#l00054">AARU_EXPORT</a>, <a class="el" href="context_8h_source.html#l00088">CdEccContext::ecc_b_table</a>, <a class="el" href="context_8h_source.html#l00089">CdEccContext::ecc_f_table</a>, <a class="el" href="context_8h_source.html#l00090">CdEccContext::edc_table</a>, <a class="el" href="context_8h_source.html#l00087">CdEccContext::inited_edc</a>, and <a class="el" href="log_8h_source.html#l00025">TRACE</a>.</p>
<p class="reference">Referenced by <a class="el" href="create_8c_source.html#l00279">aaruf_create()</a>, and <a class="el" href="open_8c_source.html#l00223">aaruf_open()</a>.</p>
</div>
</div>
<a id="afbc09e16b1a654de04706e07c3212ecb" name="afbc09e16b1a654de04706e07c3212ecb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afbc09e16b1a654de04706e07c3212ecb">&#9670;&#160;</a></span>aaruf_ecc_cd_is_suffix_correct()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool aaruf_ecc_cd_is_suffix_correct </td>
<td>(</td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>context</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *</td> <td class="paramname"><span class="paramname"><em>sector</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks if the suffix (EDC/ECC) of a CD sector is correct (Mode 1). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Pointer to the ECC context. </td></tr>
<tr><td class="paramname">sector</td><td>Pointer to the sector data. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true if the suffix is correct, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="ecc__cd_8c_source.html#l00101">101</a> of file <a class="el" href="ecc__cd_8c_source.html">ecc_cd.c</a>.</p>
<p class="reference">References <a class="el" href="decls_8h_source.html#l00045">AARU_CALL</a>, <a class="el" href="decls_8h_source.html#l00054">AARU_EXPORT</a>, <a class="el" href="ecc__cd_8c_source.html#l00227">aaruf_ecc_cd_check()</a>, <a class="el" href="ecc__cd_8c_source.html#l00547">aaruf_edc_cd_compute()</a>, <a class="el" href="context_8h_source.html#l00087">CdEccContext::inited_edc</a>, and <a class="el" href="log_8h_source.html#l00025">TRACE</a>.</p>
<p class="reference">Referenced by <a class="el" href="write_8c_source.html#l00544">aaruf_write_sector_long()</a>.</p>
</div>
</div>
<a id="ab77ca170a2e8d2f0a2a7ea1a8a51690a" name="ab77ca170a2e8d2f0a2a7ea1a8a51690a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab77ca170a2e8d2f0a2a7ea1a8a51690a">&#9670;&#160;</a></span>aaruf_ecc_cd_is_suffix_correct_mode2()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool aaruf_ecc_cd_is_suffix_correct_mode2 </td>
<td>(</td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>context</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *</td> <td class="paramname"><span class="paramname"><em>sector</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks if the suffix (EDC/ECC) of a CD sector is correct (Mode 2). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Pointer to the ECC context. </td></tr>
<tr><td class="paramname">sector</td><td>Pointer to the sector data. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true if the suffix is correct, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="ecc__cd_8c_source.html#l00165">165</a> of file <a class="el" href="ecc__cd_8c_source.html">ecc_cd.c</a>.</p>
<p class="reference">References <a class="el" href="decls_8h_source.html#l00045">AARU_CALL</a>, <a class="el" href="decls_8h_source.html#l00054">AARU_EXPORT</a>, <a class="el" href="ecc__cd_8c_source.html#l00227">aaruf_ecc_cd_check()</a>, <a class="el" href="ecc__cd_8c_source.html#l00547">aaruf_edc_cd_compute()</a>, <a class="el" href="context_8h_source.html#l00087">CdEccContext::inited_edc</a>, and <a class="el" href="log_8h_source.html#l00025">TRACE</a>.</p>
<p class="reference">Referenced by <a class="el" href="write_8c_source.html#l00544">aaruf_write_sector_long()</a>.</p>
</div>
</div>
<a id="a5bf5a19fd4ec540968f0b4c3d641e973" name="a5bf5a19fd4ec540968f0b4c3d641e973"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5bf5a19fd4ec540968f0b4c3d641e973">&#9670;&#160;</a></span>aaruf_ecc_cd_reconstruct()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void aaruf_ecc_cd_reconstruct </td>
<td>(</td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>context</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>sector</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t</td> <td class="paramname"><span class="paramname"><em>type</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Reconstructs the EDC and ECC fields of a CD sector. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Pointer to the ECC context. </td></tr>
<tr><td class="paramname">sector</td><td>Pointer to the sector data (must be 2352 bytes). </td></tr>
<tr><td class="paramname">type</td><td>Track type (mode). </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="ecc__cd_8c_source.html#l00459">459</a> of file <a class="el" href="ecc__cd_8c_source.html">ecc_cd.c</a>.</p>
<p class="reference">References <a class="el" href="decls_8h_source.html#l00045">AARU_CALL</a>, <a class="el" href="decls_8h_source.html#l00054">AARU_EXPORT</a>, <a class="el" href="ecc__cd_8c_source.html#l00352">aaruf_ecc_cd_write_sector()</a>, <a class="el" href="ecc__cd_8c_source.html#l00547">aaruf_edc_cd_compute()</a>, <a class="el" href="enums_8h_source.html#l00198">CdMode1</a>, <a class="el" href="enums_8h_source.html#l00200">CdMode2Form1</a>, <a class="el" href="enums_8h_source.html#l00201">CdMode2Form2</a>, <a class="el" href="context_8h_source.html#l00087">CdEccContext::inited_edc</a>, and <a class="el" href="log_8h_source.html#l00025">TRACE</a>.</p>
<p class="reference">Referenced by <a class="el" href="read_8c_source.html#l00826">aaruf_read_sector_long()</a>.</p>
</div>
</div>
<a id="a9dc3231aea6933691f5881914e8da1f6" name="a9dc3231aea6933691f5881914e8da1f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9dc3231aea6933691f5881914e8da1f6">&#9670;&#160;</a></span>aaruf_ecc_cd_reconstruct_prefix()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void aaruf_ecc_cd_reconstruct_prefix </td>
<td>(</td>
<td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>sector</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t</td> <td class="paramname"><span class="paramname"><em>type</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int64_t</td> <td class="paramname"><span class="paramname"><em>lba</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Reconstructs the prefix (sync, address, mode) of a CD sector. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">sector</td><td>Pointer to the sector data (must be 2352 bytes). </td></tr>
<tr><td class="paramname">type</td><td>Track type (mode). </td></tr>
<tr><td class="paramname">lba</td><td>Logical Block Address. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="ecc__cd_8c_source.html#l00392">392</a> of file <a class="el" href="ecc__cd_8c_source.html">ecc_cd.c</a>.</p>
<p class="reference">References <a class="el" href="decls_8h_source.html#l00045">AARU_CALL</a>, <a class="el" href="decls_8h_source.html#l00054">AARU_EXPORT</a>, <a class="el" href="ecc__cd_8c_source.html#l00374">aaruf_cd_lba_to_msf()</a>, <a class="el" href="enums_8h_source.html#l00198">CdMode1</a>, <a class="el" href="enums_8h_source.html#l00200">CdMode2Form1</a>, <a class="el" href="enums_8h_source.html#l00201">CdMode2Form2</a>, <a class="el" href="enums_8h_source.html#l00199">CdMode2Formless</a>, and <a class="el" href="log_8h_source.html#l00025">TRACE</a>.</p>
<p class="reference">Referenced by <a class="el" href="read_8c_source.html#l00826">aaruf_read_sector_long()</a>.</p>
</div>
</div>
<a id="a330d4bda939de120a160592c0bdb703d" name="a330d4bda939de120a160592c0bdb703d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a330d4bda939de120a160592c0bdb703d">&#9670;&#160;</a></span>aaruf_ecc_cd_write()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void aaruf_ecc_cd_write </td>
<td>(</td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>context</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *</td> <td class="paramname"><span class="paramname"><em>address</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *</td> <td class="paramname"><span class="paramname"><em>data</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint32_t</td> <td class="paramname"><span class="paramname"><em>major_count</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint32_t</td> <td class="paramname"><span class="paramname"><em>minor_count</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint32_t</td> <td class="paramname"><span class="paramname"><em>major_mult</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint32_t</td> <td class="paramname"><span class="paramname"><em>minor_inc</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>ecc</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int32_t</td> <td class="paramname"><span class="paramname"><em>address_offset</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int32_t</td> <td class="paramname"><span class="paramname"><em>data_offset</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int32_t</td> <td class="paramname"><span class="paramname"><em>ecc_offset</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Writes ECC for a CD sector. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Pointer to the ECC context. </td></tr>
<tr><td class="paramname">address</td><td>Pointer to the address field. </td></tr>
<tr><td class="paramname">data</td><td>Pointer to the data field. </td></tr>
<tr><td class="paramname">major_count</td><td>Number of major iterations. </td></tr>
<tr><td class="paramname">minor_count</td><td>Number of minor iterations. </td></tr>
<tr><td class="paramname">major_mult</td><td>Major multiplier. </td></tr>
<tr><td class="paramname">minor_inc</td><td>Minor increment. </td></tr>
<tr><td class="paramname">ecc</td><td>Pointer to the ECC field to write. </td></tr>
<tr><td class="paramname">address_offset</td><td>Offset for the address field. </td></tr>
<tr><td class="paramname">data_offset</td><td>Offset for the data field. </td></tr>
<tr><td class="paramname">ecc_offset</td><td>Offset for the ECC field. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="ecc__cd_8c_source.html#l00293">293</a> of file <a class="el" href="ecc__cd_8c_source.html">ecc_cd.c</a>.</p>
<p class="reference">References <a class="el" href="decls_8h_source.html#l00045">AARU_CALL</a>, <a class="el" href="decls_8h_source.html#l00054">AARU_EXPORT</a>, <a class="el" href="context_8h_source.html#l00088">CdEccContext::ecc_b_table</a>, <a class="el" href="context_8h_source.html#l00089">CdEccContext::ecc_f_table</a>, <a class="el" href="context_8h_source.html#l00087">CdEccContext::inited_edc</a>, and <a class="el" href="log_8h_source.html#l00025">TRACE</a>.</p>
<p class="reference">Referenced by <a class="el" href="ecc__cd_8c_source.html#l00352">aaruf_ecc_cd_write_sector()</a>.</p>
</div>
</div>
<a id="ab541a4ae9c6568d4dad8df5101ebad58" name="ab541a4ae9c6568d4dad8df5101ebad58"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab541a4ae9c6568d4dad8df5101ebad58">&#9670;&#160;</a></span>aaruf_ecc_cd_write_sector()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void aaruf_ecc_cd_write_sector </td>
<td>(</td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>context</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *</td> <td class="paramname"><span class="paramname"><em>address</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *</td> <td class="paramname"><span class="paramname"><em>data</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>ecc</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int32_t</td> <td class="paramname"><span class="paramname"><em>address_offset</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int32_t</td> <td class="paramname"><span class="paramname"><em>data_offset</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int32_t</td> <td class="paramname"><span class="paramname"><em>ecc_offset</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Writes ECC for a full CD sector (both P and Q ECC). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Pointer to the ECC context. </td></tr>
<tr><td class="paramname">address</td><td>Pointer to the address field. </td></tr>
<tr><td class="paramname">data</td><td>Pointer to the data field. </td></tr>
<tr><td class="paramname">ecc</td><td>Pointer to the ECC field to write. </td></tr>
<tr><td class="paramname">address_offset</td><td>Offset for the address field. </td></tr>
<tr><td class="paramname">data_offset</td><td>Offset for the data field. </td></tr>
<tr><td class="paramname">ecc_offset</td><td>Offset for the ECC field. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="ecc__cd_8c_source.html#l00352">352</a> of file <a class="el" href="ecc__cd_8c_source.html">ecc_cd.c</a>.</p>
<p class="reference">References <a class="el" href="decls_8h_source.html#l00045">AARU_CALL</a>, <a class="el" href="decls_8h_source.html#l00054">AARU_EXPORT</a>, <a class="el" href="ecc__cd_8c_source.html#l00293">aaruf_ecc_cd_write()</a>, and <a class="el" href="log_8h_source.html#l00025">TRACE</a>.</p>
<p class="reference">Referenced by <a class="el" href="ecc__cd_8c_source.html#l00459">aaruf_ecc_cd_reconstruct()</a>.</p>
</div>
</div>
<a id="a67c65c3f2ca5cdf1596c16fa35558df1" name="a67c65c3f2ca5cdf1596c16fa35558df1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a67c65c3f2ca5cdf1596c16fa35558df1">&#9670;&#160;</a></span>aaruf_edc_cd_compute()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t aaruf_edc_cd_compute </td>
<td>(</td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>context</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>edc</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *</td> <td class="paramname"><span class="paramname"><em>src</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>size</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>pos</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Computes the EDC (Error Detection Code) for a CD sector. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Pointer to the ECC context. </td></tr>
<tr><td class="paramname">edc</td><td>Initial EDC value. </td></tr>
<tr><td class="paramname">src</td><td>Pointer to the data to compute EDC over. </td></tr>
<tr><td class="paramname">size</td><td>Number of bytes to process. </td></tr>
<tr><td class="paramname">pos</td><td>Starting position in the data. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Computed EDC value. </dd></dl>
<p class="definition">Definition at line <a class="el" href="ecc__cd_8c_source.html#l00547">547</a> of file <a class="el" href="ecc__cd_8c_source.html">ecc_cd.c</a>.</p>
<p class="reference">References <a class="el" href="decls_8h_source.html#l00045">AARU_CALL</a>, <a class="el" href="decls_8h_source.html#l00054">AARU_EXPORT</a>, <a class="el" href="context_8h_source.html#l00090">CdEccContext::edc_table</a>, <a class="el" href="context_8h_source.html#l00087">CdEccContext::inited_edc</a>, and <a class="el" href="log_8h_source.html#l00025">TRACE</a>.</p>
<p class="reference">Referenced by <a class="el" href="ecc__cd_8c_source.html#l00101">aaruf_ecc_cd_is_suffix_correct()</a>, <a class="el" href="ecc__cd_8c_source.html#l00165">aaruf_ecc_cd_is_suffix_correct_mode2()</a>, <a class="el" href="ecc__cd_8c_source.html#l00459">aaruf_ecc_cd_reconstruct()</a>, and <a class="el" href="write_8c_source.html#l00544">aaruf_write_sector_long()</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_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a href="dir_6b3196bdf3f485a11a190486a5644c9a.html">checksum</a></li><li class="navelem"><a href="ecc__cd_8c.html">ecc_cd.c</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.14.0 </li>
</ul>
</div>
</body>
</html>