USB_Host_Shield_2.0/_b_t_d_8cpp_source.html
2020-11-18 19:17:17 +00:00

289 lines
384 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>USB Host Shield 2.0: BTD.cpp Source File</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="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="imageStyle.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">USB Host Shield 2.0
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- 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="headertitle">
<div class="title">BTD.cpp</div> </div>
</div><!--header-->
<div class="contents">
<a href="_b_t_d_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> This software may be distributed and modified under the terms of the GNU</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> General Public License version 2 (GPL2) as published by the Free Software</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> Foundation and appearing in the file GPL2.TXT included in the packaging of</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> this file. Please note that GPL2 Section 2[b] requires that all works based</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> on this software must also be made publicly available under the terms of</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> the GPL2 (&quot;Copyleft&quot;).</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> Contact information</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> -------------------</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> Kristian Lauszus, TKJ Electronics</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> Web : http://www.tkjelectronics.com</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> e-mail : kristianl@tkjelectronics.com</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_b_t_d_8h.html">BTD.h</a>&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// To enable serial debugging see &quot;settings.h&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//#define EXTRADEBUG // Uncomment to get even more debugging data</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">const</span> uint8_t <a class="code" href="class_b_t_d.html#a49f433ab824f259c3815e180c73bb0ad">BTD::BTD_CONTROL_PIPE</a> = 0;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">const</span> uint8_t <a class="code" href="class_b_t_d.html#a24166c9b308925eeb2f635fae43ca5ec">BTD::BTD_EVENT_PIPE</a> = 1;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">const</span> uint8_t <a class="code" href="class_b_t_d.html#a480510bd399ae74a97cd74c8474ef59c">BTD::BTD_DATAIN_PIPE</a> = 2;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">const</span> uint8_t <a class="code" href="class_b_t_d.html#a0d82870f7eef8c27c33e6f5989d7a4dd">BTD::BTD_DATAOUT_PIPE</a> = 3;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a5f07597fe15a2b917cce405fe87f2981"> 27</a></span>&#160;<a class="code" href="class_b_t_d.html#a5f07597fe15a2b917cce405fe87f2981">BTD::BTD</a>(<a class="code" href="class_u_s_b.html">USB</a> *p) :</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;connectToWii(false),</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;pairWithWii(false),</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;connectToHIDDevice(false),</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;pairWithHIDDevice(false),</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;useSimplePairing(false),</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;pUsb(p), <span class="comment">// Pointer to USB class instance - mandatory</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;bAddress(0), <span class="comment">// Device address - mandatory</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;bNumEP(1), <span class="comment">// If config descriptor needs to be parsed</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;qNextPollTime(0), <span class="comment">// Reset NextPollTime</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;pollInterval(0),</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;simple_pairing_supported(false),</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;bPollEnable(false) <span class="comment">// Don&#39;t start polling before dongle is connected</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; <a class="code" href="_b_t_d_8h.html#afeaafddda417fd2f053dbd476332ea19">BTD_NUM_SERVICES</a>; i++)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; btService[i] = NULL;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; Initialize(); <span class="comment">// Set all variables, endpoint structs etc. to default values</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>) <span class="comment">// Register in USB subsystem</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a3f66bf622590413ef2e1864f93a3e0d2">RegisterDeviceClass</a>(<span class="keyword">this</span>); <span class="comment">// Set devConfig[] entry</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;}</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a4f1808a49e9aca397ba829fac16dc5c3"> 50</a></span>&#160;uint8_t <a class="code" href="class_b_t_d.html#a4f1808a49e9aca397ba829fac16dc5c3">BTD::ConfigureDevice</a>(uint8_t parent, uint8_t port, <span class="keywordtype">bool</span> lowspeed) {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> uint8_t constBufSize = <span class="keyword">sizeof</span> (<a class="code" href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html">USB_DEVICE_DESCRIPTOR</a>);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; uint8_t buf[constBufSize];</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html">USB_DEVICE_DESCRIPTOR</a> * udd = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html">USB_DEVICE_DESCRIPTOR</a>*<span class="keyword">&gt;</span>(buf);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; uint8_t rcode;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="struct_usb_device.html">UsbDevice</a> *p = NULL;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="struct_ep_info.html">EpInfo</a> *oldep_ptr = NULL;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; Initialize(); <span class="comment">// Set all variables, endpoint structs etc. to default values</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="class_address_pool.html">AddressPool</a> &amp;addrPool = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a66ab8f5eda239e761d5a48741ea1f9d4">GetAddressPool</a>(); <span class="comment">// Get memory address of USB device address pool</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nBTD ConfigureDevice&quot;</span>), 0x80);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>) { <span class="comment">// Check if address has already been assigned to an instance</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nAddress in use&quot;</span>), 0x80);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> <a class="code" href="_usb_core_8h.html#a44416ff64fc0e3691f98addac13d4595">USB_ERROR_CLASS_INSTANCE_ALREADY_IN_USE</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; p = addrPool.<a class="code" href="class_address_pool.html#aa92d7e8f0f515340ae2dc1679b627056">GetUsbDevicePtr</a>(0); <span class="comment">// Get pointer to pseudo device with address 0 assigned</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span>(!p) {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nAddress not found&quot;</span>), 0x80);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> <a class="code" href="_usb_core_8h.html#afe2fedb4b0ccc89a688c0b4b59691ce0">USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL</a>;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span>(!p-&gt;<a class="code" href="struct_usb_device.html#a410d39fb7758157f57794335e990ed02">epinfo</a>) {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nepinfo is null&quot;</span>), 0x80);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> <a class="code" href="_usb_core_8h.html#af192c59cafe2192ad802b22e6dbc077d">USB_ERROR_EPINFO_IS_NULL</a>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; oldep_ptr = p-&gt;<a class="code" href="struct_usb_device.html#a410d39fb7758157f57794335e990ed02">epinfo</a>; <span class="comment">// Save old pointer to EP_RECORD of address 0</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; p-&gt;<a class="code" href="struct_usb_device.html#a410d39fb7758157f57794335e990ed02">epinfo</a> = <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>; <span class="comment">// Temporary assign new pointer to epInfo to p-&gt;epinfo in order to avoid toggle inconsistence</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; p-&gt;<a class="code" href="struct_usb_device.html#a86a815577ad7883437d3ca72b32b8e8a">lowspeed</a> = lowspeed;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; rcode = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a193e63c149fad46adabd77ceb09b2b24">getDevDescr</a>(0, 0, constBufSize, (uint8_t*)buf); <span class="comment">// Get device descriptor - addr, ep, nbytes, data</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; p-&gt;<a class="code" href="struct_usb_device.html#a410d39fb7758157f57794335e990ed02">epinfo</a> = oldep_ptr; <span class="comment">// Restore p-&gt;epinfo</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">if</span>(rcode)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">goto</span> FailGetDevDescr;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a> = addrPool.<a class="code" href="class_address_pool.html#a97df4ef42e50960ce2165f4cdb53e590">AllocAddress</a>(parent, <span class="keyword">false</span>, port); <span class="comment">// Allocate new address according to device class</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span>(!<a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>) {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nOut of address space&quot;</span>), 0x80);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">return</span> <a class="code" href="_usb_core_8h.html#a15370eb665cdded5514e69ca58d9f39d">USB_ERROR_OUT_OF_ADDRESS_SPACE_IN_POOL</a>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (udd-&gt;<a class="code" href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html#afa7047f0318ab6df92a12291511cc1ce">bDeviceClass</a> == 0x09) <span class="comment">// Some dongles have an USB hub inside</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">goto</span> FailHub;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[0].<a class="code" href="struct_ep_info.html#aa2ca775b63736df4008e88da7dd4dddb">maxPktSize</a> = udd-&gt;<a class="code" href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html#a92d96e9016c96043dccf56872d13a628">bMaxPacketSize0</a>; <span class="comment">// Extract Max Packet Size from device descriptor</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[1].<a class="code" href="struct_ep_info.html#a9f92be74c75c037b39e2cae1eb49b89b">epAddr</a> = udd-&gt;<a class="code" href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html#ab1b8db3992e0dceb2ba86f3bab1e5bca">bNumConfigurations</a>; <span class="comment">// Steal and abuse from epInfo structure to save memory</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; VID = udd-&gt;<a class="code" href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html#ae3c7088fe6f7b521132d8f2b95f958bc">idVendor</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; PID = udd-&gt;<a class="code" href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html#adaec05748124a104c3d49008433719ba">idProduct</a>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">return</span> <a class="code" href="_usb_core_8h.html#a7cad2f024e98c4b2b1b52df76b10c01e">USB_ERROR_CONFIG_REQUIRES_ADDITIONAL_RESET</a>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;FailHub:</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nPlease create a hub instance in your code: \&quot;USBHub Hub1(&amp;Usb);\&quot;&quot;</span>), 0x80);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a3aea534daed66b5606fa798df7ad3c47">setAddr</a>(<a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>, 0, 0); <span class="comment">// Reset address</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; rcode = <a class="code" href="_usb_core_8h.html#ae9e139d0fd29bb0b3e7afad2f76cd589">USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED</a>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="class_b_t_d.html#aa87c23bce56a20f2db47c6a40c8eda87">Release</a>();</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">return</span> rcode;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;FailGetDevDescr:</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="message_8h.html#ae65e02f44cfdc490efd1b33f9882fbbd">NotifyFailGetDevDescr</a>(rcode);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">if</span>(rcode != <a class="code" href="max3421e_8h.html#aa128de549704094dadb93daa8875472b">hrJERR</a>)</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; rcode = <a class="code" href="_usb_core_8h.html#a96a7af8bc5ba78235312e1084a5ee229">USB_ERROR_FailGetDevDescr</a>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="class_b_t_d.html#aa87c23bce56a20f2db47c6a40c8eda87">Release</a>();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">return</span> rcode;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;};</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a48608619d8253972dd132edbb3001c5f"> 136</a></span>&#160;uint8_t <a class="code" href="class_b_t_d.html#a48608619d8253972dd132edbb3001c5f">BTD::Init</a>(uint8_t parent __attribute__((unused)), uint8_t port __attribute__((unused)), <span class="keywordtype">bool</span> lowspeed) {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; uint8_t rcode;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; uint8_t num_of_conf = <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[1].<a class="code" href="struct_ep_info.html#a9f92be74c75c037b39e2cae1eb49b89b">epAddr</a>; <span class="comment">// Number of configurations</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[1].<a class="code" href="struct_ep_info.html#a9f92be74c75c037b39e2cae1eb49b89b">epAddr</a> = 0;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="class_address_pool.html">AddressPool</a> &amp;addrPool = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a66ab8f5eda239e761d5a48741ea1f9d4">GetAddressPool</a>();</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nBTD Init&quot;</span>), 0x80);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="struct_usb_device.html">UsbDevice</a> *p = addrPool.<a class="code" href="class_address_pool.html#aa92d7e8f0f515340ae2dc1679b627056">GetUsbDevicePtr</a>(<a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>); <span class="comment">// Get pointer to assigned address record</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">if</span>(!p) {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nAddress not found&quot;</span>), 0x80);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">return</span> <a class="code" href="_usb_core_8h.html#afe2fedb4b0ccc89a688c0b4b59691ce0">USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL</a>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; delay(300); <span class="comment">// Assign new address to the device</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; rcode = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a3aea534daed66b5606fa798df7ad3c47">setAddr</a>(0, 0, <a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>); <span class="comment">// Assign new address to the device</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">if</span>(rcode) {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nsetAddr: &quot;</span>), 0x80);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; D_PrintHex&lt;uint8_t &gt; (rcode, 0x80);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; p-&gt;<a class="code" href="struct_usb_device.html#a86a815577ad7883437d3ca72b32b8e8a">lowspeed</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">goto</span> Fail;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nAddr: &quot;</span>), 0x80);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; D_PrintHex&lt;uint8_t &gt; (<a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>, 0x80);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; p-&gt;<a class="code" href="struct_usb_device.html#a86a815577ad7883437d3ca72b32b8e8a">lowspeed</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; p = addrPool.<a class="code" href="class_address_pool.html#aa92d7e8f0f515340ae2dc1679b627056">GetUsbDevicePtr</a>(bAddress); <span class="comment">// Get pointer to assigned address record</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span>(!p) {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nAddress not found&quot;</span>), 0x80);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">return</span> <a class="code" href="_usb_core_8h.html#afe2fedb4b0ccc89a688c0b4b59691ce0">USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL</a>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; p-&gt;<a class="code" href="struct_usb_device.html#a86a815577ad7883437d3ca72b32b8e8a">lowspeed</a> = lowspeed;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; rcode = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a6c3ba3f7e6dccb450267011ce783d7ea">setEpInfoEntry</a>(bAddress, 1, <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>); <span class="comment">// Assign epInfo to epinfo pointer - only EP0 is known</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">if</span>(rcode)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">goto</span> FailSetDevTblEntry;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">if</span>(VID == <a class="code" href="_b_t_d_8h.html#a5bb06f989db583d290ba79642d37c514">PS3_VID</a> &amp;&amp; (PID == <a class="code" href="_b_t_d_8h.html#a0ae276efa5e73a4da658c714e70402c0">PS3_PID</a> || PID == <a class="code" href="_b_t_d_8h.html#a54903b410722a45f8246653cd4d00632">PS3NAVIGATION_PID</a> || PID == <a class="code" href="_b_t_d_8h.html#afc242b8a1b867f79c49ad78e3a47b37f">PS3MOVE_PID</a>)) {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; delay(100);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; rcode = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a31e2c132ec32ffdde94dff72be87c378">setConf</a>(bAddress, <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[ <a class="code" href="class_b_t_d.html#a49f433ab824f259c3815e180c73bb0ad">BTD_CONTROL_PIPE</a> ].epAddr, 1); <span class="comment">// We only need the Control endpoint, so we don&#39;t have to initialize the other endpoints of device</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">if</span>(rcode)</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">goto</span> FailSetConfDescr;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span>(PID == <a class="code" href="_b_t_d_8h.html#a0ae276efa5e73a4da658c714e70402c0">PS3_PID</a> || PID == <a class="code" href="_b_t_d_8h.html#a54903b410722a45f8246653cd4d00632">PS3NAVIGATION_PID</a>) {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">if</span>(PID == <a class="code" href="_b_t_d_8h.html#a0ae276efa5e73a4da658c714e70402c0">PS3_PID</a>)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nDualshock 3 Controller Connected&quot;</span>), 0x80);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">else</span> <span class="comment">// It must be a navigation controller</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nNavigation Controller Connected&quot;</span>), 0x80);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; } <span class="keywordflow">else</span> <span class="comment">// It must be a Motion controller</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nMotion Controller Connected&quot;</span>), 0x80);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>[0] == 0x00 &amp;&amp; <a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>[1] == 0x00 &amp;&amp; <a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>[2] == 0x00 &amp;&amp; <a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>[3] == 0x00 &amp;&amp; <a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>[4] == 0x00 &amp;&amp; <a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>[5] == 0x00) {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nPlease plug in the dongle before trying to pair with the PS3 Controller\r\nor set the Bluetooth address in the constructor of the PS3BT class&quot;</span>), 0x80);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span>(PID == <a class="code" href="_b_t_d_8h.html#a0ae276efa5e73a4da658c714e70402c0">PS3_PID</a> || PID == <a class="code" href="_b_t_d_8h.html#a54903b410722a45f8246653cd4d00632">PS3NAVIGATION_PID</a>)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; setBdaddr(<a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>); <span class="comment">// Set internal Bluetooth address</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; setMoveBdaddr(<a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>); <span class="comment">// Set internal Bluetooth address</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nBluetooth Address was set to: &quot;</span>), 0x80);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">for</span>(int8_t i = 5; i &gt; 0; i--) {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; D_PrintHex&lt;uint8_t &gt; (<a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>[i], 0x80);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;:&quot;</span>), 0x80);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; D_PrintHex&lt;uint8_t &gt; (<a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>[0], 0x80);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a31e2c132ec32ffdde94dff72be87c378">setConf</a>(bAddress, <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[ <a class="code" href="class_b_t_d.html#a49f433ab824f259c3815e180c73bb0ad">BTD_CONTROL_PIPE</a> ].epAddr, 0); <span class="comment">// Reset configuration value</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a3aea534daed66b5606fa798df7ad3c47">setAddr</a>(bAddress, 0, 0); <span class="comment">// Reset address</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="class_b_t_d.html#aa87c23bce56a20f2db47c6a40c8eda87">Release</a>(); <span class="comment">// Release device</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> <a class="code" href="_usb_core_8h.html#ae9e139d0fd29bb0b3e7afad2f76cd589">USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED</a>; <span class="comment">// Return</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="comment">// Check if attached device is a Bluetooth dongle and fill endpoint data structure</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// First interface in the configuration must have Bluetooth assigned Class/Subclass/Protocol</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="comment">// And 3 endpoints - interrupt-IN, bulk-IN, bulk-OUT, not necessarily in this order</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; num_of_conf; i++) {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">if</span>((VID == <a class="code" href="_b_t_d_8h.html#a6a28bb0589fbe2da75b238d7568d894d">IOGEAR_GBU521_VID</a> &amp;&amp; PID == <a class="code" href="_b_t_d_8h.html#aed4a7c4ebf618412176ef19023454fad">IOGEAR_GBU521_PID</a>) || (VID == <a class="code" href="_b_t_d_8h.html#a576e49b56b3cfb9d70b22bac8fe6796f">BELKIN_F8T065BF_VID</a> &amp;&amp; PID == <a class="code" href="_b_t_d_8h.html#ad142141f4e7685e31dce306128eaad5f">BELKIN_F8T065BF_PID</a>)) {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="class_config_desc_parser.html">ConfigDescParser&lt;USB_CLASS_VENDOR_SPECIFIC, WI_SUBCLASS_RF, WI_PROTOCOL_BT, CP_MASK_COMPARE_ALL&gt;</a> confDescrParser(<span class="keyword">this</span>); <span class="comment">// Workaround issue with some dongles</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; rcode = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a618eedabc161d8315be45cae0c8b6f89">getConfDescr</a>(bAddress, 0, i, &amp;confDescrParser);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="class_config_desc_parser.html">ConfigDescParser&lt;USB_CLASS_WIRELESS_CTRL, WI_SUBCLASS_RF, WI_PROTOCOL_BT, CP_MASK_COMPARE_ALL&gt;</a> confDescrParser(<span class="keyword">this</span>); <span class="comment">// Set class id according to the specification</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; rcode = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a618eedabc161d8315be45cae0c8b6f89">getConfDescr</a>(bAddress, 0, i, &amp;confDescrParser);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span>(rcode) <span class="comment">// Check error code</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">goto</span> FailGetConfDescr;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a893dd35932821cddda7e482a1904af66">bNumEP</a> &gt;= <a class="code" href="_b_t_d_8h.html#aee41c4878894db24e7ad8cd6246595cd">BTD_MAX_ENDPOINTS</a>) <span class="comment">// All endpoints extracted</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a893dd35932821cddda7e482a1904af66">bNumEP</a> &lt; <a class="code" href="_b_t_d_8h.html#aee41c4878894db24e7ad8cd6246595cd">BTD_MAX_ENDPOINTS</a>)</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">goto</span> FailUnknownDevice;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// Assign epInfo to epinfo pointer - this time all 3 endpoins</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; rcode = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a6c3ba3f7e6dccb450267011ce783d7ea">setEpInfoEntry</a>(bAddress, <a class="code" href="class_b_t_d.html#a893dd35932821cddda7e482a1904af66">bNumEP</a>, <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">if</span>(rcode)</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">goto</span> FailSetDevTblEntry;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="comment">// Set Configuration Value</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; rcode = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a31e2c132ec32ffdde94dff72be87c378">setConf</a>(bAddress, <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[ <a class="code" href="class_b_t_d.html#a49f433ab824f259c3815e180c73bb0ad">BTD_CONTROL_PIPE</a> ].epAddr, <a class="code" href="class_b_t_d.html#a10c34527ae90e95791ac48ac7d1154a2">bConfNum</a>);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">if</span>(rcode)</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">goto</span> FailSetConfDescr;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; hci_num_reset_loops = 100; <span class="comment">// only loop 100 times before trying to send the hci reset command</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; hci_counter = 0;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#ac2b910cd6cc87c7bac09617815a1ee9a">HCI_INIT_STATE</a>;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <a class="code" href="class_b_t_d.html#a93a522edb2974185c7567b8f83860424">waitingForConnection</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; bPollEnable = <span class="keyword">true</span>;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nBluetooth Dongle Initialized&quot;</span>), 0x80);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">return</span> 0; <span class="comment">// Successful configuration</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="comment">/* Diagnostic messages */</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;FailSetDevTblEntry:</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="message_8h.html#a69619d86b1636f141c830ca82c7f45e7">NotifyFailSetDevTblEntry</a>();</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">goto</span> Fail;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;FailGetConfDescr:</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="message_8h.html#a38aabfb47a8bf743b0532e356c39faaf">NotifyFailGetConfDescr</a>();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">goto</span> Fail;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;FailSetConfDescr:</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <a class="code" href="message_8h.html#a03e4088aafca36fd7a4be69e3a22b601">NotifyFailSetConfDescr</a>();</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">goto</span> Fail;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;FailUnknownDevice:</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="message_8h.html#a0ce3a725ee65614d7f95cda10e4d2e91">NotifyFailUnknownDevice</a>(VID, PID);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a3aea534daed66b5606fa798df7ad3c47">setAddr</a>(bAddress, 0, 0); <span class="comment">// Reset address</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; rcode = <a class="code" href="_usb_core_8h.html#ae9e139d0fd29bb0b3e7afad2f76cd589">USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED</a>;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;Fail:</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nBTD Init Failed, error code: &quot;</span>), 0x80);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="message_8h.html#a22695bdc18ebde4a87dbe8633cb39593">NotifyFail</a>(rcode);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <a class="code" href="class_b_t_d.html#aa87c23bce56a20f2db47c6a40c8eda87">Release</a>();</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">return</span> rcode;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;}</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="keywordtype">void</span> BTD::Initialize() {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; uint8_t i;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">for</span>(i = 0; i &lt; <a class="code" href="_b_t_d_8h.html#aee41c4878894db24e7ad8cd6246595cd">BTD_MAX_ENDPOINTS</a>; i++) {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[i].<a class="code" href="struct_ep_info.html#a9f92be74c75c037b39e2cae1eb49b89b">epAddr</a> = 0;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[i].<a class="code" href="struct_ep_info.html#aa2ca775b63736df4008e88da7dd4dddb">maxPktSize</a> = (i) ? 0 : 8;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[i].<a class="code" href="struct_ep_info.html#ac85bff70ad0e5d71e50cb501f4d8caf3">bmSndToggle</a> = 0;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[i].<a class="code" href="struct_ep_info.html#a9238dd40c096baedf041c98b19386a14">bmRcvToggle</a> = 0;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[i].<a class="code" href="struct_ep_info.html#a3a5b1c017a034cd9e06e76729e727c46">bmNakPower</a> = (i) ? <a class="code" href="address_8h.html#a660e8da9c1167a8450aef91c5c03761d">USB_NAK_NOWAIT</a> : <a class="code" href="address_8h.html#a517dfa014946e2d087d197312234a1de">USB_NAK_MAX_POWER</a>;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">for</span>(i = 0; i &lt; <a class="code" href="_b_t_d_8h.html#afeaafddda417fd2f053dbd476332ea19">BTD_NUM_SERVICES</a>; i++) {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">if</span>(btService[i])</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; btService[i]-&gt;<a class="code" href="class_bluetooth_service.html#aa7c81841d4e898e9dc91533da6d7ab64">Reset</a>(); <span class="comment">// Reset all Bluetooth services</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <a class="code" href="class_b_t_d.html#ac7caac80fb6f5f0e794af3644887d88e">connectToWii</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="class_b_t_d.html#a4dc8f94fe85028f3d54f13dde1e5b4ee">incomingWii</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <a class="code" href="class_b_t_d.html#af40b8d52df99192880c8a13443b6c6d8">connectToHIDDevice</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="class_b_t_d.html#a685d6371fb0c950ff6bad4510a8cc85a">incomingHIDDevice</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; incomingPS4 = <span class="keyword">false</span>;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a> = 0; <span class="comment">// Clear device address</span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <a class="code" href="class_b_t_d.html#a893dd35932821cddda7e482a1904af66">bNumEP</a> = 1; <span class="comment">// Must have to be reset to 1</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <a class="code" href="class_b_t_d.html#a52d6c7895f6bb01729d01ce28a2f3079">qNextPollTime</a> = 0; <span class="comment">// Reset next poll time</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; pollInterval = 0;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; bPollEnable = <span class="keyword">false</span>; <span class="comment">// Don&#39;t start polling before dongle is connected</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; simple_pairing_supported = <span class="keyword">false</span>;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;}</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="comment">/* Extracts interrupt-IN, bulk-IN, bulk-OUT endpoint information from config descriptor */</span></div><div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a23928cd0e5711a2433aec763cfa55773"> 330</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a23928cd0e5711a2433aec763cfa55773">BTD::EndpointXtract</a>(uint8_t conf, uint8_t iface __attribute__((unused)), uint8_t alt, uint8_t proto __attribute__((unused)), <span class="keyword">const</span> <a class="code" href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html">USB_ENDPOINT_DESCRIPTOR</a> *pep) {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="comment">//ErrorMessage&lt;uint8_t&gt;(PSTR(&quot;Conf.Val&quot;),conf);</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">//ErrorMessage&lt;uint8_t&gt;(PSTR(&quot;Iface Num&quot;),iface);</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">//ErrorMessage&lt;uint8_t&gt;(PSTR(&quot;Alt.Set&quot;),alt);</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">if</span>(alt) <span class="comment">// Wrong interface - by BT spec, no alt setting</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="class_b_t_d.html#a10c34527ae90e95791ac48ac7d1154a2">bConfNum</a> = conf;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; uint8_t index;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">if</span>((pep-&gt;<a class="code" href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html#a8ee7f1bafac335258c6e742969387f57">bmAttributes</a> &amp; <a class="code" href="usb__ch9_8h.html#ac1b1bcdd6bd4e8c5a65052e914e028d5">bmUSB_TRANSFER_TYPE</a>) == <a class="code" href="usb__ch9_8h.html#ac80ae240a4a703b554aa8edee201495f">USB_TRANSFER_TYPE_INTERRUPT</a> &amp;&amp; (pep-&gt;<a class="code" href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html#a23fbb539d72d10a6cb12efedf7d3457c">bEndpointAddress</a> &amp; 0x80) == 0x80) { <span class="comment">// Interrupt In endpoint found</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; index = <a class="code" href="class_b_t_d.html#a24166c9b308925eeb2f635fae43ca5ec">BTD_EVENT_PIPE</a>;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[index].<a class="code" href="struct_ep_info.html#a3a5b1c017a034cd9e06e76729e727c46">bmNakPower</a> = <a class="code" href="address_8h.html#a660e8da9c1167a8450aef91c5c03761d">USB_NAK_NOWAIT</a>;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>((pep-&gt;<a class="code" href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html#a8ee7f1bafac335258c6e742969387f57">bmAttributes</a> &amp; <a class="code" href="usb__ch9_8h.html#ac1b1bcdd6bd4e8c5a65052e914e028d5">bmUSB_TRANSFER_TYPE</a>) == <a class="code" href="usb__ch9_8h.html#a54c90d3ca8c3f7911d9d8cb17f59d939">USB_TRANSFER_TYPE_BULK</a>) <span class="comment">// Bulk endpoint found</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; index = ((pep-&gt;<a class="code" href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html#a23fbb539d72d10a6cb12efedf7d3457c">bEndpointAddress</a> &amp; 0x80) == 0x80) ? <a class="code" href="class_b_t_d.html#a480510bd399ae74a97cd74c8474ef59c">BTD_DATAIN_PIPE</a> : <a class="code" href="class_b_t_d.html#a0d82870f7eef8c27c33e6f5989d7a4dd">BTD_DATAOUT_PIPE</a>;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="comment">// Fill the rest of endpoint data structure</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[index].<a class="code" href="struct_ep_info.html#a9f92be74c75c037b39e2cae1eb49b89b">epAddr</a> = (pep-&gt;<a class="code" href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html#a23fbb539d72d10a6cb12efedf7d3457c">bEndpointAddress</a> &amp; 0x0F);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[index].<a class="code" href="struct_ep_info.html#aa2ca775b63736df4008e88da7dd4dddb">maxPktSize</a> = (uint8_t)pep-&gt;<a class="code" href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html#af34105fa6bd0029d9c6b73d85f7853c6">wMaxPacketSize</a>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;#ifdef EXTRADEBUG</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <a class="code" href="class_b_t_d.html#aa5976eead215a58553aee683d42405a0">PrintEndpointDescriptor</a>(pep);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span>(pollInterval &lt; pep-&gt;bInterval) <span class="comment">// Set the polling interval as the largest polling interval obtained from endpoints</span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; pollInterval = pep-&gt;<a class="code" href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html#a95cd9669dee9cab375a7c5e62284a01b">bInterval</a>;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="class_b_t_d.html#a893dd35932821cddda7e482a1904af66">bNumEP</a>++;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;}</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="class_b_t_d.html#aa5976eead215a58553aee683d42405a0"> 360</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#aa5976eead215a58553aee683d42405a0">BTD::PrintEndpointDescriptor</a>(<span class="keyword">const</span> <a class="code" href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html">USB_ENDPOINT_DESCRIPTOR</a>* ep_ptr __attribute__((unused))) {</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nEndpoint descriptor:&quot;</span>), 0x80);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nLength:\t\t&quot;</span>), 0x80);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; D_PrintHex&lt;uint8_t &gt; (ep_ptr-&gt;bLength, 0x80);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nType:\t\t&quot;</span>), 0x80);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; D_PrintHex&lt;uint8_t &gt; (ep_ptr-&gt;bDescriptorType, 0x80);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nAddress:\t&quot;</span>), 0x80);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; D_PrintHex&lt;uint8_t &gt; (ep_ptr-&gt;bEndpointAddress, 0x80);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nAttributes:\t&quot;</span>), 0x80);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; D_PrintHex&lt;uint8_t &gt; (ep_ptr-&gt;bmAttributes, 0x80);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nMaxPktSize:\t&quot;</span>), 0x80);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; D_PrintHex&lt;uint16_t &gt; (ep_ptr-&gt;wMaxPacketSize, 0x80);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nPoll Intrv:\t&quot;</span>), 0x80);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; D_PrintHex&lt;uint8_t &gt; (ep_ptr-&gt;bInterval, 0x80);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;}</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<span class="comment">/* Performs a cleanup after failed Init() attempt */</span></div><div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="class_b_t_d.html#aa87c23bce56a20f2db47c6a40c8eda87"> 379</a></span>&#160;uint8_t <a class="code" href="class_b_t_d.html#aa87c23bce56a20f2db47c6a40c8eda87">BTD::Release</a>() {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; Initialize(); <span class="comment">// Set all variables, endpoint structs etc. to default values</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a66ab8f5eda239e761d5a48741ea1f9d4">GetAddressPool</a>().<a class="code" href="class_address_pool.html#a15fde13223dcb1da89305ad229763562">FreeAddress</a>(<a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;}</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a76e201c5b561e3a6d0405894ba5c2e41"> 385</a></span>&#160;uint8_t <a class="code" href="class_b_t_d.html#a76e201c5b561e3a6d0405894ba5c2e41">BTD::Poll</a>() {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span>(!bPollEnable)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">if</span>((int32_t)((uint32_t)millis() - <a class="code" href="class_b_t_d.html#a52d6c7895f6bb01729d01ce28a2f3079">qNextPollTime</a>) &gt;= 0<a class="code" href="controller_enums_8h.html#a94f7389d205c78830a5441370d7870fdaef31cc6fe9479955961311ee18ac205f">L</a>) { <span class="comment">// Don&#39;t poll if shorter than polling interval</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <a class="code" href="class_b_t_d.html#a52d6c7895f6bb01729d01ce28a2f3079">qNextPollTime</a> = (uint32_t)millis() + pollInterval; <span class="comment">// Set new poll time</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; HCI_event_task(); <span class="comment">// Poll the HCI event pipe</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; HCI_task(); <span class="comment">// HCI state machine</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; ACL_event_task(); <span class="comment">// Poll the ACL input pipe too</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;}</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div><div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a610183f9ddf04155ef2612d1839af7da"> 397</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a610183f9ddf04155ef2612d1839af7da">BTD::disconnect</a>() {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; <a class="code" href="_b_t_d_8h.html#afeaafddda417fd2f053dbd476332ea19">BTD_NUM_SERVICES</a>; i++)</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">if</span>(btService[i])</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; btService[i]-&gt;<a class="code" href="class_bluetooth_service.html#a7bb2c8cccf3f2931629ead9becc51ec9">disconnect</a>();</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;};</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;<span class="keywordtype">void</span> BTD::HCI_event_task() {</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; uint16_t length = <a class="code" href="_b_t_d_8h.html#a32d591ef5742a99963130616ef146787">BULK_MAXPKTSIZE</a>; <span class="comment">// Request more than 16 bytes anyway, the inTransfer routine will take care of this</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; uint8_t rcode = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#aead4d2040c641d55176854b236804088">inTransfer</a>(<a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>, <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[ <a class="code" href="class_b_t_d.html#a24166c9b308925eeb2f635fae43ca5ec">BTD_EVENT_PIPE</a> ].epAddr, &amp;length, hcibuf, pollInterval); <span class="comment">// Input on endpoint 1</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">if</span>(!rcode || rcode == <a class="code" href="max3421e_8h.html#ab44a7968d08016b58d98951059c37076">hrNAK</a>) { <span class="comment">// Check for errors</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">switch</span>(hcibuf[0]) { <span class="comment">// Switch on event type</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a81b71e0ba648260143529b04ae84e528">EV_COMMAND_COMPLETE</a>:</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">if</span>(!hcibuf[5]) { <span class="comment">// Check if command succeeded</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="_b_t_d_8h.html#ada46cc57bb9134769989b1b18bdac525">hci_set_flag</a>(<a class="code" href="_b_t_d_8h.html#a14087b750ea2da7f0cef4daaa7683d01">HCI_FLAG_CMD_COMPLETE</a>); <span class="comment">// Set command complete flag</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">if</span>((hcibuf[3] == 0x01) &amp;&amp; (hcibuf[4] == 0x10)) { <span class="comment">// Parameters from read local version information</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="class_b_t_d.html#addaddee110af23a3195ad56f631e69ea">hci_version</a> = hcibuf[6]; <span class="comment">// Used to check if it supports 2.0+EDR - see http://www.bluetooth.org/Technical/AssignedNumbers/hci.htm</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">if</span>(!<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#ab3b1f616c1e885e697806f0167b73e8e">HCI_FLAG_READ_VERSION</a>)) {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nHCI version: &quot;</span>), 0x80);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; D_PrintHex&lt;uint8_t &gt; (<a class="code" href="class_b_t_d.html#addaddee110af23a3195ad56f631e69ea">hci_version</a>, 0x80);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; }</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="_b_t_d_8h.html#ada46cc57bb9134769989b1b18bdac525">hci_set_flag</a>(<a class="code" href="_b_t_d_8h.html#ab3b1f616c1e885e697806f0167b73e8e">HCI_FLAG_READ_VERSION</a>);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>((hcibuf[3] == 0x04) &amp;&amp; (hcibuf[4] == 0x10)) { <span class="comment">// Parameters from read local extended features</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">if</span>(!<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a1da7c6e93b93b4d2e5727d742f6efe9d">HCI_FLAG_LOCAL_EXTENDED_FEATURES</a>)) {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nPage number: &quot;</span>), 0x80);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[6], 0x80);</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nMaximum page number: &quot;</span>), 0x80);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[7], 0x80);</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nExtended LMP features:&quot;</span>), 0x80);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 8; i++) {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; &quot;</span>), 0x80);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[8 + i], 0x80);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; }</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">if</span>(hcibuf[6] == 0) { <span class="comment">// Page 0</span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nDongle &quot;</span>), 0x80);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">if</span>(hcibuf[8 + 6] &amp; (1U &lt;&lt; 3)) {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; simple_pairing_supported = <span class="keyword">true</span>;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;supports&quot;</span>), 0x80);</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; simple_pairing_supported = <span class="keyword">false</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;does NOT support&quot;</span>), 0x80);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; secure simple pairing (controller support)&quot;</span>), 0x80);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(hcibuf[6] == 1) { <span class="comment">// Page 1</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nDongle &quot;</span>), 0x80);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">if</span>(hcibuf[8 + 0] &amp; (1U &lt;&lt; 0))</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;supports&quot;</span>), 0x80);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;does NOT support&quot;</span>), 0x80);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; secure simple pairing (host support)&quot;</span>), 0x80);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; }</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="_b_t_d_8h.html#ada46cc57bb9134769989b1b18bdac525">hci_set_flag</a>(<a class="code" href="_b_t_d_8h.html#a1da7c6e93b93b4d2e5727d742f6efe9d">HCI_FLAG_LOCAL_EXTENDED_FEATURES</a>);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>((hcibuf[3] == 0x09) &amp;&amp; (hcibuf[4] == 0x10)) { <span class="comment">// Parameters from read local bluetooth address</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 6; i++)</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>[i] = hcibuf[6 + i];</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <a class="code" href="_b_t_d_8h.html#ada46cc57bb9134769989b1b18bdac525">hci_set_flag</a>(<a class="code" href="_b_t_d_8h.html#aabbf8a2ed694a2dc4d4e60fd389c44dd">HCI_FLAG_READ_BDADDR</a>);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a090ee10cc1a1c1c3bbb29a93c330d2d4">EV_COMMAND_STATUS</a>:</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">if</span>(hcibuf[2]) { <span class="comment">// Show status on serial if not OK</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nHCI Command Failed: &quot;</span>), 0x80);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[2], 0x80);</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nNum HCI Command Packets: &quot;</span>), 0x80);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[3], 0x80);</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nCommand Opcode: &quot;</span>), 0x80);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[4], 0x80);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; &quot;</span>), 0x80);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[5], 0x80);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a4c6ca5696adeab36258b3b0c58d804e0">EV_INQUIRY_COMPLETE</a>:</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">if</span>(inquiry_counter &gt;= 5 &amp;&amp; (<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a> || <a class="code" href="class_b_t_d.html#a2aa418d820fb6b877ea079e0436a518e">pairWithHIDDevice</a>)) {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; inquiry_counter = 0;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a>)</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nCouldn&#39;t find Wiimote&quot;</span>), 0x80);</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nCouldn&#39;t find HID device&quot;</span>), 0x80);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <a class="code" href="class_b_t_d.html#ac7caac80fb6f5f0e794af3644887d88e">connectToWii</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <a class="code" href="class_b_t_d.html#af40b8d52df99192880c8a13443b6c6d8">connectToHIDDevice</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <a class="code" href="class_b_t_d.html#a2aa418d820fb6b877ea079e0436a518e">pairWithHIDDevice</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#acc9b6954b4bb6c19a9d25242869d5ddf">HCI_SCANNING_STATE</a>;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; }</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; inquiry_counter++;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a335df6d48c8cac828d62196eeaff360b">EV_INQUIRY_RESULT</a>:</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">if</span>(hcibuf[2]) { <span class="comment">// Check that there is more than zero responses</span></div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nNumber of responses: &quot;</span>), 0x80);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(hcibuf[2], 0x80);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; hcibuf[2]; i++) {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; uint8_t offset = 8 * hcibuf[2] + 3 * i;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">for</span>(uint8_t j = 0; j &lt; 3; j++)</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; classOfDevice[j] = hcibuf[j + 4 + offset];</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nClass of device: &quot;</span>), 0x80);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; D_PrintHex&lt;uint8_t &gt; (classOfDevice[2], 0x80);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; &quot;</span>), 0x80);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; D_PrintHex&lt;uint8_t &gt; (classOfDevice[1], 0x80);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; &quot;</span>), 0x80);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; D_PrintHex&lt;uint8_t &gt; (classOfDevice[0], 0x80);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a> &amp;&amp; classOfDevice[2] == 0x00 &amp;&amp; (classOfDevice[1] == 0x05) &amp;&amp; (classOfDevice[0] &amp; 0x0C)) { <span class="comment">// See http://wiibrew.org/wiki/Wiimote#SDP_information</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; checkRemoteName = <span class="keyword">true</span>; <span class="comment">// Check remote name to distinguish between the different controllers</span></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">for</span>(uint8_t j = 0; j &lt; 6; j++)</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[j] = hcibuf[j + 3 + 6 * i];</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <a class="code" href="_b_t_d_8h.html#ada46cc57bb9134769989b1b18bdac525">hci_set_flag</a>(<a class="code" href="_b_t_d_8h.html#a5ac3c55b54eff968d2327185a7e644ba">HCI_FLAG_DEVICE_FOUND</a>);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a2aa418d820fb6b877ea079e0436a518e">pairWithHIDDevice</a> &amp;&amp; (classOfDevice[1] &amp; 0x0F) == 0x05 &amp;&amp; (classOfDevice[0] &amp; 0xC8)) { <span class="comment">// Check if it is a mouse, keyboard or a gamepad - see: http://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; checkRemoteName = <span class="keyword">true</span>; <span class="comment">// Used to print name in the serial monitor if serial debugging is enabled</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">if</span>(classOfDevice[0] &amp; 0x80)</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nMouse found&quot;</span>), 0x80);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keywordflow">if</span>(classOfDevice[0] &amp; 0x40)</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nKeyboard found&quot;</span>), 0x80);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">if</span>(classOfDevice[0] &amp; 0x08)</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nGamepad found&quot;</span>), 0x80);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">for</span>(uint8_t j = 0; j &lt; 6; j++)</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[j] = hcibuf[j + 3 + 6 * i];</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="_b_t_d_8h.html#ada46cc57bb9134769989b1b18bdac525">hci_set_flag</a>(<a class="code" href="_b_t_d_8h.html#a5ac3c55b54eff968d2327185a7e644ba">HCI_FLAG_DEVICE_FOUND</a>);</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; }</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#ad4bce42e1ef20447655f8916f23d07a7">EV_CONNECT_COMPLETE</a>:</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <a class="code" href="_b_t_d_8h.html#ada46cc57bb9134769989b1b18bdac525">hci_set_flag</a>(<a class="code" href="_b_t_d_8h.html#ad14762241e9195fc9a3b0a69ef1ab7f3">HCI_FLAG_CONNECT_EVENT</a>);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordflow">if</span>(!hcibuf[2]) { <span class="comment">// Check if connected OK</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nConnection established&quot;</span>), 0x80);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <a class="code" href="class_b_t_d.html#aa3bb6c692701cb33dfad1ea4d68b6f98">hci_handle</a> = hcibuf[3] | ((hcibuf[4] &amp; 0x0F) &lt;&lt; 8); <span class="comment">// Store the handle for the ACL connection</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <a class="code" href="_b_t_d_8h.html#ada46cc57bb9134769989b1b18bdac525">hci_set_flag</a>(<a class="code" href="_b_t_d_8h.html#a472a2cb241a6e13fa8f62d19b6c418bd">HCI_FLAG_CONNECT_COMPLETE</a>); <span class="comment">// Set connection complete flag</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a2c060a7be42c5c4c57990cacec0b45f5">HCI_CHECK_DEVICE_SERVICE</a>;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nConnection Failed: &quot;</span>), 0x80);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[2], 0x80);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a1cf7e4d4426dcabed8976b65beee0d99">EV_DISCONNECT_COMPLETE</a>:</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">if</span>(!hcibuf[2]) { <span class="comment">// Check if disconnected OK</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="_b_t_d_8h.html#ada46cc57bb9134769989b1b18bdac525">hci_set_flag</a>(<a class="code" href="_b_t_d_8h.html#a094e0fa9b22cade79fe64a907aad5f2a">HCI_FLAG_DISCONNECT_COMPLETE</a>); <span class="comment">// Set disconnect command complete flag</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="_b_t_d_8h.html#a700e625eeda4ce1b35112721acbdfd19">hci_clear_flag</a>(<a class="code" href="_b_t_d_8h.html#a472a2cb241a6e13fa8f62d19b6c418bd">HCI_FLAG_CONNECT_COMPLETE</a>); <span class="comment">// Clear connection complete flag</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; }</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a29c1744f72f3cd85865c8173eace5a36">EV_REMOTE_NAME_COMPLETE</a>:</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keywordflow">if</span>(!hcibuf[2]) { <span class="comment">// Check if reading is OK</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; min(<span class="keyword">sizeof</span> (<a class="code" href="class_b_t_d.html#aa0fd5483f227e29de23c20ee31c940aa">remote_name</a>), <span class="keyword">sizeof</span> (hcibuf) - 9); i++) {</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <a class="code" href="class_b_t_d.html#aa0fd5483f227e29de23c20ee31c940aa">remote_name</a>[i] = hcibuf[9 + i];</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#aa0fd5483f227e29de23c20ee31c940aa">remote_name</a>[i] == <span class="charliteral">&#39;\0&#39;</span>) <span class="comment">// End of string</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; }</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">// TODO: Always set &#39;\0&#39; in remote name!</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <a class="code" href="_b_t_d_8h.html#ada46cc57bb9134769989b1b18bdac525">hci_set_flag</a>(<a class="code" href="_b_t_d_8h.html#a400af4b61f6e94ab821fa368d8bf2b07">HCI_FLAG_REMOTE_NAME_COMPLETE</a>);</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; }</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#af6c5584636f8958689f5cd67290254e1">EV_INCOMING_CONNECT</a>:</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 6; i++)</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[i] = hcibuf[i + 2];</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 3; i++)</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; classOfDevice[i] = hcibuf[i + 8];</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">if</span>((classOfDevice[1] &amp; 0x0F) == 0x05 &amp;&amp; (classOfDevice[0] &amp; 0xC8)) { <span class="comment">// Check if it is a mouse, keyboard or a gamepad</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">if</span>(classOfDevice[0] &amp; 0x80)</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nMouse is connecting&quot;</span>), 0x80);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">if</span>(classOfDevice[0] &amp; 0x40)</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nKeyboard is connecting&quot;</span>), 0x80);</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">if</span>(classOfDevice[0] &amp; 0x08)</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nGamepad is connecting&quot;</span>), 0x80);</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <a class="code" href="class_b_t_d.html#a685d6371fb0c950ff6bad4510a8cc85a">incomingHIDDevice</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nClass of device: &quot;</span>), 0x80);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; D_PrintHex&lt;uint8_t &gt; (classOfDevice[2], 0x80);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; &quot;</span>), 0x80);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; D_PrintHex&lt;uint8_t &gt; (classOfDevice[1], 0x80);</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; &quot;</span>), 0x80);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; D_PrintHex&lt;uint8_t &gt; (classOfDevice[0], 0x80);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <a class="code" href="_b_t_d_8h.html#ada46cc57bb9134769989b1b18bdac525">hci_set_flag</a>(<a class="code" href="_b_t_d_8h.html#a0e8a8ce5838e265c1732795bf8822043">HCI_FLAG_INCOMING_REQUEST</a>);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a935633384e87daa14b60549134014ec4">EV_PIN_CODE_REQUEST</a>:</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a>) {</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nPairing with Wiimote&quot;</span>), 0x80);</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <a class="code" href="class_b_t_d.html#a70047b0f624c3f0ef29f8b76b8a34938">hci_pin_code_request_reply</a>();</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a215cb939c01ed3ff56db37841224546c">btdPin</a> != NULL) {</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nBluetooth pin is set too: &quot;</span>), 0x80);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <a class="code" href="message_8h.html#aa41f0e761e43cb026f1c7f04f75fa24e">NotifyStr</a>(<a class="code" href="class_b_t_d.html#a215cb939c01ed3ff56db37841224546c">btdPin</a>, 0x80);</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <a class="code" href="class_b_t_d.html#a70047b0f624c3f0ef29f8b76b8a34938">hci_pin_code_request_reply</a>();</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nNo pin was set&quot;</span>), 0x80);</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <a class="code" href="class_b_t_d.html#a7114d2cb62aa413e5ecb25c45c76832b">hci_pin_code_negative_request_reply</a>();</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; }</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a8c77c922bb61301760ebf5af5f1cc7f0">EV_LINK_KEY_REQUEST</a>:</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nReceived Key Request&quot;</span>), 0x80);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <a class="code" href="class_b_t_d.html#af4d28b9c1a3b9688a1871610caee2cfc">hci_link_key_request_negative_reply</a>();</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a68b8f78a0e0da80434afb1e6d40eacf4">EV_AUTHENTICATION_COMPLETE</a>:</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">if</span>(!hcibuf[2]) { <span class="comment">// Check if pairing was successful</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a> &amp;&amp; !<a class="code" href="class_b_t_d.html#ac7caac80fb6f5f0e794af3644887d88e">connectToWii</a>) {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nPairing successful with Wiimote&quot;</span>), 0x80);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <a class="code" href="class_b_t_d.html#ac7caac80fb6f5f0e794af3644887d88e">connectToWii</a> = <span class="keyword">true</span>; <span class="comment">// Used to indicate to the Wii service, that it should connect to this device</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a2aa418d820fb6b877ea079e0436a518e">pairWithHIDDevice</a> &amp;&amp; !<a class="code" href="class_b_t_d.html#af40b8d52df99192880c8a13443b6c6d8">connectToHIDDevice</a>) {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nPairing successful with HID device&quot;</span>), 0x80);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <a class="code" href="class_b_t_d.html#af40b8d52df99192880c8a13443b6c6d8">connectToHIDDevice</a> = <span class="keyword">true</span>; <span class="comment">// Used to indicate to the BTHID service, that it should connect to this device</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nPairing was successful&quot;</span>), 0x80);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; }</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nPairing Failed: &quot;</span>), 0x80);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[2], 0x80);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <a class="code" href="class_b_t_d.html#a1bea5dd793a2f47006b4a7642efc9e56">hci_disconnect</a>(<a class="code" href="class_b_t_d.html#aa3bb6c692701cb33dfad1ea4d68b6f98">hci_handle</a>);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a31398eae2e433d1b7b39ea3d6d07cdd0">HCI_DISCONNECT_STATE</a>;</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a8391d08cb85031ab5a7d170db5874404">EV_IO_CAPABILITY_REQUEST</a>:</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nReceived IO Capability Request&quot;</span>), 0x80);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <a class="code" href="class_b_t_d.html#a399be31406914a79c14794e5d6a72444">hci_io_capability_request_reply</a>();</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a308d00fea92145c8e1bcf54248f977d6">EV_IO_CAPABILITY_RESPONSE</a>:</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nReceived IO Capability Response: &quot;</span>), 0x80);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nIO capability: &quot;</span>), 0x80);</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[8], 0x80);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nOOB data present: &quot;</span>), 0x80);</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[9], 0x80);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nAuthentication request: &quot;</span>), 0x80);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[10], 0x80);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#ae54f4bca639446200ddccd6b994b31e2">EV_USER_CONFIRMATION_REQUEST</a>:</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nUser confirmation Request&quot;</span>), 0x80);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;: \r\nNumeric value: &quot;</span>), 0x80);</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 4; i++) {</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; &quot;</span>), 0x80);</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[8 + i], 0x80);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; }</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="comment">// Simply confirm the connection, as the host has no &quot;NoInputNoOutput&quot; capabilities</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <a class="code" href="class_b_t_d.html#a019e145da18f2cbf5ab55538427c4f0a">hci_user_confirmation_request_reply</a>();</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#ada70bf6f98848d6b26dd8b756273b5ce">EV_SIMPLE_PAIRING_COMPLETE</a>:</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">if</span>(!hcibuf[2]) { <span class="comment">// Check if connected OK</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nSimple Pairing succeeded&quot;</span>), 0x80);</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nSimple Pairing failed: &quot;</span>), 0x80);</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[2], 0x80);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; }</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="comment">/* We will just ignore the following events */</span></div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a2ad6543cdfe06cbf0924c287c08f36d7">EV_MAX_SLOTS_CHANGE</a>:</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a0987119cfc40f3011a2cec69686034df">EV_NUM_COMPLETE_PKT</a>:</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#ac61db50de3007a22e19e660bd7e68e69">EV_ROLE_CHANGED</a>:</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#ad8481acc0b144d97017f8a06d63ff47c">EV_PAGE_SCAN_REP_MODE</a>:</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#acd5f65703cc34b112a1f656d9a49551b">EV_LOOPBACK_COMMAND</a>:</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a6f8b4cf8546d9928a34c9c681dc5a6d5">EV_DATA_BUFFER_OVERFLOW</a>:</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a3e107e9d07793ca5cfaeea8b2181d4a4">EV_CHANGE_CONNECTION_LINK</a>:</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a1b58792b76e0f216df8160bf055032c3">EV_QOS_SETUP_COMPLETE</a>:</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a8c662496af1164370e5fdf7149ecd842">EV_LINK_KEY_NOTIFICATION</a>:</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#aa0bf5ac66c412d3415dbb753630d0e58">EV_ENCRYPTION_CHANGE</a>:</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a830b2a3bcb09c4802910e8b05531d317">EV_READ_REMOTE_VERSION_INFORMATION_COMPLETE</a>:</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">if</span>(hcibuf[0] != 0x00) {</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nIgnore HCI Event: &quot;</span>), 0x80);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[0], 0x80);</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">if</span>(hcibuf[0] != 0x00) {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nUnmanaged HCI Event: &quot;</span>), 0x80);</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[0], 0x80);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;, data: &quot;</span>), 0x80);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">for</span>(uint16_t i = 0; i &lt; hcibuf[1]; i++) {</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; D_PrintHex&lt;uint8_t &gt; (hcibuf[2 + i], 0x80);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; &quot;</span>), 0x80);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; }</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; }</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; } <span class="comment">// Switch</span></div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; }</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nHCI event error: &quot;</span>), 0x80);</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; D_PrintHex&lt;uint8_t &gt; (rcode, 0x80);</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; }</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;}</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;<span class="comment">/* Poll Bluetooth and print result */</span></div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;<span class="keywordtype">void</span> BTD::HCI_task() {</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">switch</span>(hci_state) {</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#ac2b910cd6cc87c7bac09617815a1ee9a">HCI_INIT_STATE</a>:</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; hci_counter++;</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keywordflow">if</span>(hci_counter &gt; hci_num_reset_loops) { <span class="comment">// wait until we have looped x times to clear any old events</span></div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <a class="code" href="class_b_t_d.html#ae6f942eabd29257bc4896e5f263275b6">hci_reset</a>();</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#af3a7567dba1a0a7ed4272324d7684440">HCI_RESET_STATE</a>;</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; hci_counter = 0;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; }</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#af3a7567dba1a0a7ed4272324d7684440">HCI_RESET_STATE</a>:</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; hci_counter++;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a14087b750ea2da7f0cef4daaa7683d01">HCI_FLAG_CMD_COMPLETE</a>)) {</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; hci_counter = 0;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nHCI Reset complete&quot;</span>), 0x80);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#aa4e852587db5ad51c6c5cfb8e9d4f002">HCI_CLASS_STATE</a>;</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <a class="code" href="class_b_t_d.html#a9a17405df60591b909ff1502fb8f3141">hci_write_class_of_device</a>();</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(hci_counter &gt; hci_num_reset_loops) {</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; hci_num_reset_loops *= 10;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keywordflow">if</span>(hci_num_reset_loops &gt; 2000)</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; hci_num_reset_loops = 2000;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nNo response to HCI Reset&quot;</span>), 0x80);</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#ac2b910cd6cc87c7bac09617815a1ee9a">HCI_INIT_STATE</a>;</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; hci_counter = 0;</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; }</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#aa4e852587db5ad51c6c5cfb8e9d4f002">HCI_CLASS_STATE</a>:</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a14087b750ea2da7f0cef4daaa7683d01">HCI_FLAG_CMD_COMPLETE</a>)) {</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nWrite class of device&quot;</span>), 0x80);</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a86fd72d2518d27c02c15af635b55fc8f">HCI_BDADDR_STATE</a>;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <a class="code" href="class_b_t_d.html#acb94a629477d85cebd16a9c5ecd4a8b3">hci_read_bdaddr</a>();</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; }</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a86fd72d2518d27c02c15af635b55fc8f">HCI_BDADDR_STATE</a>:</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#aabbf8a2ed694a2dc4d4e60fd389c44dd">HCI_FLAG_READ_BDADDR</a>)) {</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nLocal Bluetooth Address: &quot;</span>), 0x80);</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">for</span>(int8_t i = 5; i &gt; 0; i--) {</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; D_PrintHex&lt;uint8_t &gt; (<a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>[i], 0x80);</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;:&quot;</span>), 0x80);</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; }</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; D_PrintHex&lt;uint8_t &gt; (<a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>[0], 0x80);</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <a class="code" href="class_b_t_d.html#ae2ba215b6942f4131e4c5fdef2771e22">hci_read_local_version_information</a>();</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a8f1d666addd0c2bba7602fbd7a692228">HCI_LOCAL_VERSION_STATE</a>;</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; }</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160;</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a8f1d666addd0c2bba7602fbd7a692228">HCI_LOCAL_VERSION_STATE</a>: <span class="comment">// The local version is used by the PS3BT class</span></div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#ab3b1f616c1e885e697806f0167b73e8e">HCI_FLAG_READ_VERSION</a>)) {</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0359c0c158c864c27319810cbd1534f9">btdName</a> != NULL) {</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <a class="code" href="class_b_t_d.html#ab6cf9a087ef319a8512922531446ea62">hci_write_local_name</a>(<a class="code" href="class_b_t_d.html#a0359c0c158c864c27319810cbd1534f9">btdName</a>);</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a4aa4f58744a713316d6547927ac0d406">HCI_WRITE_NAME_STATE</a>;</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a93e830be9fb0fe7d04bb39d10806ddc0">useSimplePairing</a>) {</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <a class="code" href="class_b_t_d.html#a28bf7852317a3e3a79745dbd5cb4db14">hci_read_local_extended_features</a>(0); <span class="comment">// &quot;Requests the normal LMP features as returned by Read_Local_Supported_Features&quot;</span></div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="comment">//hci_read_local_extended_features(1); // Read page 1</span></div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a4d3e6c132599ef5e6382ba18c46b3e40">HCI_LOCAL_EXTENDED_FEATURES_STATE</a>;</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a2c060a7be42c5c4c57990cacec0b45f5">HCI_CHECK_DEVICE_SERVICE</a>;</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a4aa4f58744a713316d6547927ac0d406">HCI_WRITE_NAME_STATE</a>:</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a14087b750ea2da7f0cef4daaa7683d01">HCI_FLAG_CMD_COMPLETE</a>)) {</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nThe name was set to: &quot;</span>), 0x80);</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <a class="code" href="message_8h.html#aa41f0e761e43cb026f1c7f04f75fa24e">NotifyStr</a>(<a class="code" href="class_b_t_d.html#a0359c0c158c864c27319810cbd1534f9">btdName</a>, 0x80);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a93e830be9fb0fe7d04bb39d10806ddc0">useSimplePairing</a>) {</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <a class="code" href="class_b_t_d.html#a28bf7852317a3e3a79745dbd5cb4db14">hci_read_local_extended_features</a>(0); <span class="comment">// &quot;Requests the normal LMP features as returned by Read_Local_Supported_Features&quot;</span></div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="comment">//hci_read_local_extended_features(1); // Read page 1</span></div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a4d3e6c132599ef5e6382ba18c46b3e40">HCI_LOCAL_EXTENDED_FEATURES_STATE</a>;</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a2c060a7be42c5c4c57990cacec0b45f5">HCI_CHECK_DEVICE_SERVICE</a>;</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; }</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160;</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a4d3e6c132599ef5e6382ba18c46b3e40">HCI_LOCAL_EXTENDED_FEATURES_STATE</a>:</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a1da7c6e93b93b4d2e5727d742f6efe9d">HCI_FLAG_LOCAL_EXTENDED_FEATURES</a>)) {</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="keywordflow">if</span>(simple_pairing_supported) {</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <a class="code" href="class_b_t_d.html#a45bde7ca453285d88029e9b0235c428d">hci_write_simple_pairing_mode</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#ac7ef2953c95a2c5e15ffe86186c5f6e0">HCI_WRITE_SIMPLE_PAIRING_STATE</a>;</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a2c060a7be42c5c4c57990cacec0b45f5">HCI_CHECK_DEVICE_SERVICE</a>;</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; }</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#ac7ef2953c95a2c5e15ffe86186c5f6e0">HCI_WRITE_SIMPLE_PAIRING_STATE</a>:</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a14087b750ea2da7f0cef4daaa7683d01">HCI_FLAG_CMD_COMPLETE</a>)) {</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nSimple pairing was enabled&quot;</span>), 0x80);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <a class="code" href="class_b_t_d.html#adcc9736be085564f567c0e6643c5d4f3">hci_set_event_mask</a>();</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#ab514aab1934c8dbc80ba86324b83647c">HCI_SET_EVENT_MASK_STATE</a>;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; }</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#ab514aab1934c8dbc80ba86324b83647c">HCI_SET_EVENT_MASK_STATE</a>:</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a14087b750ea2da7f0cef4daaa7683d01">HCI_FLAG_CMD_COMPLETE</a>)) {</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nSet event mask completed&quot;</span>), 0x80);</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a2c060a7be42c5c4c57990cacec0b45f5">HCI_CHECK_DEVICE_SERVICE</a>;</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; }</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160;</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a2c060a7be42c5c4c57990cacec0b45f5">HCI_CHECK_DEVICE_SERVICE</a>:</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a2aa418d820fb6b877ea079e0436a518e">pairWithHIDDevice</a> || <a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a>) { <span class="comment">// Check if it should try to connect to a Wiimote</span></div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a>)</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nStarting inquiry\r\nPress 1 &amp; 2 on the Wiimote\r\nOr press the SYNC button if you are using a Wii U Pro Controller or a Wii Balance Board&quot;</span>), 0x80);</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nPlease enable discovery of your device&quot;</span>), 0x80);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <a class="code" href="class_b_t_d.html#a678f2c995553ce6a9f48f9b59f2f1555">hci_inquiry</a>();</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a09fa39bcefd3255f8ef762034e45679e">HCI_INQUIRY_STATE</a>;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#acc9b6954b4bb6c19a9d25242869d5ddf">HCI_SCANNING_STATE</a>; <span class="comment">// Don&#39;t try to connect to a Wiimote</span></div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a09fa39bcefd3255f8ef762034e45679e">HCI_INQUIRY_STATE</a>:</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a5ac3c55b54eff968d2327185a7e644ba">HCI_FLAG_DEVICE_FOUND</a>)) {</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <a class="code" href="class_b_t_d.html#a45ffbc7a40bbb763b0ece907c3dfc9ff">hci_inquiry_cancel</a>(); <span class="comment">// Stop inquiry</span></div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a>)</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nWiimote found&quot;</span>), 0x80);</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nHID device found&quot;</span>), 0x80);</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nNow just create the instance like so:&quot;</span>), 0x80);</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a>)</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nWII Wii(&amp;Btd);&quot;</span>), 0x80);</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nBTHID bthid(&amp;Btd);&quot;</span>), 0x80);</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160;</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nAnd then press any button on the &quot;</span>), 0x80);</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a>)</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;Wiimote&quot;</span>), 0x80);</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;device&quot;</span>), 0x80);</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="keywordflow">if</span>(checkRemoteName) {</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <a class="code" href="class_b_t_d.html#a8767529bd203c549348a38ac9c6682b3">hci_remote_name</a>(); <span class="comment">// We need to know the name to distinguish between the Wiimote, the new Wiimote with Motion Plus inside, a Wii U Pro Controller and a Wii Balance Board</span></div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a4bad48092981dffe97edb052f5ae08bd">HCI_REMOTE_NAME_STATE</a>;</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a19b8f48838cdb9ca7db043878f1c11fa">HCI_CONNECT_DEVICE_STATE</a>;</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; }</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160;</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a19b8f48838cdb9ca7db043878f1c11fa">HCI_CONNECT_DEVICE_STATE</a>:</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a14087b750ea2da7f0cef4daaa7683d01">HCI_FLAG_CMD_COMPLETE</a>)) {</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a>)</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nConnecting to Wiimote&quot;</span>), 0x80);</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nConnecting to HID device&quot;</span>), 0x80);</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; checkRemoteName = <span class="keyword">false</span>;</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <a class="code" href="class_b_t_d.html#ae7066ea743f8907708db945ebef3ad76">hci_connect</a>();</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#ab7fc323aab10c0fb1339e1c660fdd15d">HCI_CONNECTED_DEVICE_STATE</a>;</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; }</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#ab7fc323aab10c0fb1339e1c660fdd15d">HCI_CONNECTED_DEVICE_STATE</a>:</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#ad14762241e9195fc9a3b0a69ef1ab7f3">HCI_FLAG_CONNECT_EVENT</a>)) {</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a472a2cb241a6e13fa8f62d19b6c418bd">HCI_FLAG_CONNECT_COMPLETE</a>)) {</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a>)</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nConnected to Wiimote&quot;</span>), 0x80);</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nConnected to HID device&quot;</span>), 0x80);</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <a class="code" href="class_b_t_d.html#addd07c18c725a324a05792a83026d36d">hci_authentication_request</a>(); <span class="comment">// This will start the pairing with the device</span></div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#acc9b6954b4bb6c19a9d25242869d5ddf">HCI_SCANNING_STATE</a>;</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nTrying to connect one more time...&quot;</span>), 0x80);</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <a class="code" href="class_b_t_d.html#ae7066ea743f8907708db945ebef3ad76">hci_connect</a>(); <span class="comment">// Try to connect one more time</span></div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; }</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; }</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160;</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#acc9b6954b4bb6c19a9d25242869d5ddf">HCI_SCANNING_STATE</a>:</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordflow">if</span>(!<a class="code" href="class_b_t_d.html#ac7caac80fb6f5f0e794af3644887d88e">connectToWii</a> &amp;&amp; !<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a> &amp;&amp; !<a class="code" href="class_b_t_d.html#af40b8d52df99192880c8a13443b6c6d8">connectToHIDDevice</a> &amp;&amp; !<a class="code" href="class_b_t_d.html#a2aa418d820fb6b877ea079e0436a518e">pairWithHIDDevice</a>) {</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nWait For Incoming Connection Request&quot;</span>), 0x80);</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <a class="code" href="class_b_t_d.html#a7dd7faaec1d3d9a1d8159cc2a4190977">hci_write_scan_enable</a>();</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <a class="code" href="class_b_t_d.html#a93a522edb2974185c7567b8f83860424">waitingForConnection</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a8bfcf6e1a0a044aba26d728fb0c6a17a">HCI_CONNECT_IN_STATE</a>;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; }</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160;</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a8bfcf6e1a0a044aba26d728fb0c6a17a">HCI_CONNECT_IN_STATE</a>:</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a0e8a8ce5838e265c1732795bf8822043">HCI_FLAG_INCOMING_REQUEST</a>)) {</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <a class="code" href="class_b_t_d.html#a93a522edb2974185c7567b8f83860424">waitingForConnection</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nIncoming Connection Request&quot;</span>), 0x80);</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <a class="code" href="class_b_t_d.html#a8767529bd203c549348a38ac9c6682b3">hci_remote_name</a>();</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a4bad48092981dffe97edb052f5ae08bd">HCI_REMOTE_NAME_STATE</a>;</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a094e0fa9b22cade79fe64a907aad5f2a">HCI_FLAG_DISCONNECT_COMPLETE</a>))</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a31398eae2e433d1b7b39ea3d6d07cdd0">HCI_DISCONNECT_STATE</a>;</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160;</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a4bad48092981dffe97edb052f5ae08bd">HCI_REMOTE_NAME_STATE</a>:</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a400af4b61f6e94ab821fa368d8bf2b07">HCI_FLAG_REMOTE_NAME_COMPLETE</a>)) {</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nRemote Name: &quot;</span>), 0x80);</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; strlen(<a class="code" href="class_b_t_d.html#aa0fd5483f227e29de23c20ee31c940aa">remote_name</a>); i++)</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <a class="code" href="message_8h.html#ab5d8177365493b21dbc092f6557bd508">Notifyc</a>(<a class="code" href="class_b_t_d.html#aa0fd5483f227e29de23c20ee31c940aa">remote_name</a>[i], 0x80);</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">if</span>(strncmp((<span class="keyword">const</span> <span class="keywordtype">char</span>*)<a class="code" href="class_b_t_d.html#aa0fd5483f227e29de23c20ee31c940aa">remote_name</a>, <span class="stringliteral">&quot;Nintendo&quot;</span>, 8) == 0) {</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <a class="code" href="class_b_t_d.html#a4dc8f94fe85028f3d54f13dde1e5b4ee">incomingWii</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <a class="code" href="class_b_t_d.html#a3aea445b2349e99ef057db1a4ffdd9dc">motionPlusInside</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <a class="code" href="class_b_t_d.html#a962a5714c225dcb633434f02e3657583">wiiUProController</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; pairWiiUsingSync = <span class="keyword">false</span>;</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nWiimote is connecting&quot;</span>), 0x80);</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="keywordflow">if</span>(strncmp((<span class="keyword">const</span> <span class="keywordtype">char</span>*)remote_name, <span class="stringliteral">&quot;Nintendo RVL-CNT-01-TR&quot;</span>, 22) == 0) {</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; with Motion Plus Inside&quot;</span>), 0x80);</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; <a class="code" href="class_b_t_d.html#a3aea445b2349e99ef057db1a4ffdd9dc">motionPlusInside</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strncmp((<span class="keyword">const</span> <span class="keywordtype">char</span>*)remote_name, <span class="stringliteral">&quot;Nintendo RVL-CNT-01-UC&quot;</span>, 22) == 0) {</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; - Wii U Pro Controller&quot;</span>), 0x80);</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <a class="code" href="class_b_t_d.html#a962a5714c225dcb633434f02e3657583">wiiUProController</a> = <a class="code" href="class_b_t_d.html#a3aea445b2349e99ef057db1a4ffdd9dc">motionPlusInside</a> = pairWiiUsingSync = <span class="keyword">true</span>;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strncmp((<span class="keyword">const</span> <span class="keywordtype">char</span>*)remote_name, <span class="stringliteral">&quot;Nintendo RVL-WBC-01&quot;</span>, 19) == 0) {</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; - Wii Balance Board&quot;</span>), 0x80);</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; pairWiiUsingSync = <span class="keyword">true</span>;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; }</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; }</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="keywordflow">if</span>(classOfDevice[2] == 0 &amp;&amp; classOfDevice[1] == 0x25 &amp;&amp; classOfDevice[0] == 0x08 &amp;&amp; strncmp((<span class="keyword">const</span> <span class="keywordtype">char</span>*)remote_name, <span class="stringliteral">&quot;Wireless Controller&quot;</span>, 19) == 0) {</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nPS4 controller is connecting&quot;</span>), 0x80);</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; incomingPS4 = <span class="keyword">true</span>;</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; }</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="keywordflow">if</span>((<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a> || <a class="code" href="class_b_t_d.html#a2aa418d820fb6b877ea079e0436a518e">pairWithHIDDevice</a>) &amp;&amp; checkRemoteName)</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a19b8f48838cdb9ca7db043878f1c11fa">HCI_CONNECT_DEVICE_STATE</a>;</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <a class="code" href="class_b_t_d.html#a1cb07a155c69bb1fcf45ae030b8947ec">hci_accept_connection</a>();</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#ae0a16d1cc0142186a20379b5c68bd1e0">HCI_CONNECTED_STATE</a>;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; }</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; }</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#ae0a16d1cc0142186a20379b5c68bd1e0">HCI_CONNECTED_STATE</a>:</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a472a2cb241a6e13fa8f62d19b6c418bd">HCI_FLAG_CONNECT_COMPLETE</a>)) {</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nConnected to Device: &quot;</span>), 0x80);</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keywordflow">for</span>(int8_t i = 5; i &gt; 0; i--) {</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; D_PrintHex&lt;uint8_t &gt; (<a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[i], 0x80);</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;:&quot;</span>), 0x80);</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; }</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; D_PrintHex&lt;uint8_t &gt; (<a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[0], 0x80);</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">if</span>(incomingPS4)</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <a class="code" href="class_b_t_d.html#af40b8d52df99192880c8a13443b6c6d8">connectToHIDDevice</a> = <span class="keyword">true</span>; <span class="comment">// We should always connect to the PS4 controller</span></div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <span class="comment">// Clear these flags for a new connection</span></div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <a class="code" href="class_b_t_d.html#a0f1c28a03bcbe62cc7c083f97ea27594">l2capConnectionClaimed</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <a class="code" href="class_b_t_d.html#af5e5b085cec1da5c83c75e80e95b3590">sdpConnectionClaimed</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <a class="code" href="class_b_t_d.html#a9e5a34242007b64cd6a226cfd1901e74">rfcommConnectionClaimed</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; hci_event_flag = 0;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#a20fc1ebfc3da8e048f6afe53330e6b8f">HCI_DONE_STATE</a>;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; }</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a20fc1ebfc3da8e048f6afe53330e6b8f">HCI_DONE_STATE</a>:</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; hci_counter++;</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordflow">if</span>(hci_counter &gt; 1000) { <span class="comment">// Wait until we have looped 1000 times to make sure that the L2CAP connection has been started</span></div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; hci_counter = 0;</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#acc9b6954b4bb6c19a9d25242869d5ddf">HCI_SCANNING_STATE</a>;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; }</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <span class="keywordflow">case</span> <a class="code" href="_b_t_d_8h.html#a31398eae2e433d1b7b39ea3d6d07cdd0">HCI_DISCONNECT_STATE</a>:</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a>(<a class="code" href="_b_t_d_8h.html#a094e0fa9b22cade79fe64a907aad5f2a">HCI_FLAG_DISCONNECT_COMPLETE</a>)) {</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nHCI Disconnected from Device&quot;</span>), 0x80);</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; hci_event_flag = 0; <span class="comment">// Clear all flags</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="comment">// Reset all buffers</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; memset(hcibuf, 0, <a class="code" href="_b_t_d_8h.html#a32d591ef5742a99963130616ef146787">BULK_MAXPKTSIZE</a>);</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; memset(l2capinbuf, 0, <a class="code" href="_b_t_d_8h.html#a32d591ef5742a99963130616ef146787">BULK_MAXPKTSIZE</a>);</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <a class="code" href="class_b_t_d.html#ac7caac80fb6f5f0e794af3644887d88e">connectToWii</a> = <a class="code" href="class_b_t_d.html#a4dc8f94fe85028f3d54f13dde1e5b4ee">incomingWii</a> = <a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <a class="code" href="class_b_t_d.html#af40b8d52df99192880c8a13443b6c6d8">connectToHIDDevice</a> = <a class="code" href="class_b_t_d.html#a685d6371fb0c950ff6bad4510a8cc85a">incomingHIDDevice</a> = <a class="code" href="class_b_t_d.html#a2aa418d820fb6b877ea079e0436a518e">pairWithHIDDevice</a> = checkRemoteName = <span class="keyword">false</span>;</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; incomingPS4 = <span class="keyword">false</span>;</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; hci_state = <a class="code" href="_b_t_d_8h.html#acc9b6954b4bb6c19a9d25242869d5ddf">HCI_SCANNING_STATE</a>;</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; }</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; }</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;}</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;<span class="keywordtype">void</span> BTD::ACL_event_task() {</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; uint16_t length = <a class="code" href="_b_t_d_8h.html#a32d591ef5742a99963130616ef146787">BULK_MAXPKTSIZE</a>;</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; uint8_t rcode = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#aead4d2040c641d55176854b236804088">inTransfer</a>(<a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>, <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[ <a class="code" href="class_b_t_d.html#a480510bd399ae74a97cd74c8474ef59c">BTD_DATAIN_PIPE</a> ].epAddr, &amp;length, l2capinbuf, pollInterval); <span class="comment">// Input on endpoint 2</span></div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="keywordflow">if</span>(!rcode) { <span class="comment">// Check for errors</span></div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="keywordflow">if</span>(length &gt; 0) { <span class="comment">// Check if any data was read</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; <a class="code" href="_b_t_d_8h.html#afeaafddda417fd2f053dbd476332ea19">BTD_NUM_SERVICES</a>; i++) {</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <span class="keywordflow">if</span>(btService[i])</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; btService[i]-&gt;<a class="code" href="class_bluetooth_service.html#a9740e997198485c9629a146a9c981043">ACLData</a>(l2capinbuf);</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; }</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; }</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; }</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;<span class="preprocessor">#ifdef EXTRADEBUG</span></div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rcode != <a class="code" href="max3421e_8h.html#ab44a7968d08016b58d98951059c37076">hrNAK</a>) {</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nACL data in error: &quot;</span>), 0x80);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; D_PrintHex&lt;uint8_t &gt; (rcode, 0x80);</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; }</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; <a class="code" href="_b_t_d_8h.html#afeaafddda417fd2f053dbd476332ea19">BTD_NUM_SERVICES</a>; i++)</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <span class="keywordflow">if</span>(btService[i])</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; btService[i]-&gt;<a class="code" href="class_bluetooth_service.html#a16df27af39d09963cf0d43910d92ff4c">Run</a>();</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;}</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;<span class="comment">/************************************************************/</span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;<span class="comment">/* HCI Commands */</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;<span class="comment">/************************************************************/</span></div><div class="line"><a name="l01108"></a><span class="lineno"><a class="line" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda"> 1108</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">BTD::HCI_Command</a>(uint8_t* data, uint16_t nbytes) {</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <a class="code" href="_b_t_d_8h.html#a700e625eeda4ce1b35112721acbdfd19">hci_clear_flag</a>(<a class="code" href="_b_t_d_8h.html#a14087b750ea2da7f0cef4daaa7683d01">HCI_FLAG_CMD_COMPLETE</a>);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a636695a5c3d35cd6b9e31c54edfacd7c">ctrlReq</a>(<a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>, <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[ <a class="code" href="class_b_t_d.html#a49f433ab824f259c3815e180c73bb0ad">BTD_CONTROL_PIPE</a> ].epAddr, <a class="code" href="_b_t_d_8h.html#ad70df063f83bf7000558b1d73aa009e5">bmREQ_HCI_OUT</a>, 0x00, 0x00, 0x00, 0x00, nbytes, nbytes, data, NULL);</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;}</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;</div><div class="line"><a name="l01113"></a><span class="lineno"><a class="line" href="class_b_t_d.html#ae6f942eabd29257bc4896e5f263275b6"> 1113</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#ae6f942eabd29257bc4896e5f263275b6">BTD::hci_reset</a>() {</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; hci_event_flag = 0; <span class="comment">// Clear all the flags</span></div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; hcibuf[0] = 0x03; <span class="comment">// HCI OCF = 3</span></div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; hcibuf[1] = 0x03 &lt;&lt; 2; <span class="comment">// HCI OGF = 3</span></div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; hcibuf[2] = 0x00;</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 3);</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;}</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;</div><div class="line"><a name="l01122"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a7dd7faaec1d3d9a1d8159cc2a4190977"> 1122</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a7dd7faaec1d3d9a1d8159cc2a4190977">BTD::hci_write_scan_enable</a>() {</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <a class="code" href="_b_t_d_8h.html#a700e625eeda4ce1b35112721acbdfd19">hci_clear_flag</a>(<a class="code" href="_b_t_d_8h.html#a0e8a8ce5838e265c1732795bf8822043">HCI_FLAG_INCOMING_REQUEST</a>);</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; hcibuf[0] = 0x1A; <span class="comment">// HCI OCF = 1A</span></div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; hcibuf[1] = 0x03 &lt;&lt; 2; <span class="comment">// HCI OGF = 3</span></div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; hcibuf[2] = 0x01; <span class="comment">// parameter length = 1</span></div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0359c0c158c864c27319810cbd1534f9">btdName</a> != NULL)</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; hcibuf[3] = 0x03; <span class="comment">// Inquiry Scan enabled. Page Scan enabled.</span></div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; hcibuf[3] = 0x02; <span class="comment">// Inquiry Scan disabled. Page Scan enabled.</span></div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 4);</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;}</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;</div><div class="line"><a name="l01135"></a><span class="lineno"><a class="line" href="class_b_t_d.html#aff59ab45d917406141ae0c9c79047f08"> 1135</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#aff59ab45d917406141ae0c9c79047f08">BTD::hci_write_scan_disable</a>() {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; hcibuf[0] = 0x1A; <span class="comment">// HCI OCF = 1A</span></div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; hcibuf[1] = 0x03 &lt;&lt; 2; <span class="comment">// HCI OGF = 3</span></div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; hcibuf[2] = 0x01; <span class="comment">// parameter length = 1</span></div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; hcibuf[3] = 0x00; <span class="comment">// Inquiry Scan disabled. Page Scan disabled.</span></div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 4);</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;}</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;</div><div class="line"><a name="l01144"></a><span class="lineno"><a class="line" href="class_b_t_d.html#acb94a629477d85cebd16a9c5ecd4a8b3"> 1144</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#acb94a629477d85cebd16a9c5ecd4a8b3">BTD::hci_read_bdaddr</a>() {</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <a class="code" href="_b_t_d_8h.html#a700e625eeda4ce1b35112721acbdfd19">hci_clear_flag</a>(<a class="code" href="_b_t_d_8h.html#aabbf8a2ed694a2dc4d4e60fd389c44dd">HCI_FLAG_READ_BDADDR</a>);</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; hcibuf[0] = 0x09; <span class="comment">// HCI OCF = 9</span></div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; hcibuf[1] = 0x04 &lt;&lt; 2; <span class="comment">// HCI OGF = 4</span></div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; hcibuf[2] = 0x00;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 3);</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;}</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;</div><div class="line"><a name="l01153"></a><span class="lineno"><a class="line" href="class_b_t_d.html#ae2ba215b6942f4131e4c5fdef2771e22"> 1153</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#ae2ba215b6942f4131e4c5fdef2771e22">BTD::hci_read_local_version_information</a>() {</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <a class="code" href="_b_t_d_8h.html#a700e625eeda4ce1b35112721acbdfd19">hci_clear_flag</a>(<a class="code" href="_b_t_d_8h.html#ab3b1f616c1e885e697806f0167b73e8e">HCI_FLAG_READ_VERSION</a>);</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; hcibuf[0] = 0x01; <span class="comment">// HCI OCF = 1</span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; hcibuf[1] = 0x04 &lt;&lt; 2; <span class="comment">// HCI OGF = 4</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; hcibuf[2] = 0x00;</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 3);</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;}</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;</div><div class="line"><a name="l01162"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a28bf7852317a3e3a79745dbd5cb4db14"> 1162</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a28bf7852317a3e3a79745dbd5cb4db14">BTD::hci_read_local_extended_features</a>(uint8_t page_number) {</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <a class="code" href="_b_t_d_8h.html#a700e625eeda4ce1b35112721acbdfd19">hci_clear_flag</a>(<a class="code" href="_b_t_d_8h.html#a1da7c6e93b93b4d2e5727d742f6efe9d">HCI_FLAG_LOCAL_EXTENDED_FEATURES</a>);</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; hcibuf[0] = 0x04; <span class="comment">// HCI OCF = 4</span></div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; hcibuf[1] = 0x04 &lt;&lt; 2; <span class="comment">// HCI OGF = 4</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; hcibuf[2] = 0x01; <span class="comment">// parameter length = 1</span></div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; hcibuf[3] = page_number;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 4);</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;}</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;</div><div class="line"><a name="l01172"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a1cb07a155c69bb1fcf45ae030b8947ec"> 1172</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a1cb07a155c69bb1fcf45ae030b8947ec">BTD::hci_accept_connection</a>() {</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <a class="code" href="_b_t_d_8h.html#a700e625eeda4ce1b35112721acbdfd19">hci_clear_flag</a>(<a class="code" href="_b_t_d_8h.html#a472a2cb241a6e13fa8f62d19b6c418bd">HCI_FLAG_CONNECT_COMPLETE</a>);</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; hcibuf[0] = 0x09; <span class="comment">// HCI OCF = 9</span></div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; hcibuf[1] = 0x01 &lt;&lt; 2; <span class="comment">// HCI OGF = 1</span></div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; hcibuf[2] = 0x07; <span class="comment">// parameter length 7</span></div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; hcibuf[3] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[0]; <span class="comment">// 6 octet bdaddr</span></div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; hcibuf[4] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[1];</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; hcibuf[5] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[2];</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; hcibuf[6] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[3];</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; hcibuf[7] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[4];</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; hcibuf[8] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[5];</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; hcibuf[9] = 0x00; <span class="comment">// Switch role to master</span></div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 10);</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;}</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;</div><div class="line"><a name="l01188"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a8767529bd203c549348a38ac9c6682b3"> 1188</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a8767529bd203c549348a38ac9c6682b3">BTD::hci_remote_name</a>() {</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <a class="code" href="_b_t_d_8h.html#a700e625eeda4ce1b35112721acbdfd19">hci_clear_flag</a>(<a class="code" href="_b_t_d_8h.html#a400af4b61f6e94ab821fa368d8bf2b07">HCI_FLAG_REMOTE_NAME_COMPLETE</a>);</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; hcibuf[0] = 0x19; <span class="comment">// HCI OCF = 19</span></div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; hcibuf[1] = 0x01 &lt;&lt; 2; <span class="comment">// HCI OGF = 1</span></div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; hcibuf[2] = 0x0A; <span class="comment">// parameter length = 10</span></div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; hcibuf[3] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[0]; <span class="comment">// 6 octet bdaddr</span></div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; hcibuf[4] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[1];</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; hcibuf[5] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[2];</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; hcibuf[6] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[3];</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; hcibuf[7] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[4];</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; hcibuf[8] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[5];</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; hcibuf[9] = 0x01; <span class="comment">// Page Scan Repetition Mode</span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; hcibuf[10] = 0x00; <span class="comment">// Reserved</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; hcibuf[11] = 0x00; <span class="comment">// Clock offset - low byte</span></div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; hcibuf[12] = 0x00; <span class="comment">// Clock offset - high byte</span></div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 13);</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;}</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;</div><div class="line"><a name="l01207"></a><span class="lineno"><a class="line" href="class_b_t_d.html#ab6cf9a087ef319a8512922531446ea62"> 1207</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#ab6cf9a087ef319a8512922531446ea62">BTD::hci_write_local_name</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) {</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; hcibuf[0] = 0x13; <span class="comment">// HCI OCF = 13</span></div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; hcibuf[1] = 0x03 &lt;&lt; 2; <span class="comment">// HCI OGF = 3</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; hcibuf[2] = strlen(name) + 1; <span class="comment">// parameter length = the length of the string + end byte</span></div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; uint8_t i;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="keywordflow">for</span>(i = 0; i &lt; strlen(name); i++)</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; hcibuf[i + 3] = name[i];</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; hcibuf[i + 3] = 0x00; <span class="comment">// End of string</span></div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 4 + strlen(name));</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;}</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;</div><div class="line"><a name="l01219"></a><span class="lineno"><a class="line" href="class_b_t_d.html#adcc9736be085564f567c0e6643c5d4f3"> 1219</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#adcc9736be085564f567c0e6643c5d4f3">BTD::hci_set_event_mask</a>() {</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; hcibuf[0] = 0x01; <span class="comment">// HCI OCF = 01</span></div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; hcibuf[1] = 0x03 &lt;&lt; 2; <span class="comment">// HCI OGF = 3</span></div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; hcibuf[2] = 0x08;</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <span class="comment">// The first 6 bytes are the default of 1FFF FFFF FFFF</span></div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="comment">// However we need to set bits 48-55 for simple pairing to work</span></div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; hcibuf[3] = 0xFF;</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; hcibuf[4] = 0xFF;</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; hcibuf[5] = 0xFF;</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; hcibuf[6] = 0xFF;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; hcibuf[7] = 0xFF;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; hcibuf[8] = 0x1F;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; hcibuf[9] = 0xFF; <span class="comment">// Enable bits 48-55 used for simple pairing</span></div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; hcibuf[10] = 0x00;</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 11);</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;}</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;</div><div class="line"><a name="l01237"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a45bde7ca453285d88029e9b0235c428d"> 1237</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a45bde7ca453285d88029e9b0235c428d">BTD::hci_write_simple_pairing_mode</a>(<span class="keywordtype">bool</span> enable) {</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; hcibuf[0] = 0x56; <span class="comment">// HCI OCF = 56</span></div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; hcibuf[1] = 0x03 &lt;&lt; 2; <span class="comment">// HCI OGF = 3</span></div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; hcibuf[2] = 1; <span class="comment">// parameter length = 1</span></div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; hcibuf[3] = enable ? 1 : 0;</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 4);</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;}</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;</div><div class="line"><a name="l01246"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a678f2c995553ce6a9f48f9b59f2f1555"> 1246</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a678f2c995553ce6a9f48f9b59f2f1555">BTD::hci_inquiry</a>() {</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <a class="code" href="_b_t_d_8h.html#a700e625eeda4ce1b35112721acbdfd19">hci_clear_flag</a>(<a class="code" href="_b_t_d_8h.html#a5ac3c55b54eff968d2327185a7e644ba">HCI_FLAG_DEVICE_FOUND</a>);</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; hcibuf[0] = 0x01;</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; hcibuf[1] = 0x01 &lt;&lt; 2; <span class="comment">// HCI OGF = 1</span></div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; hcibuf[2] = 0x05; <span class="comment">// Parameter Total Length = 5</span></div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; hcibuf[3] = 0x33; <span class="comment">// LAP: Genera/Unlimited Inquiry Access Code (GIAC = 0x9E8B33) - see https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm</span></div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; hcibuf[4] = 0x8B;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; hcibuf[5] = 0x9E;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; hcibuf[6] = 0x30; <span class="comment">// Inquiry time = 61.44 sec (maximum)</span></div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; hcibuf[7] = 0x0A; <span class="comment">// 10 number of responses</span></div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 8);</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;}</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;</div><div class="line"><a name="l01260"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a45ffbc7a40bbb763b0ece907c3dfc9ff"> 1260</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a45ffbc7a40bbb763b0ece907c3dfc9ff">BTD::hci_inquiry_cancel</a>() {</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; hcibuf[0] = 0x02;</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; hcibuf[1] = 0x01 &lt;&lt; 2; <span class="comment">// HCI OGF = 1</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; hcibuf[2] = 0x00; <span class="comment">// Parameter Total Length = 0</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 3);</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;}</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;</div><div class="line"><a name="l01268"></a><span class="lineno"><a class="line" href="class_b_t_d.html#ae7066ea743f8907708db945ebef3ad76"> 1268</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#ae7066ea743f8907708db945ebef3ad76">BTD::hci_connect</a>() {</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <a class="code" href="class_b_t_d.html#ae7066ea743f8907708db945ebef3ad76">hci_connect</a>(<a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>); <span class="comment">// Use last discovered device</span></div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;}</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;</div><div class="line"><a name="l01272"></a><span class="lineno"><a class="line" href="class_b_t_d.html#ac6c4a65645421fc4be3743d41ef3a924"> 1272</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#ae7066ea743f8907708db945ebef3ad76">BTD::hci_connect</a>(uint8_t *bdaddr) {</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <a class="code" href="_b_t_d_8h.html#a700e625eeda4ce1b35112721acbdfd19">hci_clear_flag</a>(<a class="code" href="_b_t_d_8h.html#a472a2cb241a6e13fa8f62d19b6c418bd">HCI_FLAG_CONNECT_COMPLETE</a> | <a class="code" href="_b_t_d_8h.html#ad14762241e9195fc9a3b0a69ef1ab7f3">HCI_FLAG_CONNECT_EVENT</a>);</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; hcibuf[0] = 0x05; <span class="comment">// HCI OCF = 5</span></div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; hcibuf[1] = 0x01 &lt;&lt; 2; <span class="comment">// HCI OGF = 1</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; hcibuf[2] = 0x0D; <span class="comment">// parameter Total Length = 13</span></div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; hcibuf[3] = bdaddr[0]; <span class="comment">// 6 octet bdaddr (LSB)</span></div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; hcibuf[4] = bdaddr[1];</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; hcibuf[5] = bdaddr[2];</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; hcibuf[6] = bdaddr[3];</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; hcibuf[7] = bdaddr[4];</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; hcibuf[8] = bdaddr[5];</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; hcibuf[9] = 0x18; <span class="comment">// DM1 or DH1 may be used</span></div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; hcibuf[10] = 0xCC; <span class="comment">// DM3, DH3, DM5, DH5 may be used</span></div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; hcibuf[11] = 0x01; <span class="comment">// Page repetition mode R1</span></div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; hcibuf[12] = 0x00; <span class="comment">// Reserved</span></div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; hcibuf[13] = 0x00; <span class="comment">// Clock offset</span></div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; hcibuf[14] = 0x00; <span class="comment">// Invalid clock offset</span></div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; hcibuf[15] = 0x00; <span class="comment">// Do not allow role switch</span></div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 16);</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;}</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;</div><div class="line"><a name="l01294"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a70047b0f624c3f0ef29f8b76b8a34938"> 1294</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a70047b0f624c3f0ef29f8b76b8a34938">BTD::hci_pin_code_request_reply</a>() {</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; hcibuf[0] = 0x0D; <span class="comment">// HCI OCF = 0D</span></div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; hcibuf[1] = 0x01 &lt;&lt; 2; <span class="comment">// HCI OGF = 1</span></div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; hcibuf[2] = 0x17; <span class="comment">// parameter length 23</span></div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; hcibuf[3] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[0]; <span class="comment">// 6 octet bdaddr</span></div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; hcibuf[4] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[1];</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; hcibuf[5] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[2];</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; hcibuf[6] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[3];</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; hcibuf[7] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[4];</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; hcibuf[8] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[5];</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">pairWithWii</a>) {</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; hcibuf[9] = 6; <span class="comment">// Pin length is the length of the Bluetooth address</span></div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; <span class="keywordflow">if</span>(pairWiiUsingSync) {</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nPairing with Wii controller via SYNC&quot;</span>), 0x80);</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 6; i++)</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; hcibuf[10 + i] = <a class="code" href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">my_bdaddr</a>[i]; <span class="comment">// The pin is the Bluetooth dongles Bluetooth address backwards</span></div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 6; i++)</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; hcibuf[10 + i] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[i]; <span class="comment">// The pin is the Wiimote&#39;s Bluetooth address backwards</span></div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; }</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 16; i &lt; 26; i++)</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; hcibuf[i] = 0x00; <span class="comment">// The rest should be 0</span></div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; hcibuf[9] = strlen(<a class="code" href="class_b_t_d.html#a215cb939c01ed3ff56db37841224546c">btdPin</a>); <span class="comment">// Length of pin</span></div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; uint8_t i;</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <span class="keywordflow">for</span>(i = 0; i &lt; strlen(<a class="code" href="class_b_t_d.html#a215cb939c01ed3ff56db37841224546c">btdPin</a>); i++) <span class="comment">// The maximum size of the pin is 16</span></div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; hcibuf[i + 10] = <a class="code" href="class_b_t_d.html#a215cb939c01ed3ff56db37841224546c">btdPin</a>[i];</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; <span class="keywordflow">for</span>(; i &lt; 16; i++)</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; hcibuf[i + 10] = 0x00; <span class="comment">// The rest should be 0</span></div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; }</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 26);</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;}</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;</div><div class="line"><a name="l01330"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a7114d2cb62aa413e5ecb25c45c76832b"> 1330</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a7114d2cb62aa413e5ecb25c45c76832b">BTD::hci_pin_code_negative_request_reply</a>() {</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; hcibuf[0] = 0x0E; <span class="comment">// HCI OCF = 0E</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; hcibuf[1] = 0x01 &lt;&lt; 2; <span class="comment">// HCI OGF = 1</span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; hcibuf[2] = 0x06; <span class="comment">// parameter length 6</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; hcibuf[3] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[0]; <span class="comment">// 6 octet bdaddr</span></div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; hcibuf[4] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[1];</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; hcibuf[5] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[2];</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; hcibuf[6] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[3];</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; hcibuf[7] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[4];</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; hcibuf[8] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[5];</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 9);</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;}</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;</div><div class="line"><a name="l01344"></a><span class="lineno"><a class="line" href="class_b_t_d.html#af4d28b9c1a3b9688a1871610caee2cfc"> 1344</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#af4d28b9c1a3b9688a1871610caee2cfc">BTD::hci_link_key_request_negative_reply</a>() {</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; hcibuf[0] = 0x0C; <span class="comment">// HCI OCF = 0C</span></div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; hcibuf[1] = 0x01 &lt;&lt; 2; <span class="comment">// HCI OGF = 1</span></div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; hcibuf[2] = 0x06; <span class="comment">// parameter length 6</span></div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; hcibuf[3] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[0]; <span class="comment">// 6 octet bdaddr</span></div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; hcibuf[4] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[1];</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; hcibuf[5] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[2];</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; hcibuf[6] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[3];</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; hcibuf[7] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[4];</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; hcibuf[8] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[5];</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 9);</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;}</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;</div><div class="line"><a name="l01358"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a399be31406914a79c14794e5d6a72444"> 1358</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a399be31406914a79c14794e5d6a72444">BTD::hci_io_capability_request_reply</a>() {</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; hcibuf[0] = 0x2B; <span class="comment">// HCI OCF = 2B</span></div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; hcibuf[1] = 0x01 &lt;&lt; 2; <span class="comment">// HCI OGF = 1</span></div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; hcibuf[2] = 0x09;</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; hcibuf[3] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[0]; <span class="comment">// 6 octet bdaddr</span></div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; hcibuf[4] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[1];</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; hcibuf[5] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[2];</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; hcibuf[6] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[3];</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; hcibuf[7] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[4];</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; hcibuf[8] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[5];</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; hcibuf[9] = 0x03; <span class="comment">// NoInputNoOutput</span></div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; hcibuf[10] = 0x00; <span class="comment">// OOB authentication data not present</span></div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; hcibuf[11] = 0x00; <span class="comment">// MITM Protection Not Required No Bonding. Numeric comparison with automatic accept allowed</span></div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 12);</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;}</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;</div><div class="line"><a name="l01375"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a019e145da18f2cbf5ab55538427c4f0a"> 1375</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a019e145da18f2cbf5ab55538427c4f0a">BTD::hci_user_confirmation_request_reply</a>() {</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; hcibuf[0] = 0x2C; <span class="comment">// HCI OCF = 2C</span></div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; hcibuf[1] = 0x01 &lt;&lt; 2; <span class="comment">// HCI OGF = 1</span></div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; hcibuf[2] = 0x06; <span class="comment">// parameter length 6</span></div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; hcibuf[3] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[0]; <span class="comment">// 6 octet bdaddr</span></div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; hcibuf[4] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[1];</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; hcibuf[5] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[2];</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; hcibuf[6] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[3];</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; hcibuf[7] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[4];</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; hcibuf[8] = <a class="code" href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">disc_bdaddr</a>[5];</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 9);</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;}</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;</div><div class="line"><a name="l01389"></a><span class="lineno"><a class="line" href="class_b_t_d.html#addd07c18c725a324a05792a83026d36d"> 1389</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#addd07c18c725a324a05792a83026d36d">BTD::hci_authentication_request</a>() {</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; hcibuf[0] = 0x11; <span class="comment">// HCI OCF = 11</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; hcibuf[1] = 0x01 &lt;&lt; 2; <span class="comment">// HCI OGF = 1</span></div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; hcibuf[2] = 0x02; <span class="comment">// parameter length = 2</span></div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; hcibuf[3] = (uint8_t)(<a class="code" href="class_b_t_d.html#aa3bb6c692701cb33dfad1ea4d68b6f98">hci_handle</a> &amp; 0xFF); <span class="comment">//connection handle - low byte</span></div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; hcibuf[4] = (uint8_t)((<a class="code" href="class_b_t_d.html#aa3bb6c692701cb33dfad1ea4d68b6f98">hci_handle</a> &gt;&gt; 8) &amp; 0x0F); <span class="comment">//connection handle - high byte</span></div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 5);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;}</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;</div><div class="line"><a name="l01399"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a1bea5dd793a2f47006b4a7642efc9e56"> 1399</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a1bea5dd793a2f47006b4a7642efc9e56">BTD::hci_disconnect</a>(uint16_t handle) { <span class="comment">// This is called by the different services</span></div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <a class="code" href="_b_t_d_8h.html#a700e625eeda4ce1b35112721acbdfd19">hci_clear_flag</a>(<a class="code" href="_b_t_d_8h.html#a094e0fa9b22cade79fe64a907aad5f2a">HCI_FLAG_DISCONNECT_COMPLETE</a>);</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; hcibuf[0] = 0x06; <span class="comment">// HCI OCF = 6</span></div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; hcibuf[1] = 0x01 &lt;&lt; 2; <span class="comment">// HCI OGF = 1</span></div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; hcibuf[2] = 0x03; <span class="comment">// parameter length = 3</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; hcibuf[3] = (uint8_t)(handle &amp; 0xFF); <span class="comment">//connection handle - low byte</span></div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; hcibuf[4] = (uint8_t)((handle &gt;&gt; 8) &amp; 0x0F); <span class="comment">//connection handle - high byte</span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; hcibuf[5] = 0x13; <span class="comment">// reason</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 6);</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;}</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;</div><div class="line"><a name="l01411"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a9a17405df60591b909ff1502fb8f3141"> 1411</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a9a17405df60591b909ff1502fb8f3141">BTD::hci_write_class_of_device</a>() { <span class="comment">// See http://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; hcibuf[0] = 0x24; <span class="comment">// HCI OCF = 24</span></div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; hcibuf[1] = 0x03 &lt;&lt; 2; <span class="comment">// HCI OGF = 3</span></div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; hcibuf[2] = 0x03; <span class="comment">// parameter length = 3</span></div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; hcibuf[3] = 0x04; <span class="comment">// Robot</span></div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; hcibuf[4] = 0x08; <span class="comment">// Toy</span></div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; hcibuf[5] = 0x00;</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <a class="code" href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">HCI_Command</a>(hcibuf, 6);</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;}</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;<span class="comment">/*******************************************************************</span></div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;<span class="comment"> * *</span></div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;<span class="comment"> * HCI ACL Data Packet *</span></div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;<span class="comment"> * *</span></div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;<span class="comment"> * buf[0] buf[1] buf[2] buf[3]</span></div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;<span class="comment"> * 0 4 8 11 12 16 24 31 MSB</span></div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;<span class="comment"> * .-+-+-+-+-+-+-+-|-+-+-+-|-+-|-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.</span></div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;<span class="comment"> * | HCI Handle |PB |BC | Data Total Length | HCI ACL Data Packet</span></div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;<span class="comment"> * .-+-+-+-+-+-+-+-|-+-+-+-|-+-|-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.</span></div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;<span class="comment"> * buf[4] buf[5] buf[6] buf[7]</span></div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;<span class="comment"> * 0 8 16 31 MSB</span></div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;<span class="comment"> * .-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.</span></div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;<span class="comment"> * | Length | Channel ID | Basic L2CAP header</span></div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;<span class="comment"> * .-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;<span class="comment"> * buf[8] buf[9] buf[10] buf[11]</span></div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;<span class="comment"> * 0 8 16 31 MSB</span></div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;<span class="comment"> * .-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.</span></div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;<span class="comment"> * | Code | Identifier | Length | Control frame (C-frame)</span></div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;<span class="comment"> * .-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-. (signaling packet format)</span></div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;<span class="comment">/************************************************************/</span></div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;<span class="comment">/* L2CAP Commands */</span></div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;<span class="comment">/************************************************************/</span></div><div class="line"><a name="l01447"></a><span class="lineno"><a class="line" href="class_b_t_d.html#aad7d8ef46e60b48ff4aaabefb0b290e7"> 1447</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#aad7d8ef46e60b48ff4aaabefb0b290e7">BTD::L2CAP_Command</a>(uint16_t handle, uint8_t* data, uint8_t nbytes, uint8_t channelLow, uint8_t channelHigh) {</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; uint8_t buf[8 + nbytes];</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; buf[0] = (uint8_t)(handle &amp; 0xff); <span class="comment">// HCI handle with PB,BC flag</span></div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; buf[1] = (uint8_t)(((handle &gt;&gt; 8) &amp; 0x0f) | 0x20);</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; buf[2] = (uint8_t)((4 + nbytes) &amp; 0xff); <span class="comment">// HCI ACL total data length</span></div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; buf[3] = (uint8_t)((4 + nbytes) &gt;&gt; 8);</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; buf[4] = (uint8_t)(nbytes &amp; 0xff); <span class="comment">// L2CAP header: Length</span></div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; buf[5] = (uint8_t)(nbytes &gt;&gt; 8);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; buf[6] = channelLow;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; buf[7] = channelHigh;</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <span class="keywordflow">for</span>(uint16_t i = 0; i &lt; nbytes; i++) <span class="comment">// L2CAP C-frame</span></div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; buf[8 + i] = data[i];</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; uint8_t rcode = <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#affbc018973a588995457d535b0ac7ee7">outTransfer</a>(<a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>, <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[ <a class="code" href="class_b_t_d.html#a0d82870f7eef8c27c33e6f5989d7a4dd">BTD_DATAOUT_PIPE</a> ].epAddr, (8 + nbytes), buf);</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; <span class="keywordflow">if</span>(rcode) {</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; delay(100); <span class="comment">// This small delay prevents it from overflowing if it fails</span></div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;<span class="preprocessor">#ifdef DEBUG_USB_HOST</span></div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot;\r\nError sending L2CAP message: 0x&quot;</span>), 0x80);</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; D_PrintHex&lt;uint8_t &gt; (rcode, 0x80);</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; - Channel ID: &quot;</span>), 0x80);</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; D_PrintHex&lt;uint8_t &gt; (channelHigh, 0x80);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <a class="code" href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a>(<a class="code" href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a>(<span class="stringliteral">&quot; &quot;</span>), 0x80);</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; D_PrintHex&lt;uint8_t &gt; (channelLow, 0x80);</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; }</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;}</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;</div><div class="line"><a name="l01475"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a55cf412a2053972a353b1ab964ca9d3e"> 1475</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a55cf412a2053972a353b1ab964ca9d3e">BTD::l2cap_connection_request</a>(uint16_t handle, uint8_t rxid, uint8_t* scid, uint16_t psm) {</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; l2capoutbuf[0] = <a class="code" href="_b_t_d_8h.html#ac4bae0c65fd00ed849cb226302d19c85">L2CAP_CMD_CONNECTION_REQUEST</a>; <span class="comment">// Code</span></div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; l2capoutbuf[1] = rxid; <span class="comment">// Identifier</span></div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; l2capoutbuf[2] = 0x04; <span class="comment">// Length</span></div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; l2capoutbuf[3] = 0x00;</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; l2capoutbuf[4] = (uint8_t)(psm &amp; 0xff); <span class="comment">// PSM</span></div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; l2capoutbuf[5] = (uint8_t)(psm &gt;&gt; 8);</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; l2capoutbuf[6] = scid[0]; <span class="comment">// Source CID</span></div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; l2capoutbuf[7] = scid[1];</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; <a class="code" href="class_b_t_d.html#aad7d8ef46e60b48ff4aaabefb0b290e7">L2CAP_Command</a>(handle, l2capoutbuf, 8);</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;}</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;</div><div class="line"><a name="l01488"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a7d34c62b1d561679dea5cd27356b38a7"> 1488</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a7d34c62b1d561679dea5cd27356b38a7">BTD::l2cap_connection_response</a>(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid, uint8_t result) {</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; l2capoutbuf[0] = <a class="code" href="_b_t_d_8h.html#aef7b306479de265d725dbe5816a8227b">L2CAP_CMD_CONNECTION_RESPONSE</a>; <span class="comment">// Code</span></div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; l2capoutbuf[1] = rxid; <span class="comment">// Identifier</span></div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; l2capoutbuf[2] = 0x08; <span class="comment">// Length</span></div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; l2capoutbuf[3] = 0x00;</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; l2capoutbuf[4] = dcid[0]; <span class="comment">// Destination CID</span></div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; l2capoutbuf[5] = dcid[1];</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; l2capoutbuf[6] = scid[0]; <span class="comment">// Source CID</span></div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; l2capoutbuf[7] = scid[1];</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; l2capoutbuf[8] = result; <span class="comment">// Result: Pending or Success</span></div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; l2capoutbuf[9] = 0x00;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; l2capoutbuf[10] = 0x00; <span class="comment">// No further information</span></div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; l2capoutbuf[11] = 0x00;</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <a class="code" href="class_b_t_d.html#aad7d8ef46e60b48ff4aaabefb0b290e7">L2CAP_Command</a>(handle, l2capoutbuf, 12);</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;}</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;</div><div class="line"><a name="l01505"></a><span class="lineno"><a class="line" href="class_b_t_d.html#ab646a59311344966f139bb3b78f30233"> 1505</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#ab646a59311344966f139bb3b78f30233">BTD::l2cap_config_request</a>(uint16_t handle, uint8_t rxid, uint8_t* dcid) {</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; l2capoutbuf[0] = <a class="code" href="_b_t_d_8h.html#a48bcd73461d736d0ef889e1fe6e36f69">L2CAP_CMD_CONFIG_REQUEST</a>; <span class="comment">// Code</span></div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; l2capoutbuf[1] = rxid; <span class="comment">// Identifier</span></div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; l2capoutbuf[2] = 0x08; <span class="comment">// Length</span></div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; l2capoutbuf[3] = 0x00;</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; l2capoutbuf[4] = dcid[0]; <span class="comment">// Destination CID</span></div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; l2capoutbuf[5] = dcid[1];</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; l2capoutbuf[6] = 0x00; <span class="comment">// Flags</span></div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; l2capoutbuf[7] = 0x00;</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; l2capoutbuf[8] = 0x01; <span class="comment">// Config Opt: type = MTU (Maximum Transmission Unit) - Hint</span></div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; l2capoutbuf[9] = 0x02; <span class="comment">// Config Opt: length</span></div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; l2capoutbuf[10] = 0xFF; <span class="comment">// MTU</span></div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; l2capoutbuf[11] = 0xFF;</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; <a class="code" href="class_b_t_d.html#aad7d8ef46e60b48ff4aaabefb0b290e7">L2CAP_Command</a>(handle, l2capoutbuf, 12);</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;}</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;</div><div class="line"><a name="l01522"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a792ac4529b65235698ecf3d37982c05e"> 1522</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a792ac4529b65235698ecf3d37982c05e">BTD::l2cap_config_response</a>(uint16_t handle, uint8_t rxid, uint8_t* scid) {</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; l2capoutbuf[0] = <a class="code" href="_b_t_d_8h.html#a8151b1fe5d940a5a7a34f43a8b8ce434">L2CAP_CMD_CONFIG_RESPONSE</a>; <span class="comment">// Code</span></div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; l2capoutbuf[1] = rxid; <span class="comment">// Identifier</span></div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; l2capoutbuf[2] = 0x0A; <span class="comment">// Length</span></div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; l2capoutbuf[3] = 0x00;</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; l2capoutbuf[4] = scid[0]; <span class="comment">// Source CID</span></div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; l2capoutbuf[5] = scid[1];</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; l2capoutbuf[6] = 0x00; <span class="comment">// Flag</span></div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; l2capoutbuf[7] = 0x00;</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; l2capoutbuf[8] = 0x00; <span class="comment">// Result</span></div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; l2capoutbuf[9] = 0x00;</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; l2capoutbuf[10] = 0x01; <span class="comment">// Config</span></div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; l2capoutbuf[11] = 0x02;</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; l2capoutbuf[12] = 0xA0;</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; l2capoutbuf[13] = 0x02;</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <a class="code" href="class_b_t_d.html#aad7d8ef46e60b48ff4aaabefb0b290e7">L2CAP_Command</a>(handle, l2capoutbuf, 14);</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;}</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;</div><div class="line"><a name="l01541"></a><span class="lineno"><a class="line" href="class_b_t_d.html#ac7053ef7ac690be3afbbdd985b163f10"> 1541</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#ac7053ef7ac690be3afbbdd985b163f10">BTD::l2cap_disconnection_request</a>(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid) {</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; l2capoutbuf[0] = <a class="code" href="_b_t_d_8h.html#a398676a2e9a2351a5a52afdddf4b660b">L2CAP_CMD_DISCONNECT_REQUEST</a>; <span class="comment">// Code</span></div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; l2capoutbuf[1] = rxid; <span class="comment">// Identifier</span></div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; l2capoutbuf[2] = 0x04; <span class="comment">// Length</span></div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; l2capoutbuf[3] = 0x00;</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; l2capoutbuf[4] = dcid[0];</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; l2capoutbuf[5] = dcid[1];</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; l2capoutbuf[6] = scid[0];</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; l2capoutbuf[7] = scid[1];</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; <a class="code" href="class_b_t_d.html#aad7d8ef46e60b48ff4aaabefb0b290e7">L2CAP_Command</a>(handle, l2capoutbuf, 8);</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;}</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;</div><div class="line"><a name="l01554"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a29d176d9194e5c92fbe54791fc245407"> 1554</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a29d176d9194e5c92fbe54791fc245407">BTD::l2cap_disconnection_response</a>(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid) {</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; l2capoutbuf[0] = <a class="code" href="_b_t_d_8h.html#a4c64a41200714e457b397496183dc0e4">L2CAP_CMD_DISCONNECT_RESPONSE</a>; <span class="comment">// Code</span></div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; l2capoutbuf[1] = rxid; <span class="comment">// Identifier</span></div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; l2capoutbuf[2] = 0x04; <span class="comment">// Length</span></div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; l2capoutbuf[3] = 0x00;</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; l2capoutbuf[4] = dcid[0];</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; l2capoutbuf[5] = dcid[1];</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; l2capoutbuf[6] = scid[0];</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; l2capoutbuf[7] = scid[1];</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <a class="code" href="class_b_t_d.html#aad7d8ef46e60b48ff4aaabefb0b290e7">L2CAP_Command</a>(handle, l2capoutbuf, 8);</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;}</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;</div><div class="line"><a name="l01567"></a><span class="lineno"><a class="line" href="class_b_t_d.html#a91f61915c503fe7b861c88f5b3e6733c"> 1567</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_b_t_d.html#a91f61915c503fe7b861c88f5b3e6733c">BTD::l2cap_information_response</a>(uint16_t handle, uint8_t rxid, uint8_t infoTypeLow, uint8_t infoTypeHigh) {</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; l2capoutbuf[0] = <a class="code" href="_b_t_d_8h.html#af32d4c53927d596a8727ff232310dec1">L2CAP_CMD_INFORMATION_RESPONSE</a>; <span class="comment">// Code</span></div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; l2capoutbuf[1] = rxid; <span class="comment">// Identifier</span></div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; l2capoutbuf[2] = 0x08; <span class="comment">// Length</span></div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; l2capoutbuf[3] = 0x00;</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; l2capoutbuf[4] = infoTypeLow;</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; l2capoutbuf[5] = infoTypeHigh;</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; l2capoutbuf[6] = 0x00; <span class="comment">// Result = success</span></div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; l2capoutbuf[7] = 0x00; <span class="comment">// Result = success</span></div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; l2capoutbuf[8] = 0x00;</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; l2capoutbuf[9] = 0x00;</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; l2capoutbuf[10] = 0x00;</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; l2capoutbuf[11] = 0x00;</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <a class="code" href="class_b_t_d.html#aad7d8ef46e60b48ff4aaabefb0b290e7">L2CAP_Command</a>(handle, l2capoutbuf, 12);</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;}</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;<span class="comment">/* PS3 Commands - only set Bluetooth address is implemented in this library */</span></div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;<span class="keywordtype">void</span> BTD::setBdaddr(uint8_t* bdaddr) {</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; <span class="comment">/* Set the internal Bluetooth address */</span></div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; uint8_t buf[8];</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; buf[0] = 0x01;</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; buf[1] = 0x00;</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 6; i++)</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; buf[i + 2] = bdaddr[5 - i]; <span class="comment">// Copy into buffer, has to be written reversed, so it is MSB first</span></div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; <span class="comment">// bmRequest = Host to device (0x00) | Class (0x20) | Interface (0x01) = 0x21, bRequest = Set Report (0x09), Report ID (0xF5), Report Type (Feature 0x03), interface (0x00), datalength, datalength, data</span></div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a636695a5c3d35cd6b9e31c54edfacd7c">ctrlReq</a>(<a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>, <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[<a class="code" href="class_b_t_d.html#a49f433ab824f259c3815e180c73bb0ad">BTD_CONTROL_PIPE</a>].epAddr, <a class="code" href="usbhid_8h.html#a5bd4ea095da29635414952894bd527f5">bmREQ_HID_OUT</a>, <a class="code" href="usbhid_8h.html#aee05d40a014750b24a7e9967f6f389f4">HID_REQUEST_SET_REPORT</a>, 0xF5, 0x03, 0x00, 8, 8, buf, NULL);</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;}</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;<span class="keywordtype">void</span> BTD::setMoveBdaddr(uint8_t* bdaddr) {</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; <span class="comment">/* Set the internal Bluetooth address */</span></div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; uint8_t buf[11];</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; buf[0] = 0x05;</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; buf[7] = 0x10;</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; buf[8] = 0x01;</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; buf[9] = 0x02;</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; buf[10] = 0x12;</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 6; i++)</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; buf[i + 1] = bdaddr[i];</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; <span class="comment">// bmRequest = Host to device (0x00) | Class (0x20) | Interface (0x01) = 0x21, bRequest = Set Report (0x09), Report ID (0x05), Report Type (Feature 0x03), interface (0x00), datalength, datalength, data</span></div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; <a class="code" href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">pUsb</a>-&gt;<a class="code" href="class_u_s_b.html#a636695a5c3d35cd6b9e31c54edfacd7c">ctrlReq</a>(<a class="code" href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">bAddress</a>, <a class="code" href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">epInfo</a>[<a class="code" href="class_b_t_d.html#a49f433ab824f259c3815e180c73bb0ad">BTD_CONTROL_PIPE</a>].epAddr, <a class="code" href="usbhid_8h.html#a5bd4ea095da29635414952894bd527f5">bmREQ_HID_OUT</a>, <a class="code" href="usbhid_8h.html#aee05d40a014750b24a7e9967f6f389f4">HID_REQUEST_SET_REPORT</a>, 0x05, 0x03, 0x00, 11, 11, buf, NULL);</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;}</div><div class="ttc" id="class_b_t_d_html_a0d82870f7eef8c27c33e6f5989d7a4dd"><div class="ttname"><a href="class_b_t_d.html#a0d82870f7eef8c27c33e6f5989d7a4dd">BTD::BTD_DATAOUT_PIPE</a></div><div class="ttdeci">static const uint8_t BTD_DATAOUT_PIPE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00558">BTD.h:558</a></div></div>
<div class="ttc" id="class_u_s_b_html_a618eedabc161d8315be45cae0c8b6f89"><div class="ttname"><a href="class_u_s_b.html#a618eedabc161d8315be45cae0c8b6f89">USB::getConfDescr</a></div><div class="ttdeci">uint8_t getConfDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t *dataptr)</div><div class="ttdef"><b>Definition:</b> <a href="_usb_8cpp_source.html#l00801">Usb.cpp:801</a></div></div>
<div class="ttc" id="struct_ep_info_html_a9238dd40c096baedf041c98b19386a14"><div class="ttname"><a href="struct_ep_info.html#a9238dd40c096baedf041c98b19386a14">EpInfo::bmRcvToggle</a></div><div class="ttdeci">uint8_t bmRcvToggle</div><div class="ttdef"><b>Definition:</b> <a href="address_8h_source.html#l00048">address.h:48</a></div></div>
<div class="ttc" id="class_b_t_d_html_a4dc8f94fe85028f3d54f13dde1e5b4ee"><div class="ttname"><a href="class_b_t_d.html#a4dc8f94fe85028f3d54f13dde1e5b4ee">BTD::incomingWii</a></div><div class="ttdeci">bool incomingWii</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00504">BTD.h:504</a></div></div>
<div class="ttc" id="class_b_t_d_html_a93e830be9fb0fe7d04bb39d10806ddc0"><div class="ttname"><a href="class_b_t_d.html#a93e830be9fb0fe7d04bb39d10806ddc0">BTD::useSimplePairing</a></div><div class="ttdeci">bool useSimplePairing</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00531">BTD.h:531</a></div></div>
<div class="ttc" id="class_address_pool_html"><div class="ttname"><a href="class_address_pool.html">AddressPool</a></div><div class="ttdef"><b>Definition:</b> <a href="address_8h_source.html#l00090">address.h:90</a></div></div>
<div class="ttc" id="class_b_t_d_html_ae7066ea743f8907708db945ebef3ad76"><div class="ttname"><a href="class_b_t_d.html#ae7066ea743f8907708db945ebef3ad76">BTD::hci_connect</a></div><div class="ttdeci">void hci_connect()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01268">BTD.cpp:1268</a></div></div>
<div class="ttc" id="class_b_t_d_html_a45bde7ca453285d88029e9b0235c428d"><div class="ttname"><a href="class_b_t_d.html#a45bde7ca453285d88029e9b0235c428d">BTD::hci_write_simple_pairing_mode</a></div><div class="ttdeci">void hci_write_simple_pairing_mode(bool enable)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01237">BTD.cpp:1237</a></div></div>
<div class="ttc" id="class_b_t_d_html_a893dd35932821cddda7e482a1904af66"><div class="ttname"><a href="class_b_t_d.html#a893dd35932821cddda7e482a1904af66">BTD::bNumEP</a></div><div class="ttdeci">uint8_t bNumEP</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00547">BTD.h:547</a></div></div>
<div class="ttc" id="struct_usb_device_html_a410d39fb7758157f57794335e990ed02"><div class="ttname"><a href="struct_usb_device.html#a410d39fb7758157f57794335e990ed02">UsbDevice::epinfo</a></div><div class="ttdeci">EpInfo * epinfo</div><div class="ttdef"><b>Definition:</b> <a href="address_8h_source.html#l00083">address.h:83</a></div></div>
<div class="ttc" id="class_b_t_d_html_a0359c0c158c864c27319810cbd1534f9"><div class="ttname"><a href="class_b_t_d.html#a0359c0c158c864c27319810cbd1534f9">BTD::btdName</a></div><div class="ttdeci">const char * btdName</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00477">BTD.h:477</a></div></div>
<div class="ttc" id="class_b_t_d_html_ae6f942eabd29257bc4896e5f263275b6"><div class="ttname"><a href="class_b_t_d.html#ae6f942eabd29257bc4896e5f263275b6">BTD::hci_reset</a></div><div class="ttdeci">void hci_reset()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01113">BTD.cpp:1113</a></div></div>
<div class="ttc" id="class_b_t_d_html_a7d34c62b1d561679dea5cd27356b38a7"><div class="ttname"><a href="class_b_t_d.html#a7d34c62b1d561679dea5cd27356b38a7">BTD::l2cap_connection_response</a></div><div class="ttdeci">void l2cap_connection_response(uint16_t handle, uint8_t rxid, uint8_t *dcid, uint8_t *scid, uint8_t result)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01488">BTD.cpp:1488</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_acc9b6954b4bb6c19a9d25242869d5ddf"><div class="ttname"><a href="_b_t_d_8h.html#acc9b6954b4bb6c19a9d25242869d5ddf">HCI_SCANNING_STATE</a></div><div class="ttdeci">#define HCI_SCANNING_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00055">BTD.h:55</a></div></div>
<div class="ttc" id="struct_usb_device_html_a86a815577ad7883437d3ca72b32b8e8a"><div class="ttname"><a href="struct_usb_device.html#a86a815577ad7883437d3ca72b32b8e8a">UsbDevice::lowspeed</a></div><div class="ttdeci">bool lowspeed</div><div class="ttdef"><b>Definition:</b> <a href="address_8h_source.html#l00086">address.h:86</a></div></div>
<div class="ttc" id="_usb_core_8h_html_af192c59cafe2192ad802b22e6dbc077d"><div class="ttname"><a href="_usb_core_8h.html#af192c59cafe2192ad802b22e6dbc077d">USB_ERROR_EPINFO_IS_NULL</a></div><div class="ttdeci">#define USB_ERROR_EPINFO_IS_NULL</div><div class="ttdef"><b>Definition:</b> <a href="_usb_core_8h_source.html#l00096">UsbCore.h:96</a></div></div>
<div class="ttc" id="class_b_t_d_html_a55cf412a2053972a353b1ab964ca9d3e"><div class="ttname"><a href="class_b_t_d.html#a55cf412a2053972a353b1ab964ca9d3e">BTD::l2cap_connection_request</a></div><div class="ttdeci">void l2cap_connection_request(uint16_t handle, uint8_t rxid, uint8_t *scid, uint16_t psm)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01475">BTD.cpp:1475</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a090ee10cc1a1c1c3bbb29a93c330d2d4"><div class="ttname"><a href="_b_t_d_8h.html#a090ee10cc1a1c1c3bbb29a93c330d2d4">EV_COMMAND_STATUS</a></div><div class="ttdeci">#define EV_COMMAND_STATUS</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00096">BTD.h:96</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a29c1744f72f3cd85865c8173eace5a36"><div class="ttname"><a href="_b_t_d_8h.html#a29c1744f72f3cd85865c8173eace5a36">EV_REMOTE_NAME_COMPLETE</a></div><div class="ttdeci">#define EV_REMOTE_NAME_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00090">BTD.h:90</a></div></div>
<div class="ttc" id="struct_ep_info_html_a3a5b1c017a034cd9e06e76729e727c46"><div class="ttname"><a href="struct_ep_info.html#a3a5b1c017a034cd9e06e76729e727c46">EpInfo::bmNakPower</a></div><div class="ttdeci">uint8_t bmNakPower</div><div class="ttdef"><b>Definition:</b> <a href="address_8h_source.html#l00049">address.h:49</a></div></div>
<div class="ttc" id="class_b_t_d_html_af5e5b085cec1da5c83c75e80e95b3590"><div class="ttname"><a href="class_b_t_d.html#af5e5b085cec1da5c83c75e80e95b3590">BTD::sdpConnectionClaimed</a></div><div class="ttdeci">bool sdpConnectionClaimed</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00472">BTD.h:472</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ad70df063f83bf7000558b1d73aa009e5"><div class="ttname"><a href="_b_t_d_8h.html#ad70df063f83bf7000558b1d73aa009e5">bmREQ_HCI_OUT</a></div><div class="ttdeci">#define bmREQ_HCI_OUT</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00040">BTD.h:40</a></div></div>
<div class="ttc" id="class_b_t_d_html_ac7053ef7ac690be3afbbdd985b163f10"><div class="ttname"><a href="class_b_t_d.html#ac7053ef7ac690be3afbbdd985b163f10">BTD::l2cap_disconnection_request</a></div><div class="ttdeci">void l2cap_disconnection_request(uint16_t handle, uint8_t rxid, uint8_t *dcid, uint8_t *scid)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01541">BTD.cpp:1541</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ada70bf6f98848d6b26dd8b756273b5ce"><div class="ttname"><a href="_b_t_d_8h.html#ada70bf6f98848d6b26dd8b756273b5ce">EV_SIMPLE_PAIRING_COMPLETE</a></div><div class="ttdeci">#define EV_SIMPLE_PAIRING_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00110">BTD.h:110</a></div></div>
<div class="ttc" id="struct_usb_device_html"><div class="ttname"><a href="struct_usb_device.html">UsbDevice</a></div><div class="ttdef"><b>Definition:</b> <a href="address_8h_source.html#l00082">address.h:82</a></div></div>
<div class="ttc" id="class_b_t_d_html_a9e5a34242007b64cd6a226cfd1901e74"><div class="ttname"><a href="class_b_t_d.html#a9e5a34242007b64cd6a226cfd1901e74">BTD::rfcommConnectionClaimed</a></div><div class="ttdeci">bool rfcommConnectionClaimed</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00474">BTD.h:474</a></div></div>
<div class="ttc" id="class_b_t_d_html_addaddee110af23a3195ad56f631e69ea"><div class="ttname"><a href="class_b_t_d.html#addaddee110af23a3195ad56f631e69ea">BTD::hci_version</a></div><div class="ttdeci">uint8_t hci_version</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00494">BTD.h:494</a></div></div>
<div class="ttc" id="class_b_t_d_html_a93a522edb2974185c7567b8f83860424"><div class="ttname"><a href="class_b_t_d.html#a93a522edb2974185c7567b8f83860424">BTD::waitingForConnection</a></div><div class="ttdeci">bool waitingForConnection</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00468">BTD.h:468</a></div></div>
<div class="ttc" id="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r_html_ae3c7088fe6f7b521132d8f2b95f958bc"><div class="ttname"><a href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html#ae3c7088fe6f7b521132d8f2b95f958bc">USB_DEVICE_DESCRIPTOR::idVendor</a></div><div class="ttdeci">uint16_t idVendor</div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00113">usb_ch9.h:113</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a4c6ca5696adeab36258b3b0c58d804e0"><div class="ttname"><a href="_b_t_d_8h.html#a4c6ca5696adeab36258b3b0c58d804e0">EV_INQUIRY_COMPLETE</a></div><div class="ttdeci">#define EV_INQUIRY_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00084">BTD.h:84</a></div></div>
<div class="ttc" id="class_b_t_d_html_a678f2c995553ce6a9f48f9b59f2f1555"><div class="ttname"><a href="class_b_t_d.html#a678f2c995553ce6a9f48f9b59f2f1555">BTD::hci_inquiry</a></div><div class="ttdeci">void hci_inquiry()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01246">BTD.cpp:1246</a></div></div>
<div class="ttc" id="class_b_t_d_html_a24166c9b308925eeb2f635fae43ca5ec"><div class="ttname"><a href="class_b_t_d.html#a24166c9b308925eeb2f635fae43ca5ec">BTD::BTD_EVENT_PIPE</a></div><div class="ttdeci">static const uint8_t BTD_EVENT_PIPE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00554">BTD.h:554</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_afc242b8a1b867f79c49ad78e3a47b37f"><div class="ttname"><a href="_b_t_d_8h.html#afc242b8a1b867f79c49ad78e3a47b37f">PS3MOVE_PID</a></div><div class="ttdeci">#define PS3MOVE_PID</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00028">BTD.h:28</a></div></div>
<div class="ttc" id="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r_html"><div class="ttname"><a href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html">USB_ENDPOINT_DESCRIPTOR</a></div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00148">usb_ch9.h:148</a></div></div>
<div class="ttc" id="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r_html_a95cd9669dee9cab375a7c5e62284a01b"><div class="ttname"><a href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html#a95cd9669dee9cab375a7c5e62284a01b">USB_ENDPOINT_DESCRIPTOR::bInterval</a></div><div class="ttdeci">uint8_t bInterval</div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00154">usb_ch9.h:154</a></div></div>
<div class="ttc" id="class_b_t_d_html_a0c8cc2a2dd2cda3e760b8b4c1a2d169c"><div class="ttname"><a href="class_b_t_d.html#a0c8cc2a2dd2cda3e760b8b4c1a2d169c">BTD::pairWithWii</a></div><div class="ttdeci">bool pairWithWii</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00506">BTD.h:506</a></div></div>
<div class="ttc" id="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r_html_a92d96e9016c96043dccf56872d13a628"><div class="ttname"><a href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html#a92d96e9016c96043dccf56872d13a628">USB_DEVICE_DESCRIPTOR::bMaxPacketSize0</a></div><div class="ttdeci">uint8_t bMaxPacketSize0</div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00112">usb_ch9.h:112</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ac7ef2953c95a2c5e15ffe86186c5f6e0"><div class="ttname"><a href="_b_t_d_8h.html#ac7ef2953c95a2c5e15ffe86186c5f6e0">HCI_WRITE_SIMPLE_PAIRING_STATE</a></div><div class="ttdeci">#define HCI_WRITE_SIMPLE_PAIRING_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00063">BTD.h:63</a></div></div>
<div class="ttc" id="class_b_t_d_html_aff59ab45d917406141ae0c9c79047f08"><div class="ttname"><a href="class_b_t_d.html#aff59ab45d917406141ae0c9c79047f08">BTD::hci_write_scan_disable</a></div><div class="ttdeci">void hci_write_scan_disable()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01135">BTD.cpp:1135</a></div></div>
<div class="ttc" id="message_8h_html_a22695bdc18ebde4a87dbe8633cb39593"><div class="ttname"><a href="message_8h.html#a22695bdc18ebde4a87dbe8633cb39593">NotifyFail</a></div><div class="ttdeci">#define NotifyFail(...)</div><div class="ttdef"><b>Definition:</b> <a href="message_8h_source.html#l00062">message.h:62</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ad142141f4e7685e31dce306128eaad5f"><div class="ttname"><a href="_b_t_d_8h.html#ad142141f4e7685e31dce306128eaad5f">BELKIN_F8T065BF_PID</a></div><div class="ttdeci">#define BELKIN_F8T065BF_PID</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00034">BTD.h:34</a></div></div>
<div class="ttc" id="class_b_t_d_html_a23928cd0e5711a2433aec763cfa55773"><div class="ttname"><a href="class_b_t_d.html#a23928cd0e5711a2433aec763cfa55773">BTD::EndpointXtract</a></div><div class="ttdeci">void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l00330">BTD.cpp:330</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a8c77c922bb61301760ebf5af5f1cc7f0"><div class="ttname"><a href="_b_t_d_8h.html#a8c77c922bb61301760ebf5af5f1cc7f0">EV_LINK_KEY_REQUEST</a></div><div class="ttdeci">#define EV_LINK_KEY_REQUEST</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00100">BTD.h:100</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a20fc1ebfc3da8e048f6afe53330e6b8f"><div class="ttname"><a href="_b_t_d_8h.html#a20fc1ebfc3da8e048f6afe53330e6b8f">HCI_DONE_STATE</a></div><div class="ttdeci">#define HCI_DONE_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00060">BTD.h:60</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_afeaafddda417fd2f053dbd476332ea19"><div class="ttname"><a href="_b_t_d_8h.html#afeaafddda417fd2f053dbd476332ea19">BTD_NUM_SERVICES</a></div><div class="ttdeci">#define BTD_NUM_SERVICES</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00211">BTD.h:211</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a6f8b4cf8546d9928a34c9c681dc5a6d5"><div class="ttname"><a href="_b_t_d_8h.html#a6f8b4cf8546d9928a34c9c681dc5a6d5">EV_DATA_BUFFER_OVERFLOW</a></div><div class="ttdeci">#define EV_DATA_BUFFER_OVERFLOW</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00102">BTD.h:102</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a4d3e6c132599ef5e6382ba18c46b3e40"><div class="ttname"><a href="_b_t_d_8h.html#a4d3e6c132599ef5e6382ba18c46b3e40">HCI_LOCAL_EXTENDED_FEATURES_STATE</a></div><div class="ttdeci">#define HCI_LOCAL_EXTENDED_FEATURES_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00062">BTD.h:62</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a31398eae2e433d1b7b39ea3d6d07cdd0"><div class="ttname"><a href="_b_t_d_8h.html#a31398eae2e433d1b7b39ea3d6d07cdd0">HCI_DISCONNECT_STATE</a></div><div class="ttdeci">#define HCI_DISCONNECT_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00061">BTD.h:61</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a472a2cb241a6e13fa8f62d19b6c418bd"><div class="ttname"><a href="_b_t_d_8h.html#a472a2cb241a6e13fa8f62d19b6c418bd">HCI_FLAG_CONNECT_COMPLETE</a></div><div class="ttdeci">#define HCI_FLAG_CONNECT_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00068">BTD.h:68</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a8391d08cb85031ab5a7d170db5874404"><div class="ttname"><a href="_b_t_d_8h.html#a8391d08cb85031ab5a7d170db5874404">EV_IO_CAPABILITY_REQUEST</a></div><div class="ttdeci">#define EV_IO_CAPABILITY_REQUEST</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00107">BTD.h:107</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a935633384e87daa14b60549134014ec4"><div class="ttname"><a href="_b_t_d_8h.html#a935633384e87daa14b60549134014ec4">EV_PIN_CODE_REQUEST</a></div><div class="ttdeci">#define EV_PIN_CODE_REQUEST</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00099">BTD.h:99</a></div></div>
<div class="ttc" id="class_u_s_b_html_a31e2c132ec32ffdde94dff72be87c378"><div class="ttname"><a href="class_u_s_b.html#a31e2c132ec32ffdde94dff72be87c378">USB::setConf</a></div><div class="ttdeci">uint8_t setConf(uint8_t addr, uint8_t ep, uint8_t conf_value)</div><div class="ttdef"><b>Definition:</b> <a href="_usb_8cpp_source.html#l00840">Usb.cpp:840</a></div></div>
<div class="ttc" id="class_b_t_d_html_a215cb939c01ed3ff56db37841224546c"><div class="ttname"><a href="class_b_t_d.html#a215cb939c01ed3ff56db37841224546c">BTD::btdPin</a></div><div class="ttdeci">const char * btdPin</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00479">BTD.h:479</a></div></div>
<div class="ttc" id="class_b_t_d_html_a3aea445b2349e99ef057db1a4ffdd9dc"><div class="ttname"><a href="class_b_t_d.html#a3aea445b2349e99ef057db1a4ffdd9dc">BTD::motionPlusInside</a></div><div class="ttdeci">bool motionPlusInside</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00508">BTD.h:508</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a68b8f78a0e0da80434afb1e6d40eacf4"><div class="ttname"><a href="_b_t_d_8h.html#a68b8f78a0e0da80434afb1e6d40eacf4">EV_AUTHENTICATION_COMPLETE</a></div><div class="ttdeci">#define EV_AUTHENTICATION_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00089">BTD.h:89</a></div></div>
<div class="ttc" id="class_b_t_d_html_a8767529bd203c549348a38ac9c6682b3"><div class="ttname"><a href="class_b_t_d.html#a8767529bd203c549348a38ac9c6682b3">BTD::hci_remote_name</a></div><div class="ttdeci">void hci_remote_name()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01188">BTD.cpp:1188</a></div></div>
<div class="ttc" id="usb__ch9_8h_html_ac80ae240a4a703b554aa8edee201495f"><div class="ttname"><a href="usb__ch9_8h.html#ac80ae240a4a703b554aa8edee201495f">USB_TRANSFER_TYPE_INTERRUPT</a></div><div class="ttdeci">#define USB_TRANSFER_TYPE_INTERRUPT</div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00093">usb_ch9.h:93</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ad14762241e9195fc9a3b0a69ef1ab7f3"><div class="ttname"><a href="_b_t_d_8h.html#ad14762241e9195fc9a3b0a69ef1ab7f3">HCI_FLAG_CONNECT_EVENT</a></div><div class="ttdeci">#define HCI_FLAG_CONNECT_EVENT</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00075">BTD.h:75</a></div></div>
<div class="ttc" id="usbhid_8h_html_a5bd4ea095da29635414952894bd527f5"><div class="ttname"><a href="usbhid_8h.html#a5bd4ea095da29635414952894bd527f5">bmREQ_HID_OUT</a></div><div class="ttdeci">#define bmREQ_HID_OUT</div><div class="ttdef"><b>Definition:</b> <a href="usbhid_8h_source.html#l00063">usbhid.h:63</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a094e0fa9b22cade79fe64a907aad5f2a"><div class="ttname"><a href="_b_t_d_8h.html#a094e0fa9b22cade79fe64a907aad5f2a">HCI_FLAG_DISCONNECT_COMPLETE</a></div><div class="ttdeci">#define HCI_FLAG_DISCONNECT_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00069">BTD.h:69</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a576e49b56b3cfb9d70b22bac8fe6796f"><div class="ttname"><a href="_b_t_d_8h.html#a576e49b56b3cfb9d70b22bac8fe6796f">BELKIN_F8T065BF_VID</a></div><div class="ttdeci">#define BELKIN_F8T065BF_VID</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00033">BTD.h:33</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a4bad48092981dffe97edb052f5ae08bd"><div class="ttname"><a href="_b_t_d_8h.html#a4bad48092981dffe97edb052f5ae08bd">HCI_REMOTE_NAME_STATE</a></div><div class="ttdeci">#define HCI_REMOTE_NAME_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00057">BTD.h:57</a></div></div>
<div class="ttc" id="_usb_core_8h_html_a96a7af8bc5ba78235312e1084a5ee229"><div class="ttname"><a href="_usb_core_8h.html#a96a7af8bc5ba78235312e1084a5ee229">USB_ERROR_FailGetDevDescr</a></div><div class="ttdeci">#define USB_ERROR_FailGetDevDescr</div><div class="ttdef"><b>Definition:</b> <a href="_usb_core_8h_source.html#l00102">UsbCore.h:102</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a14087b750ea2da7f0cef4daaa7683d01"><div class="ttname"><a href="_b_t_d_8h.html#a14087b750ea2da7f0cef4daaa7683d01">HCI_FLAG_CMD_COMPLETE</a></div><div class="ttdeci">#define HCI_FLAG_CMD_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00067">BTD.h:67</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a5bb06f989db583d290ba79642d37c514"><div class="ttname"><a href="_b_t_d_8h.html#a5bb06f989db583d290ba79642d37c514">PS3_VID</a></div><div class="ttdeci">#define PS3_VID</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00025">BTD.h:25</a></div></div>
<div class="ttc" id="message_8h_html_ae65e02f44cfdc490efd1b33f9882fbbd"><div class="ttname"><a href="message_8h.html#ae65e02f44cfdc490efd1b33f9882fbbd">NotifyFailGetDevDescr</a></div><div class="ttdeci">#define NotifyFailGetDevDescr(...)</div><div class="ttdef"><b>Definition:</b> <a href="message_8h_source.html#l00057">message.h:57</a></div></div>
<div class="ttc" id="class_b_t_d_html_a5f07597fe15a2b917cce405fe87f2981"><div class="ttname"><a href="class_b_t_d.html#a5f07597fe15a2b917cce405fe87f2981">BTD::BTD</a></div><div class="ttdeci">BTD(USB *p)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l00027">BTD.cpp:27</a></div></div>
<div class="ttc" id="class_b_t_d_html_aa0fd5483f227e29de23c20ee31c940aa"><div class="ttname"><a href="class_b_t_d.html#aa0fd5483f227e29de23c20ee31c940aa">BTD::remote_name</a></div><div class="ttdeci">char remote_name[30]</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00488">BTD.h:488</a></div></div>
<div class="ttc" id="max3421e_8h_html_aa128de549704094dadb93daa8875472b"><div class="ttname"><a href="max3421e_8h.html#aa128de549704094dadb93daa8875472b">hrJERR</a></div><div class="ttdeci">#define hrJERR</div><div class="ttdef"><b>Definition:</b> <a href="max3421e_8h_source.html#l00227">max3421e.h:227</a></div></div>
<div class="ttc" id="class_u_s_b_html_a6c3ba3f7e6dccb450267011ce783d7ea"><div class="ttname"><a href="class_u_s_b.html#a6c3ba3f7e6dccb450267011ce783d7ea">USB::setEpInfoEntry</a></div><div class="ttdeci">uint8_t setEpInfoEntry(uint8_t addr, uint8_t epcount, EpInfo *eprecord_ptr)</div><div class="ttdef"><b>Definition:</b> <a href="_usb_8cpp_source.html#l00064">Usb.cpp:64</a></div></div>
<div class="ttc" id="class_bluetooth_service_html_aa7c81841d4e898e9dc91533da6d7ab64"><div class="ttname"><a href="class_bluetooth_service.html#aa7c81841d4e898e9dc91533da6d7ab64">BluetoothService::Reset</a></div><div class="ttdeci">virtual void Reset()=0</div></div>
<div class="ttc" id="_b_t_d_8h_html_a2ad6543cdfe06cbf0924c287c08f36d7"><div class="ttname"><a href="_b_t_d_8h.html#a2ad6543cdfe06cbf0924c287c08f36d7">EV_MAX_SLOTS_CHANGE</a></div><div class="ttdeci">#define EV_MAX_SLOTS_CHANGE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00103">BTD.h:103</a></div></div>
<div class="ttc" id="class_b_t_d_html_a480510bd399ae74a97cd74c8474ef59c"><div class="ttname"><a href="class_b_t_d.html#a480510bd399ae74a97cd74c8474ef59c">BTD::BTD_DATAIN_PIPE</a></div><div class="ttdeci">static const uint8_t BTD_DATAIN_PIPE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00556">BTD.h:556</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a1b58792b76e0f216df8160bf055032c3"><div class="ttname"><a href="_b_t_d_8h.html#a1b58792b76e0f216df8160bf055032c3">EV_QOS_SETUP_COMPLETE</a></div><div class="ttdeci">#define EV_QOS_SETUP_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00094">BTD.h:94</a></div></div>
<div class="ttc" id="class_b_t_d_html_a7dd7faaec1d3d9a1d8159cc2a4190977"><div class="ttname"><a href="class_b_t_d.html#a7dd7faaec1d3d9a1d8159cc2a4190977">BTD::hci_write_scan_enable</a></div><div class="ttdeci">void hci_write_scan_enable()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01122">BTD.cpp:1122</a></div></div>
<div class="ttc" id="class_b_t_d_html_aa87c23bce56a20f2db47c6a40c8eda87"><div class="ttname"><a href="class_b_t_d.html#aa87c23bce56a20f2db47c6a40c8eda87">BTD::Release</a></div><div class="ttdeci">uint8_t Release()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l00379">BTD.cpp:379</a></div></div>
<div class="ttc" id="class_address_pool_html_a15fde13223dcb1da89305ad229763562"><div class="ttname"><a href="class_address_pool.html#a15fde13223dcb1da89305ad229763562">AddressPool::FreeAddress</a></div><div class="ttdeci">virtual void FreeAddress(uint8_t addr)=0</div></div>
<div class="ttc" id="class_b_t_d_html_a29d176d9194e5c92fbe54791fc245407"><div class="ttname"><a href="class_b_t_d.html#a29d176d9194e5c92fbe54791fc245407">BTD::l2cap_disconnection_response</a></div><div class="ttdeci">void l2cap_disconnection_response(uint16_t handle, uint8_t rxid, uint8_t *dcid, uint8_t *scid)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01554">BTD.cpp:1554</a></div></div>
<div class="ttc" id="class_u_s_b_html_a636695a5c3d35cd6b9e31c54edfacd7c"><div class="ttname"><a href="class_u_s_b.html#a636695a5c3d35cd6b9e31c54edfacd7c">USB::ctrlReq</a></div><div class="ttdeci">uint8_t ctrlReq(uint8_t addr, uint8_t ep, uint8_t bmReqType, uint8_t bRequest, uint8_t wValLo, uint8_t wValHi, uint16_t wInd, uint16_t total, uint16_t nbytes, uint8_t *dataptr, USBReadParser *p)</div><div class="ttdef"><b>Definition:</b> <a href="_usb_8cpp_source.html#l00126">Usb.cpp:126</a></div></div>
<div class="ttc" id="class_address_pool_html_aa92d7e8f0f515340ae2dc1679b627056"><div class="ttname"><a href="class_address_pool.html#aa92d7e8f0f515340ae2dc1679b627056">AddressPool::GetUsbDevicePtr</a></div><div class="ttdeci">virtual UsbDevice * GetUsbDevicePtr(uint8_t addr)=0</div></div>
<div class="ttc" id="_b_t_d_8h_html_a86fd72d2518d27c02c15af635b55fc8f"><div class="ttname"><a href="_b_t_d_8h.html#a86fd72d2518d27c02c15af635b55fc8f">HCI_BDADDR_STATE</a></div><div class="ttdeci">#define HCI_BDADDR_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00046">BTD.h:46</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a19b8f48838cdb9ca7db043878f1c11fa"><div class="ttname"><a href="_b_t_d_8h.html#a19b8f48838cdb9ca7db043878f1c11fa">HCI_CONNECT_DEVICE_STATE</a></div><div class="ttdeci">#define HCI_CONNECT_DEVICE_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00052">BTD.h:52</a></div></div>
<div class="ttc" id="message_8h_html_a27117e124c5d66d5512fe8d494fe6338"><div class="ttname"><a href="message_8h.html#a27117e124c5d66d5512fe8d494fe6338">Notify</a></div><div class="ttdeci">#define Notify(...)</div><div class="ttdef"><b>Definition:</b> <a href="message_8h_source.html#l00051">message.h:51</a></div></div>
<div class="ttc" id="class_b_t_d_html_af40b8d52df99192880c8a13443b6c6d8"><div class="ttname"><a href="class_b_t_d.html#af40b8d52df99192880c8a13443b6c6d8">BTD::connectToHIDDevice</a></div><div class="ttdeci">bool connectToHIDDevice</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00517">BTD.h:517</a></div></div>
<div class="ttc" id="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r_html_a8ee7f1bafac335258c6e742969387f57"><div class="ttname"><a href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html#a8ee7f1bafac335258c6e742969387f57">USB_ENDPOINT_DESCRIPTOR::bmAttributes</a></div><div class="ttdeci">uint8_t bmAttributes</div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00152">usb_ch9.h:152</a></div></div>
<div class="ttc" id="class_config_desc_parser_html"><div class="ttname"><a href="class_config_desc_parser.html">ConfigDescParser</a></div><div class="ttdef"><b>Definition:</b> <a href="confdescparser_8h_source.html#l00047">confdescparser.h:47</a></div></div>
<div class="ttc" id="class_u_s_b_html_a3aea534daed66b5606fa798df7ad3c47"><div class="ttname"><a href="class_u_s_b.html#a3aea534daed66b5606fa798df7ad3c47">USB::setAddr</a></div><div class="ttdeci">uint8_t setAddr(uint8_t oldaddr, uint8_t ep, uint8_t newaddr)</div><div class="ttdef"><b>Definition:</b> <a href="_usb_8cpp_source.html#l00831">Usb.cpp:831</a></div></div>
<div class="ttc" id="class_b_t_d_html_a58f78a9a28db81858dcc34a32a2ec82c"><div class="ttname"><a href="class_b_t_d.html#a58f78a9a28db81858dcc34a32a2ec82c">BTD::bAddress</a></div><div class="ttdeci">uint8_t bAddress</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00540">BTD.h:540</a></div></div>
<div class="ttc" id="message_8h_html_a38aabfb47a8bf743b0532e356c39faaf"><div class="ttname"><a href="message_8h.html#a38aabfb47a8bf743b0532e356c39faaf">NotifyFailGetConfDescr</a></div><div class="ttdeci">#define NotifyFailGetConfDescr(...)</div><div class="ttdef"><b>Definition:</b> <a href="message_8h_source.html#l00059">message.h:59</a></div></div>
<div class="ttc" id="struct_ep_info_html_a9f92be74c75c037b39e2cae1eb49b89b"><div class="ttname"><a href="struct_ep_info.html#a9f92be74c75c037b39e2cae1eb49b89b">EpInfo::epAddr</a></div><div class="ttdeci">uint8_t epAddr</div><div class="ttdef"><b>Definition:</b> <a href="address_8h_source.html#l00040">address.h:40</a></div></div>
<div class="ttc" id="class_b_t_d_html_a685d6371fb0c950ff6bad4510a8cc85a"><div class="ttname"><a href="class_b_t_d.html#a685d6371fb0c950ff6bad4510a8cc85a">BTD::incomingHIDDevice</a></div><div class="ttdeci">bool incomingHIDDevice</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00521">BTD.h:521</a></div></div>
<div class="ttc" id="message_8h_html_a0ce3a725ee65614d7f95cda10e4d2e91"><div class="ttname"><a href="message_8h.html#a0ce3a725ee65614d7f95cda10e4d2e91">NotifyFailUnknownDevice</a></div><div class="ttdeci">#define NotifyFailUnknownDevice(...)</div><div class="ttdef"><b>Definition:</b> <a href="message_8h_source.html#l00061">message.h:61</a></div></div>
<div class="ttc" id="class_b_t_d_html_a2aa418d820fb6b877ea079e0436a518e"><div class="ttname"><a href="class_b_t_d.html#a2aa418d820fb6b877ea079e0436a518e">BTD::pairWithHIDDevice</a></div><div class="ttdeci">bool pairWithHIDDevice</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00523">BTD.h:523</a></div></div>
<div class="ttc" id="class_b_t_d_html_a52d6c7895f6bb01729d01ce28a2f3079"><div class="ttname"><a href="class_b_t_d.html#a52d6c7895f6bb01729d01ce28a2f3079">BTD::qNextPollTime</a></div><div class="ttdeci">uint32_t qNextPollTime</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00549">BTD.h:549</a></div></div>
<div class="ttc" id="address_8h_html_a517dfa014946e2d087d197312234a1de"><div class="ttname"><a href="address_8h.html#a517dfa014946e2d087d197312234a1de">USB_NAK_MAX_POWER</a></div><div class="ttdeci">#define USB_NAK_MAX_POWER</div><div class="ttdef"><b>Definition:</b> <a href="address_8h_source.html#l00034">address.h:34</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ad4bce42e1ef20447655f8916f23d07a7"><div class="ttname"><a href="_b_t_d_8h.html#ad4bce42e1ef20447655f8916f23d07a7">EV_CONNECT_COMPLETE</a></div><div class="ttdeci">#define EV_CONNECT_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00086">BTD.h:86</a></div></div>
<div class="ttc" id="class_b_t_d_html_aa5976eead215a58553aee683d42405a0"><div class="ttname"><a href="class_b_t_d.html#aa5976eead215a58553aee683d42405a0">BTD::PrintEndpointDescriptor</a></div><div class="ttdeci">void PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR *ep_ptr)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l00360">BTD.cpp:360</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a1cf7e4d4426dcabed8976b65beee0d99"><div class="ttname"><a href="_b_t_d_8h.html#a1cf7e4d4426dcabed8976b65beee0d99">EV_DISCONNECT_COMPLETE</a></div><div class="ttdeci">#define EV_DISCONNECT_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00088">BTD.h:88</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_aabbf8a2ed694a2dc4d4e60fd389c44dd"><div class="ttname"><a href="_b_t_d_8h.html#aabbf8a2ed694a2dc4d4e60fd389c44dd">HCI_FLAG_READ_BDADDR</a></div><div class="ttdeci">#define HCI_FLAG_READ_BDADDR</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00072">BTD.h:72</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_aed4a7c4ebf618412176ef19023454fad"><div class="ttname"><a href="_b_t_d_8h.html#aed4a7c4ebf618412176ef19023454fad">IOGEAR_GBU521_PID</a></div><div class="ttdeci">#define IOGEAR_GBU521_PID</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00032">BTD.h:32</a></div></div>
<div class="ttc" id="class_b_t_d_html_ac7caac80fb6f5f0e794af3644887d88e"><div class="ttname"><a href="class_b_t_d.html#ac7caac80fb6f5f0e794af3644887d88e">BTD::connectToWii</a></div><div class="ttdeci">bool connectToWii</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00500">BTD.h:500</a></div></div>
<div class="ttc" id="class_b_t_d_html_a4f1808a49e9aca397ba829fac16dc5c3"><div class="ttname"><a href="class_b_t_d.html#a4f1808a49e9aca397ba829fac16dc5c3">BTD::ConfigureDevice</a></div><div class="ttdeci">uint8_t ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l00050">BTD.cpp:50</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a8f1d666addd0c2bba7602fbd7a692228"><div class="ttname"><a href="_b_t_d_8h.html#a8f1d666addd0c2bba7602fbd7a692228">HCI_LOCAL_VERSION_STATE</a></div><div class="ttdeci">#define HCI_LOCAL_VERSION_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00047">BTD.h:47</a></div></div>
<div class="ttc" id="class_bluetooth_service_html_a7bb2c8cccf3f2931629ead9becc51ec9"><div class="ttname"><a href="class_bluetooth_service.html#a7bb2c8cccf3f2931629ead9becc51ec9">BluetoothService::disconnect</a></div><div class="ttdeci">virtual void disconnect()=0</div></div>
<div class="ttc" id="class_b_t_d_html_a962a5714c225dcb633434f02e3657583"><div class="ttname"><a href="class_b_t_d.html#a962a5714c225dcb633434f02e3657583">BTD::wiiUProController</a></div><div class="ttdeci">bool wiiUProController</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00510">BTD.h:510</a></div></div>
<div class="ttc" id="class_b_t_d_html_aa3bb6c692701cb33dfad1ea4d68b6f98"><div class="ttname"><a href="class_b_t_d.html#aa3bb6c692701cb33dfad1ea4d68b6f98">BTD::hci_handle</a></div><div class="ttdeci">uint16_t hci_handle</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00484">BTD.h:484</a></div></div>
<div class="ttc" id="class_b_t_d_html_a48608619d8253972dd132edbb3001c5f"><div class="ttname"><a href="class_b_t_d.html#a48608619d8253972dd132edbb3001c5f">BTD::Init</a></div><div class="ttdeci">uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l00136">BTD.cpp:136</a></div></div>
<div class="ttc" id="message_8h_html_ab5d8177365493b21dbc092f6557bd508"><div class="ttname"><a href="message_8h.html#ab5d8177365493b21dbc092f6557bd508">Notifyc</a></div><div class="ttdeci">#define Notifyc(...)</div><div class="ttdef"><b>Definition:</b> <a href="message_8h_source.html#l00053">message.h:53</a></div></div>
<div class="ttc" id="struct_ep_info_html"><div class="ttname"><a href="struct_ep_info.html">EpInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="address_8h_source.html#l00039">address.h:39</a></div></div>
<div class="ttc" id="class_b_t_d_html_a1bea5dd793a2f47006b4a7642efc9e56"><div class="ttname"><a href="class_b_t_d.html#a1bea5dd793a2f47006b4a7642efc9e56">BTD::hci_disconnect</a></div><div class="ttdeci">void hci_disconnect(uint16_t handle)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01399">BTD.cpp:1399</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_af3a7567dba1a0a7ed4272324d7684440"><div class="ttname"><a href="_b_t_d_8h.html#af3a7567dba1a0a7ed4272324d7684440">HCI_RESET_STATE</a></div><div class="ttdeci">#define HCI_RESET_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00044">BTD.h:44</a></div></div>
<div class="ttc" id="class_u_s_b_html_affbc018973a588995457d535b0ac7ee7"><div class="ttname"><a href="class_u_s_b.html#affbc018973a588995457d535b0ac7ee7">USB::outTransfer</a></div><div class="ttdeci">uint8_t outTransfer(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t *data)</div><div class="ttdef"><b>Definition:</b> <a href="_usb_8cpp_source.html#l00303">Usb.cpp:303</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a308d00fea92145c8e1bcf54248f977d6"><div class="ttname"><a href="_b_t_d_8h.html#a308d00fea92145c8e1bcf54248f977d6">EV_IO_CAPABILITY_RESPONSE</a></div><div class="ttdeci">#define EV_IO_CAPABILITY_RESPONSE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00108">BTD.h:108</a></div></div>
<div class="ttc" id="max3421e_8h_html_ab44a7968d08016b58d98951059c37076"><div class="ttname"><a href="max3421e_8h.html#ab44a7968d08016b58d98951059c37076">hrNAK</a></div><div class="ttdeci">#define hrNAK</div><div class="ttdef"><b>Definition:</b> <a href="max3421e_8h_source.html#l00218">max3421e.h:218</a></div></div>
<div class="ttc" id="class_b_t_d_html_acb94a629477d85cebd16a9c5ecd4a8b3"><div class="ttname"><a href="class_b_t_d.html#acb94a629477d85cebd16a9c5ecd4a8b3">BTD::hci_read_bdaddr</a></div><div class="ttdeci">void hci_read_bdaddr()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01144">BTD.cpp:1144</a></div></div>
<div class="ttc" id="class_b_t_d_html_a45ffbc7a40bbb763b0ece907c3dfc9ff"><div class="ttname"><a href="class_b_t_d.html#a45ffbc7a40bbb763b0ece907c3dfc9ff">BTD::hci_inquiry_cancel</a></div><div class="ttdeci">void hci_inquiry_cancel()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01260">BTD.cpp:1260</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_af32d4c53927d596a8727ff232310dec1"><div class="ttname"><a href="_b_t_d_8h.html#af32d4c53927d596a8727ff232310dec1">L2CAP_CMD_INFORMATION_RESPONSE</a></div><div class="ttdeci">#define L2CAP_CMD_INFORMATION_RESPONSE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00183">BTD.h:183</a></div></div>
<div class="ttc" id="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r_html_af34105fa6bd0029d9c6b73d85f7853c6"><div class="ttname"><a href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html#af34105fa6bd0029d9c6b73d85f7853c6">USB_ENDPOINT_DESCRIPTOR::wMaxPacketSize</a></div><div class="ttdeci">uint16_t wMaxPacketSize</div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00153">usb_ch9.h:153</a></div></div>
<div class="ttc" id="usb__ch9_8h_html_ac1b1bcdd6bd4e8c5a65052e914e028d5"><div class="ttname"><a href="usb__ch9_8h.html#ac1b1bcdd6bd4e8c5a65052e914e028d5">bmUSB_TRANSFER_TYPE</a></div><div class="ttdeci">#define bmUSB_TRANSFER_TYPE</div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00094">usb_ch9.h:94</a></div></div>
<div class="ttc" id="class_bluetooth_service_html_a16df27af39d09963cf0d43910d92ff4c"><div class="ttname"><a href="class_bluetooth_service.html#a16df27af39d09963cf0d43910d92ff4c">BluetoothService::Run</a></div><div class="ttdeci">virtual void Run()=0</div></div>
<div class="ttc" id="class_b_t_d_html_a1f8e9171a310e50f2c4a3c19066efe5a"><div class="ttname"><a href="class_b_t_d.html#a1f8e9171a310e50f2c4a3c19066efe5a">BTD::my_bdaddr</a></div><div class="ttdeci">uint8_t my_bdaddr[6]</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00482">BTD.h:482</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_af6c5584636f8958689f5cd67290254e1"><div class="ttname"><a href="_b_t_d_8h.html#af6c5584636f8958689f5cd67290254e1">EV_INCOMING_CONNECT</a></div><div class="ttdeci">#define EV_INCOMING_CONNECT</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00087">BTD.h:87</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a4aa4f58744a713316d6547927ac0d406"><div class="ttname"><a href="_b_t_d_8h.html#a4aa4f58744a713316d6547927ac0d406">HCI_WRITE_NAME_STATE</a></div><div class="ttdeci">#define HCI_WRITE_NAME_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00048">BTD.h:48</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a8bfcf6e1a0a044aba26d728fb0c6a17a"><div class="ttname"><a href="_b_t_d_8h.html#a8bfcf6e1a0a044aba26d728fb0c6a17a">HCI_CONNECT_IN_STATE</a></div><div class="ttdeci">#define HCI_CONNECT_IN_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00056">BTD.h:56</a></div></div>
<div class="ttc" id="controller_enums_8h_html_a94f7389d205c78830a5441370d7870fdaef31cc6fe9479955961311ee18ac205f"><div class="ttname"><a href="controller_enums_8h.html#a94f7389d205c78830a5441370d7870fdaef31cc6fe9479955961311ee18ac205f">L</a></div><div class="ttdef"><b>Definition:</b> <a href="controller_enums_8h_source.html#l00102">controllerEnums.h:102</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a09fa39bcefd3255f8ef762034e45679e"><div class="ttname"><a href="_b_t_d_8h.html#a09fa39bcefd3255f8ef762034e45679e">HCI_INQUIRY_STATE</a></div><div class="ttdeci">#define HCI_INQUIRY_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00051">BTD.h:51</a></div></div>
<div class="ttc" id="class_b_t_d_html_a28bf7852317a3e3a79745dbd5cb4db14"><div class="ttname"><a href="class_b_t_d.html#a28bf7852317a3e3a79745dbd5cb4db14">BTD::hci_read_local_extended_features</a></div><div class="ttdeci">void hci_read_local_extended_features(uint8_t page_number)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01162">BTD.cpp:1162</a></div></div>
<div class="ttc" id="class_address_pool_html_a97df4ef42e50960ce2165f4cdb53e590"><div class="ttname"><a href="class_address_pool.html#a97df4ef42e50960ce2165f4cdb53e590">AddressPool::AllocAddress</a></div><div class="ttdeci">virtual uint8_t AllocAddress(uint8_t parent, bool is_hub=false, uint8_t port=0)=0</div></div>
<div class="ttc" id="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r_html_a23fbb539d72d10a6cb12efedf7d3457c"><div class="ttname"><a href="struct_u_s_b___e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html#a23fbb539d72d10a6cb12efedf7d3457c">USB_ENDPOINT_DESCRIPTOR::bEndpointAddress</a></div><div class="ttdeci">uint8_t bEndpointAddress</div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00151">usb_ch9.h:151</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ae0a16d1cc0142186a20379b5c68bd1e0"><div class="ttname"><a href="_b_t_d_8h.html#ae0a16d1cc0142186a20379b5c68bd1e0">HCI_CONNECTED_STATE</a></div><div class="ttdeci">#define HCI_CONNECTED_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00058">BTD.h:58</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a335df6d48c8cac828d62196eeaff360b"><div class="ttname"><a href="_b_t_d_8h.html#a335df6d48c8cac828d62196eeaff360b">EV_INQUIRY_RESULT</a></div><div class="ttdeci">#define EV_INQUIRY_RESULT</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00085">BTD.h:85</a></div></div>
<div class="ttc" id="struct_ep_info_html_ac85bff70ad0e5d71e50cb501f4d8caf3"><div class="ttname"><a href="struct_ep_info.html#ac85bff70ad0e5d71e50cb501f4d8caf3">EpInfo::bmSndToggle</a></div><div class="ttdeci">uint8_t bmSndToggle</div><div class="ttdef"><b>Definition:</b> <a href="address_8h_source.html#l00047">address.h:47</a></div></div>
<div class="ttc" id="_usb_core_8h_html_a44416ff64fc0e3691f98addac13d4595"><div class="ttname"><a href="_usb_core_8h.html#a44416ff64fc0e3691f98addac13d4595">USB_ERROR_CLASS_INSTANCE_ALREADY_IN_USE</a></div><div class="ttdeci">#define USB_ERROR_CLASS_INSTANCE_ALREADY_IN_USE</div><div class="ttdef"><b>Definition:</b> <a href="_usb_core_8h_source.html#l00098">UsbCore.h:98</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a48bcd73461d736d0ef889e1fe6e36f69"><div class="ttname"><a href="_b_t_d_8h.html#a48bcd73461d736d0ef889e1fe6e36f69">L2CAP_CMD_CONFIG_REQUEST</a></div><div class="ttdeci">#define L2CAP_CMD_CONFIG_REQUEST</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00178">BTD.h:178</a></div></div>
<div class="ttc" id="version__helper_8h_html_a73809107539df84eaf01f6a4dea4fbff"><div class="ttname"><a href="version__helper_8h.html#a73809107539df84eaf01f6a4dea4fbff">PSTR</a></div><div class="ttdeci">#define PSTR(str)</div><div class="ttdef"><b>Definition:</b> <a href="version__helper_8h_source.html#l00054">version_helper.h:54</a></div></div>
<div class="ttc" id="class_b_t_d_html_a76e201c5b561e3a6d0405894ba5c2e41"><div class="ttname"><a href="class_b_t_d.html#a76e201c5b561e3a6d0405894ba5c2e41">BTD::Poll</a></div><div class="ttdeci">uint8_t Poll()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l00385">BTD.cpp:385</a></div></div>
<div class="ttc" id="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r_html_afa7047f0318ab6df92a12291511cc1ce"><div class="ttname"><a href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html#afa7047f0318ab6df92a12291511cc1ce">USB_DEVICE_DESCRIPTOR::bDeviceClass</a></div><div class="ttdeci">uint8_t bDeviceClass</div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00109">usb_ch9.h:109</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a398676a2e9a2351a5a52afdddf4b660b"><div class="ttname"><a href="_b_t_d_8h.html#a398676a2e9a2351a5a52afdddf4b660b">L2CAP_CMD_DISCONNECT_REQUEST</a></div><div class="ttdeci">#define L2CAP_CMD_DISCONNECT_REQUEST</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00180">BTD.h:180</a></div></div>
<div class="ttc" id="class_b_t_d_html_a49f433ab824f259c3815e180c73bb0ad"><div class="ttname"><a href="class_b_t_d.html#a49f433ab824f259c3815e180c73bb0ad">BTD::BTD_CONTROL_PIPE</a></div><div class="ttdeci">static const uint8_t BTD_CONTROL_PIPE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00552">BTD.h:552</a></div></div>
<div class="ttc" id="class_b_t_d_html_ab6cf9a087ef319a8512922531446ea62"><div class="ttname"><a href="class_b_t_d.html#ab6cf9a087ef319a8512922531446ea62">BTD::hci_write_local_name</a></div><div class="ttdeci">void hci_write_local_name(const char *name)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01207">BTD.cpp:1207</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a32d591ef5742a99963130616ef146787"><div class="ttname"><a href="_b_t_d_8h.html#a32d591ef5742a99963130616ef146787">BULK_MAXPKTSIZE</a></div><div class="ttdeci">#define BULK_MAXPKTSIZE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00037">BTD.h:37</a></div></div>
<div class="ttc" id="class_b_t_d_html_a610183f9ddf04155ef2612d1839af7da"><div class="ttname"><a href="class_b_t_d.html#a610183f9ddf04155ef2612d1839af7da">BTD::disconnect</a></div><div class="ttdeci">void disconnect()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l00397">BTD.cpp:397</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ab3b1f616c1e885e697806f0167b73e8e"><div class="ttname"><a href="_b_t_d_8h.html#ab3b1f616c1e885e697806f0167b73e8e">HCI_FLAG_READ_VERSION</a></div><div class="ttdeci">#define HCI_FLAG_READ_VERSION</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00073">BTD.h:73</a></div></div>
<div class="ttc" id="class_b_t_d_html_ab23f95f12675d7b4505ca6807d379182"><div class="ttname"><a href="class_b_t_d.html#ab23f95f12675d7b4505ca6807d379182">BTD::disc_bdaddr</a></div><div class="ttdeci">uint8_t disc_bdaddr[6]</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00486">BTD.h:486</a></div></div>
<div class="ttc" id="class_b_t_d_html_a0f1c28a03bcbe62cc7c083f97ea27594"><div class="ttname"><a href="class_b_t_d.html#a0f1c28a03bcbe62cc7c083f97ea27594">BTD::l2capConnectionClaimed</a></div><div class="ttdeci">bool l2capConnectionClaimed</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00470">BTD.h:470</a></div></div>
<div class="ttc" id="address_8h_html_a660e8da9c1167a8450aef91c5c03761d"><div class="ttname"><a href="address_8h.html#a660e8da9c1167a8450aef91c5c03761d">USB_NAK_NOWAIT</a></div><div class="ttdeci">#define USB_NAK_NOWAIT</div><div class="ttdef"><b>Definition:</b> <a href="address_8h_source.html#l00036">address.h:36</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a0e8a8ce5838e265c1732795bf8822043"><div class="ttname"><a href="_b_t_d_8h.html#a0e8a8ce5838e265c1732795bf8822043">HCI_FLAG_INCOMING_REQUEST</a></div><div class="ttdeci">#define HCI_FLAG_INCOMING_REQUEST</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00071">BTD.h:71</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a0987119cfc40f3011a2cec69686034df"><div class="ttname"><a href="_b_t_d_8h.html#a0987119cfc40f3011a2cec69686034df">EV_NUM_COMPLETE_PKT</a></div><div class="ttdeci">#define EV_NUM_COMPLETE_PKT</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00098">BTD.h:98</a></div></div>
<div class="ttc" id="_usb_core_8h_html_afe2fedb4b0ccc89a688c0b4b59691ce0"><div class="ttname"><a href="_usb_core_8h.html#afe2fedb4b0ccc89a688c0b4b59691ce0">USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL</a></div><div class="ttdeci">#define USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL</div><div class="ttdef"><b>Definition:</b> <a href="_usb_core_8h_source.html#l00095">UsbCore.h:95</a></div></div>
<div class="ttc" id="class_b_t_d_html_a91d92fee94e5a4cbca472bb3fd883e3e"><div class="ttname"><a href="class_b_t_d.html#a91d92fee94e5a4cbca472bb3fd883e3e">BTD::epInfo</a></div><div class="ttdeci">EpInfo epInfo[BTD_MAX_ENDPOINTS]</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00542">BTD.h:542</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a6a28bb0589fbe2da75b238d7568d894d"><div class="ttname"><a href="_b_t_d_8h.html#a6a28bb0589fbe2da75b238d7568d894d">IOGEAR_GBU521_VID</a></div><div class="ttdeci">#define IOGEAR_GBU521_VID</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00031">BTD.h:31</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a0ae276efa5e73a4da658c714e70402c0"><div class="ttname"><a href="_b_t_d_8h.html#a0ae276efa5e73a4da658c714e70402c0">PS3_PID</a></div><div class="ttdeci">#define PS3_PID</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00026">BTD.h:26</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_aee41c4878894db24e7ad8cd6246595cd"><div class="ttname"><a href="_b_t_d_8h.html#aee41c4878894db24e7ad8cd6246595cd">BTD_MAX_ENDPOINTS</a></div><div class="ttdeci">#define BTD_MAX_ENDPOINTS</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00210">BTD.h:210</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a54903b410722a45f8246653cd4d00632"><div class="ttname"><a href="_b_t_d_8h.html#a54903b410722a45f8246653cd4d00632">PS3NAVIGATION_PID</a></div><div class="ttdeci">#define PS3NAVIGATION_PID</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00027">BTD.h:27</a></div></div>
<div class="ttc" id="_usb_core_8h_html_ae9e139d0fd29bb0b3e7afad2f76cd589"><div class="ttname"><a href="_usb_core_8h.html#ae9e139d0fd29bb0b3e7afad2f76cd589">USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED</a></div><div class="ttdeci">#define USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED</div><div class="ttdef"><b>Definition:</b> <a href="_usb_core_8h_source.html#l00090">UsbCore.h:90</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a4c64a41200714e457b397496183dc0e4"><div class="ttname"><a href="_b_t_d_8h.html#a4c64a41200714e457b397496183dc0e4">L2CAP_CMD_DISCONNECT_RESPONSE</a></div><div class="ttdeci">#define L2CAP_CMD_DISCONNECT_RESPONSE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00181">BTD.h:181</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a830b2a3bcb09c4802910e8b05531d317"><div class="ttname"><a href="_b_t_d_8h.html#a830b2a3bcb09c4802910e8b05531d317">EV_READ_REMOTE_VERSION_INFORMATION_COMPLETE</a></div><div class="ttdeci">#define EV_READ_REMOTE_VERSION_INFORMATION_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00093">BTD.h:93</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a81b71e0ba648260143529b04ae84e528"><div class="ttname"><a href="_b_t_d_8h.html#a81b71e0ba648260143529b04ae84e528">EV_COMMAND_COMPLETE</a></div><div class="ttdeci">#define EV_COMMAND_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00095">BTD.h:95</a></div></div>
<div class="ttc" id="class_b_t_d_html_a91f61915c503fe7b861c88f5b3e6733c"><div class="ttname"><a href="class_b_t_d.html#a91f61915c503fe7b861c88f5b3e6733c">BTD::l2cap_information_response</a></div><div class="ttdeci">void l2cap_information_response(uint16_t handle, uint8_t rxid, uint8_t infoTypeLow, uint8_t infoTypeHigh)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01567">BTD.cpp:1567</a></div></div>
<div class="ttc" id="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r_html_adaec05748124a104c3d49008433719ba"><div class="ttname"><a href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html#adaec05748124a104c3d49008433719ba">USB_DEVICE_DESCRIPTOR::idProduct</a></div><div class="ttdeci">uint16_t idProduct</div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00114">usb_ch9.h:114</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_aef7b306479de265d725dbe5816a8227b"><div class="ttname"><a href="_b_t_d_8h.html#aef7b306479de265d725dbe5816a8227b">L2CAP_CMD_CONNECTION_RESPONSE</a></div><div class="ttdeci">#define L2CAP_CMD_CONNECTION_RESPONSE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00177">BTD.h:177</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a8151b1fe5d940a5a7a34f43a8b8ce434"><div class="ttname"><a href="_b_t_d_8h.html#a8151b1fe5d940a5a7a34f43a8b8ce434">L2CAP_CMD_CONFIG_RESPONSE</a></div><div class="ttdeci">#define L2CAP_CMD_CONFIG_RESPONSE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00179">BTD.h:179</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ada46cc57bb9134769989b1b18bdac525"><div class="ttname"><a href="_b_t_d_8h.html#ada46cc57bb9134769989b1b18bdac525">hci_set_flag</a></div><div class="ttdeci">#define hci_set_flag(flag)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00080">BTD.h:80</a></div></div>
<div class="ttc" id="class_b_t_d_html_a9a17405df60591b909ff1502fb8f3141"><div class="ttname"><a href="class_b_t_d.html#a9a17405df60591b909ff1502fb8f3141">BTD::hci_write_class_of_device</a></div><div class="ttdeci">void hci_write_class_of_device()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01411">BTD.cpp:1411</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ab7fc323aab10c0fb1339e1c660fdd15d"><div class="ttname"><a href="_b_t_d_8h.html#ab7fc323aab10c0fb1339e1c660fdd15d">HCI_CONNECTED_DEVICE_STATE</a></div><div class="ttdeci">#define HCI_CONNECTED_DEVICE_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00053">BTD.h:53</a></div></div>
<div class="ttc" id="class_u_s_b_html_aead4d2040c641d55176854b236804088"><div class="ttname"><a href="class_u_s_b.html#aead4d2040c641d55176854b236804088">USB::inTransfer</a></div><div class="ttdeci">uint8_t inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t *data, uint8_t bInterval=0)</div><div class="ttdef"><b>Definition:</b> <a href="_usb_8cpp_source.html#l00209">Usb.cpp:209</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ac2b910cd6cc87c7bac09617815a1ee9a"><div class="ttname"><a href="_b_t_d_8h.html#ac2b910cd6cc87c7bac09617815a1ee9a">HCI_INIT_STATE</a></div><div class="ttdeci">#define HCI_INIT_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00043">BTD.h:43</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a1da7c6e93b93b4d2e5727d742f6efe9d"><div class="ttname"><a href="_b_t_d_8h.html#a1da7c6e93b93b4d2e5727d742f6efe9d">HCI_FLAG_LOCAL_EXTENDED_FEATURES</a></div><div class="ttdeci">#define HCI_FLAG_LOCAL_EXTENDED_FEATURES</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00076">BTD.h:76</a></div></div>
<div class="ttc" id="class_b_t_d_html_a7114d2cb62aa413e5ecb25c45c76832b"><div class="ttname"><a href="class_b_t_d.html#a7114d2cb62aa413e5ecb25c45c76832b">BTD::hci_pin_code_negative_request_reply</a></div><div class="ttdeci">void hci_pin_code_negative_request_reply()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01330">BTD.cpp:1330</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a3e107e9d07793ca5cfaeea8b2181d4a4"><div class="ttname"><a href="_b_t_d_8h.html#a3e107e9d07793ca5cfaeea8b2181d4a4">EV_CHANGE_CONNECTION_LINK</a></div><div class="ttdeci">#define EV_CHANGE_CONNECTION_LINK</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00092">BTD.h:92</a></div></div>
<div class="ttc" id="class_bluetooth_service_html_a9740e997198485c9629a146a9c981043"><div class="ttname"><a href="class_bluetooth_service.html#a9740e997198485c9629a146a9c981043">BluetoothService::ACLData</a></div><div class="ttdeci">virtual void ACLData(uint8_t *ACLData)=0</div></div>
<div class="ttc" id="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r_html_ab1b8db3992e0dceb2ba86f3bab1e5bca"><div class="ttname"><a href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html#ab1b8db3992e0dceb2ba86f3bab1e5bca">USB_DEVICE_DESCRIPTOR::bNumConfigurations</a></div><div class="ttdeci">uint8_t bNumConfigurations</div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00119">usb_ch9.h:119</a></div></div>
<div class="ttc" id="_usb_core_8h_html_a15370eb665cdded5514e69ca58d9f39d"><div class="ttname"><a href="_usb_core_8h.html#a15370eb665cdded5514e69ca58d9f39d">USB_ERROR_OUT_OF_ADDRESS_SPACE_IN_POOL</a></div><div class="ttdeci">#define USB_ERROR_OUT_OF_ADDRESS_SPACE_IN_POOL</div><div class="ttdef"><b>Definition:</b> <a href="_usb_core_8h_source.html#l00093">UsbCore.h:93</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a57c7f989e9b561a6301a0d6f2268bfd5"><div class="ttname"><a href="_b_t_d_8h.html#a57c7f989e9b561a6301a0d6f2268bfd5">hci_check_flag</a></div><div class="ttdeci">#define hci_check_flag(flag)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00079">BTD.h:79</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ac61db50de3007a22e19e660bd7e68e69"><div class="ttname"><a href="_b_t_d_8h.html#ac61db50de3007a22e19e660bd7e68e69">EV_ROLE_CHANGED</a></div><div class="ttdeci">#define EV_ROLE_CHANGED</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00097">BTD.h:97</a></div></div>
<div class="ttc" id="struct_ep_info_html_aa2ca775b63736df4008e88da7dd4dddb"><div class="ttname"><a href="struct_ep_info.html#aa2ca775b63736df4008e88da7dd4dddb">EpInfo::maxPktSize</a></div><div class="ttdeci">uint8_t maxPktSize</div><div class="ttdef"><b>Definition:</b> <a href="address_8h_source.html#l00041">address.h:41</a></div></div>
<div class="ttc" id="class_u_s_b_html_a66ab8f5eda239e761d5a48741ea1f9d4"><div class="ttname"><a href="class_u_s_b.html#a66ab8f5eda239e761d5a48741ea1f9d4">USB::GetAddressPool</a></div><div class="ttdeci">AddressPool &amp; GetAddressPool()</div><div class="ttdef"><b>Definition:</b> <a href="_usb_core_8h_source.html#l00226">UsbCore.h:226</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a2c060a7be42c5c4c57990cacec0b45f5"><div class="ttname"><a href="_b_t_d_8h.html#a2c060a7be42c5c4c57990cacec0b45f5">HCI_CHECK_DEVICE_SERVICE</a></div><div class="ttdeci">#define HCI_CHECK_DEVICE_SERVICE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00049">BTD.h:49</a></div></div>
<div class="ttc" id="class_u_s_b_html"><div class="ttname"><a href="class_u_s_b.html">USB</a></div><div class="ttdef"><b>Definition:</b> <a href="_usb_core_8h_source.html#l00210">UsbCore.h:210</a></div></div>
<div class="ttc" id="usb__ch9_8h_html_a54c90d3ca8c3f7911d9d8cb17f59d939"><div class="ttname"><a href="usb__ch9_8h.html#a54c90d3ca8c3f7911d9d8cb17f59d939">USB_TRANSFER_TYPE_BULK</a></div><div class="ttdeci">#define USB_TRANSFER_TYPE_BULK</div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00092">usb_ch9.h:92</a></div></div>
<div class="ttc" id="class_b_t_d_html_a10c34527ae90e95791ac48ac7d1154a2"><div class="ttname"><a href="class_b_t_d.html#a10c34527ae90e95791ac48ac7d1154a2">BTD::bConfNum</a></div><div class="ttdeci">uint8_t bConfNum</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00545">BTD.h:545</a></div></div>
<div class="ttc" id="class_b_t_d_html_af4d28b9c1a3b9688a1871610caee2cfc"><div class="ttname"><a href="class_b_t_d.html#af4d28b9c1a3b9688a1871610caee2cfc">BTD::hci_link_key_request_negative_reply</a></div><div class="ttdeci">void hci_link_key_request_negative_reply()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01344">BTD.cpp:1344</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_acd5f65703cc34b112a1f656d9a49551b"><div class="ttname"><a href="_b_t_d_8h.html#acd5f65703cc34b112a1f656d9a49551b">EV_LOOPBACK_COMMAND</a></div><div class="ttdeci">#define EV_LOOPBACK_COMMAND</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00104">BTD.h:104</a></div></div>
<div class="ttc" id="class_b_t_d_html_aad7d8ef46e60b48ff4aaabefb0b290e7"><div class="ttname"><a href="class_b_t_d.html#aad7d8ef46e60b48ff4aaabefb0b290e7">BTD::L2CAP_Command</a></div><div class="ttdeci">void L2CAP_Command(uint16_t handle, uint8_t *data, uint8_t nbytes, uint8_t channelLow=0x01, uint8_t channelHigh=0x00)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01447">BTD.cpp:1447</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a8c662496af1164370e5fdf7149ecd842"><div class="ttname"><a href="_b_t_d_8h.html#a8c662496af1164370e5fdf7149ecd842">EV_LINK_KEY_NOTIFICATION</a></div><div class="ttdeci">#define EV_LINK_KEY_NOTIFICATION</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00101">BTD.h:101</a></div></div>
<div class="ttc" id="class_b_t_d_html_a792ac4529b65235698ecf3d37982c05e"><div class="ttname"><a href="class_b_t_d.html#a792ac4529b65235698ecf3d37982c05e">BTD::l2cap_config_response</a></div><div class="ttdeci">void l2cap_config_response(uint16_t handle, uint8_t rxid, uint8_t *scid)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01522">BTD.cpp:1522</a></div></div>
<div class="ttc" id="class_b_t_d_html_ab646a59311344966f139bb3b78f30233"><div class="ttname"><a href="class_b_t_d.html#ab646a59311344966f139bb3b78f30233">BTD::l2cap_config_request</a></div><div class="ttdeci">void l2cap_config_request(uint16_t handle, uint8_t rxid, uint8_t *dcid)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01505">BTD.cpp:1505</a></div></div>
<div class="ttc" id="class_b_t_d_html_a70047b0f624c3f0ef29f8b76b8a34938"><div class="ttname"><a href="class_b_t_d.html#a70047b0f624c3f0ef29f8b76b8a34938">BTD::hci_pin_code_request_reply</a></div><div class="ttdeci">void hci_pin_code_request_reply()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01294">BTD.cpp:1294</a></div></div>
<div class="ttc" id="usbhid_8h_html_aee05d40a014750b24a7e9967f6f389f4"><div class="ttname"><a href="usbhid_8h.html#aee05d40a014750b24a7e9967f6f389f4">HID_REQUEST_SET_REPORT</a></div><div class="ttdeci">#define HID_REQUEST_SET_REPORT</div><div class="ttdef"><b>Definition:</b> <a href="usbhid_8h_source.html#l00072">usbhid.h:72</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ac4bae0c65fd00ed849cb226302d19c85"><div class="ttname"><a href="_b_t_d_8h.html#ac4bae0c65fd00ed849cb226302d19c85">L2CAP_CMD_CONNECTION_REQUEST</a></div><div class="ttdeci">#define L2CAP_CMD_CONNECTION_REQUEST</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00176">BTD.h:176</a></div></div>
<div class="ttc" id="_b_t_d_8h_html"><div class="ttname"><a href="_b_t_d_8h.html">BTD.h</a></div></div>
<div class="ttc" id="class_u_s_b_html_a3f66bf622590413ef2e1864f93a3e0d2"><div class="ttname"><a href="class_u_s_b.html#a3f66bf622590413ef2e1864f93a3e0d2">USB::RegisterDeviceClass</a></div><div class="ttdeci">uint8_t RegisterDeviceClass(USBDeviceConfig *pdev)</div><div class="ttdef"><b>Definition:</b> <a href="_usb_core_8h_source.html#l00230">UsbCore.h:230</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_aa0bf5ac66c412d3415dbb753630d0e58"><div class="ttname"><a href="_b_t_d_8h.html#aa0bf5ac66c412d3415dbb753630d0e58">EV_ENCRYPTION_CHANGE</a></div><div class="ttdeci">#define EV_ENCRYPTION_CHANGE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00091">BTD.h:91</a></div></div>
<div class="ttc" id="message_8h_html_a03e4088aafca36fd7a4be69e3a22b601"><div class="ttname"><a href="message_8h.html#a03e4088aafca36fd7a4be69e3a22b601">NotifyFailSetConfDescr</a></div><div class="ttdeci">#define NotifyFailSetConfDescr(...)</div><div class="ttdef"><b>Definition:</b> <a href="message_8h_source.html#l00060">message.h:60</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a700e625eeda4ce1b35112721acbdfd19"><div class="ttname"><a href="_b_t_d_8h.html#a700e625eeda4ce1b35112721acbdfd19">hci_clear_flag</a></div><div class="ttdeci">#define hci_clear_flag(flag)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00081">BTD.h:81</a></div></div>
<div class="ttc" id="class_b_t_d_html_a4bcd1d622a6455ee3d0cccc4408700a1"><div class="ttname"><a href="class_b_t_d.html#a4bcd1d622a6455ee3d0cccc4408700a1">BTD::pUsb</a></div><div class="ttdeci">USB * pUsb</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00538">BTD.h:538</a></div></div>
<div class="ttc" id="message_8h_html_aa41f0e761e43cb026f1c7f04f75fa24e"><div class="ttname"><a href="message_8h.html#aa41f0e761e43cb026f1c7f04f75fa24e">NotifyStr</a></div><div class="ttdeci">#define NotifyStr(...)</div><div class="ttdef"><b>Definition:</b> <a href="message_8h_source.html#l00052">message.h:52</a></div></div>
<div class="ttc" id="class_b_t_d_html_addd07c18c725a324a05792a83026d36d"><div class="ttname"><a href="class_b_t_d.html#addd07c18c725a324a05792a83026d36d">BTD::hci_authentication_request</a></div><div class="ttdeci">void hci_authentication_request()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01389">BTD.cpp:1389</a></div></div>
<div class="ttc" id="class_b_t_d_html_ae2ba215b6942f4131e4c5fdef2771e22"><div class="ttname"><a href="class_b_t_d.html#ae2ba215b6942f4131e4c5fdef2771e22">BTD::hci_read_local_version_information</a></div><div class="ttdeci">void hci_read_local_version_information()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01153">BTD.cpp:1153</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a400af4b61f6e94ab821fa368d8bf2b07"><div class="ttname"><a href="_b_t_d_8h.html#a400af4b61f6e94ab821fa368d8bf2b07">HCI_FLAG_REMOTE_NAME_COMPLETE</a></div><div class="ttdeci">#define HCI_FLAG_REMOTE_NAME_COMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00070">BTD.h:70</a></div></div>
<div class="ttc" id="class_b_t_d_html_a1cb07a155c69bb1fcf45ae030b8947ec"><div class="ttname"><a href="class_b_t_d.html#a1cb07a155c69bb1fcf45ae030b8947ec">BTD::hci_accept_connection</a></div><div class="ttdeci">void hci_accept_connection()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01172">BTD.cpp:1172</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ad8481acc0b144d97017f8a06d63ff47c"><div class="ttname"><a href="_b_t_d_8h.html#ad8481acc0b144d97017f8a06d63ff47c">EV_PAGE_SCAN_REP_MODE</a></div><div class="ttdeci">#define EV_PAGE_SCAN_REP_MODE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00105">BTD.h:105</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ae54f4bca639446200ddccd6b994b31e2"><div class="ttname"><a href="_b_t_d_8h.html#ae54f4bca639446200ddccd6b994b31e2">EV_USER_CONFIRMATION_REQUEST</a></div><div class="ttdeci">#define EV_USER_CONFIRMATION_REQUEST</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00109">BTD.h:109</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_a5ac3c55b54eff968d2327185a7e644ba"><div class="ttname"><a href="_b_t_d_8h.html#a5ac3c55b54eff968d2327185a7e644ba">HCI_FLAG_DEVICE_FOUND</a></div><div class="ttdeci">#define HCI_FLAG_DEVICE_FOUND</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00074">BTD.h:74</a></div></div>
<div class="ttc" id="class_b_t_d_html_adcc9736be085564f567c0e6643c5d4f3"><div class="ttname"><a href="class_b_t_d.html#adcc9736be085564f567c0e6643c5d4f3">BTD::hci_set_event_mask</a></div><div class="ttdeci">void hci_set_event_mask()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01219">BTD.cpp:1219</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_aa4e852587db5ad51c6c5cfb8e9d4f002"><div class="ttname"><a href="_b_t_d_8h.html#aa4e852587db5ad51c6c5cfb8e9d4f002">HCI_CLASS_STATE</a></div><div class="ttdeci">#define HCI_CLASS_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00045">BTD.h:45</a></div></div>
<div class="ttc" id="class_u_s_b_html_a193e63c149fad46adabd77ceb09b2b24"><div class="ttname"><a href="class_u_s_b.html#a193e63c149fad46adabd77ceb09b2b24">USB::getDevDescr</a></div><div class="ttdeci">uint8_t getDevDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t *dataptr)</div><div class="ttdoc">defined(USB_METHODS_INLINE) </div><div class="ttdef"><b>Definition:</b> <a href="_usb_8cpp_source.html#l00796">Usb.cpp:796</a></div></div>
<div class="ttc" id="message_8h_html_a69619d86b1636f141c830ca82c7f45e7"><div class="ttname"><a href="message_8h.html#a69619d86b1636f141c830ca82c7f45e7">NotifyFailSetDevTblEntry</a></div><div class="ttdeci">#define NotifyFailSetDevTblEntry(...)</div><div class="ttdef"><b>Definition:</b> <a href="message_8h_source.html#l00058">message.h:58</a></div></div>
<div class="ttc" id="class_b_t_d_html_a399be31406914a79c14794e5d6a72444"><div class="ttname"><a href="class_b_t_d.html#a399be31406914a79c14794e5d6a72444">BTD::hci_io_capability_request_reply</a></div><div class="ttdeci">void hci_io_capability_request_reply()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01358">BTD.cpp:1358</a></div></div>
<div class="ttc" id="_b_t_d_8h_html_ab514aab1934c8dbc80ba86324b83647c"><div class="ttname"><a href="_b_t_d_8h.html#ab514aab1934c8dbc80ba86324b83647c">HCI_SET_EVENT_MASK_STATE</a></div><div class="ttdeci">#define HCI_SET_EVENT_MASK_STATE</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8h_source.html#l00064">BTD.h:64</a></div></div>
<div class="ttc" id="_usb_core_8h_html_a7cad2f024e98c4b2b1b52df76b10c01e"><div class="ttname"><a href="_usb_core_8h.html#a7cad2f024e98c4b2b1b52df76b10c01e">USB_ERROR_CONFIG_REQUIRES_ADDITIONAL_RESET</a></div><div class="ttdeci">#define USB_ERROR_CONFIG_REQUIRES_ADDITIONAL_RESET</div><div class="ttdef"><b>Definition:</b> <a href="_usb_core_8h_source.html#l00101">UsbCore.h:101</a></div></div>
<div class="ttc" id="class_b_t_d_html_a019e145da18f2cbf5ab55538427c4f0a"><div class="ttname"><a href="class_b_t_d.html#a019e145da18f2cbf5ab55538427c4f0a">BTD::hci_user_confirmation_request_reply</a></div><div class="ttdeci">void hci_user_confirmation_request_reply()</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01375">BTD.cpp:1375</a></div></div>
<div class="ttc" id="class_b_t_d_html_af11ad71d20783d46fe42dd405d10dfda"><div class="ttname"><a href="class_b_t_d.html#af11ad71d20783d46fe42dd405d10dfda">BTD::HCI_Command</a></div><div class="ttdeci">void HCI_Command(uint8_t *data, uint16_t nbytes)</div><div class="ttdef"><b>Definition:</b> <a href="_b_t_d_8cpp_source.html#l01108">BTD.cpp:1108</a></div></div>
<div class="ttc" id="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r_html"><div class="ttname"><a href="struct_u_s_b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html">USB_DEVICE_DESCRIPTOR</a></div><div class="ttdef"><b>Definition:</b> <a href="usb__ch9_8h_source.html#l00105">usb_ch9.h:105</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>