Files
gbdk-2020/docs/api/laptop__io_8h.html
2025-12-27 17:53:11 -08:00

1269 lines
65 KiB
HTML

<!-- HTML header for doxygen 1.8.14-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="cache-control" content="max-age=86400"/>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>GBDK 2020 Docs: gbdk-lib/include/duck/laptop_io.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>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.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" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="doxygen-awesome-sidebar-only.css" rel="stylesheet" type="text/css"/>
<link href="doxygen-awesome-sidebar-only-darkmode-toggle.css" rel="stylesheet" type="text/css"/>
<!-- BEGIN: doxygen-awesome-css -->
<script type="text/javascript" src="doxygen-awesome-darkmode-toggle.js"></script>
<script type="text/javascript">
DoxygenAwesomeDarkModeToggle.init()
</script>
<script type="text/javascript" src="doxygen-awesome-paragraph-link.js"></script>
<script type="text/javascript">
DoxygenAwesomeParagraphLink.init()
</script>
<!-- END: doxygen-awesome-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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">GBDK 2020 Docs
&#160;<span id="projectnumber">4.5.0</span>
</div>
<div id="projectbrief">API Documentation for GBDK 2020</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('laptop__io_8h.html',''); initResizable(); });
/* @license-end */
</script>
<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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a> </div>
<div class="headertitle"><div class="title">laptop_io.h File Reference</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &lt;<a class="el" href="platform_8h_source.html">gbdk/platform.h</a>&gt;</code><br />
<code>#include &lt;<a class="el" href="stdint_8h_source.html">stdint.h</a>&gt;</code><br />
<code>#include &lt;<a class="el" href="stdbool_8h_source.html">stdbool.h</a>&gt;</code><br />
</div>
<p><a href="laptop__io_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:_MEGADUCK_LAPTOP_IO_H"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#_MEGADUCK_LAPTOP_IO_H">_MEGADUCK_LAPTOP_IO_H</a></td></tr>
<tr class="separator:_MEGADUCK_LAPTOP_IO_H"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_CMD_INIT_START"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_INIT_START">DUCK_IO_CMD_INIT_START</a>&#160;&#160;&#160;0x00u</td></tr>
<tr class="separator:DUCK_IO_CMD_INIT_START"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_CMD_GET_KEYS"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_GET_KEYS">DUCK_IO_CMD_GET_KEYS</a>&#160;&#160;&#160;0x00u</td></tr>
<tr class="separator:DUCK_IO_CMD_GET_KEYS"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_CMD_DONE_OR_OK"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_DONE_OR_OK">DUCK_IO_CMD_DONE_OR_OK</a>&#160;&#160;&#160;0x01u</td></tr>
<tr class="separator:DUCK_IO_CMD_DONE_OR_OK"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_CMD_ABORT_OR_FAIL"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_ABORT_OR_FAIL">DUCK_IO_CMD_ABORT_OR_FAIL</a>&#160;&#160;&#160;0x04u</td></tr>
<tr class="separator:DUCK_IO_CMD_ABORT_OR_FAIL"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_CMD_PLAY_SPEECH"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_PLAY_SPEECH">DUCK_IO_CMD_PLAY_SPEECH</a>&#160;&#160;&#160;0x05u</td></tr>
<tr class="separator:DUCK_IO_CMD_PLAY_SPEECH"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_CMD_RUN_CART_IN_SLOT"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_RUN_CART_IN_SLOT">DUCK_IO_CMD_RUN_CART_IN_SLOT</a>&#160;&#160;&#160;0x08u</td></tr>
<tr class="separator:DUCK_IO_CMD_RUN_CART_IN_SLOT"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_CMD_PRINT_INIT_EXT_IO"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_PRINT_INIT_EXT_IO">DUCK_IO_CMD_PRINT_INIT_EXT_IO</a>&#160;&#160;&#160;0x09u</td></tr>
<tr class="separator:DUCK_IO_CMD_PRINT_INIT_EXT_IO"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_CMD_SET_RTC"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_SET_RTC">DUCK_IO_CMD_SET_RTC</a>&#160;&#160;&#160;0x0Bu</td></tr>
<tr class="separator:DUCK_IO_CMD_SET_RTC"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_CMD_GET_RTC"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_GET_RTC">DUCK_IO_CMD_GET_RTC</a>&#160;&#160;&#160;0x0Cu</td></tr>
<tr class="separator:DUCK_IO_CMD_GET_RTC"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_CMD_PRINT_SEND_BYTES"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_PRINT_SEND_BYTES">DUCK_IO_CMD_PRINT_SEND_BYTES</a>&#160;&#160;&#160;0x11u</td></tr>
<tr class="separator:DUCK_IO_CMD_PRINT_SEND_BYTES"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_REPLY_BOOT_UNSET"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_REPLY_BOOT_UNSET">DUCK_IO_REPLY_BOOT_UNSET</a>&#160;&#160;&#160;0x00u</td></tr>
<tr class="separator:DUCK_IO_REPLY_BOOT_UNSET"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_REPLY_BOOT_FAIL"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_REPLY_BOOT_FAIL">DUCK_IO_REPLY_BOOT_FAIL</a>&#160;&#160;&#160;0x01u</td></tr>
<tr class="separator:DUCK_IO_REPLY_BOOT_FAIL"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_REPLY_BUFFER_XFER_OK"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_REPLY_BUFFER_XFER_OK">DUCK_IO_REPLY_BUFFER_XFER_OK</a>&#160;&#160;&#160;0x01u</td></tr>
<tr class="separator:DUCK_IO_REPLY_BUFFER_XFER_OK"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_REPLY_SEND_BUFFER_OK"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_REPLY_SEND_BUFFER_OK">DUCK_IO_REPLY_SEND_BUFFER_OK</a>&#160;&#160;&#160;0x03u</td></tr>
<tr class="separator:DUCK_IO_REPLY_SEND_BUFFER_OK"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_REPLY_BOOT_OK"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_REPLY_BOOT_OK">DUCK_IO_REPLY_BOOT_OK</a>&#160;&#160;&#160;0x01u</td></tr>
<tr class="separator:DUCK_IO_REPLY_BOOT_OK"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_LEN_KBD_GET"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_LEN_KBD_GET">DUCK_IO_LEN_KBD_GET</a>&#160;&#160;&#160;2u</td></tr>
<tr class="separator:DUCK_IO_LEN_KBD_GET"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_LEN_RTC_GET"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_LEN_RTC_GET">DUCK_IO_LEN_RTC_GET</a>&#160;&#160;&#160;8u</td></tr>
<tr class="separator:DUCK_IO_LEN_RTC_GET"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_LEN_RTC_SET"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_LEN_RTC_SET">DUCK_IO_LEN_RTC_SET</a>&#160;&#160;&#160;8u</td></tr>
<tr class="separator:DUCK_IO_LEN_RTC_SET"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_LEN_PLAY_SPEECH"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_LEN_PLAY_SPEECH">DUCK_IO_LEN_PLAY_SPEECH</a>&#160;&#160;&#160;1u</td></tr>
<tr class="separator:DUCK_IO_LEN_PLAY_SPEECH"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_REPLY_NO_CART_IN_SLOT"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_REPLY_NO_CART_IN_SLOT">DUCK_IO_REPLY_NO_CART_IN_SLOT</a>&#160;&#160;&#160;06u</td></tr>
<tr class="separator:DUCK_IO_REPLY_NO_CART_IN_SLOT"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_LEN_RX_MAX"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_LEN_RX_MAX">DUCK_IO_LEN_RX_MAX</a>&#160;&#160;&#160;14u</td></tr>
<tr class="separator:DUCK_IO_LEN_RX_MAX"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_LEN_TX_MAX"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_LEN_TX_MAX">DUCK_IO_LEN_TX_MAX</a>&#160;&#160;&#160;14u</td></tr>
<tr class="separator:DUCK_IO_LEN_TX_MAX"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_TIMEOUT_2_MSEC"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_TIMEOUT_2_MSEC">DUCK_IO_TIMEOUT_2_MSEC</a>&#160;&#160;&#160;2u</td></tr>
<tr class="separator:DUCK_IO_TIMEOUT_2_MSEC"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_TIMEOUT_100_MSEC"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_TIMEOUT_100_MSEC">DUCK_IO_TIMEOUT_100_MSEC</a>&#160;&#160;&#160;100u</td></tr>
<tr class="separator:DUCK_IO_TIMEOUT_100_MSEC"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_TIMEOUT_200_MSEC"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_TIMEOUT_200_MSEC">DUCK_IO_TIMEOUT_200_MSEC</a>&#160;&#160;&#160;200u</td></tr>
<tr class="separator:DUCK_IO_TIMEOUT_200_MSEC"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_SPEECH_CMD_MIN"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_SPEECH_CMD_MIN">DUCK_IO_SPEECH_CMD_MIN</a>&#160;&#160;&#160;1</td></tr>
<tr class="separator:DUCK_IO_SPEECH_CMD_MIN"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_SPEECH_CMD_MAX"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_SPEECH_CMD_MAX">DUCK_IO_SPEECH_CMD_MAX</a>&#160;&#160;&#160;6</td></tr>
<tr class="separator:DUCK_IO_SPEECH_CMD_MAX"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_RTC_YEAR"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_RTC_YEAR">DUCK_IO_RTC_YEAR</a>&#160;&#160;&#160;0u</td></tr>
<tr class="separator:DUCK_IO_RTC_YEAR"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_RTC_MON"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_RTC_MON">DUCK_IO_RTC_MON</a>&#160;&#160;&#160;1u</td></tr>
<tr class="separator:DUCK_IO_RTC_MON"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_RTC_DAY"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_RTC_DAY">DUCK_IO_RTC_DAY</a>&#160;&#160;&#160;2u</td></tr>
<tr class="separator:DUCK_IO_RTC_DAY"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_RTC_WEEKDAY"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_RTC_WEEKDAY">DUCK_IO_RTC_WEEKDAY</a>&#160;&#160;&#160;3u</td></tr>
<tr class="separator:DUCK_IO_RTC_WEEKDAY"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_RTC_AMPM"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_RTC_AMPM">DUCK_IO_RTC_AMPM</a>&#160;&#160;&#160;4u</td></tr>
<tr class="separator:DUCK_IO_RTC_AMPM"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_RTC_HOUR"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_RTC_HOUR">DUCK_IO_RTC_HOUR</a>&#160;&#160;&#160;5u</td></tr>
<tr class="separator:DUCK_IO_RTC_HOUR"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_RTC_MIN"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_RTC_MIN">DUCK_IO_RTC_MIN</a>&#160;&#160;&#160;6u</td></tr>
<tr class="separator:DUCK_IO_RTC_MIN"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_RTC_SEC"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_RTC_SEC">DUCK_IO_RTC_SEC</a>&#160;&#160;&#160;7u</td></tr>
<tr class="separator:DUCK_IO_RTC_SEC"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_KBD_FLAGS"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_KBD_FLAGS">DUCK_IO_KBD_FLAGS</a>&#160;&#160;&#160;0u</td></tr>
<tr class="separator:DUCK_IO_KBD_FLAGS"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_KBD_KEYCODE"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_KBD_KEYCODE">DUCK_IO_KBD_KEYCODE</a>&#160;&#160;&#160;1u</td></tr>
<tr class="separator:DUCK_IO_KBD_KEYCODE"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_PRINTER_FAIL"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_PRINTER_FAIL">DUCK_IO_PRINTER_FAIL</a>&#160;&#160;&#160;0x00u</td></tr>
<tr class="separator:DUCK_IO_PRINTER_FAIL"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_PRINTER_TYPE_2_PASS"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_PRINTER_TYPE_2_PASS">DUCK_IO_PRINTER_TYPE_2_PASS</a>&#160;&#160;&#160;0x01u</td></tr>
<tr class="separator:DUCK_IO_PRINTER_TYPE_2_PASS"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_PRINTER_TYPE_1_PASS"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_PRINTER_TYPE_1_PASS">DUCK_IO_PRINTER_TYPE_1_PASS</a>&#160;&#160;&#160;0x02u</td></tr>
<tr class="separator:DUCK_IO_PRINTER_TYPE_1_PASS"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:DUCK_IO_PRINTER_MAYBE_BUSY"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#DUCK_IO_PRINTER_MAYBE_BUSY">DUCK_IO_PRINTER_MAYBE_BUSY</a>&#160;&#160;&#160;0x03u</td></tr>
<tr class="separator:DUCK_IO_PRINTER_MAYBE_BUSY"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:duck_io_send_byte"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_send_byte">duck_io_send_byte</a> (<a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> tx_byte)</td></tr>
<tr class="separator:duck_io_send_byte"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_read_byte_no_timeout"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_read_byte_no_timeout">duck_io_read_byte_no_timeout</a> (void)</td></tr>
<tr class="separator:duck_io_read_byte_no_timeout"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_enable_read_byte"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_enable_read_byte">duck_io_enable_read_byte</a> (void)</td></tr>
<tr class="separator:duck_io_enable_read_byte"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_laptop_init"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdbool_8h.html#bool">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_laptop_init">duck_io_laptop_init</a> (void)</td></tr>
<tr class="separator:duck_io_laptop_init"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_printer_last_status"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_printer_last_status">duck_io_printer_last_status</a> (void)</td></tr>
<tr class="separator:duck_io_printer_last_status"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_printer_query"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_printer_query">duck_io_printer_query</a> (void)</td></tr>
<tr class="separator:duck_io_printer_query"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_read_byte_with_msecs_tim"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdbool_8h.html#bool">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_read_byte_with_msecs_tim">duck_io_read_byte_with_msecs_timeout</a> (<a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> timeout_len_ms)</td></tr>
<tr class="separator:duck_io_read_byte_with_msecs_tim"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_send_byte_and_check_ack_"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdbool_8h.html#bool">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_send_byte_and_check_ack_">duck_io_send_byte_and_check_ack_msecs_timeout</a> (<a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> tx_byte, <a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> timeout_len_ms, <a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> expected_reply)</td></tr>
<tr class="separator:duck_io_send_byte_and_check_ack_"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_send_cmd_and_buffer"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdbool_8h.html#bool">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_send_cmd_and_buffer">duck_io_send_cmd_and_buffer</a> (<a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> io_cmd)</td></tr>
<tr class="separator:duck_io_send_cmd_and_buffer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_send_cmd_and_receive_buf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdbool_8h.html#bool">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_send_cmd_and_receive_buf">duck_io_send_cmd_and_receive_buffer</a> (<a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> io_cmd)</td></tr>
<tr class="separator:duck_io_send_cmd_and_receive_buf"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:duck_io_rx_byte_done"><td class="memItemLeft" align="right" valign="top">volatile <a class="el" href="stdbool_8h.html#bool">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_rx_byte_done">duck_io_rx_byte_done</a></td></tr>
<tr class="separator:duck_io_rx_byte_done"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_rx_byte"><td class="memItemLeft" align="right" valign="top">volatile <a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_rx_byte">duck_io_rx_byte</a></td></tr>
<tr class="separator:duck_io_rx_byte"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_rx_buf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_rx_buf">duck_io_rx_buf</a> [<a class="el" href="laptop__io_8h.html#DUCK_IO_LEN_RX_MAX">DUCK_IO_LEN_RX_MAX</a>]</td></tr>
<tr class="separator:duck_io_rx_buf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_rx_buf_len"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_rx_buf_len">duck_io_rx_buf_len</a></td></tr>
<tr class="separator:duck_io_rx_buf_len"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_tx_buf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_tx_buf">duck_io_tx_buf</a> [<a class="el" href="laptop__io_8h.html#DUCK_IO_LEN_TX_MAX">DUCK_IO_LEN_TX_MAX</a>]</td></tr>
<tr class="separator:duck_io_tx_buf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:duck_io_tx_buf_len"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="laptop__io_8h.html#duck_io_tx_buf_len">duck_io_tx_buf_len</a></td></tr>
<tr class="separator:duck_io_tx_buf_len"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p ><a class="anchor" id="megaduck_laptop_io_docs"></a></p>
<h1><a class="anchor" id="autotoc_md309"></a>
MegaDuck Laptop Peripheral IO support</h1>
<p >The MegaDuck Laptop models (Spanish and German) have several built-in hardware peripherals which are attached via a controller that is communicated with using the serial link port.</p>
<dl class="section note"><dt>Note</dt><dd>Using the duck_io_* functions referenced from this header file will cause the duck_io_ serial interrupt handler to be automatically installed.</dd></dl>
<p>To use any functions here, <a class="el" href="laptop__io_8h.html#duck_io_laptop_init">duck_io_laptop_init()</a> must be called first (just once).</p>
<p >For the present time all of the serial operations are blocking, they do not return until completed. </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="_MEGADUCK_LAPTOP_IO_H" name="_MEGADUCK_LAPTOP_IO_H"></a>
<h2 class="memtitle"><span class="permalink"><a href="#_MEGADUCK_LAPTOP_IO_H">&#9670;&nbsp;</a></span>_MEGADUCK_LAPTOP_IO_H</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define _MEGADUCK_LAPTOP_IO_H</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_CMD_INIT_START" name="DUCK_IO_CMD_INIT_START"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_INIT_START">&#9670;&nbsp;</a></span>DUCK_IO_CMD_INIT_START</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_CMD_INIT_START&#160;&#160;&#160;0x00u</td>
</tr>
</table>
</div><div class="memdoc">
<p >Command to request starting the hardware init counter sequence process </p>
</div>
</div>
<a id="DUCK_IO_CMD_GET_KEYS" name="DUCK_IO_CMD_GET_KEYS"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_GET_KEYS">&#9670;&nbsp;</a></span>DUCK_IO_CMD_GET_KEYS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_CMD_GET_KEYS&#160;&#160;&#160;0x00u</td>
</tr>
</table>
</div><div class="memdoc">
<p >Command to get hardware keyboard data by receiving a multi-byte packet </p>
</div>
</div>
<a id="DUCK_IO_CMD_DONE_OR_OK" name="DUCK_IO_CMD_DONE_OR_OK"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_DONE_OR_OK">&#9670;&nbsp;</a></span>DUCK_IO_CMD_DONE_OR_OK</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_CMD_DONE_OR_OK&#160;&#160;&#160;0x01u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_CMD_ABORT_OR_FAIL" name="DUCK_IO_CMD_ABORT_OR_FAIL"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_ABORT_OR_FAIL">&#9670;&nbsp;</a></span>DUCK_IO_CMD_ABORT_OR_FAIL</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_CMD_ABORT_OR_FAIL&#160;&#160;&#160;0x04u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_CMD_PLAY_SPEECH" name="DUCK_IO_CMD_PLAY_SPEECH"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_PLAY_SPEECH">&#9670;&nbsp;</a></span>DUCK_IO_CMD_PLAY_SPEECH</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_CMD_PLAY_SPEECH&#160;&#160;&#160;0x05u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_CMD_RUN_CART_IN_SLOT" name="DUCK_IO_CMD_RUN_CART_IN_SLOT"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_RUN_CART_IN_SLOT">&#9670;&nbsp;</a></span>DUCK_IO_CMD_RUN_CART_IN_SLOT</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_CMD_RUN_CART_IN_SLOT&#160;&#160;&#160;0x08u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_CMD_PRINT_INIT_EXT_IO" name="DUCK_IO_CMD_PRINT_INIT_EXT_IO"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_PRINT_INIT_EXT_IO">&#9670;&nbsp;</a></span>DUCK_IO_CMD_PRINT_INIT_EXT_IO</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_CMD_PRINT_INIT_EXT_IO&#160;&#160;&#160;0x09u</td>
</tr>
</table>
</div><div class="memdoc">
<p >Command to init the printer and return status + model type </p>
</div>
</div>
<a id="DUCK_IO_CMD_SET_RTC" name="DUCK_IO_CMD_SET_RTC"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_SET_RTC">&#9670;&nbsp;</a></span>DUCK_IO_CMD_SET_RTC</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_CMD_SET_RTC&#160;&#160;&#160;0x0Bu</td>
</tr>
</table>
</div><div class="memdoc">
<p >Command to set hardware RTC by sending a multi-byte packet </p>
</div>
</div>
<a id="DUCK_IO_CMD_GET_RTC" name="DUCK_IO_CMD_GET_RTC"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_GET_RTC">&#9670;&nbsp;</a></span>DUCK_IO_CMD_GET_RTC</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_CMD_GET_RTC&#160;&#160;&#160;0x0Cu</td>
</tr>
</table>
</div><div class="memdoc">
<p >Command to get hardware RTC by receiving a a multi-byte packet </p>
</div>
</div>
<a id="DUCK_IO_CMD_PRINT_SEND_BYTES" name="DUCK_IO_CMD_PRINT_SEND_BYTES"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_PRINT_SEND_BYTES">&#9670;&nbsp;</a></span>DUCK_IO_CMD_PRINT_SEND_BYTES</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_CMD_PRINT_SEND_BYTES&#160;&#160;&#160;0x11u</td>
</tr>
</table>
</div><div class="memdoc">
<p >Send printer data </p>
</div>
</div>
<a id="DUCK_IO_REPLY_BOOT_UNSET" name="DUCK_IO_REPLY_BOOT_UNSET"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_REPLY_BOOT_UNSET">&#9670;&nbsp;</a></span>DUCK_IO_REPLY_BOOT_UNSET</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_REPLY_BOOT_UNSET&#160;&#160;&#160;0x00u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_REPLY_BOOT_FAIL" name="DUCK_IO_REPLY_BOOT_FAIL"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_REPLY_BOOT_FAIL">&#9670;&nbsp;</a></span>DUCK_IO_REPLY_BOOT_FAIL</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_REPLY_BOOT_FAIL&#160;&#160;&#160;0x01u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_REPLY_BUFFER_XFER_OK" name="DUCK_IO_REPLY_BUFFER_XFER_OK"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_REPLY_BUFFER_XFER_OK">&#9670;&nbsp;</a></span>DUCK_IO_REPLY_BUFFER_XFER_OK</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_REPLY_BUFFER_XFER_OK&#160;&#160;&#160;0x01u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_REPLY_SEND_BUFFER_OK" name="DUCK_IO_REPLY_SEND_BUFFER_OK"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_REPLY_SEND_BUFFER_OK">&#9670;&nbsp;</a></span>DUCK_IO_REPLY_SEND_BUFFER_OK</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_REPLY_SEND_BUFFER_OK&#160;&#160;&#160;0x03u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_REPLY_BOOT_OK" name="DUCK_IO_REPLY_BOOT_OK"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_REPLY_BOOT_OK">&#9670;&nbsp;</a></span>DUCK_IO_REPLY_BOOT_OK</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_REPLY_BOOT_OK&#160;&#160;&#160;0x01u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_LEN_KBD_GET" name="DUCK_IO_LEN_KBD_GET"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_LEN_KBD_GET">&#9670;&nbsp;</a></span>DUCK_IO_LEN_KBD_GET</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_LEN_KBD_GET&#160;&#160;&#160;2u</td>
</tr>
</table>
</div><div class="memdoc">
<p >Get Keyboard key payload size: 2 bytes Payload (excludes 1 length header byte, 1 byte Checksum) </p>
</div>
</div>
<a id="DUCK_IO_LEN_RTC_GET" name="DUCK_IO_LEN_RTC_GET"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_LEN_RTC_GET">&#9670;&nbsp;</a></span>DUCK_IO_LEN_RTC_GET</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_LEN_RTC_GET&#160;&#160;&#160;8u</td>
</tr>
</table>
</div><div class="memdoc">
<p >Get RTC payload size: 8 bytes Payload (excludes 1 length header byte, 1 byte Checksum) </p>
</div>
</div>
<a id="DUCK_IO_LEN_RTC_SET" name="DUCK_IO_LEN_RTC_SET"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_LEN_RTC_SET">&#9670;&nbsp;</a></span>DUCK_IO_LEN_RTC_SET</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_LEN_RTC_SET&#160;&#160;&#160;8u</td>
</tr>
</table>
</div><div class="memdoc">
<p >Set RTC payload size: 8 bytes Payload (excludes 1 length header byte, 1 byte Checksum) </p>
</div>
</div>
<a id="DUCK_IO_LEN_PLAY_SPEECH" name="DUCK_IO_LEN_PLAY_SPEECH"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_LEN_PLAY_SPEECH">&#9670;&nbsp;</a></span>DUCK_IO_LEN_PLAY_SPEECH</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_LEN_PLAY_SPEECH&#160;&#160;&#160;1u</td>
</tr>
</table>
</div><div class="memdoc">
<p >Play Speech payload size: 1 byte Payload (excludes 1 length header byte, 1 byte Checksum) </p>
</div>
</div>
<a id="DUCK_IO_REPLY_NO_CART_IN_SLOT" name="DUCK_IO_REPLY_NO_CART_IN_SLOT"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_REPLY_NO_CART_IN_SLOT">&#9670;&nbsp;</a></span>DUCK_IO_REPLY_NO_CART_IN_SLOT</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_REPLY_NO_CART_IN_SLOT&#160;&#160;&#160;06u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_LEN_RX_MAX" name="DUCK_IO_LEN_RX_MAX"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_LEN_RX_MAX">&#9670;&nbsp;</a></span>DUCK_IO_LEN_RX_MAX</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_LEN_RX_MAX&#160;&#160;&#160;14u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_LEN_TX_MAX" name="DUCK_IO_LEN_TX_MAX"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_LEN_TX_MAX">&#9670;&nbsp;</a></span>DUCK_IO_LEN_TX_MAX</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_LEN_TX_MAX&#160;&#160;&#160;14u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_TIMEOUT_2_MSEC" name="DUCK_IO_TIMEOUT_2_MSEC"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_TIMEOUT_2_MSEC">&#9670;&nbsp;</a></span>DUCK_IO_TIMEOUT_2_MSEC</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_TIMEOUT_2_MSEC&#160;&#160;&#160;2u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_TIMEOUT_100_MSEC" name="DUCK_IO_TIMEOUT_100_MSEC"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_TIMEOUT_100_MSEC">&#9670;&nbsp;</a></span>DUCK_IO_TIMEOUT_100_MSEC</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_TIMEOUT_100_MSEC&#160;&#160;&#160;100u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_TIMEOUT_200_MSEC" name="DUCK_IO_TIMEOUT_200_MSEC"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_TIMEOUT_200_MSEC">&#9670;&nbsp;</a></span>DUCK_IO_TIMEOUT_200_MSEC</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_TIMEOUT_200_MSEC&#160;&#160;&#160;200u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_SPEECH_CMD_MIN" name="DUCK_IO_SPEECH_CMD_MIN"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_SPEECH_CMD_MIN">&#9670;&nbsp;</a></span>DUCK_IO_SPEECH_CMD_MIN</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_SPEECH_CMD_MIN&#160;&#160;&#160;1</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_SPEECH_CMD_MAX" name="DUCK_IO_SPEECH_CMD_MAX"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_SPEECH_CMD_MAX">&#9670;&nbsp;</a></span>DUCK_IO_SPEECH_CMD_MAX</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_SPEECH_CMD_MAX&#160;&#160;&#160;6</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_RTC_YEAR" name="DUCK_IO_RTC_YEAR"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_YEAR">&#9670;&nbsp;</a></span>DUCK_IO_RTC_YEAR</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_RTC_YEAR&#160;&#160;&#160;0u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_RTC_MON" name="DUCK_IO_RTC_MON"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_MON">&#9670;&nbsp;</a></span>DUCK_IO_RTC_MON</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_RTC_MON&#160;&#160;&#160;1u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_RTC_DAY" name="DUCK_IO_RTC_DAY"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_DAY">&#9670;&nbsp;</a></span>DUCK_IO_RTC_DAY</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_RTC_DAY&#160;&#160;&#160;2u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_RTC_WEEKDAY" name="DUCK_IO_RTC_WEEKDAY"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_WEEKDAY">&#9670;&nbsp;</a></span>DUCK_IO_RTC_WEEKDAY</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_RTC_WEEKDAY&#160;&#160;&#160;3u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_RTC_AMPM" name="DUCK_IO_RTC_AMPM"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_AMPM">&#9670;&nbsp;</a></span>DUCK_IO_RTC_AMPM</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_RTC_AMPM&#160;&#160;&#160;4u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_RTC_HOUR" name="DUCK_IO_RTC_HOUR"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_HOUR">&#9670;&nbsp;</a></span>DUCK_IO_RTC_HOUR</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_RTC_HOUR&#160;&#160;&#160;5u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_RTC_MIN" name="DUCK_IO_RTC_MIN"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_MIN">&#9670;&nbsp;</a></span>DUCK_IO_RTC_MIN</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_RTC_MIN&#160;&#160;&#160;6u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_RTC_SEC" name="DUCK_IO_RTC_SEC"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_SEC">&#9670;&nbsp;</a></span>DUCK_IO_RTC_SEC</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_RTC_SEC&#160;&#160;&#160;7u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_KBD_FLAGS" name="DUCK_IO_KBD_FLAGS"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_KBD_FLAGS">&#9670;&nbsp;</a></span>DUCK_IO_KBD_FLAGS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_KBD_FLAGS&#160;&#160;&#160;0u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_KBD_KEYCODE" name="DUCK_IO_KBD_KEYCODE"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_KBD_KEYCODE">&#9670;&nbsp;</a></span>DUCK_IO_KBD_KEYCODE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_KBD_KEYCODE&#160;&#160;&#160;1u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_PRINTER_FAIL" name="DUCK_IO_PRINTER_FAIL"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_PRINTER_FAIL">&#9670;&nbsp;</a></span>DUCK_IO_PRINTER_FAIL</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_PRINTER_FAIL&#160;&#160;&#160;0x00u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_PRINTER_TYPE_2_PASS" name="DUCK_IO_PRINTER_TYPE_2_PASS"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_PRINTER_TYPE_2_PASS">&#9670;&nbsp;</a></span>DUCK_IO_PRINTER_TYPE_2_PASS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_PRINTER_TYPE_2_PASS&#160;&#160;&#160;0x01u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_PRINTER_TYPE_1_PASS" name="DUCK_IO_PRINTER_TYPE_1_PASS"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_PRINTER_TYPE_1_PASS">&#9670;&nbsp;</a></span>DUCK_IO_PRINTER_TYPE_1_PASS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_PRINTER_TYPE_1_PASS&#160;&#160;&#160;0x02u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="DUCK_IO_PRINTER_MAYBE_BUSY" name="DUCK_IO_PRINTER_MAYBE_BUSY"></a>
<h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_PRINTER_MAYBE_BUSY">&#9670;&nbsp;</a></span>DUCK_IO_PRINTER_MAYBE_BUSY</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DUCK_IO_PRINTER_MAYBE_BUSY&#160;&#160;&#160;0x03u</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="duck_io_send_byte" name="duck_io_send_byte"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_send_byte">&#9670;&nbsp;</a></span>duck_io_send_byte()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void duck_io_send_byte </td>
<td>(</td>
<td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
<td class="paramname"><em>tx_byte</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p >Sends a byte over serial to the MegaDuck laptop peripheral</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tx_byte</td><td>Byte to send </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="duck_io_read_byte_no_timeout" name="duck_io_read_byte_no_timeout"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_read_byte_no_timeout">&#9670;&nbsp;</a></span>duck_io_read_byte_no_timeout()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_read_byte_no_timeout </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p >Reads a byte over serial from the MegaDuck laptop peripheral with NO timeout</p>
<p >Returns: the received byte</p>
<p >If there is no reply then it will hang forever </p>
</div>
</div>
<a id="duck_io_enable_read_byte" name="duck_io_enable_read_byte"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_enable_read_byte">&#9670;&nbsp;</a></span>duck_io_enable_read_byte()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void duck_io_enable_read_byte </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p >Prepares to receive serial data from the MegaDuck laptop peripheral</p>
<ul>
<li>Sets serial IO to external clock and enables ready state. </li>
<li>Turns on Serial interrupt, clears any pending interrupts and then turns interrupts on (state of <a class="el" href="gb_2hardware_8h.html#IE_REG">IE_REG</a> should be preserved before calling this and then restored at the end of the serial communication being performed). </li>
</ul>
</div>
</div>
<a id="duck_io_laptop_init" name="duck_io_laptop_init"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_laptop_init">&#9670;&nbsp;</a></span>duck_io_laptop_init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="stdbool_8h.html#bool">bool</a> duck_io_laptop_init </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p >Performs init sequence over serial with the MegaDuck laptop peripheral</p>
<p >Returns <code>true</code> if successful, otherwise <code>false</code></p>
<p >Needs to be done <em>just once</em> any time system is powered on or a cartridge is booted.</p>
<p >Sends count up sequence + some commands, then waits for a matching count down sequence in reverse. </p>
</div>
</div>
<a id="duck_io_printer_last_status" name="duck_io_printer_last_status"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_printer_last_status">&#9670;&nbsp;</a></span>duck_io_printer_last_status()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_printer_last_status </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p >Returns status of MegaDuck Printer as last detected by <a class="el" href="laptop__io_8h.html#duck_io_laptop_init">duck_io_laptop_init()</a> or <a class="el" href="laptop__io_8h.html#duck_io_printer_query">duck_io_printer_query()</a></p>
<p >Should be called immediately before trying to print</p>
<p >Returned unsigned 8 bit value will have Printer Type and Status in bits 1..0</p>
<p >The resulting value will be cached and used for any subsequent <a class="el" href="laptop__io_8h.html#duck_io_printer_last_status">duck_io_printer_last_status()</a> calls.</p>
<p ><a class="el" href="laptop__io_8h.html#duck_io_laptop_init">duck_io_laptop_init()</a> must be called first </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="laptop__io_8h.html#DUCK_IO_PRINTER_FAIL">DUCK_IO_PRINTER_FAIL</a>, <a class="el" href="laptop__io_8h.html#DUCK_IO_PRINTER_TYPE_2_PASS">DUCK_IO_PRINTER_TYPE_2_PASS</a>, <a class="el" href="laptop__io_8h.html#DUCK_IO_PRINTER_TYPE_1_PASS">DUCK_IO_PRINTER_TYPE_1_PASS</a>, <a class="el" href="laptop__io_8h.html#DUCK_IO_PRINTER_MAYBE_BUSY">DUCK_IO_PRINTER_MAYBE_BUSY</a> <br />
</dd></dl>
</div>
</div>
<a id="duck_io_printer_query" name="duck_io_printer_query"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_printer_query">&#9670;&nbsp;</a></span>duck_io_printer_query()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_printer_query </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p >Performs a 3 x printer query serial command and returns raw system printer reply</p>
<p >Should be called immediately before trying to print</p>
<p >Returned unsigned 8 bit value will have Printer Type and Status in bits 1..0</p>
<p >The resulting value will be cached and used for any subsequent <a class="el" href="laptop__io_8h.html#duck_io_printer_last_status">duck_io_printer_last_status()</a> calls.</p>
<p ><a class="el" href="laptop__io_8h.html#duck_io_laptop_init">duck_io_laptop_init()</a> must be called first </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="laptop__io_8h.html#duck_io_printer_last_status">duck_io_printer_last_status()</a>, <a class="el" href="laptop__io_8h.html#DUCK_IO_PRINTER_FAIL">DUCK_IO_PRINTER_FAIL</a>, <a class="el" href="laptop__io_8h.html#DUCK_IO_PRINTER_TYPE_2_PASS">DUCK_IO_PRINTER_TYPE_2_PASS</a>, <a class="el" href="laptop__io_8h.html#DUCK_IO_PRINTER_TYPE_1_PASS">DUCK_IO_PRINTER_TYPE_1_PASS</a>, <a class="el" href="laptop__io_8h.html#DUCK_IO_PRINTER_MAYBE_BUSY">DUCK_IO_PRINTER_MAYBE_BUSY</a> <br />
</dd></dl>
</div>
</div>
<a id="duck_io_read_byte_with_msecs_tim" name="duck_io_read_byte_with_msecs_tim"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_read_byte_with_msecs_tim">&#9670;&nbsp;</a></span>duck_io_read_byte_with_msecs_timeout()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="stdbool_8h.html#bool">bool</a> duck_io_read_byte_with_msecs_timeout </td>
<td>(</td>
<td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
<td class="paramname"><em>timeout_len_ms</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p >Waits to receive a byte over serial from the MegaDuck laptop peripheral with a timeout</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">timeout_len_ms</td><td>Unit size is in msec (100 is about ~ 103 msec or 6.14 frames)</td></tr>
</table>
</dd>
</dl>
<p>Returns: </p><ul>
<li><code>true</code>: Success, received byte will be in <code>duck_io_rx_byte</code> global </li>
<li><code>false</code>: Read timed out with no reply </li>
</ul>
</div>
</div>
<a id="duck_io_send_byte_and_check_ack_" name="duck_io_send_byte_and_check_ack_"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_send_byte_and_check_ack_">&#9670;&nbsp;</a></span>duck_io_send_byte_and_check_ack_msecs_timeout()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="stdbool_8h.html#bool">bool</a> duck_io_send_byte_and_check_ack_msecs_timeout </td>
<td>(</td>
<td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
<td class="paramname"><em>tx_byte</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
<td class="paramname"><em>timeout_len_ms</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
<td class="paramname"><em>expected_reply</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p >Sends a byte over over serial to the MegaDuck laptop peripheral and waits for a reply with a timeout</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tx_byte</td><td>Byte to send </td></tr>
<tr><td class="paramname">timeout_len_ms</td><td>Unit size is in msec (100 is about ~ 103 msec or 6.14 frames) </td></tr>
<tr><td class="paramname">expected_reply</td><td>The expected value of the reply byte</td></tr>
</table>
</dd>
</dl>
<p>Returns: </p><ul>
<li><code>true</code>: Success </li>
<li><code>false</code>: if timed out or reply byte didn't match expected value </li>
</ul>
</div>
</div>
<a id="duck_io_send_cmd_and_buffer" name="duck_io_send_cmd_and_buffer"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_send_cmd_and_buffer">&#9670;&nbsp;</a></span>duck_io_send_cmd_and_buffer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="stdbool_8h.html#bool">bool</a> duck_io_send_cmd_and_buffer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
<td class="paramname"><em>io_cmd</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p >Sends a command and a multi-byte buffer over serial to the MegaDuck laptop peripheral</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">io_cmd</td><td>Command byte to send</td></tr>
</table>
</dd>
</dl>
<p>The data should be pre-loaded into these globals: </p><ul>
<li><a class="el" href="laptop__io_8h.html#duck_io_tx_buf">duck_io_tx_buf</a> : Buffer with data to send </li>
<li><a class="el" href="laptop__io_8h.html#duck_io_tx_buf_len">duck_io_tx_buf_len</a> : Number of bytes to send</li>
</ul>
<p>Returns: <code>true</code> if succeeded</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_GET_KEYS">DUCK_IO_CMD_GET_KEYS</a>, <a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_SET_RTC">DUCK_IO_CMD_SET_RTC</a> </dd></dl>
</div>
</div>
<a id="duck_io_send_cmd_and_receive_buf" name="duck_io_send_cmd_and_receive_buf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_send_cmd_and_receive_buf">&#9670;&nbsp;</a></span>duck_io_send_cmd_and_receive_buffer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="stdbool_8h.html#bool">bool</a> duck_io_send_cmd_and_receive_buffer </td>
<td>(</td>
<td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
<td class="paramname"><em>io_cmd</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p >Sends a command and then receives a multi-byte buffer over serial from the MegaDuck laptop peripheral</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">io_cmd</td><td>Command byte to send</td></tr>
</table>
</dd>
</dl>
<p>If successful, the received data and length will be in these globals: </p><ul>
<li><a class="el" href="laptop__io_8h.html#duck_io_rx_buf">duck_io_rx_buf</a> : Buffer with received data </li>
<li><a class="el" href="laptop__io_8h.html#duck_io_rx_buf_len">duck_io_rx_buf_len</a> : Number of bytes received</li>
</ul>
<p>Returns: <code>true</code> if succeeded, <code>false</code> if failed (could be no reply, failed checksum, etc)</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="laptop__io_8h.html#DUCK_IO_CMD_GET_RTC">DUCK_IO_CMD_GET_RTC</a> </dd></dl>
</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a id="duck_io_rx_byte_done" name="duck_io_rx_byte_done"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_rx_byte_done">&#9670;&nbsp;</a></span>duck_io_rx_byte_done</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">volatile <a class="el" href="stdbool_8h.html#bool">bool</a> duck_io_rx_byte_done</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">extern</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="duck_io_rx_byte" name="duck_io_rx_byte"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_rx_byte">&#9670;&nbsp;</a></span>duck_io_rx_byte</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">volatile <a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_rx_byte</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">extern</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="duck_io_rx_buf" name="duck_io_rx_buf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_rx_buf">&#9670;&nbsp;</a></span>duck_io_rx_buf</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_rx_buf[<a class="el" href="laptop__io_8h.html#DUCK_IO_LEN_RX_MAX">DUCK_IO_LEN_RX_MAX</a>]</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">extern</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="duck_io_rx_buf_len" name="duck_io_rx_buf_len"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_rx_buf_len">&#9670;&nbsp;</a></span>duck_io_rx_buf_len</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_rx_buf_len</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">extern</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="duck_io_tx_buf" name="duck_io_tx_buf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_tx_buf">&#9670;&nbsp;</a></span>duck_io_tx_buf</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_tx_buf[<a class="el" href="laptop__io_8h.html#DUCK_IO_LEN_TX_MAX">DUCK_IO_LEN_TX_MAX</a>]</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">extern</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="duck_io_tx_buf_len" name="duck_io_tx_buf_len"></a>
<h2 class="memtitle"><span class="permalink"><a href="#duck_io_tx_buf_len">&#9670;&nbsp;</a></span>duck_io_tx_buf_len</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_tx_buf_len</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">extern</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_8bd3092e915ccc8a773a74e0a10d4d15.html">gbdk-lib</a></li><li class="navelem"><a class="el" href="dir_a9f896cff747ba031115e41245385c17.html">include</a></li><li class="navelem"><a class="el" href="dir_0a499b1b991479a5f341a18a1dd374d9.html">duck</a></li><li class="navelem"><a class="el" href="laptop__io_8h.html">laptop_io.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.9.2 </li>
</ul>
</div>
</body>
</html>