git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

docs/api/laptop__io_8h.html

      1 <!-- HTML header for doxygen 1.8.14-->
      2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      3 <html xmlns="http://www.w3.org/1999/xhtml">
      4 <head>
      5 <meta http-equiv="cache-control" content="max-age=86400"/>
      6 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
      7 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
      8 <meta name="generator" content="Doxygen 1.9.2"/>
      9 <meta name="viewport" content="width=device-width, initial-scale=1"/>
     10 <title>GBDK 2020 Docs: gbdk-lib/include/duck/laptop_io.h File Reference</title>
     11 <link href="tabs.css" rel="stylesheet" type="text/css"/>
     12 <script type="text/javascript" src="jquery.js"></script>
     13 <script type="text/javascript" src="dynsections.js"></script>
     14 <link href="navtree.css" rel="stylesheet" type="text/css"/>
     15 <script type="text/javascript" src="resize.js"></script>
     16 <script type="text/javascript" src="navtreedata.js"></script>
     17 <script type="text/javascript" src="navtree.js"></script>
     18 <link href="search/search.css" rel="stylesheet" type="text/css"/>
     19 <script type="text/javascript" src="search/searchdata.js"></script>
     20 <script type="text/javascript" src="search/search.js"></script>
     21 <link href="doxygen.css" rel="stylesheet" type="text/css" />
     22 <link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
     23 <link href="doxygen-awesome-sidebar-only.css" rel="stylesheet" type="text/css"/>
     24 <link href="doxygen-awesome-sidebar-only-darkmode-toggle.css" rel="stylesheet" type="text/css"/>
     25 <!-- BEGIN: doxygen-awesome-css -->
     26         <script type="text/javascript" src="doxygen-awesome-darkmode-toggle.js"></script>
     27         <script type="text/javascript">
     28             DoxygenAwesomeDarkModeToggle.init()
     29         </script>
     30         <script type="text/javascript" src="doxygen-awesome-paragraph-link.js"></script>
     31         <script type="text/javascript">
     32             DoxygenAwesomeParagraphLink.init()
     33         </script>        
     34 <!-- END: doxygen-awesome-css -->
     35 </head>
     36 <body>
     37 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
     38 <div id="titlearea">
     39 <table cellspacing="0" cellpadding="0">
     40  <tbody>
     41  <tr style="height: 56px;">
     42   <td id="projectalign" style="padding-left: 0.5em;">
     43    <div id="projectname">GBDK 2020 Docs
     44    &#160;<span id="projectnumber">4.5.0</span>
     45    </div>
     46    <div id="projectbrief">API Documentation for GBDK 2020</div>
     47   </td>
     48  </tr>
     49  </tbody>
     50 </table>
     51 </div>
     52 <!-- end header part -->
     53 <!-- Generated by Doxygen 1.9.2 -->
     54 <script type="text/javascript">
     55 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
     56 var searchBox = new SearchBox("searchBox", "search",'Search','.html');
     57 /* @license-end */
     58 </script>
     59 <script type="text/javascript" src="menudata.js"></script>
     60 <script type="text/javascript" src="menu.js"></script>
     61 <script type="text/javascript">
     62 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
     63 $(function() {
     64   initMenu('',true,false,'search.php','Search');
     65   $(document).ready(function() { init_search(); });
     66 });
     67 /* @license-end */
     68 </script>
     69 <div id="main-nav"></div>
     70 </div><!-- top -->
     71 <div id="side-nav" class="ui-resizable side-nav-resizable">
     72   <div id="nav-tree">
     73     <div id="nav-tree-contents">
     74       <div id="nav-sync" class="sync"></div>
     75     </div>
     76   </div>
     77   <div id="splitbar" style="-moz-user-select:none;" 
     78        class="ui-resizable-handle">
     79   </div>
     80 </div>
     81 <script type="text/javascript">
     82 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
     83 $(document).ready(function(){initNavTree('laptop__io_8h.html',''); initResizable(); });
     84 /* @license-end */
     85 </script>
     86 <div id="doc-content">
     87 <!-- window showing the filter options -->
     88 <div id="MSearchSelectWindow"
     89      onmouseover="return searchBox.OnSearchSelectShow()"
     90      onmouseout="return searchBox.OnSearchSelectHide()"
     91      onkeydown="return searchBox.OnSearchSelectKey(event)">
     92 </div>
     93 
     94 <!-- iframe showing the search results (closed by default) -->
     95 <div id="MSearchResultsWindow">
     96 <iframe src="javascript:void(0)" frameborder="0" 
     97         name="MSearchResults" id="MSearchResults">
     98 </iframe>
     99 </div>
    100 
    101 <div class="header">
    102   <div class="summary">
    103 <a href="#define-members">Macros</a> &#124;
    104 <a href="#func-members">Functions</a> &#124;
    105 <a href="#var-members">Variables</a>  </div>
    106   <div class="headertitle"><div class="title">laptop_io.h File Reference</div></div>
    107 </div><!--header-->
    108 <div class="contents">
    109 <div class="textblock"><code>#include &lt;<a class="el" href="platform_8h_source.html">gbdk/platform.h</a>&gt;</code><br />
    110 <code>#include &lt;<a class="el" href="stdint_8h_source.html">stdint.h</a>&gt;</code><br />
    111 <code>#include &lt;<a class="el" href="stdbool_8h_source.html">stdbool.h</a>&gt;</code><br />
    112 </div>
    113 <p><a href="laptop__io_8h_source.html">Go to the source code of this file.</a></p>
    114 <table class="memberdecls">
    115 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
    116 Macros</h2></td></tr>
    117 <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>
    118 <tr class="separator:_MEGADUCK_LAPTOP_IO_H"><td class="memSeparator" colspan="2">&#160;</td></tr>
    119 <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>
    120 <tr class="separator:DUCK_IO_CMD_INIT_START"><td class="memSeparator" colspan="2">&#160;</td></tr>
    121 <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>
    122 <tr class="separator:DUCK_IO_CMD_GET_KEYS"><td class="memSeparator" colspan="2">&#160;</td></tr>
    123 <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>
    124 <tr class="separator:DUCK_IO_CMD_DONE_OR_OK"><td class="memSeparator" colspan="2">&#160;</td></tr>
    125 <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>
    126 <tr class="separator:DUCK_IO_CMD_ABORT_OR_FAIL"><td class="memSeparator" colspan="2">&#160;</td></tr>
    127 <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>
    128 <tr class="separator:DUCK_IO_CMD_PLAY_SPEECH"><td class="memSeparator" colspan="2">&#160;</td></tr>
    129 <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>
    130 <tr class="separator:DUCK_IO_CMD_RUN_CART_IN_SLOT"><td class="memSeparator" colspan="2">&#160;</td></tr>
    131 <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>
    132 <tr class="separator:DUCK_IO_CMD_PRINT_INIT_EXT_IO"><td class="memSeparator" colspan="2">&#160;</td></tr>
    133 <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>
    134 <tr class="separator:DUCK_IO_CMD_SET_RTC"><td class="memSeparator" colspan="2">&#160;</td></tr>
    135 <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>
    136 <tr class="separator:DUCK_IO_CMD_GET_RTC"><td class="memSeparator" colspan="2">&#160;</td></tr>
    137 <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>
    138 <tr class="separator:DUCK_IO_CMD_PRINT_SEND_BYTES"><td class="memSeparator" colspan="2">&#160;</td></tr>
    139 <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>
    140 <tr class="separator:DUCK_IO_REPLY_BOOT_UNSET"><td class="memSeparator" colspan="2">&#160;</td></tr>
    141 <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>
    142 <tr class="separator:DUCK_IO_REPLY_BOOT_FAIL"><td class="memSeparator" colspan="2">&#160;</td></tr>
    143 <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>
    144 <tr class="separator:DUCK_IO_REPLY_BUFFER_XFER_OK"><td class="memSeparator" colspan="2">&#160;</td></tr>
    145 <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>
    146 <tr class="separator:DUCK_IO_REPLY_SEND_BUFFER_OK"><td class="memSeparator" colspan="2">&#160;</td></tr>
    147 <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>
    148 <tr class="separator:DUCK_IO_REPLY_BOOT_OK"><td class="memSeparator" colspan="2">&#160;</td></tr>
    149 <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>
    150 <tr class="separator:DUCK_IO_LEN_KBD_GET"><td class="memSeparator" colspan="2">&#160;</td></tr>
    151 <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>
    152 <tr class="separator:DUCK_IO_LEN_RTC_GET"><td class="memSeparator" colspan="2">&#160;</td></tr>
    153 <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>
    154 <tr class="separator:DUCK_IO_LEN_RTC_SET"><td class="memSeparator" colspan="2">&#160;</td></tr>
    155 <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>
    156 <tr class="separator:DUCK_IO_LEN_PLAY_SPEECH"><td class="memSeparator" colspan="2">&#160;</td></tr>
    157 <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>
    158 <tr class="separator:DUCK_IO_REPLY_NO_CART_IN_SLOT"><td class="memSeparator" colspan="2">&#160;</td></tr>
    159 <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>
    160 <tr class="separator:DUCK_IO_LEN_RX_MAX"><td class="memSeparator" colspan="2">&#160;</td></tr>
    161 <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>
    162 <tr class="separator:DUCK_IO_LEN_TX_MAX"><td class="memSeparator" colspan="2">&#160;</td></tr>
    163 <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>
    164 <tr class="separator:DUCK_IO_TIMEOUT_2_MSEC"><td class="memSeparator" colspan="2">&#160;</td></tr>
    165 <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>
    166 <tr class="separator:DUCK_IO_TIMEOUT_100_MSEC"><td class="memSeparator" colspan="2">&#160;</td></tr>
    167 <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>
    168 <tr class="separator:DUCK_IO_TIMEOUT_200_MSEC"><td class="memSeparator" colspan="2">&#160;</td></tr>
    169 <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>
    170 <tr class="separator:DUCK_IO_SPEECH_CMD_MIN"><td class="memSeparator" colspan="2">&#160;</td></tr>
    171 <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>
    172 <tr class="separator:DUCK_IO_SPEECH_CMD_MAX"><td class="memSeparator" colspan="2">&#160;</td></tr>
    173 <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>
    174 <tr class="separator:DUCK_IO_RTC_YEAR"><td class="memSeparator" colspan="2">&#160;</td></tr>
    175 <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>
    176 <tr class="separator:DUCK_IO_RTC_MON"><td class="memSeparator" colspan="2">&#160;</td></tr>
    177 <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>
    178 <tr class="separator:DUCK_IO_RTC_DAY"><td class="memSeparator" colspan="2">&#160;</td></tr>
    179 <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>
    180 <tr class="separator:DUCK_IO_RTC_WEEKDAY"><td class="memSeparator" colspan="2">&#160;</td></tr>
    181 <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>
    182 <tr class="separator:DUCK_IO_RTC_AMPM"><td class="memSeparator" colspan="2">&#160;</td></tr>
    183 <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>
    184 <tr class="separator:DUCK_IO_RTC_HOUR"><td class="memSeparator" colspan="2">&#160;</td></tr>
    185 <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>
    186 <tr class="separator:DUCK_IO_RTC_MIN"><td class="memSeparator" colspan="2">&#160;</td></tr>
    187 <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>
    188 <tr class="separator:DUCK_IO_RTC_SEC"><td class="memSeparator" colspan="2">&#160;</td></tr>
    189 <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>
    190 <tr class="separator:DUCK_IO_KBD_FLAGS"><td class="memSeparator" colspan="2">&#160;</td></tr>
    191 <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>
    192 <tr class="separator:DUCK_IO_KBD_KEYCODE"><td class="memSeparator" colspan="2">&#160;</td></tr>
    193 <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>
    194 <tr class="separator:DUCK_IO_PRINTER_FAIL"><td class="memSeparator" colspan="2">&#160;</td></tr>
    195 <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>
    196 <tr class="separator:DUCK_IO_PRINTER_TYPE_2_PASS"><td class="memSeparator" colspan="2">&#160;</td></tr>
    197 <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>
    198 <tr class="separator:DUCK_IO_PRINTER_TYPE_1_PASS"><td class="memSeparator" colspan="2">&#160;</td></tr>
    199 <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>
    200 <tr class="separator:DUCK_IO_PRINTER_MAYBE_BUSY"><td class="memSeparator" colspan="2">&#160;</td></tr>
    201 </table><table class="memberdecls">
    202 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
    203 Functions</h2></td></tr>
    204 <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>
    205 <tr class="separator:duck_io_send_byte"><td class="memSeparator" colspan="2">&#160;</td></tr>
    206 <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>
    207 <tr class="separator:duck_io_read_byte_no_timeout"><td class="memSeparator" colspan="2">&#160;</td></tr>
    208 <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>
    209 <tr class="separator:duck_io_enable_read_byte"><td class="memSeparator" colspan="2">&#160;</td></tr>
    210 <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>
    211 <tr class="separator:duck_io_laptop_init"><td class="memSeparator" colspan="2">&#160;</td></tr>
    212 <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>
    213 <tr class="separator:duck_io_printer_last_status"><td class="memSeparator" colspan="2">&#160;</td></tr>
    214 <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>
    215 <tr class="separator:duck_io_printer_query"><td class="memSeparator" colspan="2">&#160;</td></tr>
    216 <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>
    217 <tr class="separator:duck_io_read_byte_with_msecs_tim"><td class="memSeparator" colspan="2">&#160;</td></tr>
    218 <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>
    219 <tr class="separator:duck_io_send_byte_and_check_ack_"><td class="memSeparator" colspan="2">&#160;</td></tr>
    220 <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>
    221 <tr class="separator:duck_io_send_cmd_and_buffer"><td class="memSeparator" colspan="2">&#160;</td></tr>
    222 <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>
    223 <tr class="separator:duck_io_send_cmd_and_receive_buf"><td class="memSeparator" colspan="2">&#160;</td></tr>
    224 </table><table class="memberdecls">
    225 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
    226 Variables</h2></td></tr>
    227 <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>
    228 <tr class="separator:duck_io_rx_byte_done"><td class="memSeparator" colspan="2">&#160;</td></tr>
    229 <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>
    230 <tr class="separator:duck_io_rx_byte"><td class="memSeparator" colspan="2">&#160;</td></tr>
    231 <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>
    232 <tr class="separator:duck_io_rx_buf"><td class="memSeparator" colspan="2">&#160;</td></tr>
    233 <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>
    234 <tr class="separator:duck_io_rx_buf_len"><td class="memSeparator" colspan="2">&#160;</td></tr>
    235 <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>
    236 <tr class="separator:duck_io_tx_buf"><td class="memSeparator" colspan="2">&#160;</td></tr>
    237 <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>
    238 <tr class="separator:duck_io_tx_buf_len"><td class="memSeparator" colspan="2">&#160;</td></tr>
    239 </table>
    240 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
    241 <div class="textblock"><p ><a class="anchor" id="megaduck_laptop_io_docs"></a></p>
    242 <h1><a class="anchor" id="autotoc_md309"></a>
    243 MegaDuck Laptop Peripheral IO support</h1>
    244 <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>
    245 <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>
    246 <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>
    247 <p >For the present time all of the serial operations are blocking, they do not return until completed. </p>
    248 </div><h2 class="groupheader">Macro Definition Documentation</h2>
    249 <a id="_MEGADUCK_LAPTOP_IO_H" name="_MEGADUCK_LAPTOP_IO_H"></a>
    250 <h2 class="memtitle"><span class="permalink"><a href="#_MEGADUCK_LAPTOP_IO_H">&#9670;&nbsp;</a></span>_MEGADUCK_LAPTOP_IO_H</h2>
    251 
    252 <div class="memitem">
    253 <div class="memproto">
    254       <table class="memname">
    255         <tr>
    256           <td class="memname">#define _MEGADUCK_LAPTOP_IO_H</td>
    257         </tr>
    258       </table>
    259 </div><div class="memdoc">
    260 
    261 </div>
    262 </div>
    263 <a id="DUCK_IO_CMD_INIT_START" name="DUCK_IO_CMD_INIT_START"></a>
    264 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_INIT_START">&#9670;&nbsp;</a></span>DUCK_IO_CMD_INIT_START</h2>
    265 
    266 <div class="memitem">
    267 <div class="memproto">
    268       <table class="memname">
    269         <tr>
    270           <td class="memname">#define DUCK_IO_CMD_INIT_START&#160;&#160;&#160;0x00u</td>
    271         </tr>
    272       </table>
    273 </div><div class="memdoc">
    274 <p >Command to request starting the hardware init counter sequence process </p>
    275 
    276 </div>
    277 </div>
    278 <a id="DUCK_IO_CMD_GET_KEYS" name="DUCK_IO_CMD_GET_KEYS"></a>
    279 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_GET_KEYS">&#9670;&nbsp;</a></span>DUCK_IO_CMD_GET_KEYS</h2>
    280 
    281 <div class="memitem">
    282 <div class="memproto">
    283       <table class="memname">
    284         <tr>
    285           <td class="memname">#define DUCK_IO_CMD_GET_KEYS&#160;&#160;&#160;0x00u</td>
    286         </tr>
    287       </table>
    288 </div><div class="memdoc">
    289 <p >Command to get hardware keyboard data by receiving a multi-byte packet </p>
    290 
    291 </div>
    292 </div>
    293 <a id="DUCK_IO_CMD_DONE_OR_OK" name="DUCK_IO_CMD_DONE_OR_OK"></a>
    294 <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>
    295 
    296 <div class="memitem">
    297 <div class="memproto">
    298       <table class="memname">
    299         <tr>
    300           <td class="memname">#define DUCK_IO_CMD_DONE_OR_OK&#160;&#160;&#160;0x01u</td>
    301         </tr>
    302       </table>
    303 </div><div class="memdoc">
    304 
    305 </div>
    306 </div>
    307 <a id="DUCK_IO_CMD_ABORT_OR_FAIL" name="DUCK_IO_CMD_ABORT_OR_FAIL"></a>
    308 <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>
    309 
    310 <div class="memitem">
    311 <div class="memproto">
    312       <table class="memname">
    313         <tr>
    314           <td class="memname">#define DUCK_IO_CMD_ABORT_OR_FAIL&#160;&#160;&#160;0x04u</td>
    315         </tr>
    316       </table>
    317 </div><div class="memdoc">
    318 
    319 </div>
    320 </div>
    321 <a id="DUCK_IO_CMD_PLAY_SPEECH" name="DUCK_IO_CMD_PLAY_SPEECH"></a>
    322 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_PLAY_SPEECH">&#9670;&nbsp;</a></span>DUCK_IO_CMD_PLAY_SPEECH</h2>
    323 
    324 <div class="memitem">
    325 <div class="memproto">
    326       <table class="memname">
    327         <tr>
    328           <td class="memname">#define DUCK_IO_CMD_PLAY_SPEECH&#160;&#160;&#160;0x05u</td>
    329         </tr>
    330       </table>
    331 </div><div class="memdoc">
    332 
    333 </div>
    334 </div>
    335 <a id="DUCK_IO_CMD_RUN_CART_IN_SLOT" name="DUCK_IO_CMD_RUN_CART_IN_SLOT"></a>
    336 <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>
    337 
    338 <div class="memitem">
    339 <div class="memproto">
    340       <table class="memname">
    341         <tr>
    342           <td class="memname">#define DUCK_IO_CMD_RUN_CART_IN_SLOT&#160;&#160;&#160;0x08u</td>
    343         </tr>
    344       </table>
    345 </div><div class="memdoc">
    346 
    347 </div>
    348 </div>
    349 <a id="DUCK_IO_CMD_PRINT_INIT_EXT_IO" name="DUCK_IO_CMD_PRINT_INIT_EXT_IO"></a>
    350 <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>
    351 
    352 <div class="memitem">
    353 <div class="memproto">
    354       <table class="memname">
    355         <tr>
    356           <td class="memname">#define DUCK_IO_CMD_PRINT_INIT_EXT_IO&#160;&#160;&#160;0x09u</td>
    357         </tr>
    358       </table>
    359 </div><div class="memdoc">
    360 <p >Command to init the printer and return status + model type </p>
    361 
    362 </div>
    363 </div>
    364 <a id="DUCK_IO_CMD_SET_RTC" name="DUCK_IO_CMD_SET_RTC"></a>
    365 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_SET_RTC">&#9670;&nbsp;</a></span>DUCK_IO_CMD_SET_RTC</h2>
    366 
    367 <div class="memitem">
    368 <div class="memproto">
    369       <table class="memname">
    370         <tr>
    371           <td class="memname">#define DUCK_IO_CMD_SET_RTC&#160;&#160;&#160;0x0Bu</td>
    372         </tr>
    373       </table>
    374 </div><div class="memdoc">
    375 <p >Command to set hardware RTC by sending a multi-byte packet </p>
    376 
    377 </div>
    378 </div>
    379 <a id="DUCK_IO_CMD_GET_RTC" name="DUCK_IO_CMD_GET_RTC"></a>
    380 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_CMD_GET_RTC">&#9670;&nbsp;</a></span>DUCK_IO_CMD_GET_RTC</h2>
    381 
    382 <div class="memitem">
    383 <div class="memproto">
    384       <table class="memname">
    385         <tr>
    386           <td class="memname">#define DUCK_IO_CMD_GET_RTC&#160;&#160;&#160;0x0Cu</td>
    387         </tr>
    388       </table>
    389 </div><div class="memdoc">
    390 <p >Command to get hardware RTC by receiving a a multi-byte packet </p>
    391 
    392 </div>
    393 </div>
    394 <a id="DUCK_IO_CMD_PRINT_SEND_BYTES" name="DUCK_IO_CMD_PRINT_SEND_BYTES"></a>
    395 <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>
    396 
    397 <div class="memitem">
    398 <div class="memproto">
    399       <table class="memname">
    400         <tr>
    401           <td class="memname">#define DUCK_IO_CMD_PRINT_SEND_BYTES&#160;&#160;&#160;0x11u</td>
    402         </tr>
    403       </table>
    404 </div><div class="memdoc">
    405 <p >Send printer data </p>
    406 
    407 </div>
    408 </div>
    409 <a id="DUCK_IO_REPLY_BOOT_UNSET" name="DUCK_IO_REPLY_BOOT_UNSET"></a>
    410 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_REPLY_BOOT_UNSET">&#9670;&nbsp;</a></span>DUCK_IO_REPLY_BOOT_UNSET</h2>
    411 
    412 <div class="memitem">
    413 <div class="memproto">
    414       <table class="memname">
    415         <tr>
    416           <td class="memname">#define DUCK_IO_REPLY_BOOT_UNSET&#160;&#160;&#160;0x00u</td>
    417         </tr>
    418       </table>
    419 </div><div class="memdoc">
    420 
    421 </div>
    422 </div>
    423 <a id="DUCK_IO_REPLY_BOOT_FAIL" name="DUCK_IO_REPLY_BOOT_FAIL"></a>
    424 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_REPLY_BOOT_FAIL">&#9670;&nbsp;</a></span>DUCK_IO_REPLY_BOOT_FAIL</h2>
    425 
    426 <div class="memitem">
    427 <div class="memproto">
    428       <table class="memname">
    429         <tr>
    430           <td class="memname">#define DUCK_IO_REPLY_BOOT_FAIL&#160;&#160;&#160;0x01u</td>
    431         </tr>
    432       </table>
    433 </div><div class="memdoc">
    434 
    435 </div>
    436 </div>
    437 <a id="DUCK_IO_REPLY_BUFFER_XFER_OK" name="DUCK_IO_REPLY_BUFFER_XFER_OK"></a>
    438 <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>
    439 
    440 <div class="memitem">
    441 <div class="memproto">
    442       <table class="memname">
    443         <tr>
    444           <td class="memname">#define DUCK_IO_REPLY_BUFFER_XFER_OK&#160;&#160;&#160;0x01u</td>
    445         </tr>
    446       </table>
    447 </div><div class="memdoc">
    448 
    449 </div>
    450 </div>
    451 <a id="DUCK_IO_REPLY_SEND_BUFFER_OK" name="DUCK_IO_REPLY_SEND_BUFFER_OK"></a>
    452 <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>
    453 
    454 <div class="memitem">
    455 <div class="memproto">
    456       <table class="memname">
    457         <tr>
    458           <td class="memname">#define DUCK_IO_REPLY_SEND_BUFFER_OK&#160;&#160;&#160;0x03u</td>
    459         </tr>
    460       </table>
    461 </div><div class="memdoc">
    462 
    463 </div>
    464 </div>
    465 <a id="DUCK_IO_REPLY_BOOT_OK" name="DUCK_IO_REPLY_BOOT_OK"></a>
    466 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_REPLY_BOOT_OK">&#9670;&nbsp;</a></span>DUCK_IO_REPLY_BOOT_OK</h2>
    467 
    468 <div class="memitem">
    469 <div class="memproto">
    470       <table class="memname">
    471         <tr>
    472           <td class="memname">#define DUCK_IO_REPLY_BOOT_OK&#160;&#160;&#160;0x01u</td>
    473         </tr>
    474       </table>
    475 </div><div class="memdoc">
    476 
    477 </div>
    478 </div>
    479 <a id="DUCK_IO_LEN_KBD_GET" name="DUCK_IO_LEN_KBD_GET"></a>
    480 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_LEN_KBD_GET">&#9670;&nbsp;</a></span>DUCK_IO_LEN_KBD_GET</h2>
    481 
    482 <div class="memitem">
    483 <div class="memproto">
    484       <table class="memname">
    485         <tr>
    486           <td class="memname">#define DUCK_IO_LEN_KBD_GET&#160;&#160;&#160;2u</td>
    487         </tr>
    488       </table>
    489 </div><div class="memdoc">
    490 <p >Get Keyboard key payload size: 2 bytes Payload (excludes 1 length header byte, 1 byte Checksum) </p>
    491 
    492 </div>
    493 </div>
    494 <a id="DUCK_IO_LEN_RTC_GET" name="DUCK_IO_LEN_RTC_GET"></a>
    495 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_LEN_RTC_GET">&#9670;&nbsp;</a></span>DUCK_IO_LEN_RTC_GET</h2>
    496 
    497 <div class="memitem">
    498 <div class="memproto">
    499       <table class="memname">
    500         <tr>
    501           <td class="memname">#define DUCK_IO_LEN_RTC_GET&#160;&#160;&#160;8u</td>
    502         </tr>
    503       </table>
    504 </div><div class="memdoc">
    505 <p >Get RTC payload size: 8 bytes Payload (excludes 1 length header byte, 1 byte Checksum) </p>
    506 
    507 </div>
    508 </div>
    509 <a id="DUCK_IO_LEN_RTC_SET" name="DUCK_IO_LEN_RTC_SET"></a>
    510 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_LEN_RTC_SET">&#9670;&nbsp;</a></span>DUCK_IO_LEN_RTC_SET</h2>
    511 
    512 <div class="memitem">
    513 <div class="memproto">
    514       <table class="memname">
    515         <tr>
    516           <td class="memname">#define DUCK_IO_LEN_RTC_SET&#160;&#160;&#160;8u</td>
    517         </tr>
    518       </table>
    519 </div><div class="memdoc">
    520 <p >Set RTC payload size: 8 bytes Payload (excludes 1 length header byte, 1 byte Checksum) </p>
    521 
    522 </div>
    523 </div>
    524 <a id="DUCK_IO_LEN_PLAY_SPEECH" name="DUCK_IO_LEN_PLAY_SPEECH"></a>
    525 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_LEN_PLAY_SPEECH">&#9670;&nbsp;</a></span>DUCK_IO_LEN_PLAY_SPEECH</h2>
    526 
    527 <div class="memitem">
    528 <div class="memproto">
    529       <table class="memname">
    530         <tr>
    531           <td class="memname">#define DUCK_IO_LEN_PLAY_SPEECH&#160;&#160;&#160;1u</td>
    532         </tr>
    533       </table>
    534 </div><div class="memdoc">
    535 <p >Play Speech payload size: 1 byte Payload (excludes 1 length header byte, 1 byte Checksum) </p>
    536 
    537 </div>
    538 </div>
    539 <a id="DUCK_IO_REPLY_NO_CART_IN_SLOT" name="DUCK_IO_REPLY_NO_CART_IN_SLOT"></a>
    540 <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>
    541 
    542 <div class="memitem">
    543 <div class="memproto">
    544       <table class="memname">
    545         <tr>
    546           <td class="memname">#define DUCK_IO_REPLY_NO_CART_IN_SLOT&#160;&#160;&#160;06u</td>
    547         </tr>
    548       </table>
    549 </div><div class="memdoc">
    550 
    551 </div>
    552 </div>
    553 <a id="DUCK_IO_LEN_RX_MAX" name="DUCK_IO_LEN_RX_MAX"></a>
    554 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_LEN_RX_MAX">&#9670;&nbsp;</a></span>DUCK_IO_LEN_RX_MAX</h2>
    555 
    556 <div class="memitem">
    557 <div class="memproto">
    558       <table class="memname">
    559         <tr>
    560           <td class="memname">#define DUCK_IO_LEN_RX_MAX&#160;&#160;&#160;14u</td>
    561         </tr>
    562       </table>
    563 </div><div class="memdoc">
    564 
    565 </div>
    566 </div>
    567 <a id="DUCK_IO_LEN_TX_MAX" name="DUCK_IO_LEN_TX_MAX"></a>
    568 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_LEN_TX_MAX">&#9670;&nbsp;</a></span>DUCK_IO_LEN_TX_MAX</h2>
    569 
    570 <div class="memitem">
    571 <div class="memproto">
    572       <table class="memname">
    573         <tr>
    574           <td class="memname">#define DUCK_IO_LEN_TX_MAX&#160;&#160;&#160;14u</td>
    575         </tr>
    576       </table>
    577 </div><div class="memdoc">
    578 
    579 </div>
    580 </div>
    581 <a id="DUCK_IO_TIMEOUT_2_MSEC" name="DUCK_IO_TIMEOUT_2_MSEC"></a>
    582 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_TIMEOUT_2_MSEC">&#9670;&nbsp;</a></span>DUCK_IO_TIMEOUT_2_MSEC</h2>
    583 
    584 <div class="memitem">
    585 <div class="memproto">
    586       <table class="memname">
    587         <tr>
    588           <td class="memname">#define DUCK_IO_TIMEOUT_2_MSEC&#160;&#160;&#160;2u</td>
    589         </tr>
    590       </table>
    591 </div><div class="memdoc">
    592 
    593 </div>
    594 </div>
    595 <a id="DUCK_IO_TIMEOUT_100_MSEC" name="DUCK_IO_TIMEOUT_100_MSEC"></a>
    596 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_TIMEOUT_100_MSEC">&#9670;&nbsp;</a></span>DUCK_IO_TIMEOUT_100_MSEC</h2>
    597 
    598 <div class="memitem">
    599 <div class="memproto">
    600       <table class="memname">
    601         <tr>
    602           <td class="memname">#define DUCK_IO_TIMEOUT_100_MSEC&#160;&#160;&#160;100u</td>
    603         </tr>
    604       </table>
    605 </div><div class="memdoc">
    606 
    607 </div>
    608 </div>
    609 <a id="DUCK_IO_TIMEOUT_200_MSEC" name="DUCK_IO_TIMEOUT_200_MSEC"></a>
    610 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_TIMEOUT_200_MSEC">&#9670;&nbsp;</a></span>DUCK_IO_TIMEOUT_200_MSEC</h2>
    611 
    612 <div class="memitem">
    613 <div class="memproto">
    614       <table class="memname">
    615         <tr>
    616           <td class="memname">#define DUCK_IO_TIMEOUT_200_MSEC&#160;&#160;&#160;200u</td>
    617         </tr>
    618       </table>
    619 </div><div class="memdoc">
    620 
    621 </div>
    622 </div>
    623 <a id="DUCK_IO_SPEECH_CMD_MIN" name="DUCK_IO_SPEECH_CMD_MIN"></a>
    624 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_SPEECH_CMD_MIN">&#9670;&nbsp;</a></span>DUCK_IO_SPEECH_CMD_MIN</h2>
    625 
    626 <div class="memitem">
    627 <div class="memproto">
    628       <table class="memname">
    629         <tr>
    630           <td class="memname">#define DUCK_IO_SPEECH_CMD_MIN&#160;&#160;&#160;1</td>
    631         </tr>
    632       </table>
    633 </div><div class="memdoc">
    634 
    635 </div>
    636 </div>
    637 <a id="DUCK_IO_SPEECH_CMD_MAX" name="DUCK_IO_SPEECH_CMD_MAX"></a>
    638 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_SPEECH_CMD_MAX">&#9670;&nbsp;</a></span>DUCK_IO_SPEECH_CMD_MAX</h2>
    639 
    640 <div class="memitem">
    641 <div class="memproto">
    642       <table class="memname">
    643         <tr>
    644           <td class="memname">#define DUCK_IO_SPEECH_CMD_MAX&#160;&#160;&#160;6</td>
    645         </tr>
    646       </table>
    647 </div><div class="memdoc">
    648 
    649 </div>
    650 </div>
    651 <a id="DUCK_IO_RTC_YEAR" name="DUCK_IO_RTC_YEAR"></a>
    652 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_YEAR">&#9670;&nbsp;</a></span>DUCK_IO_RTC_YEAR</h2>
    653 
    654 <div class="memitem">
    655 <div class="memproto">
    656       <table class="memname">
    657         <tr>
    658           <td class="memname">#define DUCK_IO_RTC_YEAR&#160;&#160;&#160;0u</td>
    659         </tr>
    660       </table>
    661 </div><div class="memdoc">
    662 
    663 </div>
    664 </div>
    665 <a id="DUCK_IO_RTC_MON" name="DUCK_IO_RTC_MON"></a>
    666 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_MON">&#9670;&nbsp;</a></span>DUCK_IO_RTC_MON</h2>
    667 
    668 <div class="memitem">
    669 <div class="memproto">
    670       <table class="memname">
    671         <tr>
    672           <td class="memname">#define DUCK_IO_RTC_MON&#160;&#160;&#160;1u</td>
    673         </tr>
    674       </table>
    675 </div><div class="memdoc">
    676 
    677 </div>
    678 </div>
    679 <a id="DUCK_IO_RTC_DAY" name="DUCK_IO_RTC_DAY"></a>
    680 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_DAY">&#9670;&nbsp;</a></span>DUCK_IO_RTC_DAY</h2>
    681 
    682 <div class="memitem">
    683 <div class="memproto">
    684       <table class="memname">
    685         <tr>
    686           <td class="memname">#define DUCK_IO_RTC_DAY&#160;&#160;&#160;2u</td>
    687         </tr>
    688       </table>
    689 </div><div class="memdoc">
    690 
    691 </div>
    692 </div>
    693 <a id="DUCK_IO_RTC_WEEKDAY" name="DUCK_IO_RTC_WEEKDAY"></a>
    694 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_WEEKDAY">&#9670;&nbsp;</a></span>DUCK_IO_RTC_WEEKDAY</h2>
    695 
    696 <div class="memitem">
    697 <div class="memproto">
    698       <table class="memname">
    699         <tr>
    700           <td class="memname">#define DUCK_IO_RTC_WEEKDAY&#160;&#160;&#160;3u</td>
    701         </tr>
    702       </table>
    703 </div><div class="memdoc">
    704 
    705 </div>
    706 </div>
    707 <a id="DUCK_IO_RTC_AMPM" name="DUCK_IO_RTC_AMPM"></a>
    708 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_AMPM">&#9670;&nbsp;</a></span>DUCK_IO_RTC_AMPM</h2>
    709 
    710 <div class="memitem">
    711 <div class="memproto">
    712       <table class="memname">
    713         <tr>
    714           <td class="memname">#define DUCK_IO_RTC_AMPM&#160;&#160;&#160;4u</td>
    715         </tr>
    716       </table>
    717 </div><div class="memdoc">
    718 
    719 </div>
    720 </div>
    721 <a id="DUCK_IO_RTC_HOUR" name="DUCK_IO_RTC_HOUR"></a>
    722 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_HOUR">&#9670;&nbsp;</a></span>DUCK_IO_RTC_HOUR</h2>
    723 
    724 <div class="memitem">
    725 <div class="memproto">
    726       <table class="memname">
    727         <tr>
    728           <td class="memname">#define DUCK_IO_RTC_HOUR&#160;&#160;&#160;5u</td>
    729         </tr>
    730       </table>
    731 </div><div class="memdoc">
    732 
    733 </div>
    734 </div>
    735 <a id="DUCK_IO_RTC_MIN" name="DUCK_IO_RTC_MIN"></a>
    736 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_MIN">&#9670;&nbsp;</a></span>DUCK_IO_RTC_MIN</h2>
    737 
    738 <div class="memitem">
    739 <div class="memproto">
    740       <table class="memname">
    741         <tr>
    742           <td class="memname">#define DUCK_IO_RTC_MIN&#160;&#160;&#160;6u</td>
    743         </tr>
    744       </table>
    745 </div><div class="memdoc">
    746 
    747 </div>
    748 </div>
    749 <a id="DUCK_IO_RTC_SEC" name="DUCK_IO_RTC_SEC"></a>
    750 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_RTC_SEC">&#9670;&nbsp;</a></span>DUCK_IO_RTC_SEC</h2>
    751 
    752 <div class="memitem">
    753 <div class="memproto">
    754       <table class="memname">
    755         <tr>
    756           <td class="memname">#define DUCK_IO_RTC_SEC&#160;&#160;&#160;7u</td>
    757         </tr>
    758       </table>
    759 </div><div class="memdoc">
    760 
    761 </div>
    762 </div>
    763 <a id="DUCK_IO_KBD_FLAGS" name="DUCK_IO_KBD_FLAGS"></a>
    764 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_KBD_FLAGS">&#9670;&nbsp;</a></span>DUCK_IO_KBD_FLAGS</h2>
    765 
    766 <div class="memitem">
    767 <div class="memproto">
    768       <table class="memname">
    769         <tr>
    770           <td class="memname">#define DUCK_IO_KBD_FLAGS&#160;&#160;&#160;0u</td>
    771         </tr>
    772       </table>
    773 </div><div class="memdoc">
    774 
    775 </div>
    776 </div>
    777 <a id="DUCK_IO_KBD_KEYCODE" name="DUCK_IO_KBD_KEYCODE"></a>
    778 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_KBD_KEYCODE">&#9670;&nbsp;</a></span>DUCK_IO_KBD_KEYCODE</h2>
    779 
    780 <div class="memitem">
    781 <div class="memproto">
    782       <table class="memname">
    783         <tr>
    784           <td class="memname">#define DUCK_IO_KBD_KEYCODE&#160;&#160;&#160;1u</td>
    785         </tr>
    786       </table>
    787 </div><div class="memdoc">
    788 
    789 </div>
    790 </div>
    791 <a id="DUCK_IO_PRINTER_FAIL" name="DUCK_IO_PRINTER_FAIL"></a>
    792 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_PRINTER_FAIL">&#9670;&nbsp;</a></span>DUCK_IO_PRINTER_FAIL</h2>
    793 
    794 <div class="memitem">
    795 <div class="memproto">
    796       <table class="memname">
    797         <tr>
    798           <td class="memname">#define DUCK_IO_PRINTER_FAIL&#160;&#160;&#160;0x00u</td>
    799         </tr>
    800       </table>
    801 </div><div class="memdoc">
    802 
    803 </div>
    804 </div>
    805 <a id="DUCK_IO_PRINTER_TYPE_2_PASS" name="DUCK_IO_PRINTER_TYPE_2_PASS"></a>
    806 <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>
    807 
    808 <div class="memitem">
    809 <div class="memproto">
    810       <table class="memname">
    811         <tr>
    812           <td class="memname">#define DUCK_IO_PRINTER_TYPE_2_PASS&#160;&#160;&#160;0x01u</td>
    813         </tr>
    814       </table>
    815 </div><div class="memdoc">
    816 
    817 </div>
    818 </div>
    819 <a id="DUCK_IO_PRINTER_TYPE_1_PASS" name="DUCK_IO_PRINTER_TYPE_1_PASS"></a>
    820 <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>
    821 
    822 <div class="memitem">
    823 <div class="memproto">
    824       <table class="memname">
    825         <tr>
    826           <td class="memname">#define DUCK_IO_PRINTER_TYPE_1_PASS&#160;&#160;&#160;0x02u</td>
    827         </tr>
    828       </table>
    829 </div><div class="memdoc">
    830 
    831 </div>
    832 </div>
    833 <a id="DUCK_IO_PRINTER_MAYBE_BUSY" name="DUCK_IO_PRINTER_MAYBE_BUSY"></a>
    834 <h2 class="memtitle"><span class="permalink"><a href="#DUCK_IO_PRINTER_MAYBE_BUSY">&#9670;&nbsp;</a></span>DUCK_IO_PRINTER_MAYBE_BUSY</h2>
    835 
    836 <div class="memitem">
    837 <div class="memproto">
    838       <table class="memname">
    839         <tr>
    840           <td class="memname">#define DUCK_IO_PRINTER_MAYBE_BUSY&#160;&#160;&#160;0x03u</td>
    841         </tr>
    842       </table>
    843 </div><div class="memdoc">
    844 
    845 </div>
    846 </div>
    847 <h2 class="groupheader">Function Documentation</h2>
    848 <a id="duck_io_send_byte" name="duck_io_send_byte"></a>
    849 <h2 class="memtitle"><span class="permalink"><a href="#duck_io_send_byte">&#9670;&nbsp;</a></span>duck_io_send_byte()</h2>
    850 
    851 <div class="memitem">
    852 <div class="memproto">
    853       <table class="memname">
    854         <tr>
    855           <td class="memname">void duck_io_send_byte </td>
    856           <td>(</td>
    857           <td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
    858           <td class="paramname"><em>tx_byte</em></td><td>)</td>
    859           <td></td>
    860         </tr>
    861       </table>
    862 </div><div class="memdoc">
    863 <p >Sends a byte over serial to the MegaDuck laptop peripheral</p>
    864 <dl class="params"><dt>Parameters</dt><dd>
    865   <table class="params">
    866     <tr><td class="paramname">tx_byte</td><td>Byte to send </td></tr>
    867   </table>
    868   </dd>
    869 </dl>
    870 
    871 </div>
    872 </div>
    873 <a id="duck_io_read_byte_no_timeout" name="duck_io_read_byte_no_timeout"></a>
    874 <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>
    875 
    876 <div class="memitem">
    877 <div class="memproto">
    878       <table class="memname">
    879         <tr>
    880           <td class="memname"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_read_byte_no_timeout </td>
    881           <td>(</td>
    882           <td class="paramtype">void&#160;</td>
    883           <td class="paramname"></td><td>)</td>
    884           <td></td>
    885         </tr>
    886       </table>
    887 </div><div class="memdoc">
    888 <p >Reads a byte over serial from the MegaDuck laptop peripheral with NO timeout</p>
    889 <p >Returns: the received byte</p>
    890 <p >If there is no reply then it will hang forever </p>
    891 
    892 </div>
    893 </div>
    894 <a id="duck_io_enable_read_byte" name="duck_io_enable_read_byte"></a>
    895 <h2 class="memtitle"><span class="permalink"><a href="#duck_io_enable_read_byte">&#9670;&nbsp;</a></span>duck_io_enable_read_byte()</h2>
    896 
    897 <div class="memitem">
    898 <div class="memproto">
    899       <table class="memname">
    900         <tr>
    901           <td class="memname">void duck_io_enable_read_byte </td>
    902           <td>(</td>
    903           <td class="paramtype">void&#160;</td>
    904           <td class="paramname"></td><td>)</td>
    905           <td></td>
    906         </tr>
    907       </table>
    908 </div><div class="memdoc">
    909 <p >Prepares to receive serial data from the MegaDuck laptop peripheral</p>
    910 <ul>
    911 <li>Sets serial IO to external clock and enables ready state. </li>
    912 <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>
    913 </ul>
    914 
    915 </div>
    916 </div>
    917 <a id="duck_io_laptop_init" name="duck_io_laptop_init"></a>
    918 <h2 class="memtitle"><span class="permalink"><a href="#duck_io_laptop_init">&#9670;&nbsp;</a></span>duck_io_laptop_init()</h2>
    919 
    920 <div class="memitem">
    921 <div class="memproto">
    922       <table class="memname">
    923         <tr>
    924           <td class="memname"><a class="el" href="stdbool_8h.html#bool">bool</a> duck_io_laptop_init </td>
    925           <td>(</td>
    926           <td class="paramtype">void&#160;</td>
    927           <td class="paramname"></td><td>)</td>
    928           <td></td>
    929         </tr>
    930       </table>
    931 </div><div class="memdoc">
    932 <p >Performs init sequence over serial with the MegaDuck laptop peripheral</p>
    933 <p >Returns <code>true</code> if successful, otherwise <code>false</code></p>
    934 <p >Needs to be done <em>just once</em> any time system is powered on or a cartridge is booted.</p>
    935 <p >Sends count up sequence + some commands, then waits for a matching count down sequence in reverse. </p>
    936 
    937 </div>
    938 </div>
    939 <a id="duck_io_printer_last_status" name="duck_io_printer_last_status"></a>
    940 <h2 class="memtitle"><span class="permalink"><a href="#duck_io_printer_last_status">&#9670;&nbsp;</a></span>duck_io_printer_last_status()</h2>
    941 
    942 <div class="memitem">
    943 <div class="memproto">
    944       <table class="memname">
    945         <tr>
    946           <td class="memname"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_printer_last_status </td>
    947           <td>(</td>
    948           <td class="paramtype">void&#160;</td>
    949           <td class="paramname"></td><td>)</td>
    950           <td></td>
    951         </tr>
    952       </table>
    953 </div><div class="memdoc">
    954 <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>
    955 <p >Should be called immediately before trying to print</p>
    956 <p >Returned unsigned 8 bit value will have Printer Type and Status in bits 1..0</p>
    957 <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>
    958 <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  />
    959  </dd></dl>
    960 
    961 </div>
    962 </div>
    963 <a id="duck_io_printer_query" name="duck_io_printer_query"></a>
    964 <h2 class="memtitle"><span class="permalink"><a href="#duck_io_printer_query">&#9670;&nbsp;</a></span>duck_io_printer_query()</h2>
    965 
    966 <div class="memitem">
    967 <div class="memproto">
    968       <table class="memname">
    969         <tr>
    970           <td class="memname"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_printer_query </td>
    971           <td>(</td>
    972           <td class="paramtype">void&#160;</td>
    973           <td class="paramname"></td><td>)</td>
    974           <td></td>
    975         </tr>
    976       </table>
    977 </div><div class="memdoc">
    978 <p >Performs a 3 x printer query serial command and returns raw system printer reply</p>
    979 <p >Should be called immediately before trying to print</p>
    980 <p >Returned unsigned 8 bit value will have Printer Type and Status in bits 1..0</p>
    981 <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>
    982 <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  />
    983  </dd></dl>
    984 
    985 </div>
    986 </div>
    987 <a id="duck_io_read_byte_with_msecs_tim" name="duck_io_read_byte_with_msecs_tim"></a>
    988 <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>
    989 
    990 <div class="memitem">
    991 <div class="memproto">
    992       <table class="memname">
    993         <tr>
    994           <td class="memname"><a class="el" href="stdbool_8h.html#bool">bool</a> duck_io_read_byte_with_msecs_timeout </td>
    995           <td>(</td>
    996           <td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
    997           <td class="paramname"><em>timeout_len_ms</em></td><td>)</td>
    998           <td></td>
    999         </tr>
   1000       </table>
   1001 </div><div class="memdoc">
   1002 <p >Waits to receive a byte over serial from the MegaDuck laptop peripheral with a timeout</p>
   1003 <dl class="params"><dt>Parameters</dt><dd>
   1004   <table class="params">
   1005     <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>
   1006   </table>
   1007   </dd>
   1008 </dl>
   1009 <p>Returns: </p><ul>
   1010 <li><code>true</code>: Success, received byte will be in <code>duck_io_rx_byte</code> global </li>
   1011 <li><code>false</code>: Read timed out with no reply </li>
   1012 </ul>
   1013 
   1014 </div>
   1015 </div>
   1016 <a id="duck_io_send_byte_and_check_ack_" name="duck_io_send_byte_and_check_ack_"></a>
   1017 <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>
   1018 
   1019 <div class="memitem">
   1020 <div class="memproto">
   1021       <table class="memname">
   1022         <tr>
   1023           <td class="memname"><a class="el" href="stdbool_8h.html#bool">bool</a> duck_io_send_byte_and_check_ack_msecs_timeout </td>
   1024           <td>(</td>
   1025           <td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
   1026           <td class="paramname"><em>tx_byte</em>, </td>
   1027         </tr>
   1028         <tr>
   1029           <td class="paramkey"></td>
   1030           <td></td>
   1031           <td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
   1032           <td class="paramname"><em>timeout_len_ms</em>, </td>
   1033         </tr>
   1034         <tr>
   1035           <td class="paramkey"></td>
   1036           <td></td>
   1037           <td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
   1038           <td class="paramname"><em>expected_reply</em>&#160;</td>
   1039         </tr>
   1040         <tr>
   1041           <td></td>
   1042           <td>)</td>
   1043           <td></td><td></td>
   1044         </tr>
   1045       </table>
   1046 </div><div class="memdoc">
   1047 <p >Sends a byte over over serial to the MegaDuck laptop peripheral and waits for a reply with a timeout</p>
   1048 <dl class="params"><dt>Parameters</dt><dd>
   1049   <table class="params">
   1050     <tr><td class="paramname">tx_byte</td><td>Byte to send </td></tr>
   1051     <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>
   1052     <tr><td class="paramname">expected_reply</td><td>The expected value of the reply byte</td></tr>
   1053   </table>
   1054   </dd>
   1055 </dl>
   1056 <p>Returns: </p><ul>
   1057 <li><code>true</code>: Success </li>
   1058 <li><code>false</code>: if timed out or reply byte didn't match expected value </li>
   1059 </ul>
   1060 
   1061 </div>
   1062 </div>
   1063 <a id="duck_io_send_cmd_and_buffer" name="duck_io_send_cmd_and_buffer"></a>
   1064 <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>
   1065 
   1066 <div class="memitem">
   1067 <div class="memproto">
   1068       <table class="memname">
   1069         <tr>
   1070           <td class="memname"><a class="el" href="stdbool_8h.html#bool">bool</a> duck_io_send_cmd_and_buffer </td>
   1071           <td>(</td>
   1072           <td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
   1073           <td class="paramname"><em>io_cmd</em></td><td>)</td>
   1074           <td></td>
   1075         </tr>
   1076       </table>
   1077 </div><div class="memdoc">
   1078 <p >Sends a command and a multi-byte buffer over serial to the MegaDuck laptop peripheral</p>
   1079 <dl class="params"><dt>Parameters</dt><dd>
   1080   <table class="params">
   1081     <tr><td class="paramname">io_cmd</td><td>Command byte to send</td></tr>
   1082   </table>
   1083   </dd>
   1084 </dl>
   1085 <p>The data should be pre-loaded into these globals: </p><ul>
   1086 <li><a class="el" href="laptop__io_8h.html#duck_io_tx_buf">duck_io_tx_buf</a> : Buffer with data to send </li>
   1087 <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>
   1088 </ul>
   1089 <p>Returns: <code>true</code> if succeeded</p>
   1090 <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>
   1091 
   1092 </div>
   1093 </div>
   1094 <a id="duck_io_send_cmd_and_receive_buf" name="duck_io_send_cmd_and_receive_buf"></a>
   1095 <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>
   1096 
   1097 <div class="memitem">
   1098 <div class="memproto">
   1099       <table class="memname">
   1100         <tr>
   1101           <td class="memname"><a class="el" href="stdbool_8h.html#bool">bool</a> duck_io_send_cmd_and_receive_buffer </td>
   1102           <td>(</td>
   1103           <td class="paramtype"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a>&#160;</td>
   1104           <td class="paramname"><em>io_cmd</em></td><td>)</td>
   1105           <td></td>
   1106         </tr>
   1107       </table>
   1108 </div><div class="memdoc">
   1109 <p >Sends a command and then receives a multi-byte buffer over serial from the MegaDuck laptop peripheral</p>
   1110 <dl class="params"><dt>Parameters</dt><dd>
   1111   <table class="params">
   1112     <tr><td class="paramname">io_cmd</td><td>Command byte to send</td></tr>
   1113   </table>
   1114   </dd>
   1115 </dl>
   1116 <p>If successful, the received data and length will be in these globals: </p><ul>
   1117 <li><a class="el" href="laptop__io_8h.html#duck_io_rx_buf">duck_io_rx_buf</a> : Buffer with received data </li>
   1118 <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>
   1119 </ul>
   1120 <p>Returns: <code>true</code> if succeeded, <code>false</code> if failed (could be no reply, failed checksum, etc)</p>
   1121 <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>
   1122 
   1123 </div>
   1124 </div>
   1125 <h2 class="groupheader">Variable Documentation</h2>
   1126 <a id="duck_io_rx_byte_done" name="duck_io_rx_byte_done"></a>
   1127 <h2 class="memtitle"><span class="permalink"><a href="#duck_io_rx_byte_done">&#9670;&nbsp;</a></span>duck_io_rx_byte_done</h2>
   1128 
   1129 <div class="memitem">
   1130 <div class="memproto">
   1131 <table class="mlabels">
   1132   <tr>
   1133   <td class="mlabels-left">
   1134       <table class="memname">
   1135         <tr>
   1136           <td class="memname">volatile <a class="el" href="stdbool_8h.html#bool">bool</a> duck_io_rx_byte_done</td>
   1137         </tr>
   1138       </table>
   1139   </td>
   1140   <td class="mlabels-right">
   1141 <span class="mlabels"><span class="mlabel">extern</span></span>  </td>
   1142   </tr>
   1143 </table>
   1144 </div><div class="memdoc">
   1145 
   1146 </div>
   1147 </div>
   1148 <a id="duck_io_rx_byte" name="duck_io_rx_byte"></a>
   1149 <h2 class="memtitle"><span class="permalink"><a href="#duck_io_rx_byte">&#9670;&nbsp;</a></span>duck_io_rx_byte</h2>
   1150 
   1151 <div class="memitem">
   1152 <div class="memproto">
   1153 <table class="mlabels">
   1154   <tr>
   1155   <td class="mlabels-left">
   1156       <table class="memname">
   1157         <tr>
   1158           <td class="memname">volatile <a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_rx_byte</td>
   1159         </tr>
   1160       </table>
   1161   </td>
   1162   <td class="mlabels-right">
   1163 <span class="mlabels"><span class="mlabel">extern</span></span>  </td>
   1164   </tr>
   1165 </table>
   1166 </div><div class="memdoc">
   1167 
   1168 </div>
   1169 </div>
   1170 <a id="duck_io_rx_buf" name="duck_io_rx_buf"></a>
   1171 <h2 class="memtitle"><span class="permalink"><a href="#duck_io_rx_buf">&#9670;&nbsp;</a></span>duck_io_rx_buf</h2>
   1172 
   1173 <div class="memitem">
   1174 <div class="memproto">
   1175 <table class="mlabels">
   1176   <tr>
   1177   <td class="mlabels-left">
   1178       <table class="memname">
   1179         <tr>
   1180           <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>
   1181         </tr>
   1182       </table>
   1183   </td>
   1184   <td class="mlabels-right">
   1185 <span class="mlabels"><span class="mlabel">extern</span></span>  </td>
   1186   </tr>
   1187 </table>
   1188 </div><div class="memdoc">
   1189 
   1190 </div>
   1191 </div>
   1192 <a id="duck_io_rx_buf_len" name="duck_io_rx_buf_len"></a>
   1193 <h2 class="memtitle"><span class="permalink"><a href="#duck_io_rx_buf_len">&#9670;&nbsp;</a></span>duck_io_rx_buf_len</h2>
   1194 
   1195 <div class="memitem">
   1196 <div class="memproto">
   1197 <table class="mlabels">
   1198   <tr>
   1199   <td class="mlabels-left">
   1200       <table class="memname">
   1201         <tr>
   1202           <td class="memname"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_rx_buf_len</td>
   1203         </tr>
   1204       </table>
   1205   </td>
   1206   <td class="mlabels-right">
   1207 <span class="mlabels"><span class="mlabel">extern</span></span>  </td>
   1208   </tr>
   1209 </table>
   1210 </div><div class="memdoc">
   1211 
   1212 </div>
   1213 </div>
   1214 <a id="duck_io_tx_buf" name="duck_io_tx_buf"></a>
   1215 <h2 class="memtitle"><span class="permalink"><a href="#duck_io_tx_buf">&#9670;&nbsp;</a></span>duck_io_tx_buf</h2>
   1216 
   1217 <div class="memitem">
   1218 <div class="memproto">
   1219 <table class="mlabels">
   1220   <tr>
   1221   <td class="mlabels-left">
   1222       <table class="memname">
   1223         <tr>
   1224           <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>
   1225         </tr>
   1226       </table>
   1227   </td>
   1228   <td class="mlabels-right">
   1229 <span class="mlabels"><span class="mlabel">extern</span></span>  </td>
   1230   </tr>
   1231 </table>
   1232 </div><div class="memdoc">
   1233 
   1234 </div>
   1235 </div>
   1236 <a id="duck_io_tx_buf_len" name="duck_io_tx_buf_len"></a>
   1237 <h2 class="memtitle"><span class="permalink"><a href="#duck_io_tx_buf_len">&#9670;&nbsp;</a></span>duck_io_tx_buf_len</h2>
   1238 
   1239 <div class="memitem">
   1240 <div class="memproto">
   1241 <table class="mlabels">
   1242   <tr>
   1243   <td class="mlabels-left">
   1244       <table class="memname">
   1245         <tr>
   1246           <td class="memname"><a class="el" href="stdint_8h.html#uint8_t">uint8_t</a> duck_io_tx_buf_len</td>
   1247         </tr>
   1248       </table>
   1249   </td>
   1250   <td class="mlabels-right">
   1251 <span class="mlabels"><span class="mlabel">extern</span></span>  </td>
   1252   </tr>
   1253 </table>
   1254 </div><div class="memdoc">
   1255 
   1256 </div>
   1257 </div>
   1258 </div><!-- contents -->
   1259 </div><!-- doc-content -->
   1260 <!-- start footer part -->
   1261 <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
   1262   <ul>
   1263     <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>
   1264     <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>
   1265   </ul>
   1266 </div>
   1267 </body>
   1268 </html>

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.